Позволяет говорят, что я ввел следующее
a + 1 =b and a+1=c
Мне нужны еще 2 выражения как этот, но я хочу увеличить значение 1 - 3, таким образом, я копирую, вставил выражение выше еще 2 раз и вручную увеличился 1 поэтому теперь, мой файл похож так
a + 1 =b and a+1=c
a + 2 =b and a+2=c
a + 3 =b and a+3=c
Существует ли способ автоматизировать это? Отчасти как поиск и замена, кроме я должен искать выражение не символ, потому что 1
записан другие выражения, которые я не хочу изменять. и я хочу изменить значение 1 на строку. Каждое выражение находится на новой строке.
Помимо использования макроса Вы могли также использовать, находят и заменяют
yy2p
:%s/\v\d+/\=line('.')/g
yy2p
рывки строка и мимо него два раза :%s
пироги поиск и заменяют \v\d+
, поиски всех цифровых символов \=line('.')
оценивают функцию строки как замену для всех соответствий , еще одна опция
:pu! =map(range(1,3), 'printf(''a + %d =b and a+%d=c'', v:val, v:val)')
трудно для запоминания, но Вы не должны дергать, поиск или макрос ничто. Начиная с пустого буфера, Вы получаете всю энчиладу в одной команде.
Vim имеет способ увеличить число автоматически: <c-a>
(или Ctrl ) в нормальном режиме.
Так, с помощью макроса, довольно легко создать увеличивающуюся последовательность чисел в Vim. Запустите в строке, содержащей a+ 1 =b and a+1=c
и:
qq
Yp^Aw^A
q
Эти ^A
выдерживает за нажатие Ctrl . Тогда используйте @q
для повторения макроса. Так 4@q
произвел бы:
a + 1 =b and a+1=c
a + 2 =b and a+2=c
a + 3 =b and a+3=c
a + 4 =b and a+4=c
a + 5 =b and a+5=c
qq
запускает макрос ( q
) сохраняющий в регистре q
. Y
рывки текущая строка (linewise) p
вставки и Вы заканчиваете в начале следующего (раньше текущий) строка. <c-a>
Вы увеличиваете первое число в строке (и курсор перемещается в него) w<c-a>
), на этот раз влияя на второе число. Много дистрибутивов энергии шли со встроенной поддержкой Perl.
, Если это - Ваш случай, Вы можете:
:perldo s/a\+1=b and a\+1=c/sprintf('a+%d=b and a+%d=c',++$aux,$aux)/e
(я, вероятно, изменил пробелы в примере...)