天天看點

Vim編碼設定

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

原文連結