Привет, я занимаюсь фронтенд разработкой, и как-то так сложилось, что в своей повседневной работе активно использую vim.
В процессе работы накопился довольно большой, неплохо документированный конфиг, и в какой-то момент мне захотелось поделиться им с внешним миром, и возможно, что-нибудь в нем улучшить. Он может быть полезен не только веб разработчикам, но и в общем-то всем остальным.
Под катом я опишу основные фишки конфига. Vim использую в связке c iTerm и темой solarized, но конфиг с минимальными изменениями подходит для любого терминала и любой темы. Из-за подробного описания каждой опции он будет очень полезен для тех, кто по каким-то причинам решил перейти на вим недавно.
Как ни странно — в статье много картинок ;)
Обычно, конфиг для вима или очень минималистичный, или очень сложный для понимания, если ты не в теме. Если ты новичок, то ты сталкиваешься с двумя проблемами сразу:
С решением второй проблемы я ничем помочь не могу, зато могу помочь решить первую — конфиг разбит на понятные блоки, и каждая опция или плагин кратко прокомментированы.

В качестве менеджера плагинов используется vundle.
При первом заходе в vim, он установится автоматически и поставит все необходимые плагины.
Физически плагины будут находиться в
Список самих плагинов находится в

В нем указаны пути до репозиториев, откуда нужно забирать плагины. Если в качестве пути указанно только имя пользователя и название репозитория:
То оно автоматически разворачивается в путь до гитхаба.
После добавления какого-то нового плагина в список, нужно сказать vundle чтобы он поставил его, а заодно и обновил существующие. Это делается командой
Один из самых популярных плагинов для поддержки сниппетов, и куча стандартных сниппетов к нему. Подстановка происходит по нажатию на
Например если напечатать

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

Небольшой плагин, который добавляет хоткеи для работы с комментариями:
Добавляет в vim возможность отображать каталоги, как древовидную структуру.

Их можно открывать в соседнем табе по нажатию на
Если выбрать какую-нибудь папку или файл, и нажать

Конфиг добавляет несколько удобных хоткеев — например по
При выборе другого файла в этом split-view, он откроется в этом же окне. Этим удобно пользоваться при большом окне консоли.

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

Из серьезных недостатков — значительный лаг при первом поиске в больших каталогах.
Из достаточно интересных, но до сих пор не названных, остались еще Vim-surround и Vim-unimpaired, кроме них есть еще несколько других, полный список можно найти в файле конфига.
Все плагины уже готовы к работе.
Курсор в insert mode меняет свою форму с кирпичика, на пайп, тем самым экономя мне большое количество нервных клеток.

Код специфичен для iTerm, но это можно настроить, наверное, для любого терминала
Использую светлую ее версию в связке с аналогичной темой для iterm
Именно она видна на всех скриншотах в этом посте.
Если по каким-то причинам она вам не подходит, или вы хотите поставить что-нибудь своё, ее всегда можно убрать из конфига удалив бандл
Добавить умный автокомплит для javascript. Пока его нет, но я думаю что он появится в самое ближайшее время.
Посмотреть репозиторий и забрать конфиг можно тут: github.com/L0stSoul/vim-config
В процессе работы накопился довольно большой, неплохо документированный конфиг, и в какой-то момент мне захотелось поделиться им с внешним миром, и возможно, что-нибудь в нем улучшить. Он может быть полезен не только веб разработчикам, но и в общем-то всем остальным.
Под катом я опишу основные фишки конфига. Vim использую в связке c iTerm и темой solarized, но конфиг с минимальными изменениями подходит для любого терминала и любой темы. Из-за подробного описания каждой опции он будет очень полезен для тех, кто по каким-то причинам решил перейти на вим недавно.
Как ни странно — в статье много картинок ;)
Фишки конфига
Краткое описание каждой опции или плагина
Обычно, конфиг для вима или очень минималистичный, или очень сложный для понимания, если ты не в теме. Если ты новичок, то ты сталкиваешься с двумя проблемами сразу:
- Как это настроить
- Как этим вашим вимом пользоваться (использование не настроенного вима добавляет много-много незабываемых минут на старте)
С решением второй проблемы я ничем помочь не могу, зато могу помочь решить первую — конфиг разбит на понятные блоки, и каждая опция или плагин кратко прокомментированы.

