Emacs для начинающих

Вариации на тему emacs


Подобно vi, текстовый редактор emacs - инструмент классический. Именно он стоит у истоков всего течения open source. И уже поэтому заслуживает внимания. К тому же он часто рассматривается как универсальный инструмент, позволяющий решать почти любые задачи - от правки конфигурационных файлов до написания исходников программ в многие тысячи строк.

Естественно, о emacs написано немало. Достаточно вспомнить книгу Ричарда Столмена "Руководство по GNU Emacs", недавно изданную в русском переводе. Не говоря уже о многочисленных статьях, как в Интернете, так и в традиционных журналах. Однако обычно уделяется внимание использованию emacs как редактора для программистов. Мы же посмотрим, каковы его возможности в написании не исходных, но просто текстов.

Функционально emacs существенно ближе к текстовым редакторам DOS, чем vi. Он имеет один-единственный режим - режим редактирования, включающийся сразу же после запуска редактора. Практически все нем манипуляции осуществляются с помощью управляющих клавиш Control, Escape и Alt в комбинации с буквенными. Что особенно приятно нашему человеку, комбинации эти работают вне зависимости от раскладки клавиатуры.

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

  • в него может быть считано содержимое уже существующего файла ([Control+x] - общий компонент для всех операций с буферами и окнами, затем [Control+f] - от слова file, как я понимаю);
  • вновь созданный в буфере текст может быть записан как файл ([Control+x], [Control+s] - вероятно, от Save;
  • несколько текстовых файлов могут быть объединены в одном буфере последовательным выполнением команды ([Control+x] i), то есть insert, за которой следует запрос имени файла.

Редактор emacs позволяет работать в одной консоли с несколькими файлами одновременно. С этой целью для каждого файл посредством ([Control+x] b) создается новый буфер со своим именем (которое никакого отношения к имени файла иметь не обязано).

В каждом буфере можно работать с любым количеством окон, сколько их поместится на экране. Разделение экрана на два окна осуществляется командой ([Control+x] 2), переход между окнами командой ([Control+x] o). Фрагменты текста могут переноситься из окна в окно либо штатными командами emacs, либо путем выделения мышью и вставки в позицию курсора щелчком средней ее клавиши.

Очень приятной особенностью emacs является нормальное, с точки зрения пользователя DOS, поведение клавиш Home и End, перемещающих курсор, соответственно, в начало и конец строки. И еще: перенос слов на границе экрана осуществляется без разрыва строки, то есть, в терминологии текстовых процессоров, без образования нового абзаца (который возникает только при нажатии клавиши Enter). Что очень полезно, если в дальнейшем предполагается экспорт в какой-либо текстовый процессор типа Word: искоренение лишних символов возврата каретки, возникающих при переносе слов во многих редакторах, - занятие не из самых жизнерадостных.

Редактор emacs обладает довольно эффективными инструментами для редактирования введенного текста. Они основываются на понятии блока - то есть текстового фрагмента, расположенного между меткой (вводимой комбинацией [Control+@] и текущим положением курсора. Блок может быть изъят (аналог Cut в Windows) командой [Control+w] и вставлен (в текущем окне или буфере, или в ином другом) командой [Control+y]. Имеется также многоуровневая отмена последовательностю команд ([Control+x] u).

В общем, пользователь, имеющий навыки работы со старыми текстовыми процессорами для DOS, основанными на использовании клавишных комбинаций, способен без большого труда освоить emacs. А доведя манипуляцию ими до автоматизма - и эффективно его использовать. Недостаток его (впрочем, характерный почти для всех консольных редакторов Linux) - крайне непривычное, для пользователей DOS использование мыши: с ее помощью можно только выделять фрагменты текста, но на текущую позицию курсора она никакого влияния не оказывает. Кроме того, мерцание последнего раздражает (по крайней мере, меня).

Впрочем, некоторая, скажем так, непривычность интерфейса emacs в известной мере сглаживается, если он запущен в окне терминала системы X Window. Это, как ни странно, не совсем то же самое, что emacs в режиме консольном. Правда, его можно запустить в окне терминала и в первозданном виде - командой emacs -nw (что означает "no window"); правда, не очень понятно, зачем это нужно - тогда уж лучше просто работать в консоли.

Потому что emacs, запущенный в терминальном окне той же командой без параметров, предоставляет многие дополнительные возможности по сравнению с чисто консольным вариантом. Для начала, в нем волшебным образом появляется строка меню, избавляющая от необходимости запоминания немерянного количества клавишных комбинаций (что само по себе не смертельно, но требует постоянной практики). Кроме того, курсор начинает вести себя обычным (для DOS/Windows-мигранта) способом, то есть может позиционироваться мышью. Есть и еще несколько приятных особенностей.

Итак, первое, что бросается в глаза при запуске emacs в окне терминала - это строка меню. Организованное не вполне стандартным, но по своему логичным образом.

Первым пунктом идет Buffers - основополагающее понятие для emacs. Здесь можно, во первых, переключаться между открытыми буферами, во вторых - вывести список буферов. В пункте Files, как это ни странно, помимо открытия, сохранения, переименования и вставки файла, также присутствуют операции с буферами (обращение и уничтожение буфера), а также с фреймами; термин "фрейм" в контексте emacs соответствует понятию окна в большинстве иных приложений.

В пункте Tools - масса всяких опций, от печати и сравнения файлов и буферов до чтения новостей, получения и отправки почты, поиска файлов, компилирования и отладки программ. В пункте Edit - обычный набор инструментов для редактирования (вырезание, копирование и вставка, а также отмена). Здесь же - всякого рода форматирование, именуемое свойствами текста - от шрифтоначертания и выравнивания до отступов и установок цвета фона и текста. В пункте Search - разнообразный поиск, а также работа с закладками (Bookmark).

Все, что не вошло в перечисленные пункты, собрано в пункте Mule (не от мула ли?). Главным образом, однако, он предназначен для установки языкового окружения. Причем язык может быть выбран почти любой - от английского и любого другого европейского до тибетского и эфиопского. Присутствует и русский, причем сразу в четырех своих ипостасях - ISO, Alt, KOI-8R и (да простят меня мои незалежные братья по этносу) KOI-8U.

В общем, через окно терминала наглядно можно видеть величие системы emacs, в которой, теоретически, заложены все мыслимые и немыслимые возможности. Которые в чисто консольном варианте замаскированы длинными списками команд. Однако, не смотря на изобилие возможностей, и для непосредственной задачи, то есть ввода текстов, emacs вполне пригоден.

Правда, для этого требуется некоторая привычка. Начать с того, что открытие файла осуществляется не вполне традиционно: при выборе из меню File - Open File внизу окна появляется нечто вроде командой строки с предложением ввести имя открываемого файла. Сделать это не сложно - поддерживается режим дополнения пути с помощью клавиши табулятора.

Если же на приглашение командной строки просто нажать Enter - появляется список файлов и подкаталогов текущего каталога (по умолчанию - $HOME). Который представляет собой отдельный буфер, видимый в их списке (пункт меню Buffers).

Далее с помощью мыши (или, конечно, курсором управления курсором) можно перейти к подкаталогу с требуемыми файлами. Однако открыть этот подкаталог можно, только нажав Enter. После чего появляется содержимое дочернего каталога, также представляющее собой самостоятельный буфер. В результате, при достаточной вложенности подкаталогов, довольно быстро пункт Buffers заполняется всеми этапами пути до требуемого файла. Так что лучше уж принять приглашение командной строки в самом начале...

Правда, после открытия файла никаких сложностей при его редактировании не возникает. Перемещение по тексту происходит обычным для пользователя DOS способом - с помощью клавиш управления курсором, Home и End, PageUp и PageDown, а также мыши; никаких неожиданных эффектов не возникает.

Выделение текстовых блоков - также обычное: мышью, клавишами управления курсором при нажатой клавише Shift; слово можно выделить двойным щелчком мышью. А щелкнув правой клавишей мыши, можно выделить блок между текущей и предшествовавшей позицией курсора.

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

Вставка содержащегося в буфере обмена фрагмента, не зависимо от способа его помещения туда, может быть осуществлена щелчком правой клавиши мыши, через меню (Edit - Paste) или комбинацией клавиш Control+y.

Измененные файлы могут быть сохранены - через пункты меню File - Save Buffer или Save Buffer as. По умолчанию устанавливается также автосохранение файлов. Предупреждаю: если вы закрываете родительское для emacs окно терминала, не сохранив изменений - emacs будет закрыт, и никаких предупреждений о необходимости записи измененных файлов не ждите.

Интерактивных способов настройки emacs не предусмотрено. Такие параметры, как размер и гарнитура экранного шрифта, его цвет и цвет фона, изменяются ручным редактированием файла ~/.Xdefaults (в домашнем каталоге пользователя). Относящаяся к emacs его секция имеет примерно такой вид: ! emacs, xemacs


emacs*Background: DarkSlateGray emacs*Foreground: Wheat emacs*pointerColor: Orchid emacs*cursorColor: Orchid emacs*bitmapIcon: on emacs*font: -cronyx-courier-medium-r-*-*-20-*-*-*-*-*-koi8-r !xemacs*font: -etl-fixed-medium-r-*-*-14-*-iso8859-5 emacs.geometry: 80x25

Из чего понятно, что могут быть заменены цвета фона, текста, индикатора курсора, гарнитура, начертание и размер экранного шрифта и его кодировка, а также геометрия окна. Впрочем, для единичного сеанса все это можно указать в качестве параметров при запуске emacs из командной строки.

Более сложная настройка emacs (нужно сказать, что возможности таковой - почти безграничны) осуществляется редактирование файла инициализации - ~/.emacs, который представляет собой, в сущности, программу на языке LISP. На нем я останавливаться не буду - это описано в упоминавшейся книге Ричарда Столмена.

Следует упомянуть, что существует и собственно графическая модификация emacs - XEmacs. Однако, кроме внешнего вида, никаких впечатлений о нем получить мне не удалось: программа с регулярностью, достойной лучшего применения, слетала после ввода нескольких слов. Не имею оснований для обобщений - вероятно, это особенность моей системы. Поскольку многие множества пользователей XEmacs применяют - и не жалуются. Однако мне про него сказать нечего...

Vi и emacs - далеко не единственные редакторы для текстового режима. Однако в большинстве своем они продолжают одну из двух этих линий. Хотя есть и самостоятельные программы, которые стоит рассмотреть в рубрике


Содержание раздела