“ dap”会删除所有内容吗?


15

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

Answers:


29

“ 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
@ M.Herzkamp:但是diwbde仍然不完全相同:如果光标位于单词的开头。同样,如果光标位于单词之间的空白处,bdw则将删除左侧的单词,同时daw删除右侧的单词。我认为原始答案的“大部分……”可能是我们从这些对等方面获得的最好结果。
wchargin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.