2013-03-09 85 views
1

開始我使用Vim腳本的VIM substitute功能,我想替代所有字符後,第一初始括號中的所有字符。例如,假設我有一個如下所示的字符串:Vim的比賽,除了在字符串

]]]] foo ] bar ] baz 

我想刪除括號後的所有內容。我怎麼能匹配這個?請注意,我想在之後刪除最近的括號,但不是字符串開頭的那些。在該執行後,線路只應的四個括號:

]]]] 
+0

給出的例子的結果是什麼?我不明白你的描述。 – Kent 2013-03-09 19:58:29

回答

2

試試這個:

:echo substitute("]]]] foo ] bar ] baz",'\(^]\+\).*','\1','g') 

在這裏,它回聲]]]]

+0

只有一個問題:如果字符串的開頭沒有括號,則不起作用。在這種情況下,它應該產生一個空字符串。 – 2013-03-09 20:08:04

+1

@JakeKing我爲你的例子寫了一行。你可以把'\ +'改成'*',然後重試。 – Kent 2013-03-09 20:16:27

1

ex表達應該工作:

:%S/^] + \ S * //

:%s/\(^\]*\).*/\1/ 
+0

這是我想要的。我想刪除所有*,除了*括號外。 – 2013-03-09 19:58:17

+0

@JakeKing:對不起,我編輯了答案以嘗試修復它。 – Birei 2013-03-09 20:00:33

0

您可以匹配字符串開頭的所有右括號,直到使用空格爲止

(^[]]*\s).+$ 

$1替換(在vim可能\1

+0

我想匹配任何數目的緊挨括號,包括0. – 2013-03-09 19:56:54

+0

@JakeKing ok,修改 – VladL 2013-03-09 19:58:03

+0

請閱讀我對其他答案的評論。我想刪除一切*其他*不是括號本身。 – 2013-03-09 19:58:43