映射 Vim 命令后跟替换

Mapping a Vim command followed by a replacement

我正在使用以下内容将当前段落换行,然后删除双空格:

nnoremap Q gqap :s/  / /g<cr>

但是当我执行它时,我找不到模式,这很奇怪,因为如果我单独执行它,它会起作用::s/ / /g + Enter

可能是什么问题?

映射本身看起来不错;我想问题在于 :s 仅适用于 current 行,而在重新格式化后,文本可能分布在多行中。您可以通过解决 :substitute 的最后更改范围 (:'[,']) 来解决此问题。由于不一定有多个空格(更好地匹配 \+ 也匹配超过 2 个),您可以使用 /e 标志抑制错误:

:nnoremap Q gqap:'[,']s/ \+/ /ge<cr>