Vim 高亮显示仅在第一个选项卡/窗口中工作

Vim 高亮显示仅在第一个选项卡/窗口中工作,vim,Vim,我的.vimrc文件中有以下行: " Highlight macros highligh Macro cterm=bold match Macro /\v(\/\/[^\n]*|\/\*(\_[^*]|\*\_[^/])*)@<!<[A-Z_]{2,}>/ 突出显示宏 高亮度宏字符m=粗体 匹配宏/\v(\/\/[^\n]*\/\*(\\\\[^*]\*\\\\\\\\[^/])*)@/ 基本上,它强调了不在C++注释中的大写文本(例如,我正在处理的代码库中的宏)。这很好,

我的
.vimrc
文件中有以下行:

" Highlight macros
highligh Macro cterm=bold
match Macro /\v(\/\/[^\n]*|\/\*(\_[^*]|\*\_[^/])*)@<!<[A-Z_]{2,}>/
突出显示宏 高亮度宏字符m=粗体 匹配宏/\v(\/\/[^\n]*\/\*(\\\\[^*]\*\\\\\\\\[^/])*)@/
基本上,它强调了不在C++注释中的大写文本(例如,我正在处理的代码库中的宏)。这很好,但是它有时只工作。如果我使用“代码> vim MyFrase.CPP < /代码>打开文件,那么它就会出现,但是当我使用<代码>打开Tabe Atdio.CPP < /Cube >时,新文件中不会出现突出显示。(但仍保留在旧选项卡中)。

您需要使用自动命令将宏匹配与cpp文件关联

highlight Macro cterm=bold
au BufNewFile, BufRead {*.cpp,*.hpp,*.ipp} match Macro /\v(\/\/[^\n]*|\/\*(\_[^*]|\*\_[^/])*)@<!<[A-Z_]{2,}>/
高亮显示宏字符m=bold
au BufNewFile,BufRead{*.cpp,*.hpp,*.ipp}匹配宏/\v(\/\/[^\n]*\\/\*(\\\\\[^*]\*\\\\\\\\[^/])*)@/
这样,每次打开或创建.cpp、.hpp或.ipp文件时,匹配项都将生效


您还可以将该模式更改为“
*。”pp
”,除非您希望使用其他不需要匹配的.xpp变体。

替代BufNewFile、BufRead的替代解决方案

highligh Macro cterm=bold
au filetype cpp match Macro /\v(\/\/[^\n]*|\/\*(\_[^*]|\*\_[^/])*)@<!<[A-Z_]{2,}>/

好的,谢谢:)你能展示一下我将如何修改它来为所有的
.cpp
.hpp
.ipp
文件执行吗?你应该可以在那里添加其他类型的文件:au BufNewFile,BufRead*.cpp,*.hpp,*.ipp…@Jay我已经将它添加到了我的
.vimrc
中,但它似乎没有任何效果(无论是否有新窗口,均不突出显示)。它对您的设置有效吗?@Jason是的,这种方法对我有效。我使用它来验证一个非常简单的模式。您使用的是Vim还是GVim?嗯,它对第一个窗口有效,但对其他窗口无效,就像原始代码一样。如果您打开一个文件,然后运行
:vsp otherfile.hpp
,它对您有效吗?
" C++
au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp
if has("fname_case")
  au BufNewFile,BufRead *.C,*.H setf cpp
endif