Emacs


Начало работы

Запуск Emacs

Чтобы войти в Emacs, достаточно набрать его название: ``Сценарий оболочки $ emacs


------

| - | - |
|-------------|------------------------|
| `C-z` | Приостановить работу Emacs |
| `C-x` `C-c` | Выйти из Emacs навсегда |
{.shortcuts}

### Глобальное описание {.secondary}
| - | - |
|-----------|---------------------------------------------|
| `C-<key>` | Означает удерживание клавиши управления и нажатие `<key>` |
| `M-<key>` | Означает однократное нажатие клавиши Esc и нажатие `<key>` |
{.shortcuts}

ПРИМЕЧАНИЕ: В данной шпаргалке соблюдаются вышеуказанные правила.


### Motion {.row-span-2}

| Backward | Forward | Entity to move over |
|-----------|-----------|--------------------------------|
| `C-b` | `C-f` | Характер |
| `M-b` | `M-f` | Слово |
| `C-p` | `C-n` | Line |
| `C-a` | `C-e` | Начало строки<br/>_(или конец)_ |
| `M-a` | `M-e` | Предложение |
| `M-{` | `M-}` | Абзац |
| `C-x` `[` | `C-x` `]` | Страница |
| `C-M-b` | `C-M-f` | Sexp |
| `C-M-a` | `C-M-e` | Функция |
| `M-<` | `M->` | Начало<br>_(или конец)_ | буфера.
{.shortcuts .show-header}



### Case Change

| - | - |
|-------------|------------------|
| `M-u` | Слово в верхнем регистре |
| `M-l` | Слово в нижнем регистре |
| `M-c` | Слово с заглавной буквы |
| `C-x` `C-u` | Регион в верхнем регистре |
| `C-x` `C-l` | область нижнего регистра |
{.shortcuts}



### Файлы

| - | - |
|-------------|--------------------------------------------------|
| `C-x` `C-f` | Чтение файла в Emacs |
| `C-x` `C-s` | Сохранить файл на диск |
| `C-x` `S` | Сохранить все файлы |
| `C-x` `i` | Вставить содержимое другого файла в этот буфер |
| `C-x` `C-v` | Заменить этот файл своим файлом |
| `C-x` `C-w` | Записать буфер в указанный файл |
| `C-x` `C-q` | Переключить статус буфера только для чтения |
{.shortcuts}




### Восстановление ошибок

| - | - |
|-----------------------------|--------------------------------------------|
| `C-g` | Прервать частично набранную или выполняемую команду |
| `M-x` recover-session | Восстановить файлы, потерянные в результате сбоя системы |
| `C-x` `u`<br>`C-_`<br>`C-/` | Отменить нежелательное изменение |
| `M-x` revert-buffer | Восстановление исходного содержимого буфера |
| `C-l` | Перерисовать захламленный экран |
{.shortcuts}




### Транспонирование {.row-span-2}

| - | - |
|-------------|----------------------|
| `C-t` | Транспонировать символы |
| `M-t` | Транспонировать слова |
| `C-x` `C-t` | Transpose lines |
| `C-M-t` | Transpose sexps |
{.shortcuts}

#### Прокрутка

| - | - |
|-----------|--------------------------------------------------|
| `C-v` | Прокрутка к следующему экрану |
| `M-v` | Прокрутка к предыдущему экрану |
| `C-x` `<` | Прокрутка влево |
| `C-x` `>` | Прокрутка вправо |
| `C-l` | Прокрутка текущей строки до <br>_центра, верха, низа_ |
{.shortcuts}

#### Goto

| - | - |
|-----------|---------------------|
| `M-g` `g` | Goto line |
| `M-g` `c` | Goto char |
| `M-m` | Вернуться к отступам |
{.shortcuts}





### Маркировка

| - | - |
|-------------------|-------------------------|
| `C-@`<br/> `C-SPC` | Отметка Uet здесь |
| `C-x` `C-x` | Обменять точку и метку |
| `M-@` | Установить метку arg слов |
| `M-h` | Отметить абзац |
| `C-x` `C-p` | Пометить страницу |
| `C-M-@` | Mark sexp |
| `C-M-h` | Отметить функцию |
| `C-x` `h` | Отметить весь буфер |
{.shortcuts}




### Убийство и удаление {.row-span-2}

| Backward | Forward | Entity to kill |
|---------------|---------|--------------------------|
| `DEL` | `C-d` | Символ <br>_(удалить)_ |
| `M-DEL` | `M-d` | Слово |
| | `M-0` `C-k` | `C-k` | Строка <br/> _(до конца)_ |
| `C-x` `DEL` | `M-k` | Приговор |
| `M--` `C-M-k` | `C-M-k` | Sexp |
{.shortcuts .show-header}
#### Убийство

