vim: превращаем редактор в “IDE” – плагины и вот это вот всё

By | 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.