Основы работы с Emacs

Используемая терминология

В этом разделе описываются термины Emacs, с котороми вы встретитесь при использовании редактора.

Буфера и файлы

Буфер — это основная единица редактирования; один буфер соответствует одному куску редактируемого текста. Вы можете иметь несколько буферов, но в каждый конкретный момент вы редактируете только один “выбранный” буфер, хотя когда вы используете несколько окон, то видимыми могут быть несколько буферов. Чаще всего буферы обращаются к какому-либо файлу, считывая данные из файла в буфер, или записывая данные из буфера в файл.

Вы встретите термин “буфер” в документации по Emacs, сообщениях программы, описаниях режимов и пакетов. Просто имейте в виду, что при работе с файлами буфер означает “копию файла, которая находится в памяти в данный момент”. Однако необходимо отметить, что буфер не всегда соответствует какому-либо файлу на диске. Очень часто Emacs создает буфера в результате выполнения ваших команд. Такие буфера могут содержать вывод команды, список для выбора вариантов и другую информацию.

Точка, область и метка

Точка (point) — это место в буфере, в котором происходит вставка или удаление данных. Считается, что точка находится между двумя знаками, а не на каком-то одном из них. Например, если курсор находится на букве “h” в слове “the”, то точка находится между “t” и “h”. Курсор терминала показывает положение точки.

Как и другие современные редактора, Emacs позволяет выполнять разные действия над фрагментами текущего буфера — изменение отступа, проверку орфографии, переформатирование, вырезание, копирование, вставку и т.д. Вы можете подсветить (или “пометить”) блок текста, используя клавиатуру или мышь, а затем выполнить операцию только над выделенным блоком. В Emacs такой блок текста называется область (region). Область — это текст между точкой и меткой.

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

Окна и фреймы

Окно в Emacs — это область экрана, в которой отображается буфер. Когда Emacs запускается, у вас на экране отображается одно окно. При обращении к некоторым функциям Emacs (таким, как оперативная справка и интерактивная документация) часто (временно) открываются дополнительные окна на экране Emacs.

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

Фрейм (frame) — это отдельное окно используемой оконной системы, в котором отображаются одно или несколько окон Emacs. При этом несколько фреймов, открытых одновременно, являются частью одного сеанса Emacs.

Запуск Emacs

Чтобы запустить Emacs, просто наберите в командной строке команду emacs (или xemacs, если вы хотите посмотреть на этот вариант Emacs). После запуска появится окно (фрейм в терминах Emacs, смотрите раздел “Используемая терминология”) изображенное на рисунке Рисунок 6.1. Вид основного окна GNU Emacs.

Рисунок 6.1. Вид основного окна GNU Emacs

Вид основного окна GNU Emacs

Как видно на рисунке, этот фрейм состоит из следующих частей:

  • полосы меню, предоставляющей быстрый доступ к основным командам Emacs, а также к справочной информации;

  • основного окна, в котором производится редактирование текста. Это окно можно разделить на несколько окон. Помимо редактирования текста, основное окно используется для отображения данных теми пакетами, которые не связаны с редактированием, например пакетом gnus для чтения новостей usenet;

  • строки состояния, которая используется для отображения такой информации, как состояние буфера (изменен/не изменен), название буфера, текущее время, используемые режимы, а также позиция точки в буфере;

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

После запуска Emacs без каких-либо параметров в основном окне отображается буфер *scratch*, который используется для оценки выражений Emacs Lisp, а также для заметок, которые вы не хотите сохранять. Этот буфер не сохраняется автоматически, так что будьте осторожны!

Выход из Emacs

Чтобы выйти из Emacs, просто наберите сочетание клавиш C-x C-c (C-x означает, что надо нажать клавишу x, удерживая при этом клавишу Control, это справедливо и для C-c).

Кроме того, вы можете для выхода выбрать пункт Exit Emacs из меню File.

Получение помощи

