Журнал LinuxFormat - перейти на главную

LXF77:Emacs

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

Emacs для пользователя

часть 1 И вновь продолжается бой! Александр Кузьменков подливает масла в огонь древнего противостояния Vi и не-Vi.

Emacs — пожалуй, один из самых известных проектов-долгожителей, разрабатываемых под лицензией GPL. Когда-то давно, когда деревья были маленькими, а компьютеры - большими, небезызвестный Ричард Столлмен (Richard Stollmen) начал разрабатывать свою свободную Unix-подобную операционную систему GNU (Gnu’s Not Unix). Ричард относительно легко справился с написанием комплекта компиляторов GCC и множества других программ, среди которых был и Emacs, который задумывался им как текстовый редактор для программирования. И хотя своей главной цели Столлман пока не достиг (проекту ОС GNU не хватает стабильного ядра: работа над Hurd ведется довольно вяло), его GCC и Emacs приобрели такую популярность, что были портированы на большинство распространенных операционных систем и платформ.

Наверняка вы уже наслышаны о «святых войнах юниксоидов» на тему «Vim против Emacs», и скорее всего пробовали запускать Emacs. А может быть, вы — приверженец Vim и решили посмотреть на вечного конкурента своего любимого редактора?. Скорее всего потыкавшись в кнопки, расположенные на панели инструментов, вы побыстрее закрыли его, чтобы с чистой совестью вернуться в любимый Kate/Gedit/Evim/Tea, где все просто, логично и знакомо. Да, Emacs никак не подходит под определение «дружественной к пользователю программы» и вряд ли вам понравится с первого взгляда, но поработав с ним недельку-другую и «заточив» под свои нужды, вы вряд ли будете продолжать использовать Kate/Gedit для правки текста, а KDevelop/Anjuta/Eclipse — в качестве IDE. Подлинная мощь Emacs состоит в расширяемости: с помощью дополнительных компонентов он может заменить и почтовый клиент, и web-браузер, и ICQ/Jabber/IRC-клиент, и даже MP3-плеер.

Ядро Emacs, написанное на C, по сути, представляет собой интерпретатор языка Elisp (Emacs Lisp), а остальная часть редактора написана на этом языке. К чему такие сложности? На самом деле все довольно просто: Emacs — поистине огромный проект, и такой подход к разработке сделал его портирование на другие платформы и ОС довольно несложным делом. То есть оно сводится к портированию ядра программы — интерпретатора Elisp.

Cтоит упомянуть, что существует несколько различных версий Emacs: это GNU Emacs, до сих пор поддерживаемый Ричардом Столлменом; отпочковавшийся от него XEmacs; microEmacs, по слухам, являющийся любимым редактором Линуса Торвальдса, и еще несколько других. Мы будем ориентироваться на GNU Emacs, как на самую рас- пространенную версию, поскольку она есть во всех известных дистрибутивах, в отличие от тех же XEmacs и microEmacs.

Основы основ

Давайте разберемся с тем, как работает этот монстр. Запустите Emacs и нажмите C-x C-f. В терминологии Emacs С означает клавишу Ctrl, а M — клавишу Meta, соответствующую клавишам Alt или Esc. То есть «нажмите C-x C-f» означает, что вы должны нажать x при зажатом Ctrl, а затем, не отпуская Ctrl, нажать f. Эта комбинация используется для открытия и создания файлов, а для сохранения служит C-x C-s. Да, вот такие неудобные на первый взгляд «горячие клавиши» выбраны в Emacs для таких простых действий. Впрочем, стоит сказать, что каждый опытный «емаксер» создает свою собственную раскладку клавиатурных комбинаций. При нажатии C-x C-f в нижней части окна, называемой минибуфером, появится приглашение к вводу имени файла для редактирования. Вы можете ввести имя как существующего файла (тогда он откроется для редактирования), так и не существующего. В последнем случае Emacs откроет пустой буфер, который впоследствии будет сохранен в указанный файл.

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

Минибуфер поддерживает функцию автодополнения имен файлов/каталогов по клавише Tab, на манер командной оболочки Bash.

Думаю, с открытием файла вы разобрались. Теперь попробуйте открыть другой файл, или создать новый. Как видите, он открылся, но куда делся предыдущий? Никуда — он просто находится в другом буфере! При открытии или создании файла Emacs создает для него новый буфер, который становится активным. Для переключения между буферами используется комбинация C-x C-b, после нажатия которой в минибуфере появится приглашение к вводу имени буфера, на который вы хотите переключится. Если вместо ввода имени буфера просто нажать Enter, то Emacs переместит вас к предыдущему буферу.

