Winユーザがまざっちゃったのか
使ってたエディタがお茶目しちゃったのか。
なぜかCRLFが混ざってしまうことは、現場あるあるだと思います。
そんなときの対処法あれこれ。
まずは現状調査
CRLFがあるファイルを探す
find . -type f | xargs ggrep -lzUP '\r\n'
ぼくのmacのgrepはzオプションなかったのでggrepを使っている。
CotEditorで確認する
GUIエディタで、改行コードやエンコードが分かりやすいテキストエディタに
CotEditorがある。
ぼくのように改行コードでやらかす
ザコザコエンジニアはいれておいて損は無いです。
一個一個Vimで開いて確認する場合
もちろんVimでも確認できます
開いたあと、:se ff?
でファイルフォーマット確認できる。
fileformat=unix
かmacで、行末に^M
がなければOK。fileformat=dos
ってでたら、そのファイル、CRLFで改行してる。
LFに直す
一個一個Vimで開いて直す場合
:e ++ff=unix
でUNIXモードで開き直す
:e ++ff=dos
でDOSモードで開き直す
UNIXモードで開くと見える^M
(CRの意味)を以下のように
全部消してしまえばOK
:%s/\r//g
複数ファイルを一括で、CRLF→LFにしたい
例えばshファイルだけ変更したい時。
find . -name \*.sh -type f | xargs -n 10 nkf -Lu --overwrite
nkfがなかったら
Macならbrewでインストールできる
brew install nkf
再発防止
すぐ気づくのが大事。
今回もコミットしちゃったからめんどくさくなったわけで。
チームの人にWinの人がいないなら、
改行はLF固定にした方が無難なはず。
" 常にunixモードで開く
set fileformats=unix
こうしておけば、自分はCRLFで保存することはないし、
CRLFのファイルは^M
が表示されるので
すぐ気がつくことができる。
dosモードが必要なときは
他のエディタでやってもいいし、
開き直し(:e ++ff=dos
)してから編集してもいい。
ついでにVimで改行を可視化しておく
" 改行を可視化
set list
set listchars=eol:↲
最近のエディタならよくある
「CRLFならこの↲記号、LFならこの↓記号」
みたいな、表示方法ができないっぽい?