文字列置換(:s/x/y/
)を実行するときに、Vimが^M
を処理する方法にある種の非対称性があるようです。^vimの文字列置換で m対 n
おそらく一例が最適です。
私はこれを行に分割したいと思います。これは正常に動作します:
:s/:/^M/g
(^M
が生成されることに注意しCtrl-V
を入力して、Enter
)
:私はそれを元に戻して、もう一度しようとした場合、
foo
bar
baz
今私はこれがではなく、であることに気付きます。
:s/:/\n/g
ここ
は、結果のテキストは次のとおりです。
言うことですfoo^@bar^@biz
は、それらがASCII NUL
バイト(0x00
)によって結合されています。
質問1:なぜ\n
を交換するとNUL
バイトになるのですか?
ここで、私は「^M
が何らかの形で「行区切り文字」として使われていると思いますが、私はそれを使って作業することができます。
だから私は、別の実験では、1項目あたりの行のテキストファイルで始まるん、
foo
bar
baz
そして今、私はコロンでそれらに参加したいので、それは非常に最初の化身のように見えます上記。
だから私は実行します。
:%s/^M/:/
しかし、これは失敗し、エラーで:
ただし、このコマンドが作業を行います。
:%s/\n/:/
生産:
foo:bar:biz:
を
は(私は、末尾のコロン自分自身を取り除くことができます)
ので質問2:^M
にはないこの場合、中\n
作業を行うのはなぜ?
、最終的には、質問3:なぜ\n
と^M
間のこの非対称性は、それが文字列の置換コマンドの右または左側にありますかどうかに応じてありますか? CRLF
、CR
、およびLF
:
関連:http://stackoverflow.com/q/71323/5048383 – dNitro