Citre: 先进的 Ctags 前端

"C:/Users/final/code/MyQuake/src/ren_gl/gl_draw.cpp"
"c:/Users/final/code/MyQuake/tags"
(or (and $input (eq\? $input "C:/Users/final/code/MyQuake/src/ren_gl/gl_draw.cpp")))

难道是盘符大小写的问题?

1 个赞

好怪啊,我记得之前在 windows 上看 buffer-file-name 的时候,盘符是小写的,而 tags 文件里面盘符都是大写的。为此还专门做了处理。

另外你确认这个 tags 文件里面用的是相对路径,对吧?

我晚上回去再看看吧。

是的。所以Windows上最安全的做法是路径全部统一到大写或者小写再比较,或者干脆用大小写无关比较。

另外我发现在写TypeScript的时候,补全候选里会出现C++的内容,这些明显是没有用处的,在补全时是否应该直接过滤掉其他语言的候选项呢?

这样的话就是 Citre 的 bug 了。之后我看下。

这个有些时候是有用的。能在混合编程的项目中起作用是 ctags 的优势,请看 citre/docs/developer-manual/design-principle.md at master · universal-ctags/citre · GitHub

我理解你的需求,但这个需要仔细设计一下。

我建议还是应该用用,可以比较比较嘛,作为相互的参考。

最近几个晚上对 Citre 的核心各种敲敲打打,终于应该是修好了在 Windows 上卡顿的问题。

windows

这个是在 Chromium 仓库里面,170 多万条 tags(大概是 Linux 内核代码的 1/5)。可以看到弹出补全还是需要一小会,但是打字时候完全不粘手。实际体感比 gif 上看起来要好。

更惊喜的是在 Linux 上补全速度也变快了(同一台笔记本电脑),秒出:

linux

不过我再也不想碰平台相关的问题了 :rofl:

这个周末计划把大家反馈的 bug 都处理了,如果还有时间的话可能会把生成 tags 文件的命令做出来。

Edit: 考虑到 Citre 确实在巨型代码库里有很好的性能,我认真觉得对一般的项目,把代码中用到的外部库全扫描了也不会影响体验,这样还能解决补全来自外部库的符号的问题。不过生成的时候要配置好,想必也比较麻烦。

8 个赞

能不能使用动态模块来优化速度?

能。libreadtags 和 Ctags 本体是分开的。不过我个人比较喜欢装完就能用的东西,因此一直没有折腾过动态模块。

Edit: 刚看了下代码,libreadtags 提供的东西还是比较 primitive,关键是用来过滤和排序的那套 dsl 还是在 Ctags 仓库里面的。这我有点搞不懂了。

动态模块安装确实啰嗦了一点,不过这个工具本身就依赖ctags, 如果ctags软件包可以内置一个emacs动态模块的话,安装就非常简单了

楼主,能放出你的emacs配置吗?

不好意思,太乱了 :rofl:

可以,我先玩一下,可行的话就弄,想必会鼓励更多 Emacs hacker 来尝试 universal ctags。

其实我也想知道那个截图中的主题是什么 :rofl:

doom-gruvbox

1 个赞

继续折腾了一下,发现citre似乎不支持tramp?会探测不到远程的readtags和tags文件

我从未用过 tramp。之前听说 tramp 其实等于是把文件下载回本地编辑的吧,这样的话探测不到应该也正常吧?

哇楼主回复好快! 我这边的输出是这样的

helm-M-x-execute-command: readtags exits 1
/usr/local/bin/readtags: cannot open tag file: No such file or directory: /scp:arch-home:/home/<edited>/tags
Updating buffer list...

看样子是本地的 readtags 试图打开远程的文件失败了吧。

我看了下 tramp 似乎有启动远程机器上的进程的能力,但我首先需要一台远程的机器才能研究这个问题 :rofl:

233333楼主以后想研究了可以PM我,我给你一个远程机器的权限hhhh 还是要大喊一声楼主NB!

1 个赞

谢谢。我只是个普通的家庭 pc 用户,工作上也没有这个需要,所以一直没有用过 tramp。

我先试试用自己的两台本本能不能搞起来,不行的话就麻烦你啦