vim - 删除字节时如何在vim中为 "xxd -r"进行有效输入?

标签 vim xxd

创建一个名为 test 的文件,其中包含以下内容:

0123456789abcdef0123456789abcdef

我想使用 xxd 删除第一个 0。用 vim -b test 打开它,然后在 vim 中运行 :%!xxd。结果是:
0000000: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000010: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000020: 0a                                       .      

然后我删除第一个 30 的十六进制代码 0 :
0000000: 31 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000010: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000020: 0a                                       .

然后我运行 :%!xxd -r 来读回十六进制。结果是:
^@23456789abcdef^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

结果是乱码。我知道原因是上述内容不是有效的 xxd 输入。如果我删除行号和文本部分:
31 3233 3435 3637 3839 6162 6364 6566
3031 3233 3435 3637 3839 6162 6364 6566  
0a  

我运行 :%!xxd -r -p 来读回十六进制。结果是正确的:
123456789abcdef0123456789abcdef

使用 vim 和 xxd 有没有更好的方法来完成这项工作?更好的方法意味着更少的编辑来为 xxd -r 提供有效的输入。

最佳答案

您自己发现删除字节偏移列和文本列允许您使用 :%!xxd -r -p得到你想要的。那么如何创建一个自定义命令来删除这些列然后进行转换呢? :%!xxd -r -p无论如何打字太多了。

就像是:

:command MyXXDR %s#^[^:]*: \(\%(\x\+ \)\+\) .*#\1# | %!xxd -r -p

如果您的编辑弄乱了文件的格式(即如果替换命令不匹配以删除必要的文本),那么这个确切的命令可能会导致问题,但您明白了。

关于vim - 删除字节时如何在vim中为 "xxd -r"进行有效输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086771/

相关文章:

Git-commit 无法打开 vim

vim - 一种更精确的方式将光标向后移动然后跳转

vim - 当文件被另一个应用程序更改时如何得到通知?

一个简单的 C 程序是否可以模仿默认的 'xxd' 命令,使其 diff 输出返回 0?

linux - hexdump 和 xxd 在 red hat 和 ubuntu/mint 上产生不同的输出

python - 获取Python代码块中myvim.vim文件的绝对路径

vim - 从 Syntastic 隐藏装订线

ascii - Hexdump 的最佳 OCR

C - fwrite - 无法打开文件,因为它包含无效字符

yum - 'xxd' 命令的官方 Fedora 包?