2009-08-30 235 views
30

使用Vim 6.0。假設我正在編輯此文件:如何對Vim中的數字和文字列進行排序

sdfsdg 
dfgdfg 

34  12 
2  4 
45  1 
34  5 

如何對第二列進行排序?

+1

相關,如果你的第二個(或第三,第四......)列碰巧是第一個帶有十進制數的列,請注意,您可以簡單地使用':sort n',如幫助所示:「使用[n] ...排序在行中的第一個十進制數上完成。 ..「這不適用於你的情況,但可能對某些人來說。 – Rabarberski 2012-11-16 14:42:20

回答

35

如果你有體面的外殼可供選擇你的號碼,然後運行命令

:'<,'>!sort -n -k 2 

如果你要去型這在可視化模式,鍵入冒號後,標誌「<」>將自動appead,和你只需要輸入其餘的內容。

這種類型的命令(:[motion]!)被稱爲篩選。您可以通過查閱vim的幫助人們瞭解更多:

:h filter 
+0

這是一個例子:'<,'>!sort -n -k 2? – vehomzzz 2009-08-30 22:18:02

+0

我還收到一個錯誤:E20:標記未設置 – vehomzzz 2009-08-30 22:20:38

+4

這是一個可視模式命令--Pavel使用'V'來選擇一個範圍,然後鍵入':',它會自動插入視覺選擇範圍''<,'>'然後鍵入實際的命令'!sort -n -k 2'。您當然可以用任何方式指定範圍 - 如果您好奇,請參閱':help range'。 – Cascabel 2009-08-30 23:13:39

29

排序方式使用Vim的sort命令,例如在第二列ň所有行

:sort /.*\%2v/ 

參考:vimtips.txt

+5

哇,vim有內部的排序程序!那個混蛋有多大? – 2009-08-30 22:01:07

+0

在vim 6.0中沒有排序命令:( – vehomzzz 2009-08-30 22:05:52

+0

任何你無法升級的原因vim.org確實說7.2是最新的穩定版 – 2009-08-30 22:09:47

15

對於vim7我會去:

:sort n /.*\s/ 

這會忽略的數字給出的正則表達式匹配的文本進行排序。在你的情況下,它是第二列。

11

分類由第二列通過在視覺模式中選擇它(例如控制 + v),然後運行:

!sort 

或通過第三列進行排序

sort -k 3 

:sort /.*\%3v/ 

或者使用Shift + V命令選擇要排序的行。然後輸入

!sort -k 3n 

,或者使用下面的代碼來告訴Vim跳過前兩個單詞中的每一行和排序任何如下:

:%sort /^\S\+\s\+\S\+\s\+/ 

或即排序8號線:

:sort /.*\%55v/ 

「虛擬」規範是列的絕對數量,它將空格+製表符視爲單個字符(簡言之,它不會將製表符計爲八個空格),

所以通過最後一列進行排序:

:%sort /\<\S\+\>$/ r 
+0

這應該是答案。 'sort!'也很好。 – firedev 2014-10-29 12:29:15

相關問題