Для выхода из редактора служит комбинация C-x C-c. Если на момент выхода у вас будут измененные буферы, которые вы не сохранили, обратите внимания на строку минибуфера — Emacs обязательно спросит, не хотите ли вы сохранить изменения. Для закрытия одного лишь активного буфера применяется сочетание клавиш C-x C-k.

Окно редактирования Emacs можно заставить отображать сразу несколько буферов, разделив его на несколько независимых частей. Для разделения окна по горизонтали нажмите C-x 2, по вертикали — C-x 3. Перемещаться между различными частями окна редактирования можно при помощи сочетания C-x o. Для того, чтобы вернуться в обычный режим с отображением одного буфера в окне редактирования, нажмите C-x 1. Обратите внимание, что активным станет тот буфер, в которым вы находились до нажатия C-x 1.

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

Если вы случайно нажмете C-x или, например M-x, или просто передумаете вызывать какую-нибудь внутреннюю команду, нажмите C-g. После этого информация в минибуфере уничтожится, а сам он станет неактивным.

Процесс копирования-вставки в Emacs имеет свои особенности. Для копирования куска текста установите курсор на его начало и нажмите M-пробел. В минибуфере в это время должно появиться сообщение Mark Set («метка установлена»). Теперь с помощью клавиш-стрелок, PgUp/PgDown или Home/End доберитесь до конца нужного куска и нажмите C-w. Это команда вырезает часть текста и заносит его в буфер обмена. Для копирования нажмите вместо C-w M-w, а для вставки из буфера обмена — C-y. Конечно, можно вместо C-пробел использовать для выделения мышь, но быть может вы такой же мышефоб, как и я? Когда вы выделяете текст мышью, он подсвечивается, а при выделении с помощью комбинации C-пробел этого, по умолчанию, не происходит. Это можно исправить, активировав в главном меню опцию Active Region Highlighting (Transient Mark Mode), которая находится в подменю Options.

Путь к СУТРМ

Ну что ж, думаю, самые основы работы с Emacs вы постигли, давайте же превратим его в СУТРМ , то есть в Самый Удобный Текстовый Редактор в Мире. Во-первых, удалите файл .emacs из вашего домашнего каталога, если он там есть и перезапустите редактор — начнем, как говорится, с чистого листа.

