vim-go安装
.vimrc的配置
" Plugins managed by vundle
if (isdirectory(g:vimPath . 'bundle/Vundle.vim'))
let &runtimepath.=',' . g:vimPath . 'bundle/Vundle.vim'
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'fatih/vim-go'
call vundle#end()
endif
除了vim-go插件,还需安装vundle插件,这是一款vim的插件管理工具
配置好后执行:
:PluginInstall
安装vim-go需要的二进制文件
You will also need to install all the necessary binaries. vim-go makes it easy to install all of them by providing a command,:GoInstallBinaries
, which willgo get
all the required binaries.
:GoInstallBinaries
这一步操作会将所有需要的go二进制文件下载到$GOROOT/bin下
若超时,可以手动go get下载;
我使用的是go1.13.8,发现gopls下载有问题,于是使用
git clone https://github.com/Go-zh/tools.git
将其放到$GOPATH/src/github.com/Go-zh/tools
,
然后安装
cd $GOPATH/src
go install github.com/Go-zh/tools/cmd/gopls
这一步还不行,则进入cmd目录,go build得到二进制文件gopls,将其放入$GOROOT/bin下
最后在.vimrc
加上
let g:go_def_mode = 'gopls'
let g:go_info_mode='gopls'
language server
gopls (pronounced: "go please") is the official language server for the Go language.
gopls是golang的一个官方language server
为什么需要LSP?LSP能解决什么问题?传统上,安装一个IDE,即使离线使用也能解决语法检查、自动补全、跳转位置、引用查找等功能。为什么还要劳烦“语言服务器”?离线情况下便能使用Sublime、Eclipse等IDE,完成上述的语法特性检查,可以说明这些IDE的语法特性检查功能都是在本地实现的。不仅如此,还是各家IDE有各家的实现。也就是说,以Java IDE为例,对于Java的语法特性检查,IntelliJ IDEA有其自己的实现,Eclipse也有其自己的实现。IntelliJ IDEA并不直接支持scala语言,但是可以通过安装扩展的插件来支持,而该支持scala插件肯定是需要遵照IntelliJ IDEA的插件规范去实现,该插件并不能直接用于eclipse。
看出来问题了没有!如果要在任何IDE中提供支持任何编程语言的语言特性检查功能,其实现的复杂度是MN!有M种编程语言,有N种IDE,就需要有MN种插件(内置)的实现。
而LSP提出的改变了这种局面,使得编程语言社区能专注于不断完善一个能提供语法检查、自动补全、跳转位置、引用查找等语言特性检查的高性能“语言服务器”实现。与此同时,IDE厂商和组织只专注于提供能与任何“语言服务器”交互和“渲染”响应数据的实现方案即可。
我们再也不需要专门为IntelliJ IDEA写一个Python插件,为Sublime Text也专门写一个Python插件,为Vim也专门写一个... 我们只需要让Python社区贡献出一个能提供各种语言特性检查的“Python语言服务器”,该语言服务器支持LSP。而任何IDE只要支持LSP,都可以直接与该”Python语言服务器“交互以实现检查Python语言的效果。
补全工具,coc.nvim安装
首先需安装coc.nvim的插件管理工具vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
然后安装coc.nvim插件即可
call plug#begin('~/.vim/plugged')
" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()
注意,vim版本必须 >= 8.0.1453
遇到的坑
- 代码跳转时,报godef no object
在.vimrc加入
let g:go_def_mode = 'gopls'
报错变为了:
no file information for file
解决方法:
go list 问题代码所在目录
此时报了该目录下有go文件的package有问题,改正为正确的package即可跳转
go list
命令的作用是列出指定的代码包的信息。它可以为我们提供指定代码包的更深层次的信息
详细可见:https://www.cntofu.com/book/1...
- go mod国内代理
详细见文章:https://segmentfault.com/a/11...
使用:
go env -w GOPROXY=https://goproxy.cn,direct
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。