Vim:从本地目录加载语法文件

时间:2018-05-09 02:40:30

标签: vim vim-syntax-highlighting

我希望能够为特定项目创建vim语法文件,以突出显示该项目特有的标识符。当然,我可以在$HOME/.vim/after/syntax/*.vim中安装语法文件,但我想将其设置为每个文件夹配置。项目语法文件应添加到现有语法文件中,而不是替换它。我还想要一个自动加载本地文件的通用解决方案(如果存在),并且不需要为.vimrc或插件中的特定目录配置。

编辑:这与问题http://www.sphinx-doc.org/en/stable/ext/autodoc.html#confval-autodoc_mock_imports类似,但它处理.vimrc中的设置,该设置在语法文件之前加载。语法文件通常会清除预定义的语法信息,因此在.vimrc中设置此信息没有用,因此加载备用.vimrc文件的技术没有用。我不知道一种方法来触发要加载的其他“后”文件。我之前已经看过这个问题,但除了那些与.vimrc相关的答案之外没有答案。

我已使用:set exrc配置了本地.vimrc文件,并已验证这些文件已加载,但.vimrc中的语法定义会被稍后加载的语法文件覆盖。 (我希望项目语法添加到标准语法,而不是替换它。)

是否可以用于本地“之后”语法文件的类似功能,无论是vim功能还是插件?

1 个答案:

答案 0 :(得分:0)

我根据这个答案调整了一个解决方案:https://stackoverflow.com/a/13192721/2150289。虽然我仍然希望探索其他选项(如果它们存在),但这仍然有效。将此作为一个单独的问题和答案,因为.vimrc答案不适用,并且对于语法文件来说这是不可能的。

在我的项目目录中,我有一个设置标签的本地.vimrc等等。这是由set exrc或任何其他加载本地.vimrc的方法加载的。

在"之后加载"文件,您可以将它们菊花链式连接到"之后"在.vim / after目录中加载的文件。例如,我有一个.vim_syntax_cpp.vim,其中包含特定于项目的C ++语法。我把它放在项目目录中:

PROJECT/
  .vimrc           # gets loaded by set exrc
  .vim_syntax_cpp  # daisy chained from .vim/after/syntax/cpp.vim
  Makefile
  foo.cpp
  bar.cpp

在〜/ .vim / after / syntax / cpp.vim中,我放置了这段代码:

" load syntax file if it exists in the
" current directory or parent directory
if filereadable(".vim_syntax_cpp.vim")
    source .vim_syntax_cpp.vim
elseif filereadable("../.vim_syntax_cpp.vim")
    source ../.vim_syntax_cpp.vim
endif

我已经验证这会加载本地语法文件并将它们添加到现有语法定义中。

这种方法有局限性;请参阅linked answer中的评论。