Visual Studio Code(VS Code)で改行コードを LF で保存したのに、気づいたら CRLF になってることがあります。
理由は、デフォルトの改行設定が CRLF で、どこかの編集のタイミングで CRLF で保存してしまってるから。
プログラミングで CRLF はきつい。デフォルト設定を変更します。
CRLF の改行コードはなぜ不都合か?
CRLF は俗にキャリッジリターンと言われます。"Carrige Return / Line Feed" の略。一方、プログラミングで使うのは LF(Line Feed)です。
どちらも改行を表すんですが、CRLF だと変なことになります。
キャリッジリターンは『行頭復帰』
もともと、CR と LF は別々の意味を持っていました。キャリッジリターンは行頭復帰でラインフィードは改行。
ASCII 文字コード | |
---|---|
CR | \r |
LF | \n |
CRLF | \r\n |
それがコンピュータの進化で CR と LF のちがいはどうでもよくなり(くわしくは割愛)、改行を CRLF と LF で表現する勢力に分かれます。
普段、使うことになるコンピュータで言えば、Windows は CRLF 、Mac や Linux, Unix などその他は LF 。
Windows の一匹狼状態。
ちがいが無くなったことで合体させた CRLF と、原点を忠実に守る LF に分かれたんですね?
少数派の合体組が世界を席巻して面倒になる
CRLF を採用しているのは少数派ですが、Windows が世界で圧倒的に広がったために CRLF は世界中で使われます。
でも、プログラムを動かすシステムは Unix や Linux の LF 派が圧倒的多数。Windows上で書いた CRLF のコードを LF に変換しないといけません。
だからプログラマーは最初から LF で書くクセがあります。変換が面倒だから。(今は一瞬でできる。)
ファイルを開くと行末に "^M" が鬱陶しいくらい出るのを見たことないでしょうか? CRLF のコードは Linux上では別の文字で認識されるから。
これが嫌われる理由。目がチカチカして集中できません。(プログラミングの動作上は問題ない。)
Windows が広がったと言いましたが、それ以前に MS-DOS が世界を席巻していた。
このころのコンピュータはオフコン(オフィス・コンピュータ)が主流で、大きな部屋に大きなコンピュータシステムが置かれていた。
8bit CPUから16bit CPUに変わった頃に、小さなコンピュータ(パソコン)でもオフコン並みの処理ができるようになった波に乗って MS-DOS は普及。
オフコンのOSはUnix。UnixはMac OSやLinuxの先祖みたいなもの。
この辺が改行コードにも影響したと思う。(40年以上前の話なので詳しくは知らない。)
Windows は CRLF, LF どちらも改行として認識
一方、一匹狼でイキってる Windows は LF も改行として認識されます。Linux上に置くファイルも LF で問題ない。
それなら、改行は LF で書いちゃおうよ、ってなりますよね?
Windowsのエディターでテキスト形式のファイルを開くと、CRLF は『↵』、LFは『↓』と表示されます。
プログラミングの改行は LF が常識です。改行コードを '\n' と無意識に書いてますもんね?
プログラムコードは Git で保存するのが一般的ですが、Git は登録時に改行を変換する機能があります。
ただ、SFTP を使って直接サーバーに転送することもあるので、改行コードを意識しないといけません。
VS Code の設定で LF に変更
VS Code の設定では改行を変更できます。まず設定を開きます。
次に、設定項目の『テキストエディター -> ファイル』に移動して、『Eol』という項目を探してください。(下にスクロールしないと見えない。)
初期設定は『auto』(OSの改行を使う)になっています。
値を '\n' に変更します。とりあえずワークスペースだけを変更して大丈夫。全体的に LF にしたければユーザーの設定も変更しましょう。
(フォルダーは面倒なので放置。)
VS Codeの設定は保存ボタンがありません。設定を変更すると自動保存します。
最後に、設定のjsonファイルにこれが追加されているはず。
"files.eol": "\n"
開いているファイルの改行コードを確認、変更する
設定を変えても、それ以前に編集したファイルの改行コードは変更されていません。ファイルを開いて確認しましょう。
VS Code エディターの右下にどの改行コードを使っているのかが表示されます。
表示されているものをクリックすると変更できます。セレクトメニューがエディターの上部真ん中に表示されるので変更してファイルを保存しましょう。
これで過去に編集したファイルも変更できました。
設定の Eol で変更したので、新規作成したファイルは LF です。これで 改行コードは気になりません。過去のファイルが全部 LF に変更されたらですが。
ひとつ忘れてました。MacやLinuxでは、『auto』でもいいです。OSはLFを使ってるので。そもそもWindows以外で今回のようなことは起きません。