不寻常的行为符合或的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
;它使映射免于重映射和递归。
+1在一个答案两个很好的提示!会+2 – Kent 2013-03-06 14:38:02
感谢您的递归信息。帮助我清理vimrc文件。 – thequerist 2013-03-06 14:40:13
让我们清理那个正则表达式!匹配组不需要交替('\ |'),您可以使用'\ ='来获得。 '\ ='匹配0或1次,尽可能多(考虑Perl的'?')。这使得替换为:'%s/\([\。!?]“\ = \)\ s \ s/\ 1text/g'因为我们没有使用管道符号,所以不需要'' –
2013-03-06 14:46:35