golang为Vim/Neovim添加gopls语言服务器功能的插件coc-go使用
coc-go:为Vim/Neovim添加gopls语言服务器功能的插件
coc-go是一个使用gopls为coc.nvim提供Go语言服务器支持的扩展插件。
安装
在Vim/Neovim中运行以下命令安装:
:CocInstall coc-go
功能特性
coc-go提供了gopls的所有功能特性。
命令
除了gopls提供的命令外,coc-go还提供了以下额外命令:
命令 | 描述 |
---|---|
go.gopls.tidy |
运行gopls.tidy LSP命令 |
go.impl.cursor |
生成接口存根 |
go.install.gomodifytags |
安装/更新gomodifytags |
go.install.goplay |
安装/更新goplay |
go.install.gopls |
安装/更新gopls |
go.install.gotests |
安装/更新gotests |
go.install.impl |
安装/更新impl |
go.install.tools |
安装/更新所有工具 |
go.playground |
在Go playground上运行 |
go.tags.add |
为结构体字段添加标签 |
go.tags.add.line |
为当前行的结构体字段添加标签 |
go.tags.add.prompt |
为结构体字段添加标签(交互式) |
go.tags.clear |
清除结构体字段的所有标签 |
go.tags.clear.line |
清除当前行结构体字段的所有标签 |
go.tags.remove |
移除结构体字段的标签 |
go.tags.remove.line |
移除当前行结构体字段的标签 |
go.tags.remove.prompt |
移除结构体字段的标签(交互式) |
go.test.generate.exported |
为文件中的导出函数生成单元测试 |
go.test.generate.file |
为文件生成单元测试 |
go.test.generate.function |
为当前函数生成单元测试 |
go.test.toggle |
切换测试文件 |
go.version |
打印扩展版本 |
示例
添加或移除特定标签
" 添加yaml标签
CocCommand go.tags.add yaml
" 添加多个标签
CocCommand go.tags.add yaml json xml
" 移除xml标签
CocCommand go.tags.remove xml
保存时自动添加缺失的import
" 在保存Go文件时自动组织import
autocmd BufWritePre *.go :silent call CocAction('runCommand', 'editor.action.organizeImport')
为命令映射快捷键
" 为常用标签操作设置快捷键
autocmd FileType go nmap gtj :CocCommand go.tags.add json<cr>
autocmd FileType go nmap gty :CocCommand go.tags.add yaml<cr>
autocmd FileType go nmap gtx :CocCommand go.tags.clear<cr>
代码片段
代码片段是从golang/vscode-go导入的,需要安装coc-snippets才能使用。
配置选项
coc-go提供了丰富的配置选项,可以在coc-settings.json中设置。以下是一些主要配置项:
配置项 | 描述 | 默认值 |
---|---|---|
go.checkForUpdates |
启动时检查gopls更新 | install |
go.goplsOptions |
gopls选项设置 | - |
go.goplsPath |
gopls二进制文件路径 | - |
go.goplsUseDaemon |
以daemon模式运行gopls | true |
go.tags |
标签相关设置 | - |
go.tests |
测试相关设置 | - |
go.trace.server |
gopls跟踪级别 | off |
示例配置
{
"go.goplsOptions": {
"completeUnimported": true
}
}
开发
- 运行
npm run build
或npm run build:watch
- 链接扩展:
npm run link
/npm run unlink
相关工具
coc-go依赖于以下Go工具:
- gomodifytags - 用于结构体标签操作
- goplay - 用于Go playground
- gopls - Go语言服务器
- gotests - 用于生成测试
- impl - 用于生成接口实现
常见问题
coc-go与vim-go比较
coc-go的目标不是重现vim-go的所有功能,而是提供一个方便的方式来安装和使用gopls与coc.nvim集成。
使用coc-go与wasm
在coc-settings.json中添加以下配置:
{
"go.goplsEnv": {
"GOOS": "js",
"GOARCH": "wasm"
}
}
以daemon模式运行gopls
coc-go默认以daemon模式运行gopls(通过传递-remote=auto
参数)。要禁用此行为,可将go.goplsUseDaemon
设置为false
。
许可证
MIT © Josa Gesell
更多关于golang为Vim/Neovim添加gopls语言服务器功能的插件coc-go使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang为Vim/Neovim添加gopls语言服务器功能的插件coc-go使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用coc-go为Vim/Neovim添加gopls语言服务器功能
coc-go是一个基于coc.nvim的Go语言插件,它为Vim/Neovim提供了gopls语言服务器的集成支持,可以带来智能代码补全、定义跳转、代码格式化等现代化IDE功能。
安装准备
1. 安装依赖
首先需要安装以下依赖:
- Neovim (推荐) 或 Vim 8.1+
- Node.js (用于运行coc.nvim)
- Go工具链 (go命令)
2. 安装coc.nvim
coc-go是基于coc.nvim的插件,所以需要先安装coc.nvim:
" 使用vim-plug安装
Plug 'neoclide/coc.nvim', {'branch': 'release'}
然后运行:PlugInstall
安装插件。
安装coc-go
方法1:通过coc安装
在Vim/Neovim中执行:
:CocInstall coc-go
方法2:使用插件管理器
如果你使用vim-plug等插件管理器:
Plug 'josa42/coc-go'
配置coc-go
基本配置
在vim配置文件中添加(通常是~/.config/nvim/init.vim
或~/.vimrc
):
" 启用coc-go
let g:coc_global_extensions = ['coc-go']
" 设置gopls路径(可选)
let g:go_gopls_enabled = 1
let g:go_gopls_options = ['-remote=auto']
" 快捷键映射
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
nmap <silent> rn <Plug>(coc-rename)
高级配置
可以创建~/.config/nvim/coc-settings.json
进行更详细的配置:
{
"go.goplsOptions": {
"staticcheck": true,
"completeUnimported": true,
"usePlaceholders": true
},
"go.trace.server": "verbose",
"go.testFlags": ["-v"],
"go.formatTool": "goimports",
"go.lintTool": "golangci-lint",
"go.lintOnSave": "package"
}
常用功能
代码补全
在编辑Go文件时,输入时会自动触发补全,按<C-Space>
可以手动触发。
跳转定义
gd
- 跳转到定义gy
- 跳转到类型定义gi
- 跳转到实现gr
- 查看引用
代码操作
K
- 显示文档rn
- 重命名符号<leader>a
- 代码操作(如添加缺失的导入)
测试支持
:CocCommand go.test.generate
- 为当前函数生成测试:CocCommand go.test.file
- 运行当前文件的测试:CocCommand go.test.package
- 运行当前包的测试
常见问题解决
1. gopls未启动
确保已安装gopls:
go install golang.org/x/tools/gopls@latest
2. 补全不工作
检查coc-go是否已正确安装:
:CocList extensions
3. 性能问题
可以尝试调整gopls内存设置:
{
"go.goplsOptions": {
"memoryMode": "DegradeClosed",
"build.experimentalWorkspaceModule": true
}
}
自定义命令
可以创建自定义命令来增强体验:
" 格式化Go代码
command! -nargs=0 Format :call CocAction('format')
" 组织导入
command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport')
" 添加当前文件所有缺失的导入
command! -nargs=0 AddAllMissingImports :call CocAction('runCommand', 'go.import.add.all')
coc-go为Vim/Neovim提供了强大的Go语言开发支持,结合gopls的功能,可以让你的Go开发体验接近现代IDE的水平。