Foo
而不是 Foo.h
或 Foo.hh
的文件中声明。是否有一种好的方法来配置 vim 仅对这些文件进行语法高亮?稍微不那么理想的备选方案是启用所有没有扩展名的文件的 C++ 样式高亮。我不确定是否有更复杂的方法来检测文件类型,而不仅仅依赖于其扩展名。Foo
而不是 Foo.h
或 Foo.hh
的文件中声明。是否有一种好的方法来配置 vim 仅对这些文件进行语法高亮?稍微不那么理想的备选方案是启用所有没有扩展名的文件的 C++ 样式高亮。我不确定是否有更复杂的方法来检测文件类型,而不仅仅依赖于其扩展名。你可以使用 modeline
功能来实现这个目的。Modelines 允许你在文件的开头/结尾的注释中设置某些选项。
这使得它成为设置编码规范、折叠参数的绝佳位置。出于安全原因,有些选项无法设置。更多信息请参见文档。
将以下内容放置在文件顶部或底部:
/* vim: set ft=cpp: */
编辑: 在评论的促使下,提供更多细节 :) :
只有在启用modeline时它才有效。在正常情况下,默认情况下应该启用它。为确保它已启用,或更改检测区域的大小,请在您的.vimrc
中设置modeline
选项:
set modelines=5
这将确保类似上面引用的行在每个文件的前五行或后五行中被检测到。
在模型行内,setlocal
表示为加载文件的缓冲区设置选项。 ft
选项,也称为 filetype
,是确定语法突出显示语言的选项。 值 cpp
是 C++ 文件使用的选项。
编辑2:如果您可以识别一个魔术模式,则可以在没有模型线的情况下进行更多的工作:
au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif
意思:每次打开一个文件,检查是否包含 "MagicPattern"
。如果包含,则将其视为 C++ 代码。模式参数使用 vim 正则表达式方言,请参考 help pattern
获取详细信息。
modeline
支持,才能使其正常工作。 - seheroot
身份编码;而且问题是关于vim的;所以除非OP明确将其关闭,否则他应该没事。 :P - Amadanau BufNewFile,BufRead * if &syntax == '' | set syntax=cpp | endif
,它能将未设置语法的文件设置为C++。 - user2023370使用默认的vim设置,在文件顶部添加以下内容,使vim能够识别文件类型:
/* vim: set filetype=cpp: */
如果您使用的是其他语言,请相应地进行调整,例如:
# vim: set filetype=python:
在这个回答中,https://dev59.com/32kv5IYBdhLWcg3wdQhT#10584645,
set modeline=5
应该是:
set modelines=5
请参阅文档:https://dev59.com/32kv5IYBdhLWcg3wdQhT#10584645。具体来说,modeline是一个布尔类型的启用标志,默认情况下为开启状态http://vimdoc.sourceforge.net/htmldoc/options.html#%27modeline%27,而modelines接受一个整数参数(在任何情况下默认为5),用于设置当modeline启用时要查看的行数 http://vimdoc.sourceforge.net/htmldoc/options.html#%27modelines%27。
虽然这些内容对问题提出者并不感兴趣,但我在这里添加这些信息,以便于那些通过搜索到达此处的人可以自我提醒如何在文件顶部告诉vim文件类型。
https://vi.stackexchange.com/a/5203/31568
例如,在我的情况下,我使用扩展名.icc
来存储C++方法的内联定义。根据上面链接的答案,我可以在自定义的filetype.vim
文件中将icc
扩展名分配给cpp
语言。" 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
:set syntax=cpp
可以使当前文件强制使用 C++ 语法高亮。大部分人来到这里都是为了寻求这个解决方案,而不是每个项目都要单独设置。 - Sdra