Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Linux: Введение
  3. Текстовые редакторы

Лучше, чем Emacs?

Заголовок этого раздела сформулирован таким провокационным образом не случайно: любому пользователю похожей на UNIX операционной системы (к таким системам относится и Linux), в любом случае необходим текстовый редактор. Выбор очень многих пользователей падает на один из двух наиболее популярных и, как следствие, наиболее универсальных (реализованных и работающих везде) текстовых редактора: Vim (или одну из его улучшенных версий, чаще всего Vi) и Emacs. Оба эти редактора появились около тридцати лет назад, но их почтенный возраст только пошёл им на пользу: огромное количество пользователей по всему миру все эти годы занималось их отладкой, локализацией и расширением.

Vim и Emacs образуют альтернативную пару не только по исторической случайности: оба редактора претендуют на роль универсального средства для работы с текстом на любых естественных и искусственных языках. И действительно, трудно назвать сравнимый с ними по возможностям текстовый редактор, да ещё и настолько нетребовательный к интерфейсу: и Vi, и Emacs будут работать на любом терминале. Однако ограниченные возможности интерфейса терминала требуют от программ надёжного способа отделения команд редактору от вводимого текста. В Vi и Emacs эта задача решена по-разному — отсюда большая часть различий в стиле работы с этими редакторами, отсюда и традиционный спор приверженцев этих редакторов о том, который из них лучше.

Тексты на разных языках

Главное свойство, которое сделало Emacs таким популярным и многофункциональным редактором — это заложенная в нём с самого начала принципиальная расширяемость. Emacs почти полностью написан на специально созданном для него языке программирования: Emacs Lisp, и у любого пользователя есть возможность запрограммировать любые необходимые именно ему функции и подключить их в качестве модуля к Emacs. При этом сам Emacs никак изменять не требуется. Сообщество программистов не замедлило воспользоваться расширяемостью Emacs, и к настоящему времени важнейшее достоинство этого редактора состоит именно в свободно распространяемых пакетах расширений, содержащих инструменты для решения самых разнообразных задач, связанных с редактированием текста.

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

В Emacs для работы с текстами разного типа используются режимы.

режим emacs
Комплекс команд и настроек Emacs, предназначенных для работы с текстом определённой структуры, например, содержимым каталога, программой на Си и. т. п.

Каждый буфер в Emacs находится в одном из основных режимов. Основной режим — это набор функций и настроек Emacs приспособленных для редактирования текста определённого вида. Каждый основной режим по-своему переопределяет некоторые управляющие символы, так что наиболее доступными становятся команды, чаще всего нужные именно для работы с текстом данного типа. Команды, специфичные для текущего основного режима, обычно начинаются с управляющего символа C-c.

Некоторое представление о возможностях Emacs может дать весьма неполный список тех текстов, для которых существуют основные режимы:

  • список файлов в каталоге;
  • программы на самых разных языках программирования, от Си до самых экзотических;
  • тексты в различных форматах разметки: XML, HTML, TeX;
  • словари;
  • электронная почта (режим позволяет не только читать и писать письма, но и отправлять и получать их);
  • календарь;
  • дневник и личное расписание;
  • многое другое.

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

Обратите внимание, что в Emacs понятие «режим» имеет совершенно иной смысл, чем в Vim!

Не менее хорошо в Emacs развиты средства работы с текстами на самых разных естественных языках с самыми экзотическими письменностями. Просто для оценки возможностей Emacs в этой области можно выполнить команду «C-h h», по которой будет выведен файл, изображающий приветствие на разных языках.

Команды Emacs

Если в вашей системе установлен Emacs, то вы можете запустить, набрав emacs в командной строке любого терминала. Как и Vim, Emacs использует весь экран терминала, хотя интерфейс у него более богатый: вверху экрана находится строка с пунктами меню, под ней окно для отображения и редактирования текста, которое заканчивается строкой режима, в которой отображаются сведения о происходящем в окне. В самом низу экрана — строка минибуфера, используемая для диалога с пользователем, в частности для отображения и редактирования вводимых команд.

Vi и вслед за ним Vi — это многорежимные редакторы, когда команды вводятся в одном режиме, а текст — в другом, что позволяет использовать в качестве командных любые клавиши. В Emacs нет специального командного режима, но использован тот факт, что с клавиатуры можно вводить не только печатные, но и некоторые управляющие символы. Для этого используются несколько управляющих клавиш терминала (прежде всего Ctrl и Alt), нажатые в сочетании с различными текстовыми символами. Чтобы ввести такой символ, нужно нажать управляющую клавишу (например, Ctrl) и, удерживая её, нажать клавишу с одним из печатных символов (например, «x»). Кроме того, в Emacs используется управляющая клавиша Meta, на тех терминалах, где она отсутствует, её функции обычно передаются клавише Alt. На «настоящих» терминалах обычно не бывает ни Meta, ни Alt; из клавиатурных модификаторов присутствуют только Ctrl и Shift. Тогда на помощь приходит старая добрая ESC: нажатие ESC, а после неё — печатного символа (того же «x») эквивалентно «Meta x».

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

Общее правило здесь таково: чем чаще нужна команда, тем короче вызывающий её ключ, и наоборот. Для лаконичной записи длинных клавиатурных комбинаций в сообществе пользователей Emacs сложилась особая традиция сокращённых обозначений. Клавишу Ctrl обозначают заглавной буквой «C», Meta — «M».

За свои длинные команды из разных комбинаций управляющих клавиш название Emacs получило шуточную расшифровку: Escape-Meta-Alt-Control-Shift.

Сочетания с командной клавишей обозначаются дефисом, например, запись С-h обозначает, что нужно, удерживая Ctrl, нажать «h». C-h — это префиксный ключ для команд справочной системы Emacs. Начинающему пользователю стоит выполнить команды «C-h ?» (набрать C-h и затем нажать «?») — справка по командам помощи, «C-h t» — интерактивный учебник для начинающих пользователей Emacs, и «C-h i» — полное руководство по Emacs (в формате info). С ключа C-x начинаются основные команды Emacs, в частности, для работы с файламии буферами. Чтобы завершить работу Emacs, нужно ввести «C-x C-c».

У любой команды Emacs есть собственное имя, по этому имени можно вызвать команду даже если она не привязана ни к какому клавиатурному ключу. Для вызвова команд по имени используется префиксный ключ M-x. Например, посмотреть справку о помощи в Emacs можно командой «M-x help-for-help».

Работа с файлами

В Emacs, как и в Vim, пользователь редактирует текст не в самом файл, а в буфере. Отличие Emacs в том, что нельзя написать «безымянный» текст и затем сохранить его в файле. При запуске Emacs без параметров открывается специальный буфер — «*scratch*», он предназначен для временных заметок — его содержимое будет выброшено при закрытии Emacs. Если нужно создать новый файл — его следует открыть командой «C-x C-f», точно так же открывается для редактирования уже существующий файл.

После того, как Мефодий нажал «C-x C-f», в минибуфере возникло приглашение: «Find file: ~/». Теперь нужно ввести путь к файлу, начиная с текущего каталога (Emacs любезно подсказал его Мефодию). С текстом в минибуфере можно обращаться почти так же, как с командной строкой shell или Vi: редактировать, использовать автодополнение (клавишей Tab), перемещаться по истории стрелочками вверх/вниз. Мефодий не замедлил воспользоваться этой возможностью и, набрав «te», нажав Tab и Enter, приступил к редактированию того же «textfile». Сохранить сделанные изменения можно командой «C-x C-s».

Когда Мефодий захотел открыть ещё один буфер, чтобы отредактировать один из своих сценариев, он запамятовал точное название нужного файла и, набрав «C-x C-f bin/», нажал Enter. В окне возник список файлов в подкаталоге «~/bin», похожий на вывод ls -l:

