2011-05-04 47 views
-1

在vim中,如果我試圖匹配跨行的表達式,以給定的字符串開頭並以另一個字符串結束 - 包含第二個字符串 - 我應該怎麼做?在vim我如何使正則表達式匹配?

例如,在試圖匹配:

output = double('output').as_null_object 
game = Game.new(output) 

我一直在使用/output\_.\{-}output試過),但這不包括最後的「輸出)」,在搜索結果。如果我然後使用c/output\_.\{-}output)更改搜索結果,我將留下一個懸掛輸出)。

另一個更簡單的例子是試圖在文本中找到「January」,包括引號。

我是新來vim和正則表達式,所以原諒我,如果這個問題似乎微不足道。我搜索了一下,找不到答案。

如果您可以命名該代碼段,則可獲得ps獎勵積分!

+0

使用預覽:您已經缺少反斜槓。 – ZyX 2011-05-05 17:22:27

回答

1

你的問題很可能是在默認情況下是/regex運動帶您到本場比賽的開始,而你希望它帶你到最後。解決方案是在regex之後加入/e:嘗試c/output.\{-}output)/e<CR>,請參閱:h search-offset以獲取更多信息。或者您可以使用\zs將比賽的開始移動到其他地方:c/output.\{-}output)\zs<CR>:如果您想匹配中間的某個地方,這會更有用。

-1

在單詞之間的中斷處使用_s。所以,/ phrase1_sphrase2

+0

在發佈前使用預覽。 – ZyX 2011-05-05 17:29:45

1

給出一個包含

STUFF 

output = double('output').as_null_object 
game = Game.new(output) 

OTHER STUFF 

output = double('output').as_null_object 
game = Game.new(output) 

CLOSING STUFF 

當我做:%s/output\_.\{-}output)/<START>\0<MIDDLE>\0<END>/,我得到含

STUFF 

<START>output = double('output').as_null_object 
game = Game.new(output)<MIDDLE>output = double('output').as_null_object 
game = Game.new(output)<END> 

OTHER STUFF 

<START>output = double('output').as_null_object 
game = Game.new(output)<MIDDLE>output = double('output').as_null_object 
game = Game.new(output)<END> 

CLOSING STUFF 

文檔但是,如果不是我把我的光標在第一output文件,然後做c/output\_.\{-}output), 我發現自己在一切插入模式下,直到output)刪除。

原因是c/刪除了所有東西直到下一個匹配,它不會刪除下一個匹配,如您所懷疑的那樣。 c/使用正則表達式作爲起始位置,而不是持續時間。

在這種情況下,下一場比賽是output)...OTHER STUFF...output=...output)