...

пятница, 12 декабря 2014 г.

[Из песочницы] Vim FileStyle: проверяем открытый файл на соответствие настройкам Vim

Зачем это нужно




При командной разработке важным является соблюдение определенного кодинг стандарта. Речь не всегда идет об именовании переменных, функций и т.д. Перечисленное выше во многом вопрос опыта и умения формулировать мысли в тексте. Кодинг стандарт часто начинается с определения следующих вещей:

  • Пробелы или табуляция

  • Длина строки




Несоблюдение приведенных выше параметров стиля разными людьми в пределах одного файла ведет с следующим проблемам:

  • Изрезанность кода

  • Необходимость горизонтального скроллинга




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


Чтобы сразу при открытии файла видеть подобные проблемы, я написал небольшой плагин.



Почему именно плагин




На это было несколько причин:

  1. Я уже почти 2 года на постоянной основе пользуюсь Vim для редактирования кода, и мне давно хотелось написать какой-нибудь плагин

  2. Использование стандартных настроек вроде listchars не дает подсветки в случае использования пробелов для отступов при опции noexpandtab

  3. Задание зависимости от настроек в ftplugin




Функционал





  • Подсветка пробельных символов в соответствии с опцией expandtab: если опция включена, то символы табуляции подсвечиваются красным, в противном случае пробелы в начале строки подсвечиваются желтым

  • Подсветка пробельных символов в конце строки

  • Подсветка части строки превышающей длину, заданную опцией textwidth




Плагин изнутри




В основе плагина лежит функция matchadd(). Эта функция ищет в открытом буфере совпадения с заданным паттерном и подсвечивает его в соответствии с указанной схемой подсветки.

Например, мы хотим подсветить все пробелы в буфере желтым:



:highligh Spaces ctermbg=Yellow guibg=Yellow
:call matchadd('Spaces', '\s\+')




Общая функция подсветки выглядит следующим образом:

function FileStyleHighlightPattern(highlight)
call matchadd(a:highlight['highlight'], a:highlight['pattern'])
endfunction




На вход принимается словарь с именем схемы подсветки и паттерном для сравнения.

Для того, чтобы плагин автоматически запускал проверку паттернов, необходимо было добавить автоматические команды при инициализации плагина:



augroup filestyle_auto_commands
autocmd!
autocmd BufReadPost,BufNewFile * call FileStyleActivate()
autocmd FileType * call FileStyleCheckFiletype()
autocmd WinEnter * call FileStyleCheck()
augroup end




Стоит отдельно оговорить, для чего нужен обработчик события FileType. Его пришлось добавить для того, чтобы плагин не отрабатывал на help файлах, так как их содержимое может быть произвольным и никак не согласовываться с текущими настройками, а так же не может быть отредактировано из окна помощи.

Обработчик WinEnter нужен для того, чтобы при делении окна (:split) в открытом окне так же была подсветка.


Так выглядит конечный результат:



Скачать можно по ссылкам: vim.org | GitHub


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Want something else to read? How about 'Grievous Censorship' By The Guardian: Israel, Gaza And The Termination Of Nafeez Ahmed's Blog


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

Отправить комментарий