Ответы:
"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
.
diw
и bde
все еще не совсем то же самое: если ваш курсор находится в начале слова. Аналогично, если ваш курсор находится на пробеле между словами, то bdw
слово слева daw
будет удалено, а слово справа будет удалено. Я думаю, что первоначальный ответ «по большей части…», вероятно, является лучшим, что мы получим с точки зрения этих эквивалентностей.