用vim打開後中文亂碼怎麼辦?
一般來說只需要正確設置vim的編碼識別序列就很少會遇到亂碼問題:
set fileencodings=ucs-bom,utf-8,utf-16,gbk,big5,gb18030,latin1
這個設置是有順序的,一般原則是儘可能把比較獨特、不會和別的編碼混淆的放在前面(例如ucs-bom,由於帶有BOM頭的關係很難和別的混淆),然後後面可以按照常用程度降序排列。latin1作為fallback放到最後。
這個序列可能還不是很科學也不是很完整(日文、韓文這兩個也比較容易出錯的就沒有包括),但至少就我目前的使用情況來說(英文及一些ASCII擴展/變種、簡體和繁體中文)都沒有遇到過問題。如果有朋友知道更好的順序,歡迎回復或者直接修改我的回答。
如果打開之後還是遇到了亂碼,那麼就需要手動指定編碼了。注意,網路上很多地方提到的設置「fileencoding」(注意不帶s)的方法是錯誤的。認真閱讀幫助文檔:When reading a file "fileencoding" will be set from "fileencodings". To read a file in a certain encoding it won"t work by setting "fileencoding", use the |++enc| argument.
當你打開一個文件以後,vim就已經選定好了編碼並且認為就是這個編碼了,set fileencoding只是修改你希望這個文件以什麼編碼存在,相當於是設置保存時的編碼——一旦設置了不同的fileencoding之後這個文件就變成modified了,需要保存(編碼變了)。
正確的做法是在打開文件時使用++enc參數:
:e ++enc=someencoding somefile
如果想重新打開當前文件的話就省略文件名somefile即可。這兒有一個wiki你可以看看:Reloading a file using a different encoding
最後,不要碰encoding這個設置!這是vim的內部編碼,除非你確定知道你在幹什麼,否則一般不需要修改。看到之後直接打開我本機的vimrc給你貼出來,用了2年了還沒遇到亂碼 set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
Debian下vim中文亂碼的解決方案:
1、設置~下的.vimrc文件,加上fileencodings、enc、fencs,代碼如下:
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set enc=utf8
set fencs=utf8,gbk,gb2312,gb18030
2、打開py文件檢查一下中文字元是否正常顯示
3、如果是使用secureCRT,在遠程主機上vim打開中文是正常的,但是secureCRT可能亂碼,需要設置Options-Session Option-Terminal-Appearance的字元編碼(比如這裡是UTF-8)
參考鏈接:
https://wiki.archlinux.org/index.php/Arch_Linux_Localization_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#.E7.BB.88.E7.AB.AF.E4.B8.AD.E6.96.87.E6.94.AF.E6.8C.81_2http://udonmai.com/work/vim%E7%BC%96%E7%A0%81%E9%97%AE%E9%A2%98-%E6%88%91%E6%98%AF%E8%8F%9C%E9%B8%9F.html自己的經驗:
vim ~/.vimrc
添加
set enc=utf8
一般來說就夠了(只針對vim亂碼的情況,操作系統亂碼另說)
如果還不行,可以再添加
set fencs=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
還不行就把第一個的utf8換成gbk,第二個的gbk放到最前。
如果是編碼的問題 可以考慮使用:e ++enc=utf-8 myfile.txt 試試
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set enc=utf8
set fencs=utf8,gbk,gb2312,gb18030
set encoding=prc
切換字體試一試,通常都是因為vim使用的是西文字體導致的,你把字體換成楷體試一試。
推薦閱讀:
※gvim 為什麼這麼多年沒更新了?
※編程和彈吉他哪個更難?
※<script type="text/template">是幹什麼的,為什麼要把html寫在js中? 這是什麼編程語言風格,都能這樣用嗎?
※程序員寫程序都是盲打,基本不用滑鼠的么?
※關於現在再學WPF還有沒有必要的問題?