Иногда бывает очень полезной автоматическая вставка некоторого частовстречающегося кода, так называемых Snippet'ов. К примеру, это могут быть языковые конструкции (if ... then, while ... do, begin ... end. Такая фитча есть в Delphi IDE).
Для настройки ее в виме, потребуется скачать плагин Snippets_plugin. Устанавливается он очень просто - нужно открыть его в виме и набрать :UseVimball.
Теперь можно перейти к использованию. Нужна, скажем, конструкция if ... then ...;. Набираем:
:Snippet if if <{Cond}> then <{Body}>;
Если в режиме вставки набить if<TAB>, то сработает этот сниппет. Далее курсор будет установлен на Cond, необходимо набить конкретный Cond и нажать TAB. Курсор будет перевден на {Body} (а в общем случае - на первую необработаную шнягу вида <{что-то}>).
Вот, собственно, и вся теория. Теперь по мелочам.
Вместо if можно набирать любую последовательность символов без пробелов. Т.е., скажем, такой сниппет :Snippet i,. if (i < 0)Or(i >= Width) then Exit; будет корректен.
Одна из самых полезных фич в плагине - это теги. Допустим, что в предыдущем примере мы хотим иметь возможность вставлять вместо i другие переменные. Тогда:
:Snippet i,. if (<{Name}> < 0)Or(<{Name}> >= Width) then Exit;
Теперь, если вы наберете первое Name, второе будет заполнено автоматически.
Более хитрый способ использования сниппетов - значение, введенное ранее подставлять не сразу, а использовать для вычисления того, что нужно подставить. Записывается это как <{Name:Expression}>, где Name - имя тега, а Expression - выражение, которое будет подставлено. Значение, введенное пользователем в Name ранее заносится в регистр @z.
Для вставки Enter'ов используется <CR>.
Для создания сниппетов специально для паскаля лучше создать pascal_snippets.vim в папке Vim\vimfiles\ftplugin (сразу после установки vim'а она обычно пустая), в котором и прописать все необходимые сниппеты.
Таб может показаться неудобным, тогда можно добавить в _vimrc что-то вроде
let g:snippetsEmu_key = "<S-Tab>"
И, конечно же, не забудьте про :help Snippet.
ПС.
Ценный совет. Не ставьте в качестве названия сниппета просто i или j.
Комментариев нет:
Отправить комментарий