如何使vim突出显示任何{未跟随C ++样式注释或两个换行符?

时间:2010-08-20 16:27:16

标签: regex vim regex-negation

我想为任何不遵循其中一种模式的开括号创建匹配模式:

  1. {\n\n
  2. {\s*\/\/.*\n\(\s*\/\/.*\)\?\n
  3. 更普遍的问题是突出显示工作时违反编码规范的行为,这会在{

    之后强制执行空白行

    澄清,我正在寻找这样的代码,如下所示:

    if (foo) {
        this_is_bad____no_blank_line_above();
    } else {this_is_worse();}
    
    while (1) {  //This comment is allowed
                 //This one too
        theres_nothing_wrong_with_this();
    }
    
    if (foo) {
        ....//<-- Ideally we could mark this as bad, due to the spaces here
        otherwise_perfectly_good();
    }
    

    我真正需要的是:{\(\n\n\|\s*\/\/.*\n\(\s*\/\/.*\)\?\n\)\!

    构成符号\!表示“与这两个选项中的任何一个都不匹配”。我看到了一种为单个字符执行此操作的方法,但不是更长的字符串。

2 个答案:

答案 0 :(得分:6)

找到它:

我在寻找\@!

记录在:h /\@!

{\(\n\n\|\s*\/\/.*\n\(\s*\/\/.*\)\?\n\)\@!

答案 1 :(得分:1)

将以下内容添加到.vimrc文件的末尾:

:highlight InvalidStyle ctermbg=red guibg=red ctermfg=black guifg=black
:match InvalidStyle /{\s*[^\t \/]\+.*$/

第一行定义了一个新的高亮样式(红色为黑色),下一行试图找到任何花括号,其后面有内容而不是注释,并在其上应用突出显示。