Изучаем основы Emacs


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

Введение в среду редактирования Emacs

Первое, что вам следует узнать: два самых популярных редактора в UNIX – это Emacs и vi, и оба они старше 30 лет. Однако это едва ли делает их устаревшими. Подобно самому UNIX, базовым концепциям этих приложений насчитывается десятки лет, но и сегодня эти редакторы универсальны и используются в самых современных разработках.

Emacs вошёл в историю как один из первых проектов бесплатного ПО с открытым кодом. Его автор, Ричард Столлман, является основателем проекта GNU и патронирующей его организации, Фонда свободного программного обеспечения (Free Software Foundation) . Ещё до того, как он опубликовал лицензию GNU Public License (GNU GPL) — лицензионное соглашение, согласно которому выпущено большинство сегодняшних приложений с открытым кодом — Столлман обнародовал исходный код своего Emacs под подобной свободной лицензией с сохранением права копирования copyleft , названной EMACS Public License.

Название Emacs стало именем собственным, но первоначально это был акроним, образованный от словосочетания Editing MACros; — "макрос редактирования"; первоначальная столлмановская реализация представляла собой набор макросов, написанных на языке TECO. Ныне Emacs написан на Emacs Lisp, элегантном высокоуровневом языке программирования.

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

Говорят, что Emacs является средой редактирования , ибо он намного больше чем просто редактор в привычном смысле этого слова. Многие администраторы и разработчики используют его на разнообразных платформах с целью компиляции и отладки программ, управления электронной почтой, манипулирования файлами системы, выполнения команд оболочки и т. д. Бывает, что его используют даже для получения новостей по Usenet и просмотра интернет-страниц. Расширения и встраиваемые модули способны справляться с чем угодно — от интернет-пейджера IRC и обмена сообщениями до интернет-коммуникаций. Вспоминается старая юниксовская шутка, несущая в себе примерно такой смысл: "Среда Emacs не была бы столь плоха, если бы она состояла только из хорошего текстового редактора".

Поскольку в Emacs имеются чётко определённые способы производить те или иные действия, он имеет собственный словарь, который рассмотрен в этом разделе пошагово через структуру типового окна Emacs. В данном разделе также рассматриваются вопросы начала и завершения работы Emacs, а также приёмы ввода разнообразных команд.

Запуск Emacs

Для запуска Emacs из командной строки необходимо ввести:

 						emacs 			

Если Emacs запущен в консоли или терминале, появится полностью развёрнутое на весь экран окно терминала (см. рисунок 1).

Рисунок 1. Emacs в окне терминала
Emacs в окне терминала

Если работа идёт в графическом режиме (запущен X-сервер), Emacs обычно открывается в собственном окне (см. рисунок 2). Но и в этом случае можно указать, чтобы он открывался в окне терминала (см. рисунок 1), добавив в команду вызова приложения опцию -nw. На первый взгляд эти два вида представления Emacs могли бы походить на разные приложения, но различия между ними поверхностны. Все реальные различия заключены в цветах оформления по умолчанию, наличии графического логотипа, отображаемого графической версией (базирующейся на возможностях X-сервера), и набором графических пиктограмм, расположенных в верхней части графического клиента и содержащих ярлыки для некоторых наиболее распространенных команд. Функциональность текстовой (консольной) и графической версий абсолютно одинакова.

Рисунок 2. Emacs, работающий на X-сервере
Emacs, работающий на X-сервере

Анатомия окна Emacs

Некоторые элементы экранного интерфейса нуждаются в незамедлительном пояснении. Начнём описание элементов с верхней части экрана к нижней.

Строка меню

Вверху экрана меню расположена подсвеченная строка с несколькими словами на ней. Это строка меню. Она позволяет выбирать распространённые команды Emacs непосредственно из меню. Доступ к меню можно получить с клавиатуры; пользуясь версией Emacs, базирующейся на X-сервере, можно обращаться к меню посредством мыши.

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

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

Для доступа к строке меню с клавиатуры необходимо нажать F10. Попробуйте сделать это сейчас, и вы увидите, как в терминале открывается новое окно, показывающее список меню (см. рисунок 3).

Рисунок 3. Выбор опции из строки меню Emacs
Выбор опции из строки меню Emacs

Для перехода между опциями в меню можно использовать навигационные клавиши "вверх" и "вниз". Когда выбор сделан, необходимо нажать Enter. Если для выбранной опции есть подменю, оно показывается на экране. Выбор необходимой опции в подменю осуществляется таким же образом, как описано выше.

Для немедленного прерывания выполняемой процедуры необходимо нажать Ctrl-G. Эта специальная комбинация клавиш вызывает звуковой сигнал и завершает любую выполняемую в данный момент команду. Если ни одна команда в данный момент не выполняется, то нажатие этой комбинации вызовет только звуковой сигнал. Попробуйте сделать это сейчас.

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

