看到大家提到几次 Citre,我也来掺和一下 ![]()
虽然其实没有太看明白楼主的需求
首先 Citre 现在支持基于 gtags 的补全、查定义、查引用和 imenu,详见这里。如果不需要用 gtags 补全,设置一下 citre-completion-backends 就好了。
Citre 支持用 xref 查定义和引用。想用 xref 界面(就是 M-.、M.,)的话,至少有两种方法:
-
参考 Citre 的 wiki ,可以实现 lsp 查不到定义/引用的时候 fallback 到 Citre
-
什么都不用做。打开文件的时候 Citre 会尝试找当前工程的 tags 文件或 gtags 文件,找得到就会启用 citre-mode,然后 xref 后端就会被设为 Citre。但如果 lsp 在打开文件时也有类似的动作的话可能会打架,我不用 lsp 所以只能楼主自己解决了。
如果想用类似 helm 的界面,可以使用 citre-jump 命令和 citre-jump-to-reference 命令,在 citre-mode-map 中把 M-.、M-, 绑定给它们就行了,这样在 citre-mode 不开启的时候它们就还是 xref 的功能。
最后就是推荐一下用用 citre-peek 和 citre-peek-reference(记得读文档),也许用过以后就不会再想念 xref 这种工具了。