VIM使用系列:二進制文件編輯

vim通常是做爲文本編輯工做,主要如代碼編寫,編輯二進制文件通常再也不vim的功能範疇。不過在Linux系統中偶爾也會碰到一些二進制文件,如二進制的數據文件等,在必定範圍內也可使用vim進行查看和修改。 shell

查看和定位

打開一個二進制文件時,要保證 Vim 別把它那些聰明的竅門用錯地方,啓動 Vim 時加上 "-b" 參數: vim

vim -b datafile
這個參數設定了 'binary' 選項。其做用是排除全部的意外反作用。例如,'textwidth'設爲零,省得文本行給擅自排版了。而且,文件一概以 Unix 文件格式讀取。
二進制模式能夠用來修改某程序的消息報文。當心別插入或刪除任何字符,那會讓程序運行出問題。用 "R" 命令進入替換模式。文件裏的不少字符都是不可顯示的。用 Hex 格式來顯示它們的值:
:set display=uhex
另外,也能夠用命令 "ga"  來顯示光標下的字符值。當光標位於一個 字符上時,該命令的輸出看起來就像這樣:
          27, Hex 1b,  Octal 033 
文件中也許沒那麼多換行符。你能夠關閉 'wrap' 選項來得到總覽的效果:
        :set nowrap
要發現你在文件中的當前字節位置,請用這個命令: g CTRL-G
其輸出十分冗長:
    Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 
最後兩個數字就是文件中的當前字節位置和文件字節總數。這已經考慮了 'fileformat'選項致使換行符字節不一樣的影響。
要移到文件中某個指定的字節,請用 "go" 命令。例如,要移到字節 2345: 2345go

使 用 XXD

一個真正的二進制編輯器用兩種方式來顯示文本: 二進制和十六進制格式。你能夠在 Vim裏經過轉換程序 "xxd" 來達到這效果。該程序是隨 Vim 一塊兒發佈的。首先以二進制方式編輯這個文件:
        vim -b datafile
如今用 xxd 把這個文件轉換成十六進制:    :%!xxd

文本看起來像這樣: 編輯器

0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI 
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0 
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59. 工具

如今你能夠爲所欲爲地閱讀和編輯這些文本了。 Vim 把這些信息看成普通文原本對待。
修改了十六進制部分並不致使可顯示字符部分的改變,反之亦然。最後,用下面的命令把它轉換回來:
        :%!xxd -r

只有十六進制部分的修改纔會被採用。右邊可顯示文本部分的修改忽略不計。 spa

PS:固然對於二進制文件的查看Linux系統中有多個更好的可用工具,經常使用的如: code

  • od工具:dump files in octal and other formats
  • xxd工具:make a hexdump or do the reverse.
  • hexdump工具:ASCII, decimal, hexadecimal, octal dump.
相關文章
相關標籤/搜索