vim,編輯器之王。
一般的,vim打開中文檔案時會出現亂碼,原因比較複雜,不羅嗦了。直接講解決辦法
set fileencoding=gb18030
set fileencodings=utf-8,gb18030,utf-16,big5
想看這樣設定的原因嗎?請繼續。下文在網絡中廣泛流傳
vim裡面的編碼主要跟三個參數有關:enc(encoding), fenc(fileencoding)和fencs(fileencodings)
其中fenc是目前檔案的編碼,也就是說,一個在vim裡面已經正确顯示了的檔案(前提是你的系統環境跟你的enc設定比對),你可以通過改變 fenc後再w來将此檔案存成不同的編碼。比如說,我:set fenc=utf-8然後:w就把檔案存成utf-8的了,:set fenc=gb18030再:w就把檔案存成gb18030的了。這個值對于打開檔案的時候是否能夠正确地解碼沒有任何關系。
fencs就是用來在打開檔案的時候進行解碼的猜測清單。檔案編碼沒有百分百正确的判斷方法,是以vim隻能猜測檔案編碼。比如我的vimrc裡面這個的設定是
set fileencodings=utf-8,gb18030,utf-16,big5
是以我的vim每打開一個檔案,先嘗試用utf-8進行解碼,如果用utf-8解碼到了一半出錯(所謂出錯的意思是某個地方無法用utf-8正确地 解碼),那麼就從頭來用gb18030重新嘗試解碼,如果gb18030又出錯(注意gb18030并不是像utf-8似的規則編碼,是以所謂的出錯隻是 說某個編碼沒有對應的有意義的字,比如0),就嘗試用utf-16,仍然出錯就嘗試用big5。這一趟下來,如果中間的某次解碼從頭到尾都沒有出錯,那麼 vim就認為這個檔案是這個編碼的,不會再進行後面的嘗試了。這個時候,fenc的值就會被設為vim最後采用的編碼值,可以用:set fenc?來檢視具體是什麼。
當然這個也是有可能出錯的,比如你的檔案是gb18030編碼的,但是實際上隻有一兩個字元是中文,那麼有可能他們正好也能被utf-8解碼,那麼這個檔案就會被誤認為是utf-8的導緻錯誤解碼。
至于enc,其作用基本隻是顯示。不管最後的檔案是什麼編碼的,vim都會将其轉換為目前系統編碼來進行處理,這樣才能在目前系統裡面正确地顯示出 來,是以enc就是幹這個的。在windows下面,enc預設是cp936,這也就是中文windows的預設編碼,是以enc是不需要改的。在 linux下,随着你的系統locale可能設為zh_CN.gb18030或者zh_CN.utf-8,你的enc要對應的設為gb18030或者 utf-8(或者gbk之類的)。
最後再來說一下建立空檔案的預設編碼。看文檔好像說會采用fencs裡面的第一個編碼作為建立檔案的預設編碼。但是這裡有一個問題,就是fencs 的順序跟解碼成功率有很大關系,根據我的經驗utf-8在前比gb18030在前成功率要高一些,那麼如果我建立檔案預設想讓它是gb18030編碼怎麼 辦?一個方法是每次建立檔案後都:set fenc=gb18030一下,不過我發現在vimrc裡面設定fenc=gb18030也能達到這個效果。
另外,在ubuntu中文論壇還有人提出了這樣的辦法,直接就配置了
所有代碼直接粘貼到終端運作即可!
安裝程式
代碼:
sudo apt-get install vim-gtk vim-doc cscope
建立啟動項
代碼:
cat > /usr/share/applications/gvim.desktop << "EOF"
[Desktop Entry]
Name=Gvim
Comment[zh_CN]=Gvim編輯器
Exec=gvim
Icon=/usr/share/pixmaps/gnome-word.png
Terminal=false
X-MultipleArgs=false
Type=Application
Categories=Application;Development;
Encoding=UTF-8
StartupNotify=true
EOF
locale為zh_CN.utf8的配置檔案
代碼:
cat > $HOME/.vimrc << "EOF"
"===========================================================================
" 項目: gvim 配置檔案
" 作者: yonsan [QQ:82555472]
" 安裝: sudo apt-get install vim-gtk
" 用法: 将本檔案(.vimrc)拷貝到$HOME/
"===========================================================================
" 使用 murphy 調色闆
colo murphy
" 設定用于GUI圖形使用者界面的字型清單。
set guifont=SimSun 10
"
set nocompatible
" 設定檔案浏覽器目錄為目前目錄
set bsdir=buffer
set autochdir
" 設定編碼
set enc=utf-8
" 設定檔案編碼
set fenc=utf-8
" 設定檔案編碼檢測類型及支援格式
set fencs=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
" 指定菜單語言
set langmenu=zh_CN.UTF-8
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" 設定文法高亮度
set syn=cpp
"顯示行号
set nu!
" 查找結果高亮度顯示
set hlsearch
" tab寬度
set tabstop=4
set cindent shiftwidth=4
set autoindent shiftwidth=4
" C/C++注釋
set comments=://
" 修正自動C式樣注釋功能 <2005/07/16>
set comments=s1:tags
" 儲存檔案格式
set fileformats=unix,dos
" 鍵盤操作
map gk
map gj
" 指令行高度
set cmdheight=1
" 使用cscope
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endi
" 中文幫助
if version > 603
set helplang=cn
endi
EOF
locale為zh_CN.gbk的配置檔案
代碼:
cat > $HOME/.vimrc << "EOF"
"===========================================================================
" 項目: gvim 配置檔案
" 作者: yonsan [QQ:82555472]
" 安裝: sudo apt-get install vim-gtk
" 用法: 将本檔案(.vimrc)拷貝到$HOME/
"===========================================================================
" 使用 murphy 調色闆
colo murphy
" 設定用于GUI圖形使用者界面的字型清單。
set guifont=SimSun 10
"
set nocompatible
" 設定檔案浏覽器目錄為目前目錄
set bsdir=buffer
set autochdir
" 設定編碼
set enc=chinese
" 設定檔案編碼
set fenc=chinese
" 設定檔案編碼檢測類型及支援格式
set fencs=gbk,utf-8,ucs-bom,gb18030,gb2312,cp936
" 指定菜單語言
set langmenu=zh_CN.GBK
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" 設定文法高亮度
set syn=cpp
"顯示行号
set nu!
" 查找結果高亮度顯示
set hlsearch
" tab寬度
set tabstop=4
set cindent shiftwidth=4
set autoindent shiftwidth=4
" C/C++注釋
set comments=://
" 修正自動C式樣注釋功能 <2005/07/16>
set comments=s1:tags
" 儲存檔案格式
set fileformats=unix,dos
" 鍵盤操作
map gk
map gj
" 指令行高度
set cmdheight=1
" 使用cscope
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endi
" 中文幫助
if version > 603
set helplang=cn
endi
EOF
原文連結