web-dev-qa-db-ja.com

なぜVimの\ rが改行なのですか?

質問からVimで改行の文字を置き換える方法?。このように、改行のテキストを置換するときは\ rを使用する必要があります

:%s/%/\r/g

しかし、文字の行末と改行を置き換えるとき、次のようにできます:

:%s/\n/%/g 

マニュアルのどのセクションにこれらの動作が記載されていますか?また、それらの背後にある理由は何ですか?

243
Vinko Vrsalovic

パターンに関するvimドキュメント から:

\rは<CR>と一致します

\nは行末と一致します-バッファテキストではなく文字列で一致する場合、リテラルの改行文字が一致します。

154
pjz

http://vim.wikia.com/wiki/Search_and_replace から:

検索時

...

\nは改行、\rCRです(キャリッジリターン= Ctrl-M = ^M

交換する場合

...

\rは改行、\nはnullバイト(0x00)です。

190

これのもう1つの側面は、従来はNULLであった\0s//\0/で使用され、「一致したパターン全体」を意味することです。 (ちなみに、これは&で冗長で、それよりも長いです)。

  • したがって、\0を使用してNULLを意味することはできないため、\nを使用します。
  • したがって、\nを使用して\nを意味することはできないため、\rを使用します。
  • したがって、\rを使用して\rを意味することはできませんが、そのcharを意図的に追加したい人が誰なのかわかりません。

—☈

105
rking

:help NL-used-for-Nul

技術的な詳細:

ファイル内の<Nul>文字は、<NL>としてメモリに保存されます。表示では、「^@」として表示されます。ファイルの読み取りおよび書き込み時に変換が行われます。 <Nul>を検索パターンと一致させるには、 CTRL-@ または「 CTRL-V 000」と入力するだけです。これはおそらくあなたが期待することです。内部的に、文字は検索パターンで<NL>に置き換えられます。珍しいのは、 CTRL-VCTRL-J と入力すると<NL>も挿入されるため、ファイル内で<Nul>も検索されることです。 {Viはファイル内の<Nul>文字をまったく処理できません}


47