Pregunta

NO tengo Python / Ruby habilitado. Mi Pregunta: Con frecuencia tengo que escribir cosas como la siguiente:

%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 forma rápida de hacer esto en Vim?

Por lo general voy 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>...

En otras palabras me pegue la línea 11 veces más, a continuación, utilizando el "reemplazar char" orden de marcha 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 entender que tiene que haber una mejor manera entonces reemplazar constantemente manualmente 1 a 12 en cada una de las líneas.

¿Fue útil?

Solución

Escribir la primera línea:

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

A continuación, mientras que todavía en esa línea, entrar en modo de comando y grabar una macro a que las copias de la línea (yyp), incrementa el primer número (Ctrl-A, ^A escrito), se mueve una carácter a 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 ocurre con q.) Ahora jugar macro a 110 veces:

110@a

Otros consejos

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

Si usted tiene las utilidades básicas de Unix / Linux a su disposición hay de 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 seq (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 de Vim: Marque con C-v, tirón, poner

(3) Insertar (o anexar) el texto entre esto bloquea: Marque con C-V, insertar con I

Vea:. Ayudar a modo de bloques-visuales para más

También vea Vimtip # 150 .

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top