ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

Go语言工具集成

liuhewei ST3

Sublime Text 3 对 Go语言工具(gofmt, gocode, golint, guru, gorename, ...)的集成

详细信息

安装次数

  • 总数 43K
  • Win 15K
  • Mac 16K
  • Linux 11K
Aug 6 Aug 5 Aug 4 Aug 3 Aug 2 Aug 1 Jul 31 Jul 30 Jul 29 Jul 28 Jul 27 Jul 26 Jul 25 Jul 24 Jul 23 Jul 22 Jul 21 Jul 20 Jul 19 Jul 18 Jul 17 Jul 16 Jul 15 Jul 14 Jul 13 Jul 12 Jul 11 Jul 10 Jul 9 Jul 8 Jul 7 Jul 6 Jul 5 Jul 4 Jul 3 Jul 2 Jul 1 Jun 30 Jun 29 Jun 28 Jun 27 Jun 26 Jun 25 Jun 24 Jun 23 Jun 22
Windows 0 2 1 0 1 1 0 0 0 1 1 1 2 3 0 0 2 1 1 4 1 1 1 1 1 1 6 2 3 3 0 2 0 0 1 0 1 0 2 0 0 0 2 1 0 0
Mac 2 2 0 1 1 1 1 0 2 2 1 0 2 1 1 1 0 0 1 2 2 3 1 0 1 2 2 2 1 2 1 1 3 1 1 5 0 0 0 0 0 1 1 2 3 0
Linux 0 0 1 3 2 1 4 0 0 0 3 1 2 0 3 1 1 2 2 2 1 0 0 1 3 0 0 0 1 2 1 1 0 0 0 3 2 2 0 2 4 2 1 0 7 1

说明文档

源代码
raw.​githubusercontent.​com

我已经将我的IDE选择更改为JetBrains的Gogland。

Go语言工具集成

这是ironcladlou的GoTools的一个分叉版本。我创建这个项目是因为ironcladlou决定放弃GoTools项目,我想使用这个插件与Golang Build(由wbond提供)一起使用(讨论-1讨论-2)。

从GoTools继承的功能

  • 自动补全:使用gocode
  • 自动格式化:使用gofmt或goimports
  • 跳转到定义:使用guru
  • 重命名:使用gorename

从GoTools移除(替换)的功能

  • Go语法高亮:被Sublime的本地支持所替换
  • Go构建和测试系统:由“Golang Build”(在package-control中搜索)替换
  • GoTools设置:由“golangconfig”替换
  • godef支持:仅使用guru进行“跳转到定义”

新增功能

  • 自动检查:使用golint或govet
  • 在选择的文本或光标上显示文档提示:使用godoc

使用方法

  • 步骤1:自行安装golang及go工具:gocode、goimports、guru、gorename、golint,并确保$GOPATH/bin已添加到$PATH(或者你可以在Golang的全局“设置 - 用户”中之后设置它们)。

    go get -u -v github.com/nsf/gocode
    # OR mdempsky/gocode for better performance
    go get -u -v github.com/mdempsky/gocode
    
    go get -u -v github.com/golang/lint/golint
    go get -u -v golang.org/x/tools/cmd/guru
    go get -u -v golang.org/x/tools/cmd/goimports
    go get -u -v golang.org/x/tools/cmd/gorename
    
  • 步骤2:从package control中搜索并安装“Go语言工具集成”。

  • 步骤3(可选):根据golang.sublime-settingsExampleProject.sublime-project配置golang和你的项目的设置。通常,'guru'的完整功能需要使用项目的配置。

提示

  • 如果你想在使用“.”后触发自动补全,可以在“设置 - 语法特定 - 用户”(也称为User/Go.sublime-settings)中添加以下内容

    {
        "auto_complete_triggers": [{"selector": "source.go - string - comment - constant.numeric", "characters": "."}]
    }
    
  • 如果您想在注释、常量字符串和数字中忽略自动完成,可以在设置中添加以下内容 - 语法特定 - 用户(即 User/Go.sublime-settings)

    {
        "auto_complete_selector": "meta.tag - punctuation.definition.tag.begin, source - comment - string - constant.numeric"
    }
    

以下介绍来自 GoTools 项目

GoTools

GoTools 是一个受 Go 编程语言 启发,用于 Sublime Text 3 的插件,灵感来源于 vim-go。它不是重新发明各种支持 IDE 组件,而是提供了与现有社区支持工具的集成。

