當我們使用 Unix-like 系統時,有時行結束符 CRLF 會給我們造成不便。比如說如果我們拿別人在 Windows 上編輯的配置檔案用於我們的 Unix-like 系統上的程式時,可能會由於程式無法識別 CR 而導致錯誤。
比如說,我曾經使用行結束符為 CRLF 的 vim 配置檔案用於我的 macOS 上的 vim,結果開啟 vim 時會出現這樣的錯誤提示:
Error detected while processing /Users/xiao/.vimrc[14]../Users/user/.vim/pack/themes/start/dracula_pro/colors/dracula_pro.vim:
line 2:
E492: Not an editor command: ^M
在這種情況下,錯誤的來源是 ^M
字元,這是一個回車符(Carriage Return, CR)。在 Windows 系統中,行尾標記通常為 CRLF(即 \r\n
),而在 Unix 和 Linux 系統,包括 macOS 在內,行尾標記只有一個 LF(即 \n
)。
因此,你需要將檔案的行結束符由 CRLF 轉換為 LF。
解決方法:
-
如果你需要轉換的檔案有很多,你可以藉助 git 的自動轉換行結束符功能:
git init && git add . && git commit -m "tmp" # 建立儲存庫並提交所有檔案 git config core.autocrlf input # 提交到儲存庫時轉換為 LF git rm --cached -r . # 刪除 git 中的快取檔案 git reset --hard # 重置專案檔案
現在所有包含 CRLF 的檔案都將被轉換為 LF。
-
如果你只需要轉換一兩個檔案,可以使用
dos2unix
工具:dos2unix <CRLF_file>
將
CRLF_file
替換為你要轉換的檔名。
參考:Converting the End of Line Sequence from CRLF to LF in any of your project files | GitHub
關於 autocrlf 配置的說明:
true
:提交到儲存庫時使用 LF,檢出時使用 CRLF;input
:提交到儲存庫時使用 LF,檢出時不轉換(還是 LF);false
:不進行任何轉換(如果原來是 CRLF,那麼提交到儲存庫時還是 CRLF,檢出時也還是 CRLF)(並不是這樣,在 macOS 上操作時效果感覺和 input 一樣)
git core.autocrlf 配置說明