2015-07-10 25 views
2

捕獲組在一些文字,我需要找到這可能是followning之一向引用在VIM

foo#foo%foo 
foo#foo%bar 
foo#bar%foo 
foo#bar%bar 
bar#foo%foo 
bar#foo%bar 
bar#bar%foo 
bar#bar%bar 

一個字符串我可以寫正則表達式匹配這樣

/\(foo\|bar\)#\(foo\|bar\)%\(foo\|bar\) 

工作正常。我想避免在匹配器中重複捕獲組。

如果我喜歡寫東西

/\(foo\|bar\)#\1%\1 

它只是首輪比賽,我在一開始提到的最後一個可能的字符串。

問:我可以參考前一個捕獲組本身,而不是之前的匹配嗎?

+2

不,這不是多麼正則表達式的工作。 – lcd047

+3

@ lcd047:有許多正則表達式方言。這不是Vim正則表達式的工作方式。你可以在Oniguruma(Ruby的正則表達式引擎)中做到這一點,例如([rubular](http://rubular.com/r/DR9vxPA3cv)) – Amadan

+0

@Amadan你也可以用[perl regexps](https:// regex101.com/r/aD2cM0/1),以及其他許多人。不過,我相信OP的問題是關於Vim的。在帖子的標題中提到了Vim,這使得它很難錯過。是否有任何特別的理由從我的回答中推斷出我指的是Vim正則表達式的其他任何內容? – lcd047

回答

1

我完全想要創建和重用子模式並重用它們,如@Amadan和@ lcd047 alludedto但是Vim不支持我知道的這種行爲。

作爲替代方案,您可以在編輯模式時使用<c-f>以打開command-line-window。在此窗口中,您可以使用正常的Vim命令編輯模式,例如daw,ct)等。一旦你完成,你可以按<cr>並運行搜索/命令。

有關於此的一個不錯的Vimcast情節:Refining search patterns with the command-line window

如需更多幫助,請參見:

:h command-line-window 
:h q/ 
:h c_Ctrl-f 
+0

是的,命令行窗口是一個非常有用的功能,應該經常提到它。在附註中,'q?'打開向後搜索的窗口,'q:'打開一個用於編輯Ex命令的窗口。 – lcd047