Чи "dap" видаляє все?


15

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

Відповіді:


29

"dap" насправді не видаляє все. Наприклад, спробуйте вставити це у свій буфер:

1
1

2
2

3
3

Потім поставте курсор або на "2" і введіть "dap". Це залишить '1 та 3'.

Це тому, що "dap" видаляє абзац . Насправді це насправді мнемонічне: "(D) elete (A) (P) араграф". Ви можете побачити його в довідці під :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! Щоб бути педантичним: роса залишає простір, а bdw - ні. diw було б таким же, як bde ;-) Підвіска для bdw - це насправді daw, яка використовує те саме "a", що й штрих у питанні.
М.Герцкамп

1
@ M.Herzkamp: І все-таки diwі bdeдосі не зовсім однакові: якщо ваш курсор на початку слова. Так само, якщо ваш курсор знаходиться на пробілі між словами, то bdwвидалить слово зліва, а справа dawвидалить слово. Я думаю, що оригінальна відповідь "здебільшого ..." - це, мабуть, найкраще, що ми отримаємо з точки зору цих еквівалентів.
wchargin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.