输入键在命令模式下的含义是什么?

时间:2014-06-06 15:30:06

标签: vim

到目前为止,我总是用y2yd2d猛拉或删除2行。

我发现你也可以y1CR(CR 输入)。除了命令上显示的数字1之外,它实际上还会强行两个行。

它也显示在底部2 lines yanked,使用y2y不会发生。

我在vim help找不到任何提及。这引出了两个问题:

  1. 使用输入执行这些命令时,除了额外的行之外还有其他区别吗?
  2. 在更广泛的意义上,输入应该在vim中意味着什么?
  3. 修改:虽然有很多答案,但如果y2jy1<CR>在每种情况下确实相同,则无人问津,如果是,为什么{{1} }仅出现在2 lines yanked命令的底部。

4 个答案:

答案 0 :(得分:5)

{count}<CR>表示“向下{count}行。”

真的不难找到:见:help <CR>

我倾向于选择2yy2dd;它在语义上更清晰,更容易打字。从语法角度来看,y2y听起来很奇怪:“猛拉两次”,而2yy听起来几乎像普通(yoda)英语:“两次猛拉”。

答案 1 :(得分:5)

Vi命令是计数,动作和动作的组合。 (后两者中至少有一个必须存在:动作或动作。否则你有一个挥之不去的计数,等待更多的输入。)

y1CR表示计数为1,动作为#34;转到下一行的开头#34;并且动作是&#34; yank&#34;。 &#34;转到下一行的开头(只做一次),然后划出动作跨越的行&#34;。当然,数为1是多余的。

  

关于动作和行动的结合,你可能已经注意到它们并没有按字面意思组合;某些组合遵循特殊规则。例如,w动作转到下一个单词的开头,d动作(删除)与dw结合,使得光标下的单词和空格所有下一个单词都被删除了。但是,cw组合(更改单词)仅删除单词,直到后面的空白,留下空格。在这种情况下,c不会对w所执行的精确动作采取行动,而是采用c通常更有意义的调整动作。

我无法重现y2j无法打印被拉扯的行数的行为。在Ubuntu上的Vim 7.3中,3yyy3yy2CRy2j都报告3 lines yanked(如果存在至少3行)。如果少于3行被抽出,则所有这些命令都是静默的。 (例如,它们执行得太接近缓冲区的最后一行,其中只剩下两行或更少的行,或者重复计数减少到2yyy2yy1CR和分别为y1j。)

Vim似乎有三行阈值来报告此状态消息。这可能在版本之间发生了变化。

答案 2 :(得分:4)

输入从当前行移动到下一行,因此其范围包含两行。

y之类的命令与移动命令相结合,将应用于移动命令指定的文本范围。例如,w从当前位置向前移动到下一个单词的开头,因此yw会拉动该范围内的所有文字。

类似地,y Enter 适用于 Enter 命令所涵盖的两条线 - 并且由于该动作是面向行的,因此它适用于两条完整的线,而不是受起始位置影响的某些子集。

答案 3 :(得分:1)

另一种方法是y<CR>。我经常使用yjdk等内容。