Vim中如何反转括号内字符串?示例:{1,2,3,4,5}→{5,4,3,2,1}
嘿,在Vim里反转括号内的字符串其实有不少高效的玩法,我平时处理这类需求常用这几种方法,分情况给你唠唠:
一、通用手动操作法(适用于任意括号类型)
不管是{}、()还是[],都可以用这套流程快速搞定:
- 定位括号范围:把光标放在任意一个括号(左或右)上,按下
%,Vim会自动跳转到对应的配对括号,帮你确认范围是否正确。 - 选中括号内内容:按下
vi{(如果是大括号)、vi((小括号)或者vi[(中括号),这时候括号内的所有内容(比如1,2,3,4,5)就被选中了(注意不会选中括号本身)。 - 执行反转:
- 方法A:用Vim内置函数反转。选中后输入
:s/\(.*\)/\=reverse(submatch(1))/,回车即可。这个命令的原理是把选中的内容(.*匹配所有)用reverse()函数反转后替换回去。 - 方法B:调用系统命令反转。选中后按下
!rev,回车。rev是大多数Unix-like系统自带的字符反转命令,速度很快。
- 方法A:用Vim内置函数反转。选中后输入
举个你提到的例子:{1,2,3,4,5}
- 光标移到
{上,按vi{选中1,2,3,4,5 - 输入
:s/\(.*\)/\=reverse(submatch(1))/回车,就会变成{5,4,3,2,1}
二、针对特定括号的一键快捷法
如果你经常需要反转某类括号(比如大括号)内的内容,可以自定义一个快捷键,省得每次重复输入命令:
- 打开你的
~/.vimrc(Windows系统是_vimrc) - 添加一行映射:
这里nnoremap <leader>r vi{:s/\(.*\)/\=reverse(submatch(1))/<CR><leader>默认是反斜杠\,所以以后只要把光标放在大括号内或括号上,按下\r就能一键完成反转。如果要适配其他括号,把vi{改成vi(或vi[就行。
小提示:处理嵌套括号
如果遇到嵌套括号(比如{a,{b,c,d},e}),想要反转最外层的内容,只要把光标移到最外层括号上,按vi{就能正确选中外层括号内的所有内容;如果要反转内层,就把光标移到内层括号上再用vi{即可。
内容的提问来源于stack exchange,提问作者Ray Hua Wu
相关产品推荐
相关产品推荐

