我熟悉“ dd”和“ d {motion}”命令,但是在vim的help.txt中找不到“ dap”。在正常模式下,“ dap”有什么作用,为什么? (或者,我怎么能自己找到这种东西?)

#1 楼

“ dap”实际上并不删除所有内容。例如,尝试将其放入缓冲区:

1
1

2
2

3
3


,然后将光标放在'2'上并键入“ dap”。它将保留'1'和'3'。

这是因为“ dap”删除了一个段落。实际上,这实际上是个助记符:“(D)删除(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!要学究:diw会留下尾随空格,而bdw不会。 diw与bde相同;-) bdw的垂饰实际上是daw,它与问题中的笔划使用相同的“ a”。

– M.Herzkamp
17年1月25日在14:45

@ M.Herzkamp:但是diw和bde仍然不太一样:如果您的光标位于单词的开头。同样,如果光标位于单词之间的空白处,则bdw将删除左侧的单词,而daw将删除右侧的单词。我认为原始答案的“大部分……”可能是我们从这些对等方面获得的最好结果。

– wchargin
17年1月25日在21:01