2010-09-09 25 views
2

我執行以下使用vimgrep搜索(在vim(!))......我使用vimgrep搜索不是爲了找到我的代碼布爾變量initialisations表現爲我所期望的

​​3210

。它成功返回所有的bool初始化,例如

bool result1 = false; 

bool result2=true; 

但它還返回其他行,其中bool被分配(未初始化),例如,

result = true; 

(即,即使在行的開始處未找到布爾,它也會返回行)。

如果有人能告訴我爲什麼它匹配的代碼在行的開頭沒有「bool」類型說明符,我將不勝感激。

非常感謝,

Steve。

回答

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

你有一些問題,兩者都標明:

  1. Vim使用\(...\)到原子團,不(...)看起來像是SO解析器問題(\(沒有附帶backtics產生()。
  2. 你應該有\|在括號內:\(false\|true\),或者它將把它當作«既找不到,其中布爾變量被初始化爲假(^\s*bool\s+\i+\s*=\s*\(false\)部分)線或含有true線後跟一個分號在一行的末尾( \(true\);\s*$部分)»。
+0

感謝您的回答 - 第二部分已經明確了 - 我忘記了\ \ \ \的高優先級。運營商。 注意。 \\(\\(false \\)\ | \\(true \\)\\)也適用。將假的和真的陳述放在括號中似乎對我更爲明顯,因爲\\(true \\)和\\(false \\)都是原子,我希望其中的一個匹配。但是,如果\\(false \ | true \\)也起作用(它確實 - 我已經檢查過了!)那麼這是否意味着錯誤和真實對自己也是原子?如果是這樣,然後我將如何寫一個匹配的表達式: falserue和falstrue – sdrjones 2010-09-10 07:38:39

+0

我找到了自己的答案 -/fals \\(e \ | t \\)rue /會匹配falserue和falstrue!我認爲我的困惑是誤解\ \的優先次序的另一個結果在vim模式。 – sdrjones 2010-09-10 08:25:24

相關問題