VIM 选择整行

96
当你的光标在某一行的任意位置时,如何在VIM中选择该行?
我知道你可以使用(v, $)到达行尾,或者(v, ^)到达行首,但是当你使用(v,$,^)时,它逻辑上并没有选择整行,而是从光标开始到行尾,然后切换到光标到行首...所以这种方法当然会失败。

9
我强烈推荐你使用vimtutor。它已经随着你安装的Vim一起安装了,可以教授你有关Vim的所有基础知识。只需在命令行中运行“vimtutor”。 - glts
FDinoff,复制它,如果我记得正确的话。 - appleLover
6
如果你所做的只是复制...那么yy就足够了吗?或者没有换行符的话,使用0y$ - FDinoff
FDinoff,是的,你说得对。谢谢。 - appleLover
5个回答

176

使用键盘快捷键,按下 V 键可选择当前行; 如果你在按下 v 时同时按下 "shift" 键,则需要按两次。


4
你的答案与问题描述稍有不同:它包括行末换行符,即当你“删除”选择时,整行都会消失,而在问题的方法中,只清空了行,但保留了(空)行。 - Ingo Karkat
请注意,这不是 OP 寻找的内容。这会选择行末的新行 (\r),但 0v$ 不会。您可以在选择后尝试使用 p - Kent

88

V将是直接答案。但我很少这样做,因为“选择当前行”通常是更大任务的一部分。此类任务的示例包括复制该行和删除该行。通常有更好的方法来完成整个任务。以下是我能想到的一些任务:

  • 复制该行:yy
  • 删除该行:dd
  • 缩进该行:>><<
  • 选择当前段落:vapvip
  • 从当前行删除到文件结尾:0dG
  • 突出显示当前行以查看光标位置:在 .vimrc 文件中使用 :set cursorline

我使用 V 的一种情况是选择不是段落或其他文本对象的多行。在这种情况下,有一个提示可能对您有用:一旦处于选择模式,您可以使用 o 在选择的起始点和结束点之间跳转光标。


我通常需要选择一行来对齐一段无法通过更简单的标准选择的文本部分。 - Hi-Angel
是的,可能需要使用可视模式V :)另外还有两个小技巧可能会有帮助:
  • 如果你想缩进当前行和下一行,请使用*>j。要删除,请使用dj*。我经常使用这个。
  • 在进行某些操作后,如果您想重新选择之前选择的内容,请使用gv。我一直在使用它。
- Jason Jun Ge

10

虽然这可能需要更多按键。

如果您已经在可视模式下,可以使用o键转到可视选择的另一端。

因此,您可以输入

v0o$

要选择整行,请查看:h visual-change


然而,从评论中可以看出您只想复制整行。

这只需要yy


1
noremap \v v0o$ 添加到您的 vimrc 中,这样您就可以将其用作快捷方式。 - Alan Dong

6
只需要改变操作顺序,你就几乎做到了。
^,v,$

正如@Kent建议的那样:如果该行有前导空格,因为^会跳转到第一个非空字符:

0,v,$

2
我会按 0v$,因为 ^ 会跳到第一个 非空 字符。如果该行有前导空格,则不会选择这些空格。 - Kent
Kent,您能否解释一下当vim看到代码0v$时使用的逻辑? - appleLover
0 将光标移至行首 v 启用可视化模式 $ 移至行尾 - oromoiluig
你是以什么模式进入这个? - Jas0n

2

我知道这个帖子非常老,但我刚刚有了同样的问题。这个帖子是第一个出现的,但我找到了不同于任何在这里找到的答案。使用“V”选择整行。这很容易。只需一个字符即可选择整个当前行。


是的,但如果您删除它,它将删除整行并将其移除。OP想要的是删除该行的内容,但该行仍然保留为空。 - Mike Smith

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