基于neovim打造golang开发环境

本文介绍了如何在Neovim中配置Go语言开发环境,包括安装vim-go插件以实现代码提示,通过设置让nvim在打开Go文件时自动进行语法高亮和格式化。此外,还引入了coc.nvim作为代码补全工具,并配置ale进行异步错误检查。遇到的问题主要是gopls未安装,解决方法是通过goinstall获取。整个配置过程使得Neovim具备了类似IDE的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

接上篇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

参考

https://www.amistyrain.com/post/2020/07/25/neovim/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值