Курс по Vim. Часть 5. Autocomplete, ещё о .vimrc и немного о Neovim
2026-02-21 04:10 Diff

#статьи

  • 6 дек 2022
  • 0

Мы запустили бесплатный курс по легендарному редактору кода Vim. В нём 16 уроков. Сегодня изучим autocomplete и .vimrc и познакомимся с Neovim.

Иллюстрация: Polina Vari для Skillbox Media

Журналист, редактор. Фанат виртуальности во всех её видах — потому о ней и пишет.

Мы публикуем видеоуроки и текстовые расшифровки — вы можете смотреть видео или читать теорию.

Автор курса

Паша Калашников

Тимлид в Purple Magic, продюсер видео в Red Magic, соведущий IT Way Podcast, автор курсов по этому вашему программированию. Любит Ruby.

Мы наконец дошли до трёх последних уроков. Разберём, для чего нужен autocomplete, более подробно изучим .vimrc и расскажем о Neovim.

Автокомплит — это автоматическое завершение слова, которое вы печатаете. Очень полезная фича в программировании, да и в любом наборе текста, хотя и не все любят ей пользоваться.

Самым мощным инструментом для этого многие считают плагин YouCompleteMe. К сожалению, у автора отношения с ним не сложились: как-то раз удалось его завести для Ruby, но потом он отвалился, и больше восстанавливать его не стали. Хотя для других языков программирования он работает отлично.

Впрочем, есть и стандартный автокомплит Vim:

Скриншот: Skillbox Media

Рассмотрим способы его настройки. Чтобы посмотреть варианты возможного автокомплита, при вводе нажмите Ctrl + n и перемещайтесь по списку:

Скриншот: Skillbox Media

С помощью клавиши Enter можно выбрать понравившийся вариант, клавиша Esc закрывает автокомплит.

Словарь автодополнения Vim можно обновлять по своему усмотрению. Для этого создаём директорию complete в директории ~/.vim. В ней создаём файл skillbox.vim:

Скриншот: Skillbox Media

Туда добавляем слова skillbox и vim_da_best:

Скриншот: Skillbox Media

Далее открываем vimrc-файл и там пишем вот такой код:

Скриншот: Skillbox Media

Как можно догадаться, этот код подгружает в автокомплит словарь слова из нашего нового файла, если тип файла Ruby. Откроем Ruby-файл. Начинаем вводить sk и нажимаем Ctrl + n:

Скриншот: Skillbox Media

Как видим, редактор предлагает нам автозавершение skillbox. Это работает и vim_da_best тоже.

Естественно, если вы не хотите устанавливать плагины для автокомлита, вы можете скачать подходящие словари для языков программирования, можете сделать словарь для конкретного проекта. Как и во всём в Vim, у вас развязаны руки!

Также по умолчанию автокомплит, если вы ему не укажете словарей, будет предлагать подходящие слова из тех, что появились в буфере за время работы редактора. Для организации более умного автокомплита вам всё-таки понадобится поработать с плагинами YouCompleteMe или DeoComplete. Последний, кстати, скоро заменят на плагин DCC. Внимательно читайте Readme.

Это была краткая инструкция по работе автокомплита в Ruby. Как и всё в Vim, он настраивается настолько глубоко, насколько это нужно пользователю.

Скриншот: Skillbox Media

Ещё раз пробежимся по .vimrc. Большинство команд и настроек оттуда мы уже обсуждали; рассмотрим на конкретных примерах, где и почему их применяет автор. Откроем файл — его можно найти по адресу, указанному на картинке. Рассмотрим его построчно:

Скриншот: Skillbox Media

Команда set nu, как мы помним, показывает номера строк.

set expandtab — интересная настройка, которая при нажатии на Tab вставляет то количество пробелов, которое вам нужно. Помните известную сцену из сериала «Силиконовая долина» про проблему табов и пробелов: мол, пробелы нужно нажимать многократно, а табы — лишь однажды или дважды, зато чужие настройки табуляции влияют на отображение кода. Как раз эта проблема и решена здесь! Нажимаешь Tab один раз, появляются два пробела:

Скриншот: Skillbox Media

И никакая настройка табуляции не повлияет на отображение кода. Магия!!!

set sw=2 — это количество пробелов в одном табе.

set sts=2 — эта настройка нужна для того, чтобы удалять в выравнивании одним нажатием Backspace сразу два пробела.

set nocompatible — выключение совместимости с редактором Vi.

filetype off — мы уже обсуждали, почему эту настройку иногда лучше отключить.

Следующие четыре строчки нужны для лучшей работы vim-plug под Linux:

Скриншот: Skillbox Media

Далее идёт список плагинов, о многих мы с вами уже говорили:

Скриншот: Skillbox Media
  • 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.

Далее идут назначения клавиш на быстрые переходы между окнами.

Следующий блок — довольно интересный:

Скриншот: Skillbox Media

По умолчанию некоторые плагины не включают подсветку синтаксиса для некоторых расширений файлов, хотя код в этих файлах был на тех же языках. Автор добавил эти расширения и указал 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")

Neovim, или Nvim, — самый перспективный и уже занявший достойное место форк Vim.

Новая версия редактора лишена многих проблем. Рассмотрим их вкратце.

Код оригинального Vim сложно поддерживать, поэтому редактор перестал развиваться. Neovim имеет более чистую кодовую базу, и его ядро поддерживает много разработчиков.

Если вы зайдёте в репозитории Vim и Neovim и откроете коммиты, то увидите, что Vim до сих пор поддерживает лично его создатель Брэм Моленар. А в Neovim коммитит большое сообщество.

Neovim поддерживает язык программирования Lua, а скрипты для Vim нужно писать на менее популярном Vimscript. Программистам приходилось изучать его дополнительно, притом что он не так-то прост. Это ограничивало разработку плагинов.

А Lua ежедневно пользуются десятки тысяч людей для других задач, и поэтому Neovim более перспективный. Да, в последние годы Vim-плагины пишут на Python, но его среда исполнения порой замедляет некоторые процессы в работе плагинов. Так что это не самое лучшее решение.

Tree-sitter — это парсер для построения синтаксических деревьев по коду. Благодаря такой интеграции Neovim может гораздо быстрее делать подсветку синтаксиса, автодополнение и выполнять вспомогательные функции плагинов, которые также берут информацию от Tree-sitter.

Практически все функции и возможности, которые мы с вами рассматривали в этом курсе, доступны также и в Neovim. Поэтому советуем начать знакомство с миром Vim именно через Neovim, у которого очень большое будущее. Скорее всего, он станет той же реинкарнацией редактора, какой когда-то был Vim для Vi.

Хотя это дело вкуса. Выбирайте редакторы, которые нравятся именно вам, приносят радость в работе и мотивируют программировать всё больше. Так вы станете лучшими специалистами. А крутые специалисты меняют этот мир к лучшему. И не забывайте: Esc :qa! Enter.

Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу