繁体   English   中英

我可以让 vim 在没有扩展的 C++ 头文件上做语法高亮显示吗?

[英]Can I make vim do syntax highlighting on C++ headers that don't have extensions?

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

您可以使用modeline功能这一点。 模式行允许您从文件的前几行/最后几行的注释中设置某些选项。

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

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

/* vim: set ft=cpp: */

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

它只有在启用了模式行时才有效。 在正常情况下,它应该是默认的。 要确保它已启用,或更改检测到的区域的大小,请在.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以获取详细信息。

使用默认的 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 具体而言,模式行是一个布尔使能标志是在默认情况下http://vimdoc.sourceforge.net/htmldoc/options.html#%27modeline%27 ,和模式行取一个整数参数(缺省值为5在任何情况下),该套在模式行是否启用来看待的行数http://vimdoc.sourceforge.net/htmldoc/options.html#%27modelines%27

OP 对这些都不感兴趣,但我将它添加到此处,供任何搜索到的人使用,以提醒自己如何告诉 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM