vimrc字符问题
set?fencs=utf-8,gbk
這一行的作用是告訴 vim,打開一個文件時,嘗試 utf8,gbk 兩種編碼,vim 只
需要掃描文件的前一段,就可以根據文件里面的數據判斷出文件是否用的是
utf8 或者 gbk 編碼。如果不指定這一行,則 vim 只會用當前編碼 (locale)
來打開文件,因為你的 locale 是 UTF-8,而文件是 gbk,所以打開是亂碼。
----------------------------------------------------------------------------------------------------
一般的,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
?
?
?
不過我發現在Fedora下只要用vim就可以正常顯示中文,但是vi不行
總結