ubuntu下的vim和gvim漢字(中文)亂碼解決方案

來源:互聯網
上載者:User

系統內容:ubuntu10.04 vim gvim完整安裝

問題:終端下vim中的漢字為亂碼,網上搜尋了一些解決方案。但是奇怪的是,這些方法都不能實現gvim的菜單和文中漢字,終端vim下的文中漢字同時正常顯示。有一種方案應用後vim和gvim開啟的檔案中的漢字(中文)都能正常顯示,但gvim的菜單漢字為亂碼。對這些解決方案做了各種嘗試後,找到如下方面實現同時漢字均能正常顯示。

開啟終端

$sudo -s#vim /etc/vim/vimrc

在檔案末尾添加如下代碼:

set fileencodings=gb2312,utf-8set fileencoding=gb2312set termencoding=utf-8

儲存後退出。問題解決,但是出現亂碼的具體原因是什麼還沒搞清楚。

下面引用一些參考資料:

http://doc.linuxpk.com/80308.html

1、支援中文編碼的基礎

Vim要更好地支援中文編碼需要兩個特性:+multi_byte和+iconv,可以用|:version|命令檢查當前使用的Vim是否支援,否則的話需要重新編譯。

2、影響中文編碼的設定項

Vim中有幾個選項會影響對多位元組編碼的支援:

  • encoding(enc):encoding是Vim的內部使用編碼,encoding的設定會影響Vim內部的Buffer、訊息文字等。在 Unix環境下,encoding的預設設定等於locale;Windows環境下會和當前字碼頁相同。在中文Windows環境下encoding的 預設設定是cp936(GBK)。
  • fileencodings(fenc):Vim在開啟檔案時會根據fileencodings選項來識別檔案編碼,fileencodings可以同時設定多個編碼,Vim會根據設定的順序來猜測所開啟檔案的編碼。
  • fileencoding(fencs) :Vim在儲存建立檔案時會根據fileencoding的設定編碼來儲存。如果是開啟已有檔案,Vim會根據開啟檔案時所識別的編碼來儲存,除非在儲存時重新設定fileencoding。
  • termencodings(tenc):在終端環境下使用Vim時,通過termencoding項來告訴Vim終端所使用的編碼。

3、Vim中的編碼轉換

Vim內部使用iconv庫進行編碼轉換,如果這幾個選項所設定的編碼不一致,Vim就有可能會轉換編碼。開啟已有檔案時會從檔案編碼轉換到 encoding所設定的編碼;儲存檔案時會從encoding設定的編碼轉換到fileencoding對應的編碼。經常會看到Vim提示[已轉換],這是表明Vim內部作了編碼轉換。終端環境下使用Vim,會從termencoding設定的編碼轉換到encoding設定的編碼。

可以用|:help encoding-values|列出Vim支援的所有編碼。

4、具體應用環境的設定

  • 只編輯GBK編碼的檔案

set fileencodings=cp936

set fileencoding=cp936

set encoding=cp936

  • 只編輯UTF-8編碼的中文檔案

set fileencodings=utf-8

set fileencoding=utf-8

set encoding=cp936 或者 set encoding=utf-8

  • 同時支援GBK和UTF-8編碼

set fileencodings=ucs-bom,utf-8,cp936

set fileencoding=utf-8

set encoding=cp936 或者 set encoding=utf-8

  • 如果在終端環境下使用Vim,需要設定termencoding和終端所使用的編碼一致。例如:

set termencoding=cp936 或者 set termencoding=utf-8

Windows記事本編輯UTF-8編碼檔案時會在檔案頭上加上三個位元組的BOM:EFBBBF。如果fileencodings中設 置ucs-bom的目的就是為了能夠相容用記事本編輯的檔案,不需要的話可以去掉。Vim在儲存UTF-8編碼的檔案時會去掉BOM。去掉BOM的最大好
處是在Unix下能夠使用cat a b>c來正確合并檔案,這點經常被忽略。

5、FAQ

  1. 為什麼在Vim中一次只能刪除半個漢字?

    因為encoding設定錯誤,把encoding設定為cp936就可以解決此問題。在Unix環境下Vim會根據locale來設定預設的encoding,如果沒有正確設定locale並且沒有設定encoding就會一次只能刪除半個漢字。

  2. VIM為什麼不能輸入繁體字?

    把euc-cn或者GB2312改為cp936就可以了。euc-cn是GB2312的別名,不支援繁體漢字。cp936是GBK的別名,是GB2312的超集,可以支援繁體漢字。

  3. VIM為什麼提示不能轉換?

    因為在編譯Vim時沒有加入iconv選項,重新編譯Vim才能解決。

  4. 如何開啟一個GBK編碼的檔案並另存新檔UTf-8編碼?

    儲存檔案時運行命令|:set fileencoding=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.