Emacs предоставляет много различных основных режимов, каждый изкоторых настраивает Emacs на редактирование текста определенного вида.Основные режимы являются взаимоисключающими, и каждый буфер находится вкаждый момент времени в одном основном режиме. Строка режима обычносодержит имя текущего основного режима в круглых скобках (see section Строка режима).
@hyphenation{Fun-da-men-tal} Наименее специализированный основной режим называетсяFundamental. Этот режим не имеет специальных режимныхпереопределений или устанавливаемых переменных, так что каждая командаEmacs ведет себя самым обычным образом и каждый параметр находится всвоем состоянии по умолчанию. Для редактирования некоторого текстаопределенного типа, такого как код на Лиспе или английский текст, выдолжны переключить Emacs в соответствующий основной режим, такой какрежим Lisp или режим Text.
Выбор основного режима изменяет значение нескольких ключей таким образом, чтобы они стали более приспособленным к редактируемому языку.Одни из наиболее часто изменяемых ключей -- это TAB, DEL иC-j. Префиксный ключ C-c обычно содержит команды,специфичные для режима. Помимо этого, команды для управлениякомментариями используют режим для определения того, каким образомкомментарии должны ограничиваться. Многие основные режимыпереопределяют синтаксические свойства знаков, появляющихся в буфере.See section Синтаксическая таблица.
Основные режимы делятся на три основных группы. Режим Lisp (которыйимеет несколько вариантов), режим C и режим Fortran -- дляспецифических языков программирования. Режим Text, режим Nroff, режимTeX и режим Outline -- для редактирования текста на естественномязыке. Остальные основные режимы не предназначены для использования сфайлами пользователей; они используются в буферах, создаваемых Emacs дляспециальных целей, это такие режимы, как режим Dired для буферов,созданных Dired (see section Dired, редактор каталогов), режим Mail для буферов, созданных припомощи C-x m (see section Посылка почты), и режим Shell для буферов,используемых для связи с подчиненным процессом оболочки(see section Интерактивная подчиненная оболочка).
Большинство основных режимов для языков программирования указывают,что только пустые строки разделяют абзацы. Таким образом, командыработы с абзацами остаются удобными. (See section Абзацы.) Они так жезаставляют режим Auto Fill использовать определение TAB длясоздания отступа во вновь создаваемых им строках. Это далется,поскольку большинство строк в программе обычно начинаются с отступа.(See section Отступы.)
Как выбираются основные режимы
Вы можете выбрать основной режим для текущего буфера явно, но чащеEmacs сам определяет, какой режим использовать, основываясь на именифайла или на специальном тексте в файле.
Явный выбор нового основного режима делается при помощи командыM-x. Чтобы получить имя команды для выбора режима, добавьте кимени основного режима окончание -mode
. Таким образом, вы можетевойти в режим Lisp, выполнив команду M-x lisp-mode.
Когда вы обращаетесь к файлу, Emacs обычно выбирает правильныйосновной режим, основываясь на имени этого файла. Например, файлы, чьиимена оканчиваются на `.с', редактируются в режиме С. Соответствиемежду именем файла и основным режимом контролируется переменнойauto-mode-alist
. Ее значение -- это список, каждый элементкоторого имеет такой вид:
(регулярное-выражение . функция-режима)
или такой:
(регулярное-выражениефункция-режимафлаг)
Например, один элемент, обычно находящийся в этом списке, имеет вид("\\.c\\'" . c-mode)
, и это является сигналом для выборарежима С для файлов, чьи имена кончаются на `.с'. (Отметим, что`\\' необходимо по синтаксису Лиспа для того, чтобы включить в этустроку знак `\', а он нужен для подавления специального значения`.' в регулярном выражении.) Если этот элемент имеет форму(регулярное-выражениефункция-режимафлаг)
, ифлаг не nil
, то после вызова функции-режима суффикс,совпавший с регулярным-выражением, отбрасывается, и в спискепроизводится повторный поиск другого совпадения.
Вы можете указать, какой основной режим должен использоваться дляредактирования определенного файла, с помощью текста специального вида впервой непустой строке файла. В этой строке должно появиться имя режима,до и после него должны стоять строки `-*-'. В этой строке такжеможет появиться другой текст. Например,
;-*-Lisp-*-
приказывает Emacs использовать режим Lisp. Такое явное определениеотменяет значение по умолчанию, основанное на имени файла. Отметим, чтоточка с запятой используется для того, чтобы Лисп трактовал эту строкукак комментарий.
Другой формат определения режима:
-*- mode: имя-режима;-*-
что позволяет вам также задать локальные переменные, как здесь:
-*- mode: имя-режима; пер: значение; ... -*-
See section Локальные переменные в файлах, для получения большей информации об этом.
Если содержимое файла начинается с `#!', он может служить вкачестве выполняемой команды оболочки, которая работает путем запускаинтерпретатора, названного в первой строке этого файла. Остальная частьфайла подается на вход интерпретатора.
Когда вы обращаетесь к подобному файлу в 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
переключают вновый основной режим, если новое имя файла подразумевает выбор режима(see section Сохранение файлов). Однако, это не происходит, если содержимое буферазадает основной режим; и некоторые "специальные" основные режимы недопускают изменения режима. Вы можете выключить эту возможностьпереключения режимов, установив change-major-mode-with-file-name
в значение nil
.