Pergunta

Eu não tenho python / ruby ??habilitado. Minha pergunta: Eu freqüentemente tem que escrever coisas como o seguinte:

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

Existe uma maneira rápida de fazer isso no vim?

Eu normalmente irá digitar:

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

Em seguida, emita os seguintes comandos:

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

Assim, em outras palavras eu colar a linha 11 vezes mais, em seguida, usando a "substituir char" comando executado pela lista de datas. Então eu vou copiar todo o bloco e na nova quadra irá digitar

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

para substituir de 2007 para 2008, no segundo bloco.

Vim é apenas tão poderosa figura I tem que haver uma maneira melhor, em seguida, substituindo constantemente manualmente 1 a 12 em cada uma das linhas.

Foi útil?

Solução

Escreva a primeira linha:

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

Então, enquanto ainda nessa linha, entrar em modo de comando e gravar uma macro um que copia o de linha (yyp), incrementa o primeiro número (ctrl-a, ^A escrito), move um caractere para a direita (l) e, em seguida, incrementa o outro número:

qayyp^Al^Aq

(Note que iniciar e parar a gravação macro acontece com q). Agora jogar macro a 110 vezes:

110@a

Outras dicas

Ele também pode ser feito com o vim 7 funções:

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

Se você tem os utilitários núcleo Unix / Linux à sua disposição existe uma forma que é mais fácil de lembrar, pelo menos se você está acostumado a utilização comandos de bloco:

(1) gerar a sequência SEQ usando (1)

:r!seq 200801 200812

seq também permite a formatação assim:

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

O sinal de porcentagem deve ser escapado.

(2) Duplo Este bloco com os comandos de bloco Vim: Mark com C-v, arranco, put

(3) Inserir (ou acrescentar) o texto entre estes blocos: Mark com C-V, com inserção I

Veja:. Ajuda frase a frase-visual para mais

Veja também Vimtip # 150 .

Isso explica como marcar um bloco de texto e automaticamente aumentar os números no bloco marcado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top