赞!提个意见,最好是像陈斌大神的counsel-etags那样,自动生成tags。可以加几个local variable来指定项目的语言,这样生成一个通用的cmd
如果需要根据工程来定制,.dir-locals.el
应该可以吧。我使用ctags的经验有限,但感觉上这部分不需要弄得太复杂。
嗯嗯,多谢!那我暂时来利用citre 作为查看代码的工具。
嗯嗯,多谢啦!我在macOS下,其实也是有这个问题。但是修改名字后,就没事了。
我刚才折腾了一下,可以这样设置:
(setq company-backends '((company-tabnine company-dabbrev company-keywords company-files company-capf)))
这样做的技巧:
- 把 company-capf 放后端的最后一个,避免他的输出影响其他后端的输出
- company-tab 可以利用LSP后端
这样设置可以同时补全来自LSP(通过tabnine)和citre两个后端的内容。
详细的 company 配置可以查看 lazycat-emacs/init-company-mode.el at 8f3dee8a6fe724ec52cd2b17155cfc2cefc8066b · manateelazycat/lazycat-emacs · GitHub
capf 后端的接口比较简单,我感觉完全可以包装一个「依次尝试 LSP 和 Citre 的 capf 函数」的后端。
我比较懒,刚才折腾了一下优先级, tabnine可以补全LSP代码的话,我就不用研究怎么写一个 mix company backend 的函数了。
company 好像有 mix 后端的功能吧,我记得叫group,不过前提是两个不同的后端。
LSP 和 Citre 都是用的 company-capf 这个后端
多谢懒猫大神的指导,我学习下~ 我能理解为,这里面是通过tabnine来实现lsp 与citre 补全的分离么?还是单纯把company-capf 放在所有company 后面就OK? 抱歉,我对company没有啥理解。我尝试就放在最后,补全和我之前没有什么区别(其实我也没别出来哪些是lsp的补全,哪些是citre的)。。。
之后我研究下 lsp-mode 然后写个 wiki 吧。
就看我上面的文章吧 Emacs + Company-Mode 配置多个补全后端
LSP是通过TabNine来的,因为TabNine不走 company-capf 所以可以做到和 Citre 分离
嗯嗯,多谢~ 已经在阅读,并且安装上了tabnine体验看看。
太好了!紫薯布丁
@kinono
citre-jump 这个命令可以兼容一下 xref, 当找不到tagsfile或者Ctags没有定义的时候,调用 (xref-find-definitions (symbol-at-point))
做一个fallback方案,这样就不用设置跳转后端的选项了。
这种情况,对于Elisp这种内置支持,或者Xref后端配置好的情况下,可以兼顾Ctags定义和Xref定义。
本来准备给你写一个补丁的, 发现你是在 citre-get-definitions 里面判断tagsfile, 怕给你弄乱逻辑,所以提一个建议吧,希望采纳。
这个还是自己包一个命令吧,先调 citre-jump
,抓到错误以后就调用 xref。
看到这个citre-peek我又想用emacs写代码了
也是个法,分享下我的方案吧:
(defun citre-jump+ ()
(interactive)
(if (ignore-errors (citre-get-definitions))
(citre-jump)
(xref-find-definitions (symbol-at-point))))
其实我想的是用 condition-case
,你这个要查两次定义 不过你没觉得卡就行(