VIM使用单个Map删除连续大括号之间空格

rryofs0p  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(159)

我在Vim中处理一个jinja文件,由于某些原因,它的格式很差。我有很多变量在花括号中,花括号之间留有空格。例如:

this is my jinja variable { { foo } }

我想去掉花括号之间的多余空格。

This my jinja variable {{ foo }}

如果我在命令模式下链接两个替代命令,这就可以正常工作。

:%s/{ {/{{/g | %s/} }/}}/g

但是,如果我将替换命令 Package 在Mapnoremap <leader>cb :%s/{ {/{{/g | %s/} }/}}/g <CR>中,则只执行第一个替换命令,而不执行第二个。

This my jinja variable {{ foo } }

我做错了什么?

olhwl3o2

olhwl3o21#

您可以利用撷取群组,使用一个替代来完成此作业:

nnoremap <leader>cb :%s/{ {\(.*\)} }/{{\1}}/<CR>

如果在一行中有两次这样的模式,这并不是说会失败:

{ { hello } } ... { { world } }

因为它会变成:

{{ hello } } ... { { world}}

有人可能会沿着一个实际的解释,解释为什么你的方法不起作用,所以你可能不应该接受这个答案。

klsxnrf1

klsxnrf12#

由于|

noremap <leader>cb :%s/{ {/{{/g | %s/} }/}}/g <CR>
                                ^

您可以使用以下几种方法重写它:

noremap <leader>cb :%s/{ {/{{/g \| %s/} }/}}/g <CR>
noremap <leader>cb :%s/{ {/{{/g <bar> %s/} }/}}/g <CR>
etc.

请参阅:help map-bar
顺便说一句,:noremap包含了太多的模式,从长远来看,你可能会发现这是个问题。如果你想要一个普通的模式Map,请明确地说明它:

nnoremap <leader>cb :%s/{ {/{{/g <bar> %s/} }/}}/g <CR>

相关问题