到目前为止,我总是用y2y
或d2d
猛拉或删除2行。
我发现你也可以y1CR
(CR 输入)。除了命令上显示的数字1之外,它实际上还会强行两个行。
它也显示在底部2 lines yanked
,使用y2y
不会发生。
我在vim help找不到任何提及。这引出了两个问题:
修改:虽然有很多答案,但如果y2j
和y1<CR>
在每种情况下确实相同,则无人问津,如果是,为什么{{1} }仅出现在2 lines yanked
命令的底部。
答案 0 :(得分:5)
{count}<CR>
表示“向下{count}
行。”
真的不难找到:见:help <CR>
。
我倾向于选择2yy
或2dd
;它在语义上更清晰,更容易打字。从语法角度来看,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中,3yy
,y3y
,y2CR
和y2j
都报告3 lines yanked
(如果存在至少3行)。如果少于3行被抽出,则所有这些命令都是静默的。 (例如,它们执行得太接近缓冲区的最后一行,其中只剩下两行或更少的行,或者重复计数减少到2yy
,y2y
,y1CR
和分别为y1j
。)
Vim似乎有三行阈值来报告此状态消息。这可能在版本之间发生了变化。
答案 2 :(得分:4)
输入从当前行移动到下一行,因此其范围包含两行。
y
之类的命令与移动命令相结合,将应用于移动命令指定的文本范围。例如,w
从当前位置向前移动到下一个单词的开头,因此yw
会拉动该范围内的所有文字。
类似地,y
Enter 适用于 Enter 命令所涵盖的两条线 - 并且由于该动作是面向行的,因此它适用于两条完整的线,而不是受起始位置影响的某些子集。
答案 3 :(得分:1)
另一种方法是y<CR>
。我经常使用yj
或dk
等内容。