我的vimgrep搜索不符合我的预期

sdr*_*nes 2 vim vimgrep

我正在执行以下vimgrep搜索(在vim(!)中)....

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

为了在我的代码中找到bool变量初始化.它成功返回所有bool初始化,例如

bool result1 = false;

bool result2=true;
Run Code Online (Sandbox Code Playgroud)

但它也会返回分配bool(未初始化)的其他行,例如

result = true;
Run Code Online (Sandbox Code Playgroud)

(即,即使在行的开头没有找到bool,它也会返回行).

如果有人能告诉我它为什么匹配代码,那么在行的开头没有"bool"类型说明符,我将不胜感激.

非常感谢,

史蒂夫.

ZyX*_*ZyX 7

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

你有一些问题,都有标记:

  1. Vim \(...\)用来分组原子,而不是(...).看起来这就是SO解析器问题(\(没有附带产生的反馈().
  2. 你应该\|在括号内:\(false\|true\),或者它将把它作为«找到一个布尔变量初始化为假(^\s*bool\s+\i+\s*=\s*\(false\)部分)的行或一行包含true后面跟着一个分号的行(\(true\);\s*$部分)».