有时候工作环境没网络。配置lsp得依赖很多组件很费解。我只想用gtags作导航就可以了。但是快捷键还想让他们一样。比如 M - . M - , 跳转。是否可以让gtags的配置和lsp共存?有什么办法没?或者弄个开关命令?
逼急了我只能在特殊环境下去把不要的配置注释掉。这样有点笨。。。
有时候工作环境没网络。配置lsp得依赖很多组件很费解。我只想用gtags作导航就可以了。但是快捷键还想让他们一样。比如 M - . M - , 跳转。是否可以让gtags的配置和lsp共存?有什么办法没?或者弄个开关命令?
逼急了我只能在特殊环境下去把不要的配置注释掉。这样有点笨。。。
lsp-bridge 可以和 citre 共存, citre 是基于 ctags 的。
他们俩的快捷键不一样?如果快捷键一样的话,是怎么个弄法?没想明白。 比如按了 M - . 俩都是跳转到函数定义。那么最后谁来执行跳转?
或者可以通过 .local 这个文件来配置本项目选哪个?
lsp-bridge 通过 acm 让 lsp 和 citre 后端可以混合补全。
跳转的事情你可以自己写一个胶水函数, 根据不同环境调用不同的后端。
但是要实现你的目标, 你必须要懂 elisp 。
噢,这是lsp-bridge接管了。然后由它来控制后面的多个选择。 我看看这个能用一下不能。多谢。
找到一个这个链接。但还不知道能不能用。。。
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
;;; disable lsp-mode and enable ggtags-mode
((nil . ((eval . (lsp-mode -1))
(eval . (ggtags-mode 1)))
))
你只需要像我这样写一个胶水函数, 不同模式调用 lsp 或者 gtags 的接口就好了。
如果看不懂, 先认真学习 elisp 吧。
我之前写过那种默认调用 lsp 方法如果出错捕获异常再调用另一套的做法,大概意思就是如果一个没找到就调用另外一个
看到大家提到几次 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 这种工具了。
我到用不到这么动态。我只需要在用不了lsp的时候用helm-gtags就行了。甚至可以手动操作配置一个开关之类的都可以。
比如一个机器上有lsp,我就做个选择用lsp,如果另一台机器上没有,我就配置一下用gtags。
但是快捷键需要一样。
多谢,抽空看看。
这个看起来不错。我折腾完了试试