2009-05-07 16 views
162

Ahora estoy cambiando a VIM desde TextMate. Encontré^+ W en modo inserción muy útil. Sin embargo, me gustaría eliminar no solo la palabra anterior al cursor, sino también la palabra que aparece después o alrededor del cursor.eliminar palabra después o alrededor del cursor en VIM

hice algunas google, pero la única cosa que puedo encontró fue que^+ W para borrar la palabra antes del cursor ...

+2

ctrl + w funciona bien :) – user3526

Respuesta

67

Lo que debe hacer es crear una cuenta de IMAP de una cierta clave para una serie de comandos, en este caso los comandos que van a caer en el modo normal, eliminar la palabra actual y luego poner de nuevo en la inserción:

:imap <C-d> <C-[>diwi 
+9

para puntos extra swap d con c y eliminar el final; ;) – bfabry

+23

": h diw" para muchos aspectos útiles! – klokop

+12

Puntos extra de bonificación por usar . Ejecuta un comando en modo Normal y salta directamente a Insertar, así que algo como 'imap diw' también funciona. Tampoco crea un punto de deshacer, que casi siempre hace. – cormacrelf

34

¿Quiere decir como?

dw 
+7

Tarde en la fiesta, pero dw eliminará de la posición actual al final de la palabra, para eliminar toda la palabra desde el principio use diw or daw –

+1

'dw' won ' t eliminar más allá de un guión u otra puntuación. – ccpizza

62

El siguiente funciona para el modo normal: estoy de acuerdo con la respuesta de Dan Olson que probablemente debería estar en el modo normal para la mayoría de las supresiones. Más detalles a continuación.

Si el cursor está dentro de la palabra:
diw para borrar la palabra (no incluye espacios)
daw para eliminar alrededor de la palabra (incluye espacios antes de la siguiente palabra).

Si el cursor está al comienzo de la palabra, simplemente presione dw.

Esto se puede multiplicar agregando los números habituales de movimiento, p. 2w para avanzar 2 palabras, por lo que d2w elimina dos palabras.

el modo de inserción^w
La idea de utilizar hjkl para el movimiento en Vim es que es más productivo para mantener las manos en la fila central. Al final de una palabra^w funciona muy bien para eliminar rápidamente la palabra. Si ingresó en el modo de inserción, ingresó texto y usó las teclas de flecha para terminar en el medio de la palabra que ha utilizado en contra de la filosofía de la línea de inicio.
Si está en modo normal y desea cambiar la palabra, simplemente puede usar c (cambiar) en lugar de d (eliminar) si desea cambiar completamente la palabra y volver a ingresar el modo insertar sin tener que presione i para volver a escribir.

2

Para borrar una cierta cantidad de caracteres antes del cursor, puede utilizar X. Para borrar un número determinado de palabras después del cursor, puede utilizar dw (varias palabras se pueden eliminar mediante 3dw de 3 palabras, por ejemplo,) Para eliminar todo el cursor en general, puede usar daw.

2

No exactamente seguro acerca de su uso de "antes" y "después", pero ¿ha intentado

dw 

?

Editar: Supongo que está buscando algo para usar en el modo de inserción. Curiosamente, no hay nada que se encuentre en los documentos, ctrl-w parece ser todo lo que hay.

1

En la antigua vi, b mueve el cursor al principio de la palabra antes del cursor, w mueve el cursor al principio de la palabra después del cursor, e mueve el cursor al final de la palabra después de cursor y dw elimina del cursor al final de la palabra.

Si escribe wbdw, elimina la palabra alrededor del cursor, incluso si el cursor está al principio o al final de la palabra. Tenga en cuenta que los espacios en blanco después de una palabra son considerados como parte de la palabra que se eliminará.

20

No parece que haya ninguna incorporada manera de hacerlo en modo insertar, que era la pregunta. Algunas de las otras respuestas son correctas para el modo normal, y también indican que se podría crear una asignación personalizada para agregar la funcionalidad en el modo de inserción.

