Курс по Vim. Часть 5. Autocomplete, ещё о .vimrc и немного о Neovim
Мы запустили бесплатный курс по легендарному редактору кода Vim. В нём 16 уроков. Сегодня изучим autocomplete и .vimrc и познакомимся с Neovim.
Иллюстрация: Polina Vari для Skillbox Media
Мы публикуем видеоуроки и текстовые расшифровки — вы можете смотреть видео или читать теорию.
Автор курса
Паша Калашников
Тимлид в Purple Magic, продюсер видео в Red Magic, соведущий IT Way Podcast, автор курсов по этому вашему программированию. Любит Ruby.
Мы наконец дошли до трёх последних уроков. Разберём, для чего нужен autocomplete, более подробно изучим .vimrc и расскажем о Neovim.
Урок 14
Настройка autocomplete
Автокомплит — это автоматическое завершение слова, которое вы печатаете. Очень полезная фича в программировании, да и в любом наборе текста, хотя и не все любят ей пользоваться.
Самым мощным инструментом для этого многие считают плагин YouCompleteMe. К сожалению, у автора отношения с ним не сложились: как-то раз удалось его завести для Ruby, но потом он отвалился, и больше восстанавливать его не стали. Хотя для других языков программирования он работает отлично.
Впрочем, есть и стандартный автокомплит Vim:
Рассмотрим способы его настройки. Чтобы посмотреть варианты возможного автокомплита, при вводе нажмите Ctrl + n и перемещайтесь по списку:
С помощью клавиши Enter можно выбрать понравившийся вариант, клавиша Esc закрывает автокомплит.
Словарь автодополнения Vim можно обновлять по своему усмотрению. Для этого создаём директорию complete в директории ~/.vim. В ней создаём файл skillbox.vim:
Туда добавляем слова skillbox и vim_da_best:
Далее открываем vimrc-файл и там пишем вот такой код:
Как можно догадаться, этот код подгружает в автокомплит словарь слова из нашего нового файла, если тип файла Ruby. Откроем Ruby-файл. Начинаем вводить sk и нажимаем Ctrl + n:
Как видим, редактор предлагает нам автозавершение skillbox. Это работает и vim_da_best тоже.
Естественно, если вы не хотите устанавливать плагины для автокомлита, вы можете скачать подходящие словари для языков программирования, можете сделать словарь для конкретного проекта. Как и во всём в Vim, у вас развязаны руки!
Также по умолчанию автокомплит, если вы ему не укажете словарей, будет предлагать подходящие слова из тех, что появились в буфере за время работы редактора. Для организации более умного автокомплита вам всё-таки понадобится поработать с плагинами YouCompleteMe или DeoComplete. Последний, кстати, скоро заменят на плагин DCC. Внимательно читайте Readme.
Это была краткая инструкция по работе автокомплита в Ruby. Как и всё в Vim, он настраивается настолько глубоко, насколько это нужно пользователю.
Урок 15
Ещё о .vimrc
Ещё раз пробежимся по .vimrc. Большинство команд и настроек оттуда мы уже обсуждали; рассмотрим на конкретных примерах, где и почему их применяет автор. Откроем файл — его можно найти по адресу, указанному на картинке. Рассмотрим его построчно:
Команда set nu, как мы помним, показывает номера строк.
set expandtab — интересная настройка, которая при нажатии на Tab вставляет то количество пробелов, которое вам нужно. Помните известную сцену из сериала «Силиконовая долина» про проблему табов и пробелов: мол, пробелы нужно нажимать многократно, а табы — лишь однажды или дважды, зато чужие настройки табуляции влияют на отображение кода. Как раз эта проблема и решена здесь! Нажимаешь Tab один раз, появляются два пробела:
И никакая настройка табуляции не повлияет на отображение кода. Магия!!!
set sw=2 — это количество пробелов в одном табе.
set sts=2 — эта настройка нужна для того, чтобы удалять в выравнивании одним нажатием Backspace сразу два пробела.
set nocompatible — выключение совместимости с редактором Vi.
filetype off — мы уже обсуждали, почему эту настройку иногда лучше отключить.
Следующие четыре строчки нужны для лучшей работы vim-plug под Linux:
Далее идёт список плагинов, о многих мы с вами уже говорили:
- syntax enable — включение подсветки синтаксиса;
- filetype plugin indent on — включение работы с типами файлов от плагинов;
- сохранение файла на F2;
- выход без сохранения на F3;
- сохранить и выйти на F4;
- F5 — убрать подсветку результатов поиска. Полезная фича, сперва посмотреть все вхождения слова в файл, а потом выключить подсветку;
- на F7 мы задали сложную замену старого типа хеширования в Ruby на новый;
- на F8 — включение и выключение подсветки колонки. Очень помогает, когда нужно найти потерявшуюся закрывающую скобку или end. Обратите внимание, что, если к некоторым настройкам по set добавить в конец !, они будут включаться, если выключены, и выключаться, если включены;
- на F9 — вызов утилиты превращения HTML-кода в Haml;
- set relativenumber — мы с вами обсуждали, зачем это нужно;
- map <C-p>: NERDTreeToggle<CR> — назначение клавиш Ctrl + p на открытие NERD Tree.
Далее идут назначения клавиш на быстрые переходы между окнами.
Следующий блок — довольно интересный:
По умолчанию некоторые плагины не включают подсветку синтаксиса для некоторых расширений файлов, хотя код в этих файлах был на тех же языках. Автор добавил эти расширения и указал Vim включить подсветку синтаксиса для каждого языка:
au BufRead,BufNewFile *.thor set syntax=ruby
au BufRead,BufNewFile *.simplecov set syntax=ruby
au BufRead,BufNewFile *.es6 set filetype=javascript
au BufRead,BufNewFile *.vue set filetype=javascript
au BufRead,BufNewFile *.vue set syntax=javascript
au BufRead,BufNewFile *.go set tabstop=2
au BufRead,BufNewFile Makefile set tabstop=2
au BufRead,BufNewFile Dockerfile* set syntax=dockerfile
au BufRead,BufNewFile .eslintrc set syntax=json
au BufRead,BufNewFile *.tsx set syntax=typescript
autocmd FileType vue noremap <buffer> <C-f>: %! vue-formatter<CR> — отдельная настройка, чтобы удобно было форматировать Vue-файлы с фактически HTML-кодом внутри;
set hlsearch — подсветка поиска;
colorscheme molokai — назначение цветовой схемы.
А эти строки отвечают за добавление собственного словаря автокомплита для Ruby:
if has ("autocmd")
autocmd FileType ruby set complete+=k/home/pavel/.vim/complete/custom.vim
endif " has("autocmd")
Урок 16
Немного про Neovim
Neovim, или Nvim, — самый перспективный и уже занявший достойное место форк Vim.
Новая версия редактора лишена многих проблем. Рассмотрим их вкратце.
Кодовая база Vim устарела
Код оригинального Vim сложно поддерживать, поэтому редактор перестал развиваться. Neovim имеет более чистую кодовую базу, и его ядро поддерживает много разработчиков.
Если вы зайдёте в репозитории Vim и Neovim и откроете коммиты, то увидите, что Vim до сих пор поддерживает лично его создатель Брэм Моленар. А в Neovim коммитит большое сообщество.
Писать скрипты для Neovim легче, чем для Vim
Neovim поддерживает язык программирования Lua, а скрипты для Vim нужно писать на менее популярном Vimscript. Программистам приходилось изучать его дополнительно, притом что он не так-то прост. Это ограничивало разработку плагинов.
А Lua ежедневно пользуются десятки тысяч людей для других задач, и поэтому Neovim более перспективный. Да, в последние годы Vim-плагины пишут на Python, но его среда исполнения порой замедляет некоторые процессы в работе плагинов. Так что это не самое лучшее решение.
Neovim интегрируется с Tree-sitter
Tree-sitter — это парсер для построения синтаксических деревьев по коду. Благодаря такой интеграции Neovim может гораздо быстрее делать подсветку синтаксиса, автодополнение и выполнять вспомогательные функции плагинов, которые также берут информацию от Tree-sitter.
Практически все функции и возможности, которые мы с вами рассматривали в этом курсе, доступны также и в Neovim. Поэтому советуем начать знакомство с миром Vim именно через Neovim, у которого очень большое будущее. Скорее всего, он станет той же реинкарнацией редактора, какой когда-то был Vim для Vi.
Хотя это дело вкуса. Выбирайте редакторы, которые нравятся именно вам, приносят радость в работе и мотивируют программировать всё больше. Так вы станете лучшими специалистами. А крутые специалисты меняют этот мир к лучшему. И не забывайте: Esc :qa! Enter.