Окно

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

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

Строка режима

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

Мини-буфер

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

Подобно командной оболочке UNIX, мини-буфер предлагает воспользоваться автозавершением вводимой команды. Нажав клавишу Tab , можно получить список возможных вариантов.

Как использовать связки клавиш в Emacs

Специальная комбинация клавиш, вызывающая заданную команду, обозначается термином связка клавиш. Все эти связки можно настроить под себя, но в Emacs имеется несколько комбинаций, заданных по умолчанию.

На первый взгляд большое количество заданных по умолчанию связок клавиш может показаться запутанным и сложным, но необходимо помнить, что они разработаны для повышения скорости работы и удобного запоминания. Для каждой связки обычно имеется мнемоническая основа, например, клавиша S используется для выполнения операции сохранения save.

Грубо говоря, в Emacs существует две главные классификации команд: содержащие клавишу Ctrl и содержащие клавишу Meta.

Как вводить комбинации с клавишей Ctrl

В Emacs многие команды вводятся комбинацией клавиш, содержащей Ctrl. В аннотации к Emacs такие команды записываются как "C-, и заканчиваются символом, соответствующим нажатой второй клавише. К примеру, часто используемая комбинация Ctrl-X в аннотации к Emacs обозначается как C-x.

Чтобы ввести комбинацию клавиш, содержащую Ctrl, необходимо нажать и удерживать клавишу Ctrl , при этом нажимая вторую клавишу, а затем отпустить обе. Большинство команд имеют в своём составе комбинацию клавиш, содержащую Ctrl, сопровождаемую либо словом, либо второй комбинацией с Ctrl.

Для примера попробуйте выполнить команду C-x C-s которая сохраняет текущий буфер на диск. Поскольку не было сделано никаких изменений, нет необходимости сохранять что-либо, но эту хорошую комбинацию клавиш стоит попробовать. Можно сделать это так:

  1. Нажать и удерживать клавишу Ctrl key.
  2. Единожды нажать клавишу X и отпустить обе клавиши.
  3. Нажать и удерживать клавишу Ctrl снова.
  4. Нажать клавишу S и опять отпустить обе.

Данная клавиатурная комбинация запускает команду сохранения буфера . В минибуфере Emacs будет выдано сообщение: "(No changes need to be saved)." ("Нет изменений для сохранения".)

Часто пользователи Emacs удерживают клавишу Ctrl нажатой и на втором шаге, когда запускаются эти комбинации — это позволяет избежать совместного нажатия клавиш на третьем шаге и даже делает процесс ввода более быстрым. Просто попробуйте.

Как вводить комбинации с клавишей Meta