Honestamente, probablemente debería hacer la mayor parte de su eliminación en modo normal.^W está bien saberlo, pero no estoy seguro de que pueda pensar en una situación en la que prefiero hacerlo que esc para pasar al modo normal y tener los comandos de eliminación más potentes a mi disposición.

Vim es muy diferente de otros editores (incluido TextMate) de esta manera. Si lo usa productivamente, probablemente descubra que no pasa mucho tiempo en el modo de inserción.

+1

Uso^wa lot, sobre todo cuando escribo mal una palabra: en lugar de volver atrás y agregar la letra/etc faltante, simplemente borro todo y empiezo de nuevo. Ir al modo normal solo para borrar una palabra me parece una desperdicio de unas pocas teclas. Por ejemplo, "ejemplo wrd [^ w] palabra" es menos teclas presionadas que "ejemplo wrd [^ c] [dw] [i] palabra" – dbr

+1

dbr: No estaba pidiendo hacer sin embargo, el comportamiento básico^W, eso vim apoya. Él estaba pidiendo borrar toda una palabra mientras estaba en el medio mientras estaba en modo insertar, lo cual es una situación un poco extraña para vim y por lo tanto no hay ningún comando para hacerlo. Siempre puede enlazar^Q a ciw si realmente quiere la funcionalidad. Ah, también el [i] en [^ c] [dw] [i] es redundante, puede usar [^ c] [ciw] – bfabry

+4

"No parece que haya una manera ..." - bien hay innumerables formas de hacerlo, simplemente no hay una * integrada, afaik. Si bien estoy totalmente de acuerdo con la declaración de Dan sobre el modo Insertar frente al modo normal, puede simplemente definir una asignación de modo de inserción; consulte ": ayuda imap" que hace lo que quiera lograr si realmente necesita la funcionalidad en modo inserción. – user55400

437

Modo normal:

daw : delete the word under the cursor  
caw : delete the word under the cursor and put you in insert mode 
+83

Es útil para mí pensar en ello como daw: eliminar una palabra y grabar: cambiar una palabra. – welbornio

+0

Dios he estado usando 'da)' y 'ci)' ¡pero nunca pensé en esto! – Sky

2

La respuesta aceptada falla al tratar de repetir la supresión de las palabras, trate de esta solución en su lugar:

" delete current word, insert and normal modes 
inoremap <C-BS> <C-O>b<C-O>dw 
noremap <C-BS> bdw 

Asigna CTRL-BackSpace, también funciona en modo normal.

+0

Me gusta mejor esta respuesta simplemente porque también funciona en modo normal. – sivabudh

80

creo que es justo daw

daw - delete a word 
+8

daw = borrar una palabra – nXqd

+1

Sé que 'a' es un comando para' Añadir texto después del cursor [count] veces' pero ¿cómo funciona 'daw'? – syntagma

+3

@REACHUS el carácter inicial 'd' indica que 'borrará'. La 'a' es un tipo de parámetro que especifica que la eliminación debe incluir un delimitador. Finalmente, la 'w', otro 'parámetro' -si lo desea- especifica que se eliminará una unidad' word'. –

2

hice dos asignaciones por lo que podría conseguir la coherencia en la inserción y fuera del modo de inserción.

:map <'Key of your choice'> caw

:imap <'Key of your choice'> <'Esc'> caw

13

Para eliminar todos caracteres entre dos espacios en blanco, en modo normal:

daW 

Para eliminar una sola palabra:

daw 
10

Para eliminar la palabra completa el cursor está en uso diw
Para eliminar la palabra completa el cursor está encendido y que le ponga en uso el modo de inserción ciw
si no quieres borrar toda la palabra, sino eliminar de dónde se encuentre el dw/cw

4

El modo Insert no tiene ese comando, desafortunadamente. En VIM, para eliminar toda la palabra debajo del cursor, puede escribir viwd en modo NORMAL. Lo que significa "V isual-block I nner W ord D elete". Use una mayúscula W para incluir signos de puntuación.

Cuestiones relacionadas