eliminar palabra después o alrededor del cursor en VIM


212

Ahora estoy cambiando VIMde TextMate. En el ^+Wmodo INSERTAR me pareció muy útil. Sin embargo, me gustaría eliminar no solo la palabra antes del cursor, sino también la palabra después o alrededor del cursor.

Busqué en Google, pero lo único que pude encontrar fue ^+Weliminar la palabra ANTES del cursor.

Respuestas:


78

Lo que debe hacer es crear un imap de una determinada clave para una serie de comandos, en este caso los comandos lo colocarán en modo normal, eliminarán la palabra actual y luego lo volverán a insertar:

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

29
": h diw" para muchos objetos útiles!
klokop

12
Puntos de bonificación extra por usar <Co>. Ejecuta un comando en modo Normal y vuelve directamente a Insertar, por lo que algo así imap <C-d> <C-o>diwtambién funciona. Tampoco crea un punto de deshacer, lo que <Esc> casi siempre hace.
zelk

<Co> en modo de inserción me
alegró el

541

Modo normal:

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

125
Es útil para mí pensarlo como daw: borrar una palabra y caw: cambiar una palabra.
welbornio

1
¡Dios que he estado usando da)y ci)nunca pensé en esto!
Cielo

1
Eso es oro Jerry! ¡ORO! Mapeé a esos bebés en mi .vimrcarchivo así: nmap <Leader>d daw ynmap <Leader>c caw
racl101

1
Probablemente valga la pena mencionar que awes un ejemplo de selección de objetos. Puede probar las selecciones de objetos en modo visual para ver qué efecto tienen: vimdoc.sourceforge.net/htmldoc/motion.html#object-select
crantok

103

Creo que es solo daw

daw - delete a word

1
Sé que aes un comando, Append text after the cursor [count] times.pero ¿cómo dawfunciona?
sintagma

3
@REACHUS el carácter inicial ddicta que se 'eliminará'. La 'a' es un tipo de parámetro, que especifica que la eliminación debe incluir un delimitador. Finalmente, la 'w', otra, parametersi lo desea, especifica que wordse eliminará una unidad.
vlad-ardelean

2
¿Cuál es la diferencia entre dwy daw?
AK_

55
@AK_ Respuesta tardía, pero si está en medio de una palabra, dwse eliminará del cursor hasta el final de la palabra, mientras dawque eliminará toda la palabra junto con un espacio. diweliminará toda la palabra sin tocar el espacio en blanco a su alrededor.
Dmiters

67

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

Si el cursor está dentro de la palabra:
diweliminar en la palabra (no incluye espacios)
dawpara 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 para el movimiento, por ejemplo, 2w para avanzar 2 palabras, por lo que d2w elimina dos palabras.

Modo Insertar ^ w
La idea de usar hjkl para moverse en Vim es que es más productivo mantener las manos en la fila de inicio. Al final de una palabra ^ w funciona muy bien para eliminar rápidamente la palabra. Si ha entrado en el modo de inserción, ingresó un texto y usó las teclas de flecha para terminar en el medio de la palabra que ha ido en contra de la filosofía de la fila 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 al modo de inserción sin tener que presionar ipara volver a escribir


42

¿Quieres decir como?

dw

10
Tarde a la fiesta, pero dw eliminará desde la posición actual hasta el final de la palabra, para eliminar toda la palabra desde el principio use diw o daw
Dvid Silva

1
dwno eliminará más allá de un guión u otra puntuación.
ccpizza

* Nota: Esto sobrescribirá el búfer / último tirón. Esta es más una operación de 'Corte', no solo de 'Eliminar'.
MD. Mohiuddin Ahmed

23

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

daW

Para eliminar solo una palabra:

daw 

20

No parece que haya una forma integrada de hacerlo en modo de inserción, que era la pregunta. Algunas de las otras respuestas son correctas para el modo normal, además de señalar que se podría crear una asignación personalizada para agregar la funcionalidad en el modo de inserción.

Honestamente, probablemente deberías hacer la mayor parte de tu eliminación en modo normal. ^ W es bueno saberlo, pero no estoy seguro de poder pensar en una situación en la que prefiera 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 está utilizando productivamente, probablemente encontrará que no pasa mucho tiempo en modo de inserción.


