Emacs возможно является наиболее мощным редактором из существующих. Он может делать абсолютно все, и его возможности могут расти бесконечно благодаря встроенному языку программирования на основе lisp. С помощью Emacs вы можете бродить по сети интернет, читать почту, принимать участие в группах новостей usenet, варить кофе и так далее. Однако то, что вы сможете делать в нем к концу прочтения этого раздела, будет ограничено открытием Emacs, редактированием одного или нескольких файлов, сохранением их и выходом из Emacs. Что ж, неплохо для старта.
Вызов Emacs относительно прост:
emacs [file] [file...] |
Emacs откроет каждый файл, введенный как аргумент в буфер, (максимум до двух видимых буферов в одно и тоже время), или создаст буфер с именем *scratch*, если вы не указали файла. Если вы находитесь в X, то вам также будет доступно меню, но в этом разделе мы будем работать только с клавиатурой.
Пришло время заняться практикой. Как показано в примере, давайте откроем два файла file1 и file2. Если эти файлы не существуют, они будут созданы сразу, как только вы что-нибудь напишите в них:
$ emacs file1 file2 |
Вы увидите окно, показанное здесь Рисунок 4.1. Emacs, редактирование двух файлов одновременно.
Как вы видите, были созданы два буфера: по одному на каждый файл. Внизу экрана (где вы видите (New file)), у вас находится третий буфер, который называется мини-буфер. Самостоятельно в него зайти нельзя, только если вы будете приглашены программой Emacs во время интерактивных операций. Чтобы изменить текущий буфер, наберите Ctrl+x o. Вы можете печатать текст как в “нормальном”редакторе, удаляя символы по клавишам DEL или Backspace.
Для перемещения курсора вы можете использовать клавиши со стрелками, а также такие комбинации клавиш: Ctrl+a перейти в начало строки, Ctrl+e перейти в конец строки, Alt+< перейти к началу буфера и Alt+> перейти в конец буфера. Есть много других комбинаций, даже для каждой клавиши со стрелкой [10].
Как только вам понадобится сохранить изменения, сделанные в файле, наберите Ctrl+x Ctrl+s, или, если вам нужно сохранить содержимое буфера в другой файл, наберите Ctrl+x Ctrl+w и Emacs спросит у вас имя файла куда записать содержимое буфера. Вы можете использовать заполнение чтобы сделать это.
При необходимости вы можете отобразить только один буфер на экране. Вот два способа как это сделать:
Теперь два способа как восстановить буфер на экране:
наберите Ctrl+x Ctrl+b, тогда будет открыт новый буфер, называемый *Buffer List*; вы можете передвигаться по этому буферу используя последовательность Ctrl+x o, затем выберите необходимый буфер и нажмите клавишу Enter, или можно по-другому: просто наберите имя буфера в мини-буфере. Буфер *Buffer List* уберется в фон как только вы сделаете выбор.
Если вы уже закончили работу с файлом и хотите избавиться от связанного буфера, наберите Ctrl+x k. Emacs здесь спросит вас какой буфер следует закрыть. По умолчанию это имя того буфера, в котором вы находитесь. Если вы хотите закрыть другой буфер, введите его имя непосредственно или нажмите TAB: Emacs в этом случае откроет еще один буфер с именем *Completions* (заполнение), где будет выведен список возможных вариантов. Подтвердите выбор клавишей Enter.
Также вы можете восстановить два видимых буфера на экране в любое время. Для этого наберите Ctrl+x 2. По умолчанию, вновь созданный буфер будет копией текущего буфера (в котором вы, например, сможете редактировать большой файл в разных местах “одновременно”), и вы можете перемещаться между буферами как было описано выше.
Вы можете открывать новые файлы в любое время используя Ctrl+x Ctrl+f. В этом случае Emacs спросит у вас имя файла, и здесь опять же возможно заполнение.
Представьте, что мы находимся в такой ситуации Рисунок 4.2. Emacs, перед тем как копировать текстовый блок.
Сначала нужно выделить блок, который вы хотите скопировать. В X это можно сделать мышью и выбранная область будет подсвечена. Но мы по-прежнему находимся в текстовом режиме :-). В данном случае мы хотим скопировать целое предложение. Во-первых, нужно сделать отметку в начале области. Предполагая, что курсор находится на позиции как показано на картинке выше, сначала нажмите Ctrl+SPACE (Control + пробел); после этого Emacs сгенерирует сообщение Mark set в мини-буфере. Затем переместитесь в начало строки, нажав Ctrl+a. Область, выделенная для копирования или вырезания, является всей областью между отметкой и текущей позицией курсора, в нашем случае - целая строка. Затем наберите Alt+w (для копирования) или Ctrl+w (для вырезания). Если вы копируете, Emacs сразу вернет курсор на позицию отметки так, что вы сможете увидеть выделенную область.
Теперь перейдите в буфер, в который вы хотите скопировать текст и наберите Ctrl+y чтобы получить то, что отображено на Рисунок 4.3. Emacs, после того, как блок скопирован.
Фактически все, что вы только что сделали, это скопировали текст в “kill ring” программы Emacs; этот kill ring содержит все скопированные или вырезанные области с момента запуска Emacs. Любые свежескопированные или свежевырезанные области находятся вверху kill ring. Последовательность Ctrl+y только “вставляет” область в начало . Если вы хотите получить доступ к другим областям, жмите Ctrl+y, затем Alt+y пока не получите желаемый текст.
Для поиска текста зайдите в необходимый буфер и наберите Ctrl+s. В результате Emacs спросит что нужно искать. Для начала поиска подобной строки останьтесь в текущем буфере и наберите Ctrl+s снова. Когда Emacs достигнет конца буфера и больше не найдет совпадений, вы можете набрать Ctrl+s снова и перезапустить поиск с начала буфера. Нажатие Enter останавливает поиск.
Для поиска и замены наберите Alt+%. Emacs спросит какую строку искать, на что заменять и будет спрашивать подтверждение для каждого найденного совпадения.
Заключительная и очень полезная вещь: Ctrl+x u возвращает предыдущую операцию. Вы можете вернуться назад на любое количество операций.
Горячее сочетание клавиш для этого: Ctrl+x Ctrl+c. Если у вас есть несохраненные данные в буферах, Emacs спросит хотите ли вы сохранить изменения, произведенные в буферах.
[10] Emacs была разработана для работы на великом множестве машин, некоторые из которых даже не имеют клавиш со стрелками. Это также справедливо и для Vi.