为什么不能在ctags命令中排除带有exclude参数的文件?

时间:2017-07-17 15:35:56

标签: vim ctags

我想为C和C ++创建标记文件,排除/usr/include/python2.7中的所有文件,/usr/include/*而不是/usr/include/python2.7中的所有文件都已创建标记。

ctags -R -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ \
    --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p \
    --c++-kinds=+p --fields=+iaS --extra=+q  \
    -f .vim/tags/c.tag /usr/include/*  --exclude="/usr/include/python2.7"

将其写为

是没有用的
ctags -R -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ \
    --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p \
    --c++-kinds=+p --fields=+iaS --extra=+q  \
    -f .vim/tags/c.tag /usr/include/*  --exclude=/usr/include/python2.7/*

为什么还有很多内容来自/usr/include/python2.7?

grep  "python*"  /home/debian8/.vim/tags/c.tag
ysize   /usr/include/python2.7/Imaging.h    /^    int xsize, ysize, xoff, yoff;$/;" m   struct:ImagingCodecStateInstance    access:public
ysize   /usr/include/python2.7/Imaging.h    /^    int ysize;$/;"    m   struct:ImagingMemoryInstance    access:public
ystep   /usr/include/python2.7/Imaging.h    /^    int ystep;$/;"    m   struct:ImagingCodecStateInstance    access:public

1 个答案:

答案 0 :(得分:3)

您正尝试在目标目录之后添加更多选项。那不会起作用。

这应该有效:

ctags -R -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ \
    --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p \
    --c++-kinds=+p --fields=+iaS --extra=+q  \
    -f .vim/tags/c.tag --exclude=python2.7 /usr/include

这与您使用的命令相同,但有三个不同之处:

  1. 在要编制索引的目标目录之前指定--exclude选项

  2. 指定没有通配符的目标目录(/usr/include),因为ctags已经知道要查看内部的所有内容。

  3. 只需要排除python2.7,因为只需要该目录名称。如果它看到该目录名称,它将不会进入那里并索引任何内容。此处不需要完整路径。