0%

vim配置golang开发环境

vim配置

Vim-go是当前使用最为广泛的用于搭建Golang开发环境的vim插件:

Bundle 'fatih/vim-go'
:BundleInstall

Tagbar配合gotags配置:

let g:tagbar_type_go = {
    \ 'ctagstype' : 'go',
    \ 'kinds'     : [
        \ 'p:package',
    \ 'i:imports:1',
    \ 'c:constants',
    \ 'v:variables',
    \ 't:types',
    \ 'n:interfaces',
    \ 'w:fields',
    \ 'e:embedded',
    \ 'm:methods',
    \ 'r:constructor',
    \ 'f:functions'
        \ 
    ],
    \ 'sro' : '.',
    \ 'kind2scope' : {
        \ 't' : 'ctype',
        \ 'n' : 'ntype'
            \ 
    },
    \ 'scope2kind' : {
        \ 'ctype' : 't',
        \ 'ntype' : 'n'
            \ 
    },
    \ 'ctagsbin'  : 'gotags',
    \ 'ctagsargs' : '-sort -silent'
    \ }

安装Binaries

还需要安装其他tools,vim-go安装说明中提到所有必要的binary需要先安装好,比如gocode、godef、goimports等。通过:

:GoInstallBinaries

查看文件.vim/bundle/vim-go/plugin/go.vim:

let s:packages = [
    \ "github.com/nsf/gocode",
    \ "golang.org/x/tools/cmd/goimports",
    \ "github.com/rogpeppe/godef",
    \ "golang.org/x/tools/cmd/oracle",
    \ "golang.org/x/tools/cmd/gorename",
    \ "github.com/golang/lint/golint",
    \ "github.com/kisielk/errcheck",
    \ "github.com/jstemmer/gotags",
    \ ]

这些vim-go依赖的二进制工具将会自动被下载,并被安装到$GOBIN下,但是自动安装很可能部分tools安装不成功,此时需要手动安装:

go get -u github.com/nsf/gocode

//或者
git clone https://go.googlesource.com/tools $GOPATH/src/golang.org/x/tools
go build golang.org/x/tools/cmd/goimports

安装golint:

./3rdpkg/src/github.com/golang
git clone git@github.com:golang/lint.git
cd ../../../../go/bin
pwd
./go/bin
go build -x github.com/golang/lint/golint
cp $WORK/github.com/golang/lint/golint/_obj/exe/a.out golint

常用工具

安装完毕$GOBIN目录如下:

.
├── errcheck
├── go
├── gocode
├── godef
├── godoc
├── gofmt
├── goimports
├── gorename
├── gotags
└── oracle
  • gotags 这个用来配合vim的tagbar,查看方便的生成和查看文件中的各种方法,并进行跳转
  • goimport 根据你所使用的方法,自动调整import中引用的内容,比较方便。
    可以随时用vim命令 :Fmt 来格式化你的代码,也可以每次保存代码的时候,让vim自动为你格式化代码
  • godef 实现在代码中的跳转,从函数调用的地方,直接跳转到函数的定义。默认的命令是:gd
  • gocode实现Golang的代码自动补全

用法

  • 新起一行输入fmt.,然后ctrl+x, ctrl+o,Vim 会弹出补齐提示下拉框,不过并非实时跟随的那种补齐,这个补齐是由gocode提供的。
  • 输入一行代码:time.Sleep(time.Second),执行:GoImports,Vim会自动导入time包。
  • 将光标移到Sleep函数上,执行:GoDef或命令模式下敲入gd,Vim会打开$GOROOT/src/time/sleep.go中 的Sleep函数的定义。执行:b 1返回到hellogolang.go。
  • 执行:GoLint,运行golint在当前Go源文件上。
  • 执行:GoDoc,打开当前光标对应符号的Go文档。
  • 执行:GoVet,在当前目录下运行go vet在当前Go源文件上。
  • 执行:GoRun,编译运行当前main package。
  • 执行:GoBuild,编译当前包,这取决于你的源文件,GoBuild不产生结果文件。
  • 执行:GoInstall,安装当前包。
  • 执行:GoTest,测试你当前路径下地_test.go文件。
  • 执行:GoCoverage,创建一个测试覆盖结果文件,并打开浏览器展示当前包的情况。
  • 执行:GoErrCheck,检查当前包种可能的未捕获的errors。
  • 执行:GoFiles,显示当前包对应的源文件列表。
  • 执行:GoDeps,显示当前包的依赖包列表。
  • 执行:GoImplements,显示当前类型实现的interface列表。
  • 执行:GoRename [to],将当前光标下的符号替换为[to]。

Reference

  1. Golang开发环境搭建
  2. gocode
  3. Go