-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Radu's vim setup
Quick and dirty tips for how to get started with vim and go.
1. Install pathogen
mkdir -p ~/.vim/autoload ~/.vim/bundle curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
And add to the top of ~/.vimrc:
execute pathogen#infect() syntax on filetype plugin indent on
2. Install vim-go
git clone https://github.com/fatih/vim-go.git ~/.vim/bundle/vim-goAdd these to ~/.vimrc:
let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_structs = 1 let g:go_highlight_build_constraints = 1 autocmd FileType go set number fo+=croq tw=100 autocmd Filetype go set makeprg=go\ build\ .
Make sure $GOPATH is set correctly, start vim and run
:GoInstallBinaries
You can now use and map things like :GoDef, :GoReferrers, :GoRename etc. My mappings in ~/.vimrc:
autocmd Filetype go nmap <C-]> :exec("GoDef")<CR> autocmd Filetype go nmap <F9> :GoReferrers<CR> autocmd Filetype go nmap <C-\> <Plug>(go-def-split) autocmd Filetype go nmap <Space> <Plug>(go-info)
WARNING: Avoid using foldmethod syntax with vim-go: it can make vim very slow when you open a paren or start a string.
Optional: set up tagbar
Install exuberant-ctags on your system (yes, this is needed even if we are actually going to use gotags). On Debian:
sudo apt-get install exuberant-ctags
Install gotags:
cd $GOPATH go get -u github.com/jstemmer/gotags cd github.com/jstemmer/gotags go build sudo cp gotags /usr/bin
Install the vim plugin:
cd ~/.vim/bundle git clone git://github.com/majutsushi/tagbar
Add this to ~/.vimrc:
let g:tagbar_type_go = { \ 'ctagstype' : 'go', \ 'kinds' : [ \ 'p:package', \ 'i:imports:1', \ 'c:constants', \ 'v:variables', \ 't:types', \ 'n:interfaces', \ 'w:fields', \ 'e:embedded', \ 'm:methods', \ 'r:constructor', \ 'f:functions' \ ], \ 'sro' : '.', \ 'kind2scope' : { \ 't' : 'ctype', \ 'n' : 'ntype' \ }, \ 'scope2kind' : { \ 'ctype' : 't', \ 'ntype' : 'n' \ }, \ 'ctagsbin' : 'gotags', \ 'ctagsargs' : '-sort -silent' \ }
You can now use or map :TagbarToggle in vim.
Optional: set up ag
Install ag (a faster, better grep) on your system. On Debian:
sudo apt-get install silversearcher-ag
Then install the vim plugin
cd ~/.vim/bundle && git clone https://github.com/rking/ag.vim ag
You can use commands like :Ag in vim now. Here are some useful mappings that you can put in ~/.vimrc:
nmap <F7> :let @/ = "<C-R><C-W>"<CR>:Ag -s -w <C-R><C-W> *<CR> nmap <F8> :let @/ = "<C-R><C-W>"<CR>:!ag -s -w <C-R><C-W> *<CR>
These search for the identifier under the cursor, and set the search register so you can keep searching within files with n.
I created a custom syntax highlighting file for log messages. To install, download crlog.vim and put it in ~/.vim/syntax/. It can be used by setting filetype=crlog. I use /tmp/log usually, so I have this in my vimrc:
autocmd BufNewFile,BufRead /tmp/log set filetype=crlog
A screenshot:
Irfan Sharif built a plugin to automatically run crlfmt, our style linter for Go code that enforces the CockroachDB Style Guide found here.
git clone https://github.com/irfansharif/vim-crlfmt.git ~/.vim/bundle/vim-crlfmt
You can see my ~/.vimrc here.
My ~/.vim directory is here.