【问题标题】:Vim modifying a file if used with xxd如果与 xxd 一起使用,Vim 会修改文件
【发布时间】:2012-03-27 19:13:34
【问题描述】:

我试图了解 ID3 标签的工作原理,因此,在阅读了一些文档后,我开始查看一些 mp3 的原始数据。 Vim 通常是我选择的编辑器,所以,经过一番谷歌搜索后,我发现我可以使用 xxd 通过调用

来查看我的文件的十六进制表示
:%!xxd  

一切正常,但是当我用

把所有东西都放回原处时
:%!xxd -r  

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

这是为什么呢?我怎样才能防止它发生?我做错了吗?

【问题讨论】:

    标签: vim mp3 raw-data xxd


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 通过使用二进制选项一切正常。是的,我知道我可以使用 :q!退出,但主要想法是能够通过vim修改文件,所以我必须找到一种方法来保存文件如果必要的话。非常感谢!
    • @Odexios:不客气。我可能不应该提到:q! 命令,但你永远不知道,有时最明显的东西是最难找到的。
    【解决方案2】:

    您可能没有将文件加载为带有vim -b 的二进制文件。 IE。损害已经造成。

    xxd 在这里是一个红鲱鱼; xxd 后跟 xxd -r 透明的。它用于编辑二进制文件。 xxd 不添加任何字节;它会产生一个准确的 hexdump,它会被 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
    

    【讨论】:

    • 不知道!此外,您可以在文件已经打开之后(xxd 之前)set bin
    【解决方案3】:

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

    我经常手动删除它们(只删除两个字符而不是运行%!xxd -r

    可能是可以直接使用xxd 修复的问题。

    【讨论】:

      猜你喜欢
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 2021-10-26
      相关资源
      最近更新 更多