{{Laracast Vim Mastery, 21, Fun With Macros, 9.03.2016, 11.07.2016, https://laracasts.com/series/vim-mastery/episodes/21}} (0:00) Давайте перейдем к макросам. Это довольно интересная тема. Макрос - это просто запись, которую вы можете воспроизвести в любом месте. Или вы можете сохранить ее на будущее. Простейший пример: мы можем нажать %%(t)q%% и любой символ... Давайте нажмем %%(t)qq%%, как мы делали с метками. Это означает начать запись в регистр %%(t)q%%. Теперь любое нажатие клавиши будет записано. Я могу ввести %%(t)= 'john'%% и Escape... и если я хочу прекратить запись, то нажму %%(t)q%%. (0:30) Теперь это будет записано, временно, конечно, в регистр %%(t)q%%, который вы видите здесь. Теперь давайте воспроизведем это. Все, что нужно сделать, это нажать %%(t)@%% и регистр - %%(t)q%%. Здорово, не так ли? Очень просто. Давайте попробуем еще раз: %%(t)q%% и дальше, опять же, любую клавишу. Я всегда использую %%(t)qq%%, точно, как %%(t)mm%% для меток. (1:00) Итак, %%(t)qq%%, %%(t)my name is jeff%%, Escape, %%(t)q%% для остановки. Теперь я могу воспроизвести это нажав %%(t)@q%%. Далее вы можете получить полную запись, как строку. Это подходит, если вы хотите сохранить это в файл %%(t).vimrc%%. Итак, еще раз, - если вы просматриваете регистр (мы можем его видеть тут), это означает, что я могу нажать одинарную или двойную кавычку и %%(t)qp%%, чтобы выполнить записанное в регистр. Заметьте, он также включает любое нажатие клавиш, символов и так далее. (1:30) Как мы можем сохранить это? Очень просто. Если я перейду в свой файл %%(t).vimrc%%... Давайте вставим это сюда. Напишу %%(t)let @q=%% и далее, мы можем вставить его: %%(t)"qp%%... и он вставится. Теперь мы сохранили. Это означает, что, даже если мы закроем MacVim и откроем снова, мы все еще можем использовать регистр. Вот так: %%(t)@q%% - готово. Теперь, как вы можете представить, это можно использовать для самых разных вещей. (2:00) Если вы обнаружите, что печатаете снова и снова какую-то последовательность, то это хороший кандидат для макроса. Например, давайте создадим такую, которая создаст и инициализирует параметр для конструктора. К примеру, что если у нас есть макрос, который вставляет подобную конструкцию? Поднимемся вверх и напишем %%protected $name%%. Типа того. Будет ли это удобно? Хорошо, я нажму %%(t)u%% несколько раз, чтобы отменить и давайте посмотрим, сработает ли это. Выйду в полноэкранный режим. Потом %%(t)qq%% для запуска записи. (2:30) Далее, я скопирую это слово: %%(t)yiw%%. Теперь мы скопировали %%(t)name%%. Теперь я поищу закрывающую фигурную скобку и нажму заглавную %%(t)O%%, что добавит строчку выше и переключит нас в режим вставки. Таким образом, я гарантированно добавляю это назначение в самый низ метода %%__construct%%. Escape, %%(t)p%%, %%(t)= $%%, Escape, %%(t)p%%. Клавиша %%(t)а%% - чтобы перейти в режим вставки после текущего символа. И теперь Escape, чтобы вернуться в нормальный режим. (3:00) Теперь давайте введем знак вопроса, чтобы искать выше текущей строки. Найду слово %%(t)construct%%. Теперь снова нажму %%(t)O%%, чтобы добавить строчку выше, где мы установим его: %%(t)protected $%%, Escape, %%(t)p%%, %%(t)a%% для перехода в режим вставки. Точка с запятой, чтобы завершить. И Enter. Отметим, что, это, возможно, не заработает, если здесь есть комментарий. Мы не учитываем это. Если у вас они есть (что вероятно), вы можете добавить небольшую настройку. (3:30) Вы с этим справитесь. Давайте нажмем теперь Escape. Все, что остается, это вернуть курсор точно в предыдущее положение. И знаете что? Мы, возможно, могли создать набор меток, чтобы сделать такое действие простым. Но пойдет и так. Мы найдем конструктор. И теперь, если я хочу найти, что мы копировали на предыдущем шаге... я могу ввести %%(t)/%%, Ctrl+R, %%(t)”%%. (4:00) Ctrl+R, %%(t)”%% вставит то, что мы скопировали в прошлый раз. Это специально для командного режима. Потому что вы не можете нажать %%(t)p%% для вставки, если вы в командном режиме. Мы почти закончили. Осталось только... Давайте выключим подсветку. Если помните, мы назначили для этого %%(t),%% и пробел. Думаю, готово. Нажму %%(t)q%%, чтобы выключить запись. И давайте попробуем. Я нажму %%(t)u%% несколько раз, чтобы отменить все. Итак, мы поместили курсор на аргумент и нажмем теперь %%(t)@q%%. Готово. Работает. (4:30) Проделаем это снова: %%(t)age%% и %%(t)@q%% и, далее, %%(t)job%% и %%(t)@q%%. Отличный инструмент, верно? Теперь, конечно, мы хотим сохранить это, чтобы можно было использовать это в будущем. Давайте посмотрим на наш регистр. Это именно то, что мы только что сохранили. Давайте вставим это в наш файл %%(t).vimrc%%. Вот так. Спущусь вниз: %%(t)let @q%% или, кстати, вы можете выполнить %%(t)nmap%% или что-то вроде этого. Это нормально. (5:00) Напишем %%(t)let @a%%. И мы сделаем это равным тому, что мы записали. Если мы хотим вставить что-то из регистра, мы ссылаемся на ключ регистра: %%(t)“q%% и, далее, %%(t)p%% для вставки. Вот так. Единственное, что нужно исправить, это экранировать двойную кавычку. Давайте попробуем. Вернемся назад и добавим еще один аргумен: %%(t)thing%%. Теперь я могу нажать %%(t)@a%%, чтобы запустить его. (5:30) Работает. Вы можете представить и многие другие вещи. Например, вы можете создать макрос, чтобы построить новый класс PHP и сразу определить, какое у него должно быть пространство имен. Почему бы не попробовать, сможете ли вы найти, как сделать это самостоятельно? В завершение, еще раз: давайте удалим это быстро: %%(t)di)%%, чтобы удалить все внутри скобок. И ещё раз вспомним. %%(t)qq%% или %%(t)q%% и любой символ - чтобы начать запись. (6:00) %%(t)my name is jeff%%. Если вы переключитесь в нормальный режим и снова нажмете %%(t)q%%, вы остановите запись. Далее вы можете вставить вашу запись, выполнив %%(t)"qp%%. И вставиться все, что у вас есть в регистре %%(t)q%%. Вы можете добавить это в ваш файл %%(t).vimrc%%, введя %%(t)let @%% и дальше вставляем макрос. И, наконец, вы можете воспроизвести любой макрос, нажав %%(t)@%% и далее нужную клавишу. В нашем случае это %%(t)q%%. Вот и все.