Емакс в терминале
Долгое время я пользовался Емаксом с графическим интерфейсом. Для Мака такой Емакс качается с сайта Emacs For Mac OS X и ставится как обычное приложение в папке Applications .
Два месяца назад перешел на версию для терминала. Ниже короткие заметки о том, как это сделать и что изменилось.
Установка из пакетов. Для Мака ставится из brew: brew install emacs . На момент написания статьи скачивается версия 25.1. Важно: бинарник находится по пути /usr/local/Cellar/emacs/25.1/bin/emacs ! Если вы введете в терминале просто emacs , то запустится /usr/bin/emacs , у меня это какое-то старье.
Внешний вид. Я использую стандартную цветовую схему light-blue из коробки. Включается командой (load-theme ‘light-blue t) . В терминальной версии цвета немного другие. Сравните графическую версию:


Размер текста. Для комфортной работы я нашел полезным ставить шрифт покрупнее. Глаза нам даны одни на всю жизнь, так что лучше их поберечь. В графической версии высота шрифта меняется командой (set-face-attribute ‘default nil :height 140) (140 – моя метрика, подобранная эмпирически). В терминале, конечно, это не прокатит. Поэтому я просто жму три раза Cmd + = . Получается как на рисунке ниже (картинка специально обрезана, чтобы вошла в колонку без масштабирования):

