Поиск…
Запись макроса
Один из способов создания макроса - записать его.
Начните запись макроса и сохраните его в регистре (в этом примере мы будем использовать 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