File Edit Options Buffers Tools Operate Mark Regexp Immediate Subdir Help
  /home/methody/bin:
  итого 24
  drwxr-xr-x   2 methody methody 4096 Дек  2 15:21 .
  drwx------  10 methody methody 4096 Дек  2 15:21 ..
  -rwxr-xr-x   1 methody methody   26 Ноя  9 21:34 loop
  -rwxr-xr-x   1 methody methody   23 Ноя  9 21:34 script
  -rwxr-xr-x   1 methody methody   32 Ноя  9 21:34 to.sort
  -rwxr-xr-x   1 methody methody   44 Ноя  9 21:34 two


-RRR:%%-F1  bin (Dired by name)--L5--C51--All--Reading directory /home/methody/bin/...done

Пример 9. Emacs. Режим dired

Как указано в строке режима, это Dired, редактор каталогов, режим emacs, предназначенный для просмотра и изменения каталогов прямо из редактора. В Dired можно выбирать отдельные файлы, или группы файлов и производить над ними различные действия: открыть для редактирования, удалить, скопировать, переместить, переименовать по определённой схеме — словом, Dired, довольно мощное средство для наглядной работы с файловой системой, особенно он удобен для работы с группой файлов. Подробности о командах, доступных в этом режиме, можно найти в руководстве по Emacs.

Перемещение по тексту

В Emacs, как и в Vim есть понятие точка, это то место в буфере, где будет происходить вставка или удаление данных. Перемещение по тексту — это перемещение точки. Команды перемещения по структурным элементам текста развиты не менее, чем в Vim, помимо обычных стрелок, действуют команды перемещения в начало и конец строки (C-a и C-e), буфера (M-< и M->), предложения (M-a и M-e); к предыдущему и следующему слову (M-f и M-b), абзацу (M-{ и M-}). Различные основные режимы предоставляют специализированные команды для перемещения по структурным элементам текстов на разных языках программирования, разметки и пр.

В Emacs несколько видов поиска: существуют отдельные команды для поиска строки и поиска по регулярному выражению. Если требуется найти ближайшее употребление конкретного слова, удобнее всего воспользоваться наращиваемым поиском по команде C-s. Наращиваемый поиск уже встречался Мефодию: так был устроен поиск по истории команд в bash. По мере набора первых символов искомой строки Emacs переносит точку к ближайшему такому сочетанию симвлов после курсора. Поиск в обратном направлении (к началу буфера) осуществляется командой C-r. Наращиваемый поиск можно выполнять по регулярному выражению (C-M-s). Все виды наращиваемого поиска в Emacs не различают прописные и строчные буквы.

Изменение текста

В Emacs доступно множество команд, экономящих усилия при редактировании текста. Если пользователь осознаёт, что набрал что-то неправильно, то можно удалить разом последнее слово (M-Del), предложение (C-x Del). Можно уничтожать и вперёд: до конца слова (M-d) и предложения (M-k). Emacs хранит не только последний удалённый фрагмент, но и все предыдущие, формируя список удалений. Только что уничтоженный текст можно вставить командой C-y. После этого его можно заменить предыдущим уничтоженным фрагментом — M-y. Можно двигаться и далее назад по списку удалений, повторяя M-y.

Хорошо продуманы команды для перестановки частей текста вокруг точки: двух знаков (C-t), слов (M-t), строк (C-x C-t). Команда M-t не перемещает знаки препинания между словами, поэтому «потеха, дело» превратится в «дело, потеха».

Прямо из Emacs можно вызвать программу проверки орфографии («M-x ispell-buffer») или даже включить проверку «на лету», когда неправильно написанные слова выделяются другим цветом («M-x flyspell-mode»). Можно проверить написание отдельного слова, в котором находится точка («M-x $») или завершить недописанное слово, основываясь на орфографическом словаре («M-x Tab»).

