简化你的Sublime Text + Go工作流程

471 阅读2分钟

在过去的几年里,我一直使用Sublime Text作为我的主要代码编辑器,同时使用GoSublime插件来提供一些类似IDE的额外功能。

但我最近把GoSublime换成了一个更加模块化的插件设置,并且对它的工作方式非常满意。虽然花了一些时间来配置,但它带来了一个编码环境,感觉比以前更清晰,更精简。

我已经选择了。

在这篇文章中,我将通过设置这些东西的过程。如果你以前没有接触过这些插件,我建议你试一试。

前提条件

为了正常工作,这些Sublime Text插件中的一些需要明确设置$GOPATH 环境变量。如果你也在关注,你也应该确保你的工作空间的bin 目录在你的系统路径上。

因此,我的bash~/.profile 配置包括这几行。

``` ... export GOPATH=/home/alex/Code/go export PATH=$PATH:$GOPATH/bin ```

你还需要安装软件包控制,如果你还没有的话。在最新版本的Sublime Text中,最简单的方法是进入Tools > Install Package Control…

工具的整合

官方的sublime-build插件提供了集成,因此你可以在不离开编辑器的情况下执行常见的go 命令(如go run,go testgo get )。

你可以像这样安装它。

  1. Ctrl+Shift+P ,打开Sublime Text的命令调色板。
  2. 运行Package Control: Install Package 命令。
  3. 输入Golang Build ,然后点击Enter 来安装该软件包。

安装后,你应该在你的命令调色板中看到一堆新的工具。它们的名字是不言自明的。

  • Build With: Go
  • Build With: Go - Clean
  • Build With: Go - Install
  • Build With: Go - Run
  • Build With: Go - Test
  • Build With: Go - Cross-Compile
  • Go: Get
  • Go: Open Terminal

当你运行这些命令时,它们将在Sublime Text一个面板中打开并执行。作为一个例子,这里有一个来自Build With: Go - Test 命令的输出截图。

自动格式化

对于.go 文件的自动格式化,我一直在使用Gofmt插件。你可以按以下方式安装它。

  1. Ctrl+Shift+P ,打开Sublime Text的命令调色板。
  2. 运行Package Control: Install Package 命令。
  3. 输入Gofmt ,然后按Enter 来安装该软件包。

默认情况下,这将在每次保存当前文件时运行go fmt -s -e

我已经进一步定制了这个,以使用goimports工具。如果你还不熟悉goimports ,它将运行go fmt ,并修正你的导入行--必要时添加缺失的软件包和删除未引用的软件包。

要设置这个,你需要安装goimports ,并确保它在你的系统路径上可用。

``` $ go get golang.org/x/tools/cmd/goimports $ which goimports ```

安装完毕后,你需要在Sublime Text中改变Gofmt 插件的设置,打开Preferences > Package Settings > Gofmt > Settings - User 并添加以下配置。

``` { "cmds": [ ["goimports"] ], "format_on_save": true } ```

(你可能需要重新启动Sublime Text来使之生效。)

现在每次你保存一个.go 文件时,你会发现它被自动格式化,并且导入的包也被更新。不再有"imported and not used" 的错误!

代码提示

为了给源代码打码,我使用了SublimeLinter插件。这个插件本身并不是一个linter,而是提供了一个运行linters和显示错误信息的框架。你可以像这样安装它。

  1. Ctrl+Shift+P ,打开命令调色板。
  2. 运行Package Control: Install Package 命令。
  3. 输入SublimeLinter ,然后按Enter ,安装该软件包。

下一步是安装一个实际的linter。我使用的是gometalinter,它作为一个封装器,围绕着一堆不同的linter,比单独使用go vetgolint 更能发现潜在的问题和低效率。你可以用命令来安装它。

``` $ go get github.com/alecthomas/gometalinter $ which gometalinter ```

一旦完成,你就需要安装SublimeLinter-contrib-gometalinter插件。它是SublimeLinter和gometalinter之间的桥梁。

  1. Ctrl+Shift+P ,打开命令调色板。
  2. 运行Package Control: Install Package 命令。
  3. 输入SublimeLinter-contrib-gometalinter ,然后按Enter 来安装这个软件包。

默认情况下,当你打字时,linter会在后台运行,错误会显示在屏幕底部的Sublime Text状态栏中。但我发现,只在保存文件时进行lint,并在面板上一次性显示所有错误,更适合我。如果你也想这样做,请到Preferences > Package Settings > SublimeLinter > Settings ,并在SublimeLinter Settings - User 文件中添加以下设置。

``` { "show_panel_on_save": "window", "lint_mode": "save", } ```

我应该提到,SublimeLinter-contrib-gometalinter 插件只执行gometalinter 中包含的 "快速 "linters。你可以通过检查源代码看到到底运行了哪些。

自动完成