Установка Плагинов
В качестве менеджера плагинов используется vundle.
При первом заходе в vim, он установится автоматически и поставит все необходимые плагины.
Физически плагины будут находиться в
~/.vim/bundle
Список самих плагинов находится в
.vimrc
файле.
В нем указаны пути до репозиториев, откуда нужно забирать плагины. Если в качестве пути указанно только имя пользователя и название репозитория:
Bundle 'altercation/vim-colors-solarized'
То оно автоматически разворачивается в путь до гитхаба.
https://github.com/altercation/vim-colors-solarized
После добавления какого-то нового плагина в список, нужно сказать vundle чтобы он поставил его, а заодно и обновил существующие. Это делается командой
:BundleInstall
Предустановленные полезные плагины
Vim-snipmate + Vim-snippets
Один из самых популярных плагинов для поддержки сниппетов, и куча стандартных сниппетов к нему. Подстановка происходит по нажатию на
Tab
.Например если напечатать
fun
и нажать Tab
то fun
раскроется в объявление функции, а курсор переместится на первый аргумент сниппета - function_name
:
Переход между аргументами сниппета происходит также по
Tab
Сразу есть очень много уже готовых сниппетов для целой кучи языков. Они находятся тут:
~/.vim/bundle/vim-snippets/snippets/
Этот путь появляется после первого запуска vim.
В файле с названием
_.snippets
находятся сниппеты, которые могут быть полезны независимо от языка — например сниппет вставляющий копирайт или рыбный текст.Syntastic
Он позволяет подключить множество статических анализаторов и проверять код на ошибки при сохранении и открытии файла.
По умолчанию вместе с конфигом устанавливается только jshint (для этого необходимо, чтобы у вас уже был установлен npm).
При нахождении ошибки, слева в окне появляются метки, указывающие на строку с ошибкой, а если курсор уже находится на строке с ошибкой, то её текст пишется в строке состояния вима.

Tcomment_vim
Небольшой плагин, который добавляет хоткеи для работы с комментариями:
gcc
— переключает состояние комментарий/не комментарий, для текущей строкиgc
то же самое но для выделенного блока текста.
NERDtree
Добавляет в vim возможность отображать каталоги, как древовидную структуру.

Их можно открывать в соседнем табе по нажатию на
t
или в текущем — по Enter
Если выбрать какую-нибудь папку или файл, и нажать
m
то можно будет его удалить, переименовать, или сделать что-то еще, что мы обычно хотим делать с файлами.
Конфиг добавляет несколько удобных хоткеев — например по
\f
можно открыть split-view, в котором будет выделен текущий файл.При выборе другого файла в этом split-view, он откроется в этом же окне. Этим удобно пользоваться при большом окне консоли.

Fugitive
Позволяет делать все необходимые операции с гитом сразу из вима. В конфиге по дефолту есть несколько полезных элиасов, чаще всего пользуюсь:
\b
— посмотреть blame для текущей строки\g
— показывает в сплите статус текущей ветки:Gdiff
— показывает в splitview дифф сделанных изменений
FuzzyFinder
Позволяет быстро и удобно находить файлы и папки. Он поймет, что нужно искать, даже если вводить слова с очепятками, ошибками, неправильными путями и.т.д.
Хоткей для открытия
ctrl+t

Из серьезных недостатков — значительный лаг при первом поиске в больших каталогах.
Другие плагины
Из достаточно интересных, но до сих пор не названных, остались еще Vim-surround и Vim-unimpaired, кроме них есть еще несколько других, полный список можно найти в файле конфига.
Все плагины уже готовы к работе.
Разная форма крусора для insert и command mode
Курсор в insert mode меняет свою форму с кирпичика, на пайп, тем самым экономя мне большое количество нервных клеток.

Код специфичен для iTerm, но это можно настроить, наверное, для любого терминала
Крутая и щадящая для глаз тема Solarized
Использую светлую ее версию в связке с аналогичной темой для iterm
Именно она видна на всех скриншотах в этом посте.
Если по каким-то причинам она вам не подходит, или вы хотите поставить что-нибудь своё, ее всегда можно убрать из конфига удалив бандл
'altercation/vim-colors-solarized'
и раздел с заголовком Solarized
Мелкие полезные фишки
- Показываются trailing spaces, табы и некоторые другие символы, которые в обычной ситуации не отображаются
- Настроенны умные отступы, можно нажать == на выбранной строке и в 99 процентах случаев vim автоматически сделает все отступы правильными.
- Подсветка найденных результатов сбрасывается при нажатии на
Enter
. - Отдельный хоткей для включения/выключения paste mode —
\p
. Этот режим нужен при вставке больших кусков кода из буфера обмена. - После повторного открытия файла позиция курсора в нем восстанавливается. То есть, если закончил его редактировать на 69 строке, при повторном открытии файл откроется именно на 69 строке.
- Убраны большинство надоедливых предупреждений, на мой взгляд они только мешают.
- При использовании vimdiff, не отображаются изменения в пробельных символах.
В Планах
Добавить умный автокомплит для javascript. Пока его нет, но я думаю что он появится в самое ближайшее время.
Где взять? :)
Посмотреть репозиторий и забрать конфиг можно тут: github.com/L0stSoul/vim-config