Основные режимы

Emacs предоставляет много различных основных режимов, каждый из которых настраивает Emacs на редактирование текста определённого вида. Основные режимы являются взаимоисключающими, и каждый буфер находится в каждый момент времени в одном основном режиме. Строка режима обычно содержит имя текущего основного режима в круглых скобках (смотрите раздел Строка режима).

@hyphenation{Fun-da-men-tal} Наименее специализированный основной режим называется Fundamental. Этот режим не имеет специальных режимных переопределений или устанавливаемых переменных, так что каждая команда Emacs ведёт себя самым обычным образом и каждый параметр находится в своём состоянии по умолчанию. Для редактирования некоторого текста определённого типа, такого как код на Лиспе или английский текст, вы должны переключить Emacs в соответствующий основной режим, такой как режим Lisp или режим Text.

Выбор основного режима изменяет значение нескольких ключей таким образом, чтобы они стали более приспособленным к редактируемому языку. Одни из наиболее часто изменяемых ключей -- это TAB, DEL и C-j. Префиксный ключ C-c обычно содержит команды, специфичные для режима. Помимо этого, команды для управления комментариями используют режим для определения того, каким образом комментарии должны ограничиваться. Многие основные режимы переопределяют синтаксические свойства знаков, появляющихся в буфере. Смотрите раздел Синтаксическая таблица.

Основные режимы делятся на три основных группы. Режим Lisp (который имеет несколько вариантов), режим C и режим Fortran -- для специфических языков программирования. Режим Text, режим Nroff, режим TeX и режим Outline -- для редактирования текста на естественном языке. Остальные основные режимы не предназначены для использования с файлами пользователей; они используются в буферах, создаваемых Emacs для специальных целей, это такие режимы, как режим Dired для буферов, созданных Dired (смотрите раздел Dired, редактор каталогов), режим Mail для буферов, созданных при помощи C-x m (смотрите раздел Посылка почты), и режим Shell для буферов, используемых для связи с подчиненным процессом оболочки (смотрите раздел Интерактивная подчиненная оболочка).

Большинство основных режимов для языков программирования указывают, что только пустые строки разделяют абзацы. Таким образом, команды работы с абзацами остаются удобными. (Смотрите раздел Абзацы.) Они так же заставляют режим Auto Fill использовать определение TAB для создания отступа во вновь создаваемых им строках. Это далется, поскольку большинство строк в программе обычно начинаются с отступа. (Смотрите раздел Отступы.)

Как выбираются основные режимы

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

Явный выбор нового основного режима делается при помощи команды M-x. Чтобы получить имя команды для выбора режима, добавьте к имени основного режима окончание -mode. Таким образом, вы можете войти в режим Lisp, выполнив команду M-x lisp-mode.

Когда вы обращаетесь к файлу, Emacs обычно выбирает правильный основной режим, основываясь на имени этого файла. Например, файлы, чьи имена оканчиваются на `.с', редактируются в режиме С. Соответствие между именем файла и основным режимом контролируется переменной auto-mode-alist. Её значение -- это список, каждый элемент которого имеет такой вид:

(регулярное-выражение . функция-режима)

или такой:

(регулярное-выражение функция-режима флаг)

Например, один элемент, обычно находящийся в этом списке, имеет вид ("\\.c\\'" . c-mode), и это является сигналом для выбора режима С для файлов, чьи имена кончаются на `.с'. (Отметим, что `\\' необходимо по синтаксису Лиспа для того, чтобы включить в эту строку знак `\', а он нужен для подавления специального значения `.' в регулярном выражении.) Если этот элемент имеет форму (регулярное-выражение функция-режима флаг), и флаг не nil, то после вызова функции-режима суффикс, совпавший с регулярным-выражением, отбрасывается, и в списке производится повторный поиск другого совпадения.

Вы можете указать, какой основной режим должен использоваться для редактирования определённого файла, с помощью текста специального вида в первой непустой строке файла. В этой строке должно появиться имя режима, до и после него должны стоять строки `-*-'. В этой строке также может появиться другой текст. Например,

;-*-Lisp-*-

приказывает Emacs использовать режим Lisp. Такое явное определение отменяет значение по умолчанию, основанное на имени файла. Отметим, что точка с запятой используется для того, чтобы Лисп трактовал эту строку как комментарий.

Другой формат определения режима:

-*- mode: имя-режима;-*-

что позволяет вам также задать локальные переменные, как здесь:

-*- mode: имя-режима; пер: значение; ... -*-

Смотрите раздел Локальные переменные в файлах, для получения большей информации об этом.

Если содержимое файла начинается с `#!', он может служить в качестве выполняемой команды оболочки, которая работает путем запуска интерпретатора, названного в первой строке этого файла. Остальная часть файла подается на вход интерпретатора.

Когда вы обращаетесь к подобному файлу в Emacs, если имя файла не задаёт основной режим, Emacs использует для выбора режима имя интерпретатора в первой строке. Если первая строка -- это имя поддерживаемой программы-интерпретатора, такой как `perl' или `tcl', Emacs использует режим, подходящий для программ для этого интерпретатора. Переменная interpreter-mode-alist задаёт соответствие между именами программ-интерпретаторов и основными режимами.

Когда вы обращаетесь к файлу, который не указывает, какой основной режим использовать, или когда вы создаёте новый буфер при помощи C-x b, то используемым основным режимом является тот, что определен переменной default-major-mode. Обычно её значение --- это символ fundamental-mode, который задаёт режим Fudamental. Если default-major-mode равна nil, то основной режим берётся из ранее выбранного буфера.

Если вы изменили основной режим буфера, вы можете вернуться к тому основному режиму, который Emacs выбрал бы автоматически: используйте для этого команду M-x normal-mode. Это та же функция, которую вызывает find-file для выбора основного режима. Она также обрабатывает список локальных переменных файла, если он есть.

Команды C-x C-w и set-visited-file-name переключают в новый основной режим, если новое имя файла подразумевает выбор режима (смотрите раздел Сохранение файлов). Однако, это не происходит, если содержимое буфера задаёт основной режим; и некоторые "специальные" основные режимы не допускают изменения режима. Вы можете выключить эту возможность переключения режимов, установив change-major-mode-with-file-name в значение nil.

Назад |  Вперед |  Содержание



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024