Практическое введение в 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-version
RET; - найдите результат операции в эхо-области.
- Указания
-
- Под 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-time
RET - M-x
beginning-of-buffer
RET - M-x
end-of-line
RET - M-x
backward-word
RET - M-x
forward-word
RET - M-x
beginning-of-line
RET - M-x
end-of-buffer
RET - M-x
column-number-mode
RET
- Изучите действие следующей последовательности:
- ESC < C-u
33
C-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/bash
filetype1 () {
if [ -L "$1" ] ; then
TAB TABecho "$1": is a symbolic link
elif
TAB[ -d "$1" ] ;
SPC M-/ TABecho "$1":
SPC M-/ SPC M-/ SPCdirectory
else
TAB TABecho "$1":
SPC M-/ SPCan other '(regular?)' file
fi
TAB}
for f ; do
TABfi
M-/ M-/ SPC"$f"
done
Сохраните буфер в файл (C-x C-s) и выполните полученную программу: ESC ! bash
~/fi
M-/ .sh / /etc/motd /etc/fstab
.
- Контрольные вопросы
-
- Сформулируйте действие, выполняемое в буфере при вводе TAB.
- Буфер с каким именем был создан Emacs для помещения результата работы программы?
- Предположите, при работе с каким содержимым буфера M-/ будет наиболее полезна?
- Расскажите как работает введенная программа на Shell и каков результат ее работы в данном примере?