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

如何为“进行有效输入”;xxd—r";在vim中删除字节时?,vim,xxd,Vim,Xxd,创建名为test的文件,其中包含以下内容: 0123456789abcdef0123456789abcdef 我想使用xxd删除第一个0。用vim-b测试打开它,然后运行:%!xxd在vim内部。结果是: 0000000: 3031 3233 3435 3637 3839 6162 6364 6566 0123456789abcdef 0000010: 3031 3233 3435 3637 3839 6162 6364 6566 0123456789abcdef 0000020: 0a

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

0123456789abcdef0123456789abcdef
我想使用xxd删除第一个
0
。用vim-b测试打开它,然后运行
:%!xxd
在vim内部。结果是:

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

0000000: 31 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000010: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000020: 0a                                       .
然后我运行
:%!xxd-r
读取十六进制。结果是:

0000000: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000010: 3031 3233 3435 3637 3839 6162 6364 6566  0123456789abcdef
0000020: 0a                                       .      
^@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

如果您在编辑时将文件格式弄乱太多(即,如果替换命令不匹配,无法删除必要的文本),但您明白了,此确切命令可能会导致问题。

是否要删除第一列?试试
:%!xxd-p
用于小型文本文件,如
测试
:%!xxd-p
有效。但是如果我想删除大文本文件中的一些字符。如果没有行号和文本部分,很难知道要删除哪些十六进制代码。