Как получить переменную счетчика в Vim без python или ruby? - PullRequest
5 голосов
/ 22 мая 2009

У меня НЕ включен python / ruby. Мой вопрос: мне часто приходится писать что-то вроде следующего:

%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 раз, а затем с помощью команды «заменить символ» запускаю список дат. Затем я скопирую весь блок и в новом блоке наберу

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

заменить 2007 на 2008 во втором блоке.

Vim настолько мощен, что я считаю, что должен быть лучший способ, чем постоянно вручную заменять от 1 до 12 в каждой строке.

Ответы [ 4 ]

13 голосов
/ 22 мая 2009

Введите первую строку:

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

Затем, оставаясь в этой строке, перейдите в командный режим и запишите макрос a , который копирует строку (yyp), увеличивает первое число (ctrl-a, записано ^A) , перемещает один символ вправо (l) и затем увеличивает другое число:

qayyp^Al^Aq

(Обратите внимание, что запуск и остановка записи макроса происходит с q.) Теперь воспроизведите макрос a 110 раз:

110@a
8 голосов
/ 22 мая 2009

Это также можно сделать с помощью функций vim 7:

:let t=map(range(200801,200815), '"macro(".v:val.");x gzip /home/test/".v:val.".txt;run;"')
:put=t
6 голосов
/ 22 мая 2009

Если у вас есть основные утилиты Unix / Linux, в вашем распоряжении есть способ, который легче запомнить, по крайней мере, если вы привыкли использовать блокировать команды:

(1) Создайте последовательность, используя seq (1)

:r!seq 200801 200812

seq также позволяет форматировать так:

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

Знак процента должен быть экранирован.

(2) Удвойте этот блок с помощью команд блока Vim: Пометить C-v, дернуть, поставить

(3) Вставьте (или добавьте) текст между этими блоками: Пометить с помощью C-V, вставить с I

Подробнее см. Help blockwise-visual.

2 голосов
/ 25 мая 2009

Также см. Vimtip # 150 .

Здесь объясняется, как пометить блок текста и автоматически увеличить числа в помеченном блоке.

...