在Vim块模式下,如何最有效地选择列?
假设我有一个文本文件,它有如下内容:在Vim块模式下,如何最有效地选择列?,vim,Vim,假设我有一个文本文件,它有如下内容: 1 aa 1234 2 bbbb 5678 3 cc 9abc 1 aa 1234 2 bbbb 5678 3 cc 9abc 4 dd 1234 5 eeeee 5678 6 ff 9abc 如果我将光标放在字符串“aa”中的第一个“a”上,然后按ctrl-v进入块模式,是否有一组按键将光标向下移动到同一列的最后一行,并向右移动光标,以便完全选中该列中最长的单词(在本例中为“
1 aa 1234
2 bbbb 5678
3 cc 9abc
1 aa 1234
2 bbbb 5678
3 cc 9abc
4 dd 1234
5 eeeee 5678
6 ff 9abc
如果我将光标放在字符串“aa”中的第一个“a”上,然后按ctrl-v进入块模式,是否有一组按键将光标向下移动到同一列的最后一行,并向右移动光标,以便完全选中该列中最长的单词(在本例中为“bbbb”)
我目前要做的是在字符串“aa”的第一个“a”上输入列模式,然后向下箭头2,然后向右箭头4。这看起来效率很低,我相信有更好的方法
此外,示例中的最后一行可能不是文件中的最后一行。我可以吃点像:
1 aa 1234
2 bbbb 5678
3 cc 9abc
1 aa 1234
2 bbbb 5678
3 cc 9abc
4 dd 1234
5 eeeee 5678
6 ff 9abc
对于这个问题,我只对选择第1-3行中的整列感兴趣。我不知道如何根据第一列的最长值进行选择,但下面是如何取出整列,包括空格:
ggfa ; get to line 1, first column of the table
C-v}k ; select all the wanted lines as a block selection
$Bh ; unselect last block
x ; take out selection
如果您担心这一点,您可以随时使用插件重新对齐您的列。选择在Vim中通常是不必要的。实际上,甚至定义了一个工作领域 与电子表格程序不同,Vim只知道基于字符的单元格列;不是“逻辑”列。如果您的不规则列不在行的末尾,您将无法直观地选择它 但你的目标不是选择那个专栏,是吗 是否要删除它
:,+2norm dw
是否要附加分号
:,+2norm ea;
你想用双引号括起来吗?环绕.vim进行救援:
:,+2norm ysiw"
你想把它剪下来粘贴到别的地方吗
:,+2 norm "Wdw
等等。看一看。它为列提供文本对象。对于您的示例,您只需将光标定位在中间列中的任何位置,并执行<代码> VIC。< /P> < P>我不知道在选择目标列之后您想做什么。但可以这样做:
faWh<c-v>jB
想法是,将光标(
*
)移动到1 aa*1234
,然后进入分块选择模式,向后选择目标列。这对vimgolf来说是个好问题;-)@我不知道维姆高尔夫。谢谢你提到它!实际上,我确实希望选择列,然后复制、删除或修改选择。在这一点上,我确实更喜欢使用可视块模式,因为它可以让我直观地确认我正在操作我想要操作的数据。谢谢你的建议。我不熟悉这种方法,但我确实看到了它的用处。除非参差不齐的列位于行的末尾,否则无法选择非矩形视觉块,因此,如果不剪切几个字符或选择第二列的部分或不必要的空白,就无法使用视觉块来实现目标。