不寻常的行为符合或的vimrc

问题描述:

运营商通常我做搜索和VIM看起来像这样的替换:不寻常的行为符合或的vimrc

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

所以看起来为任何一个时期,感叹号,问号,或任何以上接着是一个报价和两个空格。它工作正常。

但是,当我在我的vimrc映射这个像这样

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

,然后按F4我收到此错误信息:

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

据管之前去除反斜线出于某种原因,并我不知道为什么。有谁知道如何纠正这种行为?

: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