Мой поиск по vimgrep не ведет себя так, как я ожидал - PullRequest
2 голосов
/ 09 сентября 2010

Я выполняю следующий поиск в vimgrep (в vim (!)) ....

:vimgrep /^\s*bool\s\+\i\+\s*=\s*\(false\)\|\(true\);\s*$/      *[files....]*

для того, чтобы найти инициализации переменных bool в моем коде. Он успешно возвращает все инициализации bool, например,

bool result1 = false;

bool result2=true;

, но также возвращает другие строки, в которых назначено значение bool (не инициализировано), например,

result = true;

(т.е. он возвращает строки, даже если bool не найден в начале строки).

Буду признателен, если кто-нибудь скажет мне, почему он соответствует коду, в котором нет спецификатора типа "bool" в начале строки.

Большое спасибо,

Стив.

1 Ответ

7 голосов
/ 09 сентября 2010
:vimgrep /^\s*bool\s+\i+\s*=\s*(false)\|(true);\s*$/ [files....]
                                 ^     ^^^^   ^

У вас есть некоторые проблемы, обе помечены:

  1. Vim использует \(...\) для группировки атомов, а не (...). Похоже, это был SOПроблема синтаксического анализатора (\(, не заключенная в обратные значения, приводит к ().
  2. Вы должны иметь \| в круглых скобках: \(false\|true\), или он будет восприниматься как «найти либо строки, где логическая переменнаяинициализируется как false (^\s*bool\s+\i+\s*=\s*\(false\) part) или строка, содержащая true, за которой следует точка с запятой в конце строки (\(true\);\s*$ part) ».
...