Курс по Vim. Часть 4. Плагины, файл .vimrc и NERDTree
Мы запустили бесплатный курс по легендарному редактору кода Vim. В нём 16 уроков. Сегодня — плагины, .vimrc и NERDTree.
Иллюстрация: Polina Vari для Skillbox Media
За 16 уроков мы рассмотрим всё, что нужно для старта работы с Vim:
- историю текстовых редакторов;
- работу в режиме вставки, в командном режиме, режиме командной строки, визуальном режиме;
- использование регулярных выражений и создание макросов;
- плагины, пакетные менеджеры плагинов;
- конфигурацию Vim, работу с файлом .vimrc (в частности, на примере файла .vimrc автора курса);
- работу с Neovim;
- настройку автодополнения.
Сегодня будет три видеоурока. Подробно разберём плагины, .vimrc и NERDTree.
Как устроен курс
Мы публикуем видеоуроки и текстовые расшифровки — вы можете смотреть или читать теорию.
Автор курса
Паша Калашников
Тимлид в Purple Magic, продюсер видео в Red Magic, соведущий IT Way Podcast, автор курсов по этому вашему программированию. Любит Ruby.
Урок 11
Плагины и пакетные менеджеры плагинов
Поговорим об инфраструктуре Vim: разберём, что такое плагины, пакетные менеджеры, как их настраивать, как использовать готовые сборки для разных языков программирования, и, наконец, познакомимся с Neovim.
Плагины — это те самые инструменты, которые позволяют Vim не отставать от современных IDE, хоть и в своём стиле. Сразу посоветуем отличный сервис для их поиска — vimawesome.com. Плагины там разделены по языкам программирования, стекам технологий, фичам и так далее.
После урока вы можете перейти на сайт и попробовать плагины для своего окружения. Мы же начнём с самых общих принципов работы с ними, подробно остановившись на парочке основных.
Что такое пакетный менеджер
Пакетные менеджеры помогают устанавливать, обновлять и удалять программы. Если вы опытный пользователь Unix-подобных систем, вы точно с ними знакомы. В случае с Vim пакетными менеджерами называют плагины, которые позволяют легко устанавливать и удалять другие плагины.
Большинство пакетных менеджеров просто скачивают плагины с GitHub и выполняют установочные скрипты, которые в них заложены. Управление версиями в данном случае — не самая сильная их сторона, потому что конфликты версий в инфраструктуре Vim-плагинов очень редки.
Самый популярный пакетный менеджер для Vim — Vundle. Рассмотрим его более современный аналог под названием vim-plug. У него есть несколько преимуществ. Во-первых, он лучше совмещается с Neovim. Во-вторых, он более отзывчив к пользователю, то есть лучше описывает ошибки, которые могут возникнуть в процессе установки. Приведём один пример его использования.
Сначала установим vim-plug. В его Readme на GitHub есть подробная инструкция по установке в разных операционных системах:
Установка не всегда проходит без проблем; если что-то пошло не так, перейдите в Issues репозитория и поищите описание ситуации, похожей на вашу:
Скорее всего, нечто подобное уже с кем-то случалось — и благополучно разрешилось.
А мы тем временем открываем файл .vimrc:
В Linux-системах он по умолчанию находится в домашней директории. Загуглите, где он в вашей ОС. Это несложно.
В файле вводим строку call plug#begin ():
Данная команда означает начало блока, который исполнится плагином vim-plug. Мы хотим установить плагин vim-sensible. Вводим название в поиске на сервисе vimawesome.com. Переходим по ссылке на GitHub. Берём из ссылки имя пользователя GitHub и название репозитория:
Вызываем в .vimrc метод Plug и набираем в кавычках через слеш имя пользователя и название репозитория:
Вводим команду : PlugInstall. Видим статус установки:
Плагин установлен!
По такому же принципу устанавливают практически все плагины в Vim. Конечно, есть и те, что не поддерживают установку через vim-plug, Vundle или иные пакетные менеджеры. Но с годами их становится всё меньше: люди реже пользуются плагинами, которые нельзя установить легко.
Полезные плагины для Vim
Пройдёмся по самым часто используемым плагинам, которые может использовать каждый специалист вне зависимости от стека технологий.
vim-sensible. Плагин vim-sensible применяет общепринятые настройки Vim. Также он хорош, если вам нужно копаться на сервере в Vim, но вы там не один. Позже, если настройки этого плагина вас перестанут устраивать, можно его удалить.
vim-surround. Помогает легко работать с парными символами (скобки или кавычки). Например, с его помощью вы можете заменить любые парные символы на другие. Допустим, в этом коде нам нужно использовать интерполяцию в строке. В Ruby принято строки без интерполяции обрамлять в одинарные кавычки, а с интерполяцией — в двойные. Vim-surround позволяет, находясь внутри блока, нажать cs ‘ ‘’. Сначала идёт символ одинарных кавычек — их нужно заменить, потом символ двойных — на них нужно заменить:
Замена кавычек произошла, теперь можем легко использовать интерполяцию:
NERDTree — плагин для работы с деревом файлов. Мы подробно рассмотрим его в следующих уроках.
vim-commentary — плагин для комментирования кода в разных языках программирования.
FZF — плагин для нечёткого поиска по проекту. Ищет не только по коду и файлам, но и по коммитам, по буферам и так далее.
vim-airline — строка статуса внизу экрана. Другие плагины любят использовать эту строку для отображения информации. Да и в целом ориентироваться по файлу с помощью этой строки становится легче.
Остальные плагины и готовые сборки для языков программирования мы обсудим на следующих уроках.
Урок 12
Работа с файлом .vimrc
.vimrc — по умолчанию основной файл, в котором хранятся все настройки вашего редактора. Как правило, в нём пишут команды Vim, которые можно вызывать в режиме командной строки. То есть, по сути, настройка Vim через .vimrc — это выполнение всех команд, которые написаны в .vimrc. Исключение составляют команды, которые относятся к конкретным плагинам, — например, vim-plug (см. предыдущий урок).
Попробуем с вами основные настройки, которые можно делать в .vimrc.
Команда : set hlsearch изменяет настройки подсветки поиска в редакторе: после её ввода любой поиск будет подсвечиваться до момента закрытия редактора. Добавим эту команду в .vimrc — и теперь эта настройка будет включаться в редакторе по умолчанию:
Проверяем! Закрываем редактор. Открываем заново и выполняем поиск. Работает!
В предыдущих уроках мы уже сетовали, что переход между окнами в Vim довольно сложный: комбинация Ctrl + w и направление. Переназначим этот переход на просто Ctrl и направление. Назначим другой набор клавиш для перехода между окнами. Как нам это сделать?
В режиме командной строки есset есть команда для перехода между окнами : wincmd. В качестве аргумента она принимает направление перехода. Воспользуемся этой командой для настройки в нашем .vimrc:
Для назначения клавиш в Vim существует команда map, которая принимает два аргумента: коллекция клавиш, которые надо нажать, и действие, которое нужно выполнить:
Вы можете назначить комбинацию клавиш отдельно для каждого режима:
- nmap (normal mode) назначается только для командного режима;
- imap (insert mode) — для режима ввода;
- vmap (visual mode) — для визуального режима;
- smap (select mode) — для режима выделения;
- cmap (command-line mode) — для режима командной строки.
Мы хотим назначить переход между окнами только в командном режиме, поэтому вводим nmap <C-k>: wincmd k<CR>, где nmap — назначение для командного режима, а <C-k> —комбинация клавиш Ctrl + k.
Далее идёт команда, которая вызывается комбинацией клавиш : wincmd k<CR>. <CR> — это по умолчанию обозначение клавиши Enter. Она тут нужна, потому что после ввода команды нужно нажать Enter. Пробуем. Перезапускаем редактор. Открываем два окна. Нажимаем Ctrl + k. Работает!
Но мы видим, что команда : wincmd k отобразилась внизу. Это не обязательно — ведь нам не хочется, чтобы постоянно висело напоминание о переходе между окнами. Возвращаемся в .vimrc и добавляем аргумент <silent>:
Этот аргумент убирает вывод команды, которая исполняется в редакторе. Пробуем:
Переход работает, команда не отображается. Остаётся только повторить эту настройку для переходов в другие стороны.
Теперь назначим комбинацию клавиш, которая будет отвечать за сохранение. Вводим: map <F2> <Esc>: w<CR>.
Нажатие Esc по умолчанию будет вызывать переход в командный режим, после чего нужно будет ввести : w и нажать Enter. Делаем аналогичные назначения на закрытие без сохранения:
И на сохранение с закрытием:
Отображение номеров строк в Vim можно написать как set nu и как set number:
Следующая настройка, set nocompatible, отключает совместимость Vim с Vi:
Этого требуют многие современные плагины, потому что такая совместимость приводит к непредсказуемым последствиям в их работе. Дело в том, что поддержкой совместимости именно с Vi практически никто не занимается. Советуем добавить эту настройку, если не вы не ярый фанат Vi.
Следующие настройки, filetype on и syntax on, регулируют подсветку кода в Vim:
Без первой из них большинство плагинов отлично справляются сами, включая специальные функции для расширений файлов. Некоторые даже требуют её отключить — например, в наших настройках Vim написано filetype off. Советуем оставить filetype on до тех пор, пока не потребуется обратное.
Вы также можете настроить подсветку строки и колонки, в которой находится курсор, с помощью set cursorline и set cursorcolumn:
Выглядит это так:
В нашем случае эти настройки не добавлены, потому что лишние линии отвлекают. Правда, для set cursorcolumn можно добавить назначение на клавишу F8, чтобы иногда проверять выравнивание форматировании кода. Это полезно, например, когда требуется найти потерявшуюся закрывающую скобку. Как именно включать и отключать настройки по клавише, мы обсудим на следующих уроках.
Команда set nowrap не будет переносить длинные строки:
Команда set history=1000 сохраняет историю стольких команд командной строки, сколько вы укажете:
По умолчанию их 20.
Следующая наша задача — установка цветовой схемы. Предлагаем скачать одну из самых популярных цветовых схем для Vim — Molokai:
Цветовые схемы Vim хранятся в директории ~/.vim/colors:
Скачаем и положим в эту папку файл цветовой схемы. В Linux это делается с помощью команды curl -o molokai.vim https://raw.githubusercontent.com/tomasr/molokai/master/colors/molokai.vim:
Переходим в наш файл .vimrc и задаём нашу цветовую схему. Закрываем и открываем Vim. Цветовая схема применилась. Красота!
Вы можете не только скачивать готовые цветовые схемы, но и изменять их, а также создавать свои. Откроем файл, который мы скачали:
Первые строки кода — в основном про совместимость схемы с редактором. А вот со строки 47 начинается сама цветовая схема. Как видим, здесь есть знакомые каждому программисту обозначения: Boolean, Character, Constant и так далее:
Поменяем, например, цвет Boolean-значений на белый. Так как у нас 256-цветный терминал, поменяем цвет именно в модуле, который отвечает за его поддержку:
Закрываем Vim, открываем заново Ruby-файл. Вводим Boolean-значения true и false. Они стали белыми:
Аналогично можно поменять всю цветовую схему на ваше усмотрение. С этим можно играться несколько часов!
Теперь настроим статус-бар. Можно сразу накатить кучу фич с помощью плагина vim-airline, но для того, чтобы понимать, как его настраивать, попробуем сперва настроить бар самостоятельно. Вводим : help statusline:
Разберём лишь несколько очевидных фич, которые уже реализованы в vim-airline.
Открываем .vimrc-файл. Вначале нужно очистить статуслайн. Для этого пишем строку кода set statusline=:
Теперь на следующей строке пишем set statusline += set statusline+=\ %F\ %R:
Параметр F здесь означает вывод полного адреса файла, а параметр R показывает RO, если файл имеет статус read-only. Далее добавим текущую ветку Git. Сперва нам нужно получить название текущей ветки. Создадим переменную внутри .vimrc: let gitBranch=system («git rev-parse --abbrev-ref HEAD»):
С помощью такой команды можно получить текущую ветку в Git-репозитории. Как таковой интерполяции в .vimrc нет, поэтому будем использовать лайфхак. Он помогает выполнить действия при отсутствии важных функций типа интерполяции.
Вводим следующую строку execute «set statusline +=». gitBranch:
Проверяем! Значение из переменной gitBranch добавлены в статус-бар:
Теперь давайте в правую часть статус-бара добавим следующие данные: set statusline+=\ Row:\ %l\ Col:\ %c\ Percent:\ %p%%:
Здесь %l — номер строки, %c — номер столбца, а %p выводит местонахождение курсора в процентном соотношении к размеру файла.
Впрочем, лучше действительно поставить vim-airline и использовать его. Давайте так и сделаем. Добавляем Plug 'vim-airline/vim-airline и вводим команду : PlugInstall:
Всё, готово! Красивый статус-бар!
Это все настройки, которые мы хотели вам показать в этом уроке. Но их существует ещё множество. Можно сохранять их, переносить на разные компьютеры, устанавливать заново после обновления системы. Просто сложите нужные файлы в нужные места и перезагрузите редактор! Не во всех современные IDE есть такая возможность.
Также советуем создать собственный репозиторий для настройки рабочего окружения. Такие репозитории (их ещё называют dotfiles) обычно имеют одну команду для установки всего, что нужно, на свежую ОС. Например, у автора этого курса есть собственный репозиторий dotfiles, в котором сохранены все нужные настройки Vim. Хранятся они в файле .vimrc.
Советуем сразу добавлять в глобальный файл .gitignore файлы с расширением .swp и .swn. Это типы файлов, которые Vim создаёт, когда вы редактируете другие файлы. Чтобы случайно не закоммитить их в репозиторий, лучше сразу сделать глобальную настройку на всю систему.
Добавлять эти файлы в настройки конкретного репозитория — очень плохой тон: не факт, что в вашем проекте все будут использовать Vim. Такие настройки должны быть настроены у каждого лично.
Урок 13
Плагин NERDTree
NERDTree — самый популярный плагин для просмотра дерева файлов в проекте и управления им. Разберём, как им пользоваться.
Устанавливаем плагин с помощью vim-plug (это займёт секунд пять):
Перезагружаем редактор:
Чтобы открыть окно с деревом файлов, вводим команду : NERDTree:
Вы можете забиндить её на любую комбинацию клавиш. Более того, существует команда : NERDTreeToggle, которая откроет NERDTree, если он закрыт, и закроет, если открыт. У нас эта команда находится на комбинации Ctrl + f:
По умолчанию NERDTree считает корневой директорией ту, откуда запустили vim. Папки и файлы открываются нажатием на клавишу о. По умолчанию файлы откроются в окне справа, а папки развернутся. Если хотите открыть файл в новом окне, нажмите i:
Те же правила работают при нажатии клавиши s, только разделение окон будет вертикальным. Комбинация Shift + i показывает скрытые файлы:
Повторное нажатие снова их скроет. Добавление файла или папки делается следующим образом: перейдите в директорию, в которой хотите их создать, нажмите ma. Вводите название файла. Если в конце названия поставить слеш, будет создана папка:
Если вы хотите создать файл в папке, которой не существует, вводите полный адрес файла, и папки будут созданы автоматически.
Чтобы изменить название или адрес файла, вводим mm и новое название:
Для копирования вводим mc и новое название:
Для удаления файла вводим md и подтверждаем нажатием на Enter или y:
Важное отличие NERDTree от большинства деревьев файлов, к которым мы привыкли, — оно не обновляется автоматически. Если у вас появился или удалился файл или обновилось его имя, нужно нажать Shift + r, чтобы файлы обновились:
Вот и все основные фичи этого плагина. В следующем уроке мы поговорим о плагинах для языков программирования.