次のような複数のタブ区切りの列を含むテキスト ファイルがあるとします。
1 foo bar
3 bar foo
2 番目または 3 番目の列に基づいて並べ替えるにはどうすればよいですか?
:'<,'>!sort -n -k 2
ビジュアル モードでの使用や のようなものを読みまし:sort /.*\%2v/
たが、これらのコマンドはどれも機能していないようです。
組み込みsort
コマンドを使用できます。
2 番目のタブ区切り列:sort /[^\t]*\t/
で並べ替えるには、2 番目の列を並べ替えるために使用できます。3番目の列をソートするには、使用できます:sort /[^\t]*\t\{2}/
通常は、数値を列番号から 1 を引いた値に置き換えます (つまり、最初の列がインデックス 0 のインデックス列)。
sort
via と呼ばれる外部:'<,'>!sort -k 2
は機能します。-n
フラグ (数値ソート用) が指定されているが、使用する列が非数値である場合にのみ、結果は期待どおりになりません。したがって、 external を使用するには、例sort
をドロップするだけです。-n
備考:私にも:'<,'>sort /.*\%2v/
効果があります。
悲しいことに、同じファイル内のビジュアル ブロックを使用したり、1 つのコマンドを使用したりすることはでき:ex
ないようCtrl-vです。selection
:'<,'>sort
少しハックな「解決策」は、視覚的なブロックで並べ替えたいものを選択し、別のウィンドウで並べ替えて、変更を元のファイルに適用することです。このようなもの:
Ctrl-v+ selection
+ x+ :tabnew
+ p+ :sort
+ Ctrl-vG$x+ :q
+ `[P(整列ペースト)
出典: Barry Arthur - Sort Me A Column (bairui from #vim@freenode)。