Копирование, перемещение и удаление блоков текста
Аналогично многим популярным текстовым процессорам и редакторам, 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 |
yellow black white blue green |
yellow black blue green |
yellow black blue white green |
yellow black blue red green |