VIM使用系列:二进制文件编辑

vim通常是做为文本编辑工做,主要如代码编写,编辑二进制文件通常再也不vim的功能范畴。不过在Linux系统中偶尔也会碰到一些二进制文件,如二进制的数据文件等,在必定范围内也可使用vim进行查看和修改。 shell

查看和定位

打开一个二进制文件时,要保证 Vim 别把它那些聪明的窍门用错地方,启动 Vim 时加上 "-b" 参数: vim

vim -b datafile
这个参数设定了 'binary' 选项。其做用是排除全部的意外反作用。例如,'textwidth'设为零,省得文本行给擅自排版了。而且,文件一概以 Unix 文件格式读取。
二进制模式能够用来修改某程序的消息报文。当心别插入或删除任何字符,那会让程序运行出问题。用 "R" 命令进入替换模式。文件里的不少字符都是不可显示的。用 Hex 格式来显示它们的值:
:set display=uhex
另外,也能够用命令 "ga"  来显示光标下的字符值。当光标位于一个 字符上时,该命令的输出看起来就像这样:
          27, Hex 1b,  Octal 033 
文件中也许没那么多换行符。你能够关闭 'wrap' 选项来得到总览的效果:
        :set nowrap
要发现你在文件中的当前字节位置,请用这个命令: g CTRL-G
其输出十分冗长:
    Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 
最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 'fileformat'选项致使换行符字节不一样的影响。
要移到文件中某个指定的字节,请用 "go" 命令。例如,要移到字节 2345: 2345go

使 用 XXD

一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你能够在 Vim里经过转换程序 "xxd" 来达到这效果。该程序是随 Vim 一块儿发布的。首先以二进制方式编辑这个文件:
        vim -b datafile
如今用 xxd 把这个文件转换成十六进制:    :%!xxd

文本看起来像这样: 编辑器

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. 工具

如今你能够为所欲为地阅读和编辑这些文本了。 Vim 把这些信息看成普通文原本对待。
修改了十六进制部分并不致使可显示字符部分的改变,反之亦然。最后,用下面的命令把它转换回来:
        :%!xxd -r

只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。 spa

PS:固然对于二进制文件的查看Linux系统中有多个更好的可用工具,经常使用的如: code

  • od工具:dump files in octal and other formats
  • xxd工具:make a hexdump or do the reverse.
  • hexdump工具:ASCII, decimal, hexadecimal, octal dump.
相关文章
相关标签/搜索