Дергание и вставка при увеличении

14

Я редактирую файл .sql в Vim:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),

То, что я хочу сделать, это выдернуть (1, 1),строку и вставить ее 137 раз; однако я хочу, чтобы второе число в скобках увеличивалось каждый раз. Вывод будет выглядеть так:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),

Есть ли способ сделать это в Vim и, если да, какую команду я бы использовал?

Благодарность!

smoothgrips
источник

Ответы:

11

Наведите курсор на (1, 1),строку и введите:

qaVypt)<C-a>q135@a

Пояснение:

qaначинает запись макроса внутри регистра a (вы можете выбрать другую букву).

Vyp дублирует текущую строку, выделив всю строку (V), скопировав ее (y) и вставив ее ниже (p).

t) переместите курсор непосредственно перед следующей закрытой скобкой, чтобы он оказался на втором числе.

<C-a>( Ctrlи a) увеличивает число.

q заканчивает запись макроса.

135@aвоспроизводит макрос сохраненный в регистре через 135 раз.

Изменить: Питер Ринкер имеет более короткую команду:

qqYpW<c-a>q135@q

Различия:

он использует регистр q для хранения макроса (быстрее печатать, qqчем qaпотому, что это тот же ключ),
он копирует строку только одним нажатием клавиши Y(вместо двух Vy)
и перемещает курсор на второе число только одним нажатием клавиши W(вместо этого из t)).

Сагино
источник
4
Вим гольф: qqyypW<c-a>q135@q. Еще короче, если вы используете Yвместо yy.
Питер Ринкер
9

Последние Vims узнали об увеличении визуально выбранных областей, а также о создании последовательности. Таким образом, вы можете сделать это после вставки вашей строки 137 раз:

1) визуально block-select ( Ctrl-V) второй 1, начиная со строки 3.

2) нажмите gCtrl-A

Я записал скриншот здесь

Отказ от ответственности: для этого нужен Vim 7.4.900 или около того.

Кристиан Брабандт
источник
Успешно протестировано в Vim 7.4.826 на Debian / sid.
Дубу
Ваш скринкаст исчез, но этот метод УДИВИТЕЛЬНЫЙ! Благодарю.
david_nash
2

Легко понять / легко запоминаются / легко адаптироваться к пути других ситуаций , чтобы сделать это: использовать VisIncr плагин (если вы не хотите использовать версию , которая на самом деле играет хорошо с пакетными менеджерами из этого века , в отличие от решения vimballс Вы можете получить его из GitHub ). С этим:

  • перейти к (1, 1),линии и дергать ее:Vy
  • вставьте это 136 раз: 136p
  • перейдите ко второму столбцу 1и отметьте его вертикально:C-vGf)h
  • запустить приращение: :II
  • прочитать инструкцию , чтобы узнать о других вкусностей: :help visincr.
Сато Кацура
источник
1

Я бы поиграл с g^a.

Попробуй 137i0^v137kg^a.

Мойзес
источник
1
Добро пожаловать в Ви и Вим ! Я отформатировал ваш ответ с помощью уценки. Было бы еще лучше, если бы вы редактировали, чтобы объяснить, как это отвечает на вопрос ОП.
Д. Бен Кнобл