Скопируйте строки и увеличьте число в переменной, используя Vim Script - PullRequest
0 голосов
/ 22 мая 2019

Я хотел бы изменить строки файла, который содержит переменные заполнители, которые нумеруются последовательно.Более конкретно, я хотел бы добавить больше этих строк с помощью скрипта Vim.

Я хотел бы скопировать и вставить каждую из этих строк определенное количество раз и увеличить число в переменной какдобавлены новые строки.

Я действительно не знаю, что я делаю ... Но после долгих поисков мне удалось собраться вместе, команда ниже.

%g/06/s/-[0-9]\zs6\ze[>-]/\=(submatch(0)+1)/g

Он заменит указанное число с приращением указанного числа.

Но просто изменяет строку.Я хочу сохранить исходную строку и поставить копию исходной строки с увеличенным номером.И делайте это определенное количество раз.

Пример:

Найдите все строки, подобные этим ...

blah-blah <blah-variable-x-06> <blah-variable-z-06-blah>

a diff line <diff-variable-x-06> <diff-variable-z-06-diff>

И сделайте их такими.

blah-blah <blah-variable-x-06> <blah-variable-z-06-blah>
blah-blah <blah-variable-x-07> <blah-variable-z-07-blah>
blah-blah <blah-variable-x-08> <blah-variable-z-08-blah>

и т. Д. ... до достижения указанного числа строк.

a diff line <diff-variable-x-06> <diff-variable-z-06-diff>
a diff line <diff-variable-x-07> <diff-variable-z-07-diff>
a diff line <diff-variable-x-08> <diff-variable-z-08-diff>

и т. Д. ... до достижения указанного количества строк.

Возможно ли это?Если это так, можно ли это написать по сценарию?

1 Ответ

0 голосов
/ 23 мая 2019

с вашим решением, которое не использует сценарий, а записывает и повторяет нажатия клавиш?

Для данного примера:

blah-blah <blah-variable-x-06> <blah-variable-z-06-blah>

Мы начнемначав запись и поместив ее в регистр j (это мое решение; выберите то, что вы предпочитаете).Затем мы скопируем строку и вставим ее ниже.Затем запустите регулярное выражение, чтобы увеличить ваши переменные, и затем завершите записанный скрипт.

qj
yy
p
:s/variable-[a-zA-Z]-\zs[0-9]*\ze/\=(submatch(0) + 1)/g
q

Оттуда вы можете переместить курсор на строку, над которой вы хотите выполнить операцию, и запустить скрипт столько разпо вашему желанию: <n>@j такое, что <n> - это количество строк, которые вы хотите создать.Вам придется изменить регулярное выражение, чтобы оно соответствовало фактической структуре ваших строк, а не приведенным примерам.

Предостережение: это не идеально.Ваши числа, такие как 07, станут 7, так что вам еще предстоит проделать некоторую работу по очистке, но, по крайней мере, число вхождений таких значений будет ограничено довольно низким.

в качестве альтернативы, если ваши строки будут довольно похожим образом выстроены так, что у вас всегда будет две из этих переменных, вы можете искать эти переменные и увеличивать их.Вы должны будете запретить восьмеричное, чтобы оно не увеличивалось с 07 до 10.Кроме того, поскольку вы используете дефис перед своими числами, нам на самом деле придется уменьшить его, поскольку он видит их как отрицательные числа.

qk
:let b:nrformats=&nrformats
:set nrformats=bin
yy
p
/variable-[a-zA-Z]-\zs[0-9]*\ze
<c-x>
n
<c-x>
:let &nrformats=b:nrformats
q

Опять же, вам придется исправить поиск, чтобы он соответствовал вашемуфактическое использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...