Практическое введение в GNU Emacs
- Цель работы
- знакомство с основами GNU Emacsw.
- Материально-техническое обеспечение
- компьютер с установленным ПО GNU Emacs в версии не ниже 24.3.
Материалы для изучения
[править]- Основные
-
- Раздел «Терминология» статьи Emacs Википедии.
- Дополнительные
-
- http://sachachua.com/blog/wp-content/uploads/2013/05/How-to-Learn-Emacs-v2-Large.png — диаграмма «Как изучить Emacs?» (англ.)
- http://www.gnu.org/software/emacs/refcards/ — справочные карточки.
- http://www.gnu.org/software/emacs/manual/ — официальные руководства. (англ.)
Практика
[править]Строка режима и эхо-область
[править]Запустите GNU Emacs командой $ emacs. В нижней части (единственного) окна Emacs найдите строку режима, подобную:
-UUU:**--F1 *scratch* All (5,0) (Lisp Interaction Mouse) --
В строке режима выше отображена следующая информация:
UUU— указывает на то, что Emacs использует кодировку UTF-8 для ввода с клавиатуры и вывода на терминал (при работе с Emacs через эмулятор терминала);**— буфер, с которым связана данная строка режима, отмечен как измененный; (символы*исчезают, в частности, при сохранении буфера в файл); также возможны сочетания%%(буфер только для чтения) и%*;F1— работа происходит в рамке (frame) №1; (в многооконном окружении рамке может соответствовать окно оконной системы);*scratch*— имя буфера;All— свидетельствует о том, что в окне отображено все содержимое буфера (также возможныTop,Bot, или «расстояние» от начала буфера до «текущего экрана» в процентах);5,0— строка и столбец точки (point) в буфере;(Lisp Interaction Mouse)— главный (major) и дополнительные (minor) режимы буфера.
Выполните следующие действия.
- Выясните версию Emacs. Для этого:
- введите M-x
emacs-versionRET; - найдите результат операции в эхо-области.
- Указания
-
- Под RET здесь и далее мы будем понимать клавишу ⏎ Enterw («ввод»).
- Существует два способа ввести M-x:
- последовательно нажать ESC x;
- удерживая Altw, кратковременно нажать x; затем отпустить обе клавиши (Alt+x.)
- При вводе
emacs-versionдопустимо использовать клавишу TAB (↹ Tabw) для дополнения результата.
- введите M-x
- Изучите влияние следующих клавиатурных комбинаций на строку режима, точку и эхо-область (последовательно):
- ESC <;
- C-e;
- M-b;
- M-f;
- C-a;
- ESC >.
- Изучите влияние следующих команд на строку режима, точку и эхо-область. Сопоставьте их с клавиатурными комбинациями предыдущего пункта.
- Указание
- Используйте TAB при вводе имени команды после M-x.
- M-x
display-timeRET - M-x
beginning-of-bufferRET - M-x
end-of-lineRET - M-x
backward-wordRET - M-x
forward-wordRET - M-x
beginning-of-lineRET - M-x
end-of-bufferRET - M-x
column-number-modeRET
- Изучите действие следующей последовательности:
- ESC < C-u
33C-f.
- ESC < C-u
- Опытным путем установите значения следующих клавиатурных комбинаций:
- C-b, C-f, M-b, M-f, M-C-b, M-C-f.
- Контрольные вопросы
-
- Какая версия Emacs использовалась в работе?
- Укажите расположение эхо-области в рамке Emacs.
- После выполнения примера выше должно быть ясно, что, например, C-e является «сокращением» для M-x
end-of-line; найдите соответствия и между другими командами из числа используемых в примере. - Предположите, по какому правилу образованы клавиатурные комбинации 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-/.
Буферы и окна
[править]Выполните следующие действия.
- Введите C-x b TAB.
- В одном из окон отобразится буфер
*Completions*, в котором будут перечислены по крайней мере три буфера:*scratch*,*Messages*и сам*Completions*. Введите имя одного из них, затем RET.- Указание
- Вновь используйте TAB для дополнения имени буфера.
- Создайте дополнительное окно вводом C-x 2, после чего:
- сделайте созданное окно текущим используя C-x o;
- измените отображаемый новым окном буфер на
*scratch*.
- Удалите все окна кроме текущего вводом C-x 1.
- Снова создайте дополнительное окно вводом C-x 2.
- Проверьте, что текст, вводимый в буфер через одно из окон также отображается во втором.
- Вновь удалите все окна кроме текущего и изучите действие клавиатурных комбинаций в следующей последовательности:
- C-x 2
- C-x 3
- C-x 0
- C-x 1
- (Дополнительно.) Изучите действие клавиатурной комбинации C-x C-b.
- Введите M-x. Буфер, отобразившийся в эхо-области, носит название минибуфера. Прервите текущую операцию вводом C-g.
- Контрольные вопросы
- Опишите действие использованных в работе клавиатурных комбинаций C-x 0 и C-x 3.
Файлы
[править]Вводом C-x C-f ~/filetype.sh RET начните работу с буфером, связанным с файлом filetype.sh домашней директории.
В буфере, выполните следующий ввод.
- Указание
- Каждую строку следует завершать вводом RET.
#!/bin/bashfiletype1 () {if [ -L "$1" ] ; thenTAB TABecho "$1": is a symbolic linkelifTAB[ -d "$1" ] ;SPC M-/ TABecho "$1":SPC M-/ SPC M-/ SPCdirectoryelseTAB TABecho "$1":SPC M-/ SPCan other '(regular?)' filefiTAB}for f ; doTABfiM-/ M-/ SPC"$f"done
Сохраните буфер в файл (C-x C-s) и выполните полученную программу: ESC ! bash ~/fi M-/ .sh / /etc/motd /etc/fstab.
- Контрольные вопросы
-
- Сформулируйте действие, выполняемое в буфере при вводе TAB.
- Буфер с каким именем был создан Emacs для помещения результата работы программы?
- Предположите, при работе с каким содержимым буфера M-/ будет наиболее полезна?
- Расскажите как работает введенная программа на Shell и каков результат ее работы в данном примере?