2012-01-05 18 views
6

A menudo tengo la pieza de código como este:Cómo eliminar de manera eficiente palabra, de colon y de una coma en VIM

it "should do something", :focus do 
    ... 
end 

Cuando quiero borrar , :focus que suele hacer

  1. Ir a la línea 1: 1G
  2. Ir al colon: f:
  3. Eliminar de colon (utilizando alrededor de palabra, por lo que puede repetir): daw
  4. Eliminar focus (simplemente repita la anterior): ..
  5. Eliminar coma (mover a la izquierda y reemplazarlo por espacio): hr<SPACE>.

¿Hay alguna manera de lograr los pasos 3-5 de manera más eficiente?

+2

No directamente su pregunta, pero un atajo para el paso 1: 'gg', es decir.presione la misma tecla dos veces en lugar de presionar dos teclas diferentes ... – Nigu

+0

Sí, claro. Gracias por eso. Estaba usando f para resaltar que el código no va a estar en la primera línea. Simplemente está aquí, en la pregunta :) –

Respuesta

8

Usted puede ir:

  1. 1G a ir a la primera línea
  2. f, para ir a la coma
  3. dE eliminar hasta el próximo final de texto (Word en mayúsculas es cualquier secuencia de caracteres que no es el espacio).
+0

'dE' funciona increíblemente bien aquí. Mejor aún, sugirió @rejj. Pero realmente no entiendo por qué exactamente 'E' salta sobre la coma, el colon y una palabra. Agradecería si pudieras explicar eso. Además, ¿qué es lo contrario a 'E' (moverse en dirección opuesta)? –

+1

'E' y' B' van al final (adelante) y al comienzo (hacia atrás) de una PALABRA. 'gE' y' W' van al final de la PALABRA anterior y al comienzo de la siguiente PALABRA. ': ayuda E',': ayuda B', ': ayuda gE',': ¡ayuda W' te lo dirá! Tenga en cuenta que existen exactamente los mismos comandos sin la letra mayúscula ('w',' b', 'ge' y' e') para los cuales la definición de lo que es una palabra es diferente (los signos de puntuación no son parte de las palabras: ' : help word' y ': help WORD'). – Benoit

3

Con el cursor en la , que podría hacer v, e, e,d.

o d, , e

+0

Ohh, tan simple :) !! Por alguna razón, rara vez pienso en la coma y el colon siendo palabras :) ¡Muchas gracias! –

0

Será mejor espectáculo en el que se encuentra el cursor, pero asumiendo que es después del "fin", que haría esto:

?",<CR>ldt<space>. 
+0

Mostré dónde está el cursor. Está en el colon. Vea el paso 2 en la pregunta. La búsqueda es un movimiento muy impreciso y rompe mi flujo. ¿Qué está haciendo 'ldt '? –

+0

Veo qué es 'ldt '. No lo entendí al principio. Con 'ldt ', entonces aún necesita retroceder y eliminar la coma. Es similar a lo que estaba haciendo en la pregunta. –

1

Con el cursor o el colon que puede hacer dF,dE. El dF, parte eliminará al revés hasta e incluyendo la coma. Luego, dE se eliminará hasta el siguiente carácter de espacio en blanco. Lo bueno de esto es que si no hay una coma anterior esto seguirá haciendo lo mismo. Así que con el código

if :focus, "should do something" do 

Si el cursor está en el colon esta macro eliminar sólo la parte :focus,, a pesar de que va a dejar dos espacios atrás.

+0

¡Agradable! Similar a la sugerencia de @Benoit sin embargo. –

+0

Debería actualizar con más frecuencia: P –

Cuestiones relacionadas