獻上我經過測試以后的最終解決辦法
首先第一步找到VIM的配置文件,windows中的vim的配置文件是:
C:\Program Files\Vim_vimrc
接著修改這個文本文檔,文檔前面的所有內容均不需要動,只要把下面這些代碼加入到最后即可。
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030
set imcmdline
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
尤其要注意,最后的兩行代碼,千萬不能放到配置文件的上面。
解決consle輸出亂碼
language messages zh_CN.utf-8
vim的編碼問題
- 首先要明確:
Windows中默認的文件格式是GBK(gb2312),而Linux一般都是UTF-8。
- 在vim中查看文件的編碼方式:
set fileencoding
,即可顯示文件編碼格式,如果什么都沒有顯示,請看第三點。 - 如果你只是想查看其它編碼格式的文件或者想解決用Vim查看文件亂碼的問題,那么你可以在~/.vimrc (如果是windows系統,那么應該修改_vimrc)文件中添加以下內容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936
這樣,就可以讓vim自動識別文件編碼(可以自動識別UTF-8或者GBK編 碼的文件),其實就是依照fileencodings提供的編碼列表嘗試,如果沒有找到合適的編碼,就用latin-1(ASCII)編碼打開。
- 以指定的編碼打開某文件,如打開windows中以ANSI保存的文件:
vim file.txt -c "e ++enc=GB18030"
- 文件編碼轉換,在Vim中直接進行轉換文件編碼,比如將一個文件轉換成utf-8格式:
:set fileencoding=utf-8
6.如果已經打開了解碼錯的文件,想重新設置編碼格式:
:edit ++enc=utf8
- 查看文件格式
:set fileformat?
- 設置文件格式為 unix
:set fileformat=unix
如果有時間,請看下面的具體解釋:
Vim 有四個跟字符編碼方式有關的選項,encoding、fileencoding、fileencodings、termencoding (這些選項可能的取值請參考 Vim 在線幫助 :help encoding-names),它們的意義如下:
encoding: Vim 內部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區)、菜單文本、消息文本等。如你的vim的encoding為utf-8,所編輯的文件采用cp936編碼,vim會自動將讀入的文件轉成utf-8(vim的能讀懂的方式),而當你寫入文件時,又會自動轉回成cp936(文件的保存編碼)。
fileencoding: Vim 中當前編輯的文件的字符編碼方式,Vim 保存文件時也會將文件保存為這種字符編碼方式 (不管是否新文件都如此)。
fileencodings: Vim自動探測fileencoding的順序列表, 啟動時會按照它所列出的字符編碼方式 從前到后,逐一探測 即將打開的文件的字符編碼方式。因此最好將Unicode 編碼方式放到這個列表的最前面,如果都找不到,那么就會以 latin1 (ASCII)的方式打開。
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 的代碼頁)。