Citre: 先进的 Ctags 前端

我看了一下应该不行。为什么你们都可以同时开呢,我都没想明白你们怎么配的 :rofl:

其实没有少。citre-ace-peek 的功能完全覆盖 citre-peek 了,另外还能做到类似「在写函数参数的时候直接 peek 函数定义」 的功能。恰恰说明 @seagle0128 仔细读过文档并且跟着操作了。

@kinono 其实我觉得tags统一放在一个 cache 目录的思想挺好的,这样就不用每个要Index的项目都要手动写 git ignore 文件。

我是自己配置同时开的,没有利用Seagle那里的。自己配置就当作两个独立的package就好了。citre-ace-peek 在调用时还需要再输入一些字符定位,我看直接citre-peek 当下cursor的位置,在我这里就很好了。

求分享同时用两个后端的配置,我来抄抄

多谢回复,我是利用universal ctags生成的tags文件,我还奇怪为啥是大写的TAGS。我看下我的配置是不是哪里不小心用到了什么。

@kinono 反馈一个Bug:当在屏幕底部用 citre-peek 命令的时候,弹出窗口应该弄在上面,要不在屏幕外面看不到。

这个其实可以用 citre-tags-file-alist 做到,但需要对每个项目都改一下这个变量。

我想知道如果用统一的目录存 tags file 的话,怎么确定哪个工程是用哪个 tags file 呢?用工程目录来命名它吗?

感觉这套东西对 Citre 结构的侵入性有点大。如果我要做类似功能的话,我会在运行创建 tags 文件的向导过后,让 Citre 记住这个工程对应的是这个 tags 文件。但这个向导本身也要在项目根目录里面写一个文件。

按一下 recenter 就好

懒猫大神,我就是纯粹把lsp 和citre 当作两个独立package配置,然后在python项目里,看起来彼此没有什么影响。这是我配置citre的地方,其实抄了seagle的配置方式; lsp就是另一个独立的文件

我觉得不用搞那么复杂哇,我给你一个思路哈:

  1. 确定project-root的时候,把 project-root 的路径字符串做一个 md5, 比如 342797eced.ctags
  2. 每次进项目的时候,先算md5,然后在 cache 目录下找对应的 ctags, 有就用,没有就新建

通过cache目录下文件名自身的md5 ctags文件名作为 “自解释” 的字典,这样你就不用在代码里面去维护字典和做字典查询的工作。

应该不用改太多。

  • M-l j : Jump to the definition.

这个快捷键能否改成单按键? 按两下不是很方便哇。

这个思路不错,谢谢!这样我们总共就有三套寻找 tags file 的方案了 :rofl: 我需要考虑下怎么在向导里理顺它们

按一下的快捷键基本都被 Emacs 自己占完了,考虑到要一边开着 peek window 一边编辑,移动之外的功能我都放在 M-l 下面了。你可以定制一下 citre-peek-keymap

这应该是etags.el的锅。(Windows下TAGS、tags不分) 如果把tags文件改名为.tags(也是citre支持的),就不会有这个提示了。

1 个赞

:rofl: 这也行!那这个事也要在文档里提一下。

你在 Windows 上体验怎样? 我之前收到过一个在 Windows 上补全会卡的报告。

你确定两个可以同时补全吗?

我是Nox(eglot变种)和citre同时启用的,Nox总是会先补全,citre不生效。

多谢提醒,我其实目前只是利用citre作为查看代码的工具。我刚测试了下写的时候,补全应该只是从lsp出来的,我之前没有注意到这两个在这里会冲突。

多谢提醒,我修改名字后,果然就好了。这个etags.el 难道是自动在project里面会查看有无tags,然后调用?能不能关闭呢? 我其实还没找到为什么etag在这里发挥了作用。。。

你可能用了 projectile 然后碰上了这个问题:Tips when work with projectile · Issue #63 · universal-ctags/citre · GitHub

1 个赞

因为 LSP (lsp-mode, eglot, nox) 和 citre 都是用的 company-capf 后端,应该是冲突的,补全只能从lsp里面过来。

1 个赞