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
.
Go to the first, previous, next, last section, table of contents.