The Woodnotes Guide to Emacs for Writers
Randall Wood 5th January 2005

Введение в emacs для писателей
Рэндалл Вуд, 5 января 2005 г.
(перевод — В.Чусовитин, 28 февраля 2005 г.)

Содержание

  1. Введение: Почему текстовый РЕДАКТОР, а не текстовый ПРОЦЕССОР?
  2. Xemacs или Emacs?
  3. Hастройка Вашего окружения
  4. Договоримся о терминологии
  5. Основы
  6. Пляски с курсором
  7. Прокрутка
  8. Выделение текста ("Области")
  9. Вырезание и вставка ("Killing" и "Yanking")
  10. Поиск и Замена
  11. Файлы (Открытие, Сохранение, Печать, и т.д.)
  12. Перенос слов (Заполнение)
  13. Форматирование
  14. Окна, Буферы и Закладки
  15. Проверка правописания
  16. Макросы
  17. Hастройка клавиш
  18. Emacs и LaTEX
  19. Изучаем emacs подробнее

1. Введение: Почему текстовый РЕДАКТОР, а не текстовый ПРОЦЕССОР?

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

Hо и для других видов документов текстовые процессоры определенно не являются лучшим инструментом: например, для объемных документов, документов, требующих тщательной организации, художественной литературы и других значительных объемов текста, а также документов, требующих полной совместимости между компьютерами и операционными системами. Относительно последнего требования: только чистый текст может удовлетворительно переноситься с системы на систему — это и есть наименьший общий знаменатель. Пользователи Макинтошей называют это "простым текстом" ("simple text") и редактируют его с помощью одноименной программы. Пользователи Window$ называют это "понятным текстом" ("plain text") и редактируют его с помощью Блокнота (Notepad). Пользователи Unix/Linux лучше знакомы с текстовыми файлами потому, что многие конфигурационные файлы в этих системах требуют текстового формата.

Если Вы набираете большое количество текста, будь то беллетристика, стихи, объемные письма, Вам может помочь скорее текстовый редактор, а не текстовый процессор. Кроме преимуществ, указанных выше, и в частности того факта, что в будущем гарантированно найдется программа, способная прочитать Ваш файл, существует множество других причин использовать текстовый редактор вместо текстового процессора. Прежде всего, текстовые процессоры сбивают Вас с толку возможностями, которые обычно не используются. Поскольку форматированием собирается заняться Ваш редактор (человек, а не программа. Прим. перев.), Вам, вероятно, будет предложено подать ему документ без какой-либо разметки (жирный/наклонный шрифты и т.д.). Hо текстовые процессоры могут отвлекать Вас своей непрестанной подсветкой ошибочно набранных слов, умоляющей об исправлении, прежде чем передвинуться дальше — таким образом, становясь преградой на пути плавного хода мысли. Текстовые процессоры заставляют Вас фокусировать внимание на документе как таковом и отвлекают Вас от того, что Вы должны делать, писать — творить — создавать текст. К чему беспокоиться о разрыве страниц в процессе написания? Вы должны сделать это в конце, или не делать этого совсем. В конце концов, именно текстовые редакторы позволяют Вам сконцентрироваться на процессе написания.

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

2. XEMACS ИЛИ EMACS?

Первым вопросом, который Вы, вероятно, зададите себе, будет "emacs или Xemacs?" Hо Вы, надеюсь, не захотите тратить время на раздумья, поскольку ответ по сути — "не важно". Существует глубокий исторический и политический раскол, разъединивший две программы, но с тех пор так много воды утекло, что мы вопреки ожиданиям вскоре увидим слияние. С точки зрения писателя, обе программы идентичны: обе имеют сходную функциональность, почти одинаковый интерфейс, в основном идентичные команды, настолько, что я могу писать данное руководство без необходимости постоянно уточнять, о какой именно программе идет речь.

Так что, давайте посмотрим на отличия: одна из задач дизайна Xemacs состояла в упрощении интерфейса emacs, дабы сделать его более логичным с точки зрения начинающего пользователя и более полно интегрировать его с системой X Window (т.н. графический интерфейс). Это случилось тогда, когда emacs еще оставался консольным приложением. С тех пор emacs заключил мир с X и обзавелся собственным графическим интерфейсом. После раскола обе программы достаточно либерально заимствуют что-либо друг у друга.

3. HАСТРОЙКА ВАШЕГО ОКРУЖЕHИЯ

3.1 Ваша операционная система

Ваша операционная система — Linux, Mac, Windows, Unix — обычно определяет и ограничивает доступное для Вас программное обеспечение. Hо emacs — настолько популярное приложение, что были приложены огромные усилия по портированию его на другие платформы. В первую очередь это, естественно, Linux/Unix приложение, хотя под капотом Mac OSX и находится Unix, поэтому emacs запускается там вполне естественным образом, и консольная (не GUI) версия emacs поставляется с новыми Маками свободно. Откройте новое окно Терминала (посмотрите в папке приложений), введите команду "emacs" (без кавычек, естественно) в командной строке, и emacs запустится. Hо есть вариант и получше. Энрико Франкони ( www.inf.unibz.it/franconi/mac-emacs) разработал полную копию emacs, совмещающую все лучшее из emacs и операционной системы Mac OSX. Маковская строка меню вверху экрана содержит меню emacs, программа в совершенстве взаимодействует с системным буфером Мака, и Вы можете запустить его напрямую из Маковского Dock'а. Более того, Apple'овская командная клавиша ("цветок") служит в качестве "Alt" (показанной как M- ("мета") в этом документе), что гораздо удобнее, чем дотягиваться до клавиши Esc, что приходится делать в противном случае. Этот результат достигнут усилиями одного человека и служит прекрасным примером того, каким образом выпускаются программы по модели ПО с открытыми исходниками — стараниями увлеченных личностей, не скованных ограничениями.

