Используем VIM как редактор golang
Mon, Dec 28, 2015Краткая инструкция по настройке VIM в качестве редактора golang-файлов. Не претендует на полноту изложения, но может стать отправной точкой на пути к среде разработки своей мечты. В одну статью явно не вмещается, поэтому не буду и стараться. Сначала рассмотрим установку основных плагинов. потом добавим удобства в работе дополнительными плагинами и настройками, затем остановимся на каких-то интересных моментах подробнее.
Устанавливаем VIM
В интернете можно найти массу инструкций по установке VIM на разные операционные системы. Нет смысла повторяться. Для меня вся установка уместилась в одну консольную команду.
$ sudo apt-get install vim vim-gtk
Если вы пользователь Ubuntu 15.04, то вам, скорее всего, тоже ничего больше не понадобится.
Рекомендую сразу же добавить в VIM какую-нибудь популярную систему управления плагинами, т.к. на первых порах настривать многочисленные плагины придётся часто. Мне нравится Vundle.
Сначала клонируем репозиторий Vundle в папку с настройками VIM.
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Затем создаём конфигурационный файл vim
$ touch ~/.vimrc
И добавляем в него следующие строки:
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
call vundle#end()
filetype plugin indent on
Выполняем
$ vim +PluginInstall +qall
Всё, Vundle установлен. Теперь каждый новый плагин нужно будет прописывать в файле настроек перед вызовом vundle#end
.
А после повторного выполнения PluginInstall
новые плагины из файла конфигурации будут установлены в систему.
Настраиваем цвета редактора
Для VIM уже создано бесчисленное множество цветовых схем. Очень странно, если вам не удастся подобрать из всего предложенного многообразия что-то на свой вкус.
Скачиваем какой-нибудь готовый набор цветовых схем. Например, отсюда:
$ git clone https://github.com/flazz/vim-colorschemes.git
Копируем содержимое папки colors
из клонированного репозитория в папку ~/.vim/colors
.
После этого, добавляем в файл .vimrc
строку
colorscheme codeschool
Всесто codeschool
можно вписать название любой понравившейся схемы.
Название темы соотвествует названию файла из папки colors
. Перезапускаем VIM - радуемся результату или идём на запись к окулисту.
Существует плагин, позволяющий изменять цветовую схему не перегружая VIM, но реального применения я ему так и не нашел.
Всё-таки настройка цветовой схемы - операция раховая. Настроил и забыл.
Устанавливаем плагин поддержки golang
Собственно, всё, что нужно, установить плагин vim-go. В .vimrc
добавляем строку
Plugin 'fatih/vim-go'
Выполняем команду :PluginInstall
. Затем, :GoInstallBinaries
. Внимательно читаем результат выполнения этой команды.
Скорее всего, для корректной работы плагина придется доставить на компьютер часть стандартных инструментов Go.
Со всеми функциями плагина знакомимся в описании проекта на github’е.
Управляем файлами, не выходя из редактора
Для того, чтобы постоянно не переключаться в какой-либо файловый менеджер для открытия или создания файла, устанавливаем плагин NERDTree. Этот плагин отображает в левой части окна VIM дерево каталогов с возможностью удобной навигации, открытия, создания и удаления файлов.
Выполняем уже привычную операцию. Добавляем в .vimrc
строку:
Plugin 'scrooloose/nerdtree'
Добавим также открытие дерева каталогов в “автозапуск” VIM.
autocmd vimenter * NERDTree " Открывать дерево каталогов при запуске VIM
Выполняем команду PluginInstall
. Чтобы ознакомиться с командами NERDTree достаточно в его окне нажать ?
.
В открывшейся справке можно прочитать об основных функциях и горячих клавишах. Для закрытия справки нажимаем ?
повторно.
Особое внимание стоит обратить на команду m
. Из описания непонятно, что за меню будет вызвано. Но именно из этого меню
происходит добавление и удаление файлов и папок.
Небольшой тюнинг окна редактирования
Всесто описания каждой опции приведу небольшой кусок конфигурационного файла с комментариями.
set number " показывать номера строк в редакторе
set colorcolumn=120 " вертикальная линия после 120 символов
set tabstop=4 " ширина табуляции
set softtabstop=4 " ширина таба при использовании всесто него пробелов
Автодополнение кода
Тяжело представить современную IDE без функции автодополнения кода. Конечно, нам тоже хочется быть современными. Устанавливаем плагин neocomplete.vim и сразу добавляем его в автозагрузку.
Plugin 'Shougo/neocomplete'
...
" neocomplete settings
let g:neocomplete#enable_at_startup = 1
Рекомендую внимательно прочитать на странице плагина требования к версии VIM. Есть вариант, что редактор придётся обновить.
Настройки neocomplete - тема отдельной статьи. Пока что оставим всё по умолчанию. Единственное, сразу отключим назойливое окошко в верхней части экрана. Его добавляет не neocomplete, а VIM. В настройках редактора есть “режим завершения”, где указано сразу два режима - menu и preview. Menu оставляем, preview отключаем.
set completeopt-=preview
Горячие клавиши
Есть смысл настроить дополнительные горячие клавиши для наиболее часто используемых операций, типа сохранения файла, копирования, отмены действия и т.п.
" CTRL-s - сохранить файл
noremap <silent> <C-S> :update<CR>
vnoremap <silent> <C-S> <C-C>:update<CR>
inoremap <silent> <C-S> <C-O>:update<CR>
" CTRL-F4 - закрыть окно
noremap <C-F4> <C-w>c
inoremap <C-F4> <C-o><C-w>c
cnoremap <C-F4> <C-c><C-w>
onoremap <C-F4> <C-c><C-w>c
" SHIFT-Del - "вырезание" в системный буфер
vnoremap <S-Del> "+x
" CTRL-Insert - копирование в системный буфер
vnoremap <C-Insert> "+y
" SHIFT-Insert - вставка из системного буфера
map <S-Insert> "+gP
cmap <S-Insert> <C-R>+
" CTRL-z - отмена действия
noremap <C-z> u
inoremap <C-z> <C-O>u
" CTRL-y - вернуть отменённое назад
noremap <C-y> <C-R>
inoremap <C-y> <C-O><C-R>
" CTRL-d - дублирование текущей строки
imap <C-d> <esc>yypi
Результат сегодняшней работы
Тем, что мы собрали, уже можно пользоваться для программирования на go, но до совершенства, конечно, ещё очень далеко. Хочется быстрой навигации по коду, закладок, отладчика, проверки синтаксиса и т.д. и т.п. А VIM хорош как раз тем, что все эти желания осуществимы. К их осуществлению вернемся в следующих заметках. А после сегоднешней настройки у нас получилось примерно следующее.