不同运动的 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 将光标移动到 ii 本身也不会被删除。

另一方面,给定:

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'