我會使用Vim宏的力量。
假設您的文件中沒有任何其他人員,只有記錄和第一條記錄從第一行開始。而且你沒有開始第一級並且在同一條線上結束。你的{}匹配得很好。
轉到第一項,並錄製宏註冊(qa
- 開始錄製q
- 停止)
/{^MV%k:s/\n/EEEEEE/^Mj^
複製礦井或更好的戰績它自己:(^ M - 代表文字輸入)
- /{^ M找到下一個{
- V(%)ķ選擇線-臺鉗直到級別1的端部,但不與收線}}}
- :s/\ n/EEEEEE/^ M將符號'行尾'更改爲選擇內的某個唯一字符串
- j ^一行往下,在前一個記錄具有前導空格的情況下行乞。
運行從第二行宏開始(假設您錄製的宏第一種是已經處理過。) 在正常模式100000 @一 - 使用任何數字比你的記錄數量。如果第一條記錄位於文件的第一行,宏將在處理完所有行後自行停止。作爲副作用,它會直觀地選擇第一行 - 取消選擇它。
排序文件
:sort
恢復線的端: :%S/EEEEEE/^ M /克
注^ M應該是文字輸入。鍵入它使用Ctrl-V輸入
它與嵌套級別一起工作,因爲%跳轉到匹配關閉}。這就是爲什麼您的所有匹配很重要。
當無法跟上k
時,宏將停止,這就是爲什麼您必須在第一行有第一條記錄。空行或任何不是記錄之間的記錄的宏將被宏忽略。
上述方法應該適用於您的文件。如果你想與褶皺一個更通用的方法,然後使用宏來代替/ {和%
以下命令首先打開所有的摺疊
ZJ - 去到下一個打開的摺疊的開始
] z - 轉到當前摺疊的結尾。
宏的其餘部分是相同的。 這種方法更一般,但我發現它不太可靠,因爲它取決於所有摺疊打開,摺疊啓用等。
來源
2012-11-25 19:56:13
ISQ