¿Cómo eliminar una palabra y pasar al modo de inserción en Vim?

98

En el modo normal, puedo presionar Ctrl+ Eque borra el resto de la palabra actual y pasa al modo de inserción.

Quiero eliminar toda la palabra, independientemente de la posición del cursor (dentro de la palabra, por supuesto).

Joernsn
fuente

Respuestas:

164

Puede usar "cambiar palabra interna" escribiendo "ciw" para eliminar una palabra en la que se encuentra el cursor.

Los comandos "inner" y "a" son geniales en Vim, también prueba "ci {" dentro de un bloque {}, o "ca {" si también deseas eliminar los caracteres {}. Para traducir estos comandos al inglés y recordarlos mejor, intente: "cambiar el {bloque" interno y "cambiar un {bloque".

Documentación en http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

Kaali
fuente
"caw" se puede utilizar en lugar de "ciw" misma funcionalidad.
Amjith
Mientras que 'caw' y 'ciw' reemplazarán la palabra completa, simplemente 'cw' cambiará de la posición actual del cursor al final de la palabra actual.
Drew Stephens
Edité la respuesta de decir sobre "co {" a "ca {" como lo recordó el comentario de jinxed_coders. Mi antigua personalización implementa comandos "(a) <>" como comandos "(o) uter <>".
Kaali
19
ciwy cawno son exactamente iguales: ciwelimina solo la palabra, también cawelimina el espacio final.
Roberto Bonvallet
5
: ayuda a los objetos en vim a leer más sobre este tipo de selecciones.
Aaron
19

Responda a su pregunta de seguimiento: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.
demasiado php
fuente
3
¿Cómo haría uno esto varias veces seguidas? Cada vez que pega, el búfer se llena con la palabra que pegué.
Ben Gartner
1
@BenGartner Encontré esto en Vim Tips wiki : Use yiwpara copiar la palabra actual, coloque el cursor en la palabra para reemplazar, use ciw<C-r>0. Después de eso, puede colocar el cursor en la siguiente palabra y usar .para rehacer el reemplazo.
siegi
@BenGartner Si todo lo que estamos tratando de hacer es reemplazar todas las instancias de WORD_A con WORD_B, a continuación, sólo tiene que utilizar el modo ex de vim, :%s/a/b/g. apuede ser texto exacto o una expresión regular, y bes con lo que reemplazará todas las coincidencias a. Puede probar las expresiones regulares con el /modo de vim . Reemplace %con un número de línea o rango si no desea sustituir en todas las líneas.
Braden Best
8

Para la segunda pregunta: bPldw

Esto, en orden, lo llevará al principio de la palabra actual, insertará el registro predeterminado delante del cursor, irá al siguiente carácter (lo llevará más allá del final del texto que acaba de insertar) y eliminará el resto de la palabra.

Hank Gay
fuente
5
esto también elimina el espacio después de la palabra. Debería ser bPlde.
0x89
10
No, debería serviwp
aehlke
3

Para la primera pregunta, bcwtambién funciona. Significa " baceptar al principio de la palabra, ccambiar w". Pero creo que ciwes más memorable, lo que significa " change inner word", solo un paso.

Para la segunda pregunta sobre "reemplazar usando pasta", mi solución es "_diwP. Esod elete inner word a un registro que no se preocupan y pASTE el contenido del registro por defecto. Una ventaja es que puede pegar el registro predeterminado muchas veces, porque no se contaminaría. Es un pequeño complejo, así que lo mapeo como nnoremap ,r "_diwP.

Justme0
fuente
2

O tal vez podría usar la secuencia de teclas bdwipara borrar la palabra actual y entrar en el modo INSERT.

ayaz
fuente
1
Puede usar bcwpara ir al principio de la palabra actual y luego cambiar la palabra, lo que deja el modo de inserción.
Hank Gay
Si su cursor ya está en el primer carácter de la palabra, terminará borrando la palabra anterior.
Warren Pena
3
@WarrenPena En ese caso, solo use dwi. Solo tenga cuidado de que la policía no se dé cuenta, ya que DWI es ilegal en la mayoría de los estados.
Braden Best