1

我通常在 vim 中进行搜索和替换,如下所示:

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

因此,它会查找句点、感叹号、问号或上述任何一种,后跟引号和两个空格。它工作正常。

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

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

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

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

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

4

1 回答 1

4

:mapping 中,管道字符是特殊的。改用<Bar>

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

此外,您应该使用:noremap; 它使映射不受重新映射和递归的影响。

于 2013-03-06T14:14:32.340 回答