功能

  • 使用 guru 跳转到符号/声明
  • 保存时格式化语法检查,包括边缘标记(使用 gofmt
  • 自动完成(使用 gocode
  • 构建和测试集成
  • 源分析(使用 guru
  • 标识符重命名(使用 gorename
  • 改进语法支持(借鉴自 GoSublime

先决条件

GoTools 将尝试使用 GOPATHGOROOT(而不是 PATH)查找所有外部 Go 工具(如 gurugofmtgocode 等)。如果您没有这些二进制文件,请使用 go get 安装它们

go get -u -v github.com/nsf/gocode
go get -u -v golang.org/x/tools/cmd/goimports
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v golang.org/x/tools/cmd/gorename

GoTools 仅在 Go 1.4 上进行了测试。请注意,现在 gofmt 已包含在 Go 发行版中,安装在 GOPATH 中的任何 gofmt 可能来自旧版本的 Go,应该被删除。

安装

安装 GoTools 最简单的方法是使用 Package Control。简单安装 Package Control,然后从命令面板使用 Package Control: 安装包 安装“GoTools”包。

如果您想手动安装 GoTools,请下载 最新版本,并将其提取到 Linux 上的 ~/.config/sublime-text-3/Packages/GoTools 或 macOS 上的 ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/GoTools

配置 GoTools

通过 Sublime Text 排优先选项菜单中的 Package Settings -> GoTools -> Settings -> User 创建 GoTools 设置文件。

默认设置 已提供,并通过 Sublime Text 排优先选项菜单中的 Package Settings -> GoTools -> Settings - Default 可访问。每个选项都在设置文件本身中进行了说明。

配置您的项目

在 Sublime Text 的 .sublime-project 文件中创建一个 GoTools 设置密钥(通过 Project -> 编辑项目 菜单实现)。

提供了一个有文档的 示例项目文件

使用 GoTools

注意:大多数 GoTools 命令都可通过 Sublime Text 命令面板使用。在查看 Go 源文件时打开面板,并搜索“GoTools”以查看可用内容。

许多构建命令也通过上下文菜单提供。

保存时格式化

每次保存 Go 源缓冲区时,GoTools 都会对其进行格式化。要禁用自动格式化,请将 format_on_save 设置在您的 GoTools 设置 中。

以下是当按下 <ctrl>+<alt>+f 时格式化源文件的示例键绑定

{"keys": ["ctrl+alt+f"], "command": "gotools_format"}

默认使用 gofmt 进行格式化。要更改后端,请在您的 GoTools 设置 中设置 format_backend。还可用 goimports,以及首先运行 goimports 然后运行 gofmt 的选项。此第三个选项在您想同时启用自动导入解析以及 gofmt 的简化(-s)功能时很有用。

转到定义

GoTools 提供了一个名为 gotools_goto_def 的 Sublime Text 命令,将光标位置处的符号定义跳转过去。

这里是一个示例键绑定示例,当按下 <ctrl+g> 时,将跳转到定义。

{"keys": ["ctrl+g"], "command": "gotools_goto_def"}

这里是一个示例 sublime-mousemap 条目,它将使用 <ctrl>+<左鼠标> 跳转到定义。

{"button": "button1", "count": 1, "modifiers": ["ctrl"], "command": "gotools_goto_def"}

自动完成

GoTools 将 Sublime Text 自动完成引擎整合到了 gocode

这里是一个示例键绑定,当按下 <ctrl>+<space> 时自动完成。

{"keys": ["ctrl+space"], "command": "auto_complete"}

当有建议可用时,将出现一个特殊格式的建议列表,包括每个建议的类型信息。

要禁用自动完成集成,请在您的 GoTools 设置 中设置 autocomplete

构建

GoTools 将 Sublime Text 构建系统与 go build 相结合。

从 Sublime Text 菜单中选择 工具 -> 构建系统 来激活 GoTools 构建系统。如果构建系统设置为 自动,则在编辑 Go 源文件时将自动使用 GoTools 进行构建。

有多种方式可以执行构建

  • 从 Sublime Text 菜单中选择 工具 -> 构建
  • 绑定到 build 命令的键
  • 命令面板,作为 构建: 构建

还提供了一种“清理构建”命令变体,在正常执行构建之前递归删除所有 GOPATH/pkg 目录内容。

构建结果将放置在 Sublime Text 构建输出面板中,可以使用命令切换面板

{ "keys" : ["ctrl+m"], "command" : "show_panel" , "args" : {"panel": "output.exec", "toggle": true}},

这里是一个示例键绑定,当按下 <ctrl>+b 时运行构建

{ "keys": ["ctrl+b"], "command": "build" },

这里是一个示例键绑定,当按下 <ctrl>+<alt>+b 时运行“清理构建”

{ "keys": ["ctrl+alt+b"], "command": "build", "args": {"variant": "Clean Build"}},

测试

GoTools 将 Sublime Text 构建系统与 go test 相结合。

GoTools 根据上下文尝试“理解你的意图”。例如,在需要 integration Go 构建标签的测试文件中使用“在光标处运行测试”时,GoTools 会注意到这一点,并自动将 -tags integration 添加到测试执行中。

以下 GoTools 构建变体可用

变体 描述
运行测试 基于相对于项目的 project_packagetest_packages 设置发现测试包,并在 gopath 附近执行它们。
在光标处运行测试 在光标或其周围运行单个测试方法。
运行当前包的测试 运行包含当前文件的包的测试。
运行标记测试 类似于“运行测试”,但对于在 tagged_packages 设置中指定的包。
运行上次测试 运行之前执行的最后一个测试变体。

测试结果将放置在内置的 Sublime Text 构建输出面板中,可以使用命令切换面板

{ "keys" : ["ctrl+m"], "command" : "show_panel" , "args" : {"panel": "output.exec", "toggle": true}},

这里是一个示例键绑定,当按下 <ctrl>+<alt>+t 时,运行光标处的测试

{ "keys": ["ctrl+alt+t"], "command": "build", "args": {"variant": "Run Test at Cursor"}},

将命令中的 variant 替换为前面表格中的任何变体名称以进行其他绑定。

Oracle 分析(实验性)

GoTools 通过 guru 将 Sublime Text 与之整合。使用《Sublime Text》命令 gotools_guru 调用 Oracle。

这里是一个示例,当按下 <ctrl+alt+i> 时运行 guru 的“实现”命令

{ "keys" : ["ctrl+alt+i"], "command" : "gotools_guru" , "args" : {"command": "implements"}},

以下 guru 操作是《Sublime Text》命令 gotools_guru 的参数

命令 备注
callers 在大代码库上较慢。
callees 在大代码库上较慢。
callstack 在大代码库上较慢。
describe
freevars 需要一个选择。
implements
peers
referrers

Oracle 结果将放置在一个《Sublime Text》输出面板中,可以使用命令切换面板

{ "keys" : ["ctrl+m"], "command" : "show_panel" , "args" : {"panel": "output.gotools_guru", "toggle": true}},

重命名(实验性)

GoTools 提供 gotools_rename 命令,该命令由 gorename 支持,它可以对标识符进行类型安全的重命名。

执行 gotools_rename 命令时,将出现一个标签为《Go 重命名》的输入面板。重命名结果将放置在一个《Sublime Text》输出面板中,可以使用命令切换面板

{ "keys" : ["ctrl+m"], "command" : "show_panel" , "args" : {"panel": "output.gotools_rename", "toggle": true}},

重要:工具 gorename 会替换地写入文件,没有干运行选项。变更可能是破坏性的,并且该工具已知存在错误。

Gocode 注意事项

重要:使用 gocode 支持将修改 gocode 守护进程的 lib-path 设置。该更改将影响所有客户端,包括其他 Sublime Text 会话、Vim 实例等。如果你的 concern 是与其他集成 gocode 的工具的互操作性,则不要使用此设置。

有些项目使用依赖隔离工具,如 Godep,许多项目也使用某种自定义构建脚本。此外,gocode 使用客户端/服务器架构,目前依赖于全局服务器端设置来解析用于建议计算的 Go 包路径。默认情况下,gocode 只会在 GOROOTGOPATH/pkg 中搜索包,如果项目将源代码编译到多个 GOPATH 条目(例如 Godeps/_workspace/pkg)中,这可能是不足够的。

对于这样的项目,要获得 gocode 的最佳建议,有必要在客户端建议请求之前配置 gocode 守护进程,以通知 gocode 项目的编译包位置。

GoTools 会通过构成一个路径来推断正确的 gocode lib-path,该路径包含所有项目的 GOPATH 条目。

GoSublime 注意事项

在 GoSublime 旁边安装 GoTools 没有经过测试或支持,所以 YMMV(根据你自己的情况而定)。