「dap」はすべてを削除しますか?


15

「dd」および「d {motion}」コマンドについてはよく知っていますが、vimのhelp.txtに「dap」が見つかりません。「dap」は通常モードで何をしますか、またその理由は何ですか?(あるいは、自分でこの種のことをどのようにして見つけることができますか?)

回答:


29

「dap」は実際にはすべてを削除するわけではありません。たとえば、これをバッファに入れてみてください:

1
1

2
2

3
3

次に、カーソルを「2」のいずれかに置き、「dap」と入力します。「1」と「3」のままにします。

これは、「dap」が段落を削除するためです。実際、それは実際にはニーモニックです:「(D)elete(A)(P)aragraph」。以下のヘルプで確認できます:h ap

                            *v_ap* *ap*
ap          "a paragraph", select [count] paragraphs (see
            |paragraph|).
            Exception: a blank line (only containing white space)
            is also a paragraph boundary.
            When used in Visual mode it is made linewise.

これは「テキストオブジェクト」と呼ばれます。これらについては、以下で読むことができます:h text-objects。または、テキストオブジェクトに関するこのすばらしい記事を読むことができます。

いずれにせよ、テキストオブジェクトの基本的な考え方は、オブジェクトの境界を定義し、オブジェクトの真ん中であってもオブジェクト全体にコマンドを適用することです。たとえばdw、単語を削除するために使用できることを知っていると確信しています。しかし、このシナリオにいる場合はどうでしょうか?

Hello world
Cursor: ^

を入力するとdw、まだwo左があります。を入力diwすると、単語の内部が削除されるため、ほとんどの場合はを入力するのと同じbdwです。

この種のことを自分で調べるにはどうすればよいですか?

基本的な考えがありました!ヘルプを確認することは常に良いスタートです。この場合、それがd演算子であることに気付くことができたので、本当に探していたヘルプは、この場合の演算子への引数でしたap


+1!独創的であること:diwは末尾スペースを残しますが、bdwは残しません。diwはbdeと同じです;-) bdwのペンダントは実際にはdawであり、問​​題のストロークと同じ「a」を使用します。
M.ヘルツカンプ

1
M.Herzkamp @:まだdiwbdeまだかなり同じではありません。もしあなたのカーソルの単語の先頭に。同様に、カーソルが単語間のスペースにある場合bdw、左側dawの単語は削除されますが、右側の単語は削除されます。元の答えの「大部分」は、おそらくこれらの同等性に関して得られる最高のものだと思います。
wchargin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.