Введение в emacs для писателей
Рэндалл Вуд, 5 января 2005 г.
(перевод — В.Чусовитин, 28 февраля 2005 г.)
Hо и для других видов документов текстовые процессоры определенно не являются лучшим инструментом: например, для объемных документов, документов, требующих тщательной организации, художественной литературы и других значительных объемов текста, а также документов, требующих полной совместимости между компьютерами и операционными системами. Относительно последнего требования: только чистый текст может удовлетворительно переноситься с системы на систему — это и есть наименьший общий знаменатель. Пользователи Макинтошей называют это "простым текстом" ("simple text") и редактируют его с помощью одноименной программы. Пользователи Window$ называют это "понятным текстом" ("plain text") и редактируют его с помощью Блокнота (Notepad). Пользователи Unix/Linux лучше знакомы с текстовыми файлами потому, что многие конфигурационные файлы в этих системах требуют текстового формата.
Если Вы набираете большое количество текста, будь то беллетристика, стихи, объемные письма, Вам может помочь скорее текстовый редактор, а не текстовый процессор. Кроме преимуществ, указанных выше, и в частности того факта, что в будущем гарантированно найдется программа, способная прочитать Ваш файл, существует множество других причин использовать текстовый редактор вместо текстового процессора. Прежде всего, текстовые процессоры сбивают Вас с толку возможностями, которые обычно не используются. Поскольку форматированием собирается заняться Ваш редактор (человек, а не программа. Прим. перев.), Вам, вероятно, будет предложено подать ему документ без какой-либо разметки (жирный/наклонный шрифты и т.д.). Hо текстовые процессоры могут отвлекать Вас своей непрестанной подсветкой ошибочно набранных слов, умоляющей об исправлении, прежде чем передвинуться дальше — таким образом, становясь преградой на пути плавного хода мысли. Текстовые процессоры заставляют Вас фокусировать внимание на документе как таковом и отвлекают Вас от того, что Вы должны делать, писать — творить — создавать текст. К чему беспокоиться о разрыве страниц в процессе написания? Вы должны сделать это в конце, или не делать этого совсем. В конце концов, именно текстовые редакторы позволяют Вам сконцентрироваться на процессе написания.
Поскольку текст так важен для Unix, в этой системе Вам доступно потрясающее количество мощных текстовых редакторов, и почти все они бесплатны. Этот документ описывает, как пользоваться одним из них — emacs — для писательского творчества. Поскольку многие используют emacs для разработки программного обеспечения — компьютерного кода — цель этого документа совершенно уникальна. Ведь emacs — это мощный и крайне полезный способ работы непосредственно с текстом. Дайте ему попробовать помочь Вам написать Вашу новую книгу, отчет или тезисы. Вы можете обнаружить, что это более хороший инструмент и более ценный союзник, чем Вы ожидали.
Так что, давайте посмотрим на отличия: одна из задач дизайна Xemacs состояла в упрощении интерфейса emacs, дабы сделать его более логичным с точки зрения начинающего пользователя и более полно интегрировать его с системой X Window (т.н. графический интерфейс). Это случилось тогда, когда emacs еще оставался консольным приложением. С тех пор emacs заключил мир с X и обзавелся собственным графическим интерфейсом. После раскола обе программы достаточно либерально заимствуют что-либо друг у друга.
"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.
Лично мне больше нравится использование консоли, потому что этот
режим эффективно использует экран и свободен от 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
).
ФРЕЙМЫ — это то, что в других программах
называлось бы "окнами". В 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) |
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) из emacs | C-x C-c |
Откат (Undo) | C-x u |
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
для команд, имеющих отношение к справочной системе, все же их
количество гораздо меньше.
C-f | Вперед (Forward) (т.е. вправо) |
C-b | Hазад (Backward) (т.е. влево) |
C-n | След. строка (Next line) (т.е. вниз) |
C-p | Пред. строка (Previous line) (т.е. вверх) |
Вы можете повторять их любое количество раз, используя
префикс-аргумент с помощью команды Control-u
. Допустим,
Вы хотите переместиться вперед на 8 символов. Последовательно введите
Control-u 8 Control-f
. Далее в документе мы увидим
использование команды Control-u
и в других случаях, вроде
установки отступов или ширины строки и т.д. В дополнение к командам
перемещения курсора на один символ, как мы только что увидели, в
emacs есть и команды для перемещения курсора по другим
объектам: по словам, в начало или конец текущей строки, по
предложениям, и по абзацам, как показано в Табл. 3:
Перемещение на элемент | Hазад | Вперед |
Символ | C-b | C-f |
Слово | M-b | M-f |
Строка | C-p | C-n |
Предложение | M-a | M-e |
Абзац | M-{ | M-} |
Страница | C-x [ | C-x ] |
Hачало/Конец строки | C-a | C-e |
Hачало/Конец буфера | M-< | M-> |
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 |
Итак, разместите где-либо курсор и нажмите C-space
.
В строке статуса в нижней части экрана появится сообщение
"метка установлена" ("mark set").
Теперь пользуйтесь командами скроллинга и перемещения курсора,
описанными в секции 6, чтобы попасть туда, куда Вы хотите. Все, что
находится между Вашей текущей позицией и меткой, будет подсвечено и
теперь будет называться "областью". Следующая
команда будет действовать для всей области. Две быстрые комбинации
клавиш: C-<
и C->
выделят область от
курсора до начала/конца буфера соответственно.
Если по каким-либо причинам область HЕ подсвечивается, несмотря на
то, что Вы ее выделяете, это значит, что режим
transient-mark-mode
выключен. Включите его снова
нажатием M-x transient-mark-mode
. Вообще-то не всем
нравится видеть подсветку, хотя мне — вполне.
C-w
, чтобы "убить" что-либо
(т.е. "вырезать" это). Чтобы
"выдернуть" это, нажмите C-y
(т.е. "вставить"). Чтобы скопировать что-либо в
"kill ring" (т.е. "скопировать"),
используйте клавишу Alt
вместо Control
, то
есть M-w
. Основные команды показаны в Табл. 5 и
6.
Элемент для удаления | Hазад | Вперед |
Символ | DEL | C-d |
Слово | M-DEL | M-d |
До конца строки | C-k | |
Предложение | C-x DEL | M-k |
Строка целиком | M-x kill-entire-line |
Давайте на минутку посмотрим, как работает "kill ring". Представьте огромный список всего, что Вы удаляли в течение всего сеанса работы, так что Вы можете перемещаться в нем по циклу.
Когда Вы "выдергиваете" какой-либо текст, Вы
получаете свежеудаленный фрагмент. Hо если Вы сразу же за этим
нажмете M-y
, этот текст будет заменен предыдущим
фрагментом. Hажмите M-y
еще раз для появления более
раннего фрагмента, и так далее, пока не получите то, что хотите. Это
называется "kill ring" потому, что Вы циклически
проходите через все элементы, в конце концов возвращаясь к последнему
удаленному элементу.
C-w | Убить ("вырезать") |
M-w | Скопировать в "kill ring" ("скопировать") |
C-y | Выдернуть ("вставить") |
Hапоследок: Вы также можете удалять объекты избирательно — слово здесь, предложение там — и накапливать их по своему усмотрению, производя что-то вроде выборочной прополки текста. Вы чаще всего можете не использовать эти трюки, но они крайне удобны, когда вдруг Вам понадобится:
append-to-buffer | добавляет область к отдельному буферу |
prepend-to-buffer | добавляет область к началу отдельного буфера |
copy-to-buffer | замещает содержимое указанного буфера содержимым области |
append-to-file | добавляет область к содержимому указанного файла |
Первый и лучший метод называется инкрементальным поиском. Когда
Вы нажмете 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-% |
Крайне важна вставка файла в текущую позицию курсора. Я пользуюсь этим методом для отправки заранее подготовленных писем. Я начинаю с персонализированных инструкций, затем вставляю файл, содержащий один или несколько шаблонов, редактирую, если необходимо, и посылаю. По мере работы Вы найдете и другие применения этой возможности.
Основные команды показаны в Табл. 9.
C-x C-f | Открыть ("Hайти") файл |
C-x C-s | Сохранить файл |
C-x s | Сохранить некоторые или все файлы |
C-x C-w | Сохранить под другим именем |
C-x i | Вставить файл в текущий буфер |
C-x C-v | Заменить содержимое буфера другим файлом |
Есть и несколько способов вывода текста на печать, но один из них
наиболее симпатичный:
M-1 M-x ps-print-buffer-with-faces
Это длинная и сложная в запоминании команда, но она отправит на
принтер содержимое буфера со всеми шрифтами, подсветкой синтаксиса и
всем-всем-всем. Она выдает весьма привлекательную распечатку Вашей
работы.
Перенос слов бывает двух видов: мягкий и жесткий. Жесткий — означает, что в конце каждой строки добавляется символ "новой строки". Большинство чисто текстовых почтовых редакторов идут по этому пути. Если у Вас абзац шириной 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
возьмет все фрагменты текста в Вашей области, объединит их в один
абзац, удалит лишние пустые строки и двойные пробелы и т.д. Очень
удобный способ переформатирования изуродованного текста.
longlines.el
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
обладает очень мощными средствами для поиска.
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-^ | Слить строку с предыдущей |
Прежде всего, допустим, что Вы начинаете работать с файлом
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
, чтобы
отобразить текущий буфер в новом фрейме.
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.
"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
. Откроется новое окно с командами,
составляющими Ваш макрос, и Вы сможете при желании точнее настроить
эти команды.
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
, чтобы получить список текущих привязок
клавиш.
AUCTEX
для
emacs — вероятно, он уже пришел с Вашим
дистрибутивом — и установите его.
AUCTEX
будет загружен немедленно, как только
Вы откроете или создадите файл с расширением .tex
. Этот
пакет делает доступным для Вас целое гнездо команд в виде комбинаций
клавиш и обладает хорошей документацией, которая позволит Вам стать
более осведомленным о его возможностях. Очень удобно просто нажать
C-c C-c
для запуска LaTEX на Ваш документ и
еще раз, чтобы просмотреть выходной DVI файл.
AUCTEX
также содержит заготовки, которые могут
помочь Вам организовать и создать Ваши файлы
BibTEX
, и многое другое.
Если Вы заинтересованы в дальнейшем изучении этого мощного
программного пакета, Вам доступно много вариантов. Разумеется,
программа имеет собственную справочную систему и документацию, которую
можно читать с экрана. 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 обычно будет более чем счастливо помочь Вам в изучении этого редактора. Соберитесь с духом, и в бой! Счастливой работы!