Usr_23

Nvim 的 :help 頁面,由 產生,來源為 原始碼,使用 tree-sitter-vimdoc 解析器。


VIM 使用者手冊 - Bram Moolenaar 編著
編輯其他檔案
本章節介紹如何編輯非一般檔案。使用 Vim,你可以編輯壓縮過的檔案。有些檔案需要透過網路存取。在一些限制下,也可以編輯二進制檔案。
23.1 DOS、Mac 和 Unix 檔案 23.2 網際網路上的檔案 23.3 二進制檔案 23.4 壓縮檔案
下一章:usr_24.txt 快速插入 前一章:usr_22.txt 尋找要編輯的檔案 目錄:usr_toc.txt

DOS、Mac 和 Unix 檔案

在早期,老式的電傳打字機使用兩個字元來開始新的一行。一個是將字車移回第一個位置(歸位,<CR>),另一個是將紙張向上移動(換行,<LF>)。當電腦出現時,儲存空間很昂貴。有些人認為他們不需要兩個字元來表示行尾。Unix 人員決定他們可以使用 <New Line> 或 <NL> 來表示行尾。蘋果人員則採用 <CR> 作為標準。Microsoft Windows 人員決定保留舊的 <CR><NL> (在說明文字中我們使用 <NL> 代表換行)。這表示如果你嘗試將檔案從一個系統移到另一個系統,你會有換行問題。Vim 編輯器會自動辨識不同的檔案格式,並在背後正確地處理這些問題。'fileformats' 選項包含編輯新檔案時將會嘗試的各種格式。例如,以下命令會告訴 Vim 先嘗試 Unix 格式,其次嘗試 MS-DOS 格式
:set fileformats=unix,dos
你會在編輯檔案時收到的訊息中注意到格式。如果你編輯的是原生檔案格式,則不會看到任何訊息。因此,在 Unix 上編輯 Unix 檔案不會導致任何註記。但是當你編輯 dos 檔案時,Vim 會通知你
"/tmp/test" [dos] 3L, 71C
對於 Mac 檔案,你會看到 "[mac]"。偵測到的檔案格式儲存在 'fileformat' 選項中。要查看你使用的是哪種格式,請執行以下命令
:set fileformat?
Vim 使用的三個名稱是
unix <NL> dos <CR><NL> mac <CR>

使用 MAC 格式

在 Unix 上,<NL> 用於換行。在一行中間出現 <CR> 字元並不罕見。順帶一提,這在 Vi(和 Vim)腳本中經常發生。在 Macintosh 上,<CR> 是換行字元,在一行中間出現 <NL> 字元是可能的。結果是無法 100% 確定包含 <CR><NL> 字元的檔案是 Mac 還是 Unix 檔案。因此,Vim 假設在 Unix 上你可能不會編輯 Mac 檔案,因此不會檢查這種檔案類型。如果要檢查此格式,請將 "mac" 新增至 'fileformats'
:set fileformats+=mac
然後 Vim 會猜測檔案格式。請注意 Vim 猜錯的情況。

覆蓋格式

如果你使用舊的 Vi 並嘗試編輯 MS-DOS 格式的檔案,你會發現每一行都以 ^M 字元結尾。(^M 是 <CR>)。自動偵測可以避免這種情況。假設你想要以這種方式編輯檔案?那麼你需要覆蓋格式
:edit ++ff=unix file.txt
"++" 字串是一個項目,告訴 Vim 後面接著一個選項名稱,這個選項會覆蓋此單一命令的預設值。"++ff" 用於 'fileformat'。你也可以使用 "++ff=mac" 或 "++ff=dos"。這不適用於任何選項,目前僅實作了 "++ff" 和 "++enc"。完整名稱 "++fileformat" 和 "++encoding" 也適用。

轉換

