【发布时间】:2017-06-05 02:55:15
【问题描述】:
这是a link我在stackoverflow中找到的关于这个问题的。
但如果没有具体的例子,我仍然无法理解“更改内部单词”和“更改单词”之间的区别。
我在我的vim中测试了这两个命令,最后发现没有区别,请举个例子帮助我理解,谢谢!
【问题讨论】:
-
注意:vi/vim knowledge 有一个早期的 SE 站点
标签: vim
这是a link我在stackoverflow中找到的关于这个问题的。
但如果没有具体的例子,我仍然无法理解“更改内部单词”和“更改单词”之间的区别。
我在我的vim中测试了这两个命令,最后发现没有区别,请举个例子帮助我理解,谢谢!
【问题讨论】:
标签: vim
以上答案涉及如何他们表现不同,我想分享一些关于为什么他们表现不同的想法。
首先,在 vim 的世界中,w 和 iw 具有不同的语义,都可以看作target(见下文):
w 中的 cw 指的是 Motion 对象iw in ciw 指的是TextObject
其次,在 Vim 编辑中,Operator(在您的情况下为c/change,以及y/yank、d/delete、=/indenting、=/indenting、>/shifting 等)和目标 strong>(在您的情况下为w 和iw)与使用visual selection + operator 相比,可以帮助您以更少的击键次数实现您想做的事情。
TextObject 定义目标范围(开始和结束位置)。
Motion 本质上是用来移动光标的,所以它只定义了 final-target-position(移动的目的地)。
一些值得阅读的好材料:
:h motion.txt 第 4、5 部分【讨论】:
ciw 中,文本对象是iw 而不是w,它代表inner word
请注意,cw 默认情况下有点“不标准”的行为,因为它的行为与ce 完全一样:它只工作到当前单词的结尾(如e、ce、 de, ye) 而不是在下一个单词的开头包含空格(如w、dw、yw)。
因此,我建议将这些映射添加到您的 vimrc:
" Have `cw` adhere to its actual movement `w`, instead of duplicating `ce`.
nnoremap cw dwi
nnoremap cW dWi
并习惯于通常使用ce。键入 ce 实际上比 cw if you养成在c之后用无名指而不是中指按e的习惯。
如果您希望将cw 保留为与ce 重复的默认分配,则可以通过额外的击键访问其“正确”功能:dwi(或vwc)。
(请注意,我发现 dwi 比 cw 打字效率更高,因为键的位置,尽管有额外的键。)
第二个映射的解释:W (Shift+w) 适用于 vim 所谓的“WORDS”,它计算每个非空白字符,例如标点符号,作为单词的一部分;而w 适用于“单词”,它只包含不间断的字母、数字和下划线序列(默认情况下)。
【讨论】:
这是一个例子:
foo bar baz
^
在这种情况下,键入 cw 和 ciw 将给出相同的结果(光标位于 'bar' 的 'b' 上)。 考虑一下:
foo bar baz
^
cw 将产生
foo b baz
^
ciw 将产生的位置
foo baz
^
因此它会更改整个单词,而不管光标位置如何。非常有用,我喜欢这个命令。
caw(或aw)命令也非常有用:
foo bar baz
^
-> caw
foo baz
^
aw 也包含空格。使用v(可视)命令尝试这些命令,看看它们都做了什么。另外,请阅读motion.txt,第 6 部分。
【讨论】:
someword
^ (cursor)
顺时针
some_
^ (cursor)
从光标变为词尾。离开单词的开头。
对比
someword
^ (cursor)
ciw
_
^ (cursor)
从头到尾改变整个单词。
【讨论】: