Учебник по Emacs
Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions.
Это учебник по Emacs'у.
Команды Emacs'а обычно содержат клавишу CONTROL (иногда обозначается как CTRL или CTL) или клавишу META. На некоторых клавиатурах клавиша META обозначается ALT или EDIT или еще как-нибудь (например, на Windows-клавиатурах это может быть клавиша Start). Если у вас нет клавиши META, вы можете использовать вместо нее ESC. Вместо того, чтобы писать META или CONTROL каждый раз, когда мы хотим обозначить команду, содержащую эти клавиши, мы будем использовать аббревиатуры:
C- означает: удерживая CONTROL, нажать . Таким образом,
C-f означает: удерживая CONTROL, нажмите клавишу f.
M- означает: удерживая META, нажать . Если клавиша META
отсутствует, сначала нажмите , отпустите, потом нажмите
клавишу .
Чтобы закончить работу с Emacs'ом, наберите C-x C-c (два символа). Символы ">>" в начале строки говорят о том, что вам предлагается попробовать команду. К примеру:
>>Сейчас наберите C-v (смотреть следующую страницу), чтобы перейти к следующей странице. (смелее, удерживая CTRL нажмите v). Впредь, делайте это каждый раз, когда вы дочитываете страницу.
Имейте ввиду, что при пролистывании две строчки предыдущей страницы
оказываются вверху экрана, чтобы вы могли какбы продолжить чтение.
Первая вещь, которой вам нужно научиться, это перемещение по тексту. Вы уже знаете, что продвинуться на страницу вперед можно с помощью команды C-v. Чтобы пролистать страницу назад, нажмите M-v (удерживая клавишу META, нажмите v, или введите v, если у вас нет клавиши META, EDIT или ALT).
>> Попробуйте несколько раз понажимать M-v и C-v.
КОНСПЕКТ
Следующие команды используются для перемещения по страницам:
C-v Перейти на одну страницу вперед
M-v Перейти на одну страницу назад
C-l Очистить страницу и заново перерисовать все ее
содержимое, причем строка, на которой находится курсор,
оказывается посередине экрана.
(Это control-L, а не control-1).
>> Найдите курсор и запомните текст рядом с ним. Потом нажмите C-l. Опять найдите курсор и обратите внимание на то, что он стоит на том же самом тексте.
ПРОСТЕЙШЕЕ УПРАВЛЕНИЕ КУРСОРОМ
Перелистывание страниц полезно, но как вам переместиться в конкретное место в тексте на экране?
Есть несколько способов добиться этого. Простейший путь - использовать команды C-p, C-b, C-f и C-n. Эти команды перемещают курсор на одну строчку или столбец в определенном направлении. Вот таблица, показывающая, каким направлениям соответствуют эти команды:
Предыдущая (previous) строка, C-p
:
:
Назад (backward), C-b . . . . . Курсор . . . . . Вперед (forward) C-f
:
:
Следующая (next) строка, C-n
>> Переместите курсор на строку в середине диаграммы используя C-n или C-p. Потом нажмите C-l, чтобы посмотреть на всю диаграмму в центре экрана.
Вам, вероятно, будет проще запомнить эти команды по первым буквам: P - previous, N - next, B - backward и F - forward (англ.: предыдущий, следующий, назад, вперед). Это простейшие команды перемещения курсора, вы будете использовать их постоянно, поэтому лучше выучить их сразу.
>> Нажмите C-n несколько раз, чтобы передвинуть курсор на эту строчку.
>> Переместите курсор вперед с помощью C-f а потом несколько раз нажмите С-p. Обратите внимание, как работает C-p, когда курсор находится в середине строки.
Каждая строка оканчивается символом "перенос" (newline), служащим для отделения ее от следующей строки. Последняя строка в файле по идее тоже должна оканчиваться переносом (но Emacs не требует, чтобы это обязательно было так).
>> Попробуйте нажать C-b в начале строки. Курсор переместится в конец предыдущей строки. Это происходит, потому что курсор перескакивает через перенос.
C-f перескакивает через перенос также, как C-b.
>> Нажмите C-b еще несколько раз, чтобы перевести курсор в середину строки. Потом нажмите несколько раз C-f, чтобы вернуть курсор в конец. И еще раз C-f, чтобы переместить курсор на следующую строку.
Когда вы перемещаете курсор за нижнюю или верхнюю границу экрана, текст, находящийся за границей, появляется на экране. Это называется прокрутка (scrolling). Прокрутка позволяет Emacs'у переместиться в любое место текста не выводя курсор за пределы экрана.
>> Попробуйте переместить курсор за нижнюю границу экрана с помощью C-n, и посмотрите, что получается.
Если перемещаться по буквам слишком медленно, вы можете двигаться по словам. M-f (META-f) сдвигает курсор на одно слово вперед, а M-b - на слово назад.
>> Попробуйте нажать несколько раз M-f и M-b.
Когда вы в середине слова, M-f перемещает курсор в конец слова. Если вы стоите на пробеле между словами, M-f перемещает курсор в конец следующего слова. M-b работает аналогично в противоположном направлении.
>> Понажимайте M-f и M-b, чередуя их с C-f и С-b, таким образом вы увидите, как работают M-f и M-b в разных местах внутри и между словами.
Обратите внимание на связь между C-f, C-b и M-f, M-b. Очень часто META-комбинации используются для операций, связанных со смысловыми единицами языка (словами, предложениями, параграфами), в то время как CONTROL-комбинации работают с простейшими единицами текста (символами, строкаси, и т. п. ), не зависящими от того, какого рода информацию вы редактируете.
Такая параллель прослеживается между перемещением по строкам и по параграфам: C-a и C-e перемещают курсор в начало и в конец строки, а M-a и M-e - в начало и в конец предложения.
>> Попробуйте несколько раз C-a и C-e.
>> Попробуйте несколько раз M-a и M-e.
Обратите внимание на то, что повторяющиеся C-a не дают никакого эффекта, в то время как повторяющиеся M-a перемещают курсор по предложениям. Хотя это и не является полной аналогией, однако такое поведение выглядит естественным.
По-английски положение курсора в тексте иногда называется "point". Другими словами, курсор на экране показывает, где находится point в тексте.
Вот список базовых команд перемещения курсора, включая команды перемещения по словам и по предложениям:
C-f Переместить курсор на символ вперед
C-b Переместить курсор на символ назад
M-f Переместить курсор на слово вперед
M-b Переместить курсор на слово вперед
C-n Переместить курсор на следующую строку
C-p Переместить курсор на предыдущую строку
C-a Переместить курсор в начало строки
C-e Переместить курсор в конец строки
M-a Переместить курсор в начало предложения
M-e Переместить курсор в конец предложения
>> Попробуйте все эти команды для тренировки: они используются в работе наиболее часто. Две другие важные команды перемещения курсора это M-< (META "меньше"), которая перемещает курсор в начало текста, и M-> (META "больше"), которая перемещает курсор в конец текста.
На большинстве терминалов символ " Попробуйте M-> Попробуйте M->, чтобы переместиться в начало учебника.Потом нажмите M-v несколько раз, чтобы вернуться обратно.
Если на вашем терминале есть клавиши перемещения курсора (стрелки), то вы также можете перемещать курсор с их помощью. Но мы рекомендуем выучить для этих целей C-b, C-f, C-n и C-p. Во-первых, они работают на любом терминале. Во-вторых, работая с Emacs'ом, вы обнаружите, что использовать эти CONTROL-комбинации быстрее, чем использовать стрелки (потому что вам не надо снимать руки с положения, используемого для печати десятипальцевым методом). В третьих, если вы привыкнете использовать эти комбинации, вы легко можете выучить другие специальные команды перемещения курсора.
Большинство команд Emacs'а могут иметь числовой аргумент, и для большинства команд он означает количество повторений. Задать этот аргумент можно нажав C-u и введя число перед тем, как набирать команду. Если у вам есть клавиша META (или EDIT, или ALT), то есть альтернативный путь задания числового аргумента: набрать число, удерживая клавишу META. Мы рекомендуем использовать C-u, ибо это работает на любом терминале.
К примеру, C-u 8 C-f перемещает курсор вперед на 8 букв.
>> Попробуйте использовать команду C-n или C-p с числовым аргументом, чтобы переместить курсор к этой строке с помощью одной команды.
Большинство команд используют числовой аргумент как количество повторений. Некоторые команды-исключения используют его по-другому. C-v и M-v относятся к таким исключениям. Если задан аргумент, они прокручивают экран вверх или вниз на заданное количество строк, а не пролистывают такое количество страниц. Например, C-u 4 С-v прокручивает экран на 4 строки.
>> Попробуйте набрать C-u 8 C-v.
Emacs должен прокрутить экран на 8 строк вверх. Если вы хотите вернуться обратно, вы можете задать аргумент для M-v.
Если вы используете X Window System, то, вероятно, у вас есть прямоугольная область, называемая "полоса прокрутки" (scrollbar), расположенная вдоль правого края окна Emacs'а. Подсвеченный прямоугольничек внутри полосы прокрутки называется "ползунок". Вы можете прокручивать текст, манипулирую полосой прокрутки с помощью мышки.
>> Попробуйте нажать левую кнопку мыши (делее по тексту: кликнуть) сверху от ползунка. Это прокрутит текст в позицию, определяемую тем, насколько высоко или низко вы кликнули.
>> Переместите мышь к самому верху или самому низу полосы прокрутки, на треугольную стрелочку "вверх" или "вниз". Кликните левой кнопкой несколько раз: Emacs прокручивает текст по одной строчке в заданном направлении.
>> Переместите мышь к верху(низу) полосы прокрутки, чуть ниже(выше)треугольной стрелочки. Кликните левой кнопкой несколько раз.Таким образом можно прокручивать текст по станицам.
УПРАВЛЕНИЕ КУРСОРОМ С ПОМОЩЬЮ X ТЕРМИНАЛА
Если вы работаете с X терминалом, вам, вероятно, проще будет использовать клавиши дополнительной клавиатуры (keypad) для перемещения курсора. Стрелки влево, вправо, вверх и вниз перемещают курсор в соответствующем направлении; они работают аналогично C-b, C-f, C-p и C-n, но проще набираются и запоминаются. Вы также можете использовать C-влево и C-вправо для перемещения по словам а C-вверх и C-вниз для перемещения по блокам (при редактировании текста - по параграфам). Если у вас есть клавиши HOME (или BEGIN) и END, то они, соответственно, переносят курсор в начало и в конец строки, а C-HOME и C-END - в начало и в конец файла. Если на вашей клавиатуре есть клавиши PgUp (PageUp) и PgDn (Page Down), вы можете использовать их для перемещения на одну страницу назад или вперед, аналогично M-v и C-v.
Все эти команды могут принимать числовой аргумент, как описано выше. Можно пользоваться сокращенным способом набора: набирать число, удерживая CONTROL или META. Например, что переместиться на 12 слов вправо, наберите C-1 C-2 C-вправо. Это очень просто, потому что вам не нужно отпускать CONTROL во время набора: удерживая эту клавишу наберите 1, 2, вправо.
КОГДА EMACS ЗАВИСАЕТ
Если Emacs не реагирует на ваши команды, вы можете вернуть его в интерактивное состояние с помощью команды C-g. Вы также можете использовать C-g, чтобы отменить команду, выполнение которой затянулось.
Еще C-g можно использовать, чтобы отменить числовой аргумент или начало команды, которую вы раздумали заканчивать.
>> Наберите C-u 100, чтобы ввести числовой аргумент 100, потом нажмите C-g. Теперь нажмите C-f. Курсор переместится только на один символ вперед, потому что вы отменили аргумент командой C-g.
Если вы набрали по ошибке, вы также можете использовать C-g, чтобы Emacs "забыл" про это.
ОТКЛЮЧЕННЫЕ КОМАНДЫ
Некоторые команды Emacs'а бывают "отключены", чтобы начинающие пользователи не набрали их по ошибке.
Если вы введете одну из таких команд, Emacs выдаст сообщение о том, какая команда была введена, и спросит, правда ли вы хотите ее выполнить.
Если вы на самом деле хотите выполнить эту команду, нажмите Пробел в ответ на вопрос, в противном случае нажмите "n".
>> Наберите C-x n p (это отключенная команда), а потом ответьте "n" на вопрос.
ОКНА
Emacs может иметь несколько окон, каждое из которых содержит свой собственный текст. Имейте в виду, что "окно" (window) в Emacs'е означает не отдельные перекрывающиеся окна в оконной системе, а разделенные участки внутри одного X окна. (Emacs также может иметь несколько X окон, или "кадров" (frames) в терминологии Emacs'а. Но об этом позже.)
На данном этапе лучше не углубляться в технику работы с несколькими окнами. Но вам нужно знать как убрать лишние окна, которые могут появиться на экране для вывода помощи или отображения результатов выполнения некоторых команд. Это очень просто:
C-x 1 Одно окно (т.е. закрыть все остальные окна).
То есть CONTROL-x и затем цифра 1. C-x 1 раскрывает окно, в котором находится курсор, на весь экран, тем самым закрывая все остальные окна.
>> Передвиньте курсор на эту строчку и нажмите C-u 0 C-l.
(Запомните, что C-l перерисовывает экран. Если задан числовой аргумент x, то это работает как "перерисовать экран и поместить текущую строку на x строк от верха экрана". Таким образом C-u 0 C-l означает "перерисовать экран и поместить текущую строку на самый верх".) >> Нажмите C-x 2
Текущее окно уменьшилось вдвое и появилось еще одно, показывающее то же содержимое.
>> Нажмите C-x 1, чтобы увидеть, как второе окно будет удалено.
ВСТАВКА И УДАЛЕНИЕ
Если вы хотите вставить текст, просто наберите этот текст. Видимые символы, такие как А, 7, * и т.д. воспринимаются Emacs'ом как текст и вставляются немедленно. Return (Enter) используется для того, чтобы вставить перенос (newline).
Вы можете удалить последний набранный символ с помощью клавиши Delete (Del). В некоторых случаях, клавиша Delete удаляет символ после курсора, а последний введенный символ (символ перед курсором) удаляется с помощью клавиши Backspace. Далее по тексту, для ясности, мы будем говорить "команда удаления последнего символа".
>>Попробуйте прямо сейчас - наберите строку символов, потом переместитесь в середину и посмотрите, как работают Delete и Backspace в вашем Emacs'e. Не волнуйтесь по поводу этого файла; вы не повредите настоящий учебник. То, что вы видите на экране - это ваша персональная копия.
В принципе, функции этих клавиш легко настраивается, поэтому вы можете попросить вашего системного администратора сделать так, чтобы они работали как вам удобно.
Если строка текста слишком длинна и не помещается на экране, она "переносится" на следующую строку. Символ backslash - обратная косая скобка (или загнутая стрелка в XEmacs'е) в конце строки говорит о том, что строка "перенесена".
>> Набирайте текст, пока не дойдете до правой границы экрана. Продолжайте набирать. Вы увидите, как появится строка-продолжение.
>> Удерживайте Delete (или Backspace, в зависимости от того, какая клавиша у вас удаляет символ перед курсором) до тех пор, пока строка не уменьшится до ширины страницы. Вы увидите, как "продолжение" исчезнет.
Вы можете удалять перенос как любой другой символ. Удаление переноса между двумя строками приводит к объединению этих строк в одну. Если результирующая строка окажется слишком длинной, чтобы уместиться по ширине страницы, она будет показана с "продолжением".
>> Поставьте курсор в начало строки и нажмите Delete (Backspace). Это объединит текущую строку с предыдущей.
>> Нажмите Return (Enter) чтобы вставить перенос, который вы удалили.
Помните, что большинство команд Emacs'а, в том числе текстовые символы, могут принимать числовой аргумент. В этом случае символ будет напечатан заданное количество раз.
>> Попробуйте набрать "C-u 8 *", чтобы написать ********.
Теперь вы знаете основные способы как вводить текст в Emacs и как исправлять ошибки. Вы также можете удалять целые слова или строки.
Вот список команд удаления:
удалить символ перед курсором
C-d удалить символ после курсора
M- удалить слово перед курсором
M-d удалить слово за курсором
C-k удалить от текущего символа до конца строки
M-k удалить от текущего символа до конца предложения
Обратите внимание на то, что , C-d и M-, M-d продолжают параллель, начатую C-f и M-f (на самом деле, не является control-последовательностью, но не будем сейчас заострять на этом внимание). C-k и M-k в каком-то смысле аналогичны C-e и M-e.
Если вы удаляете более одного символа за раз, Emacs запоминает удаленный текст, чтобы вы могли вернуть его назад. Возвращение удаленного текста называется "возврат" (yanking). Вы можете вернуть удаленный текст в том же месте, где вы его удалили, или в каком-нибудь другом месте текста. Вы можете вернуть текст несколько раз, чтобы создать несколько его копий. Команда возврата - C-y.
Разница между "удалением" (killing) и "стиранием" (deleting) в том, что "удаленные" вещи можно "вернуть" назад, а "стертые" - нет. В общем, команды, удаляющие много текста за раз, сохраняют удаленный текст, а команды, удаляющие только один символ (пробел, перенос), не сохраняют.
>> Подведите текст к началу этой строки. Нажмите C-k, чтобы удалить ее.
>> Нажмите C-k еще раз. Вы увидите как в результате будет удален перенос, который заканчивает строку.
Обратите внимание, что одиночное нажатие C-k удаляет содержимое строки, а повторное - саму строку, сдвигая последующие строки вверх. Команда C-k обрабатывает числовой аргумент (n) специфически: удаляет n строк И их содержимое. То есть тут не просто повторение: C-u 2 C-k удаляет две строки, а нажатие два раза C-k - одну.
Чтобы вернуть удаленный текст и поместить его туда, где стоит курсор, нажмите C-y.
>> Попробуйте, нажмите C-y, чтобы вернуть удаленный текст.
Представьте себе, что C-y возвращает обратно текст, который вы убрали. Имейте ввиду, что если вы нажали несколько C-k подряд, то весь удаленный текст запомнится одним куском, так что C-y вернет все удаленные строки.
>> Итак, нажмите C-k несколько раз.
Теперь, чтобы вернуть удаленный текст:
>> Нажмите C-y.
>> Потом опустите курсор на несколько строк и нажмите C-y еще раз.
Теперь вы знаете, как скопировать кусок текста.
Как быть, если вы удалили какой-то текст, который вы хотели бы в дальнейшем вернуть, а потом удалили что-то еще? C-y вернет только самое последние удаление. Но и предыдущий текст не потерян. Вы можете вернуть его с помощью команды M-y. После того как вы нажали C-y и вернули текст, удаленный в последнюю очередь, M-y будет заменять только что возвращенный кусок текста на более ранние "удаления".
После того, как вы, нажимая M-y, дойдете до искомого текста, вам не нужно ничего делать, чтобы оставить его - просто продолжайте редактирование, а возвращенный текст останется там, где он появился.
Если нажать M-y достаточное количество раз, то вы вернетесь в самое начало, то есть к самому первому удалению. Потом опять появится самое последние удаление и так далее по кругу.
>> Удалите строку(1), переместитесь куда-нибудь, удалите еще строку(2). Нажмите C-y, чтобы вернуть строку 2. Теперь нажмите M-y - это заменит строку 2 на строку 1. Нажмите M-y еще несколько раз и посмотрите, что у вас получается. Продолжайте нажимать эту комбинацию пока не появится строка 2, и еще пару раз. Если хотите, можете попробовать задать команде M-y положительный или отрицательный числовой аргумент.
ОТМЕНА
Если вы внесли изменения в текст, а потом решили, что это была ошибка, вы можете отменить изменения с помощью команды (команда взята в квадратные скобки чтобы не спутать латинский символ "u" и русскую букву "и").
Обычно отменяет изменения внесенные одной командой, если вы повторяете несколько раз то каждое повторение отменяет еще одну команду.
Однако есть два исключения: команды перемещения курсора и пролистывания экрана не считаются, а обыкновенные символы обычно обрабатываются группами до 20 штук (это сделано для того, чтобы сократить количество нажатий при отмене вставки текста).
>> Удалите эту строку с помощью C-k а потом нажмите - она должна вернуться обратно.
C-_ - альтернативная команда отмены, она работает также как , но ее легче набирать несколько раз подряд. Проблема в том, что на некоторых клавиатурах способ набора C-_ весьма неочевиден. Поэтому мы предлагаем оба варианта. На некоторых терминалах, вы можетеиспользовать C-/ вместо C-_.
Числовой аргумент для команд C-_ (C-/) и работает как количество повторений.
ФАЙЛЫ
Для того, чтобы сохранить текст, который вы редактируете, вы должны поместить его в файл. В противном случае он исчезнет, когда вы будете выходить из Emacs'а. Вы помещаете то, что вы пишете, в файл с помощью "сохранения" (saving) файла.
"Открытие" (finding) файла означает, что вы видите содержимое файла в Emacs'е. Во многих случаях это тоже самое, как если бы вы редактировали сам файл. Тем не менее, изменения, которые вы сделали с помощью Emacs'а, не станут перманентными до тех пор, пока вы не сохраните файл. При сохранении Emacs запоминает изначальный файл под другим именем, на случай, если вы решите, что изменения были внесены по ошибке.
Внизу экрана вы можете видеть строку, которая начинается и заканчивается знаками "тире" и содержит текст "Emacs: TUTORIAL" (англ.: tutorial - учебник). Эта строка всегда показывает название файла, с которым вы работаете. Сейчас вы просматриваете файл "TUTORIAL", который является вашей персональной копией учебника по Emacs'у. Какой бы файл вы не открыли, его название всегда будет показано в этой строке.
Команды, отвечающие за открытие и сохранение файлов, состоят из двух символов. Оба начинаются с символа Control-x. Существует целая серия команд, начинающихся с Control-x, многие из них отвечают за работу с файлами, буферами и связанными с этим вещами. Эти команды состоят из одного, двух, трех и четырех символов.
Еще одна особенность команды открытия файла заключается в том, что вам нужно указать имя файла, который вы хотите открыть. Говорится, что команда "читает аргумент с терминала" (в данном случае "аргумент" - это имя файла). После того как вы введете команду
C-x C-f Открыть файл
Emacs попросит вас ввести имя файла. Ввод имени будет отображаться на самой нижней строке экрана. Эта строка называется минибуфер (minibuffer) и используется для ввода вещей подобного рода. Вы можете использовать стандартные команды Emacs'а для редактирования имени файла.
Вы можете отменить ввод имени файла (или любой другой ввод в минибуфере) с помощью команды C-g.
>> Введите C-x C-f, а потом нажмите C-g. Таким образом вы выйдете из минибуфера и отмените команду C-x C-f, которая использовала минибуфер. Так что никакой файл вы не откроете.
Когда вы ввели имя файла, нажмите чтобы закончить ввод. В таком случае команда C-x C-f выполнится и откроет файл, который вы выбрали. Минибуфер исчезнет по окончанию выполнения команды C-x C-f.
Через небольшое время содержимое файла появится на экране и вы сможете начать редактирование. Когда вы захотите записать изменения, введите команду
C-x C-s Сохранить файл
Таким образом вы скопируете текст из Emacs'а в файл. Когда вы будете делать это первый раз, Emacs скопирует исходный файл под другим именем, чтобы можно было вернуть изменения. Другое имя будет состоять из исходного имени файла и символа "~" в конце.
После сохранения Emacs пишет имя, под которым от файл был сохранен. Рекомендуется сохраняться почаще, чтобы вы не потеряли слишком много работы в случае сбоя системы.
>> Сохраните вашу копию учебника: нажмите C-x C-s. Внизу появится надпись "Wrote ...TUTORIAL". (англ.: учебник записан).
Вы можете открыть файл, чтобы просмотреть его или отредактировать. Вы также можете открыть файл, который еще нет на диске. Таким образом вы создаете файл с помощью Emacs'а: открываете несуществующий файл, который вначале, естественно, пуст, и начинаете вводить текст. Когда вы потребуете "сохранить" файл, Emacs действительно создаст его и запишет туда текст который вы ввели. После этого вы можете считать, что редактируете существующий файл.
БУФЕРЫ
Если вы открываете второй файл с помощью C-x C-f, то первый файл остается в Emacs'е. Вы можете переключиться обратно открыв первый файл снова. Таким образом вы можете держать в Emacs'е несколько файлов.
>> Создайте файл "foo" набрав C-x C-f foo . Потом напишите в нем что-нибудь и сохраните "foo" с помощью C-x C-s. И под конец наберите C-x C-f TUTORIAL , чтобы вернуться в учебник.
Emacs хранит содержимое каждого открытого файла в структуре под названием "буфер" (buffer). Открытие файла создает новый буфер в Emacs'е. Чтобы посмотреть список буферов, наберите
C-x C-b Список буферов
>> Нажмите C-x C-b.
Вы видите, что каждый буфер имеет название, он также может быть связан с файлом, в котором хранится его содержимое. Некоторые буферы не связаны с файлами. Например, буфер под названием "*Buffer List*" (список буферов) не прикреплен ни к какому файлу. Это как раз тот буфер, который был создан и показан командой C-x C-b. ЛЮБОЙ текст, который вы видите в окне Emacs'а является частью некоторого буфера.
>> Нажмите C-x 1, чтобы убрать окно со списком буферов.
Если вы внесли изменения в один файл, а потом открыли другой, то это не приведет к записи первого файла. Все изменения остаются внутри Emacs'а, в буфере, связанном с этим файлом. Создание или редактирование второго файла никак не отражается на буфере первого файла. Это очень удобно, но это также означает, что вам нужен простой способ сохранить буфер первого файла. Переключаться обратно с помощью C-x C-f, чтобы нажать C-x C-s, может быть неудобно, вместо этого существует команда
C-x s Сохранить некоторые буферы
C-x s по очереди предложит вам сохранить все буферы, которые содержат изменения но не были сохранены.
>> Напишите строку текста, а потом нажмите C-x s. Вам будет предложено сохранить буфер TUTORIAL.Ответьте на вопрос "y": буфер будет сохранен.
ИСПОЛЬЗОВАНИЕ МЕНЮ
Если вы работаете с X терминалом, то, наверное, обратили внимание на меню вверху Emacs'овского окна. Вы можете использовать его для доступа к наиболее часто используемым функциям, таким как "find file" (англ.: открыть файл). Вначале это покажется вам более удобным, чем набирать команды с клавиатуры, потому что не надо запоминать соответствующие комбинации клавиш. Однако по мере осваивания Emacs'а, вы будете запоминать эти комбинации (в меню они написаны рядом с названиями команд), и вам будет быстрее пользоваться клавиатурой.
Имейте ввиду, что многие пункты меню не имеют эквивалентной клавиатурной команды. Например, меню Буферы (Buffers) содержит список всех доступных буферов, отсортированный по времени последней активизации. Вы можете переключиться в любой буфер просто выбрав его название в этом меню.
ИСПОЛЬЗОВАНИЕ МЫШИ
Когда Emacs работает под X, он полностью поддерживает мышь. Вы можете позиционировать курсор кликнувшись левой кнопкой в соответствующем месте. Выделение производится путем удержания левой кнопки во время перемещения мыши. Альтернативный способ: кликнуться левой кнопкой в начале помечаемого участка текста, и еще раз, удерживая Shift, кликнуться в конце.
Вы можете удалить помеченный текст в помощью C-w или выбрав пункт Cut (англ.: вырезать) из меню Edit (англ.: редактировать). Имейте ввиду, что C-w просто сохраняет текст в Emacs'е (как команда C-k, описанная выше), а Cut к тому же еще помещает вырезанный текст в буфер обмена X (X clipboard), откуда его можно вставить в другие программы.
Чтобы вставить текст из буфера обмена X, используйте команду Paste (англ.: вставить) из меню Edit.
Средняя кнопка мыши обычно используется для выбора позиций, которые существуют в некоторых буферах. Например, если вы войдете в Info (англ.: информация) - документацию по Emacs'у, используя команду C-h i или через меню Help (англ.: помощь), вы можете выбирать подсвеченные ссылки, кликаясь на них средней кнопкой. Аналогично, когда вводится имя файла (например, при открытии файла), то при нажатии TAB откроется окно с возможными вариантами имени, нужный файл можно выбрать опять-таки с помощью средней кнопки.
Правая кнопка мыши вызывает всплывающее меню (popup menu). Содержимое этого меню зависит от того, где вы находитесь, и содержит, как правило, наиболее часто используемые в этом контексте команды.
>> Нажмите правую кнопку в этом окне.
(Чтобы меню не пропадало, нужно удерживать правую кнопку).
РАСШИРЕННЫЙ НАБОР КОМАНД
Существует еще много, очень много команд Emacs'а, которые, вероятно, могут занять все control- и meta- комбинации. Решением этой проблемы является команда X (от англ. eXtend - расширять). Она существует в двух видах:
C-x Символьное расширение. Далее следует один или
несколько символов.
M-x Вызов команды по названию. После нажатия M-x нужно
ввести название команды.
С помощью команды расширения вызываются функции, которые иногда бывают полезны, однако используются реже, чем, например, C-k или C-u. Вы уже встречали такие "расширенные" команды: C-x C-f - открытие файла и C-x C-s - запись. Другой пример - команда выхода из Emacs'а - C-x C-c (не волнуйтесь о несохраненных файлах; C-x C-c предложит сохранить все измененные файлы перед тем, как закрыть Emacs).
C-z - команда *временного* выхода из Emacs'а, т.е. вы временно оказываетесь в командном интерпретаторе и можете вернуться в Emacs не загружая его по новой. На системах, которые имеют такую возможность, C-z "приостанавливает" (suspends) Emacs - вы возвращаетесь в командную строку, но Emacs остается загруженным в память. В большинстве систем вы можете вернуться в Emacs с помощью команды "fg" или набрав "%emacs". Emacs под X по команде C-z просто сворачивает окно.
В системах, где "сворачивание" не реализовано, C-z загружает новый командный интерпретатор, что позволяет вам выполнить какие-то команды и после этого вернуться в Emacs.
Если в вашей системе достаточно памяти, то проще не выходить из Emacs'а, а приостанавливать его: когда Emacs понадобится, не надо будет загружать его заново. Чтобы выйти из Emacs'а окончательно, используйте C-x C-c. Осмысленно выходить из Emacs'а, когда вы собираетесь остановить работу системы или если Emacs был запущен из под какой-нибудь почтовой или другой прикладной программы, так как эта программа может не знать, как обрабатывать "приостановку" Emacs'a.
Существует множество C-x команд. Вот список тех, которые вы уже знаете:
C-x C-f Открыть файл
C-x C-s Сохранить файл
C-x C-b Список буферов
C-x C-c Выход из Emacs'а
C-x u Отмена
Запуск команд по имени применяется для вызова функций, которые используются менее часто или только в определенных режимах. Примером может служить команда replace-string (англ.: заменить строку¦),которая заменяет одну последовательность символов на другую по всему тексту. Когда вы нажимаете M-x, Emacs предлагает вам ввести имя команды в минибуфере внизу экрана. В случае вызова команды replace-string вы можете набрать "repls" - Emacs сам закончит название команды, а вам останется только нажать .
Команда replace-string требует два аргумента - _что_ заменять и _чем_ заменять. Ввод каждого аргумента оканчивается нажатием .
>> Подведите курсор к пустой строке на две строки ниже этой. Нажмите M-x repl sизмениласьпоменялась.
Обратите внимание, как изменилась эта строка: вы заменили слова и-з-м-е-н-и-л-а-с-ь на "поменялась" с текущей позиции курсора и до конца текста.
АВТОМАТИЧЕСКОЕ СОХРАНЕНИЕ
Если вы внесли изменения в файл но еще не сохранились, то, в случае сбоя системы, они могут быть потеряны. Чтобы избежать этого, Emacs периодически пишет "автосохранение" для каждого редактируемого файла. Автосохранение начинается и заканчивается символом #. Например, если вы редактируете файл "hello.c", то имя автосохранения будет "#hello.c#". Оно удаляется, когда вы сохраняете файл стандартным путем.
В случае сбоя системы, вы можете можете избежать потери информации следующим образом: откройте свой рабочий файл (именно его, а не автосохранение), после чего наберите "M-x recover file". Emacs запросит подтверждения, ответьте "yes" - ваш файл будет восстановлен из последнего автосохранения.
ОБЛАСТЬ ПОДСКАЗКИ (ECHO AREA)
Если Emacs видит, что вы набираете команды медленно, то он будет показывать вам уже набранную часть команды в области подсказки - на нижней строке экрана.
СТРОКА СОСТОЯНИЯ (MODELINE)
Вторая снизу строка - строка состояния. Обычно там написано что-то вроде
--**-Emacs: TUTORIAL (Fundamental)--670--68%----------------
Это строка показывает полезную информацию о режимах Emacs'а и о тексте, который вы редактируете.
Вы уже знаете, что означает текст сразу после надписи "Emacs:" - это имя файла, который вы открыли. -NN%- показывает текущую позицию в тексте: NN процентов файла находятся сверху от видимой страницы. Если вы находитесь в начале файла, то там будет написано не 00%, а -Top- (англ.: верх). Соответственно, в конце файла будет написано -Bot- (bottom - англ.: низ). Если файл такой маленький, что целиком умещается на экране, то надпись будет гласить -All- (англ.: весь).
Звездочки в начале строки говорят о том, что в файл после последней записи были внесены изменения. Сразу после открытия или сохранения файла звездочек там нет.
Часть строки состояния между скобками содержит информацию о том, в каком режиме редактирования вы находитесь. Режим по умолчанию - Fundamental (англ.: базовый), как раз сейчас он активен. Это пример "основного режима" (major mode).
В Emacs'е существует множество основных режимов. Некоторые из них предназначены для редактирования исходных текстов на разных языках программирования, например Lisp mode, и/или текста, например, Text mode. (mode - англ.: режим). В каждый момент времени активен один и только один основной режим, и его название всегда написано в строке состояния там, где сейчас вы видите "Fundamental".
Каждый основной режим заставляет некоторые команды работать по-разному. Например, так как в разных языках программирования комментарии ставятся по-разному, то и команда комментирования участка кода в разных режимах работает по-своему. Каждому основному режиму соответствует образованная от его названия расширенная команда, переключающая Emacs в этот режим. Например, M-x fundamental-mode - команда переключения в режим Fundamental. Если вы собираетесь редактировать простой текст, например, этот файл, то вам резонно использовать режим Text.
>> Наберите M-x text-mode.
Функционирование команд, которые вы изучили выше, практически не изменилось. Однако, вы можете заметить, что команды M-f и M-b теперь воспринимают апостроф как часть слова. А раньше, в режиме Fundamental, апостроф интерпретировался как разделитель слов.
Обычно основные режимы вносят небольшие изменения, наподобие этого, то есть большинство команд "делают ту же работу", но немного по-разному.
Чтобы посмотреть документацию на текущий основной режим, нажмите C-h m.
>> Нажмите C-u C-v, чтобы перенести эту строку вверх экрана. Нажмите C-h m, чтобы посмотреть, чем режим Text отличается от режима Fundamental. Нажмите q, чтобы закрыть окно с документацией.
Основные режимы называются основными, так как есть еще режимы вспомогательные. Вспомогательные режимы являются не альтернативой основных, а их небольшими модификациями. Каждый вспомогательный режим может быть включен и выключен сам по себе, независимо от других вспомогательных режимов и независимо от основного режима. Таким образом, вы можете не включать их вообще или включить один или использовать комбинацию из нескольких.
Один вспомогательный режим может быть очень полезен при наборе обыкновенного текста, это режим Auto Fill (англ.: автоматическое заполнение). В нем Emacs автоматически переносит строку, разбивая ее между словами, когда длина строки превышает некое установленное значение.
Вы можете включить этот режим, набрав M-x auto-fill-mode. Выключение режима происходит точно также. Когда режим активен, эта команда выключает его, а когда не активен - включает.
>> Наберите M-x auto-fill-mode. Теперь набирайте что-нибудь вроде "йцук " много раз, пока Emacs не перенесет строку. Важно оставлять в строке пробелы, так как Emacs разбивает строку только по ним.
Перенос осуществляется, как правило, по 70-символьной границе, но вы можете изменить ее с помощью команды C-x f. Границу надо задать в качестве аргумента для этой команды.
>> Введите "C-x f" с аргументом 20 (C-u 20 C-x f). Наберите какой-нибудь текст чтобы убедиться, что Emacs переносит строки по новой границе. Верните границу обратно с помощью C-u 70 C-x f.
Если вы внесли изменения в середине параграфа, Emacs не станет выравнивать весь параграф.
Чтобы сделать это, нужно нажать M-q. Команда M-q выравнивает параграф, на котором стоит курсор.
>> Перенесите курсор на предыдущий параграф и нажмите M-q.
ПОИСК
Emacs умеет искать строки (то есть слова или непрерывные последовательности символов) вперед или назад по тексту. Поиск строки является командой переноса курсора, то есть курсор ставится на то место, где найдена искомая строка.
Поиск в Emacs'е отличается от поиска в большинстве других редакторов тем, что он "инкрементный" (incremental). Это означает, что поиск происходит по мере того, как вы вводите строку поиска. C-s и C-r, соответственно, команды поиска "вперед" и "назад" (от англ. search - искать и reverse - обратный). Только НЕ НАДО пробовать их прямо сейчас.
Когда вы нажмете C-s вы увидите строку "I-search" в минибуфере. Это говорит о том, что запущен инкрементный поиск, и Emacs ждет, что вы начнете вводить строку, которую предстоит искать. заканчивает поиск.
>> Поставьте курсор в начало строки с английским текстом, отцентрируйте ее (C-l) и нажмите C-s, чтобы начать поиск. МЕДЛЕННО, по одному символу за раз, наберите слово "cursor", делая паузу после каждой буквы, обращая внимание на поведение курсора (на момент перевода этого учебника, инкрементный поиск на русском языке в XEmacs'е под X11/Xkb не работает. В консоли все ok. Соответственно вы можете проверить, как ведет себя ваша версия Emacs'а при попытке ввода русских букв в инкрементном поиске).
c bla-bla cu bla-bla curs bla-bla cursor
>> Итак, вы нашли первое вхождение слова "cursor". Cотрите парочку последних символов в строке поиска (с помощью команды удаления последнего символа, или , в зависимости от терминала). Обратите внимание, как двигается курсор. Чтобы продолжить поиск, нажмите C-s еще раз. Нажмите чтобы выйти из поиска.
Вы поняли, что происходило? По мере того, как вы набираете строку поиска, Emacs пытается найти ее ближайшее вхождение и для удобства подсвечивает его. Чтобы найти следующее вхождение, нужно нажать C-s еще раз. Если Emacs не может найти строку, в минибуфере будет написано, что текущий поиск неудачен (failing i-search). Отменить поиск не перенося курсор можно с помощью C-g.
Если в процессе инкрементного поиска вы вводите команду удаления последнего символа, то поиск откатывается на место первого вхождения усеченной строки. Предположим, вы набрали "c" и увидели первое вхождение буквы "c". Теперь, если вы нажмете "u", то курсор передвинется на первое вхождение строки "cu". Если теперь вы удалите символ "u" с помощью команды удаления последнего символа, то курсор вернется обратно на первое вхождение буквы "c".
Если в процессе инкрементного поиска вы введете control- или meta- символ (за исключением команд, имеющих специальное значение в режиме поиска, таких как C-s и C-r), то поиск будет прерван (именно поэтому могут возникнуть сложности с поиском русских букв, которые, в зависимости от способов русификации, могут интерпретироваться как
управляющие символы).
Итак, C-s ищет строку символов в тексте "ниже" курсора. Чтобы искать в обратном направлении, используйте команду C-r. Все, что мы говорили про C-s, справедливо и для обратного поиска, за исключением того, что направление меняется на противоположное.
МНОГООКОННОСТЬ
Одна из полезных возможностей Emacs'а - поддержка многооконности, то есть в одно и тоже время на экране может быть открыто более одного окна.
>> Подведите курсор к этой строке и нажмите C-u 0 C-l.
>> Теперь нажмите C-x 2 - экран разделится на два окна. В обоих окнах вы видите этот учебник. Курсор остался в верхнем окне.
>> Нажмите C-M-v, чтобы пролистать текст в нижнем окне (если на вашей клавиатуре нет ни Meta ни Alt - наберите ECS C-v).
>> Нажмите C-x o ("o" от англ. other - другой), чтобы переместить курсор в нижнее окно. Используйте C-v и M-v, чтобы пролистывать текст в нижнем окне, продолжая читать эти инструкции в верхнем.
>> Нажмите C-x o опять, чтобы вернуть курсор в верхнее окно. Курсор вернется в то место, где он был раньше.
Итак, вы можете использовать C-x o для переключения между окнами. В каждом окне курсор имеет свое собственное положение, но отображается он только в одном. Все стандартные команды редактирования работают именно в том окне, в котором находится курсор. Это окно называется "активным" (selected).
Команда C-M-v очень полезна, если вы редактируете текст в одном окне, а второе используете для подсказки. Также эта команда незаменима при переводе: в одном окне вы набиваете перевод, а в другом видите исходный текст. С помощью команды C-M-v вы пролистываете текст во втором окне не выходя из первого.
C-M-v является примером Control-Meta-символа. Если у вас есть клавиша META (ALT), то такая команда вводится путем нажатия v при удерживаемых управляющих клавишах CONTROL и META. Неважно какая из них нажимается первой, так как они работают независимо друг от друга.
Если клавиши META на вашей клавиатуре нет, вы можете использовать вместо нее ESC, но в этом случае важна последовательность: нужно нажать ECS а потом C-v; CTRL-ESC-v не сработает. Это связано с тем, что ESC является сама по себе символом, а не управляющей клавишей.
>> Нажмите C-x 1 (в верхнем окне), чтобы закрыть нижнее.
(Если набрать C-x 1 в нижнем окне, то закроется верхнее, то есть смысл команды следующий: оставить активное окно и закрыть остальные).
Естественно, никто не заставляет вам отображать один и тот же буфер в обоих окнах. Если вы нажмете C-x C-f и откроете таким образом файл в одном окне, то содержимое второго не изменится. То есть вы можете открывать файлы в разных окнах независимо друг от друга.
Вот еще один пример как использовать два окна для отображения разных вещей:
>> Нажмите C-x 4 C-f и введите имя одного из своих файлов. Эта команда открывает файл в нижнем окне и переносит туда курсор.
>> Нажмите C-x o, чтобы вернуться в верхнее окно и C-x 1, чтобы закрыть нижнее.
УРОВНИ РЕКУРСИВНОГО РЕДАКТИРОВАНИЯ
Иногда вы можете оказаться в режиме "уровень рекурсивного редактирования". Вы опознаете его по квадратным скобкам, которые будут стоять по сторонам от обычных в строке состояния. То есть там будет написано [(Fundamental)] вместо (Fundamental).
Чтобы выйти из такого режима, нажмите ESC ESC ESC. Это команда "убрать", "выйти" на все случаи жизни. Вы можете использовать ее также для того, чтобы закрыть лишние окна или выйти из минибуфера.
>> Нажмите M-x, чтобы войти в минибуфер, а потом ESC ESC ESC, чтобы выйти из него.
Команда C-g не поможет вам выйти из уровня рекурсивного редактирования, так как она используется для отмены команд и аргументов ВНУТРИ этого режима.
КАК ПОЛУЧИТЬ БОЛЬШЕ ИНФОРМАЦИИ
В этом учебнике мы постарались предоставить вам базу знаний, необходимую для того, чтобы начать работать с Emacs'ом. Emacs обладает настолько большим количеством возможностей, что просто невозможно описать их все здесь. Однако, если вам захочется почитать что-нибудь еще про Emacs, воспользуйтесь командами помощи: они все начинаются с C-h (этот префикс называют "символом справки").
Чтобы получить справку, нажмите C-h и еще один символ, в зависимости от того, какого рода справку вы хотите получить. Если вы в замешательстве, используйте C-h ? - Emacs покажет вам, какие виды помощи он может предоставить. Если нажали C-h а потом решили, что справка вам не нужна, просто нажмите C-g.
(На некоторых системах команда C-h бывает переопределена. Это не вполне корректно, так что вы можете пожаловаться системному администратору. Тем не менее, если команда C-h не работает, попробуйте использовать вместо нее M-x help ).
Простейшая команда помощи - C-h c.
>> Нажмите "C-h c" и какую-нибудь команду: Emacs выдаст краткое описание этой команды. Например, на C-h c C-p вы увидите что-то вроде "C-p runs the command previous-line" (англ.: C-p выполняет команду "предыдущая-строка").
То есть "C-h c" показывает вам название функции, которую активизирует заданная команда. Названия функций используются в основном для настройки и расширения возможностей Emacs'а, но так как названия функций непосредственно связаны с тем, что эти функции делают, то команда "C-h c" может послужить простейшей документацией, достаточной как минимум для того, чтобы напомнить вам о работе тех команд, которые вы уже знаете.
Длинные команды типа C-x 4 C-f также допустимы после C-h c.
Чтобы получить более развернутую информацию по команде, используйте C-h k вместо C-h c.
>> Наберите C-h k C-p.
Таким образом вы посмотрите документацию по команде C-p в отдельном окне. Когда дочитаете, нажмите q, чтобы закрыть его.
Вот еще парочка полезных справочных команд:
С-h f Описание функции. Требует ввести название функции.
>> Попробуйте набрать C-h f previous-line. Вы увидите документацию по функции previous-line (англ.: предыдущая строка), которая привязана к команде C-p.
C-h a Найти похожие функции. Введите набор символов и вы
увидите все функции и переменные, в названиях которых
он присутствует. Функции, которые могут быть вызваны
с помощью M-x будут помечены слева символом "*".
>> Наберите C-h a newline.
Появится список всех функций и переменных, в названия которых содержат "newline". Используя команды управления курсором и или кликаясь средней кнопкой на интересующей функции, можно получить ее описание. "q", как всегда, выход из режима справки.
ЗАКЛЮЧЕНИЕ
Помните, чтобы выйти из Emacs'а окончательно, используйте C-x C-c. Чтобы временно выйти в командную строку или свернуть окно XEmacs'а под X Window System, пользуйтесь C-z.
Предполагается, что этот учебник должен быть понятен для всех новых пользователей, так что если вам что-то не ясно, не рвите на себе волосы - жалуйтесь ;)
УСЛОВИЯ КОПИРОВАНИЯ
Этот учебник ведет историю от длинной линии учебников по Emacs'у, берущую начало от того, который был написан Стюартом Кракрафтом (Stuart Cracraft) для начальной версии Emacs'а. Бен Винг (Ben Wing) внес дополнения, касающиеся работы под X Window System. Мартин Бачхолц (Martin Buchholz) и Хрвоже Никсик (Hrvoje Niksic) внесли поправки относительно XEmacs'а. Перевод на русский язык сделал Антон Вилькин (vilkin@mail.ru).
Эта версия учебника, аналогично GNU Emacs'у, защищена законом об авторском праве и предоставляется с разрешением к распространению при соблюдении следующих условий:
Copyright (c) 1985, 1996 Free Software Foundation
Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and permission notice are preserved, and that the distributor grants the recipient permission for further redistribution as permitted by this notice. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last altered them.
Условия распространения самого Emacs'а более сложны, но выдержаны в том же духе. Пожалуйста, прочтите файл COPYING и потом свободно раздавайте копии GNU Emacs'а своим друзьям.
|