|
Использование множества буферовТекст, который вы редактируете в Emacs, находится в
объекте, называемом буфером. Каждый раз, когда вы обращаетесь к файлу,
для хранения его текста создаётся буфер. Каждый раз, когда вы запускаете Dired,
создается буфер, содержащий список каталога. Если вы посылаете сообщение с
помощью C-x m, то для текста этого сообщения используется буфер с
именем В любой момент один и только один буфер является выбранным. Он также называется текущим буфером. Часто мы говорим, что команда действует в "буфере", как если бы он был только один; но на самом деле это означает, что команда действует в выбранном буфере (большинство команд так и делают). Когда Emacs создаёт множество окон, каждое окно имеет свой выбранный буфер, но в любой момент времени только одно из окон является выбранным, и его буфер -- это выбранный буфер. Строка режима каждого окна показывает имя буфера, который в нём отображён (смотрите раздел Множество окон). У каждого буфера есть имя, которое может быть произвольной длины, и вы можете
выбрать любой буфер по имени. Большинство буферов создаются при обращении к
файлам, и их имена производятся из имени файла. Но вы можете также создать
пустой буфер с любым именем, каким захотите. Только что запущенный Emacs несет
один буфер с именем Каждый буфер записывает отдельно, к какому файлу он обращается, изменен ли он, и какие основной и второстепенные режимы в нём действуют (смотрите раздел Основные режимы). Любая переменная Emacs может быть сделана локальной для конкретного буфера; имеется в виду, что её значение в этом буфере может отличаться от её значения в других буферах. Смотрите раздел Локальные переменные. Создание и выбор буферов
Чтобы выбрать буфер с
именем имя-буфера, наберите C-x b имя-буфера
RET. Это запустит команду Большинство буферов создаются при обращении к файлам или же командами Emacs,
которые хотят показать некоторый текст, но вы также можете явно создать буфер,
набрав C-x b имя-буфера RET. Эта команда
создаёт новый, пустой буфер, который не обращется ни к какому файлу, и выберет
его для редактирования. Такие буферы создаются для заметок. Если вы попытаетесь
сохранить этот буфер, то у вас спросят имя файла для записи. Основной режим в
новом буфере определяется значением переменной Отметим, что C-x C-f и любая другая команда для обращения к файлу также могут использоваться для переключения к существующему буферу, обращающемуся к файлу. Смотрите раздел Обращение к файлам. Emacs использует буферы с именами, начинающимися с пробела, для внутренних целей. Отчасти он обращается с буферами с такими именами особенным образом -- например, по умолчанию в них не записывается информация для отмены изменений. Вам лучше избегать использования таких имён для буферов. Перечисление существующих буферов
Чтобы напечатать список всех существующих буферов, наберите C-x C-b. Каждая строка в списке показывает имя одного буфера, его основной режим и файл, к которому он обращается. Буферы перечисляются в том порядке, в котором они были текущими; буферы, которые были текущими недавно, идут первыми. Знак `*' в начале строки указывает, что буфер "модифицирован". Если модифицированы несколько буферов, то может быть пора записать некоторые из них при помощи C-x s (смотрите раздел Сохранение файлов). Знаком `%' обозначаются буферы, доступные только для чтения. Знак `.' отмечает выбранный буфер. Вот пример перечня буферов: MR Buffer Size Mode File -- ------ ---- ---- ---- .* emacs.tex 383402 Texinfo /u2/emacs/man/emacs.tex *Help* 1287 Fundamental files.el 23076 Emacs-Lisp /u2/emacs/lisp/files.el % RMAIL 64042 RMAIL /u/rms/RMAIL *% man 747 Dired /u2/emacs/man/ net.emacs 343885 Fundamental /u/rms/net.emacs fileio.c 27691 C /u2/emacs/src/fileio.c NEWS 67340 Text /u2/emacs/etc/NEWS *scratch* 0 Lisp Interaction Отметим, что буфер Разнообразные операции над буфером
Буфер может быть доступен только для чтения, что означает, что команды для изменения его содержимого не разрешены. Строка режима указывает на то, что буфер доступен только для чтения, знаками `%%' или `%*' около левого края. Буферы только для чтения обычно создаются подсистемами вроде Dired и Rmail, которые имеют специальные команды для действий над текстом; буфер только для чтения создаётся также, если вы обращаетесь к файлу, для которого у вас нет доступа на запись. Если вы хотите сделать изменения в буфере, предназначенном только для чтения,
используйте команду C-x C-q ( M-x rename-buffer изменяет имя текущего буфера. Новое имя задаётся как аргумент минибуфера. Значения по умолчанию нет. Если вы напишете имя, которое используется для какого-то другого буфера, то происходит ошибка, и переименование не делается. M-x rename-uniquely переименовывает текущий буфер в похожее имя с
добавленным числовым окончанием и делает это имя одновременно уникальным и
отличным от других. Этой команде не нужен аргумент. Она полезна для создания
нескольких буферов с оболочкой: если вы переименуете буфер M-x view-buffer очень похожа на M-x view-file (смотрите раздел Разнообразные действия над файлами), за исключением того, что она показывает уже существующий буфер Emacs. Режим View предусматривает команды для удобной прокрутки буфера, но не для его изменения. Когда вы выходите из режима View с помощью q, вы переключаетесь назад к тому буферу (и позиции), который прежде отображался в этом окне. Или вы можете выйти из режима View с помощью e, в результате после прочтения сохранятся буфер и значение точки. Команды M-x append-to-buffer and M-x insert-buffer можно использовать для копирования текста из одного буфера в другой. Смотрите раздел Накопление текста. Уничтожение буферовЕсли вы продолжаете работу в Emacs довольно долго, вы можете накопить большое количество буферов. Тогда вы можете посчитать удобным уничтожить те из них, в которых вы больше не нуждаетесь. В большинстве операционных систем уничтожение буфера освобождает занимаемое им пространство, так что его смогут использовать другие процессы. Вот несколько команд для уничтожения буферов:
C-x k ( Команда M-x kill-some-buffers спрашивает о каждом буфере, один за
другим. Ответ y означает уничтожить буфер. Уничтожение текущего
буфера или буфера, содержащего незаписанные изменения, выбирает новый буфер или
требует такого же подтверждения, как и Меню буферов (смотрите раздел Действия над несколькими буферами) также предоставляет удобный способ уничтожения различных буферов. Если вы хотите делать что-то особенное каждый раз, когда
уничтожается буфер, вы можете добавить свои функции в ловушку
Если вы продолжаете один сеанс Emacs в течении многих дней, как делают многие, он может наполниться буферами, которые вы использовали несколько дней назад. Команда M-x clean-buffer-list -- это удобный способ очистить их; она уничтожает все неизмененные буферы, которые вы не использовали долгое время. Обычные буферы уничтожаются, если они не отображались в течении трех дней; однако, вы можете указать определённые буферы, которые никогда не должны уничтожаться автоматически, и другие, которые нужно уничтожать, если их не использовали хотя бы час. Вы также можете
сделать так, чтобы эти буферы очищались для вас сами ежедневно в полночь,
включив режим Midnight. Режим Midnight работает каждый день в полночь; в это
время он запускает Чтобы включить режим Midnight, используйте буфер Customization для установки
переменной Действия над несколькими буферамиМеню буферов похоже на "Dired для буферов". Оно позволяет вам запрашивать действия для различных буферов Emacs при помощи редактирования буфера, содержащего их список. Вы можете сохранять буферы, уничтожать их (здесь это называется удалением для согласования с Dired) или показывать их.
Команда
Команды d, C-d, s и u для добавления или сброса флагов также перемещают вниз (или вверх) на одну строку. Они принимают числовой аргумент в качестве счетчика повторов. Эти команды действуют сразу на буфер, перечисленный в текущей строке:
Есть также команды для выбора другого буфера или нескольких буферов:
Все, что Существует только одно различие между Буфер Косвенные буферыКосвенный буфер разделяет текст с каким-то другим буфером, называемым базовым буфером косвенного буфера. Это своего рода аналог символьных ссылок на файлы, но для буферов.
Текст в косвенном буфере всегда идентичен тексту его базового буфера; изменения, сделанные в одном, сразу же становятся видны в другом. Но во всем остальном косвенный буфер и его базовый буфер абсолютно различны. У них разные имена, разные значения точки, разное сужение, разные пометки, разные основные режимы и разные локальные переменные. Косвенные буферы не могут обращаться к файлам, но их базовые буферы могут. Если вы пытаетесь записать косвенный буфер, это в действительности работает как запись базового буфера. Уничтожение базового буфера уничтожает косвенный буфер, но уничтожение косвенного буфера не влияет на базовый буфер. Один из способов применения косвенных буферов -- отображение нескольких различных видов схемы текста. Смотрите раздел Просмотр одной схемы в нескольких видах. Назад | Вперед | Содержание |
|
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети