vi / vim中的s,c和r命令有什么区别?

时间:2013-05-07 10:28:19

标签: vim vi

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

示例文本可以是:

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

4 个答案:

答案 0 :(得分:65)

假设您在文档中有foo,并且光标在f上。

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

答案 1 :(得分:22)

: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

答案 2 :(得分:12)

说明

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

c c hange)执行vi / vim运动(例如wjb等)。它将删除从当前光标位置一直到移动结束的字符。请注意,这意味着scl等效(vim文档本身声称它们是同义词)。

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

示例

获取示例文本,然后将光标放在单词“ can”(第3行)的开头。

在vi / vim中键入spl<Esc>

在这里,我们为{strong> s 提供了spl是要插入的文本,<Esc>将退出插入模式。放在一起,它将can更改为plan,如下所示:

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

在vi / vim中键入cwcould<Esc>

c用于 c hange,w告诉c删除下一个单词can。接下来,我们输入用于插入模式的文本could。最后,我们需要再次键入<Esc>才能退出插入模式。该命令将can更改为could,如下所示:

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

在vi / vim中键入rf

在这里,我们输入r代替 r ,然后输入f作为新字符,r用来替换原始字符。这样将can更改为fan

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

注释

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

要最大程度地发挥cyd之类的命令的效用,需要对文本对象(在vim中键入help text-objects)有很好的了解。不在vi中。)

由于r接受字符而不是进入插入模式,因此您可以输入否则很难添加的字符。键入r<C-R>(即r,然后按ctrl-{{ 1}})用ctrl-r字符替换当前字符。这可能令人惊讶,因为在插入模式下按ctrl-r等待另一个要粘贴的键。

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

在命令前输入数字.时,ns删除c项(n的字符或{{1}的移动}),然后插入一次文本。但是,在s之前使用数字c,将随后的n个字符替换为所选字符的多个副本。例如,r可以一次将n替换为4r0

答案 3 :(得分:0)

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

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

命令c基本上执行相同的操作。

命令r很有意思,当您选择一个块后键入ra时,它将把该块中的每个字符替换为a,而不仅仅是留下{{ 1}}。我认为这在某些时候可能非常有用。