一、問題
最近出現一個這樣的問題, 我在vim 某個文件的時候,發現裏面的中文亂碼了, 但是我使用 tail 命令的時候是正常的。
Vim 的時候
Tail
二、問題原因
綜上所述,我們其實就可以知道,應該是 vim 的問題了,應該是vim 打開文件使用的編碼格式有問題。
我們查看我們當前用戶的vim配置 ~/.viminfo
。
[djx@localhost ~]$ grep 'encoding' ~/.viminfo
# Value of 'encoding' when this file was written
*encoding=latin1
[djx@localhost ~]$
我們發現我們的 默認encoding 是 latin1
Latin1是ISO-8859-1的別名 有些環境下寫作Latin-1。ISO-8859-1編碼是單字節編碼,向下兼容ASCII,其編碼範圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號。 不支持中文的,
這個是不對,應該使用我們的 utf-8
。
三、問題解決
3.1 更改 ~/.viminfo
我們第一想法是 直接更改 ~/.viminfo
, 將 *encoding 設置爲 utf-8
。 但是我們發現每次更改完文件後,這個直接失效了。 encoding 的值還是變回了 *encoding=latin1
。 因爲 ~/.viminfo
這個文件是會記錄我們之前編輯的文件以及文件。在vim中操作的行爲,vim會自動記錄下來,保存在 ~/.viminfo
文件中。
這樣爲了方便下次處理,
如:vim打開文件時,光標會自動在上次離開的位置顯示。
原來搜索過的字符串,新打開文件時自動高亮顯示。~/.viminfo 文件是系統自動生成。
3.2 更改 /etc/vimrc
我們在 /etc/vimrc
末尾文件加上 set encoding=utf-8
。
然後我們切換到我們的用戶,
- 執行下
vim /tmp/test.log
退出,這一次是爲了讓~/.viminfo
重新生成, - 然後我們再執行下
vim /tmp/test.log
就可以看到沒有亂碼了。
並且 ~/.viminfo
的 *encoding=utf-8
了。
[djx@localhost ~]$ grep 'encoding' ~/.viminfo
# Value of 'encoding' when this file was written
*encoding=utf-8
如果我們按照上面的執行沒有成功,我們可以嘗試強制重新生成
.viminfo
. 就是把 viminfo 給重命名或者刪除,讓系統重新生成。mv ~/.viminfo ~/.viminfo.bak
四、問題延升
也就是對 vim 以及相關配置的一個熟悉和提升。 見另外一篇文章。