Vim для Go

Есть такой древний редактор текстов. Vi. После был создан Vim - улучшенный Vi.

Созданный программистом для программистов (и админов).

В древние времена не было повсеместных мышей и дополнительных клавиш (в терминалах при удаленной работе они не всегда есть). И авторы Vi и Vim заточил редакторы на использование основной части клавиатуры.

В наше время оказалось, что работа без мыши и с использование основной части клавиатуры все так же удобна. Производительность труда по редактированию программ/конфигурационных файлов возрастает.

Под Linux он запросто может оказаться текстовым редактором по умолчанию в вашей системе. Под Windows и MacOSX - есть специальные версии.

Управление Vi/Vim очень отличается от других текстовых редакторов. Выпендриться удалось еще ACME (тоже, кстати, редактор для программистов/админов, но там много-много завязано на мышь, можно прямо в тесте писать команды и выполнять их одним нажатием мыши). Все прочие текстовые редакторы - подобны друг другу.

Управление настолько необычно, что по умолчанию сконфигурированный Vim первым делом сообщает запустившему его человеку, что для выхода нужно нажать ":q" и ENTER.

Однако, именно редактирование текстов в Vim чрезвычайно удобно и быстро. Если освоишь.

Первым делом рекомендуется пройти "vimtutor" - входит в базовую поставку редактора. Это просто скрипт, который открывает одноименный текстовый файл. В базовую комплектацию редактора входит и версия "vimtutor" на русском языке.

Однако, редактор универсален. А, значит, не заточен под Go. Строго говоря, он вообще не заточен под какой-либо язык программирования. Тем не менее программисты его очень любят (не все).

Для заточки под конкретный язык программирования к редактору нужно добавить плагины.

Для Go это прежде всего комплект

https://github.com/fatih/vim-go

Это не единственный вариант, но "vim-go" является стандартом де-факто и даже официальным для Go.

Что установить к "vim-go" дополнительно можно посмотреть в документации к vim-go

Или у одного из известных Go-программистов

http://vim.spf13.com/

Или самые популярные модуля

http://vimawesome.com/

Мой набор:

bufexplorer

ctrlp.vim

go-explorer

neocomplete.vim

neosnippet-snippets

neosnippet.vim

nerdcommenter

nerdtree

numbers.vim

peaksea

syntastic

syntastic-more

tagbar

vim-airline

vim-colors-solarized

vim-easymotion

vim-go

vim-misc

vim-multiple-cursors

vim-session

vim-surround

Полезное чтиво:

http://habrahabr.ru/post/98393/

http://vim.spf13.com/

http://0value.com/my-Go-centric-Vim-setup

http://blog.gopheracademy.com/... vironment/

http://blog.lazyhacker.com/201... pment.html

https://gist.github.com/criden... 331d5afa6b

and

https://github.com/amix/vimrc

http://farazdagi.com/blog/2015/vim-as-golang-ide/

and

https://github.com/farazdagi/vim-go-ide

Добавлено через 27 минут

Вырезки из vimrc (конфигурационного файла):

Если мы под Windows, то используем GVim, а не текстовый Vim,

отключаем в GVim лишние элементы интерфейса

set guioptions-=m "remove menu bar

set guioptions-=T "remove toolbar

set guioptions-=r "remove right-hand scroll bar

set guioptions-=L "remove left-hand scroll bar

Чтобы разворачивать GVim под Windows на весь экран

http://www.vim.org/scripts/scr... pt_id=2596

https://github.com/derekmcloug... reen_win32

map <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR>

и при старте

au GUIEnter * call libcallnr

Шрифты посимпатичнее

if has

if has

set guifont=Inconsolata\ 12

elseif has

set guifont=Menlo\ Regular:h14

elseif has

set guifont=Consolas:h11:cANSI

endif

endif

Ввод русских букв, переключение работает только в режимах ввода текста

переключение происходит по нажатию Ctrl+^

Для работы этой переключалки нужен файл "keymap/russian-jcukenwin.vim",

его можно взять с официального сайта vim

set keymap=russian-jcukenwin

set iminsert=0

set imsearch=0

курсор будет светиться голубым когда не латиница.

highlight lCursor guifg=NONE guibg=Cyan

орфография с буквой Ё, не забудьте поставить словарь

программисту не нужно, скорее это для написания различных длинных русских текстов

setlocal spell spelllang=ru_yo,en_us

под Win надо. А то норовит в 1251 работать

set encoding=utf8

возможные кодировки файлов и последовательность определения.

set fileencodings=utf8,cp1251

или так

set fileencodings=utf8

перемещение между "оконными разбиениями"

для Windows GVim назначение клавиш Alt должно быть не выше назначения кодировки utf-8

nmap <silent> <A-k> :wincmd k<CR>

nmap <silent> <A-j> :wincmd j<CR>

nmap <silent> <A-h> :wincmd h<CR>

nmap <silent> <A-l> :wincmd l<CR>

цветовая схема Solarized

http://ethanschoonover.com/solarized

syntax enable

set background=dark

colorscheme solarized

Сворачиваем не нужные куски кода

set foldmethod=syntax

set foldnestmax=10

set nofoldenable

set foldlevel=0

управление плугинами Pathogen

execute pathogen#infect

это вроде не относится непосредственно к плугину Pathogen,

но зачем-то рекомендуется в его документации

syntax on

filetype plugin indent on

NERD Tree

