Windows 預設編碼 GBK/GB2312/CP936,Linux 預設 UTF-8,跨平台開啟含中文註解的原始碼常出現亂碼。本文教你配置 Vim fileencodings 自動偵測編碼,徹底解決亂碼困擾。

# 1. 安裝 vim (若未安裝)
sudo apt-get install vim
# 2. 編輯用戶設定檔
vim ~/.vimrc
" 基本顯示設定
set number " 顯示行號
syntax on " 語法高亮
set showmode " 左下角顯示模式
set autoindent " 自動縮排
" === 核心:編碼自動偵測優先序 ===
" 依序嘗試:UTF-8 → UCS-BOM → GB18030 → GBK → GB2312 → CP936
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
" 終端機輸出編碼
set termencoding=utf-8
" Vim 內部編碼 (建議統一 UTF-8)
set encoding=utf-8
| 參數 | 功能 | 設定值解析 |
|---|---|---|
fileencodings | 讀取檔案時**嘗試的編碼順序** (逗號分隔) | 優先 UTF-8,其次含 BOM 的 UCS,再來中文常用 GB 系列 |
termencoding | 終端機輸出編碼 | 設為 UTF-8 配合現代終端機 |
encoding | Vim 內部記憶體編碼 | 統一 UTF-8,支援多語言混雜 |
fileencoding | **寫入檔案時**使用的編碼 | 若需輸出 GBK:set fileencoding=gbk 存檔前手動設定 |
# 建立 GBK 編碼測試檔 (在 Windows 或用 iconv)
echo "測試中文" | iconv -f utf-8 -t gbk > test_gbk.txt
# Ubuntu Vim 開啟
vim test_gbk.txt
# 左下角應顯示 [gbk] 或 [cp936],中文正常顯示
# 強制以 GBK 開啟
vim -c 'e ++enc=gbk' filename
# 另存為 UTF-8
:set fileencoding=utf-8
:w newfile.txt
# 另存為 GBK (給 Windows 同事)
:set fileencoding=gbk
:w win_file.txt
# 安裝工具
sudo apt-get install convmv
# 遞歸轉換檔案內容編碼
find . -type f -name "*.java" -o -name "*.cpp" -o -name "*.h" | \
xargs -I{} sh -c 'iconv -f gbk -t utf-8 "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {}
# 或使用 enca 自動偵測並轉換
sudo apt-get install enca
enconv -L zh_CN -x utf-8 *.java
files.encoding 設 autoDetect 或 gbk,底部狀態列可手動切換ConvertToUTF8 套件File → File Encoding → GBK (專案級) 或 IDE 預設 UTF-8一次設定 fileencodings,Vim 即能智慧識別 Windows/Linux 檔案編碼,跨平台協作零亂碼。