很多人在用 vim 的時候,常常搞不懂要怎麼設定,這篇是之前分享在系計中的文章,順便轉過來。
在 vim 當中,編碼的設定主要有下列三種,它們代表的意思如下:
- enc: encoding 設定 vim 內部要以何種編碼表示
- tenc: termencoding 實際輸出到終端機的畫面
- fenc: fileencoding 文件的編碼
最好多加上一行 filencodings 的設定:
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1
因為一般的 text file 不會在檔案中註明這份文件的編碼是什麼。所以 vim 在開啟文件的時候會依照 fileencodings 的先後順序來嘗試解析這份文件,當決定了這份文件的編碼(fenc)後,便會將它轉換成內部系統的編碼(enc)來處理,而內部系統的編碼又會依照終端機的編碼(tenc)轉換後傳給終端機。所以當 putty 的編碼設定成 big5,但 server 上的編碼是 utf-8,此時便要設定:
set encoding=utf-8 set termencoding=big5
這樣子,server 上依然是以 utf-8 在運作,只是輸出到 putty 時會轉成 big5 給它,而且 putty 上的輸入也會自動轉成 utf-8 到 vim 上,但一般來說都會把 encoding 和 termencoding 設成一樣。
至於 fileencoding,有時候 vim 自動解析會出現誤判,例如明明是 big5 編碼的檔案,它偏偏用 latin1 來 parsing (這個 wwwTA 將 big5 網頁轉成 utf-8 的時候常發生)。如此一來,便會出現亂碼,但是不要以為檔案壞掉了,其實只要先 check fenc 的值看是不是檔案實際的編碼,如果不是,多半只是誤判,此時只要下:
:e ++enc=<指定的編碼>
即可以指定的編碼來解析文件。 (Note: 這裡的 enc 指的不是 encoding,而是 fenc)
fileencoding 還有一項好用的用途,當儲存檔案的時候,vim 也會依據 fileencoding 的設定將文件由 enc 的編碼轉換為 fenc 的編碼,所以只要在編輯文件的時候下:
:set fenc=<指定的編碼>
就可以將文件儲存成指定的編碼了(其實用 iconv 比較快啦!不過改網頁的時候可以直接在 vim 上改編碼),不過記得要在一開始讀文件時的編碼就要對的情況下用,不然對亂碼轉碼的下場就是整個文件爛掉,常有人會在自動解析錯誤的情況下,以為 set fenc 成正確的,就可以把文件用正確的編碼解析,其實這個動作會把現在解析錯誤的文件設定成你以為是正確的編碼,結果就是整個文件的編碼都錯了,應該用上面提到的
:e ++enc=XXX
來用正確的編碼重新讀取文件。
...read more