Vim マクロの機能を使用します。
ファイル内にレコード以外に譜表がなく、最初のレコードが最初の行から始まるとします。また、レベル 1 の開始と終了が同じ行にないこと。そして、すべての {} がよく一致します。
最初のエントリに移動し、マクロを記録して a を登録します ( qa
- 記録の開始q
- 停止)
/{^MV%k:s/\n/EEEEEE/^Mj^
私のものをコピーするか、自分で記録してください: (^M - 文字入力を表します)
- /{^M 次を検索 {
- V%k は、レベル 1 の終わりまでラインバイスを選択しますが、}}} の終了行は選択しません
- :s/\n/EEEEEE/^M シンボル「行末」を選択範囲内の一意の文字列に変更します
- j^ 前のレコードの先頭にスペースがある場合は、1 行下に移動して行頭に移動します。
2 行目からマクロを実行します (最初の行は、マクロを記録したときに既に処理されていると仮定します)。通常モードでは、100000@a - レコードの数よりも大きい任意の数を使用します。最初のレコードがファイルの最初の行にある場合、マクロはすべての行が処理されると停止します。副作用として、最初の行が視覚的に選択されます-選択解除されます。
ファイルを並べ替える
:sort
行末を復元: :%s/EEEEEE/^M/g
注 ^M は文字どおりの入力である必要があります。入力するには、Ctrl-V Enter を使用します。
% は一致する終了 } にジャンプするため、ネストされたレベルで機能します。そのため、すべての {} を適切に一致させることが重要です。
k
マクロは、最初の行に最初のレコードが必要な理由で、上がれなかったときに停止します。空行またはレコード間のレコードではないものは、マクロによって無視されます。
上記の方法は、ファイルに対してうまく機能するはずです。折り畳みでより一般的なアプローチが必要な場合は、/{ と % の代わりにマクロで次のコマンドを使用します。
最初にすべての折り目を開きます
zj - 次の開いている折り畳みの先頭に移動します
]z - 現在の折り畳みの最後に移動します。
残りのマクロは同じです。この方法はより一般的ですが、開いているすべての折り畳み、折り畳みの有効化などに依存するため、信頼性が低いことがわかりました。