前面三篇文章涵盖了我在使用nvim(或任何vi(m)真的)时推荐的所有基础知识。接下来是用Go编程时有用的具体插件,特别是我每天在nvim中使用的两个插件。
请记住,我使用 vim-plug来安装插件,所以在下面的小节中,我将只指出安装插件时使用的相应命令,vim-plug ,但不用担心这两个插件都支持不同的安装方式。
下一个gist包含了我对vim-go 和coc.nvim 的所有配置,在下面的小节中我将给你更多关于具体配置的背景。
1) fatih/vim-go
vim-go是如今Go的事实插件,它支持编译、测试和执行Go程序,以及运行代码覆盖、查找文档、符号/定义声明等。
要安装它,请使用。
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }
我使用的配置映射了一些键,用于编译、测试和运行代码覆盖,使用领导键。
function! s:build_go_files()
let l:file = expand('%')
if l:file =~# '^\f\+_test\.go$'
call go#test#Test(0, 1)
elseif l:file =~# '^\f\+\.go$'
call go#cmd#Build(0)
endif
endfunction
autocmd FileType go nmap <leader>b :<C-u>call <SID>build_go_files()<CR>
autocmd FileType go nmap <Leader>c <Plug>(go-coverage-toggle)
autocmd FileType go nmap <leader>t <Plug>(go-test)
此外,我还使用了一些新的命令来处理备用/测试文件。
autocmd Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit')
autocmd Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit')
autocmd Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split')
autocmd Filetype go command! -bang AT call go#alternate#Switch(<bang>0, 'tabe')
这给了我们以下的命令。
:A用备用的测试文件替换当前的缓冲区。因此,如果文件是 ,那么 将被加载。file.gofile_test.go:AV类似于 ,但现在使用的是垂直分割。:A:AS类似于 ,但现在使用的是水平分割。:A:AT类似于 ,但现在打开了一个新标签。:A
接下来,我们有。
let g:go_list_type = "quickfix" " error lists are of type quickfix
let g:go_fmt_command = "goimports" " automatically format and rewrite imports
let g:go_auto_sameids = 1 " highlight matching identifiers
let g:go_def_mapping_enabled = 0 " coc.vim will do `gd`
上面的配置允许你做以下事情。
- 错误使用
quickfix来显示错误。 goimports在保存文件时自动调用。- 当光标在其名称上时,匹配的标识符被突出显示,并且
- 在调用
gd时要禁用:GoDef,这是为了让coc.nvim能够接管。
2) neoclide/coc.nvim
neoclide/coc.nvim是一个添加自动完成功能的插件,支持语言服务器协议,因此支持 gopls!
要安装它,首先要确保你安装了nodejs 。
brew install nodejs
然后安装该插件。
Plug 'neoclide/coc.nvim', {'branch': 'release'}
下面的配置。
nmap <silent> gr <Plug>(coc-references)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> rn <Plug>(coc-rename)
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocAction('doHover')
endif
endfunction
让你做以下事情。
gr列出对所选符号的所有引用,例如,使用所述类型的其他类型。gi对接口类型起作用,它允许你列出实现选定接口的类型。rn适用于类型,它允许你重命名类型,这类似于 (但这个可以),以及:GoRenameZ显示所选类型的文档。
我强烈建议你看一下vim配置的例子,因为有一些不错的设置可以提高你的vim性能。
coc.nvim 的另一个插件是 Shougo/deoplete.nvim它也支持多种编程语言。
最后,让我们看看vim-go和coc.nvim在行动中的表现吧!
快速展示和讲述使用这两个插件的情况。
