Копирование, перемещение и удаление блоков текста
Аналогично многим популярным текстовым процессорам и редакторам, Emacs позволяет вырезать, копировать и вставлять выделенные блоки текста. Корни этих операций для редактора Emacs уходят в бронзовый век компьютерной эры, поэтому описание команд могут показать современному пользователю несколько странными. Для избежания разночтений ниже приводится полезный словарик:
| region |
Блок текста |
| point |
Положение курсора |
| mark |
Если перед курсором - начало выделяемого блока, Если после курсора - конец выделяемого блока |
| kill ring |
Временная область памяти, куда помещается текст, который позднее будет скопирован или перемещен. В более поздних текстовых процессорах эту область часто называют "clipboard" или "буфером обмена". Хотя kill ring способен удерживать несколько блоков удаляемого или копируемого текста. |
| kill-region |
Операция по удалению выделенного блока и сохранению его содержимого во временном буфере в kill ringВ современных текстовых процессорах эта операция известна как удаление блока в "буфер обмена". |
| copy-region |
копирование выделенного блока в буфер обмена. |
| yank |
Вставка блока, помещенного последним в буфер обмена, в текущую позицию курсора. Современные текстовые процессоры, использующие терминологию "clipboard" (буфер обмена), называют эту операцию "Вставка" ("Paste"). |
В современных версиях Emacs в меню Edit, оперирующему вышеописанными объектами и операциями, все чаще используется современная терминология.
Любая операция копирования, перемещения или удаления начинается с выделения блока текста. Для того, чтобы начать выделение блока, поместите курсор в начало блока и нажмите C-spase (или C-@, обе эти комбинации соответствуют команде set-mark-command), перемещая курсор стандартными клавишами, установите его в конце блока. Операцию выделения можно выполнять в обратном порядке: нажать C-spase в конце блока, а затем установить курсор в начало.
Некоторые версии Emacs отображают цветом выделяемую область. Однако многие версии этого не делают, поэтому так легко забыть какой именно текст выделяется. Это может привести к неприятностям при использовании впоследствии команды delete. Чтобы исключить подобные ситуации, существует команда exchange-point-and-mark (C-x C-x), которая позволяет проверить установленные границы выделенного блока путем "перепрыгивания" курсора в начало/конец блока. Повторное нажатие комбинации C-x C-x возвращает курсор в прежнюю позицию.
Чтобы выполнить операцию удаления блока delete (или "kill"), нажмите
C-w или выберите команду
Cut из меню
Edit. Если блок был удален случайно, операция отката (
yank) удалит этот блок из буфера обмена (
kill ring) и вернет его обратно нажатием клавиши
C-y. Если перед операцией отката курсор был перемещен, то блок текста будет возвращен в текущую позицию курсора.
Наличие в меню
Edit пункта
Select and Paste(в Xemacs отсутствует - прим. перев.) расширяет возможности использования команды
yank.
Select and Paste выводит на экран каскадное меню, содержащее несколько последних скопированных в буфер блоков.
Можно скопировать блок в "kill ring", выбрав команду
Copy из меню
Edit или нажав
M-w (команда
kill-ring-save). Данная процедура никак не скажется на редактируемом файле, но сделает доступным многократное использование однажды скопированного в буфер блока.
В текстовых процессорах, использующих буфер обмена (clipboard), удаленный или скопированный в буфер текст замещает уже находящийся там текст. В таких редакторах если планируется что-либо удалить или скопировать, чтобы позднее вставить фрагмент, то операцию по перемещению выделенного блока в буфер нужно выполнять непосредственно перед вставкой текста. Команда
yank-pop редактора Emacs позволяет копировать блоки текста независимо от того, когда он был помещен в буфер. Количество удерживаемых в буфере обмена блоков зависит от версии Emacs.
Пример. В нижеприведенном тексте требуется переместить строку со словом "red", поставив ее после строки со словом "blue".
| yellow red black white blue green |
Переместите курсор в начало строки со словом "red" и нажмите
C-space, чтобы обозначить начало выделяемого блока. Затем переместите курсор в начало следующей строки и нажмите
C-w, чтобы удалить выделенную строку.
| yellow black white blue green |
Пускай после удаления строки со словом "red", нужно удалить строку со словом "white". Воспользовавшись той же самой комбинацией клавиш, получим следующий список:
Далее, для того, чтобы вставить строку со словом "red" перемещаем курсор в строку со словом "green", устанавливаем курсор на букве "g" (поскольку "red" должно быть вставлено перед "green"). Нажмите
C-y, чтобы вставить удаленный текст в текущую позицию. И тут обнаруживается, что вместо слова "red" вставлено слово "white":
| yellow black blue white green |
Здесь нет никакой ошибки. Просто запомните еще одну
yank-pop команду, которая последовательно вставляет в текущую позицию блоки, помещенные в буфер
kill ring. Нужно нажать
M-y, и в строке появиться "red" вместо ранее вставленного "white":
| yellow black blue red green |