[英]Can I make vim do syntax highlighting on C++ headers that don't have extensions?
我有一个项目,其中包含一堆遵循标准 C++ 头文件命名约定的 C++ 头文件; 也就是说,一个名为 Foo 的类将在名为Foo
的文件中声明,而不是Foo.h
或Foo.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.