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