我正在尋找一種方法在Vim中的選定塊中排序。該方案是我有這樣的事情在vim中的塊中排序
{:a
:c
:b}
# after sort, it should be
{:a
:b
:c}
我怎麼辦,現在是我進入:a
和:c
新線路,運行排序選定的塊,然後把括號回來。我正在尋找一種排序方式,而無需執行額外的操作。
我正在尋找一種方法在Vim中的選定塊中排序。該方案是我有這樣的事情在vim中的塊中排序
{:a
:c
:b}
# after sort, it should be
{:a
:b
:c}
我怎麼辦,現在是我進入:a
和:c
新線路,運行排序選定的塊,然後把括號回來。我正在尋找一種排序方式,而無需執行額外的操作。
下面將減少你的努力略有但仍不能完全解決這個問題,基本上將整理基礎上,冒號後會發生什麼,然後取出支架,但它不會爲你再次插入:
:'<,'>sort /^.\{-}:/ |%s/{\|}//g
希望它有幫助,快樂vimming。
你可以做到這一點的一種方法是將大括號的內部讀入寄存器。
"ayi{
這將複製內容,行,沒有大括號。
然後你就可以運行插入排序功能
sort(split(getreg('a')))
這就要求modifiable
標誌設置,爲你改變一個不可見的緩衝區。它對緩衝區a
進行排序。然後,您可以將其粘貼到大括號vi{"ap
內。
顯然你應該把這件事放在一個函數/宏或命令中。
這是Ex命令的一種方法。使用:global
和:sort
對範圍進行排序非常簡單。下面的命令排序行之間的那些大括號分隔:
:g/^{/+1,/^}/-1sort
但這裏的併發症是(在你的例子),封閉括號上相同的(第一,最後)行作爲數據。我們需要先將它們分離到相鄰的行,然後再撤消它。 :substitute
能做到這一點:
:%s/{\zs\|\ze}/\r/g
:g/^{/+1,/^}/-1sort
:%s/{\zs\n\|\n\ze}//g
如果插件是對你有好處,你可以嘗試_vis.vim_,在這裏看到:https://vi.stackexchange.com/questions/9869/sorting-a-column-without -altering-其他柱 – mbjoe