Как сделать так, чтобы vim выделил любой {не сопровождаемый комментариями в стиле C ++ или двумя символами новой строки? - PullRequest
4 голосов
/ 20 августа 2010

Я хотел бы создать шаблон сопоставления для любой открывающей скобки, которая не следует ни одному из следующих шаблонов:

  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 ]

6 голосов
/ 20 августа 2010

Нашел:

Я искал \@!

Документально: :h /\@!

{\(\n\n\|\s*\/\/.*\n\(\s*\/\/.*\)\?\n\)\@!
1 голос
/ 20 августа 2010

Добавьте следующее в конец вашего файла .vimrc:

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

Первая строка определяет новый стиль выделения (черный на красном), а следующая строка пытается найти любые фигурные скобки, которые имеют контент после них, которые не являются комментариями, и применяет к ним подсветку.

...