2017-08-30 36 views
4

分隔的單詞在Python代碼,我經常碰到的import語句是這樣的:對線路如何排序逗號Vim中

from foo import ppp, zzz, abc 

有什麼Vim的伎倆,像:sort,進行排序,以這樣的:

from foo import abc, ppp, zzz 

回答

8

是的,有:

%s/import\s*\zs.*/\=join(sort(split(submatch(0), '\s*,\s*')),', ') 

的關鍵要素是:

要回答的評論,如果你想申請一個可視選擇替換,就變成:

'<,'>s/\%V.*\%V\@!/\=join(sort(split(submatch(0), '\s*,\s*')), ', ') 

新的關鍵要素是這個時候:

  • :h /\%V,說下一個字符匹配應屬於我選用的視覺選擇
  • :h /\@!,爲了表達(與\%V合併),下一個字符應爲而不是屬於視覺選擇。下一個字符不會保存在匹配的表達式中。

順便說一句,我們還可以使用si_CTRL-R_=交互,或把它放在一個映射(這裏觸發µ):

:xnoremap µ s<c-r>=join(sort(split(@", '\s*,\s*')), ', ')<cr><esc> 
+0

我可以直觀地標記逗號分隔的列表部分並對其應用此操作嗎?這可能更一般,因爲我可以將其應用於其他類型的Python代碼(如實際列表的元素)。 –

2

或者,您可以執行以下步驟:

  1. 將要分類的詞移動到下一行:

    from foo import 
    ppp, zzz, abc 
    
  2. 在單詞列表的末尾添加一個逗號:

    from foo import 
    ppp, zzz, abc, 
    
  3. 選擇例如單詞列表 - v。現在點擊,然後輸入!xargs -n1 | sort | xargs。它應該是這樣的:

    :'<,'>!xargs -n1 | sort | xargs 
    

    命中輸入

    from foo import 
    abc, ppp, zzz, 
    
  4. 現在刪除後面的逗號和單詞列表(例如 - Ĵ)合併回原線。

    from foo import abc, ppp, zzz 
    

有Vim的插件,這可能對你有用:

+1

AdvancedSorters插件看起來非常有用。謝謝! :) –

+0

@AshwinNanjappa我很高興我能幫你;) –

0

我來到這裏尋找一種快速的方式進行排序逗號分隔的列表,在一般情況下,如

relationships = { 
     'project', 'freelancer', 'task', 'managers', 'team' 
    } 

我的習慣是用換行符搜索/替換空格並調用shell排序,但這是一個很痛苦的事情。

我最終找到了Chris Toomey的sort-motion插件,這就是門票:https://github.com/christoomey/vim-sort-motion。強烈推薦。