Уничтожение означает стирание текста и запись его в список уничтожений, из которого он может быть получен с помощью восстановления. Некоторые системы, ставшие недавно популярными, используют для обозначения этих операций термины “вырезка” и “вставка”.
Самый распространенный способ переноса или копирования текста в Emacs — сначала уничтожить его, а потом восстановить в одном или нескольких местах. Это очень надежно, так как все уничтоженные за последнее время куски текста запоминаются. И это удобно, так как многочисленные команды для уничтожения синтаксических единиц могут быть также использованы и для их перемещения. Но есть и другие способы копирования текста для особых целей.
Emacs хранит единый для всех буферов список уничтожений, так что вы можете уни-
чтожить текст в одном буфере и восстановить его в другом.
9.1 Удаление и уничтожение
Большинство команд, которые стирают текст из буфера, сохраняют его в списке уничтожений, чтобы вы могли перенести или скопировать его в другие части буфера. Эти команды известны как команды уничтожения. Остальные команды, стирающие текст, не записывают его в список уничтожений; они известны как команды удаления. (Такое отличие делается только для стирания текста в буфере). Если вы уничтожили или удалили текст по ошибке, вы можете использовать команду C-x u (undo) для отмены изменений (см. Раздел 4.4 [Отмена], с. 37).
Команды удаления включают C-d (delete-char) и hDELi (delete-backward-char), которые удаляют только один знак за один раз, и те команды, которые удаляют только пробелы или ограничители новой строки. Команды, которые могут уничтожить существенное количество нетривиальных данных, обычно являются командами уничтожения. Имена команд и их описания используют слова ‘kill’ и ‘delete’, чтобы пояснять что они делают.
9.1.1 Удаление
C-d Удалить следующий знак (delete-char).
hDELi Удалить предыдущий знак (delete-backward-char).
M-\ Удалить все пробелы и табуляцию вокруг точки (delete-horizontal-space).
M-hSPCi Удалить пробелы и табуляцию вокруг точки, оставляя один пробел (just-onespace).
C-x C-o Удалить пустые строки вокруг текущей строки (delete-blank-lines).
M-^ Объединить две строки, удаляя находящийся между ними ограничитель новой строки и любой отступ, следующий за ним (delete-indentation).
Самые основные команды удаления — это C-d (delete-char) и hDELi (delete-backwardchar). C-d удаляет знак после точки, над которым находится курсор. Точка не передвигается. hDELi удаляет знак перед курсором и передвигает точку назад. Ограничитель новой строки может быть удален точно также, как и любой другой знак в буфере. Удаление ограничителя новой строки объединяет две строки. Фактически C-d и hDELi не всегда являются командами удаления; если им дать аргумент, они уничтожают, так как этим способом они могут стереть уже более одного знака.
Другие команды удаления — это те, что удаляют только пробельные знаки: пробелы,
табуляцию и ограничители новых строк. M-\ (delete-horizontal-space) удаляет все
пробелы и символы табуляции перед и после точки. M-hSPCi (just-one-space) делает то же самое, но оставляет одиночный пробел после точки, независимо от количества пробелов, существовавших прежде (даже если оно было равно нулю).
C-x C-o (delete-blank-lines) уничтожает все пустые строки после текущей строки. Если текущая строка пустая, то также уничтожает все пустые строки, предшествующие текущей строке (оставляя одну пустую строку, текущую).
M-^ (delete-indentation) объединяет текущую строку и предшествующую ей, удаляя ограничитель новой строки и все окружающие пробелы, обычно оставляя одиночный пробел. См. Глава 20 [Отступы], с. 177.
9.1.2 Уничтожение строк
C-k Уничтожить остаток строки, либо одну или несколько строк (kill-line).
Простейшей командой уничтожения является C-k. Если она дается в начале строки, то уничтожает весь текст на строке, оставляя ее пустой. Если команда дана на пустой строке, то уничтожает всю строку, включая ее ограничитель. Чтобы уничтожить непустую строку целиком, перейдите в ее начало и нажмите C-k дважды.
В более общем виде, C-k уничтожает все от точки вплоть до конца строки, если это не происходит в конце строки. В этом случае она уничтожает ограничитель новой строки, следующий за строкой, таким образом происходит слияние следующей строки с текущей. При решении вопроса о том, какой случай применять, невидимые пробелы и табуляция в конце строки игнорируются, так, если точка выглядит стоящей в конце строки, вы можете быть уверены, что C-k уничтожит перевод строки.
Если C-k будет присвоен положительный аргумент, она уничтожит ровно столько строк вместе со следующими за ними ограничителями (однако, текст на текущей строке перед точкой сохраняется). С отрицательным аргументом ?n она уничтожает n строк, предшествующих текущей (вместе с текстом на текущей строке перед точкой). Таким образом, C-u 2 C-k в начале строки уничтожает две предыдущие строки.
C-k с аргументом, равным нулю, уничтожает текст перед точкой на текущей строке.
Если переменная kill-whole-line не равна nil, C-k в самом начале строки уничтожает всю эту строку, включая последующий перевод строки. Эта переменная обычно равна nil.
9.1.3 Другие команды уничтожения
C-w Уничтожить область (от точки до метки) (kill-region).
M-d Уничтожить слово (kill-word). См. Раздел 21.1 [Слова], с. 181.
M-hDELi Уничтожить предыдущее слово (backward-kill-word).
C-x hDELi Уничтожить назад до начала предложения (backward-kill-sentence). См.
Раздел 21.2 [Предложения], с. 182.
M-k Уничтожить до конца предложения (kill-sentence).
C-M-k Уничтожить s-выражение (kill-sexp). См. Раздел 22.2 [Списки], с. 206.
M-z знак Уничтожить вплоть до следующего появления знака (zap-to-char).
C-w (kill-region) — очень распространенная команда уничтожения, которая уничтожает все между точкой и меткой. С помощью этой команды вы можете уничтожить любую непрерывную последовательность знаков, если сначала установите метку в одном ее конце и отправитесь в другой конец.
Удобный способ уничтожения — это уничтожение скомбинированное с поиском: M-z
(zap-to-char) считывает знак и уничтожает от точки вплоть до следующего появления
этого знака (и включая его) в буфере. Числовой аргумент действует как счетчик повторов. Отрицательный аргумент означает поиск в обратную сторону и уничтожение текста перед точкой.
Могут уничтожаться другие синтаксические единицы: слова, с помощью M-hDELi и M-d (см. Раздел 21.1 [Слова], с. 181); s-выражения, с помощью C-M-k (см. Раздел 22.2 [Списки], с. 206); и предложения, с помощью C-x hDELi и M-k (см. Раздел 21.2 [Предложения], с. 182).
Вы можете использовать команды уничтожения в буферах, доступных только для чтения. На самом деле они не изменяют буфер и подают звуковой сигнал, чтобы предупредить вас об этом, но они действительно копируют текст, который вы попытались уничтожить, в список уничтожений, так что вы можете восстановить его в других буферах. Большинство команд уничтожения передвигают точку по тексту, который они копируют таким способом, поэтому последовательные команды уничтожения, как обычно, создают единое вхождение в списке уничтожений.
9.2 Восстановление
Восстановление возвращает обратно текст, который был ранее уничтожен. Это то же самое, что в других системах называется “вставкой”. Обычный способ копирования или перемещения текста — уничтожить его, а затем восстановить один или несколько раз.
C-y Восстановить последний уничтоженный текст (yank).
M-y Заменить только что восстановленный текст предшествующим куском уничто-
женного текста (yank-pop).
M-w Сохранить область как последний уничтоженный текст без фактического уни-
чтожения (kill-ring-save).
C-M-w Добавить следующее уничтожение к последнему куску уничтоженного текста
(append-next-kill).
9.2.1 Список уничтожений
Весь уничтоженный текст записывается в кольцевой список уничтожений, список блоков текста, который был уничтожен. Существует только один список уничтожений, используемый во всех буферах, таким образом вы можете уничтожить текст в одном буфере и восстановить его в другом. Это обычный способ перемещения текста из одного файла в другой. (См. Раздел 9.3 [Накопление текста], с. 73, для получения информации о других способах).
Команда C-y (yank) вновь вставляет текст, уничтоженный самым последним. Она оставляет курсор в конце текста, метка устанавливается в его начале. См. Глава 8 [Пометка], с. 63.
C-u C-y оставляет курсор перед текстом и устанавливает метку после него. Это происходит, только если аргумент задан с помощью просто C-u. Любой другой вид аргумента, включая C-u и цифры, обозначают восстановление уничтоженного ранее (см. Раздел 9.2.3 [Ранее уничтоженное], с. 72).
Если вы хотите скопировать блок текста, вы можете использовать M-w (kill-ringsave), которая копирует область в список уничтожений без удаления его из буфера. Это приблизительный эквивалент C-w, за которой следует C-x u, за исключением того, что M-w не изменяет историю восстановлений и не изменяет на время экран.
9.2.2 Добавление уничтожений
Обычно каждая команда уничтожения добавляет новый блок в список уничтожений. Однако, две или более команды уничтожения подряд объединяют текст в единый элемент, так что одиночная C-y возьмет весь его обратно таким, каким он был перед уничтожением.
Таким образом, если вы хотите восстановить текст как одно целое, вы не должны уничтожать весь этот текст одной командой; вы можете продолжать уничтожение строки за строкой или слова за словом до тех пор, пока не уничтожите весь текст полностью, и вы можете получить его обратно сразу целиком.
Источник: Ричард Столмен, Руководство по GNU Emacs

April 19th, 2012
admin
Опубликовано в рубрике
Метки: