Найти тему
Блокнот математика

Рубрика "Секреты Вим". Макросы.

Вим встечает!
Вим встечает!

Всем привет, с вами еженедельная рубрика "Секреты Вим"! Сегодня поговорим о макросах --- последовательности действий, которую можно повторять. У меня уже была заметка о регистрах. Регистры в Вим --- это буквы английского алфавита (и есть еще специальные регистры, обозначаемые другими символами). Вы можете скопировать текст в регистр w, например так: "wyy --- в регистр w скопирована одна строка. Или "w42dd --- в регистр перемещено сорок две строки. Вставка, соответственно, "wp.

Однако регистры могут использоваться и для других целей. Одна из них --- это макросы. Все, что вы делаете, вы делаете, нажимая клавиши на клавиатуре (воззможно, еще привлекаете мышь). Нажатия на клавиши можно записать и потом воспроизвести. Собственно, вы можете так и поступить. Простой пример: вам надо скопировать слово и вставить его еще два раза. Вы нажмете: dwpp. Можно эту последовательность занести в регистр w (или любой другой) и выполнить макрос.

Выполнение макроса осуществляет команда @. Так, @w --- выполнит то, что лежит в регистре w. Плохая идея --- копировать что-то в этот регистр в теле макроса!

Команда @@ повторяет регистр, и может иметь повторитель. Так, 500@@ --- это очень мощно!

Однако записывать вручную серию команд неудобно. Ее лучше записать, и для этого есть команда q. После нее указывается регистр, а просто q завершает запись. Удобно использовать регистр q для хранения макросов:

  1. qq --- включили запись в регистр q
  2. делаете, что вам надо --- поиск, замена, команды движения, вставка текста, переход между вкладками --- без ограничений. Даже из Вим можно выйти.
  3. q --- конец записи
  4. @q --- повтор серии действий
  5. @@ --- Еще раз.

Можно проиграть регистр и в командной строке (:@w). Ну, и повторить (:@@). В обоих случаях можно указать диапазон строк --- по умолчанию диапазон --- текущая строка.

Мышь тоже записывается. Но не знаю, не знаю... Если вы переместили курсор на третий символ третьей строки сверху, то макрос так и поступит. Если третья сверху какая-то другая, то ему-то дела не будет. Если точно знаете, чего хотите --- пожалуйста.

Всегда можно посмотреть, что там записалось, вставив содержимое регистра в текст ("qp) или посмотрев командой :reg.

Пара замечаний. Макрос выполняется без всякого анализа --- просто выполняется серия команд. Если вы сместились на два слова вправо и удалили все до конца строки, то макрос так и будет поступать, даже если уже надо три слова или одно. Если вы в макросах делаете опасные вещи, например, удаляете текст или, страшно подумать, файлы с диска, перемещаетесь по вкладкам и закрываете их --- думайте три раза, прежде чем запускать макрос!

И второе: если по ходу дела нужно задать вопрос, Вим его задаст: закрыть несохраненный файл, файл на диске новее, чем загруженный, ну, все такое.

И третье. Макросы могут быть в других регистрах, не только буквах. Не знаю, впрочем, зачем это может быть нужно.

И последнее: в макросах нельзя записывать макросы (что логично), q не работает; а вот проигрывать макросы --- можно. Поэтому вполне можно сделать несколько элементарных макросов и использовать их в более сложных. Что будет, если проиграть из макроса w этот же макрос w рекурсивно --- не знаю, не пробовал))