2011年11月30日 星期三

[VIM] encoding , fileencoding , and fileencodings


  • encoding
    • 為vim內部、緩衝區、選單等所使用的編碼,如果 enc 不另外設置(比方在 .vimrc )的話, 則與 locale (或者說是 $LANG ) 一致,又如果 $LANG 為空值,則預設值為 latin1 。
  • fileencoding
    • 文字檔的實際編碼方式,如果打開文字檔案時,比對 encoding 與 fencoding 的值 不一樣的話,則會呼叫 iconv() 將 fencoding 所指定的編碼轉換成 encoding 一樣的編碼。 如果儲存該文字檔案時,比對 encoding 與 fencoding 的值不一樣的話,則會呼叫 iconv() 將 encoding 所指定的編碼轉換成 fencoding 一樣的編碼,與上相反。要注意,如果你的 fencoding 是 utf8 而你的 encoding 是 big5 的話,你要打開檔案時 utf8 編碼要轉成 big5 的話,如果你的內容上面有中文、日文、法文等多國的語言,從 utf8 轉成 big5 ,根本是有問題的,所以資料會有遺失的問題。 還有一點就是, fencoding 有時候會有誤判的問題,該值不正確的話可以使用 :e ++enc=big5 這類方式傳入,讓vim 重讀該檔,讓 fenc 強制使用 big5 編碼。(註:e 是 edit 的意思, ++enc 不是 enc 而是 fenc )
  • fileencodings
    • 是編輯文字檔案時,依照先後順序猜測該檔案所使用的編碼列表,filecoding 會先使用 fileencodings 裡面所猜到的編碼當作該值,如果 fileencodings 裡面都猜不到,也就是 fileencoding 是空值,即是使用 encoding 的值當作該值。由上面可以知道,如果在 ~/.vimrc 設定 fileencoding 的值,但是 vim 不一定會取用該值,因為不管 fileencodings 或是 encoding 都會覆蓋 fileencoding 所定義的值。所以說在~/.vimrc 設定 fileencoding 是為了指定在vim下開啟一個新檔案時所決定的編碼。
以上參考自隨便忘記[ Vim 設定中的 encoding 和 fileencoding ]

0 意見: