标签选项
通过'tags'选项,可以指定查找标签文件的位置。根据以下默认设置,Vim将在当前目录查找标签文件:
set tags=tags=./tags,tags
对于大量的代码文件,也可以设置更精细的查找路径:[S]
set tags=./.tags;,.tags
其中,以逗号分隔的参数为:
- ./.tags;,代表在文件的所在目录下,查找名字为“.tags”的标签文件。使用以点开头的文件名,以便与常规的项目文件相区别。结尾的分号代表查找不到时继续向上递归到父目录。这样对于分布在不同子目录中的源代码文件,只需要在项目顶层目录放置一个.tags文件即可。
- .tags,是指同时在 Vim 的当前目录(即:pwd命令返回的目录)下查找 .tags 文件。
假设我们针对rails源码库(~/src/rails)生成tags文件,并在'tags'选项中包含此文件,那么就可以在编写代码时,方便地跳转至标签的定义处,获得相关地使用说明。
set tags+=~/tags/rails.tags
默认设置下,Vim使用二分法(binary search)来查找指定的标签名。如果您生成的标签文件(Tags File)没有经过排序,那么可以切换至线性查找(linear search)方式:
:set notagbsearch
标签函数
通过调用Vim内置的taglist函数,可以实现自定义的标签匹配功能。taglist函数将根据输入的正则表达式,将所有匹配的标签以列表形式返回。使用:help taglist
命令,可以查看该函数的帮助信息。
例如以下代码,利用taglist函数实现了查找指定函数的功能:
command! -nargs=1 TagFunction call s:TagFunction(<f-args>) function! s:TagFunction(name) " Retrieve tags of the 'f' kind let tags = taglist('^'.a:name) let tags = filter(tags, 'v:val["kind"] == "f"') " Prepare them for inserting in the quickfix window let qf_taglist = [] for entry in tags call add(qf_taglist, { \ 'pattern': entry['cmd'], \ 'filename': entry['filename'], \ }) endfor " Place the tags in the quickfix window, if possible if len(qf_taglist) > 0 call setqflist(qf_taglist) copen else echo "No tags found for ".a:name endif endfunction
使用:TagFunction HTML
命令调用自定义函数,将查找所有以“HTML”开头的函数,并显示在Quickfix中。
标签相关插件
unimpaired.vim插件,映射了一系列方括号开头的快捷键,以方便在标签之间进行跳转。比如]t代表:tnext
;[t代表:tprev
等等。
vim-gutentags插件,可以检测文件变动并自动增量更新标签文件(Tags File)。它可以异步更新标签,并且对于标签文件进行排序,以便于Vim使用二分法快速搜索关键字。
没有评论:
发表评论