我有一个项目,其中包含一堆遵循标准 C++ 头文件命名约定的 C++ 头文件;也就是说,一个名为 Foo 的类将在一个名为Foo
, not Foo.h
or的文件中声明Foo.hh
。有没有一种好方法可以将 vim 配置为仅对这些文件进行语法高亮显示?一个稍微不那么令人愉快的后备方案是为所有没有扩展名的文件启用 C++ 样式的突出显示。我不确定是否有更复杂的方法来检测文件的类型,而不是仅仅依靠它的扩展名。
3 回答
您可以为此使用该modeline
功能。模式允许您在文件的前几行/最后几行的注释中设置某些选项。
这使它成为设置编码指南和折叠参数的好地方。出于安全原因,某些选项无法设置。有关更多信息,请参阅文档。
把它放在文件的顶部或底部:
/* vim: set ft=cpp: */
编辑:更多细节,由评论提示:):
它仅在启用模式行时才有效。在正常情况下,它应该是默认的。要确保它已启用,或更改检测到的区域的大小,请modeline
在您的.vimrc
:
set modelines=5
将确保在每个文件的前五行或最后五行中检测到像上面引用的行。
在模式行内,setlocal
表示为加载文件的缓冲区设置选项。该ft
选项,也称为filetype
,是决定语法高亮语言的因素。该值cpp
是 C++ 文件使用的值。
编辑 2:没有模式行,如果你能识别一个神奇的模式,做更多的工作:
au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif
含义:每次打开文件时,检查是否"MagicPattern"
在其中。如果是,则将其视为 C++。模式参数是正则表达式的vim方言;检查help pattern
详情。
使用默认的 vim 设置,将其添加到文件顶部以让 vim 选择文件类型:
/* vim: set filetype=cpp: */
如果您使用其他语言,请进行相应调整,例如:
# vim: set filetype=python:
modeline 与 modelines 澄清
在答案中,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)设置如果启用了模式行,则要查看的行数http://vimdoc.sourceforge.net/htmldoc/options.html#%27modelines%27。
OP 对这些都不感兴趣,但我在此处添加它以供任何通过搜索到达的人提醒自己如何告诉 vim 文件顶部的文件类型。
寻找解决方案,我还找到了这个答案,如果您想将特定文件扩展名设置为标准文件扩展名的同义词,这是完美的:
https://vi.stackexchange.com/a/5203/31568
例如,在我的情况下,我使用扩展名.icc
来存储 C++ 方法的内联定义,并按照上面链接的答案,我可以将icc
扩展名分配给cpp
自定义filetype.vim
文件中的语言:
" My own filetype file
" where I define custom filetypes/extensions
"
if exists("did_load_filetypes")
finish
endif
augroup filetypedetect
au! BufRead,BufNewFile *.icc setfiletype cpp
augroup END