2010-02-15 17 views
36

我需要清理一個文件。我們有一個運行於其上的xml解析器,由於文件中的轉義字符(0x1B)而失敗。我如何使用vim來查找文件中的哪個字符,以便我可以將其刪除?使用vim來搜索十六進制代碼

示例文件:

<?php 
echo "Hello, world.\n";       
?> 

轉換之後:

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 

所以我刪除一個字符:(在該示例中, '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 

通知如何第一條線已經不夠寬了。當我將其轉換回來時,我得到:

^@<?php 
echo "el^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@> 

回答

46

\%x1b進行搜索(例如使用/)。 V -

您也可以由前面用Ctrl鍵輸入控制字符,包括逃逸,進入命令行。所以輸入/,Ctrl-VEsc輸入

+1

我不確定需要多少細節。不要打擾切換到十六進制表示。 Vim會顯示一個轉義字符爲'^ ['。使用我的任一種方法搜索它,並用光標將其刪除,使用'x'。 – Nefrubyr 2010-02-15 14:50:42

+0

對於後人:nerfrubyr的評論是關於我要求澄清時刪除的評論。原來我輸錯了一些東西。這兩個想法對此都很有幫助。 – 2010-02-15 21:03:33

+1

對於那些將映射爲「粘貼」(例如,Windows gvim上的默認值)的注意事項:您需要用代替以對控制字符執行相同的技巧。 – Chris 2012-03-30 22:39:44

10

通過執行[escape] :%!xxd將vim轉換爲十六進制編輯器。然後搜索0x1B(/1B)。

+0

一旦我在該模​​式下打開它,如何刪除該字符並保存該文件? – 2010-02-15 14:12:09

+1

使用h,j,k,l導航到字符,按'r'並輸入新字符。然後逃脫,:wq退出並保存。 – 2010-02-15 14:15:07

+0

我不替換字符,我刪除它。一旦刪除,行不匹配。從視覺十六進制轉換回ascii時,VIM處理較短的行嗎? – 2010-02-15 14:18:12