なぜ '\r'('\n' ではない) は 'vim' の改行文字を置き換えるのですか?

なぜ '\r'('\n' ではない) は 'vim' の改行文字を置き換えるのですか?

vimエディタでコマンドモードを使用して、改行文字(\n)を2つの改行文字()に置き換えたいと思います。\n\nvim

入力ファイルの内容:

This is my first line.
This is second line.
  • 私が試したコマンド:
    :%s/\n/\n\n/g
    
    ただし、以下のように文字列を不要な文字に置き換えます。
    This is my first line.^@^@This is second line.^@^@
    
  • その後、次のコマンドを試しました。
    :%s/\n/\r\r/g
    
    うまくいきます。

2番目のコマンドが正しく機能する理由を説明できますか?

答え1

奇妙なこと\nに、vimでは代替改行を意味するのではなく、空であることを意味します。 ASCII nulは^@Ctrl+ @)です。

歴史的に、viは^MCtrl+ M)を改行文字の行終端に置き換えました。\rvimと同じようにC言語などの拡張機能がvimに追加されましたが、^M開発者は\nMeanをnullに設定することにしました。変えるテキスト。これは用途に合わない。探す、改行文字を検索します。

追加資料:

答え2

1つの改行文字を2つの改行文字に置き換えるには、次のようにします。 :%s/\n/\r\r/g

\n- 検索時に改行、交換時に空

\r- 交換中の改行文字

答えは質問にあります。作者はタイトルで「どうやって」を尋ね、内容から「なぜ」を尋ねます。人々は実際に質問を受け取るとは思わないときに「どのように」への答えを見つけるためにこのページを訪問します。それを調べるのに時間がかかりました。

答え3

この試み:

%s/$/^V^M/

どこで+^Vと+です。CtrlV^MCtrlM

  • 入力すると文字^Vが印刷され、その上に^文字が印刷Backspaceされ、入力すると次^Mのように表示されます。^M
  • +は標準ttyCtrlですV文字通り次文字 - コマンドを実行してstty -attyの特殊文字を表示します。

答え4

Neovim(nvim)とバージョンでVimテストする

NVIM v0.3.0
VIM - Vi IMproved 8.1

改行を削除します。

cell
allele
rs2981578
fgfr2

ここで\n改行文字を一致させます(入れるただし、改行文字を使用してください\r):

:'<,'>s/\n/|/g

cell|allele|rs2981578|fgfr2

改行文字を追加:

いいえ:

cell|allele|rs2981578|fgfr2

:'<,'>s/\n/|/g

cell^@allele^@rs2981578^@fgfr2

^@LFの発音区別記号(ラインフィード、参照)。 http://vimhelp.appspot.com/digraph.txt.html#digraphs-default)

例:

cell|allele|rs2981578|fgfr2

:'<,'>s/|/\r/g

cell
allele
rs2981578
fgfr2

OPの問題(\n1つを2つに置き換える方法\n\n)を解決するには、もう1つを追加してください\r

cell
allele
rs2981578
fgfr2

:'<,'>s/\n/\r\r/g

cell

allele

rs2981578

fgfr2

...つまり、元の改行文字(\n)を一致させ、\r\rそれを2つの改行/キャリッジリターン文字()に置き換えます。

関連情報