【问题标题】:Vim: load syntax file from local directoryVim:从本地目录加载语法文件
【发布时间】:2018-10-19 01:31:03
【问题描述】:

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

编辑:这与问题Vim: apply settings on files in directory 类似,但它处理 .vimrc 中的设置,该设置在语法文件之前加载。语法文件通常会清除预定义的语法信息,因此在 .vimrc 中设置此信息没有用,因此加载备用 .vimrc 文件的技术也无用。我不知道如何触发要加载的其他“之后”文件。我之前看到过这个问题,但除了与 .vimrc 相关的问题外没有其他答案。

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

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

【问题讨论】:

标签: vim vim-syntax-highlighting


【解决方案1】:

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

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

要加载 "after" 文件,您可以将它们以菊花链方式连接到加载到 .vim/after 目录中的 "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 中的 cmets。

【讨论】:

  • 为什么不让本地文件加载 vim.cpp 来代替
  • .vimrc 在创建文件缓冲区之前加载,之后加载语法设置。加载文件时 .vimrc 中的任何语法设置都会丢失...我认为这是因为全局语法文件将它们清除了。我不想禁用全局语法,只需添加即可。
猜你喜欢
  • 1970-01-01
  • 2015-07-28
  • 2021-05-18
  • 1970-01-01
  • 2020-05-23
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
相关资源
最近更新 更多