这里a link我在stackoverflow中找到了这个问题。
但是如果没有一个具体的例子,我仍然无法理解"改变内心词"和#34;改变单词"。
我在我的vim中测试了这两个命令,最后发现没有差异,请举个例子来帮助我理解,谢谢!
答案 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的世界中,w
和iw
具有不同的语义,并且都可以被视为target
(见下文):
w
cw
中的Motion
引用iw
对象
ciw
中的TextObject
引用c/change
其次,在Vim编辑中,运算符(在您的情况下为y/yank
,d/delete
,=/indenting
,>/shifting
,{{1}与使用w
+ {{相比} 目标(在您的情况下为iw
和visual selection
)帮助您通过更少的击键来实现您想要做的事情1}}。
TextObject定义目标范围(开始和结束位置)。
Motion主要用于移动光标,因此它只定义最终目标位置(要移动的目标)。
要阅读的一些好材料:
operator
第4部分,第5部分答案 2 :(得分:2)
someword
^ (cursor)
CW
some_
^ (cursor)
从光标到单词结尾的变化。留下了这个词的开头。
与
相比someword
^ (cursor)
CIW
_
^ (cursor)
从头到尾更改整个单词。
答案 3 :(得分:2)
请注意,cw
有一点不合标准的'默认情况下,它的行为与ce
完全相同:它只能在当前单词结束时使用(例如e
,ce
,de
,{{1而不是在下一个单词的开头之前包含空格(例如ye
,w
,dw
)。
因此,我建议将这些映射添加到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
适用于"单词",它只包含不间断的字母,数字和下划线序列(默认情况下)。