每日一Vim(20)Vim 編碼設定

2021-09-01 16:47:31 字數 1803 閱讀 3811

vim的編碼選項

vim編碼涉及四個概念,分別是enc,fenc,fencs,tenc,一般亂碼多是因這些引數設定不正確引起的,要想徹底擺脫vim的亂碼問題,還是把這四個概念理清楚了,下面詳細介紹之。

enc(encoding)

enc的全稱為encoding,這是vim內部使用的編碼,如buffer,暫存器中的字串。在vim開啟文字後,如果它的編碼方式與它的內部編碼不一致,vim會先把編碼轉換成內部編碼,如果它用的編碼中含有沒法轉換為內部編碼的字元,那麼這些字元就會丟失掉。預設值是系統的locale來決定的,比如在windows下一般就是gbk或gb2312的,而在linux下就是utf-8。可以用命令:set enc檢視當前vim的enc是什麼值,筆者的windows顯示的是cp936這裡的cp936其實相當於gb2312,指系統的第936號編碼格式。

fenc(fileencoding)

fenc為當前緩衝區(當前vim開啟這個檔案)檔案自身的編碼,從磁碟讀檔案時,vim會對檔案編碼檢查,如果檔案的編碼與vim內部編碼(enc)不同,vim就會對文字做編碼轉換,將fenc設定為檔案的編碼。vim寫檔案到磁碟時,如果enc與fenc不一樣,vim就做編碼轉換,轉換成編碼fenc儲存檔案。在windows下你可以藉由notepad++等編輯器檢查檔案是什麼編碼的。由於fenc是在開啟檔案時由vim自動檢測的,所以如果文章中有亂碼也沒法通過重新設定fenc來糾正,設定fenc只能改變文字的編碼格式。

fencs(fileencodings)

這是乙個字元編碼的列表,編碼的自動識別就是通過設定fencs實現的。當開啟乙個檔案時,vim會按照fencs中編碼的順序進行解碼操作,如果匹配成功就用該編碼來進行解碼,並把這種編碼設為fenc的值。這裡的匹配成功指的是vim能正確解碼,不會出錯,但是不保證沒有亂碼,所以fencs編碼列表的順序設定很關鍵,由於lanin1是iso8859-1,屬於國際化的標準編碼,他能表示任何字元,也就用於也不會出錯,但是我們看到的可以是「亂碼」。 所以一般fencs設定的順序是這樣子的:lan1放到最後面

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
tenc(termencoding)

終端使用文字編碼,或者說是vim用於螢幕顯示時的編碼,顯示的時候vim會把內部編碼轉換為螢幕編碼再輸出,也就是說我們從螢幕上看到的字元都是tenc編碼的字元,如果為空,預設就是enc。windows平台gvim會忽略掉tenc。一般就是從乙個終端遠端登陸到linux系統時候tenc會起作用。

亂碼問題

如果碰到了亂碼問題,只要你把enc,fenc統一設成utf-8問題都會解決了。下面這段配置就是我的vimrc檔案的關於解決亂碼配置的**段:

" 設定vim內部編碼格式

set encoding=utf-8

" 解決windows下如果encoding設定utf-8,選單會亂碼問題

set langmenu=zh_cn.utf-8

language message zh_cn.utf-8

source $vimruntime/delmenu.vim

source $vimruntime/menu.vim

"預設檔案編碼

set fileencoding=utf-8

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

參考:

VIM編碼設定

vim編碼設定 vim裡面的編碼主要跟三個引數有關 enc encoding fenc fileencoding 和fencs fileencodings fenc是當前檔案的編碼,也就是說,乙個在vim裡面已經正確顯示了的檔案 前提是你的系統環境跟你的enc設定匹配 你可以通過改變 fenc後再w...

vim編碼設定

於 對於fedora來說,vim的設定一般放在 etc vimrc檔案中,不過,建議不要修改它。可以修改 vimrc檔案 預設不存在,可以自己新建乙個 寫入所希望的設定。我的.vimrc檔案如下 setencoding utf 8 setfileencodings ucs bom,utf 8,cp9...

vim 設定編碼格式

本文主要講解下,讓vim能正確顯示和儲存各種編碼檔案的一些常用方法。vim編碼配置裡面有3個選項,分別是encoding fileencodings fileencoding簡寫分別對應為enc fencs fenc。encoding enc 此專案配置的是vim的預設顯示編碼,如果你開啟的檔案編碼...