emacs TAGS etags

1. 创建TAGS

etags file-list

find . -name "*.[chCH]" -print | etags -

find . -print -name "*.[chCH]" -o -name "*.cpp" | etags -   #-print需要提前,否则没有输出

# find参数-maxdepth n 可以指定搜索层数

2. 相对路径、绝对路径

如果传给 etags 的参数是绝对路径,那么 TAGS 中包含的也是绝对路径,如果传递给 etags 的是相对路径,那么 TAGS 中包含的也是文件的相对路径,需要把TAGS放在同一目录下;上面的 find 命令产生的都是相对路径,如果需要传给 find 绝对路径,find 的这个规则和 etags 是一样的;

例子:

find `pwd` | etags - -o ~/tmp/TAGS # etags -o 选项可以指定输出文件名,红色的 '-' 表示标准输入


3. 更新

重新执行生成原来的TAGS的命令,etags不会重新新建TAGS,而回自动更新TAGS文件;


4. --include 选项

man etags:

-i file, --include=file
              Include a note in the tag file indicating that, when searching for a tag, one should also consult
              the tags file file after checking the current file.  Only etags accepts this option.

生成 TAGS 的时候,同时包含另外的TAGS,其实只是在文件末尾添加了一个指向include的文件,如:

find `pwd` | etags - --include=~/tmp/TAGS -o ~/tmp/TAGS3

生成的TAGS3末尾会增加一行:~/tmp/TAGS,include

etags搜索的时候,同时也会搜索包含的文件;


5. tags-table-list

保存加载的tags table文件(etags 生成的称为tags table文件),通过 visit-tags-table可以读取一个 tags table,如果tags-table-list 不为空,在加载的时候询问: keep current list of tags tables also? (y or n),回答 y,则把加载的文件名也加入到tags-table-list中,如:("/home/xxx/tmp/TAGS3" "/home/xxx/tmp/TAGS") 包含两个 tags table 文件;


另外有一个变量是:tags-file-name,这个只显示一个tags table文件,不要设置这个变量名,它和tags-table-list只能设置一个;


tags-reset-tags-table 函数重置以上两个变量;


6. 使用emacs中的tags相关命令

find-tag:查找符号定义;(M-.被Global占用)查找下一个

find-tag-regexp,C-M-. :

按照正则表达式查找TAGS文件,找到第一个匹配的就返回,并倒转到匹配的位置,继续查找下一个用 C-u C-M-. ;

参考:http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html

tags-search:通过正则表达式查找,TAGS对应的源文件,而不是TAGS本身;

处理模式是单行处理,如:可以使用^表示一行的开头;

tags-search找到第一个匹配的就返回,并跳转到哪个文件,M-,(tags-loop-continue)继续查找下个匹配;

注意:etags有些不容易觉察的问题,有些函数标识,比如:sys/socket.h中的函数都没有,所以搜索TAGS文件的命令都找不到这些函数,只有通过tags-search来直接搜索;

tags-apropos:用正则表达式查找一个符号(搜索TAGS本身),并给出所有匹配的列表;

tags-apropos RET iovec RET 结果如下:

emacs TAGS etags_第1张图片

参考:http://www.gnu.org/software/emacs/manual/html_node/emacs/List-Tags.html#List-Tags

具体细节参考:GNU Emacs Manual , 32.3 Tag Tables


你可能感兴趣的:(list,File,table,include,emacs,tags)