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