Вторым основным типом клавиатурных комбинаций в Emacs являются комбинации с клавишей Meta; в аннотации к Emacs клавиша Meta обозначена как M-. Если Вы ничего не слышали о клавише Meta, это связано с тем, что большинство современных систем её не имеют. Существуют три способа ввода комбинаций, содержащих Meta:

  1. Клавишу Meta часто связывают с клавишей Alt, которая используется как Ctrl. Если ваша система настроена таким образом, используйте данный способ — это самый простой и распространённый метод.
  2. Также для задания последовательности Meta можно использовать клавишу Esc, но с ней обращаются иначе, чем с Ctrl. Необходимо нажать Esc, опустить его, а потом нажать вторую клавишу.
  3. Можно использовать Ctrl-[ как замену клавише Esc. Это удобно, если сессия Emacs запущена по сети, где ни Esc, ни Alt не работают.

Попробуйте ввести команду M-b , которая передвигает курсор назад на одно слово, тремя разными способами:

  1. Нажать и удерживать клавишу Alt , а потом нажать B единожды.
  2. Нажать Esc, отпустить, а потом снова нажать B единожды.
  3. Нажать и удерживать Ctrl, нажать [, отпустить обе клавиши, а потом единожды нажать B .

Каждая запускаемая в Emacs команда есть функция, определённая в Emacs Lisp, и имеет своё название. Даже команда перемещения курсора на предыдущую строку с использованием навигационной клавиши "вверх" является функцией (previous-line). Любую функцию можно запустить, используя команду M-x сопровождаемую именем функции.

Пример для выполнения:

  1. Нажать и удерживать клавишу Alt .
  2. Нажать клавишу X .
  3. Отпустить обе клавиши и пронаблюдать, как "M-x" появится в мини-буфере.
  4. Ввести previous-line и нажать Enter.

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

Подобно клавише "вверх" для быстрого вызова previous-line многие функции имеют свои клавиши быстрого вызова. Когда происходит нажатие такой клавиши или клавишной комбинации, вызывается соответствующая функция. Функцию previous-line можно выполнить и используя C-p. Пример для выполнения:

  1. Нажать и удерживать Ctrl.
  2. Нажать клавишу P key.
  3. 1.Используя навигационную клавишу, перенести курсор к верхней стороне окна.

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

Таблица 1. Управляющие префиксы-клавиши, часто используемые в Emacs.

Префикс комбинация Описание
C-c Команды, специфические для текущего режима редактирования
C-x Команды для файлов и буферов
C-h Команды справки
M-x Буквенное имя функции

Прекращение работы Emacs

Для выхода из Emacs необходимо напечатать:

 						C-x C-c 			

Если имеются несохранённые буфера, то команда даёт возможность предварительно их сохранить.

Это стандартный способ закончить работу в Emacs. Попробуйте сделать это сейчас, а потом снова запустите Emacs, набрав emacs в строке приглашения командной оболочки.

{mospagebreak}

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

В данном разделе исследуются самые важные команды по работе с буфером Emacs и файлами: как загружать файлы в буферы, как сохранять буферы в файлы, как переключаться между буферами и как "убивать" их.

Как создать новый файл с нуля

Когда Emacs запускается обычным образом, он открывается в особом буфере, получившем название нулевого буфера, scratch -буфера, назначение которого описано в сообщении вверху буфера:

 						;; Этот буфер для примечаний, которые Вы не желаете сохранять,  			а также для вычислений в Lisp. 			;; Если необходимо создать файл, измените его с помощью C-x C-f, 			;; а потом введите текст в собственный буфер этого файла. 			

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

Введите следующую строку текста: This is a practice file. и нажмите клавишу Enter , чтобы передвинуть курсор ниже, к новой строке. Как только начнёте печатать, увидите две звёздочки, возникающие у левого края строки режима — это означает, что текущий буфер содержит текст, который не был еще сохранён на диск.

Один из способов создать новый файл — это записать в файл нулевой буфер. Комбинация клавиш C-x C-s запускает save-buffer — команду, сохраняющую содержание текущего буфера в файле. Из предыдущего примера видно, что при выполнении этой команды в буфере, не нуждающемся в сохранении, Emacs выдаёт сообщает об этом. Но когда мы выполняем её в буфере, в котором имеются несохранённые изменения, а сам буфер соответствует тому или иному файлу на диске, содержание буфера записывается в этот файл. При её выполнении в новом буфере или в буфере, который ещё не связан с файлом (подобно нулевому буферу, создаваемому по умолчанию), Emacs запрашивает название файла, в котором требуется сохранить буфер.

Можно попробовать сделать это теперь: введите Ctrl-x Ctrl-s. Пронаблюдайте, как мини-буфер запрашивает название сохраняемого файла (см. рисунок 4). Теперь введите practice.

Рисунок 4. Сохранение нулевого буфера
Сохранение нулевого буфера

После нажатия клавиши Enter, Emacs сообщит в мини-буфер, что новый файл получил название practice и был записан на диск. Выйти из Emacs можно, введя C-x C-c, после чего в искомом каталоге видим сохранённый файл:

 						$ ls 			practice 			$ 			

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

Начало работы в Emacs с указанием имени файла

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

Попробуйте начать работу в Emacs с именем тренировочного файла:

 						$ emacs practice 			

Снова появится экран приветствия Emacs, но если нажать нечто вроде C-g или подождать продолжительное время), то этот файл появится в окне Emacs. Кстати, экран приветствия — это другая конфигурируемая опция.

Открытие файла

Emacs никогда не работает с содержимым файлов напрямую. Он читает содержимое файла в буфер, который можно редактировать. Используя C-x C-fи команду find-file , можно открыть буфер с содержимым файла.

Попробуем произвести открытие файла следующими командами:

  1. Введите C-x C-c , чтобы выйти из Emacs.
  2. Запустите Emacs снова, но в этот раз не задавайте конкретный файл:

     

     								$ emacs 				
  3. Введите C-x C-f и задайте имя Вашего файла (practice), когда появится запрос в мини-буфере.

Переход в буфер

Команда C-x b переключает с текущего буфера в другой указанный пользователем буфер. Вариант по умолчанию всегда указан в мини-буфере. Если нажать Enter без задания буферу имени, то произойдёт переключение буфера. Обычно по умолчанию — на последний просматриваемый буфер. Если такого буфера нет, происходит переход на нулевой буфер.

Введите C-x b и посмотрите, какие подсказки по работе с нулевым буфером предложены в мини-буфере. По нажатию Enter имеющийся тренировочный файл скроется, и в окне появится знакомое содержимое нулевого буфера. (По умолчанию нулевой буфер содержит трёхстрочное сообщение, но иногда он может быть пустым.) Введите C-x b снова и нажмите Enter чтобы переключиться на тренировочный буфер.

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

Снова наберите C-x b , но дайте буферу название mybuffer. Обратите внимание на то, что окно пустое. Это признак нового буфера. Наберите строку текста и нажмите Enter:

 						On what wings dare we aspire?  			

Сохраните этот буфер на диск, набрав C-xC-s. Отметим, что в данном случае Emacs запросит имя файла. При создании нового буфера, не связанного с файлом на диске, при первом же сохранении необходимо будет также задать имя. Не следует давать буферу то же имя, что и файлу, назовите его practice.b, и посмотрите, как Emacs меняет имя буфера, связывая его с новым файлом.

Уничтожение буфера

Команда C-x C-k позволяет уничтожить буфер или убрать его из текущего сеанса работы в Emacs. Далее необходимо ввести имя уничтожаемого буфера; по умолчанию это будет текущий буфер, который уничтожится, если нажать Enter.

Попробуйте уничтожить старые тренировочные буферы сразу же: для этого ведите C-x C-k и, когда Emacs запросит в мини-буфере имя буфера, введите practice и нажмите Enter. Буфер practice будет уничтожен, а буфер practice.b останется в окне, как и ранее.

Сохранение буферов на диск

Мы уже изучили, как сохранять содержимое буфера на диск, выполняя команду C-x C-s save-buffer Следует изучить еще несколько моментов данного процесса.

Первые несколько символов в строке режима указывают на статус буфера. Наберите сейчас ещё одну строку текста в буфере practice.b и нажмите Enter:

 						What the hand dare seize the fire? 			

Обратите внимание, как две чёрточки в строке режима превратились в звёздочки. Чёрточки означали, что содержимое буфера совпадает с тем, что сохранено на диск, а звёздочки сообщают, что в буфере имеются несохранённые изменения.

Сохраните сделанные изменения и выйдите из Emacs, набрав C-x C-s C-x C-c. В результате в каталоге проекта возникнет несколько новых файлов.

 						$ ls 			practice 			practice.b 			practice.b~ 			

Файлы practice и practice.b — это файлы, созданные пользователем, а practice.b~ — это файл, автоматически сгенерированный средой Emacs. Этот файл является резервной копией , создаваемой всякий раз при редактировании файла, предварительно созданного в Emacs. Когда происходит сохранение изменений в файле, Emacs делает резервную копию, дописывая к названию оригинального файла тильду. Старый файл practice не имеет резервной копии, т. к. он ни разу не редактировался после своего создания. Если же отредактировать его в среде Emacs, будет создан связанный с ним файл резервной копии practice~.

Emacs также создаёт файл другого типа , т.н. автосохранение. Этот файл имеет то же имя, что и оригинальный файл, но со знаком "решётка" в начале или конце. Emacs записывает файлы автосохранения после набора в редакторе определённого количества символов. По умолчанию автосохранение происходит после набора каждых 300 новых символов. Обычно после уничтожения буфера файл автосохранения пропадает. Это происходит потому, что файл автосохранения ассоциирован с буфером, подвергнутым уничтожению. Файлы автосохранения оказываются как нельзя кстати в случае аварийного завершения выполнения операционной системы или разрыва сетевого соединения в самом разгаре коллективной работы над проектом — это даёт пользователю возможность восстановить утерянные изменения, найдя такой файл в каталоге проекта.

Список команд пo работе с буферами и файлами

Таблица 2 содержит список некоторых наиболее употребительных команд по работе с буферами и файлами, использование которых пригодится при обучении работе в Emacs. Таблица содержит как клавиатурные сокращения, так и наименование функции, выполняемой командой. Необходимо помнить, что любую команду можно выполнить либо используя связку клавиш, либо используя имя функции как параметр к клавиатурной комбинации M-x .

Таблица 2. Часто используемые функции по работе с буферами и файлами в Emacs.

Связка Имя функции Описание
C-x C-s save-buffer Сохранение текущего буфера на диск.
C-x s save-some-buffers Сохранение всех несохранённых буферов на диск.
C-x C-c save-buffers-kill-emacs Сохранениеи всех несохранённых буферов на диск и о выходе из среды Emacs.
C-x C-z suspend-emacs Приостановка работы Emacs и перевод его в фоновый процесс.
C-x C-b list-buffers Отображение списка всех буферов.
C-x k kill-buffer Уничтожение буфера (по умолчанию текущего).
C-x C-q vc-toggle-read-only Изменение статуса текущего буфера на «только для чтения» (с контролем версий, если возможно).
C-x i insert-file Вставка содержимого файла в пункт.

 {mospagebreak}

 

Редактирование текста в Emacs

 

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

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

Ввод текста и перемещение по буферу

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

Иногда Emacs называют безрежимным редактором, often in comparison with a modal editor such as vi. This means the behavior of the editor and the keystrokes and commands you can type re, в противоположность режимному редактору vi. Это означает, что поведение редактора, "горячих клавиш" и вводимых команд остаётся неизменным в процессе вашей работы, в отличие от редактора типа vi, где значения "горячих клавиш" могут зависеть от того, использованы ли они в командном режиме или в режиме вставки. Emacs не имеет таких режимов; однако в нём имеются различные виды одного режима, что позволяет изменять его поведение или расширять его возможности. Но это уже предмет темы следующего руководства из данной серии.

Как и при вводе обычного текста, необходимо помнить несколько вещей.

Вставка текста в текущую позицию

В Emacs имеется важная концепция, получившая название пункт , обозначающая то место, куда происходит вставка символов. Это — воображаемая ячейка буфера, находящаяся между символами, в которой расположен курсор и куда будет вставлен следующий символ.

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

Попробуйте вставить целый абзац текста в начало тренировочного буфера practice.b:

  1. Начните работу Emacs с этого буфера:

     

     								$ emacs practice.b 				
  2. Введите абзац, нажимая Enter в конце каждой строки, и нажмите Enter снова в самом конце, тем самым создав пустую строку:

     

     								Tyger! Tyger! burning bright 				In the forests of the night, 				What immortal hand or eye 				Could frame thy fearful symmetry? 				Тигр, тигр, жгучий страх, 				Ты горишь в ночных лесах. 				Чей бессмертный взор, любя, 				Создал страшного тебя?? 				

Замечание: Это первая строфа из стихотворения The Tyger!(Тигр!) Уильяма Блейка. Автор ссылается в тексте на несколько строф этого стихотворения.

Теперь буфер practice.b выглядит так, как показано на рисунке 5.

Рисунок 5. Вставка абзаца
Вставка абзаца

Перемещение курсора

Можно видеть, как курсор следует за набираемым текстом, а пункт остаётся на месте: весь вводимый текст вставляется перед буквой O первого набранного предложения.

Чтобы передвинуть пункт, используйте навигационные клавиши ("стрелки"). Как можно ожидать, все другие стандартно используемые для перемещения курсора клавиши PgUp, PgDn, Home и End также работают, но в Emacs имеются и собственные связки для перемещения курсора, и, поскольку для их использования не требуется смещать руки с наиболее часто используемой области клавиатуры к краям, они могут показаться многим более удобными.

Как было показано в разделе Как вводить комбинации с клавишей Meta , для перемещения курсора вверх, на предыдущую строку можно использовать C-p ; подобным же образом, C-n перемещает курсор вниз, на следующую строку. C-f перемещает вперёд , к следующему символу, а C-b перемещает назад , к предыдущему символу.

Чтобы перемещаться вверх и вниз по содержимому экрана, не применяя клавиши PgDn и PgUp, используйте комбинации клавиш C-v и M-v , которые дублируют их функционал. Для перехода в начало текущей строки используйте C-a; а при помощи C-e можно перейти в конец текущей строки.

Обычно, клавиша Meta, применяемая в команде, частично соответствует клавише Ctrl, данное правило применимо и для перемещения курсора. Когда вместо Ctrl используется Meta, клавиши F и B перемещают курсор вперёд и назад на слово вместо того, чтобы делать это на символ, тогда как клавиши A и E перемещают курсор в начало и конец текущего предложениясоответственно. (В конфигурации по умолчанию функции клавиатурных комбинаций M-n и M-p не определены.)

Таблица 3 содержит список разнообразных перемещений курсора и соответствующих им клавиатурных комбинаций. В ней приведены названия выполняемых функций и подробные описания. Используйте их для перехода в начало или конец буфера, а также для перемещения внутри него.

Таблица 3. Полезные комбинации клавиш для перемещения и навигации по Emacs

Комбинация клавиш Функция Описание
C-p,
Стрелка вверх
previous-line Переместить пункт вверх на предыдущую строку.
C-n, Стрелка вниз next-line Переместить пункт вниз на следующую строку.
C-f, Стрелка вправо forward-char Переместить пункт вперёд на следующий символ.
C-b, Стрелка влево back-char Переместить пункт назад к предыдущему символу.
M-f forward-word Переместить пункт вперёд на слово.
M-b backward-word Переместить пункт назад на слово.
C-v, PgDn scroll-up Прокрутить текст вверх по экрану.
M-v, PgUp scroll-down Прокрутить текст вниз по экрану.
Home beginning-of-buffer Переместить пункт в начало буфера. (В некоторых версиях эта клавиша переопределена как клавиша перемещения пункта в начало текущей строки. )
End end-of-buffer Переместить пункт в конец буфера. (В некоторых версиях эта клавиша переопределена как клавиша перемещения пункта в конец текущей строки. )
C-a beginning-of-line Переместить пункт в начало строки.
C-e end-of-line Переместить пункт в конец строки.
M-a beginning-of-sentence Переместить пункт в начало предложения.
M-e end-of-sentence Переместить пункт в конец предложения.
C-{ beginning-of-paragraph Переместить пункт в начало абзаца.
C-} end-of-paragraph Переместить пункт в конец абзаца.

Использование режима перезаписи

Как видно, текст, напечатанный в буфере, вставляется в пункт. Но можно переписать и уже существующий текст. Для этого необходимо единожды нажать клавишу Ins ; это включает режим перезаписи, который по умолчанию отключён. Взглянув на строку режима, можно увидеть надпись Ovwrt , сообщающую, что данный режим сейчас активен.

Используйте команды перемещения так, как описано в таблице 3, и передвиньте курсор так, чтобы он встал на символ w в слове we, а далее напечатайте символ h .

Перейдите к верхней части буфера: наберите M-a M-a C-f , чтобы передвинуть курсор на символ y, и напечатайте вместо него символ i . То же самое необходимо сделать со следующим символом y , введя команды M-f C-f C-f C-f i так, чтобы буфер выглядел, как показано на рисунке 6.

Рисунок 6. Перезапись символов в буфере
Перезапись символов в буфере

Снова нажмите Ins , чтобы отключить режим перезаписи.

Вставка цитаты

Текст можно вводить не только при помощи цифровых и буквенных клавиш. Можно использовать буквенные управляющие символы или вводить символы при помощи кодов. Это делается путем вставки цитаты, с помощью команды C-q; следующее за этим нажатие буквенной клавиши, например, в комбинации с Ctrl, вводит эту клавишу в пункт. Значение кода символа можно также ввести в восьмеричной системе, нажав затем Enter.

Перейдите в конец буфера и наберите Page break here, нажмите Enter. Затем введите символ разрыва страницы, нажав комбинацию символов Ctrl-l, а затем escape-символ, имеющий восьмеричное значение 033: C-q C-l C-q 033 Enter.

Delete, undo, redo — удалить, отменить, вернуть

Теперь попробуем средствами Emacs избавиться от существующего текста, а потом отменить и восстановить произведённые изменения.

Удаление текста

Чтобы удалить символ слева от курсора, используйте либо клавишу Backspace, либо клавишу Del. Попробуйте обе клавиши, чтобы удалить два только что введённых управляющих символа.

Чтобы удалить символ в пункте, используйте C-d; подобным же образом M-d удаляет впереди стоящие относительно курсора символы до конца слова. Сзади стоящие символы также можно удалять двумя способами: M-Del и M-Backspace удаляют все символы слева от курсора и до начала слова.

Попробуйте использовать эти команды для удаления только что введённого предложения Page break here, после чего удалите образовавшуюся пустую строку.

Переместите курсор в последнюю строку файла (которая должна содержать предложение "What the hand dare seize the fire?") и удалите ее, нажав несколько раз M-d.

Отмена и возвращение

А что делать, если последнее предложение не надо было удалять? Можно вернуть его, выполнив функцию отмены Она вызывается комбинацией C-_, которая вводится удержанием клавиши Ctrl с использованием клавиши Shift, необходимой для ввода подчёркивания. Попробуйте сделать это сейчас, чтобы вернуть последнюю строку, вызывая данную комбинацию по одному разу для каждого слова, которое требуется восстановить.

Сделайте так ещё несколько раз, чтобы предложение Page break here вернулось на экран.

А что делать, если вдруг стало ясно, что последнее действие было отменено напрасно и на самом деле требуется , чтобы предложение Page break here исчезло? Тогда можно воспользоваться функцией восстановления , вызываемой комбинацией C-g, которая аннулирует одну или более операций отмены, затем введите C-_ достаточное число раз, чтобы слова ушли снова.

Многократное выполнение команды

C-u — это универсальный параметр любой команды, который вводится перед той или иной командой вместе с числом, обозначающим, сколько раз должна выполняться та или иная команда.

Попробуйте, переместившись к началу второй строфы, напечатать In what distant d, а далее ввести C-u 2 e — будут напечатаны два символа e . Закончите строфу, напечатав:

 						ps or skies 			Built the fire of thine eyes? 			

Ввод комбинаций C-x C-s сохранит имеющийся буфер; он будет выглядеть как показано на рисунке 7.

Рисунок 7. Вставка символа с универсальным параметром в буфер
Вставка символа с универсальным параметром в буфер

Команда C-u , выполненная без численных параметров, принимает значение 4. Если команду C-u ввести в качестве параметра самой себя, то произойдёт умножение значения по умолчанию (4) на самоё себя, в результате получится 16; можно руководствоваться этим принципом столько раз, сколько возникает такая потребность перед вводом команды. Например, C-u C-u C-u A напечатает букву A 64 раза в данной точке.

Перемещаясь назад, выполнив однократно команду C-b , можно увидеть, как курсор перемешается назад на предыдущую строку. Попробуйте сделать это с универсальным параметром, напечатав C-u C-b; можно заметить, что в этом случае курсор переместится назад уже на четыре символа, а не на один, как раньше. Сделав это снова через комбинацию C-u C-u C-b, можно пронаблюдать, как курсор переместится на 16 символов влево. Введите C-u C-u C-u C-bи дайте параметр 1000: C-u 1000 C-b. Курсор переместится к началу буфера, но будет выдан системный звук — это означает, что достигнута вершина буфера (и нет возможности дальнейшего перемещения курсора влево), причём достигнута прежде, чем были проведены все необходимые итерации.

Таблица клавиш редактирования

Пришло время кратко повторить изученный материал. Прежде чем перейти к следующему разделу, окинем взглядом таблицу 4, в которой перечислены важные команды редактирования текста и клавиатурные сокращения для их вызова, используемые по умолчанию.

Таблица 4. Наиболее часто употребляемые команды редактирования в Emacs.

Комбинация клавиш Функция Описание
Ins overwrite-mode Включает ражим перезаписи (по умолчанию неактивен).
Backspace,
Del
delete-backward-char Удаление символа перед пунктом.
C-d delete-char Удаление символа в пункте.
M-d kill-word Удаление впереди стоящих символов от курсора до конца слова.
M-Backspace,
M-Del
backward-kill-word Удаление сзади стоящих символов от пункта до начала слова.
C-_ undo Отмена последних введённых символов или действий.
C-q character or XXX quoted-insert Вставка в пункт буквенного символа по нажатию клавиши или через восьмеричное значение XXX.
C-u number command universal-argument Выполнить команду последовательно указанное число (по умолчанию 4) раз.

{mospagebreak}

Выделение и мышь

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

Выделение, вырезание, удаление

В Emacs имеются средства выделения областей текста для их последующего редактирования целиком. Эти команды описаны здесь и приведены в таблице 5.

Выделение области

Перейдите в вершину буфера — начало первой строфы — и введите C-Space , нажав и удерживая Ctrl и "пробел". Это действие называется установка маркера; в строке режима появится сообщение о том, что маркер установлен.

Все, что находится между пунктом и местом, в котором установлен маркер, называется областью.

Можно сделать областью всю первую строфу, переместив пункт вниз к пустой строке, прямо после строфы.

Удаление и вырезание текста

Для работы с областью имеется ряд специальных команд, включая C-w, которая удаляет область.

Введите C-w , чтобы удалить только что определённую область.

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

Можно удалять не только области; команда C-k удаляет весь текст от пункта и до конца строки. Перейдите к началу строки, где находится слово Tiger (Тигр) и уничтожьте строку с помощью команды C-k. Обратите внимание, что выполнение данной команды не приводит к мгновенному появлению пустой строки; данная операция требует повторного нажатия C-k. Сделайте это, после чего введите C-y , чтобы отменить удаление целой строки. Если процесс удаления происходит с помощью многократного использования команд удаления, введённых последовательно, то эти команды объединяются в единое целое, и однократная отмена возвращает их.

Можно производить вставку той или иной строки столько раз, сколько захочется. Перейдите к вершине буфера и вставьте строку обратно с помощью команды C-y.

Также можно уничтожать по несколько строк последовательным нажатием сочетания C-k и вставлять эти строки за один приём. Попробуйте уничтожить несколько строк за раз, а потом вернуть их обратно, как будто это одна строка, с помощью команды C-y.

Копирование текста

При копировании региона не обязательно его удалять. Чтобы сохранить регион в кольце удаления без его уничтожения, используйте M-w вместо C-w.

Пример:

  1. Переместите пункт в начало второй строки нижней строфы.
  2. Введите C-Space , чтобы установить маркер.
  3. Переместите пункт на следующую строку после этой строфы.
  4. Введите M-w , чтобы скопировать эти три строки в кольцо удаления без их уничтожения.
  5. Переместите пункт вверх в пустую строку под первой строкой буфера.
  6. Вставьте три строки с помощью команды C-y.

После этого имеющийся буфер будет выглядеть так, как показано на рисунке 8.

Рисунок 8. Вставка нескольких строк
Вставка нескольких строк

таблица 5. Функции Emacs для выделения и уничтожения текста

Комбинация клавиш Функция Описание
C-Space set-mark-command Установка маркера в текущей позиции (пункте).
C-k kill-line Удаление всего текста от пункта до конца строки.
C-w kill-region Удаление области.
M-w kill-ring-save Сохранение области в кольце удаления без удаления самой области.
C-y yank Вставка текста из кольца удаления.

Выделение и перемещение с помощью мыши

Хотя Emacs разработан в расчете на использование в первую очередь горячих клавиш, в нем также можно использовать и мышь — это бывает удобным для выполнения некоторых текстовых операций.

Чтобы переместить пункт в любое место буфера, переместите курсор мыши туда, куда хотите переместить пункт, и выполните однократный щелчок левой кнопкой мыши . Попробуйте с помощью мыши переместиться в пространство между второй и третьей строфами и напечатайте новую строфу:

 						When the stars threw down their spears, 			And watered heaven with their tears, 			Did he smile his work to see? 			Did he who made the Tiger make thee? 			В тот великий час, когда 			Воззвала к звезде звезда, 			В час, как небо все зажглось 			Влажным блеском звездных слез, - 			Он, создание любя, 			Улыбнулся ль на тебя? 			Тот же ль он тебя создал, 			Кто рожденье агнцу дал? 			

Двойной щелчок левой кнопкой мыши по слову выделяет это слово. Сделайте двойной щелчок по слову Tiger (Тигр) , которое только что ввели; оно будет выделено, затем нажмите Del , чтобы удалить его. Напечатайте слово Lamb , чтобы вставить это слово в пункт.

Чтобы выбрать при помощи мыши целую строку, выполните тройной щелчок по строке левой кнопкой мыши. Попробуйте сделать это с верхней строкой и нажмите Del , чтобы удалить её. Введите C-_ , чтобы вернуть строку.

Щелкните левой кнопкой мыши по середине буфера и напечатайте ещё две строфы, чтобы завершить стихотворение:

 						What the hammer? what the chain? 			In what furnace was thy brain? 			What the anvil? what dread grasp 			Dare its deadly terrors clasp? 			And what shoulder, and what art, 			Could twist the sinews of thy heart? 			And when thy heart began to beat, 			What dread hand? and what dread feet? 			Кто скрутил и для чего 			Нервы сердца твоего? 			Чьею страшною рукой 			Ты был выкован - такой? 			Чей был молот, цепи чьи, 			Чтоб скрепить мечты твои? 			Кто взметнул твой быстрый взмах, 			Ухватил смертельный страх? 			

Для выбора области следует нажать левую кнопку мыши и переместить курсор. Выбрать область также можно, нажав один раз левую кнопку мыши (для установки пункта), а затем выполнить щелчок правой кнопки мыши где-нибудь в другом месте (для установки маркера). Как только это будет сделано, выбранный текст будет помещён к кольцо удаления без уничтожения самого текста — можно использовать C-y и среднюю клавишу мыши для вставки текста в пункт. Для помещения выделенной области в буфер удаления и его последующего уничтожения, выполните двойной щелчок правой кнопкой мыши , чтобы указать область.

Попробуйте изменить порядок этих двух строф, которые только что напечатаны:

  1. Щёлкните левой кнопкой мыши в начале пустой строки между ними.
  2. Произведите двойной щелчок правой кнопкой мыши ниже только что напечатанной второй строфы.
  3. Щёлкните средней кнопкой мыши в начале пустой строки перед строфой, начинающейся с What the hammer? (Кто скрутил и для чего)

Введите C-x C-s , чтобы сохранить буфер на диск. Текущий сеанс работы Emacs примет вид, показанный на рисунке 9.

Рисунок 9. Вставка текста с помощью мыши
Вставка текста с помощью мыши

Таблица 6 описывает различные доступные в Emacs операции, выполняемые мышью.

Таблица 6. Операции Emacs, выполняемые мышью

Действия мышью Описание
Щелчок левой кнопкой мыши Данная команда устанавливает пункт; перетаскивание левой кнопкой задаёт регион.
Двойной щелчок левой кнопкой Эта команда выделяет слово
Тройной щелчок левой кнопкой Эта команда выделяет строку.
Щелчок средней кнопкой мыши Эта команда вставляет текст.
Щелчок правой кнопкой мыши Эта команда определяет и подсвечивает область, а затем размещает её в буфере удаления, не уничтожая саму область. Если она уже подсвечена и задана, то конец области перемещается в то место, где произошёл щелчок мышью.
Двойной щелчок правой кнопкой мыши Эта команда задаёт и подсвечивает область, а затем удаляет её. Если область уже подсвечена и задана, то конец области перемещается в то место, где произошёл щелчок мышью, после чего область уничтожается.

Заключение

Подведение итогов

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

Хотя данное руководство пользователя охватило многие основные приёмы по работе с программой, есть ещё много нюансов, которым стоит научиться. Дальнейшие руководства из данной серии познакомят читателя с более сложными средствами редактирования текстов в Emacs и покажут, как использовать их в работе.

по материалам www.ibm.com/developerworks/ru

Оставьте комментарий