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-выражений. По мненинию многих очень сильно облегчает жизнь при вводе текста с большим количеством вложенных скобок (хотя по мнению некоторых, подходит только любителям бандажа и дисциплины).
- http://www.emacswiki.org/ParEdit
- The Animated Guide to Paredit (англ.) — введение в paredit с приятной и очень наглядной анимацией
[править] 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 Documentation/Configuration layers — документация по слоям конфигурации (configuration layers) в Spacemacs
- Configuring Spacemacs: A Tutorial (англ.)
И сразу небольшой микросовет: по умолчанию 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) — специальный режим, позволяющий выполнять быстрый поиск в совершенно разнообразных контекстах, не по первым буквам, как это обычно принятно, а по любым последовательностям, находящимся в искомом тексте.
В особенности полезно при смене буферов.
- http://www.masteringemacs.org/article/introduction-to-ido-mode
- http://emacswiki.org/emacs/InteractivelyDoThings
[править] Пакеты
[править] 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:
- Rope (англ.) — инструмент для рефакторинга кода Python
- Ropemacs (англ.) — привязка Rope к Emacs
- Installing Pymacs + Rope (англ.)
- Clear steps to install pymacs with emacs 24? — как поставить 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.
- http://www.emacswiki.org/ (англ.)
- http://www.emacswiki.org/emacs/EmacsNewbie (англ.)
В блоге emacs-fu[5] есть много всяких небольших советов по использованию Emacs, но с него не стоит начинать.
Есть книга про устройство текстовых редакторов, написанная в 90-х годах, в которой Emacs используется в качестве основного примера.
- The Craft of Editing (англ.), книга вместе с её исходниками и PDF
Книга "The Woodnotes Guide to Emacs for Writers" рассказывает о том, как использовать Emacs писателю. Упор сделан на редактирование текстов для людей, а не для компьютеров.
[править] Дополнительная информация
- Famous Emacs Users (that are not famous for using Emacs) (англ.) — известные пользователи Emacs (насчёт Линуса Торвальдса спорно)
[править] Примечания
- ↑ http://pogue.blogs.nytimes.com/2007/08/29/be-careful-what-you-joke-about/
- ↑ Источник: http://welinux.ru/post/2819/
- ↑ http://puntoblogspot.blogspot.de/2014/01/evil-exact-amount-of-vim-in-emacs-but.html
- ↑ http://stackoverflow.com/questions/658095/what-is-the-best-emacs-book-out-there
- ↑ http://emacs-fu.blogspot.com/