Emacs для начинающих

Копирование, перемещение и удаление блоков текста


Аналогично многим популярным текстовым процессорам и редакторам, 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". Воспользовавшись той же самой комбинацией клавиш, получим следующий список:



yellow black blue green
Далее, для того, чтобы вставить строку со словом "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

Содержание раздела