我有一个带有退格字符的日志文件(^ H).我正在查看Vim中的文件,很难看到发生了什么.
理想情况下,我希望能够"应用"给定行/范围内的所有^ H,以便我可以看到最终结果.
我宁愿在Vim中逐行进行此操作,但转换整个文件的解决方案总比没有好.
打开"粘贴"选项(使用:set paste
),然后按下dd i
要应用退格键的每一行.如果删除多行甚至整个文件,这也有效.
这里的关键是你
在插入模式下使用'输出'寄存器1的内容(你删除的行刚被放置),'paste'选项阻止Vim使用任何映射或缩写.
我试着记住我之前用来"应用"退格的命令,然后我记得它:go -b - 这里是联机帮助页.(它更多来自BSD或者更多来自AT&T UNIX,如联机帮助页所示,所以如果你在Linux上,你可能需要在bsdmainutils中安装一个额外的软件包.)
简单的答案:
:%s/[^^H]^H//g
其中^^ H是:
字面^字符
Ctrl-V Ctrl-H
并重复几次(直到vim会告诉你没有替换
如果你想要不重复,你不介意使用%!perl:
%!perl -0pe 's{([^\x08]+)(\x08+)}{substr$1,0,-length$2}eg'
所有字符都是字面的 - 即您不必在上面的任何地方执行ctrl-v ...
应该在大多数情况下工作.