2

Например, у меня есть файл, состоящий из таких структур, как

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

Таким образом, в файле есть много таких структур.
Как я могу отсортировать их (я использую vim но с emacs тоже все нормально) по имени? Но их поля не модифицированы? Я имею в виду

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

Идет к

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

Структуры обновления могут также содержать такие же структуры.

b = {
   c = {
       cfoo = bar;
       ...
   };
   ...
};

2 ответа2

3

Следующее будет работать с 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.
0

Для Emacs используйте функцию sort-regexp-fields - см. Руководство по Elisp, Sorting узлов.

Вы также можете использовать функцию sort-subr , которая является более общей, или функцию sort-paragraphs или sort-pages . Для последних двух разделы, которые нужно отсортировать, должны быть разделены одной или несколькими пустыми строками (для абзацев) или символами подачи формы (^L), и в любом разделе не должно быть таких символов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .