Vim修改文件(如果与xxd一起使用)



我试图了解ID3标签是如何工作的,所以,在阅读了一些文档后,我开始查看一些mp3的原始数据。Vim通常是我选择的编辑器,所以,经过一些谷歌搜索,我发现我可以使用xxd通过调用来查看我的文件的十六进制表示

:%!xxd  

一切都很好,但当我用把一切恢复正常时

:%!xxd -r  

然后退出,我发现文件被修改了;vlc不能再播放了,diff告诉我文件不一样。我以为我无意中修改了一些东西,但进一步的实验表明,即使打开文件并使用xxd,然后使用xxd-r,也会以某种方式更改文件。

为什么?我该如何防止这种情况发生?我做错什么了吗?

显然,如果您不打算对文件进行任何更改,则可以使用:q!退出vim

正如@RunHolt所指出的,vimxxd可以更改二进制文件。例如将LF更改为CRLF或在文件末尾添加LF字符。

您可以通过设置binary选项来防止这种情况:

在将文件加载到缓冲区之前,将vim启动为:vim -b filename或键入:set binary

在windows二进制文件(不确定其他平台)上,:%!xxd将文件结束标记放在最后两个字节(0x0d,0x0a)中。由于某些原因,%!xxd -r没有删除它们。

我经常手动删除它们(只需删除两个字符,然后运行%!xxd -r

可能是可以用xxd直接修复的东西。

您可能没有使用vim -b将文件加载为二进制文件。也就是说,损害已经造成。

xxd在这里是转移注意力;xxdxxd -r是透明的。它用于编辑二进制文件。CCD_ 17不添加任何字节;它会产生一个精确的六进制转储,xxd -r会精确地反转该转储(除非您损坏了它)。

仅用于查看,您可以从shell运行xxd

$ xxd binaryfile | vim -     # just use vim as a reader 

我已经用vim -b编辑了可执行文件,并通过xxd进行了过滤,然后通过xxd -r进行了过滤。他们跑得很好。

此外,xxd是Vim发行版附带的Vim特定程序。了解od可能对您有用,例如

od -tx1 file

最新更新