1. Emacs

Emacs - это, вероятно, самый мощный текстовый редактор из всех существующих. Он может делать абсолютно все, и неограниченно расширяется, благодаря своему встроенному языку программирования на базе lisp. С помощью Emacs вы можете бродить по вебу, читать почту, принимать участие в группах новостей Usenet, готовить кофе и т.п. Это не значит, что из этой главы вы узнаете, как все это делается, однако вы получите хорошие начальные знания о том, как запустить Emacs, отредактировать один или несколько файлов, сохранить их и выйти из Emacs.

Если после прочтения этого, вы захотите более подробно изучить Emacs, вы можете заглянуть сюда: Tutorial Introduction to GNU Emacs.

1.1. Краткое представление

Запускается Emacs из командной строки следующим образом:

emacs [файл1] [файл2...]

Emacs откроет каждый файл, указанный в качестве аргумента, в отдельном буфере. Если в командной строке были указаны два файла, окно будет автоматически разделено на два, в первом из которых будет показан последний указанный файл, а во втором - список доступных буферов. Если вы запустите Emacs без указания каких-либо файлов в командной строке, вы окажетесь в буфере под названием *scratch*. Если вы работаете в X, будут доступны меню при помощи мыши, а если вы в текстовом режиме, вы также можете получить доступ к меню посредством клавиши F10, но в этой главе мы сконцентрируемся на работе с клавиатурой без всяких меню.

1.2. Начало работы

А теперь пора заняться практикой. Например, давайте начнем с открытия двух файлов: file1 и file2. Если эти файлы не существуют, они будут созданы после того, как вы что-нибудь запишите в них:

$ emacs file1 file2

После выполнения этой команды, будет показано следующее окно:

Рисунок 31.1. Редактирование двух файлов одновременно

Редактирование двух файлов одновременно

Как вы можете видеть, были созданы два буфера. Также в нижней части экрана (где вы видите (New file)) находится третий буфер. Это мини-буфер. Вы не можете получить к этому буферу непосредственный доступ. Вы должны быть приглашены Emacs'ом во время интерактивных операций. Для смены текущего буфера, введите Ctrl-X-O. Вы можете набирать текст как в «обычном»редакторе, удаляя символы при помощи клавиш Del или Backspace.

Для перемещения курсора вы можете использовать клавиши со стрелками следующие комбинации клавиш: Ctrl-A для перехода в начало строки, Ctrl-E для перехода в конец строки, Alt-< или Ctrl-Home для перехода в начало буфера и Alt-> или Ctrl-End для перехода в конец буфера. Существует много других комбинаций, даже комбинации для клавиш со стрелками [43].

Как только вы готовы сохранить свои изменения на диск, наберите Ctrl-X Ctrl-S, или, если вам нужно сохранить содержимое буфера в другой файл, наберите Ctrl-X Ctrl-W. Emacs спросит у вас имя файла, в который должно быть записано содержимое буфера. При этом вы можете воспользоваться завершением, воспользовавшись для этого клавишей Tab как в bash.

1.3. Обработка буферов

При необходимости вы можете оставить на экране только один буфер. Для этого есть два способа:

  • Если вы находитесь в буфере, который надо скрыть, наберите Ctrl-X 0.

  • Если вы находитесь в буфере, который надо оставить на экране, наберите Ctrl-X 1.

Для восстановления буфера обратно на экран имеется два способа:

  • наберите Ctrl-X B и введите имя нужного вам буфера, или

  • наберите 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 спросит у вас имя файла, и вы вновь можете воспользоваться автозавершением, если найдете это более удобным.

1.4. Копирование, вырезание, вставка, поиск

Допустим, что вы находитесь в следующей ситуации Рисунок 31.2, «Emacs, перед копированием текстового блока».

Рисунок 31.2. Emacs, перед копированием текстового блока

Emacs, перед копированием текстового блока

Сначала вам нужно выделить блок, который вы хотите скопировать. В этом примере мы хотим скопировать целое предложение. Первым шагом будет установка курсора в начало копируемой области. При условии, что курсор находится в той же позиции, что и на Рисунок 31.2, «Emacs, перед копированием текстового блока», последовательность команд будет следующей: Ctrl-Space (Control + клавиша пробел). Emacs выведет в мини-буфере сообщение Mark set (Метка установлена). Затем перейдите в начало строки, нажав Ctrl-A. Область, выделенная для копирования или вырезания - это вся область между отметкой и текущим положением курсора, следовательно, данном случае это будет целая строка текста. Доступны две последовательности команд: Alt-W (для копирования) или Ctrl-W (для вырезания). Если вы выполняете копирование, Emacs сразу вернет курсор на позицию отметки, чтобы вы могли видеть выделенную область.

И в завершение, перейдите в буфер, в который вы хотите скопировать текст, и нажмите Ctrl-Y. При этом вы получите следующий результат:

Рисунок 31.3. Копирование текста в emacs

Копирование текста в emacs

В действительности то, что вы сейчас сделали, называется копированием текста в kill ring. Этот 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-Shift--, что выполнит откат назад на предыдущую операцию. Вы можете отменить столько операций, сколько вам нужно.

1.5. Выход из emacs

Комбинация клавиш для этого - Ctrl-X Ctrl-C. Если вы не сохранили сделанные изменения, Emacs спросит у вас, хотите ли вы сохранить буферы или нет.



[43] Emacs был разработан для работы на самых разнообразных машинах, некоторые из которых оснащены клавиатурами без клавиш со стрелками. Это еще более справедливо для Vi.