«Dap» удаляет все?

15

Я знаком с командами "dd" и "d {motion}", но не могу найти "dap" в help.txt vim. Что делает "dap" в обычном режиме и почему? (В качестве альтернативы, как я могу узнать такого рода вещи для себя?)

lsusr
источник

Ответы:

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.

DJMcMayhem
источник
+1! Быть педантичным: diw покидает конечный пробел, а bdw - нет. diw будет таким же, как bde ;-) Подвеска для bdw на самом деле daw, которая использует ту же букву «а», что и штрих в вопросе.
М.Херцкамп
1
@ M.Herzkamp: И все же diwи bdeвсе еще не совсем то же самое: если ваш курсор находится в начале слова. Аналогично, если ваш курсор находится на пробеле между словами, то bdwслово слева dawбудет удалено, а слово справа будет удалено. Я думаю, что первоначальный ответ «по большей части…», вероятно, является лучшим, что мы получим с точки зрения этих эквивалентностей.
wchargin