Classificar estruturas no arquivo [duplicado]

2

Por exemplo, eu tenho um arquivo que consiste em estruturas como

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

Portanto, no arquivo há muitas estruturas como esta.
Como eu posso classificá-los (eu estou usando vim mas emacs é certamente ok também) pelo nome? Mas tendo seus campos inalterados? Quero dizer

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

Vai para

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

Atualizar Estruturas também podem conter as mesmas estruturas.

b = {
   c = {
       cfoo = bar;
       ...
   };
   ...
};
    
por JagaJaga 18.11.2014 / 23:33

2 respostas

3

A seguir funcionaria com o vim. Talvez mais fácil de envolver em uma função.

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

Em poucas palavras

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.
    
por 19.11.2014 / 08:01
0

Para o Emacs, use a função sort-regexp-fields - consulte o manual do Elisp, nó Sorting .

Você também pode usar a função sort-subr , que é ainda mais geral, ou a função sort-paragraphs ou sort-pages . Para os dois últimos, as seções a serem classificadas precisariam ser separadas por um ou mais caracteres de linhas em branco (para parágrafos) ou por feed de formulário ( ^L ), e não precisaria haver esses caracteres em nenhuma seção. / p>     

por 18.11.2014 / 23:54