Аналог дерева файлов проекта в других IDE. Удобно для открытия файлов.

открывать и закрывать дерево проекта по Ctrl+N

map <F3> :NERDTreeToggle<CR>

открывать дерево файлов проектов всегда при запуске Vim

autocmd vimenter * NERDTree

отображение дерева покрасивше: вместо + и - используем стрелки

let g:NERDTreeDirArrows = 1

let g:NERDTreeDirArrowExpandable = '▸'

let g:NERDTreeDirArrowCollapsible = '▾'

файлы с разным расширением разного цвета

function! NERDTreeHighlightFile

exec 'autocmd filetype nerdtree highlight ' . a:extension .' ctermbg='. a:bg .' ctermfg='. a:fg .' guibg='. a:guibg .' guifg='. a:guifg

exec 'autocmd filetype nerdtree syn match ' . a:extension .' #^\s\+.*'. a:extension .'$#'

endfunction

vim-go - базовый набор для языка программирования golang.

многие плугины используют его возможности.

После установки плагина в vim нужно выполнить команду :GoInstallBinaries

эту команду нужно выполнить один раз. Эта команда устанавливает утилиты в $GOPATH/bin,

а если не задана переменная среды окружения $GOPATH, то утилиты ставятся в $GOBIN

let g:go_auto_type_info = 1

tagbar

навигация по тегам программы

требует какого-нибудь ctags: exuberant ctags, exctags (FreeBSD), ctags, ectags, tags.

под windows просто взял ctags.ext с

http://ctags.sourceforge.net/

и кинул рядом с exe-файлом Vim

под unix обычно что-то из семейства tags сразу установлено в системе

В настройках плагина vim-go уже указаны настройки для tagbar,

кроме клавиш управления

nmap <F8> :TagbarToggle<CR>

Синтаксические подсказки

neocomplete.vim

С ним логичнее использовать и другие плугины того же автора, например neosnipper.vim

Под требует, чтобы Vim был скомпилирован с поддержкой Lua.

let g:acp_enableAtStartup = 0

let g:neocomplete#enable_at_startup = 1

let g:neocomplete#enable_smart_case = 1

let g:neocomplete#sources#syntax#min_keyword_length = 3

let g:neocomplete#lock_buffer_name_pattern = '\*ku\*'

let g:neocomplete#sources#dictionary#dictionaries = {

\ 'default' : '',

\ 'vimshell' : $HOME.'/.vimshell_hist',

\ 'scheme' : $HOME.'/.gosh_completions'

\ }

if !exists

let g:neocomplete#keyword_patterns = {}

endif

let g:neocomplete#keyword_patterns['default'] = '\h\w*'

inoremap <expr><C-g> neocomplete#undo_completion

inoremap <expr><C-l> neocomplete#complete_common_string

inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>

function! s:my_cr_function

" return "\<C-y>\<CR>"

" For no inserting <CR> key.

return pumvisible() ? "\<C-y>" : "\<CR>"

endfunction

inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"

inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"

inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"

"inoremap <expr><Space> pumvisible() ? "\<C-y>" : "\<Space>"

autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS

autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags

autocmd FileType python setlocal omnifunc=pythoncomplete#Complete

autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

if !exists

let g:neocomplete#sources#omni#input_patterns = {}

endif

let g:neocomplete#sources#omni#input_patterns.perl = '\h\w*->\h\w*\|\h\w*::'

автоформатирование файлов XML при открытии

au FileType xml exe ":silent 1,$!xmllint --format --recover - 2>/dev/null"

numbers.vim

относительная нумерация строк, удобно для быстрого перемещения.

set number

сама команда не относится к плагину, но рекомендуется автором плагина для vim 7.4

ctrlp.vim аналог функционала CtrlP что в Sublime

Перемещение по кускам проекта в разных разрезах

с учетом где был недавно.

let g:ctrlp_map = '<c-p>'

let g:ctrlp_cmd = 'CtrlP'

Syntastic

Проверка синтаксиса без компиляции, при сохранении файлов

syntastic-more

проверка для Google AppEngine для golang

let g:go_appengine_path ="\go_appengine"

go-explorer

Документация по golang (по стандартным и доп. пакетам). Для его работы нужено установить еще и "go get github.com/garyburd/go-explorer/src/getool"

NERD Commenter

Программный код можно быстро закоментировать/убрать комментарий

neosnippet.vim,

если уже стоит neocomplete.vim, то логичным будет взять того же автора плугин

До neosnippet.vim нужно установить neocomplete.vim

imap <C-k> <Plug>

smap <C-k> <Plug>

xmap <C-k> <Plug>

smap <expr><TAB> neosnippet#expandable_or_jumpable() ?

\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

if has

set conceallevel=2 concealcursor=niv

endif

surround.vim

Удаление, изменение, добавление кавычек, скобок, закрывающих/открывающих тегов, автозакрытие.

vim-easymotion

Упрощение перемещений по тексту

bufexplorer

Управление буфферами.

Не особо нужно для 7.4. Для более старых версий был очень полезен

YangRing.vim - история изменения файла отслеживается и глубже, чем изначально встроено в Vim

vim-airline - статусная строка, умеет интегрироваться с несколькими популярными плагинами

в том числе и с некоторыми из этого конфигурационного файла

vim-multiple-cursors - аналог multiple selection в Sublime Text

vim-session

запоминает/восстанавливает список открытых файлов/окон и т.п.

vim-misc

нужно для vim-session