271

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

:%s/%/\r/g

ただし、文字の行末と改行を置き換える場合は、次のようにできます。

:%s/\n/%/g 

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

4

5 に答える 5

229

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

検索時

...

\nis newline, \ris CR(carriage return = Ctrl-M= ^M)

交換するとき

...

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

于 2012-09-12T13:02:55.953 に答える
157

パターンのvimドキュメントから:

\r <CR> に一致

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

于 2008-09-16T15:16:17.540 に答える
132

これのもう 1 つの側面は\0、伝統的に NULL である が s//\0/「一致したパターン全体」を意味するために取り入れられていることです。(ちなみに、これは、と冗長で、より長いです&)。

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

—☈

于 2012-09-12T13:54:48.203 に答える
50

:help NL-used-for-Nul

技術的な詳細:

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


于 2008-09-16T11:57:17.643 に答える
11

まず、:h :s「変更」のドキュメントの「4.2 置換」セクションを開いて参照してください。コマンドが受け入れるものは次のとおりです。

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

patternとについての説明に注意してください。string

{pattern}を参照してください|pattern|
{string}リテラル文字列または
特別なものにすることができます。を参照してください|sub-replace-special|

これで、検索パターンと置換パターンが異なる規則に従うことがわかりました。へのリンクをたどると|pattern|、Vim で使用される正規表現パターン全体を説明するセクションに移動します。

一方、|sub-replace-special|「4.2 Substitute」のサブセクションに移動します。ここには\r、改行/分割を含む置換のパターンが含まれています。

(マニュアルのこの部分へのショートカットは:h :s%)

于 2013-12-10T10:28:54.460 に答える