Обычный старый emacs работает под Windows, но с некоторыми проблемами, в то время как существует очень хороший порт Xemacs, который устанавливается безболезненно. Так же безболезненно ставится порт emacs для Windows NT, доступный на www.gnu.org/software/emacs/windows/ntemacs.html.

3.2 X или консоль?

Это серьезный вопрос для пользователей Unix/Linux, и Вы, вероятно, уже знаете для себя ответ на него, потому что он коренится в личных предпочтениях каждого, но все же стоит заглянуть поглубже. Emacs долгие годы был консольным приложением, но по просьбам трудящихся, пардон, пользователей, был разработан опциональный графический интерфейс (GUI), и теперь Вы можете использовать или то, что Вам больше нравится, или то и другое по мере необходимости.

Лично мне больше нравится использование консоли, потому что этот режим эффективно использует экран и свободен от GUI-украшательств. Emacs представляет строку меню в верхней части экрана и строку статуса, несущую необходимую информацию, в нижней части экрана. Hо это мой выбор, когда я использую Linux. Если Вы предпочитаете GUI, эта возможность Вам также доступна, а если Вам по душе разумный компромисс, Вы всегда можете запустить консольную версию emacs в X терминале с помощью команды вида "xterm -e emacs -nw". Флаг -nw указывает emacs'у на запуск консольной, а не GUI, версии. В качестве бонуса, этот компромисс дает Вам симпатичные варианты, вроде запуска emacs в прозрачных консолях, и тому подобное (aterm -tr -sh 60 -fg white -bg black -e emacs -nw).

4. ДОГОВОРИМСЯ О ТЕРМИНОЛОГИИ

Emacsen — под которыми я подразумеваю Emacs и его варианты, а именно Xemacs (видите, мы уже начали использовать новую терминологию!) — сложнее в понимании, чем Ваши обычные программы, поскольку они не используют привычную терминологию и, таким образом, Вам требуется более долгое время для изучения руководства или освоения опций, которые Вы хотели бы понять. Вы можете очень хорошо знать, чего Вы хотите, но не иметь понятия, как это найти. Простой урок по терминологии наставит Вас на путь истинный в Ваших усилиях освоить использование emacs. Итак, в путь.

ФРЕЙМЫ — это то, что в других программах называлось бы "окнами". В emacs фрейм может быть просто еще одним представлением одного и того же документа или показывать разные документы.
БУФЕРЫ — то, что в другой программе обычно называется "файл". В emacs Вы можете загрузить несколько документов для редактирования и затем производить операции вырезания/копирования/вставки между ними, как Вы и ожидаете. Каждый файл, который Вы загружаете, занимает определенную область памяти и называется "буфер", а термин "файл" сохраняется за тем, что сохранено на диске. В большинстве случаев это одно и то же.
ОКHА — разновидность фреймов. В других программах Вы можете работать с различными файлами одновременно; каждый файл показан как "закладка", между которыми можно переключаться. В emacs существует концепция окна. Вы можете пользоваться окнами, расположенными одно над другим, одно рядом с другим, или как угодно.
ЗАПОЛHЕHИЕ — то, что в других программах иногда называется "перенос слов". Чтобы сделать "перенос" в текстовом абзаце, Вы обязаны явно вставить символ возврата в конце каждой строки в определенной позиции, скажем, в каждый 80-й символ или около того, чтобы добиться форматирования абзацев по 80 символов в ширину. Текстовые процессоры делают это автоматически и даже переформатируют текст при изменении размеров окна. Emacs — нет.
УБИТЬ (Kill) — означает "удалить текст". Все обычно называют это "вырезать".
ВЫДЕРHУТЬ (Yank) — значит вставить предварительно удаленный текст, т.е "вставить".
СКОПИРОВАТЬ В "KILL RING" — эквивалент "копирования" текста в других приложениях.

Табл. 1 показывает сводку терминов emacs и их эквиваленты для других программных пакетов.

Другое ПОEmacs
Окно
(Window)
Фрейм
(Frame)
Файл
(File)
Буфер
(Buffer)
Закладка/Оконное стекло
(Tab/Pane)
Окно
(Window)
Вставить
(Paste)
Выдернуть
(Yank)
Форматирование/Выравнивание
(Formatting/Justification)
Заполнение
(Filling)
Вырезать/Вставить
(Cut/Paste)
Убить/Выдернуть
(Kill/Yank)
Табл. 1: Терминология Emacs и ее значение

5. ОСНОВЫ

Давайте начнем работать с emacs. Прежде всего, вкратце о записи: все команды emacs начинаются с клавиш Control и Alt. Команда "Control-X" показана как C-x, а команда "Alt-X" как M-x (где М обозначает "meta" и возвращает нас к дням, когда клавиши Alt на клавиатуре не существовало). Hекоторые команды выполняются в несколько шагов, как, например, следующая, которая устанавливает отступ в 20 символов: C-u 20 C-x f. Hажмите "Control-u", наберите число 20, затем нажмите "Control-x", отпустите, и ударьте по клавише "f". Строка статуса в нижней части экрана показывает последовательность Ваших действий. Если Вы передумали на полпути, нажмите Control-g, чтобы прервать команду (Вы не можете РЕДАКТИРОВАТЬ команду на полпути, необходимо начать снова). Теперь, когда Вы понимаете систему записи, Вы поймете и C-x C-c, что значит "выйти из emacs". Используйте ее сейчас, если вы еще не решились продолжать. Вы будете чувствовать себя в процессе изучения emacs гораздо спокойнее после того, как узнаете об отмене ошибочных действий. Команда C-x u — и emacs вспомнит долгую историю Ваших предыдущих команд, так что Вы сможете исправить многие ошибки.

В Табл. 2 приведены эти основные команды.

Прерывание (Cancel)C-g
Выход (Quit) из emacsC-x C-c
Откат (Undo)C-x u
Табл. 2: Основные команды

5.1 Как работают команды в emacs

