2016-01-05 75 views
3

我想寫一個vim腳本獲取兩個命令之間的字符串。例如: \string{new strings},我想獲得新的字符串,如果它包含空行或空間如何獲得兩個命令之間的字符串在vim

:%s/\\string{[^}]*\n*[^}]*}/new/gec 
+2

不是很清楚你想要什麼。你能舉出一些你想在輸入中匹配的例子嗎? – Atri

+0

選擇\ string {}的大括號內的內容,即使有任何 空間或行 –

回答

2

您的要求就是不說清楚,但如果你想

獲得「新字符串」,如果它包含空行或空間

你也評論說:

選擇\字符串{} 即使有任何空間或線的大括號裏面的內容

這行做它,它是一個搜索命令,不:s

/\\string{\zs\_[^}]* 

如果你想要做\string{}之間的一些內容替換,你可以使用模式:

%s/\\string{\zs\_[^}]*\ze}/whatever/g 

需要注意的是,你也可以寫s/\\string{\zs\_[^}]*/whatever/g,該\ze}將確保右括號必須在那裏。不知道這是否需要。

對於\_[]細節,做一個:h \_[

+0

您的搜索命令也匹配「\ string {string}」,其中不包含空格或換行符。 –

+0

@MichaelFoukarakis所以要求是**只有在**? – Kent

+0

這不適合我回答。 –

0

使用此代碼

%s/\\string{[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}]*\n*[^}] 
*}/new/gec 
+0

我不認爲這是好的方式去... – Kent

+1

是的!我知道,但學習了一個新的代碼,謝謝你。如果搜索句子內部包含一對大括號,則有任何搜索方法,例如:\ string {new new {string} strings}。我需要「新的新字符串」字符串 – Zam

+0

我想你可以利用「貪婪」功能,只匹配'。*}' – Kent

相關問題