Уничтожение и перемещение  текста – ЧАСТЬ 1

Уничтожение означает стирание текста и запись его в список уничтожений, из которого он может быть получен с помощью восстановления. Некоторые системы, ставшие недавно популярными, используют для обозначения этих операций термины “вырезка” и “вставка”.

Самый распространенный  способ переноса или копирования текста в 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) и hDEL(delete-backwardchar).  C-d удаляет знак после точки, над которым находится курсор. Точка не передвигается. hDELi  удаляет знак перед курсором и передвигает точку назад. Ограничитель новой строки может быть удален точно также, как и любой другой знак в буфере. Удаление ограничителя новой строки объединяет две строки. Фактически C-d и hDELне всегда являются командами удаления; если им дать аргумент, они уничтожают, так как этим способом они могут стереть уже более одного знака.

Другие команды удаления — это те, что удаляют только пробельные знаки: пробелы,

табуляцию и ограничители новых строк.   M-\  (delete-horizontal-space) удаляет все

пробелы и символы табуляции перед и после точки. M-hSPC(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 hDELи 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

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий