Как можно минимизировать нажатия клавиш при вставке похожих строк в vim? - PullRequest
7 голосов
/ 21 октября 2010

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

print "func 1";
print "func 2";
print "func 3";
print "func 4";
print "func 5";

Используя vim , я заканчиваю копирование, вставляя первую строку, используя [yypppp], а затем меняя последние четыре строки. Это очень медленно, если вам нужно вставить больше строк.

Есть ли более быстрый способ сделать это в vim?


Примером этого является:

Исходное состояние

boot();
format();
parse();
compare();
results();
clean();

Конечное состояние

print "func 1";
format();
print "func 2";
parse();
print "func 3";
compare();
print "func 4";
results();
print "func 5";
clean();

Ответы [ 3 ]

12 голосов
/ 21 октября 2010

Запись макроса. Вот рабочий процесс для вашего конкретного примера:

Скопируйте и вставьте первую строку. Тогда,

qa       : Start recording macro to register a
yy       : Yank current line
p        : Paste current line in line below
/\d      : Search for start of number (you can skip this command, the next command automagically moves the cursor to the number)
C-A      : Control-A increments the number
q        : Stop recording macro
3@a      : Replay macro 3 times

Вы можете заменить 3 на любое число, чтобы генерировать новые строки print с увеличенными числами.

Для вашего второго примера вы можете просто добавить

j        : Moves one line down

после команды yy, чтобы получить чередующиеся строки команд и print.

1 голос
/ 21 октября 2010

У вас есть плагины, которые делают это. Например, visincr . Визуально выберите столбец чисел и введите :I.

Другой способ сделать это - записать макрос. запустите qx, чтобы начать запись макроса, чтобы зарегистрировать x , yiw для восстановления слова под курсором, j для перехода на одну строку вниз, viwp для вставки, CTRL A для увеличения нового номера, q для остановки записи, а затем @x для воспроизведения содержимого регистра x .

0 голосов
/ 21 октября 2010

Для этого конкретного случая вы можете использовать макрос. Есть хорошая запись о том, как сделать порядковые номера в этом посте .

Вам нужно изменить пример в посте, чтобы сначала выписать всю строку, а затем записать макрос, который копирует строку и обновляет счетчик.

...