Vim 顯示亂碼核心在於四個編碼相關選項設定不當:encoding、termencoding、fileencoding、fileencodings。理解其運作機制即可精準修正。
| 參數 | 角色 | 建議值 |
|---|---|---|
encoding | Vim 內部記憶體編碼 (緩衝區、暫存器、腳本字串) | utf-8 (不可中途變更,僅在 .vimrc 設定) |
termencoding | 終端機顯示編碼 (Vim 將 internal encoding 轉為此編碼輸出) | 若終端為 UTF-8 可不設;SSH 連線若為 Big5/GBK 則設為對應值 |
fileencoding | 當前檔案磁碟儲存編碼 (讀取時偵測、寫入時轉換) | 由 Vim 自動偵測設定,不可手動修正已讀檔案 |
fileencodings | 自動偵測優先順序列表 (嚴格→寬鬆) | ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 |
" 內部編碼
set encoding=utf-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
" 終端編碼 (視實際環境調整)
" set termencoding=utf-8
" 自動偵測優先順序
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
:e ++enc=utf-8 filename.txt
:e ++enc=gbk filename.txt
encoding=utf-8,設定 termencoding=gbk 讓 Vim 顯示時轉碼,編輯不丟字。termencoding 無效,GTK2 固定 UTF-8,Windows 版 GVim 忽略此選項。:set fileencoding=gbk → :w。
核心原則:encoding=utf-8固定內部編碼,fileencodings由嚴格到寬鬆排序,termencoding僅在終端編碼與內部不同時設定。亂碼多半是fileencodings順序錯誤導致誤判,調整順序即可解決 90% 情況。
Linux exit vs _exit 系統調用差異全解析:緩衝區清理、atexit 與進程終止機制
Linux 雙伺服器 IP 無縫切換實戰:ifconfig 別名介面 + arping 免費 ARP 宣告秒級遷移
Linux 登入介面個性化:/etc/bashrc、/etc/motd、~/.bashrc 打造專屬歡迎畫面
Linux TSO (TCP Segmentation Offload) 實現原理:網卡硬體分段降低 CPU 負載
Linux 使用 cgroups 管理 CPU 資源完整指南
Linux 修改密碼提示 "based on a dictionary word" 解決方案