Разнообразные команды – ЧАСТЬ 6

Чтобы Emacs восстановил состояние предыдущего  сеанса, вы обязаны запустить его из того же каталога, который вы использовали в прошлом сеансе.  Это необходимо, потому что desktop-read просматривает в поисках файла, который она должна прочитать, именно текущий каталог.  Это означает, что вы можете хранить отдельные сохраненные сеансы в разных каталогах; каталог, в котором вы запускаете Emacs, будет указывать, какой из сохраненных  сеансов вы хотите восстановить.

Переменная desktop-files-not-to-save говорит,  какие файлы исключаются при сохранении состояния. Ее значение — это регулярное выражение, совпадающее с именами исключаемых  файлов. По умолчанию исключаются удаленные (полученные по FTP) файлы; потому что повторное к ним обращение в последующем  сеансе может быть медленным. Если вы хотите включить эти файлы в сохраненное состояние, установите desktop-filesnot-to-save равной "^$". См. Раздел 14.12 [Удаленные  файлы], с. 134.

30.12  Уровни рекурсивного редактирования

Рекурсивное редактирование — это ситуация, в которой вы используете команды Emacs для выполнения произвольного редактирования, находясь в  середине  другой  команды Emacs.  Например, при наборе команды C-r  внутри  query-replace происходит вход в рекурсивное редактирование, где можно изменить текущий буфер. Выходя из этого рекурсивного редактирования, вы возвращаетесь в query-replace.

Выход из рекурсивного редактирования означает возврат к незаконченной команде, которая продолжает выполняться. Выход производится с помощью команды C-M-c (exitrecursive-edit).

Вы можете также прервать рекурсивное редактирование. Это похоже на выход, но при этом происходит также и незамедлительный выход из незаконченной команды. Прерывание рекурсивного редактирования производится по команде C-]  (abort-recursive-edit). См. Раздел 32.1 [Выход], с. 371.

Строка режима показывает вам, что вы находитесь в рекурсивном редактировании, при помощи квадратных скобок вокруг круглых  скобок, которые всегда окружают  названия основного и второстепенных режимов. Строка режима каждого окна показывает это таким же  образом, поскольку нахождение в рекурсивном редактировании относится к Emacs в целом, а не к какому-либо отдельному окну или буферу.

Возможно пребывание в рекурсивных редактированиях внутри рекурсивных редактирований. Например, после набора команды C-r в query-replace можно набрать команду, которая входит в отладчик. Это начинает уровень рекурсивного редактирования для отладчика внутри уровня рекурсивного редактирования для C-r.  Строки режима показывают пару квадратных скобок для каждого работающего в данный момент уровня рекурсивного редактирования.

Выход из внутреннего рекурсивного редактирования (например, с помощью команды c отладчика) возобновляет команду одним уровнем выше.   По окончанию этой команды можно использовать C-M-c, чтобы выйти из еще одного уровня рекурсивного редактирования, и так далее.  Выход относится только к самому внутреннему уровню. Прерывание тоже приводит к выходу лишь из одного уровня рекурсивного редактирования: происходит немедленный возврат на уровень команды предыдущего рекурсивного редактирования. Если хотите, то можете затем прервать и следующий уровень.

Напротив, команда M-x top-level прерывает  все уровни рекурсивного редактирования,

возвращаясь непосредственно на верхний командный уровень.

Текст, редактируемый внутри режима рекурсивного редактирования, не обязан  быть тем же,  что редактируется на верхнем уровне.   Это зависит от того,  для чего предназначалось рекурсивное редактирование.  Если команда, которая запускает рекурсивное редактирование, выбирает вначале  другой буфер, то он и будет буфером,  который рекурсивно редактируется.  В любом случае, внутри рекурсивного редактирования можно переключать буферы обычным способом (если ключи, переключающие  буферы, не перепривязаны). Вероятно, можно оставаться внутри рекурсивного редактирования и до конца сеанса, обращаясь  к  файлам и делая там все прочее.  Но время от времени  это может приводить к неожиданным результатам (например, к переполнению стека).  Поэтому не забывайте прерывать рекурсивное редактирование  или выходить из него, если оно вам больше не нужно.

В основном мы стараемся минимизировать  использование уровней рекурсивного редактирования в GNU Emacs. Это так, потому что они обязывают вас “возвращаться” в определенном порядке — от самого внутреннего уровня к верхнему уровню.  Если возможно, мы представляем различные виды деятельности в разных буферах, чтобы вы могли переключаться между ними, как вам нравится. Некоторые команды переключают в новый основной режим, который предоставляет команду для переключения назад. Эти методы

дают вам большую гибкость для возврата к незаконченным занятиям в том порядке,  в каком вы пожелаете.

30.13  Эмуляция

GNU Emacs может быть запрограммирован  для эмуляции (в большей или меньшей степени) большинства других редакторов. Стандартные средства могут эмулировать следующее:

