2015-12-26 34 views
1

比方說,我有這樣的緩衝液:VIM正則表達式多:搜索作品比賽()不

a 
b 
c 
(
1 
2 
3 
) 
@ 
# 
$ 

我想,在Vimscript中獲得括號內行的內容。

/(\n\(.\n\)*) 

正好突出顯示我想要的。但我沒有成功的東西,如得到這個:

let pattern = '(\n\(.\n\)*)' 
match(getline(1, '$'), pattern) 

我嘗試了很多東西,比如:

match(join(getline(1,'$'), '\n'), pattern) 

,即使是圖案雙引號,但沒有任何工程...任何想法 ?

(我的目標是沒有必要的,使這場比賽()的作品,但只是從一個緩衝區得到的結果爲vim腳本)

+1

也許,'讓模式= '(。\ n \(\ n \)*)''? –

+0

你是對的,編輯。 – Gaut

+0

它在我看來你正在尋找'(\ n \(。\ { - } \))''。 –

回答

3

與您的第一次嘗試(match(getline(1, '$'), pattern)),Vim試圖找到模式內線每行;因爲你的模式是多線的,它永遠不會匹配。

因此,您的第二次嘗試會朝正確的方向行進,因爲您嘗試連接線條,則該模式將有效地匹配...除非您使用'\n'作爲連接的膠水:此字符串被litterally替換爲反斜槓\後跟n字符。只需用雙引號替換單引號,然後將解析特殊字符。

所以,這個版本會更好地工作:

echo matchstr(join(getline(1,'$'), "\n"), pattern)