| - | - |
|------------|--------------------------------------|
| `C-W` | Убить регион C-w |
| `M-w` | Скопировать регион в кольцо уничтожения |
| `M-z` char | Убивать через следующее вхождение символа |
| `C-y` | Вернуть последнее убитое |
| `M-y` | Заменить последнее выдергивание на предыдущее убийство |
{.shortcuts}





### Получение помощи

| - | - |
|-----------|------------------------------------------|
| `C-x` `1` | Удалить окно справки |
| `C-M-v` | Прокрутить окно справки |
| `C-h` `a` | Apropos: показать команды, соответствующие строке |
| `C-h` `k` | Описать функцию, которую выполняет клавиша |
| `C-h` `f` | Описать функцию |
| `C-h` `m` | Получение информации о режиме |
{.shortcuts}

Система помощи проста. Наберите `C-h` (или `F1`) и следуйте указаниям. Если вы впервые используете программу, наберите `C-h` `t` для получения инструкций.




### Несколько окон {.col-span-2}
Если показаны две команды, то вторая является аналогичной командой для фрейма, а не для окна.
| - | - | - |
|---------------|-----------|-------------------------------|
| `C-x` `5` `1` | `C-x` `1` | Удалить все остальные окна |
| `C-x` `5` `2` | `C-x` `2` | Разделить окно, сверху и снизу |
| `C-x` `5` `0` | `C-x` `0` | Удалить это окно |

| `C-x` `3` || Разделить окно по бокам |
| `C-M-v` || Прокрутить другое окно |

| `C-x` `5` `o` | `C-x` `o` | Переключение курсора на другое окно |
| `C-x` `5` `b` | `C-x` `4` `b` | Выделить буфер в другом окне |
| `C-x` `5` `C-o` | `C-x` `4` `C-o` | Отображение буфера в другом окне |
| `C-x` `5` `f` | `C-x` `4` `f` | Найти файл в другом окне |
| `C-x` `5` `r` | `C-x` `4` `r` | Найти файл только для чтения в другом окне |
| `C-x` `5` `d` | `C-x` `4` `d` | Запустить Dired в другом окне |
| `C-x` `5` `.` | `C-x` `4` `.` | Найти метку в другом окне |

| `C-x` `^` || Увеличить окно в высоту |
| `C-x` `{` || Уменьшить окно |
| `C-x` `}` || Увеличить окно в ширину |
{.shortcuts}




### Форматирование

