VIM - 从项目中多个地点采购标签(VIM - Sourcing tags from multi

2019-08-03 03:46发布

美好的一天,

我通常相对较小(不到2万行代码),它们包含在单个目录中的所有自我,有自己的Makefile,并且是相当容易的工作项目上工作。

VIM是我喜欢的编辑器,当我打开一个项目,我通常通过映射F10键建立ctags的列表:

map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

这让我跳的变量/结构/等通过定义将光标移动到文本,按CTRL +],以及使用代码完成通过OmniCppComplete一个下拉列表。

不过,我现在工作的一个稍大的项目,该项目利用结构的很多。 此外,许多这些结构具有其他自定义结构数组作为成员,因此,代码完成对我来说是非常有用和重要的工具,现在。

我有两个路径,其中包括了大量的.C文件和.h文件,它们可以从机器变成机器。 在每一台机器,但是,我们有我们的一个环境变量.bashrc文件指向他们,像这样:

SDK_SRC_PLUS_HEADERS=/public/sdk
THIRD_PARTY_SDK=/private/sdk

我希望能有VIM自动引用的这些附加路径的内容时,我试图做代码完成(通过VIM的内置OmniCppComplete功能),或跳转到文件在这些地方,当我使用CTRL +]在VIM跳转到的一个结构,函数,变量等的定义

所以,对于上述两种路径的,我cd放进去,并生成经由标签ctags -R 。 然后,我修改了我~/.vimrc文件,包括额外的标签路径,如下所示:

tags=./tags
tags+=$SDK_SRC_PLUS_HEADERS/tags
tags+=$THIRD_PARTY_SDK/tags

然后我cd到我的项目/home/user1/projects/test ,启动VIM,和VIM打F10索引它。 然而,这并不在所有的工作。 事实上,它打破了我的使用,即使标签只是项目本身的能力(即:CTRL +]现在什么都不做)。

有没有人对我怎么能有代码完成的源代码,并跳转到定​​义通过环境变量使用多个源目录有什么建议?

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

Answer 1:

这确实似乎是不能使用的标签里面设置环境变量的问题。

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

:let &tags.=expand(",$SDK_SRC_PLUS_HEADERS/tags")

这可能是稍微更友好:

:exec expand("set tags+=$SDK_SRC_PLUS_HEADERS/tags")


Answer 2:

我想添加到由@sehe提供的解决方案。

这是最后一盘我对所做的更改.vimrc 。 第一行是为增加扩展的环境变量路径,以我的tags变量。 另一种是在事件自动更新的标签,我要更新我的SDK,并且不希望能意外地使用了过期标签:

" CTAGS tag generation for OmniCppComplete
set tags+=./tags
exec expand("set tags+=$SDK_SRC_PLUS_HEADERS/tags")
exec expand("set tags+=$THIRD_PARTY_SDK/tags")
" Can verify taglist is correct via ":set verbose tags?" command

" Create a mapping to delete the old tags, re-generate them, and use them
map <F10> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . \| rm -f $SDK_SRC_PLUS_HEADERS/tags \| ctags -R -f $SDK_SRC_PLUS_HEADERS/tags $SDK_SRC_PLUS_HEADERS/tags  \| rm -f $THIRD_PARTY_SDK/tags \| ctags -R -f $THIRD_PARTY_SDK/tags $THIRD_PARTY_SDK/tags  \| echo "Done re-generating tags."<CR>


文章来源: VIM - Sourcing tags from multiple locations in project