一次 Vim 文檔內容亂碼故障處理

一、問題

最近出現一個這樣的問題, 我在vim 某個文件的時候,發現裏面的中文亂碼了, 但是我使用 tail 命令的時候是正常的。

Vim 的時候

image-20210314142248142

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

然後我們切換到我們的用戶,

  1. 執行下 vim /tmp/test.log 退出,這一次是爲了讓 ~/.viminfo 重新生成,
  2. 然後我們再執行下 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 以及相關配置的一個熟悉和提升。 見另外一篇文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章