Next Previous Contents

## 3. Режимы Emacs

Режимы Emacs--это различное поведение и свойства, которые вы можете включить или выключить (или настроить, конечно). Режимы делают редактор (Emacs) одинаково полезным для написания документации, программирования на многих языках (C, C++, Perl, Python, Java и другие), создания домашней страницы, работы с E-Mail, чтения новостей Usenet, отслеживания ваших должностей и даже игры в игры.

Режимы Emacs---это просто библиотеки кода на Lisp, который расширяет, изменяет и повышает возможности Emacs.

## 3.1 Главные режимы против второстепенных

Существует два типа режимов: Основные и Второстепенные. Различие между ними не так просто охватывается до тех пор пока вы не поработаете с несколькими из них включая и выключая их, но даст вам видение.

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

Это звучит немного абстрактно, так что давайте займемся примером. Существует режим, который я использую часто про написании простых текстовых файлов. Он называется `text-mode`. Этот режим был спроектирован для написания файлов в свободной форме, таких как файлы README. Он понимает как идентифицировать слова и параграфы и в общем выполняет все что требуется при использовании команд навигации.

Когда я пишу файлы для людей, я обычно хочу, чтобы они выглядели хорошо. Они должны иметь правильный перенос слов на определенной границе, и т.п. Для разрешения переноса слов я просто включаю второстепенный режим `auto-fill`. Этот режим пытается сделать все правильно, когда я набираю текст и достигаю конца строки. В действительности второстепенный режим означает, что его можно использовать с разными основными режимами. Режим выполняет то, что нужно в зависимости от того, в каком основном режиме он работает, поведение в `text-mode` отличается от поведения в `java-mode`. Я не хочу, чтобы мой код на Java переносился точно, также как и английский текст. Но я хочу, чтобы текст переносился в блоках комментариев Java! Режим `auto-fill` достаточно умен, чтобы делать различия между режимами.

Авторы различных режимов Emacs проделали огромную работу по проверке, того что те вещи, которые должны работать как второстепенные режимы работали как второстепенные режимы.

Если вы глянете на снимок экрана Emacs, то вы увидите, что строка режима показывает в каком режиме находится Emacs. В нашем случае он находится в режиме, который называется ``Lisp Interaction'', который является режимом по умолчанию. В действительности он полезен только в том, случае если вы пишите код на Lisp. (Но поскольку большая часть Emacs написана на Lisp, то почему-бы и нет?)

## 3.2 Режимы для программирования

Первое и самое главное---Emacsбыл создан программистом для программистов. Для всех языков программирования (даже не очень популярных) существуют высококачественные режимы. Я только вкратце опишу несколько из них.

Большинство режимов программирования разделяют общие характеристики. Обычно они делают некоторые или все из перечисленных свойств:

- Обеспечивает подсветку синтаксиса для языка.
- Обеспечивает автоматический отступ и форматирование кода языка.
- Обеспечивает контекстную помощь (по языку).
- Предоставляет интерфейс к вашему отладчику.
- Добавляет специфические для данного языка пункты в меню.

В добавление к этому существуют некоторые режимы, которые не являются специфическими для конкретных языков, они помогают выполнять задачи общие для программирования в разных языках. Это вещи, такие как взаимодействие с программным обеспечением контроля версий, автоматического добавления комментариев в ваш исходный код, создание Makefile, обновление Change Logs и т.п.

Когда вы соедините все эти режимы вместе и рассмотрите стабильность и зрелость кода Emacs, то он сравним с коммерческими Интегрированными средами разработки (IDE) для таких языков как C++ и Java. И конечно, он свободен.

### C/C++/Java

Поскольку синтаксис C, C++ и Java достаточно похож, то существует один режим Emacs, который обрабатывает все три языка (также как и Objective-C и IDL). Это очень зрелый и полный пакет, включенный в дистрибутив Emacs. Это режим называется либо `cc-mode`, либо `CC Mode`.

Для более полной информации или для получения более новой версии посетите http://www.python.org/emacs/.

### Perl

Существует два режима для редактирования кода Perl в Emacs. Первый называется `perl-mode` (как вы и ожидали), а второй называется `cperl-mode`. Я не делал обзора их историй и почему существует два режима (документация этого не объясняет), но кажется, что `perl-mode` был оригинальным режимом для редактирования кода на Perl в Emacs. Кажется он имеет меньше возможностей, чем `cperl-mode` и не имеет возможности распознать некоторые конструкции любителей Perl.

От себя я рекомендую `cperl-mode`, который кажется более активно сопровождается и имеет все возможности в которых я нуждаюсь. Вы можете найти самую последнюю версию здесь: ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs.

Но не принимайте мои слова близко к сердцу. Попробуйте поработать с обоими и выберите лучший для ваших нужд.

### Python

Python (другой очень популярный скриптовый язык) также имеет режим для Emacs. Как я уже мог упомянуть он не распространяется с GNU Emacs, но распространяется с XEmacs. Хотя он работает достаточно хорошо в обоих версиях.

Вы можете получить `python-mode` с официального сервера Python http://www.python.org/emacs/python-mode/.

### Другие

Также для помощи программистам существует много других режимов. Такие режимы могут помочь с такими вещами как:

- Скрипты Shell (Bash, sh, ksh, csh, ...)
- Awk, Sed, Tcl, ...
- Makefiles
- Change Logs
- Документация
- Отладка

