VIM: сортировка по имени функции

#function #sorting #vim

#функция #сортировка #vim

Вопрос:

В моем файле menu.vim много функций.
Было бы возможно выбрать их (мной) и отсортировать их по имени функции?

p.e.
найдите строки из fun! или функция!
для завершения строки

найдите имя функции и отсортируйте весь блок на основе имени функции (от адоя)

Иногда у меня есть одна строка комментария над именем функции.
Можно ли это использовать вместе с ним?

Ответ №1:

Это может быть немного сложно, но вот предварительный способ сделать это:

  • выберите шаблон подстановки, которого нет в вашем исходном файле, например @@@
  • g/fun%[ction]!= /,/endf%[unction]/ s/$n/@@@
  • Затем выберите все однострочники и используйте '<,'>sort /fun%[ction]!=/
  • %s/@@@/r/g

Комментарии:

1. @Benoit, отличная идея :)… но что-то не работает в моем файле. E486: Шаблон не найден: функция %[ction]!= —> Я провел тест с использованием 2 функций: 1) функция! s: меньший размер после (типа) —> endfun 2) функция! s:EmptyBeforeAfterRegex(тип) —> endfun

2. @Benoit, как я могу это проверить? Я пробовал это: echo amp; magic -> вывод -> 1

3. @Remonn: функция не является альтернативным написанием для функции. Поэтому я предлагаю вам автоматически исправить мои собственные ошибки 🙂

4. @Remonn Вероятно, это потому, что Бенуа забыл добавить косые черты вокруг endfun шаблона (а так и должно быть /endf/ , а не /endfun/ ).

5. Кстати, в большинстве случаев вероятность того, что в исходном файле будет один нулевой байт, намного меньше, чем в любых других строках ASCII и большинстве строк unicode, поэтому @@@ , вероятно, лучше заменить на n .