В поставку GNU Emacs включена обширная справка (для описания функций и клавиш вызова справки смотрите таблицу Таблица 6.6. Команды работы со справочной системой). Кроме полного руководства по GNU Emacs, в нее входит учебник для начинающих пользователей. В состав дистрибутивов ALT Linux также включен русский перевод учебника. Для его вызова нажмите сочетание клавиш C-h t, и далее следуйте инструкциям, приведенным в появившемся тексте.

Emacs поставляется со встроенной программой чтения справки в формате Texinfo. В данном формате поставляется руководство по Emacs, руководства по пакетам расширения, а также документация по большинству программ проекта GNU. Для запуска системы Info нажмите сочетание клавиш C-h i. При работе со справочной системой Info, вы в любой момент можете нажать клавишу h и получить справку о том, как пользоваться справочной системой.

Основы работы с клавиатурой

Командные клавиши

Для выполнения команд в Emacs широко используются клавиатурные сокращения. Особенно часто используются сочетания различных клавиш с клавишами Control (обозначается как C-), Meta (обозначается как M-, на клавиатурах персональных компьютеров ее роль часто играет клавиша Alt), и Shift (обозначается как S-). Эти клавиши также называются префиксными. Например, запись M-x означает, что надо нажать на клавишу x, при этом удерживая клавишу Meta (или Alt на клавиатурах персональных компьютеров).

Кроме отдельных префиксных клавиш, в Emacs используются сочетания клавиш, которые рассматриваются как префиксные. В отличии от префиксных клавиш Control, Shift и других, такие сочетания клавиш не надо удерживать когда вы нажимаете следующую клавишу. Например, сочетание C-x C-f (команда открытия файла), означает, что надо нажать на клавишу x, удерживая клавишу Control, отпустить обе клавиши, а потом нажать на клавишу f, удерживая клавишу Control.

Префиксные сочетания клавиш различаются по назначению. Например, сочетание клавиш C-x является префиксом для основных команд редактора — открытия и сохранения файлов, а также многих других важных действий. Функции, привязанные к этим клавишам, не зависят от используемого режима. Кроме этого, сочетание клавиш C-h используется для доступа к разным разделам справочной системы.

В отличие от сочетания клавиш C-x, комбинация C-c играет роль префикса для вызова функций, зависящих от используемого режима. Например, сочетание клавиш C-c C-c при редактировании исходного текста на языке С приведет к комментированию выделенного текста с помощью функции comment-region, а при редактировании файла в формате SGML приведет к вызову функции sgml-show-context, которая отображает текущее положение точки в иерархии документа.

Перемещение в буфере

Emacs был спроектирован таким образом, чтобы быть максимально переносимым и работать на любых терминалах. Поэтому у него имеются собственные привязки к клавишам для команд перемещения курсора (точки) в буфере. В таблице Таблица 6.1. Клавиши для перемещения в буфере перечислены основные команды перемещения курсора в буфере Emacs.

Таблица 6.1. Клавиши для перемещения в буфере

Сочетание клавишКомандаДействие
C-pprevious-lineВверх на одну строку
C-nnext-lineВниз на строку
C-fforward-charВперед на один символ
C-bbackward-charНазад на один символ
C-abeggining-of-lineНачало строки
C-eend-of-lineКонец строки
C-vscroll-upВниз на одну страницу
M-vprevious-pageВверх на одну страницу
M-fnext-wordВперед на одно слово
M-bprevious-wordНазад на одно слово
M-<beginning-of-bufferВ начало буфера
M->end-of-bufferВ конец буфера
C-gkeyboard-quitЗакончить (прервать) текущую операцию
 goto-lineПереход на заданную строку

Как правило, при работе в системе X Window, кроме перечисленных клавиш, также работают и привычные для пользователей персональных компьютеров клавиши управления курсором (например, стрелки).

Основные команды

