PowerShell

クリップボードと改行

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に変換されていることが分かる。

プロフィール

興味のあること、つまづいたこと、考えたことなどを書いています。

カテゴリー
タイトルとURLをコピーしました