56

我试图从有关 Vim 的 OReilly 书中澄清这一点,但所提供的示例还不够清楚。通过示例/用例而不是直接解释进行澄清将非常有帮助。

示例文本可以是:

With a
screen editor,
you can
scroll the page, move the cursor.
4

4 回答 4

100

假设您foo在文档中,并且光标位于f.

现在,按下rb会将其更改为boo,您将返回命令模式。按下sb将完成相同的操作,但您处于插入模式并且可以插入更多字符。最后,c需要某种运动;例如,您可以键入cw以删除整个单词并进入插入模式。另一方面,cl与 基本相同s

于 2013-05-07T10:39:31.543 回答
25
:help c
:help s
:help r

简单的。

与其在这本书上浪费时间,不如学习如何使用 Vim 很棒的内部文档:

:h s
:h :command
:h 'option'
:h function()
:h ctrl-x
:h i_ctrl-x
:h subject
:h foo<Tab>
:helpgrep foo
于 2013-05-07T19:55:09.917 回答
25

说明

s( s替代) 将删除当前字符并将用户置于插入模式,光标位于两个周围字符之间。 3s例如,将删除接下来的三个字符并将用户置于插入模式。

c( c hange) 采用 vi/vim 动作(例如w, j, b, 等)。它删除从当前光标位置到移动结束的字符。请注意,这意味着s相当于cl (vim 文档本身声称这些是同义词)。

r( r eplace) 根本不会进入插入模式。相反,它需要另一个字符,然后它将用来替换当前光标下的字符。

例子

获取您的示例文本,并将光标放在单词 ' ' 的开头can(第 3 行)。

输入spl<Esc>vi/vim。

在这里,我们有s替代品 pl是要插入的文本,<Esc>将退出插入模式。放在一起,会变成can这样plan

With a
screen editor,
you plan
scroll the page, move the cursor.

输入cwcould<Esc>vi/vim。

c用于c变化,并w告诉c通过下一个单词删除,can. 接下来我们输入插入模式的文本,could. 最后,我们需要<Esc>再次输入退出插入模式。命令会变成can这样could

With a
screen editor,
you could
scroll the page, move the cursor.

输入rfvi/vim。

这里我们输入rfor r eplace,然后f作为新的字符r用来替换原来的字符。这会can变成fan这样:

With a
screen editor,
you fan
scroll the page, move the cursor.

笔记

vi/vim 中的简单命令有很多隐藏用途,突出了这些命令之间的更多差异。由于我几乎总是使用 vim 而不是 vi,因此这些功能可能是 vim 独有的,我不确定。

最大化命令的效用,如c, y, 和d采取动作需要很好地掌握文本对象(help text-objects在 vim 中输入。这些不在 vi 中。)

因为r需要一个字符而不是进入插入模式,所以您可以输入难以添加的字符。键入r<C-R>(即r,然后 ctrl- r)将当前字符替换为 ctrl-r 字符。这可能令人惊讶,因为在插入模式下按 ctrl-r 会等待另一个键,即要粘贴的寄存器。

所有这三个命令都可以用.命令重复,用给定的文本替换、更改或替换相对于光标的相同区域。

n在命令前键入数字时sc删除n项目(字符为s,或移动为c),然后插入文本一次。但是,n在 之前使用数字会将下一个字符替换为所选字符的多个副本。例如,可以一次全部 替换。rn4r012340000

于 2018-08-14T06:43:35.743 回答
0

您可以在可视块模式下尝试这些命令(按下<C-v>进入),它们的作用略有不同。

当您选择一个字符块然后键入s时,它将立即删除该块并进入插入模式,您接下来输入的任何内容都将插入到受视觉块选择影响的每一行的相同位置。

命令c基本上做同样的事情。

有趣的是 command r,当您ra在选择一个块后键入时,它将将该块中的每个字符替换为,a而不是只留下一列a。我认为这在某些时候会非常有用。

于 2019-12-05T09:01:04.213 回答