VIM - 从项目中的多个位置获取标签

Clo*_*oud 5 vi vim ctags omnicomplete code-completion

美好的一天,

我通常使用相对较小(少于20,000行代码)的项目,这些项目都包含在一个目录中,拥有自己的Makefile,并且相当容易使用.

VIM是我的首选编辑器,当我打开一个项目时,我通常通过映射到F10密钥来构建ctags列表:

map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
Run Code Online (Sandbox Code Playgroud)

这允许我通过将光标移动到文本上并跳过CTRL+ 来跳转到变量/ struct/etc的定义],以及通过OmniCppComplete使用下拉列表使用代码完成.

但是,我现在正在开发一个稍微大一点的项目,它利用了大量的结构.此外,许多这些结构都有其他自定义结构的数组作为成员,因此代码完成对我来说是一个非常有用和重要的工具.

我有两条路径,包括很多.C文件和.h文件,它们可能会在不同机器之间发生变化.但是,在每台机器上,我们的.bashrc文件中都有一个环境变量,它指向它们,如下所示:

SDK_SRC_PLUS_HEADERS=/public/sdk
THIRD_PARTY_SDK=/private/sdk
Run Code Online (Sandbox Code Playgroud)

当我尝试执行代码完成时(通过VIM内置的OmniCppComplete功能),或者当我在VIM中使用CTRL+ 时跳转到这些位置的文件,我希望能够让VIM自动引用这些附加路径的内容]跳转到结构,函数,变量等的定义

因此,对于上述两个路径,我cd进入它们,并通过生成标记ctags -R.然后,我修改了我的~/.vimrc文件以包含其他标记路径,如下所示:

tags=./tags
tags+=$SDK_SRC_PLUS_HEADERS/tags
tags+=$THIRD_PARTY_SDK/tags
Run Code Online (Sandbox Code Playgroud)

然后cd我进入我的项目/home/user1/projects/test,启动VIM,然后点击F10VIM索引它.但是,这根本不起作用.事实上,它打破了我甚至只为项目本身使用标签的能力(即:CTRL+ ]现在什么都不做).

有没有人对如何通过环境变量使用多个源目录获得代码完成源代码和跳转定义有任何建议?

提前感谢大家的时间和帮助!

seh*_*ehe 1

这确实是您无法在标签设置中使用环境变量的问题。

我想出了这个作为解决方法:

:let &tags.=expand(",$SDK_SRC_PLUS_HEADERS/tags")
Run Code Online (Sandbox Code Playgroud)

这可能会稍微友好一些:

:exec expand("set tags+=$SDK_SRC_PLUS_HEADERS/tags")
Run Code Online (Sandbox Code Playgroud)