В таблицах Таблица 6.2. Команды работы с текстом — Таблица 6.7. Прочие основные команды Emacsперечислены наиболее часто используемые команды, их действие, а также сочетания клавиш, которые используются для их быстрого вызова. Полная форма команды, приведенная в столбце ``Команда'', используется для запуска с помощью префиксного сочетания M-x, например M-x save-buffer.

Таблица 6.2. Команды работы с текстом

Сочетание клавишКомандаДействие
C-ddelete-charУдаление символа перед точкой
M-dkill-wordУдалить следующее слово
C-kkill-lineУдалить текст до конца строки
M-kkill-sentenceУдалить текст до конца предложения
M-\delete-horizontal-spaceУдалить все пробелы и знаки табуляции вокруг точки
C-qquoted-insertВставка символа, соответствующего нажатой клавише или сочетанию, даже если это управляющая последовательность
M-qfill-paragraphВыравнивает текст в текущем параграфе

Таблица 6.3. Команды работы с пометками

Сочетание клавишКомандаДействие
C-spaceset-mark-commandУстановить пометку в точке
C-@set-mark-commandУстановить пометку в точке
C-xC-xexchange-point-and-markПоменять местами точку и начало пометки
 mark-whole-bufferПометить весь буфер
C-wkill-regionУдаление выделенной области в список удалений
M-wkill-ring-saveКопирование выделенной области в список удалений
C-yyankВставка текста из списка удалений в текущую позицию
M-yyank-popПоследовательная вставка текста из списка удалений
C-xxNcopy-to-registerКопировать отмеченный текст в регистр (N может быть буквой или цифрой, позволяя использовать множество регистров)
C-xgNinsert-registerВставляет в точку содержимое регистра N
M-C-\indent-regionВыравнивание строк выделенного фрагмента

Таблица 6.4. Команды поиска и замены

Сочетание клавишКомандаДействие
C-sisearch-forwardПоиск строки вперед
C-risearch-backwardПоиск строки в обратном направлении
replace-stringПоиск и замена строки
replace-regexpПоиск и замена с использованием регулярного выражения
M-%query-replaceПоиск и замена с запросом

Таблица 6.5. Команды работы с файлами буферами и окнами

Сочетание клавишКомандаДействие
C-xC-ffind-fileОткрыть файл на диске
C-xC-ssave-bufferСохранить буфер на диске
C-xC-wwrite-fileСохранить буфер в файле с новым именем
C-xC-blist-buffersОтобразить список открытых буферов в новом окне
C-xbswitch-to-bufferПереключиться в другой буфер в текущем окне
C-xC-csave-buffers-kill-emacsПеред выходом из редактора запросить о необходимости сохранения измененных файлов
C-xiinsert-fileВставить содержимое файла в буфер в текущую позицию
C-x0delete-windowЗакрыть текущее окно (при этом буфер не удаляется)
C-x1delete-other-windowsЗакрыть все окна кроме текущего
C-x2split-window-verticallyРазделить окно по горизонтали
C-xoother-windowПереход в другое окно

Таблица 6.6. Команды работы со справочной системой

Сочетание клавишКомандаДействие
C-h?help-for-helpИнформация об использовании справочной системы
C-hthelp-with-tutorialИспользовать интерактивный учебник
C-hfdescribe-functionПоказать справку по функции
C-hvdescribe-variableПоказать справку по переменной
C-hkdescribe-keyПоказать данные, о том, что делает последовательность клавиш
C-haaproposПоиск в справке по строке/регулярному выражению
C-hFview-emacs-FAQПоказать Emacs FAQ
C-hiinfoПоказать документацию по Emacs (Info)

Таблица 6.7. Прочие основные команды Emacs

Сочетание клавишКомандаДействие
M-xcommand Выполнить команду Emacs с именем command
C-xuundoОтменить последнюю операцию
C-xrmbookmark-setУстановить закладку. Полезно при поиске
C-xrbbookmark-jumpПерейти к закладке