Поиск…


Запись макроса

Один из способов создания макроса - записать его.

Начните запись макроса и сохраните его в регистре (в этом примере мы будем использовать a , но это может быть любой регистр, в котором вы обычно могли бы выровнять текст):

qa

Затем запустите команды, которые вы хотите записать в макросе (здесь мы будем окружать содержимое строки тегами <li> ):

I<li><ESC>A</li>

Когда мы закончим с командами, которые мы хотим записать в макросе, остановите запись:

q

Теперь, когда мы хотим выполнить записанную последовательность команд, сохраненных в a , используйте:

@a

и vim повторит записанную последовательность.

В следующий раз, когда вы хотите повторить последний использованный макрос, вы можете удвоить тип @ :

@@

И в качестве дополнительного бонуса хорошо помнить, что если вы поместите номер перед командой, он повторит его много раз. Таким образом, вы повторить макрос , сохраненный в регистре a в 20 раз с:

20@a

Редактирование макроса vim

Иногда вы делаете ошибку с длинным макросом, но скорее отредактируете, чем полностью запишите его. Вы можете сделать это, используя следующий процесс:

  1. Поместите макрос в пустую строку с помощью "<register>p .

    Если ваш макрос сохранен в регистре a , команда "ap .

  2. Отредактируйте макрос по мере необходимости.

  3. Поместите макрос в правильный регистр, перемещая курсор в начало строки и используя "<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. Запишите следующее действие: «добавьте последний номер в следующую строку и увеличьте число»

  1. тип esc для выхода из режима ввода
  2. введите qa для входа в режим записи, используя буфер a
  3. введите yy и p чтобы скопировать текущую строку и вставить ее как следующую строку
  4. введите ctrl + a для увеличения числа
  5. снова введите 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow