vimrc中或运算符的异常行为

vimrc中或运算符的异常行为,vim,grep,Vim,Grep,我通常在vim中执行如下搜索和替换: :%s/\([\.!?]\|[\.!?]"\)\s\s/\1text /g 因此,它会查找句号、感叹号、问号或以上任何一种,后跟引号和两个空格。它很好用 但当我在我的vimrc中这样映射时 map <F4> :%s/\([\.!?]\|[\.!?]"\)\s\s/\1text /g<CR> 出于某种原因,它正在删除管道前的反斜杠,我不知道为什么。有人知道如何纠正这种行为吗?在:mapping中,管道字符是特殊的。改用: :nore

我通常在vim中执行如下搜索和替换:

:%s/\([\.!?]\|[\.!?]"\)\s\s/\1text /g
因此,它会查找句号、感叹号、问号或以上任何一种,后跟引号和两个空格。它很好用

但当我在我的vimrc中这样映射时

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

出于某种原因,它正在删除管道前的反斜杠,我不知道为什么。有人知道如何纠正这种行为吗?

:map
ping中,管道字符是特殊的。改用

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

此外,它使映射不受重新映射和递归的影响。

:map
ping中,管道字符是特殊的。请改用

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

也,;它使映射不受重新映射和递归的影响。

也感谢您提供有关递归的信息。帮我清理vimrc文件。让我们清理正则表达式!匹配的组不需要替换(即
\\\\\
),相反,您可以通过
\=
进行操作<代码>\=匹配0或1次,尽可能多(想想Perl的
)。这使得替换:
%s/\([\.!?]“\=\)\s\s/\1text/g
。因为我们没有使用管道符号,
就不需要了。谢谢,我总是想不出明显的答案。也感谢关于递归的信息。帮助我清理了vimrc文件。让我们清理那个正则表达式吧!匹配的组不需要替换(这个
\\\\
)相反,你可以通过
\=
\=
匹配0到1次,尽可能多的匹配(想想Perl的
)。这使得替换:
%s/\([\.!?]”“\=\)\s\s/\1text/g
。因为我们不使用管道符号,
。谢谢,我总是想不出这个显而易见的答案。