代码之家  ›  专栏  ›  技术社区  ›  jkerian

如何使VIM突出任何{不跟随C++风格的评论,或两个换行符?

  •  4
  • jkerian  · 技术社区  · 16 年前

    我想为任何不遵循以下模式之一的左大括号创建匹配模式:

    1. {\n\n
    2. {\s*\/\/.*\n\(\s*\/\/.*\)\?\n

    更常见的问题是,在工作中突出违反编码规范的行为,这将强制执行以下空白行 {

    澄清一下,我正在寻找这样的代码来捕获如下代码:

    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 回复  |  直到 14 年前
        1
  •  6
  •   Teun Zengerink Dhiraj Thakur    14 年前

    找到它:

    我在找 \@!

    记录在 :h /\@!

    {\(\n\n\|\s*\/\/.*\n\(\s*\/\/.*\)\?\n\)\@!
    
        2
  •  1
  •   dionyziz    16 年前

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

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

    第一行定义了一个新的突出显示样式(红色为黑色),下一行尝试查找后面有内容的大括号,这些内容不是注释,并将突出显示应用于它们。