파이썬이나 루비없이 VIM에서 카운터 변수를 어떻게 얻을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/895663

  •  23-08-2019
  •  | 
  •  

문제

파이썬/루비가 활성화되지 않았습니다. 내 질문 : 나는 종종 다음과 같은 것들을 써야합니다.

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

VIM 에서이 작업을 수행하는 빠른 방법이 있습니까?

나는 보통 다음을 입력 할 것입니다.

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

그런 다음 다음 명령을 발행합니다.

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

다시 말해서, 나는 11 번 더 붙여 넣은 다음 날짜 목록을 통해 실행되는 "char char"명령을 사용합니다. 그러면 전체 블록을 복사하면 새 블록에서

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

두 번째 블록에서 2008 년 2007 년 대체.

VIM은 너무 강력합니다. 각 라인에서 1-12를 수동으로 수동으로 교체하는 더 나은 방법이 있어야한다고 생각합니다.

도움이 되었습니까?

해결책

첫 번째 줄을 작성하십시오.

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

그런 다음 여전히 그 라인에있는 동안 명령 모드로 이동하여 매크로를 기록하십시오. 라인을 복사합니다 (yyp), 첫 번째 숫자를 증가 ^A), 하나의 캐릭터를 오른쪽으로 움직입니다 (l) 그런 다음 다른 숫자를 증가시킵니다.

qayyp^Al^Aq

(매크로 녹음을 시작하고 중지합니다. q.) 이제 매크로를 재생하십시오 110 번 :

110@a

다른 팁

VIM 7 기능으로도 수행 할 수 있습니다.

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

당신이 당신의 처분에 Unix/Linux 코어 유틸리티가있는 경우, 최소한 블록 명령을 사용하는 데 익숙한 경우 기억하기 쉬운 방법이 있습니다.

(1) seq (1)을 사용하여 시퀀스를 생성합니다.

:r!seq 200801 200812

Seq는 다음과 같은 형식을 허용합니다.

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

퍼센트 부호는 탈출해야합니다.

(2) VIM 블록 명령 으로이 블록을 두 배로 늘리십시오 : CV, Yank, Puts와 함께 표시

(3)이 블록 사이에 텍스트를 삽입 (또는 추가) : CV로 표시, i로 삽입하십시오.

참조 : 더 많은 정보를 제공하십시오.

또한 참조하십시오 VIMTIP#150.

이것은 텍스트 블록을 표시하고 표시된 블록의 숫자를 자동으로 증가시키는 방법을 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top