И многое другое. Смотрите последний раздел этого документа, о том как найти режимы и дополнения.

## 3.3 Создание текстов

Прекрасные режимы Emacs не ограничены только написанием кода. Люди пишущие документацию (любого типа) также могут извлечь пользу из широкого выбора режимов Emacs.

### Проверка грамматики (режим `ispell`)

Авторы многих типов документов нуждаются в проверке грамматики. Если у вас установлен GNU ispell, то вы можете просто набрать `M-x ispell` и выполнить проверку текущего буфера. Если ispell находит слова, которых он не знает, то он выдаст список возможных замен и позволит вам выбрать одну (или ни одной) из них. Это эквивалентно по возможностям проверке грамматики во многих коммерческих пакетах.

### HTML (режим `html-helper`)

Если вы хотите создать файлы HTML, то вы должны попробовать `html-helper-mode`. Он доступен с http://www.santafe.edu/~nelson/tools/ вместе с документацией и сопутствующими утилитами.

Как видно из его имени, `html-helper-mode` обеспечивает много вещей для того, чтобы помочь людям, которые до сих пор пишут HTML вручную--старомодным способом.

Примечание переводчика: Я рекомендую использовать пакет `psgml`, кроме html он поддерживает разные типы sgml и различает разные стандарты html. Пакет доступен с http://www.lysator.liu.se/projects/about_psgml.html. Идет в поставке XEmacs.

### TeX (`tex-mode`)

Если вы пишите документы в TeX, то очень полезно заставить Emacs добавить цветовое выделение обратных слэшей, скобок и других символов. `tex-mode` заботится об этом.

Хотя я сам не много работал с TeX, когда я работал с этим режимом, то он был достаточно удобен, делая исходные тексты TeX более читаемыми.

Примечание переводчика: Также существует пакет AUC TeX, доступный по адресу http://www.iesd.auc.dk/~amanda/auctex/. Имеет больше возможностей, чем вышеупомянутый tex-mode. Идет в поставке XEmacs.

### SGML (`sgml-mode`)

The document you're now reading was written in SGML (and probably converted to the format you're reading it in). `sgml-mode` provides all the basics for SGML documents: validation, highlighting, forward-tag, backward-tag, and much more. It is a standard part of Emacs.

Примечание переводчика: Я рекомендую использовать пакет `psgml`, он поддерживает разные типы sgml. Пакет доступен с http://www.lysator.liu.se/projects/about_psgml.html.

## 3.4 Другие режимы

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

### Контроль версий (режим `vc`)

`vc` предоставляет интерфейс к большинству популярных систем контроля версий (RCS, SCCS, CVS), чтобы сделать очень легким работу с файлами, работу с выпусками и т.п. Режим является стандартной частью Emacs и описан в документации Emacs.

### Режим Shell

Зачем переключаться в другое окно X или виртуальный терминал для того, чтобы просто выполнить несколько команд shell? Сделайте это из Emacs и сохраните себя от беспокойства. `:-)`

`M-x shell` запустит shell внутри буфера Emacs. Вы сможете выполнить большинство вещей, которые вы можете делать в обычной строке shell (за исключением запуска полно-экранных программ, таких как `vi` или `pine`), потому-что Emacs общается с обычным shell в фоновом режиме.

Режим является стандартной частью Emacs, так что вы найдете документации по нему в стандартной документации Emacs.

### Telnet и FTP

Зачем переключаться в другое окно X или виртуальный терминал для того, чтобы просто запустить telnet или FTP? Выполните это из Emacs (работайте по образцу?)

Точно также, как и запуск shell изнутри Emacs, вы можете запустить telnet и ftp. Попробуйте выполнить `M-x telnet` или `M-x ftp` для приобретения опыта. Смотрите документацию для описания деталей работы.

### Man

Зачем переключаться в другое окно X или виртуальный терминал для того, чтобы просто прочитать справочную страницу? Сделайте это из Emacs. (Я обещаю, что остановлюсь).

Точно также, как и запуск shell изнутри Emacs, вы можете читать справочные страницы. Попробуйте выполнить команду `M-x man`.

### Ange-FTP

Цитата из документации по `ange-ftp`:

> Этот пакет пытается сделать доступ из GNU Emacs к файлам и каталогам на FTP простым и прозрачным насколько это возможно. Подмножество общих функций обработки файлов расширено для взаимодействия с FTP.

Это означает, что вы можете работать с файлами на удаленных машинах также как, как и с локальными. Так что если вам нужно изменить файл на удаленном компьютере, то просто скажите Emacs открыть его (используя немного отличный синтаксис путевого имени) и он возьмет на себя все детали о подключении и получении файла. Затем при сохранении файла через `C-x C-s`, `ange-ftp` перехватит сохранение и запишет измененный файл обратно на удаленную машину.

Немного измененный синтаксис путевого имени выглядит так... Файл именуемый ``myfile'', в каталоге пользователя ``user''', на машине с именем ``my.host.org'' может быть открыт (`C-x f`):

> `/user@my.host.org:~user/myfile`

Он также является стандартной частью дистрибутива Emacs, так что вы можете найти документацию среди документации по Emacs.

Спасибо Etienne Grossmann ( etienne@anonimo.isr.ist.utl.pt) за вышеприведенный пример.

Next Previous Contents