2009-05-21 11 views
5

NON ho abilitato python/ruby. La mia domanda: spesso devo scrivere cose come le seguenti:Come posso ottenere una variabile contatore in Vim senza pitone o rubino?

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

solito vi digitare:

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

quindi emettere i seguenti comandi:

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

Quindi, in altre parole che la riga di altre 11 volte, quindi utilizzando il comando eseguito "sostituire char" attraverso l'elenco delle date. Poi ti copio l'intero isolato e nel nuovo blocco sarà digitare

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

di sostituire 2.007 per il 2008 nel secondo blocco.

Vim è così potente che immagino ci debba essere un modo migliore di sostituire costantemente da 1 a 12 su ciascuna delle linee.

risposta

13

Scrivi la prima riga:

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

Poi, mentre ancora su quella linea, andare in modalità di comando e registrare una macro un che copia la linea (yyp), incrementa il primo numero (Ctrl- una, scritta ^A), sposta un carattere verso destra (l) e quindi incrementa l'altro numero:

qayyp^Al^Aq 

(si noti che avvio e arresto della registrazione macro accade con 0 .) giocano attualmente macro un 110 volte:

[email protected] 
+0

+1 I macro di Vim possono essere un po 'spaventosi quando li si accede (in particolare leggendo il codice di altri utenti), ma è assolutamente incredibile la quantità di lavoro che possono salvare su attività di modifica del testo ripetitive. Penso che sia meglio immergersi e sperimentare, una volta che hai dimestichezza con Vim e sei a conoscenza dei comandi per registrare e riprodurre i macro. –

+0

Grazie! E 'stato molto efficace! – Dan

8

può anche essere fatto con vim 7 funzioni:

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

Se avete le principali utility Unix/Linux a vostra disposizione c'è un modo che è più facile da ricordare, almeno se si è abituati a usare comandi di blocco:

(1) generare la sequenza usando seq (1)

:r!seq 200801 200812 

ss permette anche formattazione in questo modo:

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

Il segno di percentuale deve essere sfuggito.

(2) Doppio questo blocco con i comandi di blocco di Vim: Marco con Cv, Yank, mettere

(3) Inserire (o aggiungere) il testo tra questi blocchi: Marco con CV, inserire con I

Vedere: help blockwise-visual per ulteriori informazioni.

2

Vedere anche Vimtip#150.

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

Problemi correlati