Сортировка по словарю в Vim

Более 10 000 человек группируют CSS-свойства по их типу. У меня начинает болеть голова, когда я только думаю о том, что большинство из них делает это вручную.

Безусловно есть инструмент CSSComb, но при всем моем уважении к Славе Олиянчуку я не доверяю софту, написанному на PHP.

В виме есть встроенная команда :sort, которая сортирует по алфавиту. Этого многим достаточно, но даже если использовать CSS Style Guide от Google, то простая сортировка не покрывает нужды, так ка нужно игнорировать префиксы.

На помощь приходит Meaning sort, который может сортировать настолько сложным образом насколько моих когнитивных способностей уже не хватает (см. pdf-файл).

Итак, для начала надо создать файл со словарем. Свой я взял из CSSComb, который в свою очередь взят из Zen Coding. На каждой строке должно быть одно CSS-правило, без кавычек и запятых. Пример такого файла — gist.github.com/3426801.

Затем в виме выделяем блок кода и вызываем команду :'<,'>!msort -w -s ~/zen-coding-sort -l -q

  • '<,'> — означает операцию над выделенной областью,
  • !msort — вызов команды из терминала,
  • -w — аргумент, означающий что сортироваться будет весь файл (в нашем случае вся выделенная область),
  • -s ~/zen-coding-sort — файл, в котором указан порядок сортировки
  • -l — аргумент, говорящий о том, что каждя новая запись, которую нужно отсортировать нахожится на новой строке,
  • -q — отсутствие вывода какой-либо информации кроме непосредственно отсортированных строк.

Теперь для того, чтобы вызывать команду по нажатию горячей клавишы, нужно дописать в .vimrc

vmap <F3> :!msort -w -s ~/zen-coding-sort -l -q<cr>