映射Vim命令,然后进行替换
我将使用以下方法对当前段落进行换行,然后删除双空格:映射Vim命令,然后进行替换,vim,Vim,我将使用以下方法对当前段落进行换行,然后删除双空格: nnoremap Q gqap :s/ / /g<cr> nnoremap Q gqap:s///g 但是当我执行它时,我得到了一个找不到的模式,这很奇怪,因为如果我单独执行它,它会工作::s///g+Enter 有什么问题吗?映射本身看起来很好;我想问题在于:s只在当前行上工作,而在重新格式化后,文本可能会分布在多行上。您可以通过为:substitute寻址上次更改的范围(:'[,'])来修复此问题。由于不一定有多个空格(
nnoremap Q gqap :s/ / /g<cr>
nnoremap Q gqap:s///g
但是当我执行它时,我得到了一个找不到的模式,这很奇怪,因为如果我单独执行它,它会工作::s///g
+Enter
有什么问题吗?映射本身看起来很好;我想问题在于
:s
只在当前行上工作,而在重新格式化后,文本可能会分布在多行上。您可以通过为:substitute
寻址上次更改的范围(:'[,']
)来修复此问题。由于不一定有多个空格(最好由\+
匹配,以匹配多于2个空格),因此可以使用/e
标志抑制错误:
:nnoremap Q gqap:'[,']s/ \+/ /ge<cr>
:nnoremap Q gqap:'[,']s/\+//ge
是否可能因为nnoremap是非递归的,所以它没有评估gqap?