对于自动完成,我使用了gocode包,它提供了一个代码自动完成的功能。你可以像这样安装它。

``` $ go get github.com/mdempsky/gocode $ which gocode ```

目前还没有通过Sublime Text包控制提供的gocode 插件(我可能很快就会添加一个!)......但在gocode 源码本身的subl3 目录包括一个插件。

你应该能够用下面的命令把它复制到你的Sublime TextPackages 目录中。

``` $ cp -r $GOPATH/src/github.com/mdempsky/gocode/subl3 ~/.config/sublime-text-3/Packages/gocode ```

如果你打开命令调色板并运行Package Control: List Packages ,你应该在列表中看到一个gocode 条目。

默认情况下,Sublime Text会在按下一个字母时提出自动完成的建议。但在使用Go的时候,我希望每当我按下. 字符时,也能显示潜在的方法名称。你可以通过进入Preferences > Settings ,在Preferences.sublime-settings - User 文件中添加一个新的触发器来实现。

``` { ... "auto_complete_triggers": [ {"selector": "text.html", "characters": "<"}, {"selector": "source.go", "characters": "."} ], } ```

然后你需要重启Sublime Text以使设置生效。一旦你重启了,你的自动完成功能就会很好地工作,看起来像这样。

代码导航

为了帮助浏览代码,我使用了guru工具,你可以用以下命令安装它。

``` $ go get golang.org/x/tools/cmd/guru $ which guru ```

为了将其与Sublime Text集成,你还需要安装GoGuru插件,如下所示。

  1. Ctrl+Shift+P ,打开命令调色板。
  2. 运行Package Control: Install Package 命令。
  3. 输入GoGuru ,然后按Enter ,安装该软件包。

要使用GoGuru工具,首先将你的光标放在你感兴趣的代码段上。然后,如果你打开命令调色板并输入GoGuru 前缀,你会看到一个可用的命令列表,包括。

  • GoGuru: callees - 显示所选函数调用的可能目标
  • GoGuru: callers - 显示所选函数的可能调用者
  • GoGuru: callstack - 显示从callgraph根到所选函数的路径
  • GoGuru: definition - 显示所选标识符的声明
  • GoGuru: describe - 描述选定的语法:定义、方法等
  • GoGuru: freevars - 显示选择的自由变量
  • GoGuru: implements - 显示所选类型或方法的 "实现 "关系
  • GoGuru: jump to definition - 在所选标识符的声明处打开文件
  • GoGuru: peers - 显示对应于所选通道操作的发送/接收
  • GoGuru: pointsto - 显示所选指针可能指向的变量
  • GoGuru: referrers - 显示所选标识符表示的事物的所有引用
  • GoGuru: what - 显示所选语法节点的基本信息
  • GoGuru: whicherrs - 显示所选错误变量的可能值

你可以在这个GoogleDoc中找到这些命令和它们的行为的详细描述。

我不像其他人那样经常使用GoGuru插件,但当我在一个不熟悉的代码库工作时,它肯定会使浏览代码和建立事物工作原理的心理地图变得更容易。我发现GoGuru: jump to definitionGoGuru: callers 命令特别有用,而且比在版本库上搜索或运行Ctrl+F 更容易使用。

作为说明,这里有一张在Sum 函数上运行GoGuru: callers 的截图。

剪辑

Sublime Text为创建和使用自定义片段提供了相当好的工作流程。如果你还不熟悉,Jimmy Zhang写了一个很好的深度指南,我推荐你阅读。

我最常使用的片段可能是这个用于创建HTTP处理函数的片段。

``` <snippet> <content><![CDATA[ func ${1:name}(w http.ResponseWriter, r *http.Request) { ${2:} } ]]></content> <tabTrigger>hf</tabTrigger> <scope>source.go</scope> </snippet> ```

有一件事困扰了我一段时间,那就是Sublime Text提供的Go的内置片段。特别是我不喜欢每当我写出"package main"main() 代码就会被触发的方式。

如果像我一样,你想编辑这些内置片段,最简单的方法可能是使用PackageResourceViewer插件。你可以按以下方式安装它。

  1. Ctrl+Shift+P ,打开命令调色板。
  2. 运行Package Control: Install Package 命令。
  3. 输入PackageResourceViewer ,然后按Enter ,以安装该软件包。

一旦安装完毕,你可以打开命令调色板并运行PackageResourceViewer: Open Resource ,这将列出你系统上的所有软件包。如果你浏览Go > Snippets/ ,你应该看到一个所有内置片段的列表,你可以按照你的意愿打开和编辑它们。

*提示:*你也可以使用PackageResourceViewer来编辑你自己的自定义片段,而不必离开SublimeText。例如,如果您的自定义片段保存在您的Packages/User 目录下,您可以通过运行PackageResourceViewer: Open Resource 并导航到User 文件夹来打开它们。