vim編碼問題

來源:互聯網
上載者:User

Gvim比emacs小,適用於編程,而後者功能全,載入外掛程式多,啟動稍慢。個人gvim足夠用。

Vim 可以很好的編輯各種字元編碼的檔案,包括 UCS-2、UTF-8 等流行的 Unicode 編碼方式:

Vim 有四個跟字元編碼方式有關的選項,encoding、fileencoding、fileencodings、termencoding,它們的意義如下:

    * encoding: Vim 內部使用的字元編碼方式,包括 Vim 的 buffer (緩衝區)、菜單文本、訊息文本等;
    * fileencoding: Vim 中當前編輯的檔案的字元編碼方式,Vim 儲存檔案時也會將檔案儲存為這種字元編碼方式 (不管是否新檔案都如此);
    * fileencodings: Vim 啟動時會按照它所列出的字元編碼方式逐一探測即將開啟的檔案的字元編碼方式,並且將 fileencoding 設定為最終探測到的字元編碼方式。因此最好將 Unicode 編碼方式放到這個列表的最前面,將拉丁語系編碼方式 latin1 放到最後面;
    * termencoding: Vim 所工作的終端 (或者 Windows 的 Console 視窗) 的字元編碼方式。

Vim 的多字元編碼的工作方式:

   1. Vim 啟動,根據 .vimrc 中設定的 encoding 的值來設定 buffer、菜單文本、訊息文的字元編碼方式;
   2. 讀取需要編輯的檔案,根據 fileencodings 中列出的字元編碼方式逐一探測該檔案編碼方式。並設定 fileencoding 為探測到的,看起來是正確的 (注1) 字元編碼方式;
   3. 對比 fileencoding 和 encoding 的值,若不同則調用 iconv 將檔案內容轉換為 encoding 所描述的字元編碼方式,並且把轉換後的內容放到為此檔案開闢的 buffer 裡,此時我們就可以開始編輯這個檔案了。注意,完成這一步動作需要調用外部的 iconv.dll (注2),你需要保證這個檔案存在於 $VIMRUNTIME 或者其他列在 PATH 環境變數中的目錄裡;
   4. 編輯完成後儲存檔案時,再次對比 fileencoding 和 encoding 的值。若不同,再次調用 iconv 將即將儲存的 buffer 中的文本轉換為 fileencoding 所描述的字元編碼方式,並儲存到指定的檔案中。同樣,這需要調用 iconv.dll。

   由於 Unicode 能夠包含幾乎所有的語言的字元,而且 Unicode 的 UTF-8 編碼方式又是非常具有性價比的編碼方式 (空間消耗比 UCS-2 小),因此建議 encoding 的值設定為 utf-8。這麼做的另一個理由是 encoding 設定為 utf-8 時,Vim 自動探測檔案的編碼方式會更準確 (或許這個理由才是主要的 ;)。我們在中文 Windows 裡編輯的檔案,為了兼顧與其他軟體的相容性,檔案編碼還是設定為 GB2312/GBK 比較合適,因此 fileencoding 建議設定為
chinese (chinese 是個別名,在 Unix 裡表示 gb2312,在 Windows 裡表示 cp936,也就是 GBK 的字碼頁)。

注1: 事實上,Vim 的探測準確度並不高,尤其是在 encoding 沒有設定為 utf-8 時。因此強烈建議將 encoding 設定為 utf-8,雖然如果你想 Vim 顯示中文菜單和提示訊息的話這樣會帶來另一個小問題。

注2: 在 GNU 的 FTP 上可以下載到 iconv 的 Win32 版(http://mirrors.kernel.org/gnu/libiconv/libiconv-1.9.1.bin.woe32.zip)。

注3: 查看協助 :h iconv-dynamic。

注4: 前方中提到的.vimrc在windows下為_vimrc,存在於vim安裝目錄下。

以下為在windows下gvim7.2地設定檔_vimrc,使用此配置可解決安裝中文版vimdoc後出現的菜單、控制台資訊等亂碼現象。
set encoding=utf-8 
set fileencodings=utf-8,chinese,latin-1    
if has("win32")   
set fileencoding=chinese    
else     
set fileencoding=utf-8 
endif    
source $VIMRUNTIME/delmenu.vim    
source $VIMRUNTIME/menu.vim   
language messages zh_CN.utf-8

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.