了解Vim独家运动

时间:2015-03-29 08:43:37

标签: vim text-editor

我指的是:http://vimdoc.sourceforge.net/htmldoc/motion.html#exclusive。 具体来说,以下文字:

  

提及哪些动作是行,包含或排他   命令。但是,有两个例外:

     
      
  1. 如果动作是独占的,并且动作的结束位于第1列,则为   运动结束移动到前一行和运动的末尾   变得包容。示例:}移动到段落后的第一行,   但d}不会包含该行。
  2.   

给出以下文本开头:

This is just a random paragraph.

This is another random paragraph ([S]ome text inside brackets).

This is a third paragraph.

我首先在第S之后的第(字符中点击d}字符。

我在正常模式下执行以下命令 - This is just a random paragraph. This is another random paragraph [(] This is a third paragraph. 。我得到以下内容:

(

光标现在位于第二段中的}。根据上述规则,这是预期的:d是一个独占运动,它使光标转到第2和第3段之间空白行的第1列;根据规则,光标将转到上一行(在完整站点上),并且运动变为包含(在S操作中删除全站点)。

让我们再次拍摄原始文字,再次将光标放在d{上。

如果我执行以下命令 - { - 在正常模式下,我希望得到以下内容,因为S是一个独占运动,它会导致光标转到第1列第1段和第2段之间的空白行:第1段的全文与This is just a random paragraphome text inside brackets). This is a third paragraph. 之间的所有内容都将被删除,包括在内。

This is just a random paragraph.  
[S]ome text inside brackets).

This is a third paragraph.

但实际发生的是:

S

光标位于{{1}}。

这是异常的例外吗?或者我只是把它弄错了?

2 个答案:

答案 0 :(得分:3)

要理解一个独有的动作,重要的是被排除的角色总是在缓冲区末端最远的角色

当你前进的时候,你跳到的那个角色被排除在外,但是当你倒退的时候,它实际上是被排除在光标下的角色。

这是你的第二个例子。 {涵盖的部分以粗体突出显示。

This is just a random paragraph.␤
␤
This is another random paragraph (Some text inside brackets).␤
␤
This is a third paragraph.␤

如您所见,S已被覆盖,但它是目标的最右侧角色,因此 - {是一个独占动作 - 它不受操作影响。

删除前面的所有内容,包括前面一行中的换行符({落在光标处)。所以你所看到的确实是预期的:

This is just a random paragraph.␤
Some text inside brackets).␤
␤
This is a third paragraph.␤

答案 1 :(得分:0)

@glts 经过深思熟虑,我想我明白你现在要说的是什么。基本上我误解了手册的“动作开始”和“动作结束”的含义。简而言之,如果我理解正确,“运动开始”始终是最接近缓冲区起点的位置,“运动结束”是最接近缓冲区末端的位置,无论其中的“方向”如何动作导致光标移动!