2010-10-21 14 views
7

A veces tengo que insertar algunas líneas similares en un archivo que difieren solo en un número de secuencia. Por ejemplo,¿Cómo puedo minimizar las pulsaciones de teclas al insertar líneas similares en vim?

print "func 1"; 
print "func 2"; 
print "func 3"; 
print "func 4"; 
print "func 5"; 

Usando vim, termino copia pegar la primera línea utilizando [yypppp] y luego cambiando las últimas cuatro líneas. Esto es realmente lento si tiene más líneas para insertar.

¿Hay alguna forma más rápida de hacerlo en vim?


Un ejemplo de esto es:

Estado inicial

boot(); 
format(); 
parse(); 
compare(); 
results(); 
clean(); 

Estado final

print "func 1"; 
format(); 
print "func 2"; 
parse(); 
print "func 3"; 
compare(); 
print "func 4"; 
results(); 
print "func 5"; 
clean(); 

Respuesta

12

Registre una macro. Aquí está el flujo de trabajo para su ejemplo particular:

Copie y pegue la primera línea. Entonces,

qa  : Start recording macro to register a 
yy  : Yank current line 
p  : Paste current line in line below 
/\d  : Search for start of number (you can skip this command, the next command automagically moves the cursor to the number) 
C-A  : Control-A increments the number 
q  : Stop recording macro 
[email protected]  : Replay macro 3 times 

Se puede reemplazar con cualquier número 3 para mantener la generación de nuevas líneas print con números incrementados.

Para su segundo ejemplo, que sólo puede añadir

j  : Moves one line down 

después del comando yy, para obtener líneas de comandos y print 's alterna.

+3

En realidad, no necesita hacer '/ [0-9] \ +', VIM Automáticamente mueve el cursor al número – Hasturkun

+0

@Hasturkun: Whoa, eso es genial. – Chetan

+0

Puede reemplazar '/ [0-9] \ +' con un '/ \ d' mucho mejor (no necesita ingresar el número completo en una coincidencia, solo necesita colocar el cursor en un número, entonces' \ + 'es una exageración aquí.' \ d' es un atajo a '[0-9]'. Es más rápido, pero esto no importa aquí. También minimiza el número de teclas que se deben presionar.). – ZyX

1

Tiene complementos que lo hacen. Por ejemplo, visincr. Seleccione visualmente su columna de números y ejecute :I.

Otra forma de hacerlo es grabar una macro. ejecutar qx para empezar a grabar la macro para registrar x, yiw dar un tirón palabra bajo el cursor, j ir una línea hacia abajo, viwp para pegarlo, CTRLUn para incrementar el número nuevo, q para detener la grabación, y luego @x para reproducir los contenidos del registro x.

0

Para este caso particular, podría usar una macro. Hay un buen resumen de cómo hacer números de secuencia en this post.

Debe cambiar el ejemplo en la publicación para escribir primero la línea completa y luego grabar una macro que copie la línea y actualice el contador.

Cuestiones relacionadas