これには特定の歴史的理由がありますか?
背景 —(質問を既に理解している場合は、この部分をスキップできます。)
中級/上級vi
ユーザーが知っているようにy
、 "yank"コマンドは次の移動コマンドで指定されたテキストをヤンク(コピー)します。* ye
単語の最後までヤンクし、y0
カーソル位置から行頭までヤンクしますy_
現在の行全体をy$
ヤンクし、カーソル位置から現在の行の最後までヤンクします。
d
(削除)コマンドとc
(変化する)コマンドが両方同様にこれらの動きのすべてで使用することができます。
dd
は、d_
現在の行全体の同義語であり、削除します。同様に、現在の行のcc
同義語でc_
あり、変更します(つまり、すべてのテキストを削除し、行の先頭で挿入モードにします)。**
「yank」コマンドはこの規則に従います。yy
のように現在の行全体をヤンクしますy_
。
同義語の別のセットがあります:D
は同義語でd$
あり、カーソル位置から行末までを削除します。 C
は同義語でc$
あり、カーソル位置から行末までテキストを変更し、挿入モードにして新しいテキストを入力します。
しかし、Y
ある別の同義語yy
かy_
とヤンクます全体のラインをあなたから期待通りだけでなく、カーソルから行末までC
とD
パターン。
Vimの下位互換性を維持するためにVimでこのように保持されていることを理解していvi
ます:help Y
。
「Y」をカーソルから行末まで(より論理的ですが、Vi互換ではない)動作させたい場合は、「:map Y y $」を使用します。
だから、これはからのホールドオーバーですvi
。いいよ
しかし、そもそもコマンドがそのように設計されたのはなぜですか?これまでに何か論理はありましたか?
*具体的には、レジスタ0にテキストを配置し、名前のないレジスタをレジスタ0に向けます。
**これS
は私の質問には関係ありませんが、cc
またはの別の同義語ですc_
。