使用vim按十六进制代码搜索

Dav*_*ill 41 vim search hex

我需要清理一个文件.我们有一个在其上运行的xml解析器,由于文件中的转义字符(0x1B)而失败.如何使用vim查找文件中该字符的位置,以便将其删除?

示例文件:

<?php
echo "Hello, world.\n";                           
?>
Run Code Online (Sandbox Code Playgroud)

转换后:

0000000: 0a3c 3f70 6870 0a65 6368 6f20 2248 656c  .<?php.echo "Hel
0000010: 6c6f 2c20 776f 726c 642e 5c6e 223b 0a3f  lo, world.\n";.?
0000020: 3e0a  
Run Code Online (Sandbox Code Playgroud)

所以我删除了一个char :(在这个例子中,'H')

0000000: 0a3c 3f70 6870 0a65 6368 6f20 22 656c  .<?php.echo "Hel
0000010: 6c6f 2c20 776f 726c 642e 5c6e 223b 0a3f  lo, world.\n";.?
0000020: 3e0a
Run Code Online (Sandbox Code Playgroud)

注意第一行不再宽了.当我将其转换回来时,我得到:

^@<?php
echo "el^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@> 
Run Code Online (Sandbox Code Playgroud)

Nef*_*byr 56

搜索(例如使用/)\%x1b.

您还可以在控制行中输入控制字符(包括escape),方法是在它们前面加上Ctrl- V.所以输入/,Ctrl-V,Esc,Enter.

  • 如果你正在寻找一个范围做这样的事情:/ [\ x7f-\xff]你也可以通过unicode字符查找/\u001d (2认同)
  • 例如,我发现 / `\%x1b` 效果很好,但我可以问:`%` 的目的/含义是什么? (2认同)

Ale*_*ler 11

通过执行将vim转换为十六进制编辑器 [escape] :%!xxd.然后搜索0x1B(/1B).

  • Ups,抱歉 - 您需要在保存之前使用':%!xxd -r'切换回ASCII.希望这应该可以完成这项工作. (2认同)

小智 6

您可以通过将光标放在字符上并按来了解字符的十六进制值ga

\n\n

下面您将看到该字符的十六进制值。<\xe2\x95\xac>一个字符的例子

\n\n
\n

<\xe2\x95\xac> <|N> 206,十六进制 ce,316 年 10 月,Digr I>

\n
\n\n

通过以下方式删除它:

\n\n
%s/\\%xce//g \n
Run Code Online (Sandbox Code Playgroud)\n