Vim — Макросы в Vim'е
Да, да в виме тоже есть макросы, как и в Microsoft Word. По крайней мере их использование и запись чем-то схожи...
Для начала пару слов о регистрах. Все то, что мы копируем\вырезаем в виме заносится в регистр по умолчанию - регистр №0. Кроме него используются другие цифровые регистры, буквенные (их мы и будем использовать) и ряд служебных. Зная имя регистра (например v), можно в него копировать "vyy и вставлять из него же "vp.
Для записи макроса достаточно ввести одну короткую команду - qимя_регистра, например qv. С этого момента все производимые вами действия будут записываться в макрос (кроме тех, что вы производите не в виме). Остановить запись можно, нажав клавишу q (естественно в командном режиме). Воспроизводится макрос после ввода команды @имя_регистра. Запустить еще раз последний использованный макрос можно командой @@.
Потренируемся. Возмем следующие строки:
echo "1"
echo "2"
echo "3"
echo "4"
echo "5"
echo "666"
Чтобы в конец каждой строки добавить перенаправление stdout в файл /tmp/tempfile, используем следующую "команду" (мы на первой строке):
<Esc>qvA >> /tmp/tempfile<Esc>jq5@v
Мы перешли в командный режим, начали запись макроса в регистр v. Затем мы перешли в режим редактирования на конце строки, добавили что нужно, вышли в командный режим. Потом перешли на строчку ниже и закончили запись макроса. Применили макрос 5 раз (по числу оставшихся строк).
Все.
Теперь самое интересное! Каждый макрос записан в соответствующем регистре и его можно оттуда вставить в редактор ("vp), подправить и послать обратно в регистр(<Esc>0"vy$). К примеру, наш макрос в регистре выглядит так:
A >> /tmp/tempfile^[j
Если вы хотите только дописать некие действия в макрос, оставив остальное его содержимое целым, то можно проделать это, использовав заглавную букву при указании регистра для записи макрса. Дальше все как обычно. Допишем наш макрос так, чтобы при переходе на новую строку он еще и вставлял пустую строку над курсором:
<Esc>qVO<Esc>jq
Вот и вся магия.
Для начала пару слов о регистрах. Все то, что мы копируем\вырезаем в виме заносится в регистр по умолчанию - регистр №0. Кроме него используются другие цифровые регистры, буквенные (их мы и будем использовать) и ряд служебных. Зная имя регистра (например v), можно в него копировать "vyy и вставлять из него же "vp.
Для записи макроса достаточно ввести одну короткую команду - qимя_регистра, например qv. С этого момента все производимые вами действия будут записываться в макрос (кроме тех, что вы производите не в виме). Остановить запись можно, нажав клавишу q (естественно в командном режиме). Воспроизводится макрос после ввода команды @имя_регистра. Запустить еще раз последний использованный макрос можно командой @@.
Потренируемся. Возмем следующие строки:
echo "1"
echo "2"
echo "3"
echo "4"
echo "5"
echo "666"
Чтобы в конец каждой строки добавить перенаправление stdout в файл /tmp/tempfile, используем следующую "команду" (мы на первой строке):
<Esc>qvA >> /tmp/tempfile<Esc>jq5@v
Мы перешли в командный режим, начали запись макроса в регистр v. Затем мы перешли в режим редактирования на конце строки, добавили что нужно, вышли в командный режим. Потом перешли на строчку ниже и закончили запись макроса. Применили макрос 5 раз (по числу оставшихся строк).
Все.
Теперь самое интересное! Каждый макрос записан в соответствующем регистре и его можно оттуда вставить в редактор ("vp), подправить и послать обратно в регистр(<Esc>0"vy$). К примеру, наш макрос в регистре выглядит так:
A >> /tmp/tempfile^[j
Если вы хотите только дописать некие действия в макрос, оставив остальное его содержимое целым, то можно проделать это, использовав заглавную букву при указании регистра для записи макрса. Дальше все как обычно. Допишем наш макрос так, чтобы при переходе на новую строку он еще и вставлял пустую строку над курсором:
<Esc>qVO<Esc>jq
Вот и вся магия.