Domanda

NON ho Python/Ruby abilitato.La mia domanda:Spesso devo scrivere cose come le seguenti:

%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;

C'è un modo veloce per farlo in Vim?

Di solito digito:

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

Quindi impartisci i seguenti comandi:

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

Quindi, in altre parole, incollo la riga altre 11 volte, quindi utilizzando il comando "sostituisci carattere" corro l'elenco delle date.Quindi copio l'intero blocco e digiterò nel nuovo blocco

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

sostituire 2007 con 2008 nel secondo blocco.

Vim è così potente che immagino che ci debba essere un modo migliore per sostituire costantemente manualmente i numeri da 1 a 12 su ciascuna riga.

È stato utile?

Soluzione

Scrivi la prima riga:

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

Quindi, mentre sei ancora su quella riga, vai in modalità comando e registra una macro UN che copia la riga (yyp), incrementa il primo numero (ctrl-a, scritto ^A), si sposta di un carattere a destra (l) e poi incrementa l'altro numero:

qayyp^Al^Aq

(Nota che l'avvio e l'interruzione della registrazione macro avviene con q.) Ora riproduci la macro UN 110 volte:

110@a

Altri suggerimenti

Può anche essere fatto con le funzioni di vim 7:

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

Se hai le utility core Unix/Linux a tua disposizione, c'è un modo che è più facile da ricordare, almeno se sei abituato a utilizzare i comandi a blocchi:

(1) Genera la sequenza usando seq(1)

:r!seq 200801 200812

seq consente anche la formattazione in questo modo:

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

È necessario eseguire l'escape del segno percentuale.

(2) Raddoppia questo blocco con i comandi del blocco Vim:Segna con C-v, strattona, metti

(3) Inserisci (o aggiungi) il testo tra questi blocchi:Segnare con C-V, inserire con I

Vedi :help blockwise-visual per ulteriori informazioni.

Vedi anche Vimtip#150.

Questo spiega come contrassegnare un blocco di testo e aumentare automaticamente i numeri nel blocco contrassegnato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top