2009-05-21 10 views
5

NO tengo habilitado Python/Ruby. Mi pregunta: Con frecuencia tengo que escribir cosas como las siguientes:¿Cómo puedo obtener una variable de contador en Vim sin python o ruby?

%macro(200701);x gzip /home/test/200701.txt;run; 
%macro(200702);x gzip /home/test/200702.txt;run; 
%macro(200703);x gzip /home/test/200703.txt;run; 
%macro(200704);x gzip /home/test/200704.txt;run; 
%macro(200705);x gzip /home/test/200705.txt;run; 
%macro(200706);x gzip /home/test/200706.txt;run; 
%macro(200707);x gzip /home/test/200707.txt;run; 
%macro(200708);x gzip /home/test/200708.txt;run; 
%macro(200709);x gzip /home/test/200709.txt;run; 
%macro(200710);x gzip /home/test/200710.txt;run; 
%macro(200711);x gzip /home/test/200711.txt;run; 
%macro(200712);x gzip /home/test/200712.txt;run; 

%macro(200801);x gzip /home/test/200801.txt;run; 
%macro(200802);x gzip /home/test/200802.txt;run; 
%macro(200803);x gzip /home/test/200803.txt;run; 
%macro(200804);x gzip /home/test/200804.txt;run; 
%macro(200805);x gzip /home/test/200805.txt;run; 
%macro(200806);x gzip /home/test/200806.txt;run; 
%macro(200807);x gzip /home/test/200807.txt;run; 
%macro(200808);x gzip /home/test/200808.txt;run; 
%macro(200809);x gzip /home/test/200809.txt;run; 
%macro(200810);x gzip /home/test/200810.txt;run; 
%macro(200811);x gzip /home/test/200811.txt;run; 
%macro(200812);x gzip /home/test/200812.txt;run; 

¿Hay una manera rápida de hacer esto en Vim?

por lo general a escribir:

%macro(200701);x gzip /home/test/200701.txt;run; 

A continuación, emita los siguientes comandos:

yy11p10<up>13<right>r2<down>r3<down>r4<down>... 

Así, en otras palabras me pegue la línea 11 veces más, a continuación, utilizando el "reemplazar char" instrucción ejecutada a través de la lista de fechas. A continuación, voy a copiar todo el bloque y en el nuevo bloque a escribir

:s/2007/2008/<enter>12&11<up>12& 

para sustituir 2007 para el año 2008 en el segundo bloque.

Vim es tan poderoso que creo que tiene que haber una mejor manera que reemplazar constantemente de 1 a 12 manualmente en cada una de las líneas.

Respuesta

13

Escribe la primera línea:

%macro(200701);x gzip /home/test/200701.txt;run; 

Entonces, mientras que todavía en esa línea, entrar en modo de comando y grabar una macro un que las copias de la línea (yyp), incrementa el primer número (ctrl- una, escrita ^A), se mueve un carácter hacia la derecha (l) y luego incrementa el otro número:

qayyp^Al^Aq 

(Tenga en cuenta que iniciar y detener la grabación de macros que ocurre con 0 .) juegan actualmente macro un 110 veces:

[email protected] 
+0

+1 Las macros de vim pueden ser un poco aterradoras cuando se accede a ellas (especialmente leyendo el código macro de otros), pero es absolutamente increíble la cantidad de trabajo que pueden ahorrar en tareas de edición de texto repetitivas. Creo que lo mejor es sumergirse y experimentar, una vez que te sientas cómodo con vim y estés al tanto de los comandos para grabar y reproducir macros. –

+0

¡Gracias! ¡Eso fue muy efectivo! – Dan

8

También se puede hacer con vim 7 funciones:

:let t=map(range(200801,200815), '"macro(".v:val.");x gzip /home/test/".v:val.".txt;run;"') 
:put=t 
6

Si tiene las utilidades básicas de Unix/Linux a su disposición hay una manera que es más fácil de recordar, al menos si usted está acostumbrado a utilizar comandos de bloque:

(1) generar la secuencia usando la SEC (1)

:r!seq 200801 200812 

SEC también permite formatear la siguiente manera:

:r!seq -f "\%03.0f" 10 121 

El signo de porcentaje debe ser escapado.

(2) Doble este bloque con los comandos de bloque Vim: Marque con Cv, tirón, poner

(3) Insert (o anexar) el texto entre esto bloquea: Marque con CV, insertar con I

Ver: ayuda blockwise-visual para más.

2

Ver también Vimtip#150.

Esto explica cómo marcar un bloque de texto y aumentar automáticamente los números en el bloque marcado.

Cuestiones relacionadas