четверг, 8 ноября 2007 г.

vim: сниплеты своими руками

многие интересующиеся видели в навороченных иде, редакторах крутых программистов или по телевизору как при наборе кода автоматически выстраиваютя целые конструкции. Т.е. набирает программист if, а редактор ему в ответ:
if ( {statement} {
{code} 
}

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

добавленная в .vimrc позволи по нажатию клавиш Control+j перепрыгивать между встречающимся в коде <++> заменяя их на вводимый текст. Теперь надо создать хранилище наших сниплетов, на моей Portable версии это $VIMRUNTIME/abbrs/. В вашем unixподобии может быть ~/.vim/abbrs или чтоугодно. Создаем соотв каталог и в нем первый файлик, например, phpabr.vim. В него прописываем первый сниплет:

здесь ffunc это выражение которое будет заменяться конструкцией (т.е. подстановка будет происходить после того как я наберу ffunc и нажму пробел) и после пробела собственно конструкция, где <++> это точки в которые я буду вставлять свой код, перемещаясь между ними сочетанием Control+j. Теперь надо сделать, чтобы этот и другие в будущем сниплеты подгружались только когда я редактирую php файлы. Это делается опять же строкой в .vimrc:

 autocmd FileType php source $VIMRUNTIME/abbrs/phpab.vim

т.е. autocmd FileType {тип файла} source {путь до файла со сниплетами}

Вот собственно и все, осталось наделать сниплетов под нужные типы файлов и радоваться возможностям любимого редактора;) Следует задавать оригинальные сочетания для вставки конструкций, чтобы они не вворачивались где не попадя (вроде как с этим можно бороться, но пока это в разработке;).

p.s. Еще я добавил возврат в нормальный режим по сочетаниям Control+i, Control+a в дополнению к Esc, по-моему довольно логично

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