Курсор. Больше недели не мог настроить цвет курсора в терминале. В графической версии был красный, а в терминале серый. Сливается в голубым фоном, глазам трудно найти. Команды вроде (set-cursor-color «#ffffff») не помогают. Оказывается, в маковском терминале Iterm2 цвет курсора и текста под ним регулируется силами самого терминала. Пришлось поправить настройки:

Вместе с цветом курсора (Cursor) можно включить легкое цветовое выделение текущей строки (Cursor Guide).
Общие впечатления. В целом мне показалось, что терминальная версия работает быстрее графической. Изредка бывают артефакты при сложной прорисовке (несколько рабиений окна, например), а так все ок. Мини-буфер, попапы работают как надо.
Напомню, мой конфиг Емакса с комментариями лежит в Гитхабе.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
Баги с прорисовкой — это баг айтерма. Долго мучался сам в виме с этим.
Форум русскоязычного сообщества Ubuntu
Страница сгенерирована за 0.066 секунд. Запросов: 23.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Emacs для начинающих
Этот документ предназначен для тех пользователей Linux, которые хотят узнать о Emacs и научиться работать с ним.
Этот документ не является специфичным только для ALTLinux. Его можно использовать для работы с Emacs из других дистрибутивов Linux, в других вариантах операционной системы Unix, а также с Emacs для MS Windows.
Описание настройки русского языка немного устарело, и лучше его не использовать в современных версиях Emacs!
Что такое Emacs?
Emacs — один из наиболее мощных и широко распространённых редакторов, используемых в мире Unix. По популярности он соперничает с редактором vi и его клонами. В зависимости от ситуации, Emacs может быть:
- текстовым редактором;
- программой для чтения почты и новостей Usenet;
- интегрированной средой разработки (IDE);
- операционной системой;
- всем, чем угодно.
Всё это разнообразие достигается благодаря архитектуре Emacs, которая позволяет расширять возможности редактора при помощи языка Emacs Lisp. На языке C написаны лишь самые базовые и низкоуровневые части Emacs, включая полнофункциональный интерпретатор языка Lisp. Таким образом, Emacs имеет встроенный язык программирования, который может использоваться для настройки, расширения и изменения поведения редактора. В действительности, большая часть того редактора, с которым пользователи Emacs работают в наши дни, написана на языке Lisp.
Первая версия редактора Emacs была написана в 70-х годах 20-го столетия Richard Stallman (Ричардом Столманом) как набор макросов для редактора TECO. В дальнейшем, уже будучи основателем Фонда Свободного программного обеспечения Free Software Foundation и проекта GNU, Столман разработал GNU Emacs в развитие оригинального Emacs и до сих пор сопровождает эту программу. Вы можете подробнее ознакомиться с историей редактора, прочитав статью, располагающуюся по адресу http://www.wikipedia.org/wiki/Emacs.
Emacs является одним из старейших редакторов. Он использовался тысячами программистов на протяжении последних 20 с лишним лет, для него создано много дополнительных пакетов расширений. Эти дополнения позволяют делать с помощью Emacs такие вещи, которые Столман, вероятно, даже не считал возможными в начале своей работы над редактором. Более подробно я расскажу о них в следующих разделах.
Разновидности Emacs
Существует две основных разновидности Emacs — GNU Emacs и XEmacs. GNU Emacs — это развитие оригинальной версии Emacs, написанной Столлманом, а XEmacs — это версия с некоторыми добавлениями к интерфейсу и языку Emacs Lisp. О причинах, по которым образовалось две версии, можно прочесть по этому адресу. В большинстве случаев их поведение похоже друг на друга, но есть и некоторые отличия. Поэтому некоторые пакеты расширений могут работать только с конкретной версией Emacs.
Кроме двух основных версий существует и множество других редакторов, считающихся вариантами Emacs. Полный их список можно найти на странице Emacs Implementations and Literature.
В данном документе я буду рассказывать, прежде всего, о GNU Emacs, входящем в поставку дистрибутивов ALTLinux. Однако большая часть сказанного применима и для XEmacs, а также для версий Emacs в других дистрибутивах Linux.
Используемая терминология
В этом разделе описываются термины 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, просто наберите в командной строке команду emacs (или xemacs , если вы хотите посмотреть на этот вариант Emacs). После запуска появится окно (фрейм в терминах 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 включена обширная справка (для описания функций и клавиш вызова справки смотрите таблицу ниже. Кроме полного руководства по GNU Emacs, в неё входит учебник для начинающих пользователей. В состав дистрибутивов ALTLinux также включён русский перевод учебника. Для его вызова нажмите сочетание клавиш 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 был спроектирован таким образом, чтобы быть максимально переносимым и работать на любых терминалах. Поэтому у него имеются собственные привязки к клавишам для команд перемещения курсора (точки) в буфере. В таблице, приведенной ниже, перечислены основные команды перемещения курсора в буфере Emacs:
| Сочетание клавиш | Команда | Действие |
|---|---|---|
| C-p | previous-line | Вверх на одну строку |
| C-n | next-line | Вниз на строку |
| C-f | forward-char | Вперёд на один символ |
| C-b | backward-char | Назад на один символ |
| C-a | beggining-of-line | Начало строки |
| C-e | end-of-line | Конец строки |
| C-v | scroll-up | Вниз на одну страницу |
| M-v | previous-page | Вверх на одну страницу |
| M-f | next-word | Вперёд на одно слово |
| M-b | previous-word | Назад на одно слово |
| M- | beginning-of-buffer | В начало буфера |
| M-> | end-of-buffer | В конец буфера |
| C-g | keyboard-quit | Закончить (прервать) текущую операцию |
| goto-line | Переход на заданную строку |
Как правило, при работе в системе X Window, кроме перечисленных клавиш, также работают и привычные для пользователей персональных компьютеров клавиши управления курсором (например, стрелки).
Основные команды
В таблицах приведенных ниже перечислены наиболее часто используемые команды, их действие, а также сочетания клавиш, которые используются для их быстрого вызова. Полная форма команды, приведённая в столбце «Команда», используется для запуска с помощью префиксного сочетания M-x , например M-x save-buffer .
-
Команды работы с текстом:
Вход и выход из Emacs
Обычно для вызова Emacs достаточно просто набрать `emacs’ в оболочке. Emacs очищает экран и отображает начальные справочные сведения и уведомление об авторских правах. Некоторые операционные системы сбрасывают все набранное перед тем, как Emacs стартует; они не дают Emacs возможности предотвратить это. Поэтому рекомендуется подождать, пока Emacs очистит экран, и только потом набрать вашу первую команду редактирования.
Если вы запускаете Emacs из окна с оболочкой в системе X Windows, запускайте его в фоновом режиме с помощью `emacs&’ . Тогда Emacs не свяжет окно оболочки, и вы сможете выполнять другие команды, пока Emacs работает в своих X-окнах. Вы можете начинать печатать команды, как только направите ввод с клавиатуры во фрейм Emacs.
Когда Emacs начинает работу, он создает буфер, называемый `*scratch*’ . Это буфер, который предоставляется вам первоначально. Буфер `*scratch*’ использует режим Lisp Interaction; вы можете набирать в нем Лисп-выражения и вычислять их, либо вы можете проигнорировать такую возможность и просто писать в нем заметки. (Вы можете задать для этого буфера другой основной режим, установив в вашем файле инициализации переменную initial-major-mode . See section Файл инициализации, `~/.emacs’ .)
Из аргументов в командной строке оболочки можно указать файлы, к которым вы хотите обратиться, Лисп-файлы для загрузки и функции, которые будут вызваны. See section Аргументы командной строки. Но мы не рекомендуем так делать. Эта возможность существует преимущественно для совместимости с другими редакторами.
Многие редакторы спроектированы так, что запускаются снова каждый раз, когда вы хотите редактировать. Вы редактируете один файл и затем выходите из редактора. В следующий раз, когда вы хотите редактировать другой файл или тот же самый, вы должны запустить редактор снова. С такими редакторами имеет смысл использовать аргумент командной строки, чтобы сообщить, какой файл будет редактироваться.
Но не имеет смысла запускать новый Emacs каждый раз, когда вы хотите редактировать другой файл. С одной стороны, это было бы раздражающе медленно. С другой стороны, при этом не использовалась бы способность Emacs обращаться к нескольким файлам за один сеанс редактирования. И при этом терялись бы накопленные сведения о контексте: регистры, история отмены изменений, список пометок и другие.
Рекомендуемый способ использования GNU Emacs — запускать его только один раз сразу после входа в систему и делать все ваши редакции в одном и том же процессе Emacs. Каждый раз, когда вы хотите редактировать другой файл, вы вызываете его в уже существующий Emacs, который в конце концов предназначен, чтобы хранить много файлов, готовых для редактирования. Обычно вы не уничтожаете Emacs до тех пор, пока не решите выйти из системы. See section Работа с файлами, для получения информации о редактировании нескольких файлов одновременно.
Выход из Emacs
Существует две команды выхода из Emacs, так как существует два вида выхода: приостановка Emacs и уничтожение Emacs.
Приостановка означает временную остановку Emacs и возврат управления его родительскому процессу (обычно это оболочка), она позволяет вам позднее возобновить редактирование в том же задании Emacs, с теми же буферами, с тем же списком уничтожений, с той же историей отмены и так далее. Это обычный способ выхода.
Уничтожение Emacs подразумевает уничтожение задания Emacs. Вы снова можете запустить Emacs позднее, но вы получите новый Emacs. Нет способа возобновить тот же сеанс редактирования после его уничтожения.
C-z Приостановить Emacs ( suspend-emacs ) или минимизировать текущий фрейм ( iconify-or-deiconify-frame ). C-x C-c Уничтожить Emacs ( save-buffers-kill-emacs ).
Чтобы приостановить Emacs, наберите C-z ( suspend-emacs ). Это вернет вас обратно в оболочку, из которой вы вызывали Emacs. Вы можете возобновить Emacs с помощью команды `%еmacs’ в большинстве обычных оболочек.
В системах, которые не позволяют программам приостанавливаться, C-z запускает подчиненную оболочку, которая связана прямо с терминалом, и Emacs ждет, пока вы не покинете подоболочку. (Скорее всего, вы можете сделать это с помощью C-d или `exit’ , но это зависит от используемой оболочки.) В этих системах единственный способ вернуться в оболочку, из которой Emacs был запущен (чтобы выйти из системы, например), — это уничтожить Emacs.
Приостановка также невозможна, если вы запустили Emacs из оболочки, не поддерживающей приостановку программ, даже если система ее поддеривает. В таком случае вы можете установить переменную cannot-suspend в отличное от nil значение, чтобы принудить C-z запускать подчиненную оболочку. (Можно было бы назвать родительскую оболочку Emacs тоже «подчиненной» за неумение правильно управлять заданиями, но это вопрос вкуса).
Когда Emacs напрямую общается с X-сервером и создает собственные выделенные X-окна, C-z имеет другой смысл. Приостановка приложения, используещего собственные X-окна, бессмысленна и бесполезна. Вместо этого, C-z запускает команду iconify-or-deiconify-frame , которая временно закрывает выбранный фрейм Emacs (see section Фреймы и X Windows). Снова получить доступ к этому фрейму можно с помощью программы управления окнами.
Чтобы уничтожить Emacs, наберите C-x C-c ( save-buffer-kill-emacs ). Двухзнаковый ключ используется для того, чтобы его было труднее набрать. Эта команда сначала предлагает сохранить все модифицированные обращающиеся к файлам буферы. Если вы не сохраняете их все, она запрашивает новое подтверждение с помощью yes перед уничтожением Emacs, так как любые незаписанные изменения будут потеряны навсегда. Также, если остаются запущенными какие-либо подпроцессы, то С-х С-с запрашивает подтверждение и для них, так как уничтожение Emacs немедленно уничтожит подпроцессы.
Невозможно перезапустить сеанс Emacs, когда вы его уже уничтожили. Однако, вы можете указать Emacs записывать определенные сведения о сеансе, например, к каким файлам обращались, когда Emacs был уничтожен; тогда в следующий раз, когда вы перезапустите Emacs, он попытается обратиться к тем же файлам. See section Сохранение сеансов Emacs.
Операционная система обычно улавливает определенные специальные символы, которые могут мгновенно приостанавливать или уничтожать программу. Это свойство операционной системы отключается в то время, когда вы находитесь в Emacs. Значения C-z и С-с как ключей в Emacs были вдохновлены стандартными значениями C-z и С-с в некоторых операционных системах как символов останова и уничтожения программы, но это единственная их связь с этими операционными системами. Вы можете настроить эти ключи для запуска любых команд по вашему выбору (see section Таблицы ключей).