用户工具

站点工具


vim:edit-binary

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

vim:edit-binary [2011/03/30 02:51] (当前版本)
行 1: 行 1:
 +====== 用VIM查看编辑二进制文件 ======
 +
 +vim可以很方便地编辑二进制文件,个人认为它比emacs的二进制编辑方式更好用。vim中二进制文件的编辑是先通过外部程序xxd来把文件dump成其二进制的文本形式,然后就可以按通常的编辑方式对文件进行编辑,编辑完成后再用xxd 转化为原来的形式即可。
 +
 +可分如下几步进行:
 +
 +(1) 首先以二进制方式编辑这个文件: ​   vim -b datafile
 +
 +(2) 现在用 xxd 把这个文件转换成十六进制:​ :%!xxd
 +
 +文本看起来像这样:​
 +<​code>​
 +0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;​..tt.+NI
 +0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,​.`.....b..4^.0
 +0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'​1."​.....i.59.
 +</​code>​
 +
 +现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。
 +修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。
 +
 +(3) 最后,用下面的命令把它转换回来:​ :%!xxd -r
 +
 +只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。
 +
 +xxd是linux的一个命令,vim可以通过"​!"​来调用外部命令,其功能就是进行十六进制的dump或者反之。
 +
 +===== VIM 编辑二进制文件 (vim手册载录) =====
 +
 +*23.4* ​ 二进制文件
 +
 +你可以用 Vim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读
 +取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,
 +其它的就跟原来那个一模一样。
 +
 +要保证 Vim 别把它那些聪明的窍门用错地方,启动 Vim 时加上 "​-b"​ 参数:
 +
 +<​code>​
 +vim -b datafile
 +</​code>​
 +
 +这个参数设定了 '​binary'​ 选项。其作用是排除所有的意外副作用。例如,'​textwidth'​
 +设为零,免得文本行给擅自排版了。并且,文件一律以 Unix 文件格式读取。
 +
 +二进制模式可以用来修改某程序的消息报文。小心别插入或删除任何字符,那会让程序运
 +行出问题。用 "​R"​ 命令进入替换模式。
 +
 +文件里的很多字符都是不可显示的。用 Hex 格式来显示它们的值:​
 +
 +<​code>​
 +:set display=uhex
 +</​code>​
 +
 +另外,也可以用命令 "​ga" ​ 来显示光标下的字符值。当光标位于一个 <Esc> 字符上时,
 +该命令的输出看起来就像这样:​
 +
 +<​code>​
 + <​^[> ​ 27, Hex 1b,  Octal 033 
 +</​code>​
 +
 +文件中也许没那么多换行符。你可以关闭 '​wrap'​ 选项来获得总览的效果:​
 +<​code>​
 +        :set nowrap
 +</​code>​
 +
 +==== 字节位置 ====
 +
 +
 +要发现你在文件中的当前字节位置,请用这个命令:​
 +<​code>​
 +g CTRL-G
 +</​code>​
 +其输出十分冗长:​
 +<​code>​
 +    Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 
 +</​code>​
 +最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 '​fileformat'​
 +选项导致换行符字节不同的影响。
 +
 +要移到文件中某个指定的字节,请用 "​go"​ 命令。例如,要移到字节 2345:
 +
 +<​code>​
 +2345go
 +</​code>​
 +
 +==== 使用 XXD ====
 +
 +
 +一个真正的二进制编辑器用两种方式来显示文本:​ 二进制和十六进制格式。你可以在 Vim
 +里通过转换程序 "​xxd"​ 来达到这效果。该程序是随 Vim 一起发布的。
 +
 +首先以二进制方式编辑这个文件:​
 +
 +<​code>​
 + vim -b datafile
 +</​code>​
 +现在用 xxd 把这个文件转换成十六进制:​
 +<​code>​
 +        :%!xxd
 +</​code>​
 +文本看起来像这样:​
 +<​code>​
 +        0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;​..tt.+NI ​
 +        0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,​.`.....b..4^.0 ​
 +        0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'​1."​.....i.59. ​
 +</​code>​
 +现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。
 +修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。
 +
 +最后,用下面的命令把它转换回来:​
 +
 +<​code>​
 +:%!xxd -r
 +</​code>​
 +
 +只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。
 +
 +欲知更多详情,参见 xxd 手册。
 +
 +
 +====== 参考 ======
 +  * [[http://​ad-research.appspot.com/​2009/​09/​20/​%E7%94%A8vim%E6%9F%A5%E7%9C%8B%E7%BC%96%E8%BE%91hex%E6%96%87%E4%BB%B6.html|用VIM查看编辑hex文件]]
 +
  
vim/edit-binary.txt · 最后更改: 2011/03/30 02:51 (外部编辑)