Emacs

Материал из Xgu.ru

Перейти к: навигация, поиск


Emacs — один из двух основных текстовых редакторов для UNIX/Linux-систем (второй — vi). Существует несколько модификаций Emacs, главными из которых являются GNU Emacs и XEmacs.

Разработка Emacs началась Ричардом Столманом ещё в 70-х и ещё даже не для UNIX, а совсем для других систем, и на UNIX он был перенесён значительно позже. К концу 70-х Emacs был уже очень популярен. Так, например, в 1979 Emacs был самым популярным текстовым редактором в лабораториях искусственного интеллекта и компьютерных систем в MIT[1]. В 1984-м Столман начал разработку нового, уже свободного Emacs'а, который стал частью проекта GNU и получил название GNU Emacs.

Содержание

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

  • Буфер
  • Окно
  • Фрейм

Подробнее об этом:

[править] Комбинации клавиш

Некоторые комбинации клавиш для начинающих:

C-g                      прервать ввод (самая главная комбинация)
C-\ (C-shift-_)          отмена

M-shift->                в конец буфера
M-shift-<                в начало буфера
M-g g 	                 перейти на строку с заданным номером

C-b 	                 перейти назад на один символ
C-f 	                 перейти вперёд на один символ
M-b                      перейти назад на одно слово
M-f                      перейти вперёд на одно слово

C-a                      перейти в начало строки
C-e                      перейти в конец строки
C-k                      удалить от курсора до конца строки (удалённый текст попадает в kill-ring)
M-m 	                 перейти к первому значащему (non-space character) символу в строке

M-x shell                запустить командный интерпретатор
M-p                      предыдущая команда (в режиме shell)
M-n                      следующая команда (в режиме shell)

C-space                  установить отметку (начать помечать блок)
C-w                      вырезать весь текст между отметкой и курсором (выделенный текст)
M-w                      скопировать весь текст между отметкой и курсором (выделенный текст)
C-y                      вставить скопированный текст

C-x b                    перейти в буфер
C-x C-b                  перейти в буфер, выбранный из списка (f для выбора)

C-x 2                    разбить текущее окно на два по горизонтали
C-x 1                    оставить одно окно
C-x 3                    разбить текущее окно на два по вертикали
C-x 0                    закрыть текущее окно

C-x o                    переключиться в другое окно

C-s                      инкрементальный поиск вперёд
C-r                      инкрементальный поиск назад
Esc или Return           остановить инкрементальный поиск

Более полный список команд и привязанным к ним комбинациям клавиш ниже[2].

[править] Команды работы с файлами

C-x C-f		find-file		найти файл и считать его на экран (по сути - открыть)
C-x C-v		find-alternate-file	Считать (открыть) другой файл.
C-x i		insert-file		Вставить файл начиная с текущей позиции курсора.
C-x C-s		save-buffer		Сохранить текущий буфер.
C-x C-w		write-file		Сохранить буфер в файл.
C-x C-c		save-buffers-kill-emacs	Сохранить все буферы и выйти из Emacs.
C-z		suspend-emacs		Приостановить работу Emacs.

[править] Команды перемещения курсора

C-f		forward-char		Переместить курсор на одну позицию вперед (аналог ->).
C-b		backward-char		Переместить курсор на одну позицию назад (<-).
C-p		previous-line		Переместить курсор на строку вверх (стрелка вверх).
C-n		next-line		Переместить курсор на строку вниз (стрелка вниз).
M-f		forward-word		Переместить курсор к следующему слову (границы слова определяются по пробелам/спецсимволам.)
M-b		backward-word		Переместить курсор к предыдущему слову.
C-a		beginning-of-line	Переместить курсор к началу строки.
C-e		end-of-line		Переместить курсор к концу строки.
M-a		backward-sentence	Переместиться назад на одно предложение.
C-v		scroll-up		Проскроллировать экран вверх (на один экран).
M-v		scroll-down		Проскроллировать экран вниз (на один экран).
C-x <		backward-page		На одну страницу назад.
C-x >		forward-page		На одну страницу вперед.
M->		end-of-buffer		Перейти к концу буфера.
M-<		beginning-of-buffer	Перейти к началу буфера.
C-l		recenter		Перерисовать экран с текущей строкой посередине.
M-(a number)	digit-argument		Выполнить следующую команду (a number) раз.


