2017-06-26 3 views
1

Vimで選択したブロックをソートする方法を探しています。私は今それを行う方法このvimでブロックを並べ替え

{:a 
:c 
:b} 

# after sort, it should be 
{:a 
:b 
:c} 

のようなものを持っているシナリオは、私が選択したブロックの上に並べ替えを実行している、新しいラインに:a:cを入力して、後で戻ってブラケットを配置する必要があります。私はこの余分な操作をしないで並べ替える方法を探しています。

+1

:substituteはそれを行うことができますhttps://vi.stackexchange.com/questions/9869/sorting-a-column-without -altering-other-columns – mbjoe

答えて

1

以下はわずかあなたの努力を軽減しますが、それでも、それを完全に解決しません基本的に、それはコロンの後に来るものに基づいて並べ替えられます、そして、ブラケットを除去するが、それはあなたのために再度挿入しません。

:'<,'>sort /^.\{-}:/ |%s/{\|}//g 

喜んで喜んでくれることを望みます。

1

これを行う方法の1つは、中かっこの内側をレジスタに読み込むことです。

"ayi{ 

これにより、コンテンツ、行、およびそれらの周りに中かっこはコピーされません。あなたが非表示バッファを変更しているよう

次に、あなたは、ソート機能

sort(split(getreg('a'))) 

これが設定されるmodifiableフラグを必要にそれを実行することができます。バッファaを所定の位置にソートします。あなたはそれを中括弧vi{"apの中に貼り付けることができます。

明らかに、関数/マクロまたはコマンドにwhileを入れる必要があります。

1

ここでは、Exコマンドを使用した方法の1つです。範囲のソートは、:global:sortで非常に簡単です。次のコマンドは、中括弧で区切られたもの間の線を並べ替え:

:g/^{/+1,/^}/-1sort 

しかし、ここで合併症が(あなたの例では)、中括弧はとしてに同じ(最初、最後)の行であるということですデータ。最初にそれらを隣接する行に分け、後で取り消す必要があります。プラグインはあなたのために良好であれば、あなたはここを参照してください、_vis.vim_を試すことができ

:%s/{\zs\|\ze}/\r/g 
:g/^{/+1,/^}/-1sort 
:%s/{\zs\n\|\n\ze}//g 
関連する問題