背景
接上篇neovim安装 && vim-plug插件管理器安装 我们来打造golang开发环境
插件
vim-go
这应该是我们使用IDE最基本的需求, 没代码提示那效率就太低了, 还容易写错.
这里使用非常著名的vim-go来作为代码提示插件:
在上节的~/.config/nvim/init.vim
文件中相应位置添加Plug 'fatih/vim-go'
安装完vim-go之后,打开nvim 使用 :GoInstallBinaries
安装依赖包, 截图:
默认打开go文件,语法高亮是不全的,也没有像vscode 一样保存自动格式化,所以还需做简单配置:
call plug#end()
" 注意这一段是在 call plug#end()之后
" vim-go
let g:go_fmt_command = 'gofmt'
let g:go_autodetect_gopath = 1
" let g:go_bin_path = '$GOBIN'
let g:go_highlight_types = 1
let g:go_highlight_fields = 1
let g:go_highlight_functions = 1
let g:go_highlight_function_calls = 1
let g:go_highlight_extra_types = 1
let g:go_highlight_generate_tags = 1
" Open :GoDeclsDir with ctrl-g
" nmap <C-g> :GoDeclsDir<cr>
" imap <C-g> <esc>:<C-u>GoDeclsDir<cr>
augroup go
autocmd!
autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4
augroup END
coc.vim
其实安装完vim-go就已经有了代码补全,但是体验不是很好。刚开始也使用过 YouCompleteMe 但是被劝退了,编译复杂 依赖多 有的包网不好还下载不下来,虽然最后勉强成功安装,然而没太看懂配置,就放弃了。最后了解到国人开发的 coc.nvim,使用 LSP 异步加载,配置方便,开箱即用! 在nvim下也有像IDE一样的悬浮窗功能。各个功能使用下来和IDE代码补全不相上下。
Plug 'neoclide/coc.nvim', {'branch': 'release'}
coc.vim需要nodejs支持, 参考: https://github.com/neoclide/coc.nvim#quick-start
安装好nodejs后, 进nvim, 执行: :CocInstall coc-go
就可以了,
效果:
ale
其实coc.nvim已经自带错误处理,但是为了让专业的插件干专业的事,所以这里使用ale来处理代码错误,需要在coc.nvim配置文件中添加 “coc.preferences.diagnostic.displayByAle”: true , 否则插件之间会有冲突。ale是一个异步的错误处理的插件,支持各种语言,配置相对简单。
Plug 'dense-analysis/ale'
" ale-setting {{{
let g:ale_set_highlights = 1
let g:ale_set_quickfix = 1
"自定义error和warning图标
let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚡'
"在vim自带的状态栏中整合ale
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
"显示Linter名称,出错或警告等相关信息
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
"打开文件时不进行检查
let g:ale_lint_on_enter = 1
"普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>s触发/关闭语法检查
" nmap <Leader>l :ALEToggle<CR>
"<Leader>d查看错误或警告的详细信息
nmap <Leader>d :ALEDetail<CR>
let g:ale_linters = {
\ 'go': ['golint', 'go vet', 'go fmt'],
\ }
遇到的问题
[coc.nvim] Server languageserver.golang failed to start: Launching server “languageserver.golang” using command gopls failed.
表示gopls命令没安装, 参考这里安装:
# 以下需要go 1.18+版本
go install golang.org/x/tools/gopls@latest