如何在Vim中实现文本行内0和1字符的互相替换?
Vim实现二进制位01互换的方法
下面是几种常用的实现方案,都可以直接处理你的需求:
方案1:调用外部tr命令(写法最简单)
如果你当前光标就在要处理的行,直接输入以下命令回车即可:
:.!tr 01 10
- 其中
.代表仅处理当前行,如果你要处理选中的多行,选中后直接输入!tr 01 10回车即可。
方案2:使用Vim内置替换命令(无需依赖外部工具)
通过临时中间字符实现互换,当前行执行命令:
:s/0/x/g | s/1/0/g | s/x/1/g
- 执行逻辑:先把所有0替换为临时字符x,再把所有1替换为0,最后把临时字符x替换为1,全程使用Vim内置能力,不需要调用外部程序。
- 如果要全局替换所有行的01,把命令开头的
s改成%s即可。
方案3:使用表达式替换(不需要临时字符)
利用Vim替换的表达式功能直接判断转换:
:s/\([01]\)/\=submatch(1) == '0' ? '1' : '0'/g
- 该方法会匹配每一个0或者1,直接判断当前匹配内容后输出相反值,不需要引入中间替换字符。
你给出的示例字符串0110101010,使用上面任意一种方案处理后,都可以直接得到目标结果1001010101。
内容的提问来源于stack exchange,提问作者KarlsD
相关产品推荐
相关产品推荐

