*usr_23.txt* For Vim version 7.3. 最近更新: 2005年3月VIM 用戶手冊 - Bram Moolenaar 著
譯者
: Chimin Yen http://vimcdoc.sf.net編輯特殊文件本章討論特殊文件的編輯。利用 Vim 你可以編輯經(jīng)過壓縮或加密的文件。有些文件需要在互聯(lián)網(wǎng)上存取。二進制文件也能有限度地編輯。|23.1| DOS、Mac 和 Unix 文件 > :set fileformat=unix|23.2| 互聯(lián)網(wǎng)上的文件 > :gf|23.3| 加密 > :vim -x abc.c :X vim -x -n abc.c :set key=|23.4| 二進制文件 > :vim -b abc.c :set display=uhex :ga :%!xxd :%!xxd -r|23.5| 壓縮文件下一章: |usr_24.txt| 快速插入前一章: |usr_22.txt| 尋找要編輯的文件目錄: |usr_toc.txt|
*23.1* DOS、Mac 和 Unix 文件
很久以前,老式的電傳打字機使用兩個字符來另起新行。一個字符把滑動架移回首位 (稱為回車,<CR>
),另一個字符把紙上移一行 (稱為換行,<LF>
)。當(dāng)計算機問世以后,存儲器曾經(jīng)非常昂貴。有些人就認(rèn)定沒必要用兩個字符來表示行尾。UNIX 開發(fā)者決定他們可以用<Line Feed>
一個字符來表示行尾。Apple 開發(fā)者規(guī)定了用<CR>
。開發(fā) MS-DOS (以及微軟視窗) 的那些家伙則決定沿用老式的<CR>
<LF>
。那意味著,如果你試圖把一個文件從一種系統(tǒng)移到另一種系統(tǒng),那么你就有換行符方面的麻煩。Vim 編輯器自動識別不同文件格式,并且不勞你操心就把事情給辦妥了。選項 'fileformats' 包含各種各樣的格式,Vim 會在編輯一個新文件之初嘗試該選項定義的各種格式。例如,下面這個命令告訴 Vim 先嘗試用 UNIX 格式,其次,嘗試MS-DOS 格式::set fileformats=unix,dos
編輯一個文件時,你將
注意
到 Vim 給出的信息消息報中包括文件所用的格式。如果你編輯的是本地格式文件 (你編輯的文件格式和所用系統(tǒng)一致),你就不會看到任何格式名。因此在 Unix 系統(tǒng)上編輯一個 Unix 格式文件不會產(chǎn)生任何關(guān)于格式的信息。但你若編輯一個 dos 文件,Vim 將這樣通知你:"/tmp/test" [dos] 3L,71C
如果是 Mac 文件,你會看到 "[mac]"。探測到的文件格式會被存入 'fileformat' 選項。執(zhí)行下面這個命令可以顯示你當(dāng)前使用的文件格式::set fileformat?
Vim 能使用的三種格式如下:unix
<LF>
dos<CR>
<LF>
mac<CR>
使 用 MAC 格 式在 Unix 上,<LF>
用于分行。但<CR>
字符混在文本行中間也非罕見。這種情況碰巧經(jīng)常發(fā)生在 Vi (和 Vim) 腳本內(nèi)。在采用<CR>
作為換行符的 Macintosh 上,<LF>
字符也有可能混在文本行中間。結(jié)果,很難 100% 肯定一個同時包含<CR>
和<LF>
的文件究竟是 Mac 還是 Unix 格式。所以,Vim 假設(shè)你一般不會在 Unix 上編輯一個 Mac 文件,所以干脆對這種文件格式不作檢查。果真要檢查此種格式,就把 "mac" 加入 'fileformats'::set fileformats+=mac
然后 Vim 就會猜測文件格式。要當(dāng)心, Vim 可能會猜錯的。強 制 格 式如果你用往日美好的 Vi 來嘗試編輯一個采用 MS-DOS 格式的文件,你將會發(fā)現(xiàn)每一行的末尾有個 ^M 字符。(^M 就是
<CR>
)。而 Vim 的自動探測功能就避免了這個問題。莫非你確實要按那個樣子來編輯這個文件嗎?那么你需要強制 Vim 忽略文件格式而使用你指定的格式::edit ++ff=unix file.txt
字符串 "++" 告訴 Vim 后面跟的是選項名,以取代其默認(rèn)值。但僅作用于這一個命令。"++ff" 用于 'fileformat' 選項。你也可以用 "++ff=mac" 或 "++ff=dos"。這樣用法并非適用于任意選項,目前 Vim 僅僅實現(xiàn)了 "++ff" 和 "++enc"。用全稱"++fileformat" 和 "++encoding" 也行。轉(zhuǎn) 換你可以用 'fileformat' 選項把文件從一種格式轉(zhuǎn)換為另一種。例如,假定你有個名為README.TXT 的 MS-DOS 文件,你要把它轉(zhuǎn)換成 UNIX 格式。首先編輯這個采用 MS-DOS格式的文件:
vim README.TXT
Vim 將識別出那是一個 dos 格式文件?,F(xiàn)在把這個文件的格式改為 UNIX:
:set fileformat=unix
:write
這個文件就以 Unix 格式存盤了。
*23.2* 互聯(lián)網(wǎng)上的文件
有人給你傳送了一封電子郵件,其中引用了一個以超鏈接 URL 表示的文件。例如:You can find the information here:
ftp://ftp.vim.org/pub/vim/README
你當(dāng)然可以啟動一個程序來下載這個文件,把它存入你本地磁盤,然后啟動 Vim 來編輯它。但有一個簡單得多的方法。把光標(biāo)移到那個超鏈接里任何一個字符上,然后使用這個命令:gf
運氣好的話,Vim 將確定用哪個程序來下載這個文件,并把文件下載下來讓你編輯該副本。在另一個新窗口打開這個文件,則用
CTRL-W
f。如果事情不順利的話,你會得到出錯信息??赡苣莻€鏈接有錯,也可能你沒有閱讀它的權(quán)限,還可能網(wǎng)絡(luò)連接中斷了,等等。不幸的是,很難講搞清除出錯的原因。你也許得嘗試以手工方法來下載這個文件。訪問因特網(wǎng)上的文件要安裝插件 netrw 才行。目前,下面這些格式的超文本鏈接可被識別:ftp:// 使用 ftprcp:// 使用 rcpscp:// 使用 scphttp:// 使用 wget (只讀)Vim 并非親自與因特網(wǎng)聯(lián)系。它有賴于你的計算機上安裝好的上面提及的程序。大多數(shù)Unix 系統(tǒng)上裝有 "ftp" 和 "rcp"。而 "scp" 和 "wget" 也許要另外安裝。無論你用哪個命令開始編輯,Vim 總是會探測一下這些超文本鏈接。包括如 ":edit" 和":split" 這樣的命令。存盤命令也行,但除了 http:// 之外。欲知詳情,包括密碼問題,參見 |netrw|。
*23.3* 加密
有些信息你希望保留給自己。例如,當(dāng)你在計算機上寫一份給學(xué)生用的試卷。你不會愿意在考試開始之前給聰明的學(xué)生琢磨出一種偷閱試題的方法。Vim 能為你給文件加密,為你提供一些保護。要開始編輯一個需要加密的新文件,可以用 "-x" 參數(shù)來啟動 Vim。例如:vim -x exam.txt
Vim 提示你確定一個密碼,用于為文件加密和解密:
Enter encryption key:
(譯者注
: 中文是輸入密碼:
)現(xiàn)在仔細(xì)鍵入那個密碼。你所鍵入的字符將為星號代替,因此你看不到。為了避免由于打字錯誤引起麻煩,Vim 要求你再輸入一次密碼:Enter same key again:
(譯者注
: 中文是請再輸入一次:
)現(xiàn)在你可以像平時一樣編輯這個文件并把你所有的秘密放進去。當(dāng)你編完文件要退出 Vim時,這個文件就被加密存盤了。當(dāng)你用 Vim 編輯這個文件時,它就會要求你再輸入那同一個密碼。你不需要用 "-x"參數(shù)。你也可以用普通的 ":edit" 命令編輯加密的文件。Vim 給這個文件加上特定的magic 字符串,據(jù)以識別那是經(jīng)過加密的文件。如果你試圖用另一個程序來閱讀這個文件,你將讀到一堆垃圾。如果你用 Vim 來編輯這個文件,但輸入了錯誤的密碼,你也只能得到垃圾。Vim 并不具備檢驗密碼正確性的機理 (這一點使得破譯密碼更為困難)。開 / 關(guān) 加 密要給一個文件撤除加密,設(shè)定 'key' 選項為空字符串::set key=
你下次把這個文件存盤時,存盤的文件就是未經(jīng)加密的。設(shè)定 'key' 選項來啟用加密是個壞主意。因為密碼會被清清楚楚地顯示在屏幕上。任何人都可以偷看到你的密碼。為了避免這樣的問題,創(chuàng)造了 ":X" 命令。它會像 "-x" 參數(shù)向你索取一個密碼:
:X
Enter encryption key: ******
Enter same key again: ******
加 密 的 局 限 性Vim 采用的加密算法有弱點的。它對于防止那種偷窺者是綽綽有余了,但不足以防止一個手上有大量時間的密碼專家。而且,你應(yīng)該知道交換文件是不加密的;所以當(dāng)你在編輯文件時,擁有超級用戶權(quán)限的人能夠讀取未經(jīng)加密的文件文本。不讓人們讀到你的交換文件的一個方法就是不使用交換文件。如果在命令行上用了 -n參數(shù),交換文件就不會被創(chuàng)建了 (Vim 把所有的東西都存放在內(nèi)存里)。例如,要編輯經(jīng)過加密的文件 "file.txt",但不用交換文件,請用下面的命令:
vim -x -n file.txt
如果你已經(jīng)在編輯這個文件了,那么交換文件 swapfile 可以用下面的命令禁止:
:setlocal noswapfile
由于沒了交換文件,文件復(fù)原就不可能了。為了避免失去編輯的成果,要比平時更勤快地存盤你的文件。文件在內(nèi)存中以明文形式存在。因此任何具備權(quán)限的人都能進入編輯者的內(nèi)存瀏覽,從而,發(fā)現(xiàn)這個文件的內(nèi)容。如果你使用信息文件 viminfo,別忘了文本寄存器的內(nèi)容也是明明白白寫在其中的。如果你真的要保證一個文件內(nèi)容的安全,那么,你必須永遠(yuǎn)只在一個不聯(lián)網(wǎng)的可攜式計算機上編輯這個文件,使用優(yōu)良的加密工具,并且在不用時,把你的計算機鎖進一個大保險箱。
*23.4* 二進制文件
你可以用 Vim 來編輯二進制文件。Vim 本非為此而設(shè)計的,因而有若干局限。但你能讀取一個文件,改動一個字符,然后把它存盤。結(jié)果是你的文件就只有那一個字符給改了,其它的就跟原來那個一模一樣。要保證 Vim 別把它那些聰明的竅門用錯地方,啟動 Vim 時加上 "-b" 參數(shù):vim -b datafile
這個參數(shù)設(shè)定了 'binary' 選項。其作用是排除所有的意外副作用。例如,'textwidth'設(shè)為零,免得文本行給擅自排版了。并且,文件一律以 Unix 文件格式讀取。二進制模式可以用來修改某程序的消息報文。小心別插入或刪除任何字符,那會讓程序運行出問題。用 "R" 命令進入替換模式。文件里的很多字符都是不可顯示的。用 Hex 格式來顯示它們的值:
:set display=uhex
另外,也可以用命令 "ga" 來顯示光標(biāo)下的字符值。當(dāng)光標(biāo)位于一個
<Esc>
字符上時,該命令的輸出看起來就像這樣:文件中也許沒那么多換行符。你可以關(guān)閉 'wrap' 選項來獲得總覽的效果:
<^[>
27, Hex 1b, Octal 033:set nowrap
字 節(jié) 位 置要發(fā)現(xiàn)你在文件中的當(dāng)前字節(jié)位置,請用這個命令:
g
CTRL-G
其輸出十分冗長:
Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206
最后兩個數(shù)字就是文件中的當(dāng)前字節(jié)位置和文件字節(jié)總數(shù)。這已經(jīng)考慮了 'fileformat'選項導(dǎo)致?lián)Q行符字節(jié)不同的影響。要移到文件中某個指定的字節(jié),請用 "go" 命令。例如,要移到字節(jié) 2345:2345go
使 用 XXD一個真正的二進制編輯器用兩種方式來顯示文本: 二進制和十六進制格式。你可以在 Vim里通過轉(zhuǎn)換程序 "xxd" 來達到這效果。該程序是隨 Vim 一起發(fā)布的。首先以二進制方式編輯這個文件:
vim -b datafile
現(xiàn)在用 xxd 把這個文件轉(zhuǎn)換成十六進制:
:%!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.
現(xiàn)在你可以隨心所欲地閱讀和編輯這些文本了。 Vim 把這些信息當(dāng)作普通文本來對待。修改了十六進制部分并不導(dǎo)致可顯示字符部分的改變,反之亦然。最后,用下面的命令把它轉(zhuǎn)換回來::%!xxd -r
只有十六進制部分的修改才會被采用。右邊可顯示文本部分的修改忽略不計。欲知更多詳情,參見 xxd 手冊。
*23.5* 壓縮文件
這很容易: 你可以像編輯任何其它文件一樣,來編輯一個經(jīng)過壓縮的文件。插件 "gzip"負(fù)責(zé)在你編輯這個文件時把它解壓縮,以及在你存盤時再把它壓縮起來。目前支持的壓縮方法有下面這些:.Z compress.gz gzip.bz2 bzip2Vim 調(diào)用上面提到的程序來實際完成壓縮和解壓縮。你也許需要先安裝這些程序。
下一章: |usr_24.txt| 快速插入版權(quán): 參見 |manual-copyright| vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on Wed Sep 8 00:16:19 UTC 2010