Citre: 先进的 Ctags 前端

你给我看这个,我也只能告诉你应该是你的 tags 文件里面就没有录到这个头文件。。

原因可能是你的头文件不在扫描路径中,或者你没有录 F/file kind 的 tag,再或者 Citre 有 bug。但我建议你自己先排查一下,打开 tags 文件翻一翻有没有头文件,有没有你想要的头文件(直接用头文件名在里面搜索就行),检查一下 ctags 的命令行。

tag是有的,头文件在tags里能搜到,tags也是按照–kinds-all=*选项生成的。

所以我比较怀疑citre有bug,目前我感觉citre在生成文件名那一步就没有做对,但我不知道怎么验证这一点。

major mode 是什么?在头文件上面 M-x eval-expression RET (citre-get-symbol) RET 结果是什么?

对这么一行代码:#include “IntervalInfo/Interval.h”

试了一下,是这样:

  1. 光标放在#号上面,结果 nil
  2. 光标放在include上面,结果是 #(“include” 0 7 (citre-bounds (196 . 203) citre-file-path “/home/wanghb/workspace/klee/lib/Module/IntervalInfo.cpp” citre-tags-file “/home/wanghb
    /workspace/klee/tags”))
  3. 光标放在IntervalInfo上面,结果是 #(“IntervalInfo” 0 12 (citre-bounds (205 . 217) citre-file-path “/home/wanghb/workspace/klee/lib/Module/IntervalInfo.cpp” citre-tags-file “/home/
    wanghb/workspace/klee/tags”))
  4. 光标放在Interval.h上面,结果是 #(“Interval” 0 8 (citre-bounds (218 . 226) citre-file-path “/home/wanghb/workspace/klee/lib/Module/IntervalInfo.cpp” citre-tags-file “/home/wangh
    b/workspace/klee/tags”))

是不是取符号就没有没有取对啊感觉?

因为tag只认识单词,不认识语法。

有专门的函数 citre-lang-c--get-header-at-point 处理这个情况,应该不会有你说的现象出现。你是不是不在 c-mode 里面?

C++ mode

因为我和另一个开发者对 c++ 不熟,没有对 c++ mode 做特别的处理。

目前的话可以手动选中 Interval.h 再查定义。

用不出来,算啦

开启了citre后,imenu的时候提示有citre-core-tags-file-info: c:/Users/xxx/AppData/Local/Temp/citre-imenu.tags doesn’t exist。关闭citre-mode以后就正常了。这个是咋回事啊?

【】我知道了,emacs里面自带的ctags冲突了,用utags就没问题。请忽略此问题,谢谢;

编译了新的emacs29,用的是https://github.com/emacs-mirror/emacs上master分支0316的代码,在打开文件时发现总会报一个错误:citre–project-root: Wrong type argument: stringp, (Git “~/”)

3月3号的代码编译后还没有这个错误,是不是emacs中有什么改动影响了citre的实现了?

有人已经报了这个 bug :rofl: 是我太懒了,我尽快修了吧

Universal-ctags 是不是对 scheme 支持不好? 我今天试了试,感觉变量都标记被 function 了,不知道是什么情况。

图片

是的,(def... 这种的都会被当成函数。

:rofl: :rofl: :rofl: :rofl: :rofl: :rofl: 是不是作者故意的 :joy:

ctags 的 scheme parse 是抄 etags 的,可能 etags 就这样,我也不清楚 :rofl: 你可以写个 issue 嘛

ctags 和 scheme 我都是半瓶水,写出好的 issue 太费脑细胞了。。。。。 :rofl:

citre支持corfu吗?我今天从company换到了corfu,增加了all-the-icons的补丁,发现citre显示的补全好像并不是作为corfu的后端,而是独立显示的?这样就没办法和其他的补全一起显示了,而且也没有图标了;

是不是citre还不支持corfu啊?

citre-enable-capf-integration 会添加 capf 支持,corfu 天然支持 capf