问题描述
是否可以检测在vim中打开的当前文件路径中的关键字并添加特定 tag
文件 ?
我的项目主要组织在 src
、test
和 external
块中,但是这些块中的每一个都出现在路径中的任何位置,不一定在开头或结尾(否则this 解决方案可以工作)。也就是说,我的项目具有以下结构:
feature1/src
feature1/test
feature2/src
feature2/test
external/feature3
我可以为每个 tag
、src
和 test
块生成一个单独的 external
文件,然后使用 {{1} 在 vim 的路径中检测这三个关键字}.
但是如果我在任何包含 match(expand('%:p:h'),...)
的路径上,我如何只加载 src
标签,等等 src
和 test
?命令 external
为所有窗口(缓冲区)添加它们并混合它们会导致许多名称冲突。
提前致谢
解决方法
那种
augroup example | au!
autocmd BufRead,BufNewFile */myproject/*
\ let &l:tags = &g:tags . ',' . TagForFile(expand("<amatch>"))
augroup end
编写函数 TagForFile()
由您决定。
Vim 已经通过正确设置的 &tags
选项处理了这种情况:
set tags=./tags;
上面的值告诉 Vim 寻找一个 tags
文件:
- 在当前文件的目录下,用
./tags
, - 递归,直到文件系统的根目录,使用
;
(有关限制,请参阅:help 'tags'
)。
在这种情况下......
-
使用上述值并在编辑
feature1/src/dir/file.c
时,Vim 将按顺序在以下位置查找tags
文件:feature1/src/dir/tags feature1/src/tags feature1/tags ...
-
使用上述值并在编辑
external/feature3/file.c
时,Vim 将按顺序在以下位置查找tags
文件:external/feature3/tags external/tags ...