我剛來公司的時候,發現公司的 Linux 開發環境沒有配置中文,因為絕大多數同事都是在 VC/SourceInsight/UltraEdit上編輯後sz到服務器上編譯,所以沒人在意這個問題。而我習慣於在 vim 下直接寫代碼,很不習慣,就搞了一下。
首先讓 vim 支持中文,這個修改配置即可,但是沒想到後來那麼麻煩。
一開始嘗試統一設置為 en_US.UTF-8,SecureCRT 的編碼也設置為 UTF-8,vim 好了,但是 cat 和 more GB 編碼的文件時會亂碼。
設置為 en_US.ISO8859-1,cat 和 more 好了,vim 又不行了。
很奇怪 vim 的 fileencoding 裡面設置了檢測中文的選項,
set fileencodings=utf-8-bom,ucs-bom,utf-8,cp936,gb18030,ucs,big5
為什麼不起作用呢?後來明白了 UTF-8 本身能夠兼容中文,所以 vim 不管語言是不是中文,vim 都會進行中文的檢測,而語言設置為 en_US,編碼不是 UTF-8 的時候,則認為環境不支持中文,直接忽略 fileencodings 裡的cp936,gb18030等中文編碼。
這就好辦了。
因為我們的系統大部分還都是 GB 編碼,而 cat 和 more 又不會進行編碼的自動識別和轉換。但是 vim 會,因此就委屈一下 vim,全局依然用 GB 編碼。
具體操作:
編輯 ~/.profile,加入:
export LC_CTYPE=zh_CN.GB18030
編輯 ~/.vimrc,確認含有:
set fileencodings=utf-8-bom,ucs-bom,utf-8,cp936,gb18030,ucs,big5
這個順序比較好,能准確識別的優先放前面。
然後 vim 就能正確識別中文了,不會出現亂碼和半個漢字的問題。
如果要全中文,就用:
export LC_ALL=zh_CN.GB18030
取代
export LC_CTYPE=zh_CN.GB18030
這樣終端的錯誤信息和gcc錯誤信息都是中文的了,cat 和 more GB 編碼的文件也很正常了。
這個問題涉及到好幾個方面:文件本身的編碼終端的語言vim的中文支持vim的編碼檢測轉換和輸出SecureCRT的編碼
所以實際上還是挺復雜的,一環錯了都出不來效果。
現在編碼問題算是比較完美地解決了,生活真美好……