如何在Vim中快速选择(内部)按行的内容

9

Vim有一些非常有用的文本动作,比如ibi)i}等,可以快速选择文本的一部分。但是,我经常需要在按行模式下选择一个内部块。例如(带有行号):

1:    $foo = array(
2:        'bar' => 'Bar',
3:        'quux' => 'Quux',
4:    );

现在,当我的光标在第2或第3行某处时,我按下vibvi),Vim会选择第2、3行和第4行缩进的空格。但我只想选择第2和第3行。我尝试过使用VibVi),但它们与小写的v做的一样。

有没有简单的文本移动或其他快速方式可以在行模式下选择一个内部块?

3个回答

4

我可能因此得到负分,但是只要知道需要多少行,我会进行上下移动,例如V3jV2k

我有一个绑定可以在绝对行号和相对行号之间切换(:set relativenumber),所以只要它们都在屏幕上,就很容易识别。


这是针对特定问题的正确方法,“relativenumber”在很大程度上有所帮助,特别是当有一堆行(而不仅仅是几行)时。 - alfredodeza
感谢relativenumber设置。我之前不知道它的存在。不幸的是,我使用的是Debian Squeeze,它自带的Vim版本是7.2,并不支持该功能。 - Sander Marechal

3

我认为拥有你所描述的行为是非常好的。如果你决心这样做,那么你可以使用Kana的textobj-user框架来创建自己的自定义文本对象。我曾经用它创建过用于处理Ruby块的文本对象,发现这样做非常容易。


自定义文本对象听起来非常有用。谢谢! - Sander Marechal

2
我最终找到了一个更简单的方法:vim-indent-object 可以让我基于缩进级别选择文本区域。考虑到我的源代码总是有很好的缩进,这几乎是相同的事情。
现在,如果我在示例中的第2或第3行上,我只需按下 vii 来选择内部缩进对象,它会选择第2和第3行。太棒了!

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