和全部的流行文本編輯器同樣,Vim 能夠很好的編輯各類字符編碼的文件,這固然包括UCS-二、UTF-8 等流行的 Unicode 編碼方式。然而不幸的是,和不少來自 Linux 世界的軟件同樣,這須要你本身動手設置。
Vim 有四個跟字符編碼方式有關的選項,encoding、fileencoding、fileencodings、termencoding (這些選項可能的取值請參考 Vim 在線幫助 :help encoding-names),它們的意義以下:html
- encoding: Vim 內部使用的字符編碼方式,包括 Vim 的 buffer (緩衝區)、菜單文本、消息文本等。默認是根據你的locale選擇.用戶手冊上建議只在 .vimrc 中改變它的值,事實上彷佛也只有在.vimrc 中改變它的值纔有意義。你能夠用另一種編碼來編輯和保存文件,如你的vim的encoding爲utf-8,所編輯的文件採用cp936編碼,vim會自動將讀入的文件轉成utf-8(vim的能讀懂的方式),而當你寫入文件時,又會自動轉回成cp936(文件的保存編碼).
- fileencoding: Vim 中當前編輯的文件的字符編碼方式,Vim 保存文件時也會將文件保存爲這種字符編碼方式 (不論是否新文件都如此)。
- fileencodings: Vim自動探測fileencoding的順序列表, 啓動時會按照它所列出的字符編碼方式逐一探測即將打開的文件的字符編碼方式,而且將 fileencoding 設置爲最終探測到的字符編碼方式。所以最好將Unicode 編碼方式放到這個列表的最前面,將拉丁語系編碼方式 latin1 放到最後面。
- termencoding: Vim 所工做的終端 (或者 Windows 的 Console 窗口) 的字符編碼方式。若是vim所在的term與vim編碼相同,則無需設置。如其否則,你能夠用vim的termencoding選項將自動轉換成term的編碼.這個選項在 Windows 下對咱們經常使用的 GUI 模式的 gVim 無效,而對 Console 模式的Vim 而言就是 Windows 控制檯的代碼頁,而且一般咱們不須要改變它。
好了,解釋完了這一堆容易讓新手犯糊塗的參數,咱們來看看 Vim 的多字符編碼方式支持是如何工做的。
- Vim 啓動,根據 .vimrc 中設置的 encoding 的值來設置 buffer、菜單文本、消息文的字符編碼方式。
- 讀取須要編輯的文件,根據 fileencodings 中列出的字符編碼方式逐一探測該文件編碼方式。並設置 fileencoding 爲探測到的,看起來是正確的 (注1) 字符編碼方式。
- 對比 fileencoding 和 encoding 的值,若不一樣則調用 iconv 將文件內容轉換爲encoding 所描述的字符編碼方式,而且把轉換後的內容放到爲此文件開闢的 buffer 裏,此時咱們就能夠開始編輯這個文件了。注意,完成這一步動做須要調用外部的 iconv.dll(注2),你須要保證這個文件存在於 $VIMRUNTIME 或者其餘列在 PATH 環境變量中的目錄裏。
- 編輯完成後保存文件時,再次對比 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 的代碼頁)。
對於fedora來講,vim的設置通常放在/etc/vimrc文件中,不過,建議不要修改它。能夠修改~/.vimrc文件(默認不存在,能夠本身新建一個),寫入所但願的設置。vim
個人.vimrc文件以下:編輯器
:set encoding=utf-8
:set fileencodings=ucs-bom,utf-8,cp936
:set fileencoding=gb2312
:set termencoding=utf-8
其中,fileencoding配置能夠設置utf-8,可是個人mp3好像不支持utf-8編碼,因此乾脆,我就設置爲gb2312了。如今搞定了,不論是vi中仍是mp3上均可以顯示無亂碼的.txt文件了。編碼
轉自:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.htmlcode