Поиск…
Запись макроса
Один из способов создания макроса - записать его.
Начните запись макроса и сохраните его в регистре (в этом примере мы будем использовать a
, но это может быть любой регистр, в котором вы обычно могли бы выровнять текст):
qa
Затем запустите команды, которые вы хотите записать в макросе (здесь мы будем окружать содержимое строки тегами <li>
):
I<li><ESC>A</li>
Когда мы закончим с командами, которые мы хотим записать в макросе, остановите запись:
q
Теперь, когда мы хотим выполнить записанную последовательность команд, сохраненных в a
, используйте:
@a
и vim повторит записанную последовательность.
В следующий раз, когда вы хотите повторить последний использованный макрос, вы можете удвоить тип @
:
@@
И в качестве дополнительного бонуса хорошо помнить, что если вы поместите номер перед командой, он повторит его много раз. Таким образом, вы повторить макрос , сохраненный в регистре a
в 20 раз с:
20@a
Редактирование макроса vim
Иногда вы делаете ошибку с длинным макросом, но скорее отредактируете, чем полностью запишите его. Вы можете сделать это, используя следующий процесс:
Поместите макрос в пустую строку с помощью
"<register>p
.Если ваш макрос сохранен в регистре
a
, команда"ap
.Отредактируйте макрос по мере необходимости.
Поместите макрос в правильный регистр, перемещая курсор в начало строки и используя
"<register>y$
.Вы можете повторно использовать оригинальный регистр или использовать другой. Если вы хотите использовать регистр
b
, команда имеет значение"by$
.» Или"<register>d$
(удаляет неиспользуемую строку)
Рекурсивные макросы
Макросы Vim также могут быть рекурсивными. Это полезно, когда вам нужно действовать в каждой строке (или другом текстовом объекте) до конца файла.
Чтобы записать рекурсивный макрос, начните с пустого регистра. (Регистр может быть опустошен с помощью q<register>q
.)
Выберите начальную точку на каждой строке, чтобы начать и закончить.
Перед завершением записи вызовите макрос как последнюю команду. (Вот почему регистр должен быть пустым: он ничего не сделает, поскольку макрос еще не существует).
Пример, учитывая текст:
line 1
line 2
line 3
foo bar
more random text
.
.
.
line ???
В нормальном режиме, с курсором на первой строке и пустым регистром a
, можно записать этот макрос:
qaI"<Esc>A"<Esc>j@aq
Затем с одним вызовом @a
все строки файла будут теперь внутри двойных кавычек.
Что такое макрос?
Макрос - это серия нажатий клавиш, которые нужно «воспроизвести» Vim без каких-либо задержек. Макросы могут быть сохранены в регистрах или переменных, привязаны к ключам или выполняются в командной строке.
Вот простой макрос, который содержит верхние строчки третьего word
в строке:
0wwgUiw
Этот макрос можно записать в регистр q
:
qq start recording into register q
0wwgUiw
q stop recording
или сохранены непосредственно в регистре q
:
:let @q = '0wwgUiw'
для воспроизведения:
@q
Но его также можно было ввести непосредственно в командной строке:
:normal 0wwgUiw
для мгновенного воспроизведения с помощью команды :normal
.
Или введите переменную:
:let myvar = '0wwgUiw'
для воспроизведения:
@=myvar
Или сохранено как отображение:
nnoremap <key> 0wwgUiw
для воспроизведения, нажав <key>
.
Если вы хотите сохранить макрос для последующего повторного использования, вы можете ввести режим вставки:
<C-r>q
Это вставляет макрос в регистр q
(в этом примере: 0wwgUiw
). Вы можете использовать этот вывод, например, для определения макроса в своем vimrc
:
let @q='0wwgUiw'
При этом регистр q
инициализируется с помощью этого макроса каждый раз, когда вы запускаете vim.
Действие записи и повтора (макросы)
с помощью команды q
мы могли бы упростить много утомительной работы в vim.
пример 1. генерировать последовательность массивов (от 1 до 20).
ШАГ 1. нажмите i
чтобы войти в режим вставки, вход 1
1
ШАГ 2. Запишите следующее действие: «добавьте последний номер в следующую строку и увеличьте число»
- тип
esc
для выхода из режима ввода - введите
qa
для входа в режим записи, используя буферa
- введите
yy
иp
чтобы скопировать текущую строку и вставить ее как следующую строку - введите
ctrl
+a
для увеличения числа - снова введите
q
чтобы закончить запись
1
2
ШАГ 3. Повторите действие 18 раз.
тип 18@a
чтобы воспроизвести действие 3 и действие 4 на шаге 2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20