Академический Документы
Профессиональный Документы
Культура Документы
Редактор emacs
История
Прототипом редактора emacs послужил ряд расширенных команд или макросов, со-
зданных для текстового редактора конца 60-х годов TECO (Text Editor and Corrector —
текстовый редактор и корректор). Его происхождение отражено в имени, являющимся
сокращением от Editor MACroS (макрос редактора), хотя эта аббревиатура породила
и множество юмористических толкований, в числе которых ESCAPE META ALT
CONTROL SHIFT (названия клавиш), Emacs Makes All Computing Simple (Emacs
превращает все компьютеры в простые устройства) и недоброжелательный перевод его
названия — Eight Megabytes And Constantly Swapping (постоянная подкачка страниц
при восьми мегабайтах памяти).
Развитие
Со временем emacs совершенствовался, выдержав более чем 20 основных версий
и дойдя до широко распространенной GNU-версии. Редактор emacs, разработанный
на C, содержит полноценный интерпретатор языка Лисп и полностью поддерживает
X Window System, а также работу с мышью. В своем развитии он уже ушел далеко
вперед от исходных макросов TECO, но все еще является инструментом, находящимся
в активной разработке. Версия 22 существенно обновлена в связи с интернационали-
зацией: она обладает расширенным внутренним набором символов UTF-8, в четыре
раза превышающим по объему Unicode, а также шрифтами и методами ввода символов
с клавиатуры, позволяющими работать на более чем 30 языках. К тому же пользова-
тельский интерфейс развивается в направлении поддержки концепции текстового
процессора WYSIWYG (what you see is what you get — что видишь, то и имеешь), что
облегчает новичкам освоение работы с этим редактором.
История 221
Редактор emacs всегда был существенно более развитым средством, чем простой
текстовый редактор. Будучи изначально разработанным вне UNIX-среды, он не при-
держивается UNIX/Linux-философии. В отличие от UNIX/Linux-утилиты, которая
обычно разрабатывается для выполнения какой-нибудь одной конкретной задачи
и предназначена для совместного использования с другими утилитами, редактор emacs
разработан в качестве средства «все в одном». Пользуясь преимуществами положенно-
го в его основу языка программирования (Лисп), пользователи emacs предпочитают
вместо применения уже существующих утилит и создания новых универсальных
инструментов настраивать под свои нужды и расширять функции самого редактора.
То есть они делятся друг с другом своими настроечными файлами ~/.emacs.
Задолго до появления X Window System Ричард Столлмен вложил немало сил
и фантазии в создание оконной рабочей среды, используя emacs в качестве иссле-
довательского полигона. Со временем он создал внутри emacs средства для чтения
и составления сообщений электронной почты, чтения и публикации сетевых новостей,
запуска команд оболочки, компилирования программ и анализирования сообщений
об ошибках, запуска и отладки этих программ, а также для запуска игр. В конечном
итоге появилась возможность войти в среду emacs и не выходить из нее весь день,
лишь переключаясь между окнами и файлами. Если в распоряжении пользователя
имеется только символьный терминал, то emacs существенно увеличивает его воз-
можности.
При работе в среде X Window System emacs не нуждается в передаче ему управ-
ления всем дисплеем, ему обычно достаточно одного-двух окон. Но при работе с ним
по-прежнему доступна и исходная символьная среда, и поэтому именно этот режим
работы будет рассмотрен в данной главе.
В качестве редактора, восприимчивого к языкам программирования, emacs об-
ладает специальными свойствами, которые включаются с целью оказания помощи
в редактировании текста, в его форматировании с помощью утилиты nroff, в верстке
с помощью системы TeX, в написании программ на Лиспе, C, Фортране и т. д. Эти
наборы свойств называются режимами, но они не имеют ни малейшего сходства с ко-
мандным режимом и режимом редактирования, использующимися в vi, vim и в других
редакторах. Поскольку при работе с emacs его не нужно переключать между режимом
редактирования и командным режимом, он называется редактором, не имеющим ре-
жимов работы.
И наконец, явное отличие от vim заключается в том, что emacs позволяет исполь-
зовать Лисп для создания новых команд или перезаписи старых. Столлмен назвал эту
особенность постоянной возможностью к расширению, но для того чтобы написать
и отладить новую команду в процессе редактирования текста, нужно быть довольно
смелым Лисп-программистом. Чаще всего в файл .emacs добавляются уже отлаженные
команды, откуда они будут загружены в процессе запуска редактора. Опытные пользо-
ватели emacs зачастую создают режимы или рабочие окружения, которые загружаются
редактором emacs при определенных условиях для решения специфических задач.
Дополнительные сведения о файле .emacs даны в разделе «Файл запуска .emacs».
Запуск emacs
Для редактирования файла по имени sample с помощью emacs, используемого в каче-
стве простого текстового редактора, введите следующую команду:
$ emacs -nw -q sample
Ключ –nw, который должен быть первым ключом в командной строке emacs, застав-
ляет этот редактор отказаться от своего X-интерфейса (GUI). Ключ –q предписывает
emacs не читать пусковой файл ~/.emacs. Отказ от чтения этого файла гарантирует,
что emacs будет обладать стандартным стилем поведения и может использоваться
новичками или другими пользователями, желающими обойти загрузку информации
из файла .emacs.
Предыдущая команда запускает emacs, считывает файл по имени sample в буфер и
отображает его содержимое на экране или в окне. Если на данный момент файла с та-
ким именем не существует, emacs отображает пустой экран с пометкой (New File) в его
нижней части (рис. 7.1). Если файл с таким именем существует, emacs отображает его
содержимое и выдает другое сообщение (рис. 7.3). Если emacs запущен без указания
имени файла в командной строке, он отображает экран приветствия, который вклю-
чает информацию по использованию и список основных команд (рис. 7.2).
Изначально emacs отображает одно окно. В верхней части окна в негативном
оформлении отображается строка меню, доступ к которой можно получить, исполь-
зуя мышь или клавиатуру. При использовании клавиатуры окно списка расширений
224 Глава 7. Редактор emacs
Область вывода /
мини-буфер
Буфер
Основной режим
Если при наборе команды в мини-буфер будет допущена ошибка, emacs выводит
сообщение об ошибке в область вывода. Сообщение об ошибке будет выведено по-
верх набранной команды, но emacs через несколько секунд вернет команду на место.
Краткого отображения сообщений об ошибках вполне достаточно, чтобы их прочи-
тать перед продолжением набора команды с того места, где он был прекращен. Более
подробные сведения даны на странице интерактивного справочного руководства,
вызываемой через пункт меню Minibuffer (см. предыдущий совет).
Курсор находится либо в окне, либо в мини-буфере. Весь ввод и почти все редак-
тирование происходят под курсором. При наборе обычных символов emacs вставляет
их в позицию курсора. Если под курсором или справа от него находятся символы, они
сдвигаются вправо по мере ввода, поэтому никакие символы не теряются.
Выход
Команда выхода из emacs вводится с помощью комбинации CONTROL+X CONTROL+C.
Эту команду можно ввести практически в любой момент (в некоторых режимах сна-
чала может потребоваться нажать комбинацию CONTROL+G). Эта команда завершит
работу emacs предельно корректно, переспросив, желаете ли вы сохранить изменения,
внесенные во время сеанса редактирования.
Если нужно отменить наполовину введенную команду или остановить запущенную
команду до того, как она будет выполнена, следует нажать комбинацию CONTROL+G.
Редактор emacs отобразит в области вывода сообщение Quit (Завершена) и будет
ждать следующей команды.
Вставка текста
При наборе обычных (выводимых на печать) символов курсор и любые символы
справа от него сдвигаются на одну позицию вправо, и новый символ вставляется
в пространство, освобождаемое сдвигаемыми символами.
Удаление символов
В зависимости от используемой клавиатуры и настроек файла запуска emacs, сим-
волы могут удаляться разными клавишами и разными способами. Обычно комби-
нация CONTROL+D удаляет символ под курсором, то же самое делается с помощью
226 Глава 7. Редактор emacs
клавиш DELETE и DEL. Клавиша BACKSPACE обычно удаляет символ слева от курсора.
Попробуйте воспользоваться каждой из этих клавиш и посмотрите, что они делают.
Запустите emacs и наберите несколько строк текста. При ошибках внесите необхо-
димые исправления, пользуясь ранее рассмотренными клавишами удаления. Клавиша
ВВОД вставляет в буфер невидимый символ конца строки и возвращает курсор к левой
границе на одну строку ниже. Можно вернуться за начало строки и попасть в конец
предыдущей строки. На рис. 7.3 показан типовой буфер.
Перемещение курсора
Курсор можно поставить на любом символе в окне emacs и переместить окно таким
образом, чтобы в нем отображалась любая часть буфера. Курсор можно перемещать
вперед или назад по тексту (см. рис. 6.8 в главе 6), по различным текстовым элемен-
там — например, по символам, по словам, по предложениям, по строкам и по абзацам.
Перед любыми командами перемещения курсора можно указывать количество по-
вторений (команда CONTROL+U, за которой следует числовой аргумент), заставляю-
щее курсор перемещаться по тексту на указанное количество текстовых элементов.
Числовые аргументы рассмотрены далее в соответствующем разделе.
CONTROL-B CONTROL-F
пары этих команд для перемещения курсора вверх в начало предыдущей строки, вниз
в конец следующей строки и т. д. (рис. 7.6).
META-b META-f
belief,.really...It
Рис. 7.5. Перемещение курсора по словам
CONTROL-P
CONTROL-P CONTROL-P
CONTROL-A needed.as CONTROL-E
CONTROL-N
CONTROL-A working.to CONTROL-N
CONTROL-E
CONTROL-N
CONTROL-U ME TA- {
0 META-r
META-r ME TA- a
Курсор ME TA- e
CONTROL-U ME TA-}
– META-r