Yank n向上排列而不移动

时间:2011-03-28 14:14:40

标签: vim

要向下划线7行而不移动光标,我可以7yy。是否可以向上执行相同操作,而不是使用宏或重新映射?

3 个答案:

答案 0 :(得分:29)

您可以使用带有范围的:yank命令来完成此效果。

:.-6,.yank

范围说明:

  • .或点表示当前行
  • .-6表示当前行减去6
  • .-6,.是当前行减去6到当前行
  • 这可以缩写.-6缩写为-6,只是-6,.yank
  • 当前行也假设在范围的末尾,因此-6,yank
  • yank命令可以缩短为只:y给我们-6,y

最终命令:

:-6,y

获取更多帮助:

:h :yank
:h [range]

答案 1 :(得分:6)

您可以执行以下操作:

6yk6j

这将会拉动前面的6行和当前的行,但是courser会移动。 6j跳回到之前的位置。

答案 2 :(得分:6)

您可以简单地移动到一个动作,然后使用'[']将光标返回到该位置。

6线上扬,加上当前总共7线:

y6u

然后,使用一些鲜为人知的标记:

'[ -> to the first character on the first line of
      the previously yanked text (or changed)
`[ -> to the first character of the previously yanked text
'] -> to the first character on the last line of yanked text
`] -> to the last character of the preciously yanked text

所以:

y6u']
y6u`]

您可以根据自己的需要使用两种解决方案。前者将光标移回光标所在行的第一个字符,后者移动到该行的最后一个字符。

但还有另一个标记可能很方便:'^。它表示离开插入模式时光标的最后位置。

'^ -> moves to the beginning of the last line when leaving insert mode.
`^ -> moves to the exact position where insert mode was last left.

然后是另外两个解决方案:

y6u'^
y6u`^

那不是结束!如果您假装继续插入文本,则可以使用gi命令。它会将您移至`^标记并进入插入模式。然后我们有第五个解决方案:

y6ugi

我希望其中一个符合您的需求!