ファイル内の構造を並べ替える[複製]


2

たとえば、次のような構造で構成されるファイルがあります

name = {
   foo = bar;
   ...
};

ファイルにはこのような構造がたくさんあります。
それらを名前でソートするにはどうすればよいですか(私は使用してvimいますemacsが、確かに大丈夫です)?しかし、フィールドは変更されていませんか?というのは

b = {
   bfoo = bar;
   ...
};
a = {
   afoo = bar;
   ...
};

に行く

a = {
   afoo = bar;
   ...
};
b = {
   bfoo = bar;
   ...
};

更新 構造にも同じ構造が含まれる場合があります。

b = {
   c = {
       cfoo = bar;
       ...
   };
   ...
};

回答:


3

以下はvimで動作します。おそらく関数にラップする方が簡単です。

:%s/$/$
:g/= {/.,/};/join!
:sort
:%s/\$/\r/g

手短に

1. Replace the EOL with a special character (I've chosen $)
2. Search for "= {" and join all lines up until first "};"
3. Sort 
4. Replace the special EOL character back to a real EOL character.

アップデートを確認してください。
JagaJaga

@JagJaga-ルート要素のインデントが固定されている場合、検索をなどのように変更できます:g/\v^\w \= \{/.,/\v^\};/;/join!\v非常にマジックセットは、あなたが使用できるように、^ラインの開始を示すために、検索で(文字を今、あなたは=をエスケープする必要があり、{と})
リーフェンKeersmaekers

0

Emacsの場合は、関数を使用しますsort-regexp-fields-Elispのマニュアルnodeを参照してくださいSorting

sort-subrさらに一般的なfunction、またはfunction sort-paragraphsまたはを使用することもできますsort-pages。後者の2つの場合、並べ替えられるセクションは、1つ以上の空白行(段落用)またはフォームフィード(^L)文字で区切られる必要があり、セクション内にそのような文字が存在する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.