Найти в Дзене
Блокнот математика

Рубрика "Секреты Vim". Copy-paste и регистры

Привет всем, кто хочет больше узнать про систему регистров Вим.

Как работает традиционная система копирования/вырезания/вставки? Есть системный буфер или буфер данной программы. Операция копирования или вырезания (но не удаления) текста отправляет его в этот буфер, откуда потом можно вставить в нужное место. Новая операция замещает текст в буфере, но иногда доступно кое-что из ранее занесенного туда (иногда нет).

В Вим система существенно более мощная. Есть безымянный регистр, в который тоже помещается вырезамый или копируемый текст (удаления в общем-то и нет) и который потом можно вставить. Команды копирования: y, yy, Y. (Последняя работает неинтуитивно и ее надо переопределять: map Y y$)/ Команды вырезания: d, dd, D, а также s, c, cc, C. Команды вставки: p и P.

Есть еще 26 регистров, именованных буквами английского алфавита. Доступ к ним - через двойную кавычку, и туда можно вырезать и копировать текст и потом вставлять оттуда. Например, так: "ayy и потом "ap

Если имя регистра - заглавная буква, то текст туда добавляется, а не замещает содержимое.

Есть еще регистры, именованные цифрами. Это история. То есть, кроме последнего деяния (регистр 0), вы имеет доступ к 9 предыдущим.

Это особенно удобно, если Вы скопировали что-то, потом удалили слово и хотите вставить скопированное. Но в безымянном буфере свежеудаленное слово! Можно было скопировать то, что Вы хотите вставить, в именованный регистр, но кто ж об этом помнит? Выручит регистр 1.

Регистр - (дефис) хранит маленький текст - в пределах одной строки. Есть регистр "черная дыра": _ . Не стоит пользоваться им для удаления компромата - он доступен в истории и undo позволит до него добраться. Но удалить гигабайт текста лучше туда, чтобы не занимать память.

Полезен регистр / - он хранит выражение, по которому велся поиск. Можно вставить выражение, отредактировать, занести обратно. Или отредактировать прямо в командной строке - для вставки регистра в нее служит команда CTRL+R. Аналогичный регистр : хранит выполненную команду командной строки.

Другой полезный регистр - это =, регистр выражения. Можно ввести произвольное выражение и его результат будет вставлен в текст.

Регистр % содержит имя файла, а # - имя другого файла (наследие эпохи vi, когда файлов могло быть открыто только два).

Есть еще регистры связанные с системным буфером. . (точка) - последний вставленный оттуда в Вим текст (иногда надо нажать shift, чтобы вставка сработала, а порой CTRL+V не работает, и надо использовать CTRL+A или SHIFT+INS). Регистры *, + взаимодействуют с системным буфером, если Вим скомпилирован с этой опцией (у меня - нет). Регистр ~ взаимодствует с технологией drag&drop, и тоже может быть отключен.

Посмотреть содержимое регистров позволяет команда :reg

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