1
Uso ^ wa mucho, principalmente cuando escribo mal una palabra; en lugar de volver y agregar la letra que falta, etc., simplemente borro todo y empiezo de nuevo. Ir al modo normal solo para borrar una palabra parece un desperdicio de unas pocas pulsaciones de teclas. Por ejemplo, "ejemplo wrd [^ w] palabra" es menos pulsaciones que "ejemplo wrd [^ c] [dw] [i] palabra"
dbr

1
dbr: Sin embargo, no estaba pidiendo hacer el comportamiento básico ^ W, que vim admite. Estaba pidiendo eliminar toda una palabra mientras estaba en el medio mientras estaba en modo de inserción, lo cual es una situación un poco extraña para vim y, por lo tanto, no hay un comando para hacerlo. Siempre puede vincular ^ Q a <Esc> ciw si realmente desea la funcionalidad. Ah, también el [i] en [^ c] [dw] [i] es redundante, puede usar [^ c] [ciw]
bfabry

44
"No parece que haya una forma ...", bueno, hay innumerables formas de hacerlo, simplemente no hay una forma integrada, afaik. Si bien estoy totalmente de acuerdo con la declaración de Dan sobre el modo de inserción frente al modo normal, por supuesto, simplemente podría definir una asignación de modo de inserción, consulte ": help imap" que hace lo que quiera lograr si realmente necesita la funcionalidad en el modo de inserción.
user55400

13

Para eliminar la palabra completa que está usando su cursor diw
Para eliminar la palabra completa que está encendido su cursor y para ponerlo en modo de inserción, use ciw
si no desea eliminar la palabra completa pero elimine desde donde estádw/cw


8

Como hay muchas maneras de eliminar una palabra, ilustremoslas.

Suponiendo que edite:

foo-bar quux

e invocar un comando mientras el cursor está en la 'a' en 'barra':

foo-bquux  # dw:  letters then spaces right of cursor
foo-quux   # daw: letters on both sides of cursor then spaces on the right 
foo- quux  # diw: letters on both sides of cursor
foo-bquux  # dW:  non-whitespace then spaces right of cursor
quux       # daW: non-whitespace on both sides of cursor then spaces on the right
 quux      # diW: non-whitespace on both sides of cursor

5

El modo Insertar no tiene dicho comando, desafortunadamente. En VIM, para eliminar la palabra completa debajo del cursor, puede escribir viwden modo NORMAL. Lo que significa " V isual-block I nner W ord D elete". Use mayúsculas Wpara incluir la puntuación.


3

La respuesta aceptada falla cuando intenta repetir la eliminación de palabras, pruebe 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

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


Me gusta más esta respuesta solo porque también funciona en modo normal.
sivabudh

2

Para eliminar una cierta cantidad de caracteres antes del cursor, puede usar X. Para eliminar una cierta cantidad de palabras después del cursor, puede usar dw (por ejemplo, se pueden eliminar varias palabras usando 3dw para 3 palabras). Para eliminar alrededor del cursor en general, puede usar daw.


2

En vi antiguo, bmueve el cursor al comienzo de la palabra antes del cursor, wmueve el cursor al comienzo de la palabra después del cursor, emueve el cursor al final de la palabra después del cursor y dwelimina 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 se consideran parte de la palabra que se va a eliminar.


2

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

dw

?

Editar: supongo que está buscando algo para usar en modo de inserción. Por extraño que parezca, no hay nada que se encuentre en los documentos, ctrl-w parece ser todo lo que hay.


2

Hice dos asignaciones para poder obtener consistencia en el modo de inserción y fuera del modo de inserción.

:map <'Key of your choice'> caw

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


0

Me gustaría eliminar no solo la palabra antes del cursor, sino también la palabra después o alrededor del cursor.

En ese caso, la solución propuesta por OP (es decir, usando <c-w>) se puede combinar con la respuesta aceptada para dar:

inoremap <c-d> <c-o>daw<c-w>

alternativamente (solución más corta):

inoremap <c-d> <c-o>vawobd

Entrada de muestra:

word1 word2 word3 word4
               ^------------- Cursor location

Salida:

word1 word4
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.