プロジェクト内でWinユーザーとmacユーザーが混在したことにより、改行コードがCRLFのファイルとLFのファイルが混在する形となってしまい、LFに統一する対応を行なった際のメモ。
※LF→CRLFの置換だと勝手が違うようなので、あくまでCRLF→LFの前提で書いていきます。
下準備:VSCodeで改行コードを可視化する
改行を可視化するプラグインをインストールします。
下記以外にも種類があるので、自分が使いやすいものを選びましょう。
code-eol
→様々な改行記号に対応しています。
line-endings
→CR、LFという文字で改行が表されます。
見た目がわかりやすかったので今回はこちらを使いました。
line-endingsで改行を可視化する際は、VSCodeの設定からsettings.jsonを開き、以下を追記します。
"editor.renderControlCharacters": true
CRLFを含むファイルを検索
今回はCRLF→LFの置換を行うので、CRLFを含むファイルを検索します。
VSCode上で検索
検索タブを開き、入力バーの「正規表現を使用する」 (.*
←こんなボタン)をONにします。
この状態で、検索バーに \n
や \r\n
と入力して検索すると、該当する改行コードを含むファイルがヒットします。
(ファイルの数によっては膨大な検索結果がヒットしVSCodeに絞り込みを要求されますので、あまりお勧めではないかもしれません)
コマンドで検索
置換時にコマンドを流用できることを考えるとこちらがおすすめです。
cdコマンドで置換対象のファイルがあるディレクトリに移動し、以下のコマンドを実行します。
// 例) カレントディレクトリの全てのファイルから検索
$ find . -type f | xargs file | grep CRLF
// 例) phpファイルに限定して検索
$ find . -name '*.php' | xargs file | grep CRLF
findコマンドのオプションを変えることで検索条件を変えられます。
CRLF→LFに置換する
検索コマンドの延長で、置換対象のファイルを引数として(xargs
コマンドで渡して)改行コードを置換するコマンドを(先ほどと同じカレントディレクトリで)実行します。
以下はnkf
コマンド、dos2unix
コマンドを用いた方法です。
// nkfコマンドを使用
find . -type f | xargs file | grep CRLF | awk -F: '{print $1}' | xargs nkf -Lu --overwrite
// dos2unixを使用
find . -type f | xargs file | grep CRLF | awk -F: '{print $1}' | xargs dos2unix
改めてCRLFを含むファイルを検索して、何もヒットしなければOK。