Alo*_*dal 37 binary vim hexdump
我正在调查一个主要是UTF-8文件,其中有很多长行.但是,文件并不完全是文本文件,还有一些垃圾.为了找到我的兴趣点,我正在使用hd和grep.
所以在某些时候我知道它对例如0000301a感兴趣,所以我想在Vim中快速打开文件并跳转到那个位置.
示例(实际上是一个很小的文件,这里的位置是0000001c):
me@here:~$ hd file | grep -C 10 \ 00\
00000000 6c 69 6e 65 31 0a 6c 69 6e 65 32 0a 6c 69 6e 65 |line1.line2.line|
00000010 33 0a 6c 69 6e 65 34 0a 6c 69 6e 65 00 35 0a 6c |3.line4.line.5.l|
00000020 69 6e 65 36 0a 6c 69 6e 65 37 0a 6c 69 6e 65 38 |ine6.line7.line8|
00000030 0a 6c 69 6e 65 39 0a 6c 69 6e 65 31 30 0a |.line9.line10.|
0000003e
me@here:~$
Run Code Online (Sandbox Code Playgroud)
在Vim中有一个技巧可以跳转到字节位置吗?还是尽可能接近?
glt*_*lts 53
就在这里.这是普通模式命令go.
来自:h go:
[count] go 转到缓冲区中的{count}字节.
例如,42go跳转到字节42.
为了跳转到十六进制或八进制地址,您需要构造一个带:normal! go或等效的命令:goto,以及str2nr()或者printf()函数.
:exe 'normal! ' . str2nr('0x2a', 16) . 'go'
:exe 'goto' str2nr('0x2a', 16)
Run Code Online (Sandbox Code Playgroud)
尽管这个问题有其自身的优点,我可能会建议你做这件事在一个相当迂回的方式,利用所有的hd,grep,Vim的,和外壳?
为什么不在整个过程中使用Vim和Vim?
关键是:h 23.4"二进制文件":Vim可以是你的十六进制编辑器.
使用您的文件启动Vim后vim -b myfile,工作流程变为:
:%!xxd -g1<Enter>
/00 <Enter>
...
...
:%!xxd -r<Enter>
Run Code Online (Sandbox Code Playgroud)
请务必阅读:h hex-editing以获取更多详细信息.