2009-09-04 12 views
86

En el modo normal que puede golpear Ctrl + E que borra el resto de la palabra actual y pasa al modo de inserción.¿Cómo eliminar una palabra y pasar al modo insertar en Vim?

Quiero eliminar la palabra completa, independientemente de la posición del cursor (dentro de la palabra, por supuesto). Además, ¿cómo puedo reemplazar la palabra actual con lo que esté en el registro predeterminado?

Respuesta

146

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

Los comandos "interno" 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: "change inner {block" y "change a {block".

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

+0

" caw "se puede usar en lugar de" ciw "la misma funcionalidad. – Amjith

+0

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. –

+0

Modifiqué la respuesta de decir "co {" a "ca {" como lo recuerda el comentario de jinxed_coders. Mi antigua personalización implementa los comandos "(a) <>" como "(o) uter <>". – Kaali

8

Para la segunda pregunta: bPldw

Esto, a su pedido, llevará al principio de la palabra actual, inserte el registro por defecto delante del cursor, vaya al siguiente carácter (que le llevará más allá de la fin del texto que acaba de insertar), y elimine el resto de la palabra.

+5

esto también elimina el espacio después de la palabra. Debería ser 'bPlde'. – 0x89

+9

No, debería ser 'viwp' – aehlke

2

O bien, tal vez podría utilizar la secuencia de teclas bdwi suprimir la palabra actual y pasará al modo de inserción.

+1

Puede usar 'bcw' para ir al comienzo de la palabra actual y luego cambiar la palabra, lo que deja el modo de inserción. –

+0

Si su cursor ya está en el primer carácter de la palabra, eso terminará borrando la palabra anterior. –

+3

@WarrenPena En ese caso, simplemente use 'dwi'. Solo tenga cuidado de que los policías no se den cuenta, ya que DWI es ilegal en la mayoría de los estados. –

18

respuesta 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. 
+2

¿Cómo se puede hacer esto varias veces seguidas? Cada vez que pegue, el búfer se llena con la palabra que pegué. –

+1

@BenGartner Encontrado esto en [Vim Tips wiki] (http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text#Alternate_method): Use 'yiw' para copiar la palabra actual, coloque el cursor sobre la palabra para reemplazar, use' ciw 0'. Después de eso, puede colocar el cursor en la siguiente palabra y usar '.' para rehacer el reemplazo. – siegi

+0

@BenGartner Si todo lo que intenta hacer es reemplazar todas las instancias de WORD_A con WORD_B, entonces simplemente use el modo ex de vim, ':% s/a/b/g'. 'a' puede ser texto exacto, o una expresión regular, y' b' es lo que reemplazará todas las coincidencias de 'a' con. Puede probar 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. –

2

Para la primera pregunta, bcw también trabajan. Significa "b ack al comienzo de la palabra, c colgado w ord". Pero creo que ciw es más memorable, lo que significa "c colgado i nner w ord", solo un paso.

Para la segunda pregunta sobre "reemplazar usando pasta", mi solución es "_diwP. Es d elete i nner w ord en un registro que no le importa y p aste el contenido del registro predeterminado. Una ventaja es que puede pegar el registro predeterminado muchas veces, porque no estaría contaminado. Es un complejo pequeño, así que lo asigno como nnoremap ,r "_diwP.

Cuestiones relacionadas