В Emacs так много специальных команд для изменения текста, что команды поиска и замены бывают нужны не так часто. Произвести замену строки всюду в буфере можно по команде «M-x replace-string что заменить Enter на_что_заменить Enter», для замены регулярного выражения — аналогичная команда «M-x replace-regexp».

Если нужно заменить строку только в некоторых случаях, пригодится команда M-%, запрашивающая подтверждение о замене при каждой найденной строке. Аналогичная команда для регулярных выражений — C-M-%.

Любые изменения в тексте можно отменить командой C-_ (нужно нажать Ctrl, Shift и «-»).

Работа с фрагментами текста

Многие команды Emacs работают с произвольным фрагментом текущего буфера. Такие команды всегда применяются к текущей области. Область — это отрезок текста между точкой (где находится курсор) и меткой. Метка в любой момент присутствует в любом буфере, пользователь может установить её в любом месте текста явно — командой M-Пробел. Метка может перемещаться и без вмешательства пользователя: команды перемещения и редактирования могут изменять положение метки.

Таким образом, чтобы выделить в буфере фрагмент текста, можно произвести следующие операции:

  • переместить точку (курсор) на один конец нужного фрагмента;
  • нажать M-Пробел (установить метку);
  • переместить точку к другому концу нужного фрагмента.

Теперь можно выполнять команду редактирования — она будет применена именно к выделенной области. Например, C-w удалит текст области, а M-w скопирует его. Вставить удалённый или скопированный фрагмент можно командой C-y.

Есть группа команд, позволяющих работать с меткой более эффективно: установить метку после конца следующего слова (M-@), пометить текущий абзац (M-h), весь буфер («C-x h»). Различные основные режимы предоставляют команды для пометки структурных элементов текста, например, разделов документа, определения функции (в тексте программы) и т. п. Все положения метки хранятся в списке пометок, перенести точку в любое из предшествующих положений метки можно, нужное количество раз повторив команду «C-u C-@».

область
Непрерывный отрезок текста, ограниченный точкой с одной стороны и меткой с другой.

Как и в Vim, в Emacs можно использовать для хранения информации регистры. В регистре Emacs можно сохранить позицию в буфере и затем перейти к этой позиции («C-x r Пробел x» записывает позицию точки в регистр «x», а «C-x r j x» переходит в эту позицию). В регистре можно сохранить текст из области («C-x r s x» сохраняет область в регистре «x», «C-x r i x» — вставляет текст из этого регистра). В регистрах также можно хранить числа, имена файлов, конфигурацию окон. Подробности как всегда доступны в руководстве.

Настройка Emacs

Коротко говоря, в Emacs можно настроить всё: связи между ключами и командами редактора, определить макрокоманды, написать собственные расширения. Есть возможность изменять настройки Emacs как в процессе работы, так и при помощи конфигурационного файла .emacsrc.

Перекрёстные ссылки книги для Лучше, чем Emacs?

  • Vi и лучше, чем Vi
  • Вверх
  • Просто текстовые редакторы

Book navigation

  • Предисловие
  • Сеанс работы в Linux
  • Терминал и командная строка
  • Структура файловой системы
  • Работа с файловой системой
  • Доступ процессов к файлам и каталогам
  • Права доступа
  • Работа с текстовыми данными
  • Возможности командной оболочки
  • Текстовые редакторы
    • Задача текстовых редакторов
    • Vi и лучше, чем Vi
    • Лучше, чем Emacs?
    • Просто текстовые редакторы
  • Этапы загрузки системы
  • Работа с внешними устройствами
  • Конфигурационные файлы
  • Управление пакетами
  • Сеть TCP/IP в Linux
  • Сетевые и серверные возможности
  • Графический интерфейс (X11)
  • Прикладные программы
  • Политика свободного лицензирования

Последние материалы

  • Команда restore
    9 hours ago
  • Файл sudoers
    1 week 1 day ago
  • Утилита visudo
    1 week 2 days ago
  • Файловый менеджер Thunar
    2 weeks 5 days ago
  • Эмулятор терминала Terminator
    3 weeks 3 days ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru