Я расскажу о двух активно используемых мною плагинах, о которых на хабре вроде не писали, и о некоторых удобных лично для меня настройках: возможно, и еще кому-нибудь это окажется полезным.
Vim является моим основным редактором: сколько раз я не пытался пересесть на более модные «колеса», слезал с них уже через пару дней, но удобные методы работы с текстом, которые мне понравились, у них заимствовал, тем самым еще более убеждаясь, что Vim — наше всё.
Естественно, бользуюсь я большим кол-вом плагинов, но о многих из них уже рассказывали, я же поведаю о плагине SnippetsEmu и незаменимом для меня (да и для любого верстальщика, думаю) плагине Surround.
Note: По ходу написания статьи, я нашел и опробовал еще пару плагинов, о которых тоже вскользь упомяну.
Этот плагин создан, чтобы воссоздать в Vim работу с code snippet'ами, как это реализовано в TextMate'е.
1. Идем по ссылке: snippetsEmu и скачиваем два файла:
2. Создаем в домашней директории
3. Открываем скачанные файлы в Vim (по очереди) и набираем в нем команду
Итак, у нас теперь есть сниппеты. Во-первых, стало доступно меню Snippets, в котором вы можете выбрать любой доступный тип. Во-вторых, они теперь автоматически подключаются в зависимости от типа файла.
По умолчанию сниппет активируется нажатием клавиши
Все. Открываем файл, предположим html, пишем doctype, жмем Tab (или на что вы там его переопределили), и вуаля! Не магия, конечно, но приятно. Наберем html<Tab> и у нас развернется другой сниппет с плэйсхолдерами, по которым можно перемещаться также нажатием <Tab>.
Естественно, не все спиппеты будут вас устраивать, но это легко исправить. Все они хранятся в созданной вами ранее директории
Пишем сниппет:
Очень простой и очень полезный плагин. Он просто окружает нужный вам текст тегами, скобками, кавычками… или наоборот удаляет.
Установка крайне проста: скопируйте
ys — окружает слово (w), строку (s) и т.д.
Примеры:
ysiw" — окружает слово кавычками. Замените кавычки на тег, и слово будет окружено тэгом.
yss<h1> — заключает строку в тэг.
ys2w{ — заключает два слова в фигурные скобки.
ds — удаляет окружение.
Примеры:
dst — удаляет тэг.
ds( — удаляет круглые скобки
cs — заменяет одно окружение другим.
Примеры:
cst" — заменяет тэг на кавычки. (было <b>Hello</b>, стало «Hello»)
cs([ — заменяет круглые скобки на квадратные (было (ух ты какая штука), стало [ух ты какая штука])
s[символ] — окружает выделенный текст в тег или символ.
Наткнулся на еще один интересный плагин на тематику code snippet'ов:
Скачать: snipMate
Установка: просто распокавать в домашнюю директорию
Скринкаст: vimeo.com/3535418
Общие впечатления сугубо положительные. Поработал с ним пока все лишь три часа (в промежутке между написанием статьи и её публикацией) и остался доволен до такой степени, что отключил описываемый мною выше плагин snippetsEmu.
Вот несколько пунктов, которые мне приглянулись в этом плагине:
1. Он живой. В том плане, что автор активно над ним работает (последняя версия была выпущена 3 дня назад).
2. Более понятный и лаконичный синтаксис самих сниппетов, достаточно войти в папку
3. Плэйсхолдеры имеют вид комментариев, поэтому, даже если вы их не заполните, код все равно останется работоспособным, в отличие от snippetEmu, что лично меня очень сильно напрягало.
4. Автозаполнение одинаковых плэйсхолдеров. Мелочь, но очень приятно. Особенно хорошо вы это сможете увидеть на примере цикла for на скринкасте.
В общем, очень приятный плагин. Буду им пользоваться и следить за его развитием.
1. Во всех редакторах типа eclipse или netbeans есть автозакрытие скобок. Сделаем это и в Vim. Прописываем:
Иногда, правда, мы хотим вставить только одну скобку, для этого лично я использую комбинацию Alt-9 и Alt-[
Ну, а чтобы окружить что-то скобками, мы пользуемся описанным выше плагином.
2. Некоторые команды нормального режима было бы неплохо иметь в режиме вставки, такие, например, как удаление строки, дублирование строки, перемещение строки вверх или вниз, перемещение по коду. Для всех подобных задач я использую сочетания с Alt'ом.
3. Переход в нормальный режим по esc уж очень неудобен. Я все ещё нахожусь в поисках альтернативы, но пока использую сочетание Alt-q, но теперь после того, как я удалил плагин snippetsEmu, возможно попробую пожить с сочетанием <C-Space>
4. Часто возникает желание напечатать что-либо сверху или снизу строки, на которой вы находитесь, но если там нет места, то приходится перемещаться в конец строки и жать enter, либо пользоваться мышкой или клавишами вверх-вниз. Решаемо:
5. Неудобство автоматических скобок в том, что нет никаких способов (обычно) перемещаться за них, предположим, чтобы поставить точку с запятой, или во вложенных скобках, когда вам нужно перейти за текущую открытую скобку, опять-таки приходится пользоваться мышкой.
Естественно, все эти настройки сугубо индивидуальны и о них можно спорить бесконечно, особенно по поводу того, какие именно сочетания клавиш назначать. Например, <c-c> многими используется для других целей или, возможно, вы пользуетесь сочетаниями с альтом, чтобы печатать особые символы (я для эти целей предпочитаю пользоваться digraph'ами (<c-k>)). В этом и прелесть Vim'a — его можно настроить под собственных вкус и потребности.
Пожалуй, на этом и закончу. Спасибо за уделённое время, надеюсь, что статья окажется вам полезной. Это моя первая публикация на хабре (и надеюсь, что не последняя), поэтому я с радостью выслушаю замечания и комментарии о том, как ее улучшить. Ну, а пока пойду искать новые плагины и способы настройки этого замечательного редактора.
Happy Vimming! :-)
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! :-)