¿"Dap" elimina todo?

15

Estoy familiarizado con los comandos "dd" y "d {motion}", pero no puedo encontrar "dap" en vim's help.txt. ¿Qué hace "dap" en modo normal y por qué? (Alternativamente, ¿cómo puedo descubrir este tipo de cosas por mí mismo?)

lsusr
fuente

Respuestas:

29

"dap" en realidad no elimina todo. Por ejemplo, intente poner esto en su búfer:

1
1

2
2

3
3

Luego coloque el cursor en '2' y escriba "dap". Dejará los '1's y' 3's.

Esto se debe a que "dap" elimina un párrafo . De hecho, esa es en realidad la mnemónica: "(D) elete (A) (P) aragraph". Puedes verlo en la ayuda en :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.

Esto se llama un "objeto de texto". Puede leer sobre esto en: :h text-objectso puede leer este increíble artículo sobre objetos de texto.

De cualquier manera, la idea básica de los objetos de texto es que está definiendo los límites de un objeto y luego aplica comandos a todo el objeto, incluso cuando está en el medio. Por ejemplo, estoy seguro de que sabe que puede usar dwpara eliminar una palabra. Pero, ¿y si estás en este escenario?

Hello world
Cursor: ^

Si escribe dw, todavía tendrá la woizquierda. Si escribe diw, se eliminará dentro de la palabra , por lo que en su mayor parte es equivalente a escribir bdw.

¿Cómo puedo descubrir este tipo de cosas por mí mismo?

¡Tuviste la idea básica! Verificar la ayuda siempre es un buen comienzo. En este caso, podría haberse dado cuenta de que des un operador, por lo que la ayuda que realmente estaba buscando era el argumento para el operador, en este caso ap.

DJMcMayhem
fuente
+1! Para ser pedante: diw deja el espacio final, mientras que bdw no. diw sería lo mismo que bde ;-) El colgante para bdw es en realidad daw, que usa la misma "a" que el trazo en la pregunta.
M.Herzkamp
1
@ M.Herzkamp: Y aún así diwy bdetodavía no son lo mismo: si su cursor está al comienzo de una palabra. Del mismo modo, si su cursor está en un espacio entre palabras, bdweliminará la palabra de la izquierda, mientras dawque eliminará la palabra de la derecha. Creo que la respuesta original "en su mayor parte ..." es probablemente la mejor que obtendremos en términos de estas equivalencias.
wchargin