vim-go

draft: false date: 2018-01-19 20:26:28 cover: /images/avatar.jpeg tags: - bigzhu preview:


基本功能

http://tonybai.com/2014/11/07/golang-development-environment-for-vim/

:GoInstallBinaries

后安装的包支持以下特性:

  • 新起一行输入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]。

:GoAddTags 默认生成json tag , :GoAddTags toml 则生成 toml 的 tag

gd 就能到函数定义

:GoRename 会用到

:GoReferrers 哪些地方用了函数, 也需要显示

自动展开

vim-go 提供了 go.snippets 文件

https://github.com/SirVer/ultisnips

help 里有这样一句: * Integrated and improved snippets, supporting ultisnips, neosnippet, and vim-minisnip.

用 ultisnips 增加代码录入效率

安装后, 按下 tab 就可以自动补全

上面提到的 go.snippets 定义了很多 snippets

比如 if err != nil ... 是这样定义的:

# error snippet
snippet errn "Error return " !b
if err != nil {
	return err
}
${0}
endsnippet

snippet 后面那个 errn 就是触发关键字, 输入 errn 后按下 tab, 会展开为那段

一般我用 errh