Примечание: я предполагаю, что вы используете a
регистр для полного ответа, но вы можете использовать любой регистр
Примечание 2: <1b>
есть Esc; Вы можете вставить это с Ctrl+vи затем Esc. Может также отображаться как ^[
(в зависимости от display
настроек).
Это не отображение; так что имеет смысл, что :map
не работает. Он записывается в регистр, и вы можете просматривать и редактировать его, как любой регистр.
Все, что qделает, это «очищает этот регистр и добавляет к нему любое нажатие клавиши» , а все, что @делает, это «оценивает регистр как команды» .
В макросе нет ничего «другого», вы можете вызвать любой регистр в качестве макроса.
Для просмотра просто используйте:
:echo @a
Как и любой регистр.
Вы также можете использовать :registers
для просмотра всех регистров.
Для редактирования вы можете сделать несколько вещей:
Самый простой способ, которым вы можете просто назначить @a
, вот так:
:let @a='iasd<1b>'
Это запустит режим вставки ( i
), вставки asd
и возврата в обычный режим.
Это не очень полезно для обширного редактирования; Вы можете использовать функции (то есть. substitute()
), или, возможно, добавить что-то ( :let @a=@a . 'more'
), но изменить что-то в середине не так просто.
Я обнаружил, что лучший способ для этого - запустить новый буфер с помощью :split
или :tabnew
и отредактировать регистр, вставив его туда, отредактировав, а затем скопировав обратно.
Вы можете использовать "apкоторый вставит текст в буфер (где a
находится ваш регистр):
iThis is A<1b>
Теперь я могу просто изменить строку на:
iThis is an edited macro<1b>
Затем я делаю, ^v$"ayчтобы вытащить (скопировать) эту строку в a
реестр:
- ^ для начала строки
- v для визуального режима
- $ для конца строки
- "ay дергать выбор, чтобы зарегистрироваться
a
Если вы хотите, вы можете сделать это без использования визуального режима с ^"ay$.
Теперь вы можете использовать @a, как будто это то, что вы изначально записали.
Вы также можете просто использовать yy, а затем @", что немного быстрее. Это также скопирует завершающий символ новой строки и может вызвать побочные эффекты ... Другой способ сделать это быстрее - использовать макрос :-)
Enter
в конце записи. Во многих случаях это может быть безболезненно, но в тех случаях, когда вы тщательно обработали положение курсора в конце записи, это может повлиять на повторяемость.v
и выбрать всю строку (без новой строки).v^$"ay
a
вернуть (скопировать) эту строку в реестр." Разве это не должно^
произойти раньшеv
, и$
вы все еще не копируете новую строку? Я думаю, что это должно быть:0v$h"ay
(да больно долго!)$
движется к концу линии, но не включает в себя символ новой строки. Это разница между0y$
иyy
. Если поставитьh
после, это$
будет означать, что вы пропустите последний символ.Чтобы заставить что-то работать с ...
Начнёт запись макроса в
a
реестр.С помощью команды вы можете увидеть многие текущие регистры (используемые для макросов, восстановления, удаления и т. Д.)
:reg
Или указать регистр для отображения, указав его имя. Например, чтобы показать регистрa
:доходность
Вы можете добавить в существующий именованный регистр, используя соответствующую заглавную букву. Это работает не только для записи макросов, но и для восстановления. Например:
доходность
Если вы хотите использовать синтаксис let для редактирования существующего макроса, вы можете сделать:
который будет расширяться до
и затем вы можете изменить отдельные нажатия клавиш.
Обратите внимание, что вы можете использовать
<C-r>
(то есть control + r) для вставки из любого регистра в режим командной строки (или, в этом случае, в режим вставки).Кроме того, когда вы находитесь в режиме командной строки, если вы наберете
<C-f>
это, появится окно командной строки, в котором вы можете просмотреть / отредактировать прошлые введенные команды, и вы можете отредактировать текущую команду перед ее вызовом. Нажмите ввод на команду, которую вы хотите отправить.Преимущество этого заключается в том, что вы можете использовать ваши обычные команды перемещения / замены внутри этого буфера для редактирования макроса. Например:
будет воспитывать:
Если вы на команде 120, вы можете сделать:
доходность
Конечно, вы можете вставить содержимое регистра в ваш буфер и изменить его там. Но вы можете делать все, что вам нужно, не загрязняя ваш рабочий буфер.
источник