Как я могу получить переменную-счетчик в Vim без Python или Ruby?
Вопрос
У меня НЕ включен 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 раз, а затем с помощью команды «replace char» просматриваю список дат.Затем я скопирую весь блок и в новом блоке наберу
:s/2007/2008/<enter>12&11<up>12&
во втором блоке заменить 2007 на 2008 год.
Vim настолько мощный инструмент, что я считаю, что должен быть лучший способ, чем постоянная замена вручную чисел от 1 до 12 в каждой строке.
Решение
Напишите первую строку:
%macro(200701);x gzip /home/test/200701.txt;run;
Затем, все еще находясь на этой строке, перейдите в командный режим и запишите макрос а который копирует строку (yyp
), увеличивает первое число (ctrl-a, пишется ^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 Core в вашем распоряжении, есть способ, который легче запомнить, по крайней мере, если вы привыкли использовать команды блоков:
(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.
Также см Вимтип#150.
Здесь объясняется, как пометить блок текста и автоматически увеличить числа в отмеченном блоке.