You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vim映射中花括号去空格双替换命令仅执行第一个的问题

问题原因与解决方法

错误原因

你在映射里使用的|没有转义,Vim会把它当作当前命令的结束标记,只执行第一个替换命令:%s/{ {/{{/g,剩下的%s/} }/}}/g不会被触发执行。

在Vim命令行中直接输入时,|可以正常作为命令分隔符,但在映射、缩写或者:execute这类场景下,|需要转义为\|才能生效。

修正后的映射

把映射里的|替换为\|即可:

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

更高效的优化方案

你可以用单个正则替换命令同时处理左右花括号的空格问题,减少命令执行次数:

noremap <leader>cb :%s/\v\{ \{\| \} \}/\=submatch(0) =~# '\{' ? '{{' : '}}'/g <CR>

或者用更直观的简化写法(借助Vim的very magic模式简化正则):

noremap <leader>cb :%s/\v(\{)\s+(\{)|\s+(\})\s+(\})/\1\2\3\4/g <CR>

内容的提问来源于stack exchange,提问作者greg hor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:45:42