2

我正在编写一些特定于文件类型的 vim 脚本,c.vim并且cpp.vim,当我注意到对于 C++ 文件时,两者c.vimcpp.vim都被执行。这很有意义,因为 C++ 是 C 的超集。但我的问题是:使这种情况发生的逻辑在哪里?

也就是说,编译 vim 时是否有一些东西告诉它 C++ 文件也是 C 文件,或者 .vim 目录中是否有一些文件控制这种行为?还是完全不同的东西?

有趣的是,检查 vim 分配给我的 C++ 文件的文件类型(使用:set ft?)返回cpp,而不是像这个问题c.cpp中讨论的那样。

4

2 回答 2

4

我的cpp.vim文件(在/usr/share/vim/vim73/syntax)里面有:

" Read the C syntax to start with
if version < 600
  so <sfile>:p:h/c.vim
else
  runtime! syntax/c.vim
  unlet b:current_syntax
endif

所以它正在读取c.vim文件。

于 2013-06-19T22:49:02.553 回答
0

我不确定这一点,但我希望使用该构造时cpp.vim需要。这并不意味着 C++ 在 vi​​m 的眼中被视为 C 的超集。但是我没有仔细阅读语法文件来确定这一点,因为 vim 语法文件读起来很痛苦;-)c.vimextern "C" {}

否则,vim 会将您正在编辑的文件识别为 C++ 文件并通过ft机制加载其语法,该机制仅加载一组语法、插件等。给定文件的扩展名(或第一个字符,iinw)。

高温高压

于 2013-06-19T22:49:23.947 回答