Emacs предоставляет много различных основных режимов, каждый из которых настраивает Emacs на редактирование текста определенного вида. Основные режимы являются взаимоисключающими, и каждый буфер находится в каждый момент времени в одном основном режиме. Строка режима обычно содержит имя текущего основного режима в круглых скобках (смотрите раздел Строка режима).
Наименее специализированный основной режим называется 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
задает
соответствие между именами программ-интерпретаторов и основными
режимами.
Когда первая строка начинается с `#!', вы не можете (на многих
системах) использовать в ней `-*-', поскольку при запуске
интерпретатора это ввело бы в заблуждение систему. Поэтому в таких
файлах Emacs ищет `-*-' на второй строке, а не только на первой.
Когда вы обращаетесь к файлу, который не указывает, какой основной
режим использовать, или когда вы создаете новый буфер при помощи
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
.