Как я могу получить переменную-счетчик в Vim без Python или Ruby?

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

  •  23-08-2019
  •  | 
  •  

Вопрос

У меня НЕ включен 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top