(n)vi(m): Go插件的使用实例

284 阅读3分钟
  1. nvim配置
  2. 外观和感觉插件
  3. 生产力插件

前面三篇文章涵盖了我在使用nvim(或任何vi(m)真的)时推荐的所有基础知识。接下来是用Go编程时有用的具体插件,特别是我每天在nvim中使用的两个插件。

请记住,我使用 vim-plug来安装插件,所以在下面的小节中,我将只指出安装插件时使用的相应命令,vim-plug ,但不用担心这两个插件都支持不同的安装方式。

下一个gist包含了我对vim-gococ.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.go file_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 能够接管。

vim-go 的替代品包括govimcoc-go等插件。

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 适用于类型,它允许你重命名类型,这类似于 (但这个可以),以及:GoRename
  • Z 显示所选类型的文档。

我强烈建议你看一下vim配置的例子,因为有一些不错的设置可以提高你的vim性能。

coc.nvim 的另一个插件是 Shougo/deoplete.nvim它也支持多种编程语言。

最后,让我们看看vim-go和coc.nvim在行动中的表现吧!

快速展示和讲述使用这两个插件的情况。

go-vim + coc.nvim