Всем привет, с вами еженедельная рубрика "Секреты Вим"! Сегодня поговорим о макросах --- последовательности действий, которую можно повторять. У меня уже была заметка о регистрах. Регистры в Вим --- это буквы английского алфавита (и есть еще специальные регистры, обозначаемые другими символами). Вы можете скопировать текст в регистр w, например так: "wyy --- в регистр w скопирована одна строка. Или "w42dd --- в регистр перемещено сорок две строки. Вставка, соответственно, "wp.
Однако регистры могут использоваться и для других целей. Одна из них --- это макросы. Все, что вы делаете, вы делаете, нажимая клавиши на клавиатуре (воззможно, еще привлекаете мышь). Нажатия на клавиши можно записать и потом воспроизвести. Собственно, вы можете так и поступить. Простой пример: вам надо скопировать слово и вставить его еще два раза. Вы нажмете: dwpp. Можно эту последовательность занести в регистр w (или любой другой) и выполнить макрос.
Выполнение макроса осуществляет команда @. Так, @w --- выполнит то, что лежит в регистре w. Плохая идея --- копировать что-то в этот регистр в теле макроса!
Команда @@ повторяет регистр, и может иметь повторитель. Так, 500@@ --- это очень мощно!
Однако записывать вручную серию команд неудобно. Ее лучше записать, и для этого есть команда q. После нее указывается регистр, а просто q завершает запись. Удобно использовать регистр q для хранения макросов:
- qq --- включили запись в регистр q
- делаете, что вам надо --- поиск, замена, команды движения, вставка текста, переход между вкладками --- без ограничений. Даже из Вим можно выйти.
- q --- конец записи
- @q --- повтор серии действий
- @@ --- Еще раз.
Можно проиграть регистр и в командной строке (:@w). Ну, и повторить (:@@). В обоих случаях можно указать диапазон строк --- по умолчанию диапазон --- текущая строка.
Мышь тоже записывается. Но не знаю, не знаю... Если вы переместили курсор на третий символ третьей строки сверху, то макрос так и поступит. Если третья сверху какая-то другая, то ему-то дела не будет. Если точно знаете, чего хотите --- пожалуйста.
Всегда можно посмотреть, что там записалось, вставив содержимое регистра в текст ("qp) или посмотрев командой :reg.
Пара замечаний. Макрос выполняется без всякого анализа --- просто выполняется серия команд. Если вы сместились на два слова вправо и удалили все до конца строки, то макрос так и будет поступать, даже если уже надо три слова или одно. Если вы в макросах делаете опасные вещи, например, удаляете текст или, страшно подумать, файлы с диска, перемещаетесь по вкладкам и закрываете их --- думайте три раза, прежде чем запускать макрос!
И второе: если по ходу дела нужно задать вопрос, Вим его задаст: закрыть несохраненный файл, файл на диске новее, чем загруженный, ну, все такое.
И третье. Макросы могут быть в других регистрах, не только буквах. Не знаю, впрочем, зачем это может быть нужно.
И последнее: в макросах нельзя записывать макросы (что логично), q не работает; а вот проигрывать макросы --- можно. Поэтому вполне можно сделать несколько элементарных макросов и использовать их в более сложных. Что будет, если проиграть из макроса w этот же макрос w рекурсивно --- не знаю, не пробовал))