Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
映射Vim命令,然后进行替换_Vim - Fatal编程技术网

映射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?