vim进行golang开发
下面vim插件安装都基于vim8之后的native package manager,低版本的vim,需要借助一些第三方的package manager,如vundle、vim-plugin等。
主要通过vim-go和coc.nvim插件实现。其中vim-go提供golang的基础支持,包括build,run,syntax highlighting, symbol/declaration,代码补全等。coc.nvim主要提供代码补全功能。
vim-go通过Language Server Protocol (LSP)与Language Server通信,以实现代码补全等功能。Language Server Protocol是微软提出的一个协议,用于IDE和Language Server之间进行通信的协议,可以使得Language Server供不同的IDE复用。而gopls是vim-go默认的Language Server。
gopls实现的代码补全,在insert模式下,通过ctl+x ctl+p呼出,通过ctl+n, ctl+p 切换。
coc.nvim完全支持LSP 3.16,支持多种语言,且支持额外的插件增强。coc克通过gopls协作提供代码补全等,也可以和其它Language Server协作。
关于LSP,可以参考下面链接:
Language Server Protocol
vim-go通过gopls提供代码补全。
vim-go安装配置
vim-go为vim增加golang支持,包括build,run,syntax highlighting, symbol/declaration,代码补全等。
代码补全通过gopls实现,内置默认的代码补全功能。
安装升级vim 8
vim-go要求的vim最低版本为 8.1.2269,版本低的话可以手动升级,建议源码编译安装。
安装:
# 下载对应的tag https://github.com/vim/vim/tags # 编译安装 make make install
安装vim-go
vim8之前通常需要借助第三方的plugin管理器如vundle管理plugin。从vim8可以通过package的方式原生支持plugin。安装卸载插件非常简单。
安装:
下载最新develop版本,或者下载稳定的Release版本,放置到vim的plugin目录下即可# develop版本 git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go # release版本 https://github.com/fatih/vim-go/releases
卸载:
rm -rf ~/.vim/pack/plugins/start/vim-go
安装vim-go依赖的二进制程序
vim :GoInstallBinaries # 会自动通过github下载需要的二进制程序 # 放置到$GOBIN or $GOPATH/bin, 默认 $HOME/go/bin ...... github.com/klauspost/asmfmt/cmd/asmfmt@latest to folder /home/gpadmin/go/bin/ vim-go: installing finished!
升级vim-go和依赖的二进制程序
:GoUpdateBinaries
配置vimrc
vi ~/.vimrc filetype plugin indent on
使用vim-go
参考doc/vim-go.txt或者vim中的帮助:help vim-go(需要先:helptags ALL)
官方Tutorial内容有些过时了,有问题首选参考vim-go.txt。
Navigate:
功能 命令 快捷键 go to defination :GoDef gd / ctrl-] go back :GoDefPop ctrl-t 显示jumpstack :GoDefStack - 清理jumpstack :GoDefStackClear -
详细见:
~/.vim/pack/plugins/start/vim-go/ftplugin/go.vim
如
nnoremap <buffer> <silent> gd :GoDef<cr>
trouble-shooting
粘贴代码缩进问题:
现象:vimrc中配置'filetype plugin indent on'后,vim中粘贴代码出现错误的缩进。
办法:使用:paste模式粘贴1. :set paste 2. 进入insert模式粘贴代码 3. :set nopaste
参考资料
coc.nvim安装配置
主要介绍coc.nvim安装配置。依赖nodejs,需要首先安装nodejs
nodejs安装
以下主要通过dnf从centos的default appstream中安装。也可以通过源码安装。
查看nodejs的stream:
sudo dnf module list nodejs
nodejs版本
显示[d]的为默认版本,由于coc.nvim要求nodejs版本> 14.14,需要进行配置。Name Stream Profiles Summary nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime nodejs 12 common [d], development, minimal, s2i Javascript runtime nodejs 14 common [d], development, minimal, s2i Javascript runtime nodejs 16 common [d], development, minimal, s2i Javascript runtime
切换nodejs版本
dnf module enable nodejs:16
检查nodejs版本
Name Stream Profiles Summary nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime nodejs 12 common [d], development, minimal, s2i Javascript runtime nodejs 14 common [d], development, minimal, s2i Javascript runtime nodejs 16 [e] common [d], development, minimal, s2i Javascript runtime
安装nodejs
dnf install nodejs
检查nodejs版本
[root@dw1-cn ~]# node --version v16.13.1 [root@dw1-cn ~]# npm --version 8.1.2
- 参考资料
How To Install Node.js on CentOS 8
coc.nvim安装
vim8之后,可以通过native的package manager安装plugin。
安装coc.nvim
mkdir -p ~/.vim/pack/coc/start cd ~/.vim/pack/coc/start git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1 vim -c "helptags coc.nvim/doc/ | q"
安装go插件
// 插件并非必须,是一种增强
// coc-html coc-css coc-json并非必须
参照Using coc extensionsvim -c 'CocInstall -sync coc-go coc-html coc-css coc-json|q'
配置coc
vi ~/.vim/coc-settings.json : CocConfig
配置说明
// diagnostic.errorSign Vim sign column中显示的错误时的图标
// coc.preferences.formatOnSaveFiletypes配置save时自动format
// staticcheck": true 设置静态检查
{
"suggest.noselect": false,
"diagnostic.errorSign": "✘",
"diagnostic.warningSign": "!",
"diagnostic.infoSign": "?",
"diagnostic.checkCurrentLine": true,
"coc.preferences.formatOnSaveFiletypes": [
"javascript",
"html",
"json",
"css",
"scss",
"go"
],
"coc.preferences.hoverTarget": "float",
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"go.goplsOptions": {
"staticcheck": true
}
}
vimrc配置
""""""""""""""""""""""""""""""""""" coc.nvim begin
" Having longer updatetime (default is 4000 ms = 4s) leads to noticeable
" delays and poor user experience
set updatetime=300
" Always show the signcolumn, otherwise it would shift the text each time
" diagnostics appear/become resolved
set signcolumn=yes
" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigation
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)
" Highlight the symbol and its references when holding the cursor
autocmd CursorHold * silent call CocActionAsync('highlight')
" Symbol renaming
nmap <leader>rn <Plug>(coc-rename)
" Highlight the symbol and its references when holding the cursor
autocmd CursorHold * silent call CocActionAsync('highlight')
""""""""""""""""""""""""""""""""""" coc.nvim end
参照
vimrc配置
coc.nvim使用
代码补全
insert模式下 代码补全自动弹出,选择<Ctrl-n>,<Ctrl-p>,确定Enter
Vim sign column
显示warning等,cursor移动到该行,显示具体信息
跳转
移动cursor gd:跳转到定义 gr:弹出references,上下箭头切换,esc退出 gy:跳转type定义,如常量对应的type定义 gi:跳转到实现,如接口的实现
跳转到对应的文档
移动cursor K
rename
移动cursor \rn 输入新名字
- 参考资料:
Quick Start
Install coc.nvim
How to set up Vim for Go Development
Using Vim for Go Development
nerdtree安装配置
nerdtree提供类似于IDE中的文件树状浏览功能
nerdtree安装
git clone https://github.com/preservim/nerdtree.git ~/.vim/pack/vendor/start/nerdtree
vim -u NONE -c "helptags ~/.vim/pack/vendor/start/nerdtree/doc" -c q
:NERDTree
?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。