質問からVimで改行の文字を置き換えるには? . このように、改行のテキストを置き換えるときは \r を使用する必要があります
:%s/%/\r/g
ただし、文字の行末と改行を置き換える場合は、次のようにできます。
:%s/\n/%/g
マニュアルのどのセクションにこれらの動作が記載されていますか? また、その背後にある理由は何ですか?
質問からVimで改行の文字を置き換えるには? . このように、改行のテキストを置き換えるときは \r を使用する必要があります
:%s/%/\r/g
ただし、文字の行末と改行を置き換える場合は、次のようにできます。
:%s/\n/%/g
マニュアルのどのセクションにこれらの動作が記載されていますか? また、その背後にある理由は何ですか?
http://vim.wikia.com/wiki/Search_and_replaceから:
検索時
...
\n
is newline,\r
isCR
(carriage return =Ctrl-M
=^M
)交換するとき
...
\r
は改行、\n
はヌルバイト (0x00
) です。
\r
<CR> に一致
\n
行末に一致 - バッファテキストではなく文字列で一致する場合、リテラルの改行文字が一致します。
これのもう 1 つの側面は\0
、伝統的に NULL である が
s//\0/
「一致したパターン全体」を意味するために取り入れられていることです。(ちなみに、これは、と冗長で、より長いです&
)。
\0
を意味するために使うことはできないNULL
ので、あなたは使う\n
\n
つまり、を意味するために使用できない\n
ため、 を使用します\r
。\r
を意味するために使用することはできませ\r
んが、誰が意図的にその文字を追加したいのかわかりません。—☈
:help NL-used-for-Nul
技術的な詳細:
<Nul>
ファイル内の文字は<NL>
メモリに保存されます。ディスプレイでは、「^@
」と表示されます。変換は、ファイルの読み取りと書き込み時に行われます。<Nul>
を検索パターンと照合するには、 CTRL-@または「CTRL- V000」と入力するだけです。これはおそらくあなたが期待するものです。<NL>
内部的には、検索パターンで文字がaに置き換えられます。珍しいのは、CTRL-V CTRL-Jと入力すると、も挿入されるため 、ファイル内<NL>
でaも検索されることです。<Nul>
{Viは<Nul>
ファイル内の文字をまったく処理できません}
まず、: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%
)