次のテキストがある場合:
foo
bar
視覚的に選択してコピーします。
テキストは名前のないレジスタに保存され、"
その内容は:reg "
次のとおりです(の出力)。
"" foo^Jbar^J
このチャートによると、^J
改行のキャレット表記のようです。
次のようにa
入力して、名前のないレジスタをレジスタに複製する場合::let @a = @"
その内容(の出力:reg a
)は次のとおりです。
"a foo^Jbar^J
変わらなかった。
を入力して検索レジスタに複製した場合、:let @/ = @"
その内容(の出力:reg /
)は次のとおりです。
"/ foo^@bar^@
前のチャートによると、^@
Nullキャラクターのキャレット表記です。
なぜ改行は検索レジスター内で自動的にヌル文字に変換されるのa
ですか?
コマンドライン(またはの検索内/
)に名前のないレジスタを挿入する場合、を入力して:<C-R>"
、次のように挿入します。
:foo^Mbar^M
繰り返しますが、最後のチャートによると、^M
キャリッジリターンのキャレット表記法のようです。
コマンドラインで改行がキャリッジリターンに自動的に変換されるのはなぜですか?
編集:
通常、次のように入力してリテラル制御文字を挿入できます。
<C-V><C-{character in caret notation}>
たとえば、を<C-R>
入力してリテラルを挿入できます<C-V><C-R>
。
一見どんな制御キャラクターに対してもできます。
しかし、私は私が入力した場合ので、私は、バッファ内またはコマンドラインでリテラルLFを挿入することができないんだということに気付きました:<C-V><C-J>
それは挿入^@
、ヌル文字を、代わりに^J
。
LFが検索レジスタ内でNULに変換されるのと同じ理由ですか?
編集2:
では:h key-notation
、これを読むことができます:
<Nul> zero CTRL-@ 0 (stored as 10) <Nul>
<NL> linefeed CTRL-J 10 (used for <Nul>)
stored as 10
最初の行の一部used for <Nul>
2行目は、LFとNULとの間の重なりのいくつかの並べ替えがあることを示している可能性があり、そして、彼らは同じものとして解釈される可能性があること。前のコマンドを実行した後ので、しかし、彼らは、同じことをすることはできません:let @/ = @"
I型の場合、n
通常モードでは、2行の次の発生を取得するfoo
とbar
、代わりに正の一致を得るための、私は次のエラーメッセージがあります。
E486: Pattern not found: foo^@bar^@
このリンクのほかに、NULは文字列の終わりを示し、LFはテキストファイルの行の終わりを示すと説明しているようです。
そして、NULがstored as 10
ヘルプにあるように、LFと同じコードである場合、Vimはどのように2の違いを作ることができますか?
編集3:
10
ヘルプにあるように、LFとNULは同じ10進コードでコーディングされているかもしれません。また、Vimはコンテキストのおかげで2つの違いをもたらします。10
検索およびコマンドレジスタを除き、10進コードがバッファまたはレジスタにある文字と一致する場合、LFと解釈します。
しかし、検索:reg /
のコンテキストではend of line in a file
、文字列がファイルではないためにVimは概念が意味をなさない文字列のみを検索するため、検索レジスタ()ではNULとして解釈します(それでも\n
検索パターンでアトムを使用しますが、それはおそらく正規表現エンジンの機能ですか?)したがって10
、最も近い概念(end of string
≈ end of line
)であるため、自動的にNULとして解釈されます。
同様に、コマンドライン/コマンドレジスタ(:reg :
)では、コード10
をCRとして解釈しますend of line in a file
。ここでの概念は意味をなさないためです。最寄りのコンセプトはend of command
Vimの解釈ので10
打撃があるため、CRなどEnter
のコマンドを実行/エンドへの道であるとCRを押すと同じであるEnter
ときを持つリテラル1のインサート以来、<C-V><Enter>
、^M
表示されています。
10
コンテキストに応じてコードが変更される文字の解釈かもしれません:
- バッファ内の行末(
^J
) - 検索の文字列の終わり(
^@
) - コマンドラインのコマンドの終わり(
^M
)
someFunction(arg1, "")
、arg 2が""
「引用符の間の項目で、文字通り何もない-「空」。NULLが表示される場合があります。これを確認する方法-しかし、考えられる原因として
\r
と\n
違い:substitute
も参照してください。
NULL
文字の発生は、文字列を処理しているC関数によって引き起こされます。Cがリンク先の文字列を処理する方法に関するこの説明では、内部的にCがNULL
。NULL
sがテキスト内でめったに出現しないため、この目的に適した文字になります。この結果、Cプログラム(vim)が内部C関数に「空の」文字列を渡そうとした場合、