vim: превращаем редактор в «IDE» — плагины и вот это вот всё

Автор: | 11/15/2018
 

Пользуюсь vim-ом уже не первый год, и всё хотелось превратить его в «настощий IDE» — но как-то было лень и руки не доходили.

Т.е., vim, конечно, прекрасен и сам по себе, но сейчас начал в очередной раз ковырять Golang, и очень напрягает писать функции в ЭтОмВоТдУрАцКоМкЕмЕлСтАйЛе и постоянно shift-тить, а потому начал искать плагин для автодополнения имён.

Заодно — доустановил себе всяких других плагинов, которые давно хотелось. Собственно об этом и пост — установка плагинов, их настройка, полезные плагины для vim-а вообще.

Внезапно оказалось, что на Stackoverflow даже существует отдельный форум по vi/vim — https://vi.stackexchange.com.

Установка плагинов

Как правило — плагины устанавливаются в домашний каталог, в папке ~/.vim:

ll ~/.vim
total 0

Путь к ней определяется в vim параметром runtimepath, проверить его можно с помощью :set runtimepath?:

При необходимости его можно изменить, задав в ~.vimrc:

set runtimepath^=~/other/path

Плагины могут быть представлены в разных вариантах — просто .vim файл, .vba (vimball-файл), который содержит все необходимые файлы плагина, или просто набор файлов для различных директорий внутри каталога ~/.vim//plugin/, /doc/, /syntax/ и т.д.

Для установки плагина из .vim файла — его достаточно загрузить в каталог ~/.vim/plugin.

Кроме ручной установки — существует несколько менеджеров для плагинов, например — vim-plug,  pathogenvundle, которые упрощают установку плагинов, состоящих из нескольких директорий-файлов и их обновление.

Установка vim-plug

Дальнейшие примеры будут с использование менеджера vim-plug.

Загружаем файл плагина в каталог .vim/autoload, что бы бы загружался при запуске vim:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

В ~/.vimrc добавляем:

call plug#begin('~/.vim/plugged')

call plug#end()

Между вызовами begin и end — будем добавлять плагины для установки их с помощью vim-plug.

Цветовая схема

Кроме плагинов — vim поддерживает разные цветовые схемы.

Просмотреть имещиеся можно с помощью :colorscheme+пробел+Ctrl+D:

Большая коллекция схем тут>>>.

Для установки темы, например flattened — добавляем её в .vimrc:

call plug#begin('~/.vim/plugged')

" https://github.com/romainl/flattened
Plug 'romainl/flattened'

call plug#end()

Перечитываем конфиг — выполняем :source .vimrc:

И вызываем :PlugInstal:

(vim поддерживает автодополнение команд по TAB, а обновить плагины, установленные с помощью vim-plug можно с помощью PlugUpdate)

Добавляем тему в .vimrc:

colorscheme flattened_dark

Перезапускаем vim:

Полезные плагины

Плагинов для vim — вагон и маленькая тележка, можно добавить интересные в комментарии. Тут приведу только несколько.

lightline

Первый плагин — lightline, который меняет вид строки состояния при работе с файлами.

Добавляем Plug 'itchyny/lightline.vim':

call plug#begin('~/.vim/plugged')

" https://github.com/itchyny/lightline.vim
Plug 'itchyny/lightline.vim'

call plug#end()

Добавляем в .vimrc параметр laststatus со значением 2 — `set laststatus=2`, и showmode в set noshowmode:

...
" https://github.com/itchyny/lightline.vim
Plug 'itchyny/lightline.vim'

call plug#end()

" display lightline
set laststatus=2
set noshowmode
...

Повторяем установку — перечитываем .vimrc, выполняем :PlugInstal:

Перезапускаем редактор:

NERDTree

Ещё один плагин, который очень упрощает навигацию по каталогам-файлам, не выходя из vim.

Добавляем его:

" https://github.com/scrooloose/nerdtree
Plug 'scrooloose/nerdtree'

Что бы запускать его каждый раз при запуске vim — добавляем autocmd vimenter * NERDTree.

Для вызова-скрытия менюшки по комбинации клавиш — добавляем map <C-n> :NERDTreeToggle<CR> (или меняем Ctrl+n на свою):

Повторяем установку, как в примерах выше, и вызываем меню по Ctrl+n:

Для переключения из окна файлов-каталогов к редактируемому фйлу — используем Ctrl+w+w, для отображения скрытых файлов — Shitf+i:

Либо, что бы для переключения между окнами пользоваться мышкой — добавляем параметр mouseset mouse=a.

Что бы создать файл из NERDTree — вызываем меню клавишей m:

Клавишей a — добавляем новый элемент. Если это файл — то просто указываем имя, если директория — добавляем в конце обратный слеш «/«:

vim-go

Собственно тот плагин, с которого всё началось — автодополнение имён функций при написании кода на Go.

Проверяем $GOPATH:

go env GOPATH
/home/setevoy/go

Проверяем PATH в ~/.bashrc — должен включать в себя GOPATH/bin:

export GOPATH=$HOME/go 
export PATH=$PATH:$GOPATH/bin

Устанавливаем плагин vim-go:

...
" https://github.com/fatih/vim-go
Plug 'fatih/vim-go'
...

Выполняем :source .vimrc, :PlugInstall, и вызываем :GoInstallBinaries:

Запускаем vim, и проверяем:

Для вызова автоподстановки имени — используем Ctrl+x и Ctrl+o в INSERT режиме.

Кроме автоподстановки vim-go умеет и многое другое, см. команды тут>>>.

syntastic

Ещё один полезный плагин — проверка синтаксиса.

Устанавливаем:

...
" https://vimawesome.com/plugin/syntastic
Plug 'vim-syntastic/syntastic'
...

Рекомендуемые опции для него:

" syntastic opts
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

Пример его работы с Python, вызов проверки — при сохранении файла или командой :SyntasticCheck:

Но для Go проверка не выполняется.

Проверяем :SyntasticInfo при открытом на редктирование файле go:

Syntastic version: 3.9.0-20 (Vim 801, Linux)
Info for filetype: go
Global mode: active
Filetype go is active
The current file will be checked automatically
Available checkers: go gofmt golint gometalinter govet
Currently enabled checkers: -

Currently enabled checkers: —

Окей, добавляем в .vimrc:

let g:syntastic_go_checkers=['golint']

Проверяем — взываем :SyntasticCheck:

В целом на этом пока всё.

Получившийся .vimrc можно посмотреть в Github.