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

Vim является моим основным редактором: сколько раз я не пытался пересесть на более модные «колеса», слезал с них уже через пару дней, но удобные методы работы с текстом, которые мне понравились, у них заимствовал, тем самым еще более убеждаясь, что Vim — наше всё.

Естественно, бользуюсь я большим кол-вом плагинов, но о многих из них уже рассказывали, я же поведаю о плагине SnippetsEmu и незаменимом для меня (да и для любого верстальщика, думаю) плагине Surround.

Note: По ходу написания статьи, я нашел и опробовал еще пару плагинов, о которых тоже вскользь упомяну.

SnippetsEmu



Этот плагин создан, чтобы воссоздать в Vim работу с code snippet'ами, как это реализовано в TextMate'е.

Установка.


1. Идем по ссылке: snippetsEmu и скачиваем два файла: snippy_plugin.vba (собственно, сам плагин) и snippy_bundles.vba (коллекцию сниппетов).

2. Создаем в домашней директории ~/.vim папки after/ftplugin.

cd ~/.vim
mkdir -p after/ftplugin


3. Открываем скачанные файлы в Vim (по очереди) и набираем в нем команду :so %

Использование.


Итак, у нас теперь есть сниппеты. Во-первых, стало доступно меню Snippets, в котором вы можете выбрать любой доступный тип. Во-вторых, они теперь автоматически подключаются в зависимости от типа файла.

По умолчанию сниппет активируется нажатием клавиши Tab, что лично для меня не очень удобно, поэтому я в своём .vimrc переопределил эту функцию на сочетание Ctrl-Space следующей командой:

let g:snippetsEmu_key = "<c-space>"


Все. Открываем файл, предположим html, пишем doctype, жмем Tab (или на что вы там его переопределили), и вуаля! Не магия, конечно, но приятно. Наберем html<Tab> и у нас развернется другой сниппет с плэйсхолдерами, по которым можно перемещаться также нажатием <Tab>.

Настраиваем.


Естественно, не все спиппеты будут вас устраивать, но это легко исправить. Все они хранятся в созданной вами ранее директории after/ftplugin. Начинается сниппет с команды exec "Snippet, затем пишем свое сокращение, а через пробел раскрываем полный код. Внимание: каждый сниппет должен быть написан на одной и только одной строке. Placeholder'ы создаются с помощью st (start tag) и et (end tag). Посмотрим на примере. Допустим, сделаем вот такую элементарную конструкцию:

public function <functionname>(<optional attributes>)
{
    <cursor>
}


Пишем сниппет:

exec "Snippet pubfun public function ".st."functionName".et."(".st.et.")<cr>{<cr>".st.et."<cr>}<cr>".st.et


Surround



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

Установка крайне проста: скопируйте surround.vim в ~/.vim/plugins, а surround.txt в ~/.vim/doc. Теперь вам доступны очень вкусные функции.

В normal mode:


ys — окружает слово (w), строку (s) и т.д.

Примеры:

