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

时间:2020-05-25 08:14:52

标签: go emacs

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

现在,我对以下基本功能感到满意:

自动完成

  • flycheck
  • 摘要
  • 其他go-mode功能

但是要提高生产力,我想要更多类似IDE的功能,例如:

  • 导航:直到现在,我只找到了Advisor-imenu,通过它我可以选择当前缓冲区中的符号(未按方法/功能/ var / const /接口等分组的候选对象),但是我该怎么做:
    • 在项目中查找符号
    • 在项目中查找接口
    • 在项目中查找结构
    • 在项目中查找方法
    • 查找导出的函数,可能在指定的包中
    • 在源代码和相关测试文件/方法之间切换并强制执行
    • 依此类推...
  • 更复杂的操作来生成/操作代码:代码片段和进行生成测试非常有用,但是可以执行以下操作:
    • 在不同范围内生成未声明的方法/字段/函数/包的代码操作,现在看来只能生成变量。 (这是基于lsp后端支持吗?我找到了Java的视频,但找不到适合的视频)
    • 如果我指定要为Struct实现的接口,则自动生成方法模板
    • 从结构中删除方法
    • 如果删除功能/方法,则自动删除相关的测试/基准功能

有人可以帮我吗?并欢迎您提供任何经验/提示。

1 个答案:

答案 0 :(得分:12)

欢迎光临!

我自己不是一名Go程序员,所以这些大多数都是二手手帐户,但是Doom的:lang go模块提供了您所要求的大部分内容。我建议使用gopls langserver。为此:

  1. Enable these modules
    • :lang (go +lsp)
    • :tools lsp
    • :editor snippets(默认情况下应启用)
  2. 通过操作系统的软件包管理器(iirc随Go 1.12及更高版本安装)gopls
  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我 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 t +go/test-rerun->重新运行上一个测试
  • SPC +go/test-all->运行所有测试
  • SPC m s +go/test-single->在点进行测试
  • SPC m t n +go/test-nested->在下面运行测试

您会找到更全面的in the :lang go module键绑定列表(请注意,SPC是Doom的领导键,SPC m是其本地领导键。对于非邪恶的用户,这些是分别为C-cC-c l

摘录模块随附a snippets library。您可以找到我们的适度摘录摘要here,也可以将自己的摘要添加到~/.doom.d/snippets/go-mode/

我也建议您visit the :lang go readme。它需要更新,对于使用gopls所需的资源,我几乎不是一个很好的资源,但是也许有一些极端的情况可以帮助解决这个问题。

希望有帮助!