質問から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は改行、\nnullバイト(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%)
%検索と置換の際のは何ですか?