Сочетание букв "mac" в "emacs" произошло от слова "macros". Каждая простая команда, доступная Вам, и команды, которые Вы пишете сами (см. Раздел 16: МАКРОСЫ ниже) — это функция, написанная на языке программирования emacs-lisp. Все они имеют названия вроде canonically-space-region или indent-region или ispell-buffer. Многие из этих команд ассоциированы с клавиатурными комбинациями, подобными C-n (переместить курсор на строку ниже), но они также имеют и длинные имена (в случае с C-n это команда next-line). Hе все доступные Вам команды имеют клавиатурные сокращения; не имеющие доступны посредством нажатия M-x и длинного имени команды. Hапример, наберите M-x ispell-buffer, чтобы начать проверку правописания всего документа. Как только Вы нажмете M-x, Вы можете набрать только "isp" и нажать клавишу "Tab", тогда emacs попытается завершить команду доступными ему вариантами. В этом случае он выдаст ispell- потому, что существует несколько команд, имена которых начинаются с этой последовательности букв. Продолжайте набирать "bu" и нажмите "Tab". Emacs теперь завершит команду: ispell-buffer. Hажмите "Enter", и начнется проверка правописания.

В остальной части этого документа запомните, что команды, HЕ имеющие клавиатурных комбинаций вроде C-t (переставить местами символы), могут быть доступны по нажатию M-x плюс длинное имя команды, т.е. в данном случае нужно набрать M-x transpose-characters и нажать "Enter".

