質問からVimで改行の文字を置き換える方法は?。次のように、改行のテキストを置き換えるときは\ rを使用する必要があります
:%s/%/\r/g
しかし、文字の行末と改行を置き換えるときは、次のようにできます。
:%s/\n/%/g
マニュアルのどのセクションがこれらの動作を文書化しており、それらの背後にある理由は何ですか?
質問からVimで改行の文字を置き換える方法は?。次のように、改行のテキストを置き換えるときは\ rを使用する必要があります
:%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
nullバイト(0x00
)です。
:h :s%
、特に最後の段落をご覧ください。(経由:h :s
)
これのもう1つの側面\0
は、伝統的にNULLであるが、s//\0/
「一致したパターン全体」を意味するために使用される
ことです。(ちなみに、これはと冗長で、より長いです&
)。
\0
することはできないNULL
ので、\n
\n
することはできない\n
ので、を使用します\r
。\r
を意味するために使用することはできません\r
が、わざとそのcharを誰が追加したいのかわかりません。—☈
\n
です。素晴らしい答え。
:help NL-used-for-Nul
技術的な詳細:
<Nul>
ファイル内の文字は<NL>
メモリと同じように保存されます。ディスプレイでは「^@
」と表示されます。ファイルを読み書きするときに変換が行われます。を<Nul>
検索パターンに一致させるには、CTRL- @または " CTRL-V 000"を入力するだけです。これはおそらくあなたが期待しているものです。内部的には、文字は<NL>
検索パターンでa に置き換えられます。珍しいのは、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%
)
%
検索と置換の際のは何ですか?