当前位置: 首页 > 工具软件 > vim-ide > 使用案例 >

Vim 打造 IDE工具: 编写 Go 的利器之 vim-go

邵宜年
2023-12-01

前言

​ 又是周末, 春节之后,第一个工作周, 因新型冠状病毒肺炎疫情的发展非常严重, 所有公司,开启了远程在家办公方式。

又到了学习补充知识的时刻, 1年之前, 了解了基本的go语法就没在学习, 看着今年的计划, go 列入学习清单中。

Vim8 安装 vim-go 以 Vundle 方式安装 Vim 插件

  1. 准备工作, coc.nvim 插件安装依赖于 Node (nodejs >= 8.10.0 on MacOS). 在终端下执行如下命令

    $ curl -sL install-node.now.sh/lts | bash
    # 查看 node 版本
    $ node -v
    # print: v12.15.0
    
  2. 安装 vim-go, coc.nvim 编辑 ~/.vimrc 文件, 将下面的代码加入到文件中,保存(:w), 执行(:PluginInstall)

Plugin 'fatih/vim-go'
" 从源码安装
Plugin 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

​ 出现如下问题:

  1. 关闭刚刚操作的终端, 重新打开 ~/.vimrc 显示如下: [coc.nvim] javascript file not found

    1. 最终解决方案: Using vim8’s native package manager , 在终端执行如下命令

      # for vim8
      mkdir -p ~/.vim/pack/coc/start
      cd ~/.vim/pack/coc/start
      curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv -
      # for neovim
      mkdir -p ~/.local/share/nvim/site/pack/coc/start
      cd ~/.local/share/nvim/site/pack/coc/start
      curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv -
      
    2. 保存(:w), 重新执行(:PluginInstall). 关闭终端, 重新打开 ~/.vimrc 没有报错

      # for vim8
      mkdir -p ~/.vim/pack/coc/start
      cd ~/.vim/pack/coc/start
      curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv -
      # for neovim
      mkdir -p ~/.local/share/nvim/site/pack/coc/start
      cd ~/.local/share/nvim/site/pack/coc/start
      curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv -
      
  2. 在编辑 ~/.vimrc 文件时, 执行(:GoInstallBinaries) 安装 go 相关工具时, 因为网络问题, gopls 死活安装不上。一顿查找以及尝试,总结有3种方式.

    ​ (1): 搭梯子[没有]

    ​ (2): 使用 get 命令安装[已尝试且有效]

      go get github.com/klauspost/asmfmt/cmd/asmfmt
      go get github.com/go-delve/delve/cmd/dlv
      .....
    

    ​ (3): 使用 gopm 安装(未尝试)

    查看 vim-go 安装需要的工具,执行如下命令

    vim ~/.vim/bundle/vim-go/plugin/go.vim
    

    第48 行如下

    let s:packages = {
          \ 'asmfmt':        ['github.com/klauspost/asmfmt/cmd/asmfmt'],
          \ 'dlv':           ['github.com/go-delve/delve/cmd/dlv'],
          \ 'errcheck':      ['github.com/kisielk/errcheck'],
          \ 'fillstruct':    ['github.com/davidrjenni/reftools/cmd/fillstruct'],
          \ 'gocode':        ['github.com/mdempsky/gocode', {'windows': ['-ldflags', '-H=windowsgui']}],
          \ 'gocode-gomod':  ['github.com/stamblerre/gocode'],
          \ 'godef':         ['github.com/rogpeppe/godef'],
          \ 'gogetdoc':      ['github.com/zmb3/gogetdoc'],
          \ 'goimports':     ['golang.org/x/tools/cmd/goimports'],
          \ 'golint':        ['golang.org/x/lint/golint'],
          \ 'gopls':         ['github.com/golang/tools/gopls'],
          \ 'gometalinter':  ['github.com/alecthomas/gometalinter'],
          \ 'golangci-lint': ['github.com/golangci/golangci-lint/cmd/golangci-lint'],
          \ 'gomodifytags':  ['github.com/fatih/gomodifytags'],
          \ 'gorename':      ['golang.org/x/tools/cmd/gorename'],
          \ 'gotags':        ['github.com/jstemmer/gotags'],
          \ 'guru':          ['golang.org/x/tools/cmd/guru'],
          \ 'impl':          ['github.com/josharian/impl'],
          \ 'keyify':        ['honnef.co/go/tools/cmd/keyify'],
          \ 'motion':        ['github.com/fatih/motion'],
          \ 'iferr':         ['github.com/koron/iferr'],
    \ }
    
    
  3. 在执行第二步骤(2)时,执行到 go get github.com/golang/tools/gopls 因超时无法安装. 最终解决方案如下

    ​ 在终端下, 输入如下命令

    # 1. 在本地Go环境下创建 Go-zh 文件夹并进入到 Go-zh
    mkdir -p $GOPATH/github.com/Go-zh/
    cd $GOPATH/github.com/Go-zh/
    # 2. 安装 tools 工具开始安装相关工具
    git clone https://github.com/Go-zh/tools.git
    go install github.com/Go-zh/tools/cmd/guru
    go install github.com/Go-zh/tools/cmd/goimports
    go install github.com/Go-zh/tools/cmd/gorename
    # 最后执行
    go install github.com/Go-zh/tools/cmd/gopls
    
    

⚠️,安装完go依赖工具之后, 在打开 vim ~/.vimrc 执行(:GoInstallBinaries), 大功告成, 开始愉快的写go ~~

教程
1. Jetbrains到期?试试 coc.nvim 征服 vim/neovim 补全
2. could not find gopls

 类似资料: