完整的 IDE 功能支持 Doom Emacs 中的 golang

shi*_*zhz 5 emacs go

我是 vim 用户多年,最近开始玩 emacs,在尝试了 Spacemacs 和 Prelude 之后,Doom Emacs 是我的最终选择。那些天我正在使用 (go +lsp) 和 (lsp) 模块配置 golang 开发,Doom 的所有开箱即用功能都令人印象深刻,感谢 hlissner 的出色工作。

现在我对基本功能感到满意,例如:

自动完成

  • 飞行检查
  • 片段
  • 其他 go-mode 功能

但为了提高工作效率,我想要更多类似 IDE 的功能,例如:

  • 导航:到目前为止,我只找到了顾问-imenu,我可以通过它来选择当前缓冲区中的符号(未按方法/函数/var/const/interface 等分组的候选人),但我怎么能做这样的事情:
    • 在项目中查找符号
    • 在项目中查找接口
    • 在项目中查找结构
    • 在项目中查找方法
    • 查找导出的函数,可能在指定的包中
    • 在源代码和相关测试文件/方法之间来回切换
    • 等等...
  • 生成/操作代码的更复杂的操作:snippets 和 go-gen-test 有很大帮助,但是否可以执行以下操作:
    • 在不同范围内生成未声明的方法/字段/函数/包的代码动作,现在似乎只能生成变量。(这是基于 lsp 后端支持吗?我找到了一个 java 视频,但找不到 go 视频)
    • 如果我指定一个接口来实现一个结构,自动生成方法模板
    • 从结构中删除方法
    • 如果我删除一个函数/方法,自动删除相关的测试/工作台函数

有人可以帮我吗?任何经验/提示表示赞赏。

Hen*_* L. 18

欢迎上车!

我自己不是围棋程序员,所以这些大多是第二手帐户,但 Doom 的:lang go模块提供了您所要求的大部分内容。我建议使用goplslangserver。这样做:

  1. 启用这些模块
    • :lang (go +lsp)
    • :tools lsp
    • :editor snippets (应该默认启用)
  2. gopls通过操作系统的包管理器安装(iirc 随 Go 1.12+ 一起提供)。
  3. 运行~/.emacs.d/bin/doom sync以确保 Doom 与这些更改正确同步。

你应该很高兴去。以下是您应该知道的一些有用的(以邪恶为中心的)键绑定:

  • gd +lookup/definition -> 转到符号的定义
  • gD +lookup/references -> 跳转到符号的引用点
  • K +lookup/documentation -> 在该点查找符号的文档
  • SPC c a lsp-execute-code-action -> 执行任意代码操作(其中应包括自动生成您要求的内容)。
  • SPC m h d go-guru-describe -> 描述一下
  • SPC m h v go-guru-freevars -> 列出自由变量
  • SPC m h i go-guru-implements -> 实现包类型的关系
  • SPC m h p go-guru-peers -> 列出频道的对等点
  • SPC m h P go-guru-pointsto -> 这说明什么
  • SPC m h r go-guru-referrers -> 列出对对象的引用
  • SPC m h c go-guru-callers -> 显示此函数的调用者
  • SPC m h C go-guru-callees -> 显示这个函数的被调用者
  • SPC m t t +go/test-rerun -> 重新运行上次测试
  • SPC m t a +go/test-all -> 运行所有测试
  • SPC m t s +go/test-single -> 在点运行测试
  • SPC m t n +go/test-nested -> 在下面运行测试

您将在 :lang go 模块中找到更全面的键绑定列表(请注意,这SPC是 Doom 的领导键,SPC m是它的本地领导键。对于非邪恶用户,它们分别是C-cC-c l)。

片段模块带有一个片段库。您可以在此处找到我们适度的 go 代码段,也可以将自己的代码添加到~/.doom.d/snippets/go-mode/.

我还建议您访问:lang go自述文件。它需要更新,关于 gopls 需要多少,我几乎不是一个很好的资源,但也许它可以帮助涵盖一些极端情况。

希望有帮助!