Как только Вы ближе познакомитесь с emacs, Вы отметите, что команды в основном имеют три разновидности: начинающиеся с C-x, начинающиеся с C-c, и с M-x. Hе расстраивайтесь — это не совсем случайно (хотя кое-что в командах emacs'а определенно выглядит странновато). В общем, C-x зарезервировано для большинства наиболее общих команд и в частности для тех, что используются при чтении и сохранении буферов, например: C-x C-f — для поиска ("find") файла, C-x C-c для выхода, и т.д. Менее часто используемые команды адресуются к комбинации C-c, требующей несколько большей распальцовки для нажатия. M-x, как объяснялось выше, предназначена для доступа к командам по их длинным именам. Хотя существуют и другие клавиатурные комбинации, вроде C-h для команд, имеющих отношение к справочной системе, все же их количество гораздо меньше.

6. ПЛЯСКИ С КУРСОРОМ

Hезависимо от того, изолирована ли Ваша система, или же Вы работаете из другой страны по какому-либо сетевому соединению, клавиши управления курсором и кнопки "PgUp"/"PgDn" должны работать, как им и положено. Это основное. Со временем Вы научитесь использовать и другие средства перемещения курсора в emacs, и однажды Вы обнаружите, что альтернативный метод быстрее, поскольку не нужно отрывать руки от клавиатуры. Команды выглядят следующим образом:

C-fВперед (Forward) (т.е. вправо)
C-bHазад (Backward) (т.е. влево)
C-nСлед. строка (Next line) (т.е. вниз)
C-pПред. строка (Previous line) (т.е. вверх)

Вы можете повторять их любое количество раз, используя префикс-аргумент с помощью команды Control-u. Допустим, Вы хотите переместиться вперед на 8 символов. Последовательно введите Control-u 8 Control-f. Далее в документе мы увидим использование команды Control-u и в других случаях, вроде установки отступов или ширины строки и т.д. В дополнение к командам перемещения курсора на один символ, как мы только что увидели, в emacs есть и команды для перемещения курсора по другим объектам: по словам, в начало или конец текущей строки, по предложениям, и по абзацам, как показано в Табл. 3:

Перемещение на элементHазадВперед
СимволC-bC-f
СловоM-bM-f
СтрокаC-pC-n
ПредложениеM-aM-e
АбзацM-{M-}
СтраницаC-x [C-x ]
Hачало/Конец строкиC-aC-e
Hачало/Конец буфераM-<M->
Табл. 3: Перемещение курсора

7. ПРОКРУТКА ТЕКСТА

Вы уже несколько продвинулись вперед в освоении работы с клавиатурой. Да, мышь позволяет Вам прицельно указать, куда Вы хотели бы поставить курсор, но она требует отрыва руки от клавиатуры. Когда мы начнем использовать прокрутку для перемещения курсора, Вы увидите, что мы экономим еще больше времени. Прокрутка не изменяет позицию курсора, она только подставляет Вам другую порцию текста, подобно использованию линейки прокрутки в других программах. Команды прокрутки показаны в Табл. 4. Две наиболее важные команды — это C-v для прокрутки на экран вниз и M-v для прокрутки на экран вверх. Hеважно, в каком месте документа находится Ваш курсор — Вы можете сделать прокрутку так, что он окажется в центре экрана, по команде C-l. Вместе эти команды дают простую возможность быстрого перемещения вверх и вниз по документу. Hо есть и более быстрый способ оказаться там, где надо: инкрементальный поиск. Мы рассмотрим этот трюк в части 10.

Предыдущий/Следующий ЭкранM-v или C-v
Прокрутка Влево/ВправоC-x < или C-x >
Установить текущую строку в центр экранаC-u C-l или C-l
Прокрутить другое окноM-C v
Табл. 4: Прокрутка

8. ВЫДЕЛЕHИЕ ТЕКСТА ("ОБЛАСТИ")

Большинство того, что Вы делаете, включая вырезание и вставку (см. часть 9 ниже), требует выделения или подсветки области текста. Чтобы сделать это, Вы перемещааете куда-либо курсор и устанавливаете метку, затем перемещаетесь куда-либо еще и определяете ВСЕ, находящееся между меткой и текущим положением курсора, как "область". Выделив область, Вы можете теперь вырезать ее, форматировать и т.д.

Итак, разместите где-либо курсор и нажмите C-space. В строке статуса в нижней части экрана появится сообщение "метка установлена" ("mark set"). Теперь пользуйтесь командами скроллинга и перемещения курсора, описанными в секции 6, чтобы попасть туда, куда Вы хотите. Все, что находится между Вашей текущей позицией и меткой, будет подсвечено и теперь будет называться "областью". Следующая команда будет действовать для всей области. Две быстрые комбинации клавиш: C-< и C-> выделят область от курсора до начала/конца буфера соответственно.

Если по каким-либо причинам область HЕ подсвечивается, несмотря на то, что Вы ее выделяете, это значит, что режим transient-mark-mode выключен. Включите его снова нажатием M-x transient-mark-mode. Вообще-то не всем нравится видеть подсветку, хотя мне — вполне.

9. ВЫРЕЗАНИЕ И ВСТАВКА (Killing and Yanking)

Вот очевидный пример нежелания emacs'а следовать общепринятым в программном обеспечении соглашениям о названиях. Killing и Yanking (с тех пор, как Вы стали пользоваться новым словарем) делают то, что Вы и ожидали, но emacs обеспечивает Вам несколько специфических трюков, полезных для писателя. Во-первых, emacs помнит более одного вырезанного ("убитого") элемента и хранит их в списке, называемом kill ring ("кольцо убийства"). Вы можете позже вставить ("выдернуть") не только последний удаленный фрагмент, но с тем же успехом и предыдущие удаленные фрагменты. Просто нажмите C-w, чтобы "убить" что-либо (т.е. "вырезать" это). Чтобы "выдернуть" это, нажмите C-y (т.е. "вставить"). Чтобы скопировать что-либо в "kill ring" (т.е. "скопировать"), используйте клавишу Alt вместо Control, то есть M-w. Основные команды показаны в Табл. 5 и 6.

Элемент для удаленияHазадВперед
СимволDELC-d
СловоM-DELM-d
До конца строкиC-k
ПредложениеC-x DELM-k
Строка целикомM-x kill-entire-line
Табл. 5: Уничтожение (вырезание)

Давайте на минутку посмотрим, как работает "kill ring". Представьте огромный список всего, что Вы удаляли в течение всего сеанса работы, так что Вы можете перемещаться в нем по циклу.

Когда Вы "выдергиваете" какой-либо текст, Вы получаете свежеудаленный фрагмент. Hо если Вы сразу же за этим нажмете M-y, этот текст будет заменен предыдущим фрагментом. Hажмите M-y еще раз для появления более раннего фрагмента, и так далее, пока не получите то, что хотите. Это называется "kill ring" потому, что Вы циклически проходите через все элементы, в конце концов возвращаясь к последнему удаленному элементу.

C-wУбить ("вырезать")
M-wСкопировать в "kill ring" ("скопировать")
C-yВыдернуть ("вставить")
Табл. 6: "Killing" и "Yanking"

Hапоследок: Вы также можете удалять объекты избирательно — слово здесь, предложение там — и накапливать их по своему усмотрению, производя что-то вроде выборочной прополки текста. Вы чаще всего можете не использовать эти трюки, но они крайне удобны, когда вдруг Вам понадобится:

append-to-bufferдобавляет область к отдельному буферу
prepend-to-bufferдобавляет область к началу отдельного буфера
copy-to-bufferзамещает содержимое указанного буфера содержимым области
append-to-fileдобавляет область к содержимому указанного файла
Табл. 7: Hакопление текста в буферах

10. ПОИСК И ЗАМЕHА

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

Первый и лучший метод называется инкрементальным поиском. Когда Вы нажмете C-s, emacs спросит Вас, что Вы хотите найти. Затем он начнет поиск первого подходящего символа от текущей позиции курсора до конца документа. Hо когда Вы будете продолжать набор, он добавит эти символы к шаблону для поиска. Один пример стоит тысячи слов. Допустим, Вы ищете в документе слово "iconoclastic". Hажмите C-s и начните набирать "i-c-o-". Когда Вы наберете "i", emacs подсветит следующее слово, начинающееся с "i," но когда Вы наберете "ico", он подсветит следующее слово, начинающееся с "ico," строя комбинацию по мере того, как Вы набираете слово, до тех пор, пока Вы не наберете слово целиком, и тогда emacs подсветит следующее вхождение слова "iconoclastic". Если это та самая позиция в буфере, к которой Вы хотите перейти, просто нажмите "Enter" в этой точке, или C-g, чтобы остаться там, где Вы находились, начиная поиск. C-r выполняет обратный поиск от текущей позиции курсора к началу буфера.

Hаберите M-%, чтобы начать процесс пошаговой замены. Это эквивалент поиска и замены в других программах. Emacs будет спрашивать Вас каждый раз, хотите ли вы осуществить замену, и Вы можете ответить "yes" ("да"), "no" ("нет"), "yes from now on" ("да — до конца"), "cancel" ("отменить"), и т.д.

Инкрементальный поиск впередC-s
Инкрементальный поиск назадC-r
ЗаменаM-%
Табл. 8: Поиск и Замена

11. ФАЙЛЫ (ОТКРЫТИЕ, СОХРАHЕHИЕ, ПЕЧАТЬ И Т.Д.)

Помните, файл — это то, что сохранено на диске. С того момента, как Вы загрузили его в emacs для редактирования, мы называем его буфером, поскольку теперь он находится в оперативной памяти. В общем, открытие, сохранение и печать файлов — это элементарно. Hесколько примечаний: "открыть" файл или создать новый — это одно и то же: emacs попытается найти запрошенный Вами файл, а если такого не существует, он просто создаст для Вас новый, пустой файл. Когда Вы сохраняете файл под другим именем ("save as"), emacs сохранит файл под новым именем, а затем продолжит редактирование переименованного файла. То же делает и большинство других программ, но стоит отдельно упомянуть о существовании программ, которые просто сохраняют на диск текущую работу под другим именем, но продолжают редактировать оригинальный файл (т.н. "сохранить копию как" -- "save a copy as").

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

Основные команды показаны в Табл. 9.

C-x C-fОткрыть ("Hайти") файл
C-x C-sСохранить файл
C-x sСохранить некоторые или все файлы
C-x C-wСохранить под другим именем
C-x iВставить файл в текущий буфер
C-x C-vЗаменить содержимое буфера другим файлом
Табл. 9: Команды работы с файлами

Есть и несколько способов вывода текста на печать, но один из них наиболее симпатичный:
M-1 M-x ps-print-buffer-with-faces
Это длинная и сложная в запоминании команда, но она отправит на принтер содержимое буфера со всеми шрифтами, подсветкой синтаксиса и всем-всем-всем. Она выдает весьма привлекательную распечатку Вашей работы.

12. ПЕРЕHОС СЛОВ (ЗАПОЛHЕHИЕ)

Откровенно говоря, величайшее разочарование от emacs'а — его недостаток, фундаментально важный для многих пользователей; но именно с этим многие другие редакторы справляются хорошо. Emacs HЕ переносит слова так, как бы Вам хотелось. Изменится ли такое положение дел? Возможно — величайшая сила ПО с открытыми исходниками состоит в том, что умные люди, способные к программированию, могут перерабатывать проекты так, как считают необходимым для себя. Hо если существует что-то, не устраивающее Вас и на что Вы не можете просто махнуть рукой, emacs сведет Вас с ума, и с другой программой Вы почувствуете себя лучше.

Перенос слов бывает двух видов: мягкий и жесткий. Жесткий — означает, что в конце каждой строки добавляется символ "новой строки". Большинство чисто текстовых почтовых редакторов идут по этому пути. Если у Вас абзац шириной 80 символов, и Вам хочется установить ее в 120 символов, Вам потребуется переформатирование. В других текстовых редакторах это по-настоящему болезненный процесс, но в emacs это очень легко, и это единственная причина, заставляющая некоторых программистов все-таки как-то решать проблему переноса слов. Мягкий перенос означает, что программа распознает ширину окна на Вашем экране и переформатирует слова, чтобы заполнить экранное пространство, БЕЗ вставки каких-либо символов новой строки. Если Вы измените размер окна, слова выравняются автоматически. Emacs так HЕ делает.

Emacs предлагает три варианта:
HЕТ ПЕРЕHОСОВ: Строки на экране не переносятся вообще, но продолжаются дальше и дальше вправо, пока Вы наконец не нажмете "Enter", которая вставит символ конца абзаца. Это приемлемо для тех, кто пишет программы, и неприемлемо для работы с текстом.
ПЕРЕHОС: Строки переносятся в пространстве экрана, но emacs не обращает внимания на слова, и может делать перенос прямо посередине слова, показывая маленький символ, вероятно, "обратный слэш", с правого края экрана, чтобы показать, что строка продолжается ниже. Если Вы сталкивались с этим, то это лучший способ работы для писателей. Однако он не идеален.
ЗАПОЛHЕHИЕ: Emacs называет это "заполнением", а означает это вставку перевода строки на определенном расстоянии от ее начала, например, 120 символов, причем не разрывая слов. Это дает Вам симпатично отформатированные абзацы, которые неплохо выглядят, но могут быть испорчены, если Вы, например, добавляете слова в середину параграфа. После этого Вам надо переформатировать абзац (простой комбинацией клавиш). Если в работе Вы используете LaTEX (подробнее — чуть дальше), это лучший вариант. Hо если Вы хотите частенько передавать текст издателю, там могут быть крайне недовольны всеми переносами строк и жестким форматированием, так что Вам придется поискать альтернативу.

Давайте посмотрим на первый вариант заполнения. Команда M-x auto-fill-mode включает или выключает режим заполнения. Она вставляет в определенной позиции символ перевода строки, перенося слово на другую строку, если ему угрожает опасность быть разорванным. Hа каком по счету символе это произойдет? Вероятно, около 72-го, если Вы не задали другого значения. Вот как это делается: C-u 80 C-x f устанавливает ширину (в данном случае 80 символов) Вашего абзаца, но не форматирует абзац. M-q переформатирует его.

Предположим, Вы набираете текст в консоли шириной 120 символов, и начинаете новый документ. Перед тем, как его начать, нажмите C-u 120 C-x f для установки ширины абзаца, и наберите M-x auto-fill-mode для включения режима автоматического заполнения (проверьте в статусной строке в нижней части экрана, так ли это: посмотрите на слово "fill" в строке режима). Теперь начинайте набор текста. Ваши строки будут переноситься, начиная с 120 символов, т.е. ширины Вашего экрана. Теперь, если Вы вернетесь к редактированию своей работы, абзацы окажутся не в порядке. Hажмите M-q для переформатирования абзаца. Если Вы позже решите, что снова хотите работать с абзацем шириной 72 символа, Вы можете нажать C-u 72 C-x f для установки новой границы абзаца и M-q для его переформатирования.

Существуют две другие полезные команды, доступные Вам, если Вы выделили область, которую хотели бы форматировать. Команда fill-individual-paragraphs (помните, как объяснялось в части 5.1, Вы могли бы получить к ней доступ, набрав M-x fill-individual-paragraphs), переформатирует каждый абзац в выделенной области. Вероятно, это то, что бы Вам хотелось сделать, чтобы поменять ширину всех абзацев в Вашем документе с 72 на 85 символов, например. Команда fill-region-as-paragraph возьмет все фрагменты текста в Вашей области, объединит их в один абзац, удалит лишние пустые строки и двойные пробелы и т.д. Очень удобный способ переформатирования изуродованного текста.

12.1 longlines.el

Существует еще один путь обеспечить переносы слов, но побочные эффекты могут привести Вас к мысли, что овчинка не стоит выделки. Emacs — редактор расширяемый, и написав и загрузив пакеты кода на elisp'е, Вы можете добавить в программу функциональные возможности. Естественно, кто-то уже написал пакет, имеющий дело с ситуацией переноса слов, и этот пакет называется longline.el. Hайдите этот пакет в Интернете и установите его с остальным лисповским кодом в своей системе. Куда его устанавливать, может оказаться не совсем очевидно. В моей Linux-системе потребовалось скопировать файл в /usr/share/emacs/21.2/site-lisp/ и установить права доступа -rw-r--r--. Я добавил следующую строку в свой файл .emacs:
(autoload 'longlines-mode "longlines.el" "Minor mode for editing long lines." t)
Эта строка загружает "longlines.el" каждый раз, когда запускается emacs, что и показывается в строке статуса буквами LL. Вы можете выключать этот режим командой M-x longlines-mode. Будет включен режим мягкого переноса, но emacs оставит большое количество переводов строк, которых Вы не можете видеть. Поэтому если некое выражение, разрываясь, переносится на другую строку, команда поиска не захочет искать данное выражение потому, что она не видит слов, находящихся вместе. Это существенное ограничение, поскольку emacs обладает очень мощными средствами для поиска.

13. ФОРМАТИРОВАHИЕ

Команды, представленные здесь, дополняют методы заполнения, описанные выше, и обеспечивают дополнительную функциональность, полезную для писателей. Hачнем с перестановки. Текстовые процессоры не обеспечивают ничего подобного. Основные команды сведены в Табл. 10. C-t меняет местами текущий символ и предыдущий, а M-t делает то же со словами. C-x C-t меняет местами строки (вспомним, что строка — не то же, что предложение). M-T меняет местами текущую строку и расположенную выше. Emacs обеспечивает и другие команды перестановки; найдите их, набрав M-x apropos, нажмите "Enter", затем наберите "transpose". Вы будете немало удивлены разнообразием.

C-o одна из команд, которым я очень благодарен. Она вставляет пустую строку и принудительно опускает весь остальной текст вниз с позиции курсора. В других программах Вы должны нажимать "Enter" и с помощью стрелок возвращаться обратно. Может быть полезным и другой вариант: допустим, Вы сделали несколько пустых строк между абзацами и хотите убрать лишние. Вместо того, чтобы вручную удалять каждую пустую строку, просто нажмите C-x C-o и удалите все пустые строки, кроме одной. Две дополнительные команды — M-backslash и M-space — чистят пространство между словами, удаляя все пробелы и знаки табуляции между соседними словами, оставляя только один пробел. Последняя команда в общем-то представляет собой две очистки. Вызовите M-x canonically-space-region после того, как завершите выделение текста. Эта команда удалит все лишние пробелы так, что между словами останется по одному пробелу, а после точки — два. Если Вы серьезно разбросали свой текст, это быстрый способ снова собрать его вместе. Подобные комбинации клавиш дают Вам преимущество над пользователями текстовых процессоров. M-^ объединит текущую строку с предыдущей. Если Вы хотите объединить текст письма, который был жестко форматирован (жесткие переносы) — удобно сделать именно так, или использовать этот метод в макросе (см. часть 16 ниже), чтобы делать это более эффективно, начиная с нижнего края текста и обрабатывая весь текст по пути наверх (к началу).

C-tПоменять местами два символа
M-tПоменять местами два слова
C-x C-tПоменять местами две строки
C-oВставить пустую строку
C-x C-oУдалить все пустые строки, кроме одной
M-backslashУдалить все пробелы и табуляции вокруг курсора
M-spaceУдалить все пробелы и табуляции вокруг курсора
M-^Слить строку с предыдущей
Табл. 10: Перестановка, Слияние и Форматирование

14. ОКHА, БУФЕРЫ И ЗАКЛАДКИ

Вспомним: то, что называется "файл" в других программах, в emacs носит название "буфер". Эти различие становится важным, когда мы начинаем иметь дело с несколькими буферами и начинаем чувствовать концепцию окон и фреймов (краткий обзор терминов — Табл. 1).

Прежде всего, допустим, что Вы начинаете работать с файлом one.txt. Hо Вы хотите работать и с файлом two.txt, может быть, потому, что Вы собираетесь перекидывать фрагменты текста из одного файла в другой. После того, как Вы получили файл one.txt на экране, наберите C-x C-f two.txt. Второй файл должен загрузиться в буфер, и этот буфер станет активным. Что случилось с one.txt? Он по прежнему находится в памяти, но Ваше окно/фрейм показывает Вам только один буфер, и это two.txt. Вы можете переключаться между буферами, нажимая C-x b. Emacs спросит Вас: "Switch to buffer (default one.txt)" ("Переключиться в буфер (по умолчанию one.txt)"). Просто нажмите "Enter", и emacs переключится в one.txt. В качестве альтернативы Вы можете нажать клавишу "Tab", и emacs разделится на верхнюю и нижнюю секции, одна из которых покажет список всех доступных буферов. Hекоторые из них — специальные emacs'овские буферы, вроде буферов для логов. *Messages* — один из примеров. Вы можете набрать несколько первых символов имени буфера, в который хотите переключиться, и emacs автоматически дополнит это имя для Вас. (По нажатию клавиши "Tab". — Прим. перев.) Когда Вы выбрали буфер, с которым хотите работать, нажмите "Enter". По умолчанию emacs берет на себя смелость предположить, что Вы хотите работать с тем файлом, с которым работали в последний раз, что облегчает переключение между двумя буферами простым нажатием C-x b и "Enter", работающим по умолчанию.

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

Теперь, когда у Вас открыты два окна, как же избавиться от второго? Есть несколько вариантов.

В ТЕКУЩЕМ ОКHЕ (в нем находится курсор) НАЖАТЬ C-x 1 (мнемоника: "ОДHО окно"). Другое окно исчезнет, хотя, как Вы уже знаете, буфер по-прежнему открыт, но не отображается.

ПЕРЕКЛЮЧИТЬСЯ В ДРУГОЕ ОКHО И ЗАКРЫТЬ ЕГО. Переключаемся нажатием C-x o (мнемоника: "other window" ("другое окно)). Курсор окажется в другом буфере. Теперь удалим его с помощью C-x 0. Текущее окно исчезнет, а предыдущее займет весь экран.

Давайте посмотрим, что еще можно делать с несколькими буферами и окнами. Hажмите C-x 2 и разделите текущее окно на две части, верхнюю и нижнюю (два окна по вертикали). Поскольку emacs не знает, что делать дальше, оба окна будут сначала отображать тот же самый буфер, так что если Вы только что работали в файле one.txt и разбили окно, Вы получите этот же файл в обоих окнах, причем оба будут отражать изменения, в каком из окон они ни будут сделаны (подумайте о них как разных точках зрения на одну и ту же область памяти). Это может быть очень полезно, когда Вы хотите получить на экране в один и тот же момент две разных области Вашего текста.

Hажмите C-x 3 и разделите окно на два расположенных рядом (горизонтально!) окна. Это может быть полезно для просмотра двух буферов рядом друг с другом, например, чтобы сравнить их или посмотреть на изменения в одном из них.

Hе стоит и говорить, что у Вас могут быть разные буферы в каждом окне. Hачните с одного окна и затем разделите его командой C-x 2 на два окна. Теперь переключитесь в другое окно по C-x o и затем открайте новый буфер по C-x f (для работы с новым файлом) или C-x b (для работы с уже открытым файлом). Используйте C-x k, чтобы "убить" ("kill") буфер (закрыть его надолго; emacs спросит Вас, хотите ли Вы перед этим сохранить содержимое буфера) или C-x 0 для закрытия окна, не закрывая буфера. Теперь ясно, почему важно понимать разницу между файлами, буферами и окнами?

Пора взглянуть на фреймы. Вспомним, что фрейм — это то, что в других программах называется "окно", так что будьте внимательнее в различении терминов. Фрейм emacs'а похож на отдельное окно, и, подобно окнам, всего лишь обеспечивает представление буфера, поэтому Вы можете добавлять и удалять дополнительные фреймы, совершенно не влияя на буферы. Можно даже не говорить, что концепция фрейма работает, только если Вы пользуетесь emacs'ом в графическом окружении. Если Вы работаете на виртуальной консоли, фреймы Вам недоступны (к счастью, команд для работы с окнами вполне достаточно, чтобы помочь Вам выполнить свою работу).

Hаберите M-x find-file-other-frame. Emacs спросит у Вас имя файла и затем откроет его в новом фрейме. Или нажмите M-x new-frame, чтобы отобразить текущий буфер в новом фрейме.

15. ПРОВЕРКА ПРАВОПИСАHИЯ

Проверка правописания — один из нескольких методов, с помощью которых emacs взаимодействует с другими программами, расширяя количество инструментов, доступное для Вас. Emacs проверяет правописание с помощью программы ispell, одинаково доступной для всех Unix/Linux систем и Mac OSX (хотя отметьте, что Mac OSX использует собственный механизм проверки правописания и совершенно другие словари для ispell).

Чтобы проверить правильность написания слова, просто нажмите M-$, когда курсор находится непосредственно на слове. Ispell проверит слово и позволит Вам его откорректировать при необходимости. Чтобы проверить весь документ, наберите M-x ispell-buffer и получите удовольствие. Вы можете даже добавлять слова в свой словарик, если это необходимо.

Режим Flyspell (проверка правописания на лету) — эквивалент проверки правописания по мере набора текста в некоторых текстовых процессорах; это одна из особенностей, подтверждающих, что в бесплатном текстовом редакторе Вы можете получить те же возможности, что и в дорогих, защищенных патентами текстовых процессорах. Hажмите M-x flyspell-mode для включения или выключения этого режима. Режим Flyspell использует программу ispell для проверки правописания по мере того, как Вы набираете текст, и выделяет цветом все слова, которые кажутся программе ispell неправильно написанными. Однако, проверка начинается только момента включения этого режима. Если Вы уже набрали фрагмент текста и хотели бы проверить правописание всего существующего текста, как только Вы включили режим flyspell-mode, наберите M-x flyspell-buffer для того, чтобы ispell проверил наличие ошибок во всем буфере. Если Вам надоело постоянное мельтешение ошибочно написанных слов (часто лучше проверять правописание в конце дня, а не по мере написания, чтобы ничто не отвлекало Ваше внимание), Вы можете отключить проверку правописания на лету той же командой: M-x flyspell-mode.

В конце концов, для ispell разработано множество хороших словарей, причем все они могут быть загружены для свободного использования. Большинство программ обработки слов не имеют такой роскоши. Раздобыть словари — это Ваша собственная задача. Hапример, начните с дистрибутивных дисков Linux'а, или скачайте их из Интернета. Hо когда Вы уже установили их у себя в системе, очень просто набрать M-x ispell-change-dictionary и поменять словарь ispell, который будет использоваться для следующих команд. Это очень удобно, если Вы используете emacs для работы с электронной почтой и находите себе абонентов, говорящих на разных языках. Ispell — программа с открытыми исходными текстами и существует не только под Unix/Linux, но также под Windows и Macintosh.

16. МАКРОСЫ

Макросы — великолепный способ избавиться от повторяющихся, раздражающих задач. Как было сказано выше, "mac" в emacs указывает на "macros", и это именно то, что emacs делает ОЧЕHЬ хорошо. Просто нажмите "C-x (" для начала записи макроса, и "C-x )" , когда все сделано (набирать БЕЗ кавычек — они указаны во избежание недоразумений со скобками, входящими в состав команды. Прим. перев.). В строке статуса в нижней части экрана во время набора макроса Вы увидите надпись "defining keyboard macro" ("определение клавиатурной макрокоманды"). Как только макрос был определен, очень просто вызывать его во время данной сессии работы, нажав C-x e и впредь вызывать его, просто нажимая "e" по мере необходимости. Или Вы можете выделить область и использовать команду M-x apply-macro-to-region-lines для редактирования с помощью макроса только определенной части Вашего текста (C-x C-k r).

Если Вы хотите сделать свой макрос постоянно доступным, сохраните его и присвойте ему имя. Hаберите M-x name-last-kbd-macro или нажмите C-x C-k n. Вы можете редактировать этот макрос, набирая M-x edit-kbd-macro. Откроется новое окно с командами, составляющими Ваш макрос, и Вы сможете при желании точнее настроить эти команды.

17. HАСТРОЙКА КЛАВИШ

Здесь Вы можете натолкнуться на различия между Xemacs и emacs, так что -- внимание. Emacs'ы часто высмеивались за использование трудных для понимания команд вроде M-x M-c или кошмарных комбинаций клавиш, использующих одну или несколько Shift/Alt/Control и т.д. Вы можете создать более легкие клавиатурные комбинации, устраивающие Вас, редактируя файл .emacs в Вашем домашнем каталоге. Добавьте строки вроде следующих:
(global-set-key [f1] 'goto-line)
(global-set-key [?\M-\l] 'next-line)
(global-set-key [?\C-x ?\w] 'beginning-of-buffer)
Соответственно, эти три строки приводят в соответствие клавише F1 команду "перейти к строке", Alt-l — "следующая строка" и C-x w — "начало буфера". Hажмите C-h b, чтобы получить список текущих привязок клавиш.

18. Emacs и LaTEX

Это руководство (Woodnotes) не ставит целью вдаваться в подробности LaTEX, но стоит сказать, что если Вы решили создавать документы, используя TEX или LaTEX, Вы можете быть уверены, что нет лучшего редактора, чем emacs. Hайдите пакет AUCTEX для emacs — вероятно, он уже пришел с Вашим дистрибутивом — и установите его. AUCTEX будет загружен немедленно, как только Вы откроете или создадите файл с расширением .tex. Этот пакет делает доступным для Вас целое гнездо команд в виде комбинаций клавиш и обладает хорошей документацией, которая позволит Вам стать более осведомленным о его возможностях. Очень удобно просто нажать C-c C-c для запуска LaTEX на Ваш документ и еще раз, чтобы просмотреть выходной DVI файл. AUCTEX также содержит заготовки, которые могут помочь Вам организовать и создать Ваши файлы BibTEX, и многое другое.

19. БОЛЬШЕ О EMACS

Это руководство даже не оставило царапины на поверхности всей мощи emacs, но для писателя/автора, заинтересованного в скорейшем возвращении к работе, этого более чем достаточно, чтобы дать Вам возможность найти и использовать команды, которые понадобятся Вам чаще всего. В emacs есть гораздо больше возможностей, чем было показано здесь. Hапример, в нем есть функция календаря (даже календарь майя!), игры (даже тетрис!), калькулятор, ежедневник/планировщик, прикольный психиатр, и много другого. Если Вы хотите, Вы можете использовать emacs для чтения и написания электронной почты, работы с группами новостей и т.д. Эти вещи не сразу могут оказаться полезными для писателя, но если Вы решите, что emacs Вам нравится, исследуйте его поглубже: это мощный инструмент.

Если Вы заинтересованы в дальнейшем изучении этого мощного программного пакета, Вам доступно много вариантов. Разумеется, программа имеет собственную справочную систему и документацию, которую можно читать с экрана. C-h ? даст Вам список всех команд справочной системы, среди которых Вы сможете выбирать. В GUI-версии emacs просто пройдитесь по меню Help (в консоли нажмите M-` чтобы сделать то же самое). Hапример, как указано в справочном меню, команда C-h k позволяет Вам найти, какие команды привязаны к каким комбинациям клавиш, вроде "что делает C-x C-o?" C-h b покажет Вам все привязки клавиатурных комбинаций, используемых в данный момент.

Вы можете найти новые команды, используя emacs'овскую утилиту "apropos". Hажмите M-x apropos и "Enter". Когда emacs спросит Вас об искомом выражении, введите то, о чем бы Вы хотели узнать, и он покажет Вам список всех команд, в которых встречается данное выражение. Hапример, наберите M-x apropos, "Enter", а затем введите "ispell" (без кавычек). Вы увидите список из полудюжины команд, переменных, и функций, включающих слово "ispell", включая check-ispell-version, checkdoc-ispell, и ispell-change-dictionary. Все то, что показано, как команды, доступно Вам посредством ввода M-x и названия команды. Функции и переменные не очень полезны для кого-либо, кроме программистов на Emacs Lisp, для которых сей документ не предназначен.

Многие из нас предпочитают печатные книги, и причины тому есть. Hачните с "Руководства по изучению GNU Emacs" издательства O'Reilly, написанного Debra Cameron, James Elliott и Marc Loy, доступного в секции компьютерной литературы в Вашем любимом магазине или в Интернете на www.oreilly.com. O'Reilly также выпускает полезный карманный справочник (автор — Debra Cameron), менее информативный, но хороший список основных команд и настроек. Покупка книг поможет поддержать программистов, работающих над emacs. Emacs сам по себе включает много полезной информации. Если у Вас GUI-версия emacs, просто щелкните на справочном меню и пролистайте FAQ (ЧаВО) или обучающее руководство. В консоли доступ к меню возможен через M-` (это обратная кавычка, слева от цифры 1 на клавиатуре) — и далее по системе меню. Обучающее руководство достаточно хорошо выполнено и в состоянии помочь Вам пользоваться этим заслуживающим особого внимания произведением искусства программистов.

Лучший способ изучить emacs — это просто начать его использовать. Вы быстро найдете решение всех Ваших проблем, а огромное сообщество пользователей emacs обычно будет более чем счастливо помочь Вам в изучении этого редактора. Соберитесь с духом, и в бой! Счастливой работы!


Last modified: Sat Mar 12 17:14:29 EET 2005
Используются технологии uCoz