是否可以将特定标签文件添加到 vim 中的特定窗口/缓冲区?

问题描述

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

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

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

我可以为每个 tagsrctest生成一个单独的 external 文件,然后使用 {{1} 在 vi​​m 的路径中检测这三个关键字}.

但是如果我在任何包含 match(expand('%:p:h'),...) 的路径上,我如何加载 src 标签,等等 srctest ?命令 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
    ...