![对文件中的结构进行排序](https://linux22.com/image/1431203/%E5%AF%B9%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%BB%93%E6%9E%84%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
例如我有一个由类似结构组成的文件
name = {
foo = bar;
...
};
因此,文件中有很多这样的结构。
我该如何按名称对它们进行排序(我正在使用,vim
但emacs
肯定也可以)?但是它们的字段未修改?我的意思是
b = {
bfoo = bar;
...
};
a = {
afoo = bar;
...
};
前往
a = {
afoo = bar;
...
};
b = {
bfoo = bar;
...
};
更新 结构也可能包含相同的结构。
b = {
c = {
cfoo = bar;
...
};
...
};
答案1
以下内容适用于 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.
答案2
对于 Emacs,使用 function sort-regexp-fields
- 请参阅 Elisp 手册、nodeSorting
。
您还可以使用sort-subr
更通用的函数 或 函数sort-paragraphs
或sort-pages
。对于后两者,要排序的部分需要由一个或多个空行(用于段落)或换页符(^L
)分隔,并且任何部分内都不需要有这样的字符。