[править] Команды удаления

Del		backward-delete-char	Удалить предыдущий символ.
C-d		delete-char		Удалить символ под курсором.
M-Del		backward-kill-word	Удалить предыдущее слово.
C-k		kill-line		Удалить все от курсора до конца строки.
M-k		kill-sentence		Удалить предложение, в котором находится курсор.
C-x Del		backward-kill-sentence	Удалить предыдущее предложение.
C-y		yank			Восстановить удаленный текст в место, где находится курсор.
C-w		kill-region		Удалить помеченный регион.
		backward-kill-paragraph	Удалить предыдущий параграф.
		kill-paragraph		Удалить все от курсора до конца параграфа.


[править] Параграфы и регионы

C-@		set-mark		Отметить начало/конец региона.
C-Space		set-mark		То же.
C-x C-p		mark-page		Отметить текущую страницу.
C-x C-x		exchange-point-and-make	Обменять позицию курсора и позицию отметки.
C-x h		mark-whole-buffer	Пометить весь буфер.
M-q		fill-paragraph		Сбросить параграф.
M-g		fill-region		Переформатировать параграфы в регионе. (Reformat individual paragraphs with region.)
M-h		mark-paragraph		Отметить параграф.



[править] Остановка и отмена

C-g		keyboard-quit		Отменить текущую команду Немедленно!
C-x u		advertised-undo		Отменить последнее редактирование (делайте это чаще!)
		revert-buffer		Вернуть буфер к последнему автоматически сохраненному состоянию.


[править] Команды перестановки

C-t		transpose-chars		Переставить два символа местами (символ под курсором и предыдущий символ).
M-t		transpose-words		Переставить два слова местами.
C-x C-t  transpose-lines		Переставить строки местами.
       transpose-sentences	Переставить предложения.
       transpose-paragraphs	Переставить параграфы.


[править] Команды капитализации (смены регистра)

M-c		capitalize-word		Сделать первую букву слова заглавной.
M-u		upcase-word		Перевести все слово в верхний регистр.
M-l		downcase-word		Перевести все слово в нижний регистр.
C-x C-l		downcase-region		Перевести регион в нижний регистр.
C-x C-u		uppercase-region	Перевести регион в верхний регистр.


[править] Команды инкрементального поиска

C-s		isearch-forward		Начать инкрементальный поиск (вперед).
C-r		isearch-backward	Начать инкрементальный поиск (назад).
Meta					Остановить удачный поиск.
C-g		keyboard-quit		Остановить поиск и вернуться в начальную позицию.
Del					Удалить неверный символ в поиске.


[править] Работа с сокращёнными словами

		abbrev-mode		Enter abbreviation mode.
C-x -		inverse-add-global-abbrev	Type in a global abbreviation, then its meaning.
C-x C-h		inverse-add-local-abbrev	Type in a local abbreviation, then its meaning.
		unexpand-abbrev		Undo the last word abbreviation.
		write-abbrev-file	Write out the word abbreviation file.
		edit-abbrevs		Edit the current word abbreviations.
		list-abbrevs		View the current word abbreviations.
		kill-all-abbrevs	Kill any abreviations for this session.


[править] Команды манипуляций с буфером

C-x b		switch-to-buffer	Переключиться на указанный буфер.
C-x C-b		list-buffers		Показать список активных буферов.
C-x k		kill-buffer		Прибить текущий буфер
		kill-some-buffers	Спросить об удалении каждого из текущих активных буферов.
		rename-buffer		Переименовать текущий буфер.
C-x s		save-some-buffers	Спросить о сохранении каждого из текущих буферов


[править] Команды окна

C-x 2		split-window-horizontally	Разделить окно пополам горизонтально.

C-x >		scroll-right			Прокрутить окно вправо.
C-x <		scroll-left			Прокрутить окно влево.
C-x 0		delete-window			Удалить текущее окно.
C-x 1		delete-other-windows		Удалить (закрыть) все окна кроме текущего.
		delete-windows-on		Delete all windows open to a particular buffer.
