美文网首页
如何使用ctags打tags

如何使用ctags打tags

作者: 小胖_20c7 | 来源:发表于2019-07-18 11:29 被阅读0次

    tags有什么用?
        我知道的用途只有两个。一个是根据tag来跳转,一个是根据tag来自动补齐

    关于自动补齐的一些说明?
        tags的自动补齐实际上是通过vim的omni completion(即ctrl-x,ctrl-o)来实现的。现在还有一种更强大的补齐方式(即clang),这种通过User defined completion(即ctrl-x,ctrl-u)来实现的

    两种补齐方式官方文档如下:
      https://www.vim.org/scripts/script.php?script_id=2358
      https://www.vim.org/scripts/script.php?script_id=3302

    下面重点说下ctags的常用选项
    --list-maps(列出所有语言和文件后缀的映射关系,即什么样的文件被认为是什么样的语言)
    --list-kinds=c(列出指定语言的所有tag类型。注意,有些类型默认是关闭的)
    
    --links=yes(沿着软连接走下去,默认yes,不用理它)
    --file-scope=yes(文件范围的tag也打进去,默认yes,不用理它)
    
    --langmap=c:+.h(改变默认的语言映射关系。.h默认映射到c++)
    --languages=c,c++(只对特定语言的文件打tag。就是说你输入的这些文件,如果被判定不是指定语言,是不会进行处理的)
    
    --c-kinds=+p(开启c语言的函数原型tag类型。自动补齐需要)
    --c++-kinds=+p(开启c++语言的函数原型tag类型。自动补齐需要)
    
    --fields=+iaS(每个tag,给出更详细的信息。自动补齐需要)
    --extra=+q(即qualified fileds,也打上tag。自动补齐需要)
    
    -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__(忽略这些关键字,不然有些c函数没法识别)
    
    --exclude=c++(打tag的时候,忽略指定的目录或者文件)
    -L project.files(把要打tag的文件列表写入project.files文件)  
    
    -f ~/mytags/cpp(指定tags的文件名称)
    -R(对目录递归执行)
    
    标准c++ tags
    1 下载cpp_src源码(https://www.vim.org/scripts/script.php?script_id=2358)
    2 ctags --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -R -f ~/mytags/cpp ~/cpp_src
    
    标准c tags
    ctags -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ \
          --langmap=c:+.h --languages=c \
          --c-kinds=+p --fields=+iaS --extra=+q \
          -f ~/mytags/systags \
          /usr/include/*.h  \
          /usr/include/sys/*.h
          /usr/include/netinet/*.h
    头文件目录,根据需求自己加。我不喜欢用-R /usr/include(没用的符号太多)
    也可以选择用-L tmp.txt这种方式,下面是自动生成tmp.txt的方法
    ls -lh /usr/include | grep '^d' | awk '{print $9}' | sed -E 's#(.*)#/usr/include/&/*.h#' | sed '1i /usr/include/*.h' > tmp.txt
    
    Project tags
    ctags --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q --languages=c,c++ -R ./

    相关文章

      网友评论

          本文标题:如何使用ctags打tags

          本文链接:https://www.haomeiwen.com/subject/ndvklctx.html