VIM筆記-編碼(亂碼問題最終解決辦法)

獻(xiàn)上我經(jīng)過測(cè)試以后的最終解決辦法

首先第一步找到VIM的配置文件造虎,windows中的vim的配置文件是:

C:\Program Files\Vim_vimrc

接著修改這個(gè)文本文檔芒率,文檔前面的所有內(nèi)容均不需要?jiǎng)忧城牵灰严旅孢@些代碼加入到最后即可扣猫。

set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030
set imcmdline
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

尤其要注意琳钉,最后的兩行代碼似枕,千萬不能放到配置文件的上面求厕。

解決consle輸出亂碼

language messages zh_CN.utf-8

vim的編碼問題

  1. 首先要明確:

Windows中默認(rèn)的文件格式是GBK(gb2312)戈抄,而Linux一般都是UTF-8离唬。

  1. 在vim中查看文件的編碼方式:set fileencoding ,即可顯示文件編碼格式,如果什么都沒有顯示划鸽,請(qǐng)看第三點(diǎn)输莺。
  2. 如果你只是想查看其它編碼格式的文件或者想解決用Vim查看文件亂碼的問題,那么你可以在~/.vimrc (如果是windows系統(tǒng)裸诽,那么應(yīng)該修改_vimrc)文件中添加以下內(nèi)容:
    set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

這樣嫂用,就可以讓vim自動(dòng)識(shí)別文件編碼(可以自動(dòng)識(shí)別UTF-8或者GBK編 碼的文件),其實(shí)就是依照fileencodings提供的編碼列表嘗試丈冬,如果沒有找到合適的編碼嘱函,就用latin-1(ASCII)編碼打開。

  1. 以指定的編碼打開某文件埂蕊,如打開windows中以ANSI保存的文件:
    vim file.txt -c "e ++enc=GB18030"
  2. 文件編碼轉(zhuǎn)換,在Vim中直接進(jìn)行轉(zhuǎn)換文件編碼,比如將一個(gè)文件轉(zhuǎn)換成utf-8格式:
    :set fileencoding=utf-8
    6.如果已經(jīng)打開了解碼錯(cuò)的文件往弓,想重新設(shè)置編碼格式:
    :edit ++enc=utf8
  3. 查看文件格式
    :set fileformat?
  4. 設(shè)置文件格式為 unix
    :set fileformat=unix

如果有時(shí)間,請(qǐng)看下面的具體解釋:


Vim 有四個(gè)跟字符編碼方式有關(guān)的選項(xiàng)蓄氧,encoding函似、fileencoding、fileencodings喉童、termencoding (這些選項(xiàng)可能的取值請(qǐng)參考 Vim 在線幫助 :help encoding-names)撇寞,它們的意義如下:

  • encoding: Vim 內(nèi)部使用的字符編碼方式,包括 Vim 的 buffer (緩沖區(qū))堂氯、菜單文本重抖、消息文本等。如你的vim的encoding為utf-8,所編輯的文件采用cp936編碼,vim會(huì)自動(dòng)將讀入的文件轉(zhuǎn)成utf-8(vim的能讀懂的方式)祖灰,而當(dāng)你寫入文件時(shí),又會(huì)自動(dòng)轉(zhuǎn)回成cp936(文件的保存編碼)钟沛。

  • fileencoding: Vim 中當(dāng)前編輯的文件的字符編碼方式,Vim 保存文件時(shí)也會(huì)將文件保存為這種字符編碼方式 (不管是否新文件都如此)局扶。

  • fileencodings: Vim自動(dòng)探測(cè)fileencoding的順序列表恨统, 啟動(dòng)時(shí)會(huì)按照它所列出的字符編碼方式 從前到后叁扫,逐一探測(cè) 即將打開的文件的字符編碼方式。因此最好將Unicode 編碼方式放到這個(gè)列表的最前面畜埋,如果都找不到莫绣,那么就會(huì)以 latin1 (ASCII)的方式打開。

  • termencoding: Vim 所工作的終端 (或者 Windows 的 Console 窗口) 的字符編碼方式悠鞍。如果vim所在的term與vim編碼相同对室,則無需設(shè)置。如其不然咖祭,你可以用vim的termencoding選項(xiàng)將自動(dòng)轉(zhuǎn)換成term的編碼.這個(gè)選項(xiàng)在 Windows 下對(duì)我們常用的 GUI 模式的 gVim 無效掩宜,而對(duì) Console 模式的Vim 而言就是 Windows 控制臺(tái)的代碼頁,通常我們不需要改變它么翰。

