如何在Vim中复制当前行及其上面的行?

3
我需要的是拉取当前行和上一行。例如在以下示例中:
3   My test line
4   Line above current line
5   My current line |(cursor)
6   Line below current line

当我的光标在第5行时,我该如何复制第5行和第4行?
3个回答

9

yk可以完成此操作,如向上移动一行的拖曳,因为y将接受下一个击键作为运动,而k单独表示向上运动一行。

如果您需要光标返回原始位置,只需添加j,如ykj。您可能会看到光标在屏幕上不太优雅地移动,但它能完成工作。


但是我希望我的光标最终停留在当前行。 - RanRag
我真是太傻了,忘记了我可以使用 j 键向下移动一行。 - RanRag

6
对于这个简单的情况,yk就可以解决问题了。这是yank命令后跟随着向上一行的动作。
通常使用yNk,例如y3k来复制当前行和前面三行。
如果您需要在复制后返回光标位置,请设置一个标记,并在执行yk命令后返回该标记:
mmyk`m

如果您只需要保持在开始复制的同一行上,而不是相同的光标位置,使用ykj更短。

2
如果我想回到上一个移动之前,我倾向于使用<c-o>。 - Tshirtman

3

除了其他答案中已经提到的普通模式命令外,还可以在相应的行范围上使用:yank Ex命令。例如,要复制当前行以及上一行(不移动光标),请运行:

:-,y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接