VIM 編輯器顯示萬國碼(Unicode)文字,解決亂碼問題

這裡介紹如何設定 Vim 編輯器使用 UTF8 編碼,解決中文字出現亂碼的問題。

現在許多的文字資料都會以萬國碼(Unicode)的方式來編碼,尤其是在包含中文的文字檔時,UTF8 是最常見的編碼格式,而在使用 Vim 開啟這類的文字檔案時,如果預設的編碼不是 UTF8,中文的部分就會跑出亂碼,以下教大家如何設定 Vim 來解決這個問題。


就我個人而言,都是習慣使用 Vim 來寫程式,偶而會在程式碼中放一些中文註解,Vim 沒有設定好編碼的話,就會像這樣出現一堆亂碼。

vim-encoding-1

Vim 呈現亂碼

這時候可以更改 encoding 這個設定,它可用來指定 Vim 內部對於文字編碼方式:

set encoding=utf8

另外 fileencoding 是用來設定特定檔案的編碼,使用 setglobal 可以設定它的預設值。

setglobal fileencoding=utf-8

fileencoding 若設定為空字串則表示跟 encoding 所指定的編碼方式相同。

如果要立即更改 Vim 的設定,可直接使用在指令列命令模式(command-line mode)設定 fileencoding

vim-encoding-2

更改 Vim 的編碼

通常這樣應該就可以正常顯示中文了。

vim-encoding-3

Vim 顯示 UTF8 編碼文字

如果要讓 Vim 自動可以處理這個問題,可以將這段程式碼貼進 vimrc 檔案中:

if has("multi_byte")
  if &termencoding == ""
    let &termencoding = &encoding
  endif
  set encoding=utf-8
  setglobal fileencoding=utf-8
  "setglobal bomb
  set fileencodings=ucs-bom,utf-8,latin1
endif

這樣以後使用 Vim 編輯中文的文字,就不會有亂碼了。

參考資料:wikia

技巧

2 Comments

  1. mm

    高手您好
    我最近剛從 windows十幾年折磨脫離到 linux
    linux mint 19 用得蠻開心的, 不排斥自學與問題排除,不過還真不容易
    (一開始連中文輸入都搞了半天)
    您的網站讓我解決了很多問題 真心感謝

    唯一一個的亂碼問題,不知道有沒有比較一勞永逸的方法?
    (我 language support 裡該裝語言的都裝了)
    工作原因需要中文日文英文, 預設界面理想為英文
    舊檔案裡檔名倒還其次 (大部分正常顯示)
    文字檔裡全部都變為磚塊碼
    我有查到 iconv 等轉碼指令,但若同一檔案中同時有中文日文?

    二為 windows 裡的一些小遊戲程式等,
    用 wine 等方法成功執行了之後,
    視窗界面上都還是磚塊的問題

    真心感謝!!

    • G. T. Wang

      文字編碼問題大概沒有什麼一勞永逸的方法,原則上就是猜猜看原本的編碼是什麼,然後想辦法用 iconv 轉成 UTF-8,中日文夾雜的文字有可能是 Big5 編碼,您可以試試看。

      但若是遇到自己造字的文字,iconv 也是轉不出來,大概只能手動修,或是寫程式修。

      遊戲裡面的文字大概也是這種狀況,不過那個牽涉到 wine 與遊戲程式本身,又更複雜,我自己是盡量避免這種使用方式。

Leave a Reply