是否有一种巧妙的方法可以在Vim中将十六进制文件查看为二进制文件,然后将其从十六进制文件保存回二进制文件?

#1 楼

您可以使用xxd命令将Vim中的文件转换为十六进制表示,执行以下操作::%!xxd进入命令行模式,:匹配整个文件作为范围,%过滤器通过外部命令来确定范围,!是外部外壳程序命令

给出这样的输出,将其分成八位字节计数/行(每行八位字节可以通过xxd命令上的参数-c进行更改) ,十六进制表示形式和文本表示形式:

0000000: 5468 6973 2069 7320 6120 7465 7374 0a41  This is a test.A
0000010: 6e6f 7468 6572 206c 696e 650a 416e 6420  nother line.And 
0000020: 7965 7420 616e 6f74 6865 720a            yet another.


一旦进行了更改(在十六进制部分中),就可以使用xxd上的xxd命令返回到文本,因此

-r

这有点基本,尽管我喜欢它的简单性并记住:%!xxd -r,这是一个有趣的命令行工具(我没有在十六进制上做很多工作)。您可以使用一些配方以更自动化的方式来处理此转换,如改进的十六进制编辑中所述。

再记住,您还可以在以下命令中使用语法高亮在vim中进行十六进制编辑:

:set ft=xxd


评论


我认为值得一提的是,进行更改后,必须先返回到正常模式,然后再保存更改。

–卡普坦
18年7月26日在20:52

是否可以指定字节顺序?大端或小端

– Subin Sebastian
19年4月30日在9:23

顺便说一句。 :h for:%!在哪里?我只能找到:!。使用nvim。

– Artyom
20-05-18在7:55

信息:在文件中间更改了十六进制代码,并最终将其与“超越比较”进行比较之后,我发现vim在文件末尾添加了0A。因此,它现在具有不同的大小(+1字节)。我认为十六进制编辑器不应该这样做。我使用truncate --size = -1来更正此问题。

– mgutt
20-10-16在21:59



是否有插件或其他方式显示十六进制格式的字节和解码为ASCII的字节之间的连接?例如,当光标在字节54处时,它将突出显示T。类似于hexedit的方式。编辑:这个插件应该做。

–马特西亚斯·布劳恩(Matthias Braun)
20 Dec 16'20:27



#2 楼

取自:h hex-editing

If one has a particular extension that one uses for binary files (such as exe,
bin, etc), you may find it helpful to automate the process with the following
bit of autocmds for your <.vimrc>.  Change that "*.bin" to whatever
comma-separated list of extension(s) you find yourself wanting to edit:

" vim -b : edit binary using xxd-format!
augroup Binary
  au!
  au BufReadPre  *.bin let &bin=1
  au BufReadPost *.bin if &bin | %!xxd
  au BufReadPost *.bin set ft=xxd | endif
  au BufWritePre *.bin if &bin | %!xxd -r
  au BufWritePre *.bin endif
  au BufWritePost *.bin if &bin | %!xxd
  au BufWritePost *.bin set nomod | endif
augroup END


您可能要看一下:如何导航到Vim文档中的主题?

评论


完美-我将其添加到〜/ .vim / plugin / binary.vim

–thom_nic
17年9月6日在15:55

也许这必须在〜/ .vim / ftdetect /中,因为这与文件类型检测有关?

– Vitaly Zdanevich
18年11月28日在7:36