Режимы Emacs--это различное поведение и свойства, которые вы можете включить или выключить (или настроить, конечно). Режимы делают редактор (Emacs) одинаково полезным для написания документации, программирования на многих языках (C, C++, Perl, Python, Java и другие), создания домашней страницы, работы с E-Mail, чтения новостей Usenet, отслеживания ваших должностей и даже игры в игры.
Режимы Emacs---это просто библиотеки кода на Lisp, который расширяет, изменяет и повышает возможности Emacs.
Существует два типа режимов: Основные и Второстепенные. Различие между ними не так просто охватывается до тех пор пока вы не поработаете с несколькими из них включая и выключая их, но даст вам видение.
Одновременно может быть активен только один основной режим. Однако одновременно может использоваться несколько второстепенных режимов. Основные режимы ориентированы на определенный язык или задачу, в то время как второстепенные режимы являются маленькими и менее специфическими утилитами, которые пересекаются с многими задачами.
Это звучит немного абстрактно, так что давайте займемся
примером. Существует режим, который я использую часто про написании
простых текстовых файлов. Он называется text-mode
. Этот
режим был спроектирован для написания файлов в свободной форме,
таких как файлы README. Он понимает как идентифицировать слова и
параграфы и в общем выполняет все что требуется при использовании
команд навигации.
Когда я пишу файлы для людей, я обычно хочу, чтобы они выглядели
хорошо. Они должны иметь правильный перенос слов на определенной
границе, и т.п. Для разрешения переноса слов я просто включаю
второстепенный режим auto-fill
. Этот режим пытается
сделать все правильно, когда я набираю текст и достигаю конца
строки. В действительности второстепенный режим означает, что его
можно использовать с разными основными режимами. Режим выполняет
то, что нужно в зависимости от того, в каком основном режиме он
работает, поведение в text-mode
отличается от поведения в
java-mode
. Я не хочу, чтобы мой код на Java переносился
точно, также как и английский текст. Но я хочу, чтобы текст
переносился в блоках комментариев Java! Режим auto-fill
достаточно умен, чтобы делать различия между режимами.
Авторы различных режимов Emacs проделали огромную работу по проверке, того что те вещи, которые должны работать как второстепенные режимы работали как второстепенные режимы.
Если вы глянете на снимок экрана Emacs, то вы увидите, что строка режима показывает в каком режиме находится Emacs. В нашем случае он находится в режиме, который называется ``Lisp Interaction'', который является режимом по умолчанию. В действительности он полезен только в том, случае если вы пишите код на Lisp. (Но поскольку большая часть Emacs написана на Lisp, то почему-бы и нет?)
Первое и самое главное---Emacsбыл создан программистом для программистов. Для всех языков программирования (даже не очень популярных) существуют высококачественные режимы. Я только вкратце опишу несколько из них.
Большинство режимов программирования разделяют общие характеристики. Обычно они делают некоторые или все из перечисленных свойств:
В добавление к этому существуют некоторые режимы, которые не являются специфическими для конкретных языков, они помогают выполнять задачи общие для программирования в разных языках. Это вещи, такие как взаимодействие с программным обеспечением контроля версий, автоматического добавления комментариев в ваш исходный код, создание Makefile, обновление Change Logs и т.п.
Когда вы соедините все эти режимы вместе и рассмотрите стабильность и зрелость кода Emacs, то он сравним с коммерческими Интегрированными средами разработки (IDE) для таких языков как C++ и Java. И конечно, он свободен.
Поскольку синтаксис C, C++ и Java достаточно похож, то
существует один режим Emacs, который обрабатывает все три языка
(также как и Objective-C и IDL). Это очень зрелый и полный пакет,
включенный в дистрибутив Emacs. Это режим называется либо
cc-mode
, либо CC Mode
.
Для более полной информации или для получения более новой версии посетите http://www.python.org/emacs/.
Существует два режима для редактирования кода 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 (другой очень популярный скриптовый язык) также имеет режим для Emacs. Как я уже мог упомянуть он не распространяется с GNU Emacs, но распространяется с XEmacs. Хотя он работает достаточно хорошо в обоих версиях.
Вы можете получить python-mode
с официального сервера
Python
http://www.python.org/emacs/python-mode/.
Также для помощи программистам существует много других режимов. Такие режимы могут помочь с такими вещами как:
И многое другое. Смотрите последний раздел этого документа, о том как найти режимы и дополнения.
Прекрасные режимы Emacs не ограничены только написанием кода. Люди пишущие документацию (любого типа) также могут извлечь пользу из широкого выбора режимов Emacs.
ispell
) Авторы многих типов документов нуждаются в проверке
грамматики. Если у вас установлен GNU ispell, то вы
можете просто набрать M-x ispell
и выполнить проверку
текущего буфера. Если ispell находит слова, которых он не знает,
то он выдаст список возможных замен и позволит вам выбрать одну
(или ни одной) из них. Это эквивалентно по возможностям проверке
грамматики во многих коммерческих пакетах.
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-mode
) Если вы пишите документы в TeX, то очень полезно заставить
Emacs добавить цветовое выделение обратных слэшей, скобок и
других символов. tex-mode
заботится об этом.
Хотя я сам не много работал с TeX, когда я работал с этим режимом, то он был достаточно удобен, делая исходные тексты TeX более читаемыми.
Примечание переводчика: Также существует пакет AUC TeX, доступный по адресу http://www.iesd.auc.dk/~amanda/auctex/. Имеет больше возможностей, чем вышеупомянутый tex-mode. Идет в поставке XEmacs.
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.
Конечно существует множество других удобных режимов, которые делают жизнь более легкой. Вот просто образец популярных режимов:
vc
) vc
предоставляет интерфейс к большинству популярных
систем контроля версий (RCS, SCCS, CVS), чтобы сделать очень
легким работу с файлами, работу с выпусками и т.п. Режим является
стандартной частью Emacs и описан в документации Emacs.
Зачем переключаться в другое окно X или виртуальный терминал
для того, чтобы просто выполнить несколько команд shell? Сделайте
это из Emacs и сохраните себя от беспокойства. :-)
M-x shell
запустит shell внутри буфера Emacs. Вы
сможете выполнить большинство вещей, которые вы можете делать в
обычной строке shell (за исключением запуска полно-экранных
программ, таких как vi
или pine
), потому-что
Emacs общается с обычным shell в фоновом режиме.
Режим является стандартной частью Emacs, так что вы найдете документации по нему в стандартной документации Emacs.
Зачем переключаться в другое окно X или виртуальный терминал для того, чтобы просто запустить telnet или FTP? Выполните это из Emacs (работайте по образцу?)
Точно также, как и запуск shell изнутри Emacs, вы можете
запустить telnet и ftp. Попробуйте выполнить M-x telnet
или M-x ftp
для приобретения опыта. Смотрите
документацию для описания деталей работы.
Зачем переключаться в другое окно X или виртуальный терминал для того, чтобы просто прочитать справочную страницу? Сделайте это из Emacs. (Я обещаю, что остановлюсь).
Точно также, как и запуск shell изнутри Emacs, вы можете
читать справочные страницы. Попробуйте выполнить команду M-x man
.
Цитата из документации по 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) за вышеприведенный пример.