我在VIM中有一个简单的数据表,由两组可变长度字符串组成。例如:
test bob
check mike
review tom
test2 tom
presentation mike
通过使用 CTRL + V 选择VIM中的所有五行,我选择通过column
来使其“更漂亮”,选择视觉上全部五行,然后点击 SHIFT + :组合键进入命令模式,然后发出命令'<,'>!column -t
,使其看起来像:
test bob
check mike
review tom
test2 tom
presentation mike
现在,我想最后按第二个列进行排序。我尝试使用'<,'>!sort -n -k2
进行视觉块选择,但我得到:
check mike
presentation mike
review tom
test bob
test2 tom
所以,它排序,但只有第一列。认为这可能使用文字列号而不是假设 SPACE 作为分隔符,并且考虑连续分隔符,我再次尝试使用'<,'>!sort -n -k15
,但我仍然得到相同的不良行为。
如何通过第二列按字面列号(即:15)或可视列号(即:2)对其进行排序?
谢谢。
答案 0 :(得分:3)
这个命令:
%sor r /\S\+$/
产生
test bob
check mike
presentation mike
review tom
test2 tom
检查:h :sort
了解详情
您的逐块视觉选择无助于排序(内置或外置)。因为它传递了range
,这是基于行的,即使选择以块/列方式查看。 :h range
了解详情。如果要使用外部排序,则应该与shell中的完全相同。
答案 1 :(得分:1)
尝试像这样设置分隔符:
'<,'>!sort -t' ' -k2
(并非没有-n标志)
从手册(man sort
):
-t, --field-separator=SEP
use SEP instead of non-blank to blank transition
对我而言:
check mike
presentation mike
review tom
test2 tom
test bob
成为:
test bob
presentation mike
check mike
review tom
test2 tom