Во-первых стоит рассказать Emacs’у, что мы по умолчанию хотим сохранять наши файлы в кодировке koi8-r. Для этого выберите в главном меню Options->Mule (Multilingual Environment)->Set Language Environment->Cyrillic->Cyrillic-KOI8. Теперь, если хотите, включите подсветку активного участка текста: Options->Active Region Highlighting (Transient Mark Mode) и подсветку парных скобок: (Options->Paren Match Highlighting (Show Paren Mode). Это, пожалуй, все, что лично я доверяю «автоматике» Emacs’а. Сохраните эти настройки, выбрав в меню Options->Save Options, дальше мы будем редактировать конфигурационный файл вручную.

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

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

(tool-bar-mode nil)

Истинные минималисты вроде меня могут добавить еще (menubar-mode nil) для скрытия главного меню и (scroll-bar-mode nil) для удаления полос прокрутки. К меню всегда можно обратиться с помощью щелчка правой кнопки мыши в буфере при зажатом Ctrl. Кстати, переключаться между буферами можно таким же образом, только вместо правой кнопки используйте левую.

Я знаю, вас раздражают эти C-x C-f и C-x C-s. Давайте же «перевесим» команды открытия и сохранения файла на другие комбинации. Добавьте следующие строки в свой .emacs:

(global-set-key «\C-s» ‘save-buffer)
(global-set-key «\C-o» ‘find-file)
(global-set-key «\M-f» ‘isearch-forward)

Таким образом мы назначили команды сохранения (save-buffer) и открытия файла (find-file) на C-s и C-o соответственно. Но зачем мы назначили на M-f какой-то isearch-forward? На самом деле это очень удобная функция линейного поиска по тексту, которая по умолчанию привязана к C-s (таким образом, без этой строки мы могли бы ее использовать лишь набрав вручную имя в минибуфере). Для поклонников mcedit можно порекомендовать такую конфигурацию:

(global-set-key [f2] ‘save-buffer)
(global-set-key [f1] ‘find-file)
(global-set-key [f7] ‘isearch-forward)

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

Наводим марафет

Вряд ли вас устраивает цветовая схема Emacs, которая установлена по умолчанию, да и шрифты никуда не годятся: латинские одного размера, кириллические — другого. Нужно исправлять ситуацию. Для изменения цветов редактора предусмотрены функции set-face-background и set-face-foreground. Первая отвечает за фон, вторая — за цвет раположенных на нем объектов. Например, в .emacs следующих строк:

(set-face-background ‘default «red»)
(set-face-foreground ‘default «blue»)

заставит Emacs выводить текст красными буквами на синем фоне (адское сочетание! Не повторяйте этого дома, ну или хотя бы предварительно к окулисту запишитесь). Вместо «red» или «blue» можно использовать цвета вроде «#3743ec», так что откройте палитру в Gimp и не ограничивайте себя всякими «green» и «black». Для изменения цветов меню нужно заменить ‘default на ‘menu.

Я предпочитаю использовать немного другой способ, который потребует значительно меньше телодвижений. Наверняка в вашем домашнем каталоге есть файл с описанием параметров ресурсов X-Window (он обычно называется .Xresources или .Xdefaults). Если его нет — создайте его и внесите в этот файл всего две строки:

Emacs*background: #3d3d3d
Emacs*foreground: #e1e1e1

Теперь запустите xrdb ~/.Xresources для обновления параметров ресурсов. После этого и в меню, и в панели инструментов, и в буфере фоном будет «#3d3d3d», а цветом переднего плана (шрифта) - «#e1e1e1». Гораздо удобнее, не правда ли?

Так же дело обстоит и со шрифтами: есть функции set-face-font, работающие таким же образом, как и set-face-background, но удобнее использовать .Xresources. Мне нравится полужирный шрифт terminus:

Emacs*font: -xos4-terminus-bold-r-normal--14-140-72-72-c-80-koi8-r

Для выбора шрифта (а заодно и корректного составления его имени) рекомендую воспользоваться утилитой xfontsel, входящей в комплект X-Window.

Что ж, надеюсь, теперь вам приятнее смотреть на ваш Emacs…

Проверка орфографии

Что еще не помешало бы текстовому редактору? Наверное, проверка орфографии. В Emacs для проверки орфографии используется внешняя утилита ispell. Плюс ко всему существует специальный режим - flyspell-mode (для его работы также необходима ispell), который сделан на манер проверки орфографии в текстовых процессорах: вы печатаете слово, а flyspell сразу же проверяет его. Если такое слово не найдено в словаре, оно выделяется и подчеркивается. Щелкнув на подчеркнутом слове средней кнопкой мыши, вы сможете выбрать нужный вариант из тех, что подобрал flyspell или занести это слово в словарь. Разумеется, для работы flyspell вы должны установить в своей системе пакеты ispell и ispell-ru. Если ispell есть практически в любом дистрибутиве, то с ispell-ru (который содержит русский словарь для ispell) не все так гладко. Если вы не найдете его в своем дистрибутиве, вам придется скачать один из словарей отсюда: http://fmg-www.cs.ucla.edu/geoff/ispell-dictionaries.html.

После этого нужно указать Emacs, чтобы он использовал для проверки орфографии русский словарь. За имя словаря, используемого ispell и flyspell, отвечает внутренняя переменная ispell-dictionary. Очевидно, необходимо установить для нее значение «russian». Есть несколько способов сделать это. Если хотите установить какую-либо переменную только для текущего сеанса, то для этого прекрасно подойдет функция customize-variable. Но если вы захотите, например, всегда использовать русский словарь, то проще прописать значение соответствующей переменной в файл .emacs:

(setq flyspell-dictionary «russian»)

Давайте назначим командам проверки орфографии какие-нибудь простые комбинации:

(global-set-key [f11] ‘ispell-buffer)
(global-set-key [f12] ‘flyspell-mode)

Теперь по клавише F12 вы сможете включать/выключать режим проверки «на лету», а по F11 производить пошаговую проверку. Возможно у читателя появится вопрос — а зачем нужно возиться с Emacs, если тот же Vim/Gedit/Kate подходит для удобного редактирования текста практически «из коробки»? Да, но ведь к Vim’у тоже нужно привыкать, а без документации использование Vim сродни ловле черного кота в темной комнате — можно ориентироваться только по звуку. Ну и наконец, если вы являетесь приверженцем Vim, почему бы просто из любопытства не посмотреть на то, как ваши любимые функции реализованы в Emacs? Kate/Gedit конечно же очень просты, однако в них нет и двадцатой части функций Emacs.

Да, Emacs довольно непрост в конфигурировании, но зато настройке поддается абсолютно все!

К сожалению, современной русскоязычной документации по Emacs не существует, есть лишь перевод руководства к уже давно устаревшей 19-й версии от Алекса Отта (см. http://linux.org.ru/books/emacsmanual). Впрочем, разобраться с Emacs можно и без официального руководства, благо теперь вы знаете основы, так что дальше дело пойдет быстрее. Некоторое количество полезной информации можно почерпнуть из Emacs wiki (http://www.emacswiki.org), на которой есть и русскоязычный раздел.

В крайнем случае, если вам что-то непонятно, пишите мне на rc_4096@list.ru.






Персональные инструменты
купить
подписаться
Яндекс.Метрика