不同运动的 d{motion} 规则
Rule for d{motion} for different motions
给定:
for (int i = 0; i < 10; i++){
_ <---Cursor position
3w
导致
for (int i = 0; i < 10; i++){
_ <---Cursor position
和d3w
导致
fori = 0; i < 10; i++){
_ <---Cursor position
即,即使动作 3w
将光标移动到 i
,i
本身也不会被删除。
另一方面,给定:
for (int i = 0; i < 10; i++){
_ <---Cursor position
%
导致
for (int i = 0; i < 10; i++){
_ <---Cursor position
和d%
导致
for{
_ <---Cursor position
即动作 %
将光标移动到 )
并且 )
本身被删除。
那么,为什么d{motion}
会出现两种不同的效果呢?是否有任何单一的通用规则,其中这两个都是一致的特殊情况?
是的,这是有道理的。在Vim中,一些动议如w
是"exclusive",而另一些动议如%
是“包容性”的。这将决定该动作是否会影响动作的最后一个字符。
您实际上可以通过使用 v
运算符来覆盖运动的“独占”或“包含”状态(请注意,v
在这里用作运算符,而不是启动可视模式就像用作普通模式命令时一样!)所以 dv3w
(或 d3vw
)将删除它登陆字符的第三个单词“包含”的开头,而 dv%
将删除直到下一个匹配的括号“独占”。
在某种程度上,视觉模式有点相似,因为视觉选择在默认情况下是“包含”的,所以 v3wd
的行为类似于 dv3w
。 (虽然这可以被 'selection'
选项覆盖。)
参见:
:help w
:help %
:help exclusive
(与:help inclusive
相同)
:help o_v
:help 'selection'
给定:
for (int i = 0; i < 10; i++){
_ <---Cursor position
3w
导致
for (int i = 0; i < 10; i++){
_ <---Cursor position
和d3w
导致
fori = 0; i < 10; i++){
_ <---Cursor position
即,即使动作 3w
将光标移动到 i
,i
本身也不会被删除。
另一方面,给定:
for (int i = 0; i < 10; i++){
_ <---Cursor position
%
导致
for (int i = 0; i < 10; i++){
_ <---Cursor position
和d%
导致
for{
_ <---Cursor position
即动作 %
将光标移动到 )
并且 )
本身被删除。
那么,为什么d{motion}
会出现两种不同的效果呢?是否有任何单一的通用规则,其中这两个都是一致的特殊情况?
是的,这是有道理的。在Vim中,一些动议如w
是"exclusive",而另一些动议如%
是“包容性”的。这将决定该动作是否会影响动作的最后一个字符。
您实际上可以通过使用 v
运算符来覆盖运动的“独占”或“包含”状态(请注意,v
在这里用作运算符,而不是启动可视模式就像用作普通模式命令时一样!)所以 dv3w
(或 d3vw
)将删除它登陆字符的第三个单词“包含”的开头,而 dv%
将删除直到下一个匹配的括号“独占”。
在某种程度上,视觉模式有点相似,因为视觉选择在默认情况下是“包含”的,所以 v3wd
的行为类似于 dv3w
。 (虽然这可以被 'selection'
选项覆盖。)
参见:
:help w
:help %
:help exclusive
(与:help inclusive
相同):help o_v
:help 'selection'