我试着设置了
citre-tags-file-global-cache-dir “~/.cache/tags/”
citre-default-create-tags-file-location 'global-cache
现在每次的tags文件总是生成到我的根目录下,并没有生成到"~/.cache/tags/“里?最初的那个不需要设置的citre版本里是默认生成到”~/.cache/tags/",这个版本好像不行了,我的写法有问题吗?
另外有哪位知道怎么解析Yaml文件的吗?我设置语言为Yaml,生成的tags里面是空的;解析C文件确实是好的?求助各位啊,谢谢;
kinono
2021 年7 月 12 日 08:31
301
uctags 目前对 yaml 只能记录 anchor。如果 ctags 对你的 yaml 文件没有给出期望的输出,可以给 ctags 报 bug 或者自己用正则扩展一下。
缓存目录的问题我下班以后帮你看下,但我感觉应该不是 Citre 的问题,建议你先试试从 $ emacs -Q
开始能不能复现。
我的运行环境是win10,emacs28;我看了一下代码,好像
(defun citre-tags-file-in-global-cache (dir)
“Return the tags file name of DIR in global cache dir.
DIR is absolute. The full path of the tags file is returned.”
(concat
(or (file-remote-p default-directory) “”)
(expand-file-name
(citre–path-to-cache-tags-file-name (file-local-name dir))
citre-tags-file-global-cache-dir)))
这个函数的返回总是根目录。似乎是windows文件名格式的问题?但是初始的citre的版本似乎是好的。
kinono
2021 年7 月 12 日 10:28
303
我知道了。之前的方案,缓存目录下的 tags 文件名用的是 md5,这次为了更可读,用的是感叹号分割的路径名。比如你的工程在 /home/user/project
,tags 文件就叫做 !home!user!project.tags
。
在 Windows 下这样会导致文件名里有冒号:
(citre--path-to-cache-tags-file-name "d:/project")
=> d:!project.tags
导致 Emacs 把它当成绝对路径,因而不能算出它在缓存目录下的路径:
(expand-file-name "d:!project.tags" "d:/cache/dir/")
=> d:!project.tags
我之后想一下怎么处理。可能直接把这个冒号干掉就行。
kinono
2021 年7 月 12 日 12:13
304
最新版本已经修复了(如果你用 melpa 的话可能要等几个小时才有)
/home/feng/.cache/tags/!home!feng!projects!mygnuhealth!mygnuhealth!.tags doesn't contain recipe for updating. Edit its recipe? (y or n)
这个信息是什么意思? 每次运行 citre-update-this-tags-file 都会出现
找到原因了:ctags 版本太低,编译最新版本后就正常工作了。
1 个赞
my2817
2021 年7 月 15 日 01:01
307
支持一下!
是否有函数支持由用户输入要搜索的symbol,而不是从光标位置得到要搜索的symbol?
kinono
2021 年7 月 15 日 01:18
308
在没有符号的地方按 xref-find-definitions
就可以。以后会做一个更好的交互式过滤工具
(defun citre-edit-cmd-buf-add-lang ()
"Insert a language in the command editing buffer.
This command requires the ctags program from Universal Ctags."
(interactive)
(when-let* ((ctags (or citre-ctags-program "ctags"))
(langs (with-temp-buffer
(ignore-errors
(call-process "ctags" nil (current-buffer) nil
----------------------------------------------- 这个地方应该是用 ctags 符号吧?
"--list-languages")
(split-string (buffer-string) "\n" t))))
(lang (completing-read "Select a language: " langs)))
(insert lang ",")))
tumashu:
/home/feng/.cache/tags/!home!feng!projects!mygnuhealth!mygnuhealth!.tags doesn't contain recipe for updating. Edit its recipe? (y or n)
这个信息是什么意思? 每次运行 citre-update-this-tags-file 都会出现
找到原因了:ctags 版本太低,编译最新版本后就正常工作了。
我感觉这个地方的提示应该优化一下,如果遇到这种情况,最好让用户检查一下 ctags 是否版本太低。
kinono
2021 年7 月 15 日 01:26
311
这个其实应该只是因为你第一次生成的时候没有用 Citre。编辑一次 recipe 以后就不会再提醒了。
理论上 Citre 只要求 readtags 的版本,生成 tags 你甚至可以不用 uctags,比方说 hasktags、gotags 都应该是可以用的。
tumashu:
这个地方应该是用 ctags 符号吧?
是,谢谢!我回去修一下。
我这个折腾了半天,是不是因为当前工作目录没保存到 tags文件中导致的?
kinono
2021 年7 月 15 日 01:37
313
如果 working directory 没有写入的话确实会出现这个情况,但这个事是 Citre 做的,应该跟 ctags 程序没关系。
你可以看下出问题的文件里有没有 !_TAG_PROC_CWD
这个 tag
这种交互一般convention是通过C-u按键前缀,可以考虑一下。
我用 emacs.git 测试了一下,citre-create-tags-file 好像没有添加 !_TAG_PROC_CWD
!_CITRE_CMD ctags|-o|%TAGSFILE%|--languages=EmacsLisp,C|--kinds-all=*|--fields=*|--extras=*|-R /command line to generate this tags file/;"
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/;" extras:pseudo
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/;" extras:pseudo
!_TAG_OUTPUT_FILESEP slash /slash or backslash/;" extras:pseudo
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/;" extras:pseudo
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/;" extras:pseudo
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //;" extras:pseudo
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/;" extras:pseudo
!_TAG_PROGRAM_URL https://ctags.io/ /official site/;" extras:pseudo
!_TAG_PROGRAM_VERSION 0.0.0 //;" extras:pseudo
就是简单的三步骤:
打开 emacs.git 下一个c 文件
运行 citre-create-tags-file
运行 citre-update-this-tags-file
我猜测是不是老的 ctags 运行有什么特殊情况,导致添加 !_TAG_PROC_CWD
的函数没有执行
1 个赞
期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
| 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
|/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
||/ 名称 版本 体系结构 描述
+++-===============-=================-============-=================================================
ii universal-ctags 0+git20200824-1.1 amd64 build tag file indexes of source code definitions