C-x ^		enlarge-window			Увеличить текущее окно.
		shrink-window			Уменьшить текущее окно.
C-x }		enlarge-window-horizontally	Расширить текущее окно.
C-x {		shrink-window-horizontally	Сузить текущее окно.
M-C-v		scroll-other-window		Прокрутить вперед другое окно (неактивное).
C-x 4 f		find-file-other-window		Найти (открыть) фал в другом окне.
C-x 4 b		switch-to-buffer-other-window	Переключить буфер в другом окне.
		compare-windows			Сравнить два буфера и показать первое различие.

C-x 5		                                Префикс для работы с фреймами

[править] Специальные команды оболочки

		shell			Запустить оболочку (шелл).
C-c C-c		interrupt-shell-subjob	Прибить текущую задачу в оболочке.
C-c C-d		send-shell-eof		Послать EOF символ (Ctrl-D)
C-c C-u		kill-shell-input	Стереть текущую строку.
C-c C-w		backward-kill-word	Стереть предыдущее слово.
C-c C-z		stop-shell-subjob	Приостановить (suspend) текущую задачу в оболочке (послать Ctrl+Z).


Команды отступов

C-x		set-fill-prefix		Prepend each line in paragrph with characters from beginning of the line up to the current cursor column.  cancel by doing this in column 1.
M-C-\		indent-region		Indent a region to match the first line in region.
M-m		back-to-indentation	Move the cursor to first character in line.
M-C-o		split-line			Split line at cursor into two lines...  weird.
		fill-individual-paragraphs	Reformat indented paragraphs, keep indentation.


[править] Команды центровки (выравнивания по центру)

M-s		center-line		Отцентровать текущую строку.
		center-paragraph	Отцентровать текущий параграф.
		center-region		Отцентровать текущий регион.


[править] Команды макросов

C-x (		start-kbd-macro		Начать определение нового макроса.
C-x )		end-kbd-macro		Законцить определение текущего макроса.
C-x e		call-last-kbd-macro	Вызвать последний записанный макрос.
M-(number) C-x e	call-last-kbd-maco	Вызвать последний записанный макрос (number) раз.
C-u C-x (	stat-kbd-macro		Execute last macro and add to it.
		name-last-kbd-macro	Name the last macro before saving it.
		insert-last-keyboard-macro	Insert the macro you made into a file.
		load-file			Загрузить файл с макросом.
C-x q		kbd-macro-query		Всатвить запрос в макрос.
M-C-c		exit-recursive-edit		Выйти из рекурсивного редактирования.

[править] Команды помощи

C-h a		command-apropos		Какая команда делает это?..
		apropos			Какие функции и переменные делают это?..
C-h c		describe-key-briefly	Какую команду выполняет эта комбинация клавиш?
C-h b		describe-bindings	Какие есть комбинации клавиш в текущем буфере?
C-h k		describe-key		Какую команду выполняет эта комбинация клавиш и что делает эта команда?
C-h l		view-lossage		Показать последние напечатанные 100 символов
C-h w		where-is		Какая комбинация клавиш делает это?
C-h f		describe-function	Что делает эта функция?
C-h v		describe-variable	Что это за переменная??
C-h m		describe-mode		Что это за режим?
C-h s		describe-syntax		Какой синтаксис в текущем буфере? (What is the syntax table for this buffer?)

[править] Внешний вид

C-x C-= Увеличить размер шрифта
C-x C-- Уменьшить размер шрифта

[править] Шпаргалки по комбинациям клавиш Emacs

  • How to Learn Emacs (англ.) — шпагралка от Саши Чу (Sasha Chua), элементарные комбинации клавиш

[править] Режимы

[править] Paredit

Минорный режим для ввода сбалансированных (скобка открывается, скобка закрывается) S-выражений. По мненинию многих очень сильно облегчает жизнь при вводе текста с большим количеством вложенных скобок (хотя по мнению некоторых, подходит только любителям бандажа и дисциплины).

[править] Evil

Режим имитации Vim-подобного интерфейса. Требует установки дополнительных пакетов.

Чтобы включить evil:

(require 'package)

(setq package-archives
  '(("gnu"         . "http://elpa.gnu.org/packages/")
    ("melpa"       . "http://melpa.milkbox.net/packages/")))

(package-initialize)

(when (not (package-installed-p 'evil))
  (package-refresh-contents)
  (package-install 'evil))

(evil-mode)

Переход в Emacs-режим: ctrl-z

Очень удобная надстройка над Emacs, построенная на базе Evil, прекрасно подходящая для тех, кто привык работать в Vim и хотел бы попробовать Emacs, это Spacemacs. Отличается очень красивым внешним видом и продуманным интерфейсом пользователя.

Spacemacs несколько отличается от простого Emacs, особенно в части управления модулями, конфигурацией и так далее. Поэтому, прежде чем переходить к инсталляции дополнительных модулей, или изменять конфигурацию редактора, лучше почитать немного о том, как работает управление конфигурацией в Spacemacs:

И сразу небольшой микросовет: по умолчанию Spacemacs пытается эмулировать комбинации клавиш Vim даже в режиме вставки. С одной стороны приятно, с другой — может быть, тогда проще было остаться в полноценном Vim?

Чтобы в режиме вставки работали все комбинации клавиш Emacs (кроме ESC, конечно же), нужно выполнить (или добавить в ~/.emacs.d/init.el[3]

(setcdr evil-insert-state-map nil)
(define-key evil-insert-state-map [escape] 'evil-normal-state)

[править] Ido

Ido (interactively do things) — специальный режим, позволяющий выполнять быстрый поиск в совершенно разнообразных контекстах, не по первым буквам, как это обычно принятно, а по любым последовательностям, находящимся в искомом тексте.

В особенности полезно при смене буферов.

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

[править] Tramp

Tramp (Transparent Remote Access, Multiple Protocol) — пакет, позволяющий редактировать в локальном редакторе удалённые файлы. Доступ осуществляется по ssh или по другим протоколам.

В современных версиях (22 и старше) Tramp входит в поставку автоматически и не требует никак дополнительных операций.

Дальше при открытии файла вы можете просто указывать название хоста перед именем файла. Emacs переносит файл на локальную машину и изменённый файл обратно прозрачно.

   C-x C-f /ssh:hostname:~/pathname

Tramp можно использовать и для того чтобы при вызове редактора на удалённой машине файл открывался на редактирование в локальном буфере. Подробно, как это сделать, описано здесь:

[править] Emacs и Clojure

[править] Emacs и Python

Rope и Pymacs:

[править] Вопросы и ответы

[править] Как поменять шрифт в Emacs?

Размер шрифта в Emacs 23 и старше: C-x C-+ и C-x C--

Выбор шрифта:

 (set-default-font "Inconsolata 12")

[править] Книги и прочие источники информации

You will never find a definitive Emacs book. Emacs arcana are passed on from druid to druid in the dead of night, using much ritual and gnashing of teeth.
Из ответа на вопрос "What is the best Emacs book out there?" на stackoverflow.com[4]

Очень много полезной информации есть на EmacsWiki. В частности, начать можно с EmacsNewbie.

В блоге emacs-fu[5] есть много всяких небольших советов по использованию Emacs, но с него не стоит начинать.

Есть книга про устройство текстовых редакторов, написанная в 90-х годах, в которой Emacs используется в качестве основного примера.

Книга "The Woodnotes Guide to Emacs for Writers" рассказывает о том, как использовать Emacs писателю. Упор сделан на редактирование текстов для людей, а не для компьютеров.

[править] Дополнительная информация

[править] Примечания

  1. http://pogue.blogs.nytimes.com/2007/08/29/be-careful-what-you-joke-about/
  2. Источник: http://welinux.ru/post/2819/
  3. http://puntoblogspot.blogspot.de/2014/01/evil-exact-amount-of-vim-in-emacs-but.html
  4. http://stackoverflow.com/questions/658095/what-is-the-best-emacs-book-out-there
  5. http://emacs-fu.blogspot.com/
Источник — «http://xgu.ru/wiki/Emacs»