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

Jas*_*n R 15 c++ vim syntax-highlighting editor

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

Ama*_*dan 15

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

这使它成为设置编码指南,折叠参数的好地方.出于安全原因,无法设置某些选项.有关更多信息,请参阅文档.

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

/* vim: setlocal ft=cpp: */
Run Code Online (Sandbox Code Playgroud)

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

它仅在启用了模式行时才有效.在正常情况下,它应该是默认的.要确保它已启用,或者要更改其中检测到的区域的大小,请在以下位置设置modeline选项.vimrc:

set modeline=5
Run Code Online (Sandbox Code Playgroud)

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

在模式行内部,setlocal意味着为加载文件的缓冲区设置选项.该ft选项也称为filetype语法高亮语言.该值cpp是C++文件使用的值.

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

au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif
Run Code Online (Sandbox Code Playgroud)

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


ahc*_*cox 12

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

/* vim: set filetype=cpp: */
Run Code Online (Sandbox Code Playgroud)

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

# vim: set filetype=python:
Run Code Online (Sandbox Code Playgroud)

modeline与模型澄清

在答案中,/sf/answers/740925181/,

set modeline=5
Run Code Online (Sandbox Code Playgroud)

应该:

set modelines=5
Run Code Online (Sandbox Code Playgroud)

请参阅文档: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文件顶部的文件类型.