你可以使用 'fileformat' 選項來轉換檔案格式。例如,假設你有一個名為 README.TXT 的 MS-DOS 檔案,你想要將其轉換為 Unix 格式。首先編輯 MS-DOS 格式的檔案
vim README.TXT
Vim 會將其辨識為 dos 格式的檔案。現在將檔案格式變更為 Unix
:set fileformat=unix
:write
該檔案會以 Unix 格式寫入。

23.2 網際網路上的檔案

有人寄給你一封電子郵件,其中以 URL 參照一個檔案。例如
你可以在這裡找到資訊
ftp://ftp.vim.org/pub/vim/README
你可以啟動一個程式來下載檔案,將其儲存在你的本機磁碟上,然後啟動 Vim 來編輯它。還有一種更簡單的方法。將游標移動到 URL 的任何字元。然後使用這個命令
gf
如果運氣好,Vim 會找出要使用哪個程式來下載檔案,下載它並編輯副本。若要在新視窗中開啟檔案,請使用 CTRL-W f。如果出現問題,你會收到錯誤訊息。可能是 URL 錯誤、你沒有讀取權限、網路連線中斷等等。不幸的是,很難判斷錯誤的原因。你可能想要嘗試手動下載檔案。
透過網路存取檔案需要使用 netrw 外掛程式。目前可辨識以下格式的 URL
ftp:// 使用 ftp rcp:// 使用 rcp scp:// 使用 scp http:// 使用 wget (唯讀)
Vim 本身不進行通訊,它依賴於你電腦上可用的上述程式。在大多數 Unix 系統上,都會存在 "ftp" 和 "rcp"。"scp" 和 "wget" 可能需要安裝。
Vim 會針對每個開始編輯新檔案的命令偵測這些 URL,例如 ":edit" 和 ":split"。寫入命令也有效,但 http:// 除外。
如需更多資訊,包括關於密碼的資訊,請參閱 netrw

23.3 二進制檔案

你可以使用 Vim 編輯二進制檔案。Vim 並非真正為此而設計,因此有一些限制。但是你可以讀取檔案、變更字元並寫回,結果是只有該字元被變更,且檔案在其他方面都相同。為了確保 Vim 不會以錯誤的方式使用其聰明技巧,請在啟動 Vim 時新增 "-b" 引數
vim -b datafile
這會設定 'binary' 選項。這樣做的效果是關閉不預期的副作用。例如,'textwidth' 會設定為零,以避免自動格式化行。檔案始終以 Unix 檔案格式讀取。
二進制模式可用於變更程式中的訊息。請小心不要插入或刪除任何字元,否則會導致程式無法運作。使用 "R" 進入取代模式。
檔案中的許多字元都是不可列印的。若要以十六進位格式查看它們
:set display=uhex
否則,可以使用 "ga" 命令來查看游標下字元的值。當游標位於 <Esc> 時的輸出如下
<^[> 27, 十六進位 1b, 八進位 033
檔案中可能沒有太多換行符號。若要取得一些概觀,請關閉 'wrap' 選項
:set nowrap

位元組位置

若要查看你在檔案中的哪個位元組,請使用此命令
g CTRL-G
輸出很詳細
第 9-16 行的第 9-16 欄;第 330 行中的第 277 行;第 2058 個字中的第 1806 個字;第 12206 個位元組中的第 10580 個位元組
最後兩個數字是檔案中的位元組位置和位元組總數。這會將 '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
僅使用十六進位部分的變更。右側可列印文字部分的變更將被忽略。
如需更多資訊,請參閱 xxd 的手冊頁面。

23.4 壓縮檔案

這很簡單:你可以像編輯任何其他檔案一樣編輯壓縮過的檔案。當你編輯檔案時,"gzip" 外掛程式會負責解壓縮檔案。並在你寫入檔案時再次壓縮它。目前支援以下壓縮方法
.Z 壓縮 .gz gzip .bz2 bzip2
Vim 使用上述程式來執行實際的壓縮和解壓縮。你可能需要先安裝這些程式。
下一章:usr_24.txt 快速插入
版權:請參閱 manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
主頁
命令索引
快速參考