2013-03-06 142 views
1

運營商通常我做搜索和VIM看起來像這樣的替換:不尋常的行爲符合或的vimrc

:%s/\([\.!?]\|[\.!?]"\)\s\s/\1text /g 

所以看起來爲任何一個時期,感嘆號,問號,或任何以上接着是一個報價和兩個空格。它工作正常。

但是,當我在我的vimrc映射這個像這樣

map <F4> :%s/\([\.!?]\|[\.!?]"\)\s\s/\1text /g<CR> 

,然後按F4我收到此錯誤信息:

E486: Pattern not found: \([\.!?]|[\.!?]"\)\s\s 

據管之前去除反斜線出於某種原因,並我不知道爲什麼。有誰知道如何糾正這種行爲?

回答

3

:map ping中,管道字符是特殊的。使用<Bar>來代替:

:noremap <F4> :%s/\([\.!?]\<Bar>[\.!?]"\)\s\s/\1text /g<CR> 

而且,you should use :noremap;它使映射免於重映射和遞歸。

+0

+1在一個答案兩個很好的提示!會+2 – Kent 2013-03-06 14:38:02

+0

感謝您的遞歸信息。幫助我清理vimrc文件。 – thequerist 2013-03-06 14:40:13

+1

讓我們清理那個正則表達式!匹配組不需要交替('\ |'),您可以使用'\ ='來獲得。 '\ ='匹配0或1次,儘可能多(考慮Perl的'?')。這使得替換爲:'%s/\([\。!?]「\ = \)\ s \ s/\ 1text/g'因爲我們沒有使用管道符號,所以不需要'' – 2013-03-06 14:46:35