ysiw" — окружает слово кавычками. Замените кавычки на тег, и слово будет окружено тэгом.
yss<h1> — заключает строку в тэг.
ys2w{ — заключает два слова в фигурные скобки.

ds — удаляет окружение.

Примеры:

dst — удаляет тэг.
ds( — удаляет круглые скобки

cs — заменяет одно окружение другим.

Примеры:

cst" — заменяет тэг на кавычки. (было <b>Hello</b>, стало «Hello»)
cs([ — заменяет круглые скобки на квадратные (было (ух ты какая штука), стало [ух ты какая штука])

В визуальном режиме.


s[символ] — окружает выделенный текст в тег или символ.

Наткнулся на еще один интересный плагин на тематику code snippet'ов:

snipMate.



Скачать: snipMate

Установка: просто распокавать в домашнюю директорию ~/.vim

mv snipMate.zip ~/.vim
cd ~/.vim
unzip snipMate.zip
rm snipMate.zip
mv convertSnip.py ~/bin


Скринкаст: vimeo.com/3535418

Общие впечатления сугубо положительные. Поработал с ним пока все лишь три часа (в промежутке между написанием статьи и её публикацией) и остался доволен до такой степени, что отключил описываемый мною выше плагин snippetsEmu.

Вот несколько пунктов, которые мне приглянулись в этом плагине:

1. Он живой. В том плане, что автор активно над ним работает (последняя версия была выпущена 3 дня назад).

2. Более понятный и лаконичный синтаксис самих сниппетов, достаточно войти в папку .vim/snippets, выбрать нужный вам тип файла, и вы без труда разберетесь в том, как написать свой сниппет.

3. Плэйсхолдеры имеют вид комментариев, поэтому, даже если вы их не заполните, код все равно останется работоспособным, в отличие от snippetEmu, что лично меня очень сильно напрягало.

4. Автозаполнение одинаковых плэйсхолдеров. Мелочь, но очень приятно. Особенно хорошо вы это сможете увидеть на примере цикла for на скринкасте.

В общем, очень приятный плагин. Буду им пользоваться и следить за его развитием.

Парочка полезных настроек



1. Во всех редакторах типа eclipse или netbeans есть автозакрытие скобок. Сделаем это и в Vim. Прописываем:

imap ( ()<left>
imap [ []<left>
imap {<cr> {<cr>}<esc>O


Иногда, правда, мы хотим вставить только одну скобку, для этого лично я использую комбинацию Alt-9 и Alt-[

imap <a-9> (
imap <a-[> [


Ну, а чтобы окружить что-то скобками, мы пользуемся описанным выше плагином.

2. Некоторые команды нормального режима было бы неплохо иметь в режиме вставки, такие, например, как удаление строки, дублирование строки, перемещение строки вверх или вниз, перемещение по коду. Для всех подобных задач я использую сочетания с Alt'ом.

imap <a-d> <esc>ddi       "удаление строки.
imap <a-p> <esc>pi        "вставляем раннее удаленную строку.
imap <a-w> <esc>ysiw"wea  "окружение одного слова в двойные кавычки. 
                                      "(вообще, разные окружения я прописываю 
                                      "для разного типа файлов, например, для 
                                      "html я использую самые частые теги и т.д.)
imap <a-h> <left>
imap <a-j> <down>
imap <a-k> <up>
imap <a-l> <right>
imap <a-down> <esc>ddpi   "перемещение строки вниз
imap <a-up> <esc>ddkPi    "перемещение строки вверх
imap <a-c> <esc>yypi      "дублирование строки


3. Переход в нормальный режим по esc уж очень неудобен. Я все ещё нахожусь в поисках альтернативы, но пока использую сочетание Alt-q, но теперь после того, как я удалил плагин snippetsEmu, возможно попробую пожить с сочетанием <C-Space>

imap <C-Space> <esc>


4. Часто возникает желание напечатать что-либо сверху или снизу строки, на которой вы находитесь, но если там нет места, то приходится перемещаться в конец строки и жать enter, либо пользоваться мышкой или клавишами вверх-вниз. Решаемо:

imap <c-cr> <esc>o
imap <c-s-cr> <esc>O


5. Неудобство автоматических скобок в том, что нет никаких способов (обычно) перемещаться за них, предположим, чтобы поставить точку с запятой, или во вложенных скобках, когда вам нужно перейти за текущую открытую скобку, опять-таки приходится пользоваться мышкой.

imap <a-4> <esc>$a           "перемещаемся в конец строки, если вы хотите просто 
                        "поставить точку с запятой и продолжить,
                        "то можно сделать дополнительную комбинацию: 
                        "imap <a-;> <esc>$a;<cr>
imap <c-c> <esc>/)<cr>a "перемещаем курсор за ближайшую закрывающуюся скобку.


Заключение.



Естественно, все эти настройки сугубо индивидуальны и о них можно спорить бесконечно, особенно по поводу того, какие именно сочетания клавиш назначать. Например, <c-c> многими используется для других целей или, возможно, вы пользуетесь сочетаниями с альтом, чтобы печатать особые символы (я для эти целей предпочитаю пользоваться digraph'ами (<c-k>)). В этом и прелесть Vim'a — его можно настроить под собственных вкус и потребности.

Пожалуй, на этом и закончу. Спасибо за уделённое время, надеюсь, что статья окажется вам полезной. Это моя первая публикация на хабре (и надеюсь, что не последняя), поэтому я с радостью выслушаю замечания и комментарии о том, как ее улучшить. Ну, а пока пойду искать новые плагины и способы настройки этого замечательного редактора.

Happy Vimming! :-)