解釋完了這一堆容易讓新手犯糊涂的參數(shù)牺汤,我們來看看 Vim 的多字符編碼方式支持是如何工作的:
  1. Vim 啟動(dòng),根據(jù) .vimrc 中設(shè)置的 encoding 的值來設(shè)置 buffer浩嫌、菜單文本檐迟、消息文的字符編碼方式。

  2. 讀取需要編輯的文件码耐,根據(jù) fileencodings 中列出的字符編碼方式逐一探測(cè)該文件編碼方式追迟。并設(shè)置 fileencoding 為探測(cè)到的,看起來是正確的 (注1) 字符編碼方式骚腥。

  3. 對(duì)比 fileencoding 和 encoding 的值怔匣,若不同則調(diào)用 iconv 將文件內(nèi)容轉(zhuǎn)換為encoding 所描述的字符編碼方式,并且把轉(zhuǎn)換后的內(nèi)容放到為此文件開辟的 buffer 里桦沉,此時(shí)我們就可以開始編輯這個(gè)文件了。注意金闽,完成這一步動(dòng)作需要調(diào)用外部的 iconv.dll(注2)纯露,你需要保證這個(gè)文件存在于 $VIMRUNTIME 或者其他列在 PATH 環(huán)境變量中的目錄里。

  4. 編輯完成后保存文件時(shí)代芜,再次對(duì)比 fileencoding 和 encoding 的值埠褪。若不同,再次調(diào)用 iconv 將即將保存的 buffer 中的文本轉(zhuǎn)換為 fileencoding 所描述的字符編碼方式挤庇,并保存到指定的文件中钞速。同樣,這需要調(diào)用 iconv.dll由于 Unicode 能夠包含幾乎所有的語言的字符嫡秕,而且 Unicode 的 UTF-8 編碼方式又是非常具有性價(jià)比的編碼方式 (空間消耗比 UCS-2 小)渴语,因此建議 encoding 的值設(shè)置為utf-8。這么做的另一個(gè)理由是 encoding 設(shè)置為 utf-8 時(shí)昆咽,Vim 自動(dòng)探測(cè)文件的編碼方式會(huì)更準(zhǔn)確 (或許這個(gè)理由才是主要的 ;)驾凶。我們?cè)谥形?Windows 里編輯的文件牙甫,為了兼顧與其他軟件的兼容性,文件編碼還是設(shè)置為 GB2312/GBK 比較合適调违,因此 fileencoding 建議設(shè)置為 chinese (chinese 是個(gè)別名窟哺,在 Unix 里表示 gb2312,在 Windows 里表示cp936技肩,也就是 GBK 的代碼頁)且轨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虚婿,隨后出現(xiàn)的幾起案子旋奢,更是在濱河造成了極大的恐慌,老刑警劉巖雳锋,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄绩,死亡現(xiàn)場離奇詭異,居然都是意外死亡玷过,警方通過查閱死者的電腦和手機(jī)爽丹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辛蚊,“玉大人粤蝎,你說我怎么就攤上這事〈恚” “怎么了初澎?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虑凛。 經(jīng)常有香客問我碑宴,道長,這世上最難降的妖魔是什么桑谍? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任延柠,我火速辦了婚禮,結(jié)果婚禮上锣披,老公的妹妹穿的比我還像新娘贞间。我一直安慰自己,他們只是感情好雹仿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布增热。 她就那樣靜靜地躺著,像睡著了一般胧辽。 火紅的嫁衣襯著肌膚如雪峻仇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天邑商,我揣著相機(jī)與錄音础浮,去河邊找鬼帆调。 笑死,一個(gè)胖子當(dāng)著我的面吹牛豆同,可吹牛的內(nèi)容都是我干的番刊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼影锈,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼芹务!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸭廷,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤枣抱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辆床,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佳晶,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年讼载,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轿秧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咨堤,死狀恐怖菇篡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情一喘,我是刑警寧澤驱还,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站凸克,受9級(jí)特大地震影響议蟆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萎战,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一咐容、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撞鹉,春花似錦、人聲如沸颖侄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽览祖。三九已至孝鹊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間展蒂,已是汗流浹背又活。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工苔咪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柳骄。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓团赏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耐薯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舔清,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 字符集和編碼簡介 在編程中常常可以見到各種字符集和編碼曲初,包括ASCII,MBCS,Unicode等字符集体谒。確切的說...
    蘭山小亭閱讀 8,490評(píng)論 0 13
  • 出自: http://www.cnblogs.com/joeyupdo/archive/2013/03/03/29...
    2625K閱讀 657評(píng)論 1 1
  • 來,干了這碗安利 寫這篇文章的目的其實(shí)就是為了安利一下我的圖標(biāo)庫:iconoo臼婆,所以抒痒,開門見山,star吧少年少婦...
    茄果閱讀 4,464評(píng)論 5 13
  • 2017年6月29日星期四 剛才看到吳老師發(fā)的相冊(cè)颁褂,好感動(dòng)故响,受孩子們的影響,也流下感動(dòng)的淚水痢虹。多么深厚的師生情被去!怪...
    孫建勝_fa1a閱讀 160評(píng)論 0 0
  • 家里最近都很冷。很大很大的風(fēng)奖唯,心情好的時(shí)候風(fēng)再大也感覺的到快樂惨缆,不好的時(shí)候就只有冷了。 穿了秋衣秋褲丰捷,收養(yǎng)了一只小...
    Lww醬閱讀 275評(píng)論 0 0