是否可以将特定的标记文件添加到 vim 中的特定 windows/buffers?

Is it possible to add specific tag files to particular windows/buffers in vim?

可以检测 当前文件 在 vim 中打开的路径中的关键字并 添加特定的 tag 文件?

我的项目主要组织在 srctestexternal 块中,但这些块中的每一个都出现在路径中的任何位置,不一定在开头或结尾(否则 this 解决方案可能有效)。也就是说,我的项目有这样的结构:

feature1/src
feature1/test
feature2/src
feature2/test
external/feature3

我可以为每个 srctestexternal 块生成一个单独的 tag 文件,然后在 [=47= 中的路径中检测这三个关键字] 与 match(expand('%:p:h'), ...).

但是,如果我在任何包含 src 的路径上,我如何 加载 src 标记,等等 testexternal?命令 set tags+=... 为所有 windows (缓冲区)添加它们,混合它们会导致许多名称冲突。

提前致谢

种类

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
    ...