开始十六进制编辑

要在 vim 中开始十六进制编辑,可通过如下命令

:e ++bin ++enc=ansi | %!xxd -g1
:set ft=xxd

|”是 vim 多个命令的分隔符,这实际上是三个命令。

其中最关键的命令是

%!xxd -g1

它是对当前编辑的文件调用命令“xxd -g1”然后编辑该命令的输出,需要注意的是被编辑的文件没有变,如果此时保存的话,将会这些十六进制信息对应的文本替换原文件。

xxd -g1”的作用是以单个字节为单位按十六进制方式列出文件内容。

再看第一条命令:

set ft=xxd

的作用是切换语法类型为 xxd,以刷新语法高亮。如果未执行该命令,语法高亮还会按照之前的文件类型,可能看起来会是混乱的。

结束十六进制编辑

上文提到了,再开始十六进制编辑之后若保存的话将会以十六进制文本替换原文件。如果要想保存十六进制编辑的变更需要还原为原始的二进制,命令为:

%!xxd -r  

即对当前文件调用命令“xxd -r”,其作用就是将十六进制信息还原。

插入/删除

vim 通过上述方式调用外部命令“xxd”方式实现的十六进制编辑,不适合有插入/删除操作的编辑,通常只适用于只读查看或者覆盖式编辑。

如果需要插入/删除操作,可调整下开始/结束编辑命令分别用:

:e ++bin ++enc=ansi | %!xxd -i
:set ft=c
:%!xxd -r -p

这样其格式跟传统的十六进制编辑工具格式不大一样,但便于插入/删除操作。