在Vim中命令cw和ciw之间的区别是什么?

时间:2017-01-20 07:28:34

标签: vim

这里a link我在stackoverflow中找到了这个问题。

但是如果没有一个具体的例子,我仍然无法理解"改变内心词"和#34;改变单词"。

我在我的vim中测试了这两个命令,最后发现没有差异,请举个例子来帮助我理解,谢谢!

4 个答案:

答案 0 :(得分:17)

以下是一个例子:

foo bar baz
    ^

在这种情况下键入cw和ciw将得到相同的结果(光标位于'''')。 考虑一下:

foo bar baz
     ^

cw将产生

foo b baz
     ^

ciw将产生

foo  baz
    ^

因此无论光标位置如何,它都会改变整个单词。非常有用,我喜欢这个命令。 非常有用的还有caw(或aw)命令:

foo bar baz
     ^
-> caw
foo baz
    ^

aw也包含空格。使用v(可视)命令尝试这些命令,以查看它们的作用。另请阅读motion.txt,第6部分。

答案 1 :(得分:6)

上面的答案解决了 HOW 他们的行为不同,我想就为什么分享他们表现不同的想法。

首先,在vim的世界中,wiw具有不同的语义,并且都可以被视为target(见下文):

    {li} w cw中的Motion引用iw对象
  • ciw中的TextObject引用c/change

其次,在Vim编辑中,运算符(在您的情况下为y/yankd/delete=/indenting>/shifting,{{1}与使用w + {{相比} 目标(在您的情况下为iwvisual selection)帮助您通过更少的击键来实现您想要做的事情1}}。

  

TextObject定义目标范围(开始和结束位置)。

     

Motion主要用于移动光标,因此它只定义最终目标位置(要移动的目标)。

要阅读的一些好材料:

  1. operator第4部分,第5部分
  2. 来自atom-vim-mode-plus
  3. 的AdvancedTopicTutorial

答案 2 :(得分:2)

someword
    ^        (cursor)

CW

some_
    ^        (cursor)

从光标到单词结尾的变化。留下了这个词的开头。

相比
someword
    ^        (cursor)

CIW

_
^            (cursor)

从头到尾更改整个单词。

答案 3 :(得分:2)

请注意,cw有一点不合标准的'默认情况下,它的行为与ce完全相同:它只能在当前单词结束时使用(例如ecede,{{1而不是在下一个单词的开头之前包含空格(例如yewdw)。

因此,我建议将这些映射添加到yw

vimrc

并习惯于使用" Have `cw` adhere to its actual movement `w`, instead of duplicating `ce`. nnoremap cw dwi nnoremap cW dWi 。键入 c e 实际上比 c w 更有效,更不尴尬如果你形成习惯在 c 之后用无名指而不是中指按 e

如果您希望将ce的默认分配重复cw,则可以访问其正确的ce。具有额外按键的功能:dwi(或vwc)。

(请注意,我发现dwi输入的效率比cw更高,因为键的位置,尽管有额外的键。)

第二个映射的说明:W Shift + w )适用于vim调用" WORDS",它计算每个非空白字符,例如标点符号,作为WORD的一部分;而w适用于"单词",它只包含不间断的字母,数字和下划线序列(默认情况下)。

相关问题