EDT (редактор DEC VMS)

Эмуляция EDT  включается с помощью команды M-x edt-emulation-on.  Ко-

манда M-x edt-emulation-off восстанавливает обычные для Emacs привязки.

Большинство команд эмуляции EDT являются ключами вспомогательной клавиатуры, и большинство стандартных привязок ключей в Emacs остаются доступными.  Перепривязки при эмуляции EDT  выполняются в глобальной таблице ключей, таким образом, при нахождении в режиме эмуляции EDT  нет проблемы переключения буферов или основных режимов.

vi (редактор Беркли)

Viper — новейший эмулятор vi.   Он реализует несколько уровней эмуляции: уровень 1 ближе всех к vi, тогда как уровень 5 отходит от строгой эмуляции, чтобы воспользоваться возможностями Emacs. Чтобы вызвать Viper, наберите M-x viper-mode;  это проведет вас по остальному пути  и спросит об уровне эмуляции. См. Info файл ‘viper’, node ‘Top’.

vi (другой эмулятор)

M-x vi-mode входит в основной режим, который заменяет прежде установленный режим. Все команды vi, которые в настоящем vi входят в режим “ввода”, запрограммированы для возврата в предыдущий основной режим.  Таким образом, обычный Emacs служит режимом “ввода” для vi.

Поскольку эмуляция vi работает через основные режимы, переключать буфера в процессе эмуляции нельзя. Сначала необходимо вернуться в обычный Emacs. Если вы планируете часто использовать эмуляцию vi, то, вероятно, появится

желание привязать ключ к команде vi-mode.

vi (еще один эмулятор)

M-x vip-mode вызывает еще один эмулятор vi,  про который говорят,  что он соответствует настоящему vi более полно, чем M-x vi-mode.  Режим “ввода” в этом эмуляторе отличается от обычного Emacs, так что для возврата в режим эмуляции vi можно использовать hESCi.  Для возврата из режима эмуляции vi в обычный Emacs необходимо набрать C-z.

Этот режим эмуляции  не работает  через основные режимы, что обеспечивает возможность различных вариантов переключения  буферов внутри эмулятора. Приписывать ключ команде  vip-mode нет так  необходимо, как  в случае vimode, поскольку завершение режима вставки не использует  ее.

См. Info файл ‘vip’, node ‘Top’, для получения полной информации.

30.14  Диссошиэйтед Пресс

M-x dissociated-press — это команда для перемешивания текстового файла слово за словом или знак за знаком. Имея в начале буфер с нормальным текстом, она формирует крайне  забавный вывод.  Ввод производится из текущего буфера Emacs.  Диссошиэйтед Пресс записывает свой вывод в буфер с именем ‘*Dissociation*’, при этом, чтобы облегчить его постепенное чтение, через каждую пару строк (примерно) содержимое буфера показывается заново.

Диссошиэйтед  Пресс время от времени спрашивает, продолжать ли действие.  Для остановки необходимо ответить n.  Остановить можно также  в любое время с помощью C-g. Диссоциированная выдача сохраняется в буфере ‘*Dissosiation*’, чтобы по желанию можно было скопировать ее в другое место.

Диссошиэйтед  Пресс в процессе  работы совершает  беспорядочные прыжки  из одной точки буфера в другую.  Для получения правдоподобного вывода, а не тарабарщины, она соблюдает некоторое перекрытие между концом одного отрезка последовательности слов или знаков и началом следующего. Так, если только что она напечатала слово ‘президент’ и теперь решает прыгнуть  в другую точку  файла, то она может заметить ‘ент’ в слове

‘пентагон’ и продолжить вывод отсюда, выдавая в результате ‘президентагон’.2  Наилуч-

шие результаты получаются на длинных выборках.

Положительный аргумент M-x dissociated-press велит ей работать познаково и определяет число перекрывающихся знаков. Отрицательный аргумент заставляет  ее действовать слово за словом и определяет количество перекрывающихся слов.  В этом режиме целые слова, а не знаки, трактуются как переставляемые элементы.  Отсутствие аргумента эквивалентно аргументу, равному двум. К сновашему сведению, вывод осуществляется только в буфер ‘*Dissociation*’. Буфер, с которого вы начали, не изменяется.

Диссошиэйтед Пресс производит примерно те же результаты, что и марковская цепь, основанная на частотной таблице, построенной по выборочному тексту.  Однако, этот метод является независимым, игноригинальным изобретением. Диссошиэйтед Пресс повсеметодически копирует несколько последовательных знаков из выборки от прыжка к прыжку, тогда как цепь Маркова делала бы случайный выбор для каждого слова или знака. В итоге все это работает быстрее и придает результату более благозвучный вид.

Источник: Ричард Столмен, Руководство по GNU Emacs

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

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

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