我可以在没有扩展名的C ++标题上使vim做语法高亮显示吗?

时间:2012-05-14 13:46:19

标签: c++ vim editor syntax-highlighting

我有一个项目,其中包含一堆遵循标准C ++标头命名约定的C ++头文件;也就是说,名为Foo的类将在名为Foo的文件中声明,而不是Foo.hFoo.hh。是否有一种很好的方法来配置vim只为这些文件进行语法高亮?稍微不那么令人满意的后备是为所有没有扩展名的文件启用C ++风格的突出显示。我不确定是否有更复杂的方法来检测文件类型,而不是仅仅依赖于它的扩展。

3 个答案:

答案 0 :(得分:15)

您可以使用modeline功能。 Modelines允许您在文件的第一行/最后几行的注释中设置某些选项。

这使它成为设置编码指南,折叠参数的好地方。出于安全原因,无法设置某些选项。有关详细信息,请参阅the documentation

将它放在文件的顶部或底部:

/* vim: setlocal ft=cpp: */

编辑:更多细节,由评论提示:):

仅在启用了模式行时才会起作用。在正常情况下,它应该是默认的。要确保启用该功能,或更改检测到区域的大小,请在modeline中设置.vimrc选项:

set modeline=5

将确保在每个文件的前五行或最后五行中检测到如上所述的行。

在模式行中,setlocal表示为加载文件的缓冲区设置选项。ft选项(也称为filetype)决定了语法高亮语言。值cpp是C ++文件使用的值。

编辑2:如果你能识别一个神奇的模式,没有模式线,还有更多的工作:

au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif

含义:每次打开文件时,请检查"MagicPattern"是否在那里。如果是,请将其视为C ++。模式参数采用正则表达式的vim方言;查看help pattern了解详情。

答案 1 :(得分:12)

使用默认的vim设置,将其添加到文件的顶部以让vim选择文件类型:

/* vim: set filetype=cpp: */

如果您使用其他语言,请相应调整,例如:

# vim: set filetype=python:

modeline与模型澄清

在答案中,https://stackoverflow.com/a/10584645

set modeline=5

应该是:

set modelines=5

请参阅文档:https://stackoverflow.com/a/10584645。具体来说, modeline 是一个布尔启用标志,默认情况下为http://vimdoc.sourceforge.net/htmldoc/options.html#%27modeline%27,而 modelines 采用整数参数(在任何情况下默认为5)设置如果 modeline 已启用http://vimdoc.sourceforge.net/htmldoc/options.html#%27modelines%27,则需要查看的行数。

OP对此没有任何兴趣,但我在这里添加它是为了从搜索到达的任何人提醒自己如何告诉vim文件顶部的文件类型。

答案 2 :(得分:0)

正在寻找解决方案,我也找到了这个答案,如果您想将特定文件扩展名设置为标准文件扩展名的同义词,这是完美的:

https://vi.stackexchange.com/a/5203/31568

例如,在我的例子中,我使用扩展 .icc 来存储 C++ 方法的内联定义,按照上面链接的答案,我可以将 icc 扩展分配给 {{1 }} 自定义 cpp 文件中的语言:

filetype.vim