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 getall 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

参考文章

https://blog.csdn.net/u012930...


byte
106 声望13 粉丝