Windowsでクリップボードを経由する場合も含め、CRLFおよびLFによる改行の違いを検証した結果をまとめる。
CRLFとLF
現在使用されている改行は主に2種類ある。
WindowsではCRLFが、それ以外ではLFが主に使用されている。
VSCodeの改行モードが「CRLF」のとき
まずはVisualStudioCodeで、改行をCRLFに設定したときの結果をまとめる。
確認用スクリプト:
$text = @"
aaa
zzz
"@
$text -replace '\r\n', 'CRLF'
CRLFに設定しているため、上記の例では、"@ @"
で囲まれたヒア文字列中のaaaとzzzの間に、CRLFの改行が入ることが予想できる。
実行結果:
aaaCRLFzzz
\r\nを検索してCRLFという文字列に置換した結果から、改行はCRLFであることが分かる。
次に念のため、LFを表す\nだけをLFに置換してみる。VisualStudioCodeの設定はCRLFのまま変更していない。
確認用スクリプト:
$text = @"
aaa
zzz
"@
$text -replace '\n', 'LF'
実行結果:
LFzzz
この例ではCRは置換されずに残るため、行頭に送られ、aaaが以降の文字列に上書きされているように見える。
VSCodeの改行モードが「LF」のとき
次に、VisualStudioCodeで、改行をLFに設定した結果を示す。
確認用スクリプト:
$text = @"
aaa
zzz
"@
$text -replace '\n', 'LF'
実行結果:
aaaLFzzz
こちらも想定通り、LFを意味する\nがLFという文字列に置きかわっていることから、改行はLFが使用されていることが分かる。
またaaaも表示されていることから、CRが存在しないことが分かる。
クリップボードを経由したときの挙動(Windows)
最後に、LFモードで作成した文字列がクリップボードを経由するとどうなるのか、実験してみる。
なお、OSはWindowsを使用している。
Windowsでは、標準でCRLFが使用されるため、クリップボードを経由するとCRLFに置き換えられることが予想できる。
文字列をクリップボードにコピーした後にクリップボードを取得
VisualStudioCodeでLFの設定で作成した文字列をクリップボードにコピーし、PowerShellでクリップボードを取得してみる。
確認用スクリプト:
# LFモードで作成した文字列
$clipboard = @"
aaa
zzz
"@
# 上記の aaa(改行)zzz の部分をクリップボードにコピー
# クリップボードを取得 (複数行のため-Rawをつける)
$text = Get-Clipboard -Raw
# 確認用
$text -replace '\r\n', 'CRLF'
実行結果:
aaaCRLFzzz
クリップボードから取得したテキストの中にある\r\nが、CRLFという文字列に置換されていることが分かる。
このため、クリップボードを経由したことでLFがCRLFに変換されたことが分かる。
クリップボードから貼り付けて作成した文字列
次に、aaa(改行)zzz の部分を、VisualStudioCodeのLFモードで作成し、一旦クリップボードに切取り、貼付けをする。
クリップボードから貼り付けられたCRLF使用の文字列が、VisualStudioCodeによってLFに変換されていることを確認する。
確認用スクリプト:
# クリップボードから貼り付けて作成した文字列
$text = @"
aaa
zzz
"@
# 上記の aaa(改行)zzz の部分を、LFモードで作成し、クリップボードに切取り、貼付け
# 確認用
$text -replace '\n', 'LF'
実行結果:
aaaLFzzz
CRLFを含むテキストが、VisualStudioCodeによってLFに変換されていることが分かる。