問題
遇到一個很奇怪的問題:在vi中輸入中文后,無法保存。
原因分析:
由於英文能夠保存,而中文無法保存一定是與編碼有關。這時我們可以在 vi中查早幫助
: h encodeing
就可以看到,單字節字符和雙字節字符的編碼代碼不一樣,所以需要進行調整。
解決方案:
在.vimrc 中加入
set fileencodings=zh_CN.GB18030
或
set encoding=gb2312
原理分析:
具體需要查看
:h encodeing
(2)
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
- 為什么在Vim中一次只能刪除半個漢字?
因為encoding設置錯誤,把encoding設置為cp936就可以解決此問題。在Unix環境下Vim會根據locale來設置默認的encoding,如果沒有正確設置locale並且沒有設置encoding就會一次只能刪除半個漢字。
- VIM為什么不能輸入繁體字?
把euc-cn或者GB2312改為cp936就可以了。euc-cn是GB2312的別名,不支持繁體漢字。cp936是GBK的別名,是GB2312的超集,可以支持繁體漢字。
- VIM為什么提示不能轉換?
因為在編譯Vim時沒有加入iconv選項,重新編譯Vim才能解決。
- 如何打開一個GBK編碼的文件並另存為UTf-8編碼?
保存文件時運行命令|:set fileencoding=utf-8|就可以了。
開始用Vim編輯東西了,可是首先遇到了一個問題。就是如果在插入模式下輸入中文,回到normal模式之后,再想輸入命令,就得把輸入法切換回英文才行,再進入輸入模式,又得切回中文,相當的不方便。求助於google大神,發現了VimIM。
Vimim是一個非常好用的Vim中文輸入插件。下面是它自己的介紹:
一個文本文件,構成一個中文輸入法。插上聯網就可以雲輸入。
如果再加上一二個文本文件,無需聯網照樣敲打中文,隨心所欲。
程式文件用的是 vim script, 天生跨平台(Windows, Mac, Linux)
詞庫文件就是自己的輸入法(全拼或雙拼,五筆,英文,DIY)
所謂安裝,就是把文本文件扔到 vim 的 plugin 目錄之下。
單獨插上【拼音】詞庫,就是vim拼音輸入法(全拼或六種雙拼)。
單獨插上【嘸蝦米】詞庫,就是vim嘸蝦米輸入法。
同時插上【拼音★四角】,可以平行也可以交叉使用,無須切換。
同時插上【五筆★拼音】,可以平行使用,敲<C->動態切換。
不設選項,不換模式,點<C-6>就可以上漢字,是謂〖點石成金〗。
如果用<C->切換成中文輸入模式,也可以將就當前流行的輸入法習慣。
所謂卸載,就是刪除文本文件。
那怎么安裝這個這么好的小軟件呢?
所謂安裝,就是把VimIM插件 vimim.vim 和詞庫文本文件扔到 vim 的 plugin 目錄之下。例如:我的 windows7系統,gvim安裝在E:editVim,我又想安裝五筆和拼音的詞庫,那就是要把下面三個文件放到E:editVimvim72plugin下面。
VimIM 插件: http://vim.sourceforge.net/scripts/script.php?script_id=2506
極點五筆: http://vimim-data.googlecode.com/svn/trunk/data/vimim.wubijd.txt
拼音大詞庫: http://vimim-data.googlecode.com/svn/trunk/data/vimim.pinyin_huge.txt
中文輸入模式。
怎么用這個東西來在Vim中輸入中文呢?
【經典動態模式】:let g:vimim_static_input_style=0 (缺省).
輸入過程中一直出選擇項目,或者說,每敲一個字母就蹦出一個選詞菜單。
空格鍵上漢字,回車鍵上英文。用數字鍵確認漢字。ESC鍵輸出英文並退出VIM插入模式。
在中文輸入模式時,自動開啟中文標點,若想輸入英文標點,可先按CTRL+6后再輸入。
【Sexy靜態模式】:let g:vimim_static_input_style=2
包括〖點石成金〗全部功能.CTRL+開啟,再按ctrl+關閉,開啟時光標是綠色的。
空格鍵出選詞菜單,數字或者字母選詞,再空格鍵上詞。
英文標點之后,空格鍵出中文標點.
回車鍵上英文,上英文后再按回車上空格。
想回到英文輸入狀態,可按CTRL+6.
在我的電腦里面,在這個模式下輸入編碼后光標偶爾不會在最后一個字符后面,按空格后正常,如果你也有這樣的情況,請按下空格鍵吧。
都弄好了吧,可以開始享受在Vim中輸入中文的樂趣了。