外部GNU BinUtils"排序" by column赢得了VIM的工作

时间:2014-01-04 00:03:47

标签: bash sorting vim binutils

我在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)对其进行排序?

谢谢。

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