Практическое введение в GNU Emacs

Материал из Викиверситета
Цель работы
знакомство с основами GNU Emacsw.
Материально-техническое обеспечение
компьютер с установленным ПО GNU Emacs в версии не ниже 24.3.

Материалы для изучения[править]

Основные
Дополнительные

Практика[править]

Строка режима и эхо-область[править]

Запустите GNU Emacs командой $ emacs. В нижней части (единственного) окна Emacs найдите строку режима, подобную:

-UUU:**--F1  *scratch*  All (5,0)   (Lisp Interaction Mouse)  --

В строке режима выше отображена следующая информация:

  1. UUU — указывает на то, что Emacs использует кодировку UTF-8 для ввода с клавиатуры и вывода на терминал (при работе с Emacs через эмулятор терминала);
  2. **буфер, с которым связана данная строка режима, отмечен как измененный; (символы * исчезают, в частности, при сохранении буфера в файл); также возможны сочетания %% (буфер только для чтения) и %*;
  3. F1 — работа происходит в рамке (frame) №1; (в многооконном окружении рамке может соответствовать окно оконной системы);
  4. *scratch*имя буфера;
  5. All — свидетельствует о том, что в окне отображено все содержимое буфера (также возможны Top, Bot, или «расстояние» от начала буфера до «текущего экрана» в процентах);
  6. 5,0 — строка и столбец точки (point) в буфере;
  7. (Lisp Interaction Mouse) — главный (major) и дополнительные (minor) режимы буфера.

Выполните следующие действия.

  1. Выясните версию Emacs. Для этого:
    1. введите M-x emacs-version RET;
    2. найдите результат операции в эхо-области.
    Указания
    • Под RET здесь и далее мы будем понимать клавишу ⏎ Enterw («ввод»).
    • Существует два способа ввести M-x:
      1. последовательно нажать ESC x;
      2. удерживая Altw, кратковременно нажать x; затем отпустить обе клавиши (Alt+x.)
    • При вводе emacs-version допустимо использовать клавишу TAB (↹ Tabw) для дополнения результата.
  2. Изучите влияние следующих клавиатурных комбинаций на строку режима, точку и эхо-область (последовательно):
    1. ESC <;
    2. C-e;
    3. M-b;
    4. M-f;
    5. C-a;
    6. ESC >.
  3. Изучите влияние следующих команд на строку режима, точку и эхо-область. Сопоставьте их с клавиатурными комбинациями предыдущего пункта.
    Указание
    Используйте TAB при вводе имени команды после M-x.
    1. M-x display-time RET
    2. M-x beginning-of-buffer RET
    3. M-x end-of-line RET
    4. M-x backward-word RET
    5. M-x forward-word RET
    6. M-x beginning-of-line RET
    7. M-x end-of-buffer RET
    8. M-x column-number-mode RET
  4. Изучите действие следующей последовательности:
    ESC < C-u 33 C-f.
  5. Опытным путем установите значения следующих клавиатурных комбинаций:
    C-b, C-f, M-b, M-f, M-C-b, M-C-f.
Контрольные вопросы
  1. Какая версия Emacs использовалась в работе?
  2. Укажите расположение эхо-области в рамке Emacs.
  3. После выполнения примера выше должно быть ясно, что, например, C-e является «сокращением» для M-x end-of-line; найдите соответствия и между другими командами из числа используемых в примере.
  4. Предположите, по какому правилу образованы клавиатурные комбинации C-f, M-f, M-C-f (C-b, M-b, M-C-b)?

Выражения Emacs Lisp[править]

В буфере *scratch* введите следующее выражение:

(emacs-version)

Затем, введите C-j для вычисления выражения.

Аналогично, вычислите значение выражения (* 2 3 4 5).

Контрольные вопросы
Верно ли Emacs «вычислил» 5!?

Динамическое дополнение текста[править]

В буфере *scratch* введите на отдельной строке следующий текст:

;; A dynamic completion example.

После чего, на следующей строке введите: ;; A dyn, затем — три раза подряд последовательность M-/ SPC.

Контрольные вопросы
Опишите действие команды M-/.

Буферы и окна[править]

Выполните следующие действия.

  1. Введите C-x b TAB.
  2. В одном из окон отобразится буфер *Completions*, в котором будут перечислены по крайней мере три буфера: *scratch*, *Messages* и сам *Completions*. Введите имя одного из них, затем RET.
    Указание
    Вновь используйте TAB для дополнения имени буфера.
  3. Создайте дополнительное окно вводом C-x 2, после чего:
    1. сделайте созданное окно текущим используя C-x o;
    2. измените отображаемый новым окном буфер на *scratch*.
  4. Удалите все окна кроме текущего вводом C-x 1.
  5. Снова создайте дополнительное окно вводом C-x 2.
  6. Проверьте, что текст, вводимый в буфер через одно из окон также отображается во втором.
  7. Вновь удалите все окна кроме текущего и изучите действие клавиатурных комбинаций в следующей последовательности:
    1. C-x 2
    2. C-x 3
    3. C-x 0
    4. C-x 1
  8. (Дополнительно.) Изучите действие клавиатурной комбинации C-x C-b.
  9. Введите M-x. Буфер, отобразившийся в эхо-области, носит название минибуфера. Прервите текущую операцию вводом C-g.
Контрольные вопросы
Опишите действие использованных в работе клавиатурных комбинаций C-x 0 и C-x 3.

Файлы[править]

Вводом C-x C-f ~/filetype.sh RET начните работу с буфером, связанным с файлом filetype.sh домашней директории.

В буфере, выполните следующий ввод.

Указание
Каждую строку следует завершать вводом RET.
#!/bin/bash

filetype1 () {
if [ -L "$1" ] ; then TAB
TAB echo "$1": is a symbolic link
elif TAB [ -d "$1" ] ; SPC M-/
TAB echo "$1": SPC M-/ SPC M-/ SPC directory
else TAB
TAB echo "$1": SPC M-/ SPC an other '(regular?)' file
fi TAB
}

for f ; do
TAB fi M-/ M-/ SPC "$f"
done

Сохраните буфер в файл (C-x C-s) и выполните полученную программу: ESC ! bash ~/fi M-/ .sh / /etc/motd /etc/fstab.

Контрольные вопросы
  1. Сформулируйте действие, выполняемое в буфере при вводе TAB.
  2. Буфер с каким именем был создан Emacs для помещения результата работы программы?
  3. Предположите, при работе с каким содержимым буфера M-/ будет наиболее полезна?
  4. Расскажите как работает введенная программа на Shell и каков результат ее работы в данном примере?