对文件中的结构进行排序

对文件中的结构进行排序

例如我有一个由类似结构组成的文件

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

因此,文件中有很多这样的结构。
我该如何按名称对它们进行排序(我正在使用,vimemacs肯定也可以)?但是它们的字段未修改?我的意思是

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-paragraphssort-pages。对于后两者,要排序的部分需要由一个或多个空行(用于段落)或换页符(^L)分隔,并且任何部分内都不需要有这样的字符。

相关内容