首页 > 其他 > 详细

ctags的--exclude选项

时间:2021-09-01 15:08:42      阅读:25      评论:0      收藏:0      [点我收藏+]

起因

tags --exclude=./src/isa/riscv32, 发现加了./就不起作用(也就是说目录下文件还是会被tag).
man ctags, 看到是pattern.

试验

/Users/quebec/Playground/play/a/b/c目录下有main.c
内容:

#include <stdio>

int main() {
}

现在在play下. 用比如ctags -R --exclude=c这样的命令测试. 结果如下. 起作用的意思就是没有被tag, 不起作用就是能找到main tag.

c, 起作用
b/c, 不起作用
b, 起作用
*b/c, 起作用
c/*, 不起作用
/Users/quebec/Playground/play/a/b/c/*, 不起作用
a/b/c/*, 起作用
b, 起作用

推测

据此结果, 猜测其机制为:

  1. 必须是完整匹配, 可以有通配符*, ?之类的. 和gitignore不同的是, *也能匹配..
  2. 会匹配的路径是要么是这个节点(目录或者文件, 由于inode所以把它称为节点)的name, 要么是它相对于当前目录的路径, 相对路径中不包括..

比如, 递归进入目录a后, 发现有目录b, 那么要匹配的目标字符串为a, a/b(而不是绝对路径), 如果匹配成功, 此目录不再进入.

解释结论

1, 3. c, c与目录c的节点名匹配, 不再进入, 起作用, 3和1的道理相同
2, 4, 5. b/c, 根据1必须是完整匹配, 如果加上*, 就像4那样, 起作用
6. 前面说了, 目标字符串不是绝对路径, 因此匹配不上不起作用
7. 根据2, 起作用
8, 根据2, 起作用

ctags的--exclude选项

原文:https://www.cnblogs.com/Tokubara/p/15213969.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!