| - | - |
|-------------|------------------------------------------|
| `TAB` | Отступ от текущей строки (зависит от режима)|
| `C-M-\` | Отступ региона (зависит от режима)|
| `C-M-q` | Indent sexp (зависит от режима)|
| | `C-x` `TAB` | Отступ области жестко аргументированных колонок |
| `M-;` | Отступ для комментария |
| `C-o` | Вставить новую строку после точки |
| `C-M-o` | Переместить остаток строки вертикально вниз |
| `C-x` `C-o` | Удалить пустые строки вокруг точки |
| `M-^` | Присоединить строку к предыдущей (с arg, next) |
| `M-\` | Удалить все белое пространство вокруг точки |
| `M-SPC` | Поставить в точке ровно один пробел |
| `M-q` | Заполнить абзац |
| `C-x` `f` | Установить столбец заполнения на arg |
| `C-x` `.` | Установить префикс, с которого начинается каждая строка |
| `M-o` | Установить лицо |
{.shortcuts}




### Информация {.row-span-2}

| - | - |
|-----------|---------------------------------------------|
| `C-h` `i` | Вход в программу чтения документации Info |
| `C-h` `S` | Найти указанную функцию или переменную в Info |
{.shortcuts}

#### Перемещение внутри узла

| - | - |
|-------|-------------------|
| `SPC` | Прокрутка вперед |
| `DEL` | Прокрутка назад |
| `b` | Начало узла |
{.shortcuts}

#### Перемещение между узлами

| - | - |
|-----|----------------------------------------|
| `n` | Следующий узел |
| `p` | Предыдущий узел |
| `u` | Перемещение вверх |
| | `m` | Выбор пункта меню по имени |
| `n` | Выбор n-го пункта меню по номеру (1-9)|
| `f` | Перекрестная ссылка (возврат с помощью l)|
| `l` | Возврат к последнему просмотренному узлу |
| `d` | Возврат к узлу каталога |
| `t` | Переход к верхнему узлу файла Info |
| `g` | Переход к любому узлу по имени |
{.shortcuts}

#### Другое

| - | - |
|-----|----------------------------------|
| `h` | Запустить информационный учебник |
| `i` | Поиск темы в индексах |
| | `s` | Поиск узлов по regexp |
| `q` | Выход из Info |
{.shortcuts}




### Минибуфер
В минибуфере определены следующие ключи.
| - | - |
|-------|-----------------------------------------|
| `TAB` | Завершить как можно больше |
| `SPC` | Завершить до одного слова |
| `RET` | Завершить и выполнить |
| `?` | Показать возможные завершения |
| `M-p` | Получить предыдущий ввод из минибуфера |
| `M-n` | Получить последующие данные из мини-буфера или по умолчанию |
| `M-r` | Регексп-поиск в обратном направлении по истории |
| `M-s` | Регексп с поиском вперед по истории |
| `C-g` | Прервать команду |
{.shortcuts}

Введите `C-x` `ESC` `ESC` для редактирования и повторения последней команды, в которой использовался минибуфер. Наберите `F10` для активации пунктов строки меню на текстовых терминалах.





### Теги

| - | - |
|--------------------------|--------------------------------------------|
| `M-.` | Найти тег (определение) |
| `C-u` `M-.` | Найти следующее вхождение тега |
| `M-x` visit-tags-table | Задать новый файл тегов |
| `M-x` tags-search | Regexp-поиск по всем файлам в таблице тегов |
| `M-x` tags-query-replace | Выполнить запрос-замену для всех файлов |
| `M-,` | Продолжить поиск по последним тегам или запрос-замену |
{.shortcuts}



### Прямоугольники

| - | - |
|---------------|-------------------------------------|
| `C-x` `r` `r` | Скопировать прямоугольник в регистр |
| `C-x` `r` `k` | Убить прямоугольник |
| `C-x` `r` `y` | Выдернуть прямоугольник |
| `C-x` `r` `o` | Открыть прямоугольник, сдвинув текст вправо |
| `C-x` `r` `c` | Заглушить прямоугольник |
| `C-x` `r` `t` | Префикс каждой строки с помощью строки |
{.shortcuts}



### Макросы клавиатуры

| - | - |
|---------------------------|-------------------------------------|
| `C-x` `(` | Начать определение макроса клавиатуры |
| `C-x` `)` | Завершить определение клавиатурного макроса |
| `C-x` `e` | Выполнить последний заданный макрос клавиатуры |
| `C-u` `C-x` `(` | Добавить к последнему клавиатурному макросу |
| `M-x` name-last-kbd-macro | Назвать последний макрос клавиатуры |
| `M-x` insert-kbd-macro | Вставить определение Lisp в буфер |
{.shortcuts}




### Буферы

| - | - |
|-------------|-----------------------|
| `C-x` `b` | Выберите другой буфер |
| `C-x` `C-b` | Список всех буферов |
| `C-x` `k` | Убить буфер |
{.shortcuts}



Emacs Search{.cols-3}
------



### Regex (common) {.row-span-2}

| - | - |
|---------------|----------------------------------------------|
| `.` `(точка)` | Любой одиночный символ, кроме новой строки |
| `*` | Ноль или более повторов |
| `+` | Один или более повторов |
| `?` | Ноль или один повтор |
| `\` | Кавычки для специальных символов |
| `\c` | Специальный символ c в кавычках регулярного выражения |
| `\|` | Альтернатива ("или")|
| `\(...\)` | Группировка |
| `\(:?...\)` | Застенчивая группировка |
| `\(:NUM...\)` | Явная нумерованная группировка |
| `\n` | Тот же текст, что и в n-й группе |
| `\b` | При разрыве слова |
| `\B` | Без разрыва слова |

### Regex (запись)
| Начало | Конец | Сущность |
|-------|-------|--------|
| `^` | `$` | Line |
| `\<` | `\>` | Слово |
| `\_<` | `\_>` | Символ |
| `\'` | `\'` | Буфер |
{.show-header}

### Regex (конфликт)

| Эти | Другие | класс |
|---------|----------|---------------------------|
| | `[...]` | `[^...]` | Явный набор |
| `\w` | `\W` | Символ синтаксиса слова |
| `\sc` | `\Sc` | Символ с синтаксисом c |
| `\cc` | `\Cc` | Символ с категорией c |
{.show-header}


### Инкрементный поиск

| - | - |
|---------|-----------------------------------|
| `C-s` | Поиск вперед |
| `C-r` | Поиск в обратном направлении |
| `C-M-s` | Поиск по регулярным выражениям |
| `C-M-r` | Обратный поиск по регулярным выражениям |
| `M-p` | Выбрать предыдущую строку поиска |
| `M-n` | Выбрать следующую последующую строку поиска |
| `RET` | Выход из инкрементного поиска |
| `DEL` | Отменить действие последнего символа |
| `C-g` | Прервать текущий поиск |
{.shortcuts}

Для повторения поиска в любом направлении используйте `C-s` или `C-r`. Если Emacs продолжает поиск, то `C-g` отменяет только ту часть, которая не была найдена.




### Замена запроса

| - | - |
|--------------|--------------------------------------|
| `M-%` | Интерактивная замена текстовой строки |
| `M-x` regexp | Использование регулярных выражений |
| `SPC` / `y` | Заменить эту строку, перейти к следующей |
| `,` | Заменить этот, не переходить |
| `DEL` / `n` | Переход к следующему без замены |
| `!` | Заменить все оставшиеся совпадения |
| `^` | Возврат к предыдущему совпадению |
| `RET` | Выход из запроса-замены |
| `C-r` | Вход в рекурсивное редактирование (C-M-c для выхода) |
{.shortcuts}



Misc
----


### Оболочки

| - | - |
|-------------|----------------------------------------|
| `M-!` | Выполнить команду оболочки |
| `M-&` | Выполнить команду оболочки асинхронно |
| `M-` | Выполнить команду оболочки в регионе |
| `C-u` `M-` | Фильтровать регион с помощью команды оболочки |
| `M-x` shell | Запуск оболочки в окне shell |
{.shortcuts}



### Международные наборы символов {.col-span-2}

| - | - |
|----------------------------|------------------------------------|
| `C-x` `RET` `l` | указать основной язык |
| `M-x` list-input-methods | показать все методы ввода |
| `C-\` | включить или выключить метод ввода |
| `C-x` `RET` `c` | установить систему кодирования для следующей команды |
| `M-x` list-coding-systems | показать все системы кодирования |
| `M-x` prefer-coding-system | выбрать предпочтительную систему кодирования |
{.shortcuts}


### Регистры

| - | - |
|-----------------|--------------------------------------|
| `C-x` `r` `s` | Сохранить регион в регистре |
| `C-x` `r` `i` | Вставить содержимое регистра в буфер |
| `C-x` `r` `SPC` | Сохранить значение точки в регистре |
| `C-x` `r` `j` | Переход к точке, сохраненной в регистре |
{.shortcuts}




### Разное

| - | - |
|------------|-------------------|
| `C-u` num | Числовой аргумент |
| `M--` | Отрицательный аргумент |
| `C-q` char | Вставка в кавычках |
{.shortcuts}



### Команды, работающие с Emacs Lisp

| - | - |
|--------------------|------------------------------------|
| `C-x` `C-e` | Eval sexp before point |
| `C-M-x` | Eval current defun |
| `M-x` eval-region | Eval region |
| `M-:` | Чтение и оценка минибуфера |
| | `M-x` load-library | Загрузка библиотеки Lisp из load-path |
{.shortcuts}




### Простая настройка

| - | - |
|-------------------|-------------------------------|
| `M-x` `customize` | настройка переменных и лиц |

Создание глобальных привязок клавиш в Emacs Lisp:

``` {.wrap}
(global-set-key (kbd "C-c g") 'search-forward)
(global-set-key (kbd "M-#") 'query-replace-regexp)

Аббревиатуры

- -
C-x a g Добавить глобальную аббревиатуру
C-x a l Добавить локальную аббревиатуру
C-x a i g Добавить глобальное расширение для этой аббревиатуры
C-x a i l Добавить режимно-локальное расширение для этой аббревиатуры
C-x a e
M-/ Динамически расширять предыдущее слово
{.shortcuts}

Проверка орфографии

- -
M-$ Проверка орфографии текущего слова
M-x ispell-region Проверка орфографии всех слов в регионе
M-x ispell-buffer Проверка орфографии всего буфера
M-x flyspell-mode Включить проверку орфографии “на лету”
{.shortcuts}

Команды записи

Синтаксис

(defun command-name (args)
"documentation" (interactive "template")
body)

Пример

(defun this-line-to-top-of-window (line))
    "Перепозиционирует текущую строку в верхнюю часть окна.
С префиксным аргументом LINE поставить точку на LINE."
    (interactive "P")
    (recenter (if (null line)
                  0
              (prefix-numeric-value line))))

В спецификации interactive указано, как читать аргументы в интерактивном режиме. Для получения более подробной информации наберите C-h f interactive RET.