Перейти к содержимому

Как установить emacs на windows

  • автор:

GNU Emacs

Emacs

Emacs runs on several operating systems regardless of the machine type. The main ones are: GNU, GNU/Linux, FreeBSD, NetBSD, OpenBSD, MacOS, MS Windows and Solaris.

You can download GNU Emacs releases from a nearby GNU mirror; or if automatic redirection does not work see the list of GNU mirrors, or use the main GNU ftp server.

GNU Emacs source code and development is hosted on savannah.gnu.org.

GNU/Linux

Most GNU/Linux distributions provide GNU Emacs in their repositories, which is the recommended way to install Emacs unless you always want to use the latest release.

If your GNU/Linux distribution includes a graphical package manager, this is often the easiest way to install Emacs. Please refer to the documentation for your distribution for full instructions on how to install a package.

You might prefer installing from the command-line. Here are some of the commands that various GNU/Linux distributions use to install a package named emacs .

guix package -i emacs
sudo apt-get install emacs
sudo pacman -S emacs
sudo dnf install emacs
sudo zypper install emacs

On some systems, the package name must include the Emacs version number, such as emacs-27.1 , instead of emacs .

BSDs

The BSDs provide GNU Emacs in their repositories, which is the recommended way to install Emacs unless you always want to use the latest release.

Nonfree systems

The reason for GNU Emacs’s existence is to provide a powerful editor for the GNU operating system. Versions of GNU, such as GNU/Linux, are the primary platforms for Emacs development.

However, GNU Emacs includes support for some other systems that volunteers choose to support.

The purpose of the GNU system is to give users the freedom that proprietary software takes away from its users. Proprietary operating systems (like other proprietary programs) are an injustice, and we aim for a world in which they do not exist.

To improve the use of proprietary systems is a misguided goal. Our aim, rather, is to eliminate them. We include support for some proprietary systems in GNU Emacs in the hope that running Emacs on them will give users a taste of freedom and thus lead them to free themselves.

Windows

GNU Emacs for Windows can be downloaded from a nearby GNU mirror; or the main GNU FTP server.
Mostly simply, download and run the emacs- version -installer.exe which will install Emacs and create shortcuts for you. Alternately, download emacs- version .zip then unzip, preserving the directory structure. You can then run bin\runemacs.exe or create a desktop shortcut to bin\runemacs.exe and start Emacs by double-clicking on that shortcut’s icon.

The Windows binaries are signed by Corwin Brust ECE7 7CF4 17C7 6C1A CFCE 7C2B 5B61 3551 1580 F007 .

MSYS2 users can install Emacs (64bits build) with the following:

pacman -S mingw-w64-x86_64-emacs

For the 32bits build, run:

pacman -S mingw-w64-i686-emacs

MacOS

Emacs can be installed on MacOS using Homebrew.

brew install --cask emacs
sudo port install emacs-app

The Emacs for OSX website also provides universal binaries.

Copyright 2015-2023 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110, USA

This website is licensed under the CC BY-SA 4.0 License.

Как установить emacs на windows

@hyphenation При использовании X Window System вы можете создавать в одном сеансе Emacs несколько окон уровня оконной системы. Каждое принадлежащее Emacs X-окно показывает один фрейм , который может содержать одно или несколько окон Emacs. Изначально фрейм содержит одно окно Emacs общего назначения, которое вы можете поделить вертикально или горизонтально на меньшие. Обычно фрейм имеет собственную эхо-область и минибуфер, но вы можете сделать фреймы без них — они будут использовать эхо-область и минибуфер другого фрейма.

Редактирование в одном фрейме затрагивает и другие фреймы. К примеру, если вы поместите текст в список уничтожений в одном фрейме, вы можете восстановить его в другом. Если вы выходите из Emacs через C-x C-c в одном фрейме, это удалит все фреймы. Чтобы удалить только один фрейм, используйте C-x 5 0 .

Чтобы избежать путаницы, мы резервируем слово «окно» для тех окон, которые реализует сам Emacs, и никогда не используем его для обозначения фрейма.

Emacs, скомпилированный для MS-DOS, эмулирует некоторые аспекты оконной системы, так что вы сможете использовать многие возможности из описанных в этой главе. See section Клавиатура и мышь в MS-DOS, для дальнейшей информации.

Команды мыши для выделения и копирования области в основном совместимы с командами программы @command. Вы можете пользоваться одними и теми же командами мыши для обмена текстом между Emacs другими X-клиентами.

Если вы выделите область с помощью любой из этих команд и сразу же после этого нажмете функциональную клавишу DELETE , она удалит выделенную область. Функциональная клавиша BACKSPACE или ASCII-знак DEL не делают этого; и если вы нажмете между командой мыши и DELETE какую-то другую клавишу, DELETE не подействует таким образом.

Mouse-1 Перемещает точку туда, где вы щелкнули ( mouse-set-point ). Обычно это левая кнопка. Drag-Mouse-1 Устанавливает область вокруг текста, по которому вы провели, и копирует этот текст в список уничтожений ( mouse-set-region ). С помощью этой команды вы можете указать оба конца области. Если при проведении мышью вы переместите ее за верхний или нижний предел окна, это окно непрерывно прокручивается, пока вы не вернете в него мышь. Таким способом вы можете выделять области, не умещающиеся на экране. Число прокручиваемых за один шаг строк зависит от того, насколько далеко за край окна ушла мышь; минимальный размер шага определяет переменная mouse-scroll-min-lines . Mouse-2 Восстанавливает последний уничтоженный текст в том месте, где вы щелкнули ( mouse-yank-at-click ). Обычно это средняя кнопка. Mouse-3 Эта команда, mouse-save-then-kill , имеет несколько назначений в зависимости от того, где вы щелкнули, и от состояния области. Самый основной случай — это когда вы щелкаете Mouse-1 в одном месте, а затем Mouse-3 в другом. Это выделяет текст между двумя этими позициями в качестве области. Это также копирует новую область в список уничтожений, чтобы вы могли скопировать его в другое место. Если вы щелкните в тексте Mouse-1 , прокрутите окно с помощью полоски прокрутки и затем щелкните Mouse-3 , Emacs запомнит, где была точка перед прокруткой (где вы поместили ее с помощью Mouse-1 ), и использует эту позицию как другой конец области. Это сделано, чтобы вы могли выделять области, которые не умещаются полностью на экране. В более общем виде, если у вас нет подсвеченной области, Mouse-3 выделяет в качестве области текст между точкой и местом щелчка. Она делает это, устанавливая метку там, где была точка, и перемещая точку к той позиции, где вы щелкнули. Если у вас есть подсвеченная область, или если область была установлена непосредственно перед этим с помощью проведения кнопкой 1, Mouse-3 подстраивает ближайший конец области, перемещая его к месту щелчка. Также, текст подстроенной области замещает в списке уничтожений текст старой области. Если вы изначально задали область, используя двойной или тройной щелчок Mouse-1 , чтобы определить область как состоящую из целых слов или строк, то подстройка области с помощью Mouse-3 также проходит по целым словам или строкам. Если вы примените Mouse-3 два раз подряд на одном месте, вы уничтожите уже выделенную область. Double-Mouse-1 Этот ключ устанавливает область вокруг слова, на котором вы щелкнули. Если вы щелкнули на знаке с синтаксической категорией «symbol» (например, на подчерке в режиме C), он устанавливает область вокруг символа, которому принадлежит этот знак. Если вы щелкнули на знаке с синтаксической категорией открывающей или закрывающей круглой скобки, область устанавливается вокруг группы (s-выражения), которая завершается или начинается на этом знаке. Если вы щелкнули на знаке с синтаксической категорией разделителя строк (таком как кавычка или двойные кавычки в Си), область будет установлена вокруг этой строковой константы (с использованием эвристики, чтобы выяснить, является ли этот знак начинающим или завершающим). Double-Drag-Mouse-1 Этот ключ выделяет область, состоящую из слов, по которым вы провели. Triple-Mouse-1 Этот ключ устанавливает область вокруг строки, на которой вы щелкнули. Triple-Drag-Mouse-1 Этот ключ выделяет область, состоящую из строк, по которым вы провели.

Простейший способ уничтожить текст с помощью мыши — нажать Mouse-1 в одном конце, а затем дважды нажать Mouse-3 на другом. See section Удаление и уничтожение. Чтобы скопировать текст в список уничтожений, не удаляя его из буфера, нажмите Mouse-3 только один раз или просто проведите по этому тексту с прижатой Mouse-1 . Потом вы можете скопировать этот текст в другое место восстановлением.

Чтобы восстановить уничтоженный или скопированный текст в другое место, переведите туда мышь и нажмите Mouse-2 . See section Восстановление. Однако, если mouse-yank-at-point не равна nil , Mouse-2 восстанавливает в точке. Тогда не имеет значения, где вы щелкаете, или даже в каком из окон фрейма вы щелкаете. Значение по умолчанию равно nil . Эта переменная влияет также на восстановление вторичного выделения.

Чтобы скопировать текст в другое X-окно, уничтожьте его или сохраните в списке уничтожений. Под X это кроме того установит первичное выделение . Затем используйте в программе, работающей в другом окне, команду «вставить», чтобы вставить текст выделения.

Чтобы скопировать текст из другого X-окна, используйте в программе, работающей в другом окне, команды «вырезать» или «копировать», чтобы выделить нужный вам текст. Затем восстановите его в Emacs с помощью C-y или Mouse-2 .

Эти команды вырезания и вставки работают также и в MS-Windows.

Когда Emacs помещает текст в список уничтожений или перекладывает текст на вершину списка уничтожений, он устанавливает первичное выделение X-сервера. Именно таким образом другие X-клиенты могут получить доступ к этому тексту. Emacs также сохраняет текст в буфере вырезок, но только если этот текст достаточно короткий ( x-cut-buffer-max задает максимальное число знаков); помещение в буфер вырезок длинных строк может быть медленным.

Команды восстановления первого вхождения списка уничтожений на самом деле сначала проверяют, нет ли первичного выделения из других программ; после этого они проверяют, нет ли текста в буфере вырезок. Если ни тот, ни другой источник не предоставляют текста для восстановления, используется содержимое списка уничтожений.

Вторичное выделение — это другой способ выделения текста с использованием X Windows. Оно не использует точку или метку, поэтому вы можете использовать его для уничтожения текста без установки точки или метки. M-Drag-Mouse-1 Устанавливает вторичное выделение с одним концом в том месте, где вы нажали кнопку, и другим — в том, где вы ее отпустили ( mouse-set-secondary ). Когда вы проводите мышью, появляется и изменяется подсветка. Если при проведении мышью вы сдвинете ее за верхний или нижний предел окна, это окно непрерывно прокручивается, пока вы не вернете в него мышь. Таким способом вы можете выделять области, не умещающиеся на экране. M-Mouse-1 Устанавливает одну из граничных точек вторичного выделения ( mouse-start-secondary ). M-Mouse-3 Создает вторичное выделение, используя место, указанное с помощью M-Mouse-1 как его второй конец ( mouse-secondary-save-then-kill ). Второй щелчок на этом же месте уничтожает только что сделанное вторичное выделение. M-Mouse-2 Вставляет в месте щелчка вторичное выделение ( mouse-yank-secondary ). Это помещает точку в конец восстановленного текста.

Двойные и тройные щелчки M-Mouse-1 действуют на слова и строки, во многом как для Mouse-1 .

Если mouse-yank-at-point не равна nil , M-Mouse-2 восстанавливает в точке. Тогда не имеет значения, где вы щелкнули; главное, в каком окне. See section Команды мыши для редактирования.

Некоторые буферы Emacs показывают различного рода перечни. Это перечни файлов, буферов, возможных завершений, совпадений с образцом и так далее.

Поскольку восстановление в этих буферах бессмысленно, в большинстве из них Mouse-2 определена особо, как команда для использования или просмотра пункта, на котором вы щелкнули.

Например, если вы щелкните Mouse-2 на имени файла в буфере Dired, вы обратитесь к этому файлу. Если вы щелкните Mouse-2 на сообщении об ошибке в буфере `*Compilation*’ , вы перейдете к исходному коду для этого сообщения. Если вы щелкните Mouse-2 на завершении в буфере `*Completions*’ , вы выберете это завершение.

Обычно вы можете судить о том, имеет ли Mouse-2 особое значение, по тому, что чувствительный текст подсвечивается, когда вы проводите над ним мышь.

Щелчки мыши, модифицированные с помощью клавиш CTRL и SHIFT , выводят меню.

C-Mouse-1 Это меню для выбора буфера. C-Mouse-2 Это меню для задания начертаний и других свойств текста для редактирования форматированного текста. See section Редактирование форматированного текста. C-Mouse-3 Это меню определяется режимом. Для большинства режимов данное меню имеет те же пункты, что содержатся во всех определяемых режимом меню из полоски меню. Некоторые режимы могут определять для этой кнопки другое меню.(4) S-mouse-1 Это меню для задания основного шрифта фрейма.

Вы можете использовать мышь на строке режима для выбора окон и манипуляций с ними. Mouse-1 Mouse-1 на строке режима выбирает окно сверху. Проводя мышью с нажатой на строке режима Mouse-1 , вы можете перемещать эту строку режима, изменяя таким образом высоту окон сверху и снизу. Mouse-2 Mouse-2 на строке режима раскрывает окно на весь фрейм. Mouse-3 Mouse-3 на строке режима удаляет окно сверху. C-Mouse-2 C-Mouse-2 на строке режима разбивает окно сверху по вертикали в том месте, где вы щелкнули.

C-Mouse-2 на полоске прокрутки разбивает соответствующее окно по горизонтали. See section Разделение окон.

Префиксный ключ C-x 5 аналогичен C-x 4 , и на них определены параллельные подкоманды. Разница между ними в том, что команды с C-x 5 создают новый фрейм, а не просто новое окно в выбранном фрейме (see section Изображение в другом окне). Если запрошенный материал уже показывается в существующем видимом или минимизированном фрейме, эти команды используют существующий фрейм после его поднимания или деминимизации по необходимости.

Команды на C-x 5 различаются по тому, как они находят или создают буфер для выбора: C-x 5 2 Создает новый фрейм ( make-frame-command ). C-x 5 b имя-буфера RET Выбирает буфер имя-буфера в другом фрейме. Это запускает switch-to-buffer-other-frame . C-x 5 f имя-файла RET Обращается к файлу имя-файла и выбирает его буфер в другом фрейме. Это запускает find-file-other-frame . See section Обращение к файлам. C-x 5 d каталог RET Выбирает буфер Dired для каталога каталог в другом фрейме. Это запускает dired-other-frame . See section Dired, редактор каталогов. C-x 5 m Позволяет начать составление почтового сообщения в другом фрейме ( mail-other-frame ). Это вариант C-x m , работающий в другом фрейме. See section Посылка почты. C-x 5 . Обращается к тегу из текущей таблицы тегов в другом фрейме. Это запускает find-tag-other-frame , вариант M-. , работающий с несколькими фреймами. See section Таблицы тегов. C-x 5 r имя-файла RET Обращается к файлу имя-файла в режиме только для чтения и выбирает его буфер в другом фрейме. Это запускает find-file-read-only-other-frame . See section Обращение к файлам.

Вы можете управлять видом вновь создаваемых фреймов, устанавливая параметры фрейма в default-frame-alist . Для задания параметров, относящихся только к начальному фрейму, вы можете использовать переменную initial-frame-alist . @xref, The Emacs Lisp Reference Manual>, для дальнейшей информации.

Простейший способ указать основной шрифт для всех фреймов Emacs — через X-ресурс (see section Ключи для задания шрифта), но вы также можете сделать это, изменив default-frame-alist так, чтобы в нем задавался параметр font , как показано здесь:

(add-to-list 'default-frame-alist '(font . "10x20"))

Фрейм Emacs может иметь speedbar , то есть вертикальное окно, служащее как меню с возможностью прокрутки для файлов, к которым вы можете обратиться, и тегов внутри этих файлов. Чтобы создать speedbar, введите M-x speedbar ; это создает окно speedbar для выбранного фрейма. После этого вы можете щелкнуть в speedbar на имени файла, чтобы обратиться к нему в соответствующем фрейме Emacs, или щелкнуть на имени тега, чтобы перескочить к нему соответствующем фрейме.

Изначально speedbar перечисляет непосредственное содержание текущего каталога по одному файлу на строке. В каждой строке также есть кнопка, `[+]’ или `’ , на которой вы можете щелкнуть Mouse-2 , чтобы «открыть» содержимое данного элемента. Если на этой строке перечислен каталог, то при открытии к показанному в speedbar добавляется содержание этого каталога под его собственной строкой. Если на строке перечислен обычный файл, при его открытии к содержимому speedbar добавляется список тегов из этого файла. Когда файл открывается, `[+]’ заменяется на `[-]’ ; вы можете щелкнуть на этой кнопке, чтобы «закрыть» этот файл (скрыть его содержание).

Некоторые основные режимы, включая режим Rmail, Info и GUD, имеют специализированные способы поместить в speedbar другие полезные вещи. Например, в режиме Rmail speedbar показывает перечень Rmail-файлов и позволяет вам перенести текущее сообщение в другой Rmail-файл, щелкнув на кнопке `’ .

Speedbar принадлежит одному фрейму Emacs и всегда работает с этим фреймом. Если вы используете несколько фреймов, вы можете сделать speedbar для некоторых или для всех из них; чтобы сделать speedbar для любого данного фрейма, наберите в нем M-x speedbar .

Один Emacs может общаться более чем с одним дисплеем X Windows. Изначально Emacs использует только один дисплей — тот, что указан в переменной среды @env или с помощью ключа @option (see section Ключи запуска). Чтобы подсоединиться к другому дисплею, воспользуйтесь командой make-frame-on-display :

M-x make-frame-on-display RET дисплей RET Создает новый фрейм на дисплее дисплей .

Один X-сервер может обрабатывать более одного экрана. Когда вы открываете фреймы на экранах, принадлежащих одному серверу, Emacs знает, что они разделяют одну клавиатуру и воспринимает все команды, приходящие с этих экранов, как один поток ввода.

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

Несмотря на это, люди, использующие одно и то же задание Emacs с разных дисплеев, все же могут вмешиваться в дела друг друга, если будут неосторожны. Например, если любой их них напечатает C-x C-c , это прекратит задание Emacs для всех!

Вы можете сделать так, чтобы определенные буферы, для которых Emacs обычно создает второе окно, если у вас есть только одно, появлялись в особых собственных фреймах. Чтобы сделать это, установите переменную special-display-buffer-names равной списку имен буферов; любой буфер, чье имя содержится в этом списке, автоматически получает специальный фрейм, когда какая-нибудь команда Emacs хочет показать его «в другом окне».

Например, если вы установите эту переменную таким образом:

(setq special-display-buffer-names '("*Completions*" "*grep*" "*tex-shell*"))

то списки завершений, вывод @command и буфер оболочки режима TeX получат свои собственные фреймы. Эти фреймы и окна в них никогда не разбиваются автоматически и не используются для других буферов. Они продолжают показывать буферы, для которых были созданы, пока вы не измените их вручную. Уничтожение специального буфера автоматически удаляет его фрейм.

В более общем случае вы можете установить special-display-regexps равной списку регулярных выражений; тогда буфер получает собственный фрейм, если его имя совпадает в любым из них. (Еще раз, это относится только к буферам, которые обычно отображаются в отдельном окне.)

Переменная special-display-frame-alist задает параметры для этих фреймов. У нее есть значение по умолчанию, поэтому вам необязательно устанавливать ее.

Те, кто знает Лисп, могут также сделать элемент special-display-buffer-names или special-display-regexps списком. Тогда первый элемент — это имя буфера или регулярное выражение, а остальные указывают, как создавать фрейм. Это может быть ассоциативный список, задающий значения параметров фрейма; эти значения имеют приоритет перед значениями параметров, указанных в special-display-frame-alist . Или же остальные элементы могут иметь такую форму:

(функция аргументы. )

где функция — это символ. Тогда фрейм конструируется путем вызова функции ; ее первым аргументом является буфер, а остальными аргументами — аргументы .

Аналогичными средствами вы можете указать буферы, которые должны отображаться в выбранном окне. See section Принудительное изображение в том же окне. Показ в том же окне обладает приоритетом перед показом в специальном фрейме; следовательно, если вы добавили имя буфера к special-display-buffer-names , но это не возымело никакого эффекта, проверьте, не используется ли для этого же имени буфера средство показа в том же окне.

Этот раздел описывает команды для изменения стиля отображения выбранного фрейма и его поведения в оконной среде.

M-x set-foreground-color RET цвет RET Задает цвет для текста в выбранном фрейме. M-x set-background-color RET цвет RET Задает цвет для фона в выбранном фрейме. Также изменяет цвет текста в начертании modeline , чтобы оно оставалось инверсией начертания по умолчанию. M-x set-cursor-color RET цвет RET Задает цвет курсора в выбранном фрейме. M-x set-mouse-color RET цвет RET Задает цвет указателя мыши, когда он находится над выбранным фреймом. M-x set-border-color RET цвет RET Задает цвет рамки выбранного фрейма. M-x list-colors-display Выводит определенные имена цветов и показывает, как эти цвета выглядят. Это несколько медленная команда. M-x auto-raise-mode Переключает автоматическое поднятие выбранного фрейма. Автоматическое поднятие означает, что всякий раз, когда вы передвигаете мышь в этот фрейм, он поднимается. Обратите внимание, это средство автоматического поднятия реализовано самим Emacs. Некоторые программы управления окнами также реализуют автоподнятие. Если вы включите автоподнятие для фреймов Emacs в вашей программе управления X-окнами, это будет работать, но не под контролем Emacs, и следовательно, auto-raise-mode не будет играть роли. M-x auto-lower-mode Переключает автоматическое опускание выбранного фрейма. Автоматическое опускание означает, что всякий раз, когда вы передвигаете мышь за пределы этого фрейма, он переносится вниз стека X-окон. Команда auto-lower-mode не влияет на автоопускание, реализованное программой управления X-окнами. Чтобы контролировать это, вы должны использовать соответствующие средства своей программы управления окнами. M-x set-frame-font RET шрифт RET Определяет шрифт как основной шрифт в выбранном фрейме. Основной шрифт используется для всего отображаемого в этом фрейме текста, кроме случаев, когда для какого-то текста с помощью начертания (see section Использование разных начертаний) определен другой шрифт. See section Ключи для задания шрифта, чтобы узнать о способах перечисления доступных в вашей системе шрифтов. Вы также можете установить основной шрифт фрейма через всплывающее меню. Чтобы вызвать это меню, нажмите S-Mouse-1 .

В версиях Emacs, которые используют X toolkit, функции для установки цвета и шрифтов не влияют на меню, так как меню отображаются со своими собственными классами виджетов. Чтобы сменить вид меню, вы должны использовать X-ресурсы (see section X-ресурсы). See section Параметры для задания цветов, сведения о цветах, а также section Ключи для задания шрифта, касающийся вопросов о выборе шрифта.

Для получения информации о параметрах и настройках фреймов смотрите @ref, The Emacs Lisp Reference Manual>.

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

Вы можете использовать на полоске прокрутки Mouse-2 (обычно это средняя кнопка), чтобы передвинуть или перетащить внутренний прямоугольник вверх или вниз. Если вы переместите его к верху полоски прокрутки, вы увидите начало буфера. Если вы переместите его к низу полоски прокрутки, то увидите конец буфера.

Правая и левая кнопки мыши прокручивают на контролируемое число строк. Mouse-1 (обычно левая кнопка) перемещает строку, на уровне которой вы щелкнули, к верхнему краю окна. Mouse-3 (обычно правая кнопка) перемещает верхнюю строку окна вниз к тому уровню, где вы щелкнули. Щелкая последовательно на одном месте, вы можете прокручивать на одно и то же расстояние еще и еще.

Помимо прокрутки, вы также можете щелкнуть на полоске прокрутки с помощью C-Mouse-2 , чтобы разбить окно по горизонтали. Разбиение делается в той строке, где вы щелкнули.

Вы можете включить или выключить режим Scroll Bar командой M-x scroll-bar-mode . Без аргумента, она переключает использование полосок прокрутки. С аргументом, она включает использование полосок прокрутки тогда и только тогда, когда аргумент положителен. Эта команда применяется ко всем фреймам, включая те, что еще будут созданы. Для управления начальной установкой режима Scroll Bar вы можете использовать X-ресурс `verticalScrollBars’ . See section X-ресурсы.

Чтобы включить или выключить полоски прокрутки только для выбранного фрейма, воспользуйтесь командой M-x toggle-scroll-bar .

Вы можете включить или выключить показ полосок меню с помощью команды M-x menu-bar-mode . Без аргументов, эта команда переключает режим Menu Bar; это второстепенный режим. С аргументом, эта команда включает режим Menu Bar, если аргумент положителен, и выключает, если аргумент неположителен. Для управления начальной установкой режима Menu Bar вы можете использовать X-ресурс `menuBarLines’ . See section X-ресурсы. Профессиональные пользователи часто выключают полоску меню, особенно на текстовых терминалах, где это освобождает одну дополнительную строку для текста.

See section Полоска меню, для получения информации о том, как вызывать команды с помощью полоски меню.

Когда вы используете Emacs с системой X, вы можете настроить несколько стилей отображения знаков. Вы можете контролировать такие аспекты стиля: шрифт, цвет текста, цвет фона и подчеркивание. Emacs частично поддерживает начертания в MS-DOS, позволяя вам контролировать для каждого начертания цвета текста и фона (see section Emacs и MS-DOS).

Вы управляете стилем отображения путем определения именованных начертаний . Каждое начертание может задавать шрифт, цвет текста, цвет фона и флаг подчеркивания; но оно не обязано задавать их все. Затем, указывая начертание или начертания для заданной части текста в буфере, вы управляете внешним видом этого текста.

Используемый для каждого данного знака стиль отображения определяется комбинацией нескольких начертаний. Любой аспект стиля, не заданный перекрытиями или свойствами текста, предоставляется самим фреймом.

Режим Enriched, предназначенный для редактирования форматированного текста, включает несколько команд и меню для задания начертаний. See section Начертания в форматированном тексте, чтобы узнать, как указать шрифт для текста в буфере. See section Цвета в форматированном тексте, о задании цветов текста и фона.

Для изменения внешнего вида начернания используйте буфер настройки. See section Настройка начертаний. Для определения атрибутов конкретных начертаний вы также можете использовать X-ресурсы (see section X-ресурсы).

Чтобы узнать, какие начертания определены в данный момент, и как они выглядят, наберите M-x list-faces-display . Одно начертание может выглядеть по-разному в разных фреймах; данная команда показывает его вид в том фрейме, где вы ее набрали. Вот перечень стандартных определенных начертаний:

@hyphenation default Это начертание используется для обычного текста, для которого не определено другое начертание. modeline Это начертание используется для строк режима. По умолчанию оно устанавливается как инверсия начертания default . See section Переменные управления изображением. highlight Это начертание используется в различных режимах для подсветки частей текста. region Это начертание применяется для отображения выделенной области (когда включен режим Transient Mark — смотрите ниже). secondary-selection Это начертание используется для отображения вторичного выделения (see section Вторичное выделение). bold Это начертание использует жирный вариант шрифта по умолчанию, если он есть. italic Это начертание использует курсивный вариант шрифта по умолчанию, если он есть. bold-italic Это начертание использует жирный курсивный вариант шрифта по умолчанию, если он есть. underline Это начертание подчеркивает текст.

Если включен режим Transient Mark, текст области подсвечивается, когда метка активна. Для этого используется начертание с именем region ; вы можете управлять стилем подсветки, меняя стиль этого начертания (see section Настройка начертаний). See section Режим Transient Mark, для получения большей информации о режиме Transient Mark и активизации и деактивизации метки.

Один простой способ использовать разные начертания — включить режим Font Lock. Этот второстепенный режим, всегда локальный для конкретного буфера, подбирает начертания в соответствии с синтаксисом редактируемого текста. Он может распознавать комментарии и строки в большинстве языков; в некоторых языках он умеет даже распознавать и правильно подсвечивать различные другие важные конструкции. See section Режим Font Lock, для получения большей информации о режиме Font Lock и синтаксической подсветке.

Вы можете распечатать буфер с подсветкой, какую вы видите на экране, с помощью команды ps-print-buffer-with-faces . See section Печать через Postscript.

Режим Font Lock — это второстепенный режим, всегда локальный для каждого буфера, который подсвечивает редактируемый вами текст, используя различные начертания в соответствии с синтаксисом текста. Он может распознавать комментарии и строки в большинстве языков; в некоторых языках он может также распознавать и правильно подсвечивать различные другие важные конструкции — например, имена определяемых функций и зарезервированные ключевые слова.

Команда M-x font-lock-mode включает и выключает режим Font Lock в соответствии с аргументом и переключает, если аргумент не задан. Функция turn-on-font-lock безусловно включает режим Font Lock. Это полезно в функциях-ловушках режима. Например, чтобы задействовать режим Font Lock всякий раз, когда вы редактируете файл на Си, вы можете сделать так:

(add-hook 'c-mode-hook 'turn-on-font-lock)

Чтобы включить режим Font Lock автоматически во всех режимах, которые его поддерживают, используйте функцию global-font-lock-mode , как показано здесь:

(global-font-lock-mode 1)

Когда вы редактируете текст в режиме Font Lock, подсветка в измененной строке обновляется автоматически. Чаще всего изменения не оказывают влияния на подсветку последующих строк, но иногда все же влияют. Чтобы обновить подсветку нескольких строк, используйте команду M-g M-g ( font-lock-fontify-block ).

В некоторых основных режимах M-g M-g обновляет подсветку всей текущей функции. (Как именно можно найти текущую функцию, указывает переменная font-lock-mark-block-function .) В других основных режимах M-g M-g обновляет подсветку 16-ти строк над и под точкой.

С числовым аргументом n , M-g M-g обновляет подсветку n строк над и под точкой, независимо от режима.

Чтобы получить все преимущества режима Font Lock, вам придется выбрать такой шрифт по умолчанию, у которого есть жирный, курсивный и жирный курсивный варианты; или вам понадобится цветной монитор или монитор, отображающий много градаций серого.

Переменная font-lock-maximum-decoration задает предпочтительный уровень оформления для режимов, которые предоставляют несколько уровней. Уровень 1 — это минимальное оформление; некоторые режимы поддерживают до трех уровней. Обычное значение по умолчанию обозначает «как можно больше». Вы можете указать целое число, которое применяется ко всем режимам, или задать разные числа для конкретных режимов; например, чтобы использовать уровень 1 для режимов C/C++ и уровень по умолчанию в остальных случаях, напишите так:

(setq font-lock-maximum-decoration '((c-mode . 1) (c++-mode . 1)))

В больших буферах подсветка может быть слишком медленной, поэтому вы можете подавить ее. Переменная font-lock-maximum-size задает размер буфера, сверх которого подсветка не делается.

Подсветка комментариев и строк (или «синтаксическая» подсветка) основывается на анализе синтаксической структуры текста буфера. В целях увеличения скорости некоторые режимы, включая режим C и режим Lisp полагаются на особое соглашение: открывающая скобка в самом левом столбце всегда обозначает начало определения функции и, таким образом, всегда находится вне любой строки или комментария. (See section Определения функций.) Если вы не следуете этому соглашению, режим Font Lock может сделать неправильную подсветку текста после открывающей скобки в левом столбце, которая попадает в строку или комментарий.

Переменная font-lock-beginning-of-syntax-function (всегда локальная для буфера) указывает, каким образом режим Font Lock может найти позицию, которая гарантированно находится вне любого комментария или строки. В режимах, использующих соглашение об открывающей скобке в левом столбце, значение этой переменной по умолчанию — это beginning-of-defun , что велит режиму Font Lock применять это соглашение. Если вы установите эту переменную в nil , Font Lock больше не станет полагаться на это соглашение. Это позволяет избежать неверных результатов, но ценой этого будет то, что в некоторых случаях для подсветки придется проходить текст буфера с самого начала.

Образцы подсветки Font Lock уже существуют для многих режимов, но вы можете захотеть раскрасить что-то дополнительно. Чтобы добавить свои собственные образцы подсветки для определенного режима, вы можете использовать функцию font-lock-add-keywords . К примеру, чтобы выделить в комментариях Си слова `FIXME:’ , используйте это:

(font-lock-add-keywords 'c-mode '(("\\

Режимы поддержки убыстряют режим Font Lock в больших буферах. Есть два режима поддержки: режим Fast Lock и режим Lazy Lock. Они используют два разных метода ускорения режима Font Lock.

Чтобы сделать режим Font Lock более быстрым для буферов, обращающихся к большим файлам, вы можете использовать режим Fast Lock. Режим Fast Lock сохраняет информацию о шрифтах для каждого файла в отдельном файле кеша; всякий раз, когда вы обращаетесь к файлу, он заново считывает информацию о шрифтах из файла кеша вместо того, чтобы вычислять шрифты для текста с нуля.

Команда M-x fast-lock-mode включает и выключает режим Fast Lock в соответствии с аргументом (без аргумента, режим переключается). Вы также можете сделать так, чтобы режим Fast Lock включался всякий раз, когда вы используете режим Font Lock, следующим образом:

(setq font-lock-support-mode 'fast-lock-mode)

Записывать файл кеша для маленьких буферов не имеет смысла. Поэтому есть переменная, fast-lock-minimum-size , задающая наименьший размер файла, для которого информация о шрифтах кешируется.

Переменная fast-lock-cache-directories указывает, где нужно размещать файлы кеша. Ее значение -- это список каталогов, которые будут испробованы; "." означает тот же каталог, где файл редактируется. Значение по умолчанию равно ("." "~/.emacs-flc") , что велит использовать тот же каталог, если это возможно, иначе использовать каталог `~/.emacs-flc' .

Переменная fast-lock-save-others указывает, должен ли режим Fast Lock сохранять файлы кеша для файлов, чьим владельцем являетесь не вы. Отличное от nil значение говорит, что должен (и это значение по умолчанию).

Чтобы ускорить режим Font Lock для больших буферов, вы можете использовать режим Lazy Lock, который уменьшает количество текста, подлежащего подсветке. В режиме Lazy Lock подсветка буфера делается по необходимости; она производится только для тех частей буфера, которые должны появиться на экране. И подсветка ваших изменений замедлена; она производится, только когда Emacs бездействовал определенный небольшой промежуток времени.

Команда M-x lazy-lock-mode включает и выключает режим Lazy Lock в соответствии с аргументом (без аргумента, режим переключается). Вы также можете сделать так, чтобы режим Lazy Lock включался всякий раз, когда вы используете режим Font Lock, следующим образом:

(setq font-lock-support-mode 'lazy-lock-mode)

Избегать подсветки маленьких буферов не имеет смысла. Минимальный размер буфера, для которого подсветка делается по необходимости, определяется переменной lazy-lock-minimum-size . Меньшие буферы расцвечиваются сразу, как в простом режиме Font Lock.

Когда вы изменяете буфер, режим Lazy Lock откладывает подсветку измененного текста. Переменная lazy-lock-defer-time задает число секунд, которое Emacs должен оставаться незанятым, прежде чем начать подсветку ваших изменений. Если ее значение равно 0, изменения подсвечиваются незамедлительно, как в простом режиме Font Lock.

Обычно режим Lazy Lock подсвечивает ставшие видимыми фрагменты буфера перед тем, как они впервые показываются на экране. Однако, если значение lazy-lock-defer-on-scrolling не равно nil , вновь видимый текст подсвечивается только после того, как Emacs бездействовал lazy-lock-defer-time секунд.

В некоторых режимах, включая режим C и режим Emacs Lisp, изменение содержимого одной строки изменяет контекст последующих строк и, следовательно, ту подсветку, которая должна для них использоваться. Обычно вы должны набрать M-g M-g , чтобы обновить подсветку последующих строк. Однако, если вы установите переменную lazy-lock-defer-contextually не равной nil , режим Lazy Lock делает это автоматически по истечении lazy-lock-defer-time секунд.

Когда Emacs бездействует продолжительное время, Lazy Lock подсвечивает дополнительные фрагменты буфера, которые еще не показаны, на случай, если вы вынесете их на экран позднее. Это называется скрытой подсветкой .

Переменная lazy-lock-stealth-time определяет, сколько минут Emacs должен оставаться незанятым, прежде чем начать скрытую подсветку. Значение nil означает отсутствие скрытой подсветки. Переменные lazy-lock-stealth-lines и lazy-lock-stealth-verbose задают диапазон и подробность скрытой подсветки.

  • Режим Fast Lock играет роль только при обращении к файлам и уничтожении буферов (и связанных событий); следовательно, редактирование буфера и прокрутка окна не быстрее и не медленнее, чем в простом режиме Font Lock.
  • Режим Fast Lock медленнее при считывании файлов кеша, чем режим Lazy Lock при подсветке буфера; следовательно, режим Fast Lock медленнее при обращении к файлам, чем режим Lazy Lock.
  • Режим Lazy Lock работает во время прокрутки окна, чтобы раскрасить текст, выносимый на экран; следовательно, прокрутка медленнее, чем в простом режиме Font Lock.
  • Режим Lazy Lock не подсвечивает буфер в процессе редактирования (он откладывает подсветку изменений); следовательно, редактирование в нем быстрее, чем в простом режиме Font Lock.
  • Режим Fast Lock может быть сбит с толку файлом, находящимся под контролем системы управления версиями; следовательно, подсветка буфера может производиться, даже если для этого файла есть файл кеша.
  • Режим Fast Lock работает только с буферами, обращающимися к файлам; режим Lazy Lock работает с любыми буферами.
  • Режим Fast Lock создает файлы кеша; режим Lazy Lock не создает.

Переменная font-lock-support-mode указывает, какой из этих режимов поддержки следует использовать; например, чтобы сказать, что в режимах C/C++ используется режим Fast Lock, а в остальных случаях --- режим Lazy Lock, установите эту переменную так:

(setq font-lock-support-mode '((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode) (t . lazy-lock-mode)))

Используйте M-x highlight-changes-mode , чтобы включить второстепенный режим, который показывает с помощью разных начертаний (в основном цветов), какие части текста буфера изменялись недавно.

Следующие команды позволяют вам создавать и удалять фреймы, а также делать другие операции над ними: C-z Минимизирует выбранный фрейм ( iconify-or-deiconify-frame ). Обычное значение C-z , приостановка Emacs, бесполезно под оконной системой, поэтому в данном случае у этого ключа другая привязка. Если вы введете эту команду в пиктограмме фрейма Emacs, она деминимизирует этот фрейм. C-x 5 0 Удаляет выбранный фрейм ( delete-frame ). Это не допускается, если есть только один фрейм. C-x 5 o Выбирает другой фрейм, поднимает его и переносит в него мышь, чтобы он оставался выбранным. Если вы повторяете эту команду, она циклически проходит по всем фреймам на вашем терминале.

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

Чтобы создать новый фрейм и переключиться в него, используйте C-x 5 2 ; для кругового прохода по существующим фреймам используйте C-x 5 o ; чтобы удалить текущий фрейм, используйте C-x 5 0 .

Каждый фрейм имеет отличительный номер. Если ваш терминал может показывать в одно время только один фрейм, то около начала строки режима появляется номер n текущего фрейма в форме `F n ' .

`F n ' на самом деле -- это имя фрейма. Вы также можете указать другое имя, если хотите, и вы можете выбирать фреймы по именам. Чтобы задать новое имя для текущего фрейма, используйте команду M-x set-frame-name RET имя RET , а для выбора фрейма в соответствии с его именем используйте M-x select-frame-by-name RET имя RET . Указанное вами имя появляется в строке режима, когда этот фрейм становится выбранным.

GNU Emacs. Статья, которую я так и не нашел…

Доброго времени суток, Читатель!

В данной статье хочу подробно рассказать про настройку текстового редактора GNU Emacs.

Операционная система GNU Emacs — программируемый текстовый редактор для программистов, написанный на программируемом языке программирования.

Для расширения Emacs используется диалект языка Lisp — Emacs Lisp.
Строго говоря, Emacs нельзя назвать просто текстовым редактором. Emacs — это интерпретатор языка Emacs Lisp, конструктор текстового редактора, заточенного именно под Вас. Малая часть программы реализована на языке Си (около 30% — отвечает за базовое взаимодействие с ОС, ввод-вывод, отрисовку окон), а весь основной функционал — на Emacs Lisp (далее, elisp). Именно такая архитектура отличает GNU Emacs от других профессиональных текстовых редакторов — он, до неприличия, расширяем.

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

  • хочет начать использовать GNU Emacs, но не знает как;
  • пишет на языках, поддержка которых в IDE оставляет желать лучшего или её вообще нет;
  • пишет на разных языках, «программист-полиглот»;
  • хочет иметь универсальную среду разработки на работе и дома, на нескольких компьютерах сразу;
  • хочет иметь функциональную и мощную среду для plain/text заметок (organizer), ведения справочной информации, управления проектами, организации базы знаний и т.д. — org-mode;
  • хочет автоматизировать процесс обработки большого числа текстовых файлов;
  • хочет иметь нетребовательную к аппаратным ресурсам, кроссплатформенную среду для работы с любой текстовой информацией;
  • хочет среду, которую можно без особых усилий, буквально «на лету», настроить под себя, свою конкретную задачу, расширить, самостоятельно добавив новый функционал;
  • любит универсальность и расширяемость;
  • пишет для web, на скриптовых языках: Python, Ruby, Perl и т.п.;
  • хочет приобщиться к вечному, к Emacs — одному из самых долгоживущих проектов Open Source сообщества;
  • etc.
  • Light Table;
  • Sublime Text;
  • Atom от GitHub.

Да. Вы не ошиблись. Фильм «Трон: Наследие». GNU Emacs используют и там. Кто бы мог подумать…

Забыл предупредить: я пишу на Common Lisp (ещё один диалект языка Lisp), поэтому часть материала будет про то, как превратить Emacs в полноценную IDE с картами и девушками для этого языка программирования. Хороший пример, к стати…

Установка

  • скачать архив с официального сайта;
  • создать директорию C:\emacs\ и распаковать в него скаченный архив;
  • запустить файл C:\emacs\bin\addpm.exe (создаст пункт в меню Пуск для запуска Emacs).

    в терминале выполнить команду:

sudo aptitude install emacs emacs-goodies-el 
  • посмотри тут;
  • или здесь;
  • можно глянуть вот сюда.

Настройка

Есть, как минимум, четыре способа настройки Emacs:

  • написанием конфигурационного файла .emacs;
  • через меню программы;
  • с помощью команды M-x customize (C-x означает Control-x, M-x означает Meta-x, где Meta может означать: «нажать-отпустить Esc» или «нажать-держать Alt». (например, Meta-x это или нажать Esc, затем x, или, удерживая Alt, нажать x);
  • спереть позаимствовать чужой файл .emacs и начать работать (не советую).

Файл конфигурации .emacs

После того, как Вы успешно установили GNU Emacs на свой компьютер, необходимо создать файл с названием .emacs и уже в нем прописать основные настройки.
Обозначения, используемые в статье (повторение — мать учения):

  • C-a: Ctrl-a;
  • M-a: Meta-a (Если у Вас нет клавиши Meta (Alt), используете клавишу Esc);
  • C-M-a: Ctrl-Meta-a.

Для начала, расскажем Emacs о том, в какой операционной системе он запустился. Для этого напишем на elisp две функции, которые нам в этом помогут:

;; System-type definition (defun system-is-linux() (string-equal system-type "gnu/linux")) (defun system-is-windows() (string-equal system-type "windows-nt"))

Теперь, вызывая эти функции как условия для операторов ветвления, мы можем настроить кроссплатформенный файл конфигурации для Emacs (результатом наших трудов будет файл .emacs, который прекрасно работает в ОС MS Windows и дистрибутивах GNU/Linux. На Mac OS X не проверял).

IDE для Common Lisp

Для превращения Emacs в полноценную среду разработки для языка Common Lisp нам понадобится два пакета:

  • реализация Common Lisp. Я выбрал SBCL;
  • Slime — режим Emacs для разработки приложений на языке Common Lisp.
  • скачать SBCL;
  • установить в C:\sbcl\ скаченный SBCL;
  • скачать Slime;
  • разместить в C:\slime\ скаченный Slime.
sudo aptitude install slime sbcl

Поехали дальше

Если Вы счастливый пользователь Mac OS X или дистрибутива GNU/Linux, то Emacs полезно запустить как сервер:

;; Start Emacs as a server (when (system-is-linux) (require 'server) (unless (server-running-p) (server-start))) ;; запустить Emacs как сервер, если ОС - GNU/Linux 

Далее, укажем Emacs пути по которым но сможет найти установленные дополнения (в частности, пакеты Slime и SBCL):

;; MS Windows path-variable (when (system-is-windows) (setq win-sbcl-exe "C:/sbcl/sbcl.exe") (setq win-init-path "C:/.emacs.d") (setq win-init-ct-path "C:/.emacs.d/plugins/color-theme") (setq win-init-ac-path "C:/.emacs.d/plugins/auto-complete") (setq win-init-slime-path "C:/slime") (setq win-init-ac-dict-path "C:/.emacs.d/plugins/auto-complete/dict")) ;; Unix path-variable (when (system-is-linux) (setq unix-sbcl-bin "/usr/bin/sbcl") (setq unix-init-path "~/.emacs.d") (setq unix-init-ct-path "~/.emacs.d/plugins/color-theme") (setq unix-init-ac-path "~/.emacs.d/plugins/auto-complete") (setq unix-init-slime-path "/usr/share/common-lisp/source/slime/") (setq unix-init-ac-dict-path "~/.emacs.d/plugins/auto-complete/dict"))

Давайте расскажем Emacs о том, кто мы такие (мало-ли, решите через Emacs почту отправлять или в jabber'e переписываться. ):

;; My name and e-mail adress (setq user-full-name "%user-name%") (setq user-mail-adress "%user-mail%")

Мой любимый dired-mode. Настроим его:

;; Dired (require 'dired) (setq dired-recursive-deletes 'top) ;; чтобы можно было непустые директории удалять. 

Теперь можно запустить dired-mode комбинацией клавиш C-x d. Для удаления папки в dired-mode наведите курсор на эту папку, нажмите d, затем x. Чтобы убрать с папки отметку на удаление нажмите u.

Замечательный способ «прыгать» по определениям функций почти для всех языков программирования — Imenu. Предположим, что у Вас файл с программой на 100500 строк с кучей функций. Не беда! Нажимаем F6 и в минибуфере вводим часть имени искомой функции и TAB'ом дополняем. Нажали Enter — и мы на определении искомой функции:

;; Imenu (require 'imenu) (setq imenu-auto-rescan t) ;; автоматически обновлять список функций в буфере (setq imenu-use-popup-menu nil) ;; диалоги Imenu только в минибуфере (global-set-key (kbd "") 'imenu) ;; вызов Imenu на F6 

Пишем название открытого буфера в шапке окна:

;; Display the name of the current buffer in the title bar (setq frame-title-format "GNU Emacs: %b")

Помните, что мы определили пути, по которым Emacs ищет дополнения и внешние программы? Пусть «пройдется» по этим путям (где дополнения) при запуске:

;; Load path for plugins (if (system-is-windows) (add-to-list 'load-path win-init-path) (add-to-list 'load-path unix-init-path))

Еще не забыли, что Emacs предоставляет Вам прекрасную среду для plain/text заметок (organizer), ведения справочной информации, управления проектами, организации базы знаний и т.д. — org-mode? Настроим:

;; Org-mode settings (require 'org) ;; Вызвать org-mode (global-set-key "\C-ca" 'org-agenda) ;; поределение клавиатурных комбинаций для внутренних (global-set-key "\C-cb" 'org-iswitchb) ;; подрежимов org-mode (global-set-key "\C-cl" 'org-store-link) (add-to-list 'auto-mode-alist '("\\.org$" . Org-mode)) ;; ассоциируем *.org файлы с org-mode

Наведем аскетизм красоту — уберем экраны приветствия при запуске:

;; Inhibit startup/splash screen (setq inhibit-splash-screen t) (setq ingibit-startup-message t) ;; экран приветствия можно вызвать комбинацией C-h C-a 

Выделим выражения между <>,[],(), когда курсор находится на одной из скобок — полезно для программистов:

;; Show-paren-mode settings (show-paren-mode t) ;; включить выделение выражений между <>,[],() (setq show-paren-style 'expression) ;; выделить цветом выражения между <>,[],() 

В новых версиях Emacs внедрили electic-mod'ы. Первый из них автоматически расставляет отступы (работает из рук вон плохо), второй — закрывает скобки, кавычки и т.д. Отключим первый (Python программисты меня поймут. ) и включим второй:

;; Electric-modes settings (electric-pair-mode 1) ;; автозакрытие <>,[],() с переводом курсора внутрь скобок (electric-indent-mode -1) ;; отключить индентацию electric-indent-mod'ом (default in Emacs-24.4) 

Хотим иметь возможность удалить выделенный текст при вводе поверх? Пожалуйста:

;; Delete selection (delete-selection-mode t)

Уберем лишнее: всякие меню, scroll-bar'ы, tool-bar'ы и т.п.:

;; Disable GUI components (tooltip-mode -1) (menu-bar-mode -1) ;; отключаем графическое меню (tool-bar-mode -1) ;; отключаем tool-bar (scroll-bar-mode -1) ;; отключаем полосу прокрутки (blink-cursor-mode -1) ;; курсор не мигает (setq use-dialog-box nil) ;; никаких графических диалогов и окон - все через минибуфер (setq redisplay-dont-pause t) ;; лучшая отрисовка буфера (setq ring-bell-function 'ignore) ;; отключить звуковой сигнал

Никаких автоматических сохранений и резервных копий! Только hardcore:

;; Disable backup/autosave files (setq make-backup-files nil) (setq auto-save-default nil) (setq auto-save-list-file-name nil) ;; я так привык. хотите включить - замените nil на t

Самое больное и сложное место в настройке — кодировки:

;; Coding-system settings (set-language-environment 'UTF-8) (if (system-is-linux) ;; для GNU/Linux кодировка utf-8, для MS Windows - windows-1251 (progn (setq default-buffer-file-coding-system 'utf-8) (setq-default coding-system-for-read 'utf-8) (setq file-name-coding-system 'utf-8) (set-selection-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8-unix) (set-terminal-coding-system 'utf-8) (prefer-coding-system 'utf-8)) (progn (prefer-coding-system 'windows-1251) (set-terminal-coding-system 'windows-1251) (set-keyboard-coding-system 'windows-1251-unix) (set-selection-coding-system 'windows-1251) (setq file-name-coding-system 'windows-1251) (setq-default coding-system-for-read 'windows-1251) (setq default-buffer-file-coding-system 'windows-1251)))

Включаем нумерацию строк:

;; Linum plugin (require 'linum) ;; вызвать Linum (line-number-mode t) ;; показать номер строки в mode-line (global-linum-mode t) ;; показывать номера строк во всех буферах (column-number-mode t) ;; показать номер столбца в mode-line (setq linum-format " %d") ;; задаем формат нумерации строк 

Продолжаем наводить красоту:

;; Fringe settings (fringe-mode '(8 . 0)) ;; органичиталь текста только слева (setq-default indicate-empty-lines t) ;; отсутствие строки выделить глифами рядом с полосой с номером строки (setq-default indicate-buffer-boundaries 'left) ;; индикация только слева ;; Display file size/time in mode-line (setq display-time-24hr-format t) ;; 24-часовой временной формат в mode-line (display-time-mode t) ;; показывать часы в mode-line (size-indication-mode t) ;; размер файла в %-ах 

Автоматический перенос длинных строк:

;; Line wrapping (setq word-wrap t) ;; переносить по словам (global-visual-line-mode t)

Определим размер окна с Emacs при запуске:

;; Start window size (when (window-system) (set-frame-size (selected-frame) 100 50))

Интерактивный поиск и открытие файлов? Пожалуйста:

;; IDO plugin (require 'ido) (ido-mode t) (icomplete-mode t) (ido-everywhere t) (setq ido-vitrual-buffers t) (setq ido-enable-flex-matching t)

Быстрая навигация между открытыми буферами:

;; Buffer Selection and ibuffer settings (require 'bs) (require 'ibuffer) (defalias 'list-buffers 'ibuffer) ;; отдельный список буферов при нажатии C-x C-b (global-set-key (kbd "") 'bs-show) ;; запуск buffer selection кнопкой F2

Цветовые схемы. Как без них? Для этого:

  • скачаем пакет color-theme для Emacs отсюда;
  • создадим директории .emacs.d/plugins/color-theme;
  • распакуем туда содержимое архива с темами;
  • расположить папку .emacs.d в:
    • для MS Windows в корень диска C:\.emacs.d
    • для GNU/Linux в домашнюю директорию ~/.emacs.d
    ;; Color-theme definition (defun color-theme-init() (require 'color-theme) (color-theme-initialize) (setq color-theme-is-global t) (color-theme-charcoal-black)) (if (system-is-windows) (when (file-directory-p win-init-ct-path) (add-to-list 'load-path win-init-ct-path) (color-theme-init)) (when (file-directory-p unix-init-ct-path) (add-to-list 'load-path unix-init-ct-path) (color-theme-init)))
    ;; Syntax highlighting (require 'font-lock) (global-font-lock-mode t) ;; включено с версии Emacs-22. На всякий. (setq font-lock-maximum-decoration t)
    ;; Indent settings (setq-default indent-tabs-mode nil) ;; отключить возможность ставить отступы TAB'ом (setq-default tab-width 4) ;; ширина табуляции - 4 пробельных символа (setq-default c-basic-offset 4) (setq-default standart-indent 4) ;; стандартная ширина отступа - 4 пробельных символа (setq-default lisp-body-indent 4) ;; сдвигать Lisp-выражения на 4 пробельных символа (global-set-key (kbd "RET") 'newline-and-indent) ;; при нажатии Enter перевести каретку и сделать отступ (setq lisp-indent-function 'common-lisp-indent-function)
    ;; Scrolling settings (setq scroll-step 1) ;; вверх-вниз по 1 строке (setq scroll-margin 10) ;; сдвигать буфер верх/вниз когда курсор в 10 шагах от верхней/нижней границы (setq scroll-conservatively 10000)

    Укоротить сообщения в минибуфере:

    ;; Short messages (defalias 'yes-or-no-p 'y-or-n-p)

    Общий с ОС буфер обмена:

    ;; Clipboard settings (setq x-select-enable-clipboard t)

    Настройки пустых строк в конце буфера:

    ;; End of file newlines (setq require-final-newline t) ;; добавить новую пустую строку в конец файла при сохранении (setq next-line-add-newlines nil) ;; не добавлять новую строку в конец при смещении ;; курсора стрелками

    Выделять результаты поиска:

    ;; Highlight search resaults (setq search-highlight t) (setq query-replace-highlight t)

    Перемещение между сплитами при помощи комбинаций M-arrow-keys (кроме org-mode):

    ;; Easy transition between buffers: M-arrow-keys (if (equal nil (equal major-mode 'org-mode)) (windmove-default-keybindings 'meta))

    Удалить лишние пробелы в конце строк, заменить TAB'ы на пробелы и выровнять отступы при сохранении буфера в файл, автоматически:

    ;; Delete trailing whitespaces, format buffer and untabify when save buffer (defun format-current-buffer() (indent-region (point-min) (point-max))) (defun untabify-current-buffer() (if (not indent-tabs-mode) (untabify (point-min) (point-max))) nil) (add-to-list 'write-file-functions 'format-current-buffer) (add-to-list 'write-file-functions 'untabify-current-buffer) (add-to-list 'write-file-functions 'delete-trailing-whitespace)

    Пакет CEDET — работа с C/C++/Java (прекрасная статья Alex Ott'a по CEDET):

    ;; CEDET settings (require 'cedet) ;; использую "вшитую" версию CEDET. Мне хватает. (add-to-list 'semantic-default-submodes 'global-semanticdb-minor-mode) (add-to-list 'semantic-default-submodes 'global-semantic-mru-bookmark-mode) (add-to-list 'semantic-default-submodes 'global-semantic-idle-scheduler-mode) (add-to-list 'semantic-default-submodes 'global-semantic-highlight-func-mode) (add-to-list 'semantic-default-submodes 'global-semantic-idle-completions-mode) (add-to-list 'semantic-default-submodes 'global-semantic-show-parser-state-mode) (semantic-mode t) (global-ede-mode t) (require 'ede/generic) (require 'semantic/ia) (ede-enable-generic-projects)

    Автодополнение ввода. Для этого:

    • скачаем пакет auto-complete для Emacs отсюда;
    • создадим директории .emacs.d/plugins/auto-complete;
    • распакуем туда содержимое архива с auto-complete;
    • расположить папку .emacs.d в:
      • для MS Windows в корень диска C:\.emacs.d
      • для GNU/Linux в домашнюю директорию ~/.emacs.d
      ;; Auto-complete plugin (defun ac-init() (require 'auto-complete-config) (ac-config-default) (if (system-is-windows) (add-to-list 'ac-dictionary-directories win-init-ac-dict-path) (add-to-list 'ac-dictionary-directories unix-init-ac-dict-path)) (setq ac-auto-start t) (setq ac-auto-show-menu t) (global-auto-complete-mode t) (add-to-list 'ac-modes 'lisp-mode) (add-to-list 'ac-sources 'ac-source-semantic) ;; искать автодополнения в CEDET (add-to-list 'ac-sources 'ac-source-variables) ;; среди переменных (add-to-list 'ac-sources 'ac-source-functions) ;; в названиях функций (add-to-list 'ac-sources 'ac-source-dictionary) ;; в той папке где редактируемый буфер (add-to-list 'ac-sources 'ac-source-words-in-all-buffer) ;; по всему буферу (add-to-list 'ac-sources 'ac-source-files-in-current-dir)) (if (system-is-windows) (when (file-directory-p win-init-ac-path) (add-to-list 'load-path win-init-ac-path) (ac-init)) (when (file-directory-p unix-init-ac-path) (add-to-list 'load-path unix-init-ac-path) (ac-init)))

      Настроим среду для Common Lisp — Slime:

      ;; SLIME settings (defun run-slime() (require 'slime) (require 'slime-autoloads) (setq slime-net-coding-system 'utf-8-unix) (slime-setup '(slime-fancy slime-asdf slime-indentation))) ;; загрузить основные дополнения Slime ;;;; for MS Windows (when (system-is-windows) (when (and (file-exists-p win-sbcl-exe) (file-directory-p win-init-slime-path)) (setq inferior-lisp-program win-sbcl-exe) (add-to-list 'load-path win-init-slime-path) (run-slime))) ;;;; for GNU/Linux (when (system-is-linux) (when (and (file-exists-p unix-sbcl-bin) (file-directory-p unix-init-slime-path)) (setq inferior-lisp-program unix-sbcl-bin) (add-to-list 'load-path unix-init-slime-path) (run-slime)))

      Настроим Bookmark — закладки, которые помогают быстро перемещаться по тексту:

      ;; Bookmark settings (require 'bookmark) (setq bookmark-save-flag t) ;; автоматически сохранять закладки в файл (when (file-exists-p (concat user-emacs-directory "bookmarks")) (bookmark-load bookmark-default-file t)) ;; попытаться найти и открыть файл с закладками (global-set-key (kbd "") 'bookmark-set) ;; создать закладку по F3 (global-set-key (kbd "") 'bookmark-jump) ;; прыгнуть на закладку по F4 (global-set-key (kbd "") 'bookmark-bmenu-list) ;; открыть список закладок (setq bookmark-default-file (concat user-emacs-directory "bookmarks")) ;; хранить закладки в файл bookmarks в .emacs.d 

      Собственно, всё! Можно нажать C-x C-s и сохранить файл .emacs. Куда положить файл .emacs и папку .emacs.d (если использовать пути из моего .emacs):

      • .emacs в C:\Users\%username%\AppData\Roaming\
      • папку .emacs.d в корень диска C:\
      • .emacs в домашнюю директорию: /home/%username%/
      • папку .emacs.d в домашнюю директорию: /home/%username%/

      image

      Полезные ссылки

      Множество полезных статей по GNU Emacs на Хабрахабр. Также есть серия замечательных скринкастов на YouTube про Emacs, опубликованных Дмитрием Бушенко:

      • Изучаем Emacs. Эпизод 01
      • Изучаем Emacs. Эпизод 02
      • Изучаем Emacs. Эпизод 03
      • Изучаем Emacs. Эпизод 04
      • Изучаем Emacs. Эпизод 05
      • Изучаем Emacs. Эпизод 06
      • Изучаем Emacs. Эпизод 07
      • Изучаем Emacs. Эпизод 08: Инструменты работы с ELisp-кодом
      • Изучаем Emacs. Эпизод 09: ediff, magit, psvn и emacs --daemon
      • Изучаем Emacs. Эпизод 10: Базовые возможности Org-mode, literate programming и экспорт в html/pdf
      • Изучаем Emacs. Эпизод 11: Средства работы с Clojure-кодом
      • Изучаем Emacs. Эпизод 12: Макросы, ООП, DSL
      • Изучаем Emacs: Эпизод 13. Управление проектами при помощи EDE

      Cерия скринкастов (на англ. языке) Emacs Rocks.

      Невероятно огромная, подробная и полезная статья (на англ. языке): Sacha Chua's Emacs configuration.

      Огромное разнообразие цветовых тем для Emacs. Смотреть тут.

      Чтобы не оставить без внимания пользователей другого редактора — Vim, вот ссылка на мой .vimrc на GitHub. Там все подробно описано (если что, могу и по Vim статью написать. ).

      С нетерпением жду Ваших комментариев, уважаемые читатели. Надеюсь, Вы нашли что-то полезное/новое для себя.

      Да пребудет с Вами Emacs…

      Спасибо за внимание.

      • GNU Emacs
      • натройка
      • IDE Common Lisp.

      Краткое руководство по Emacs

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

      Постоянно используя Emacs, со временем вы понимаете, что в нем можно решать практически любые задачи. Зачастую проще и быстрее сделать что-то в Emacs чем изучать отдельную программу со своими возможностями по редактированию текста и комбинациями клавиш.

      378_v1.png

      Если Emacs не может решить вашу задачу, вы можете использовать язык Emacs Lisp (Elisp) для настройки, автоматизации повседневных действий, а также для добавления новых или модификации существующих возможностей Emacs. Высокая расширяемость Emacs является излюбленной темой Интернет-фольклора (см. например рис. 1).

      Emacs портирован на большое количество платформ, вы можете использовать один и тот же редактор (без изменения конфигурации) в GNU/Linux, BSD и других ОС семейства UNIX (в том числе Mac OS X), а также в Microsoft Windows.

      Скачать копию Emacs можно с официального сайта проекта или установить с помощью пакетного менеджера вашего дистрибутива ОС.

      Прямая ссылка на установщик Emacs версии 27.2 для Windows (64 бита): emacs-27.2-x86_64-installer.exe. Для удаленной работы с файлами (см. ниже) также потребуется установить PuTTY (скачать, используйте установочный файл msi).

      Комбинации клавиш

      Для управления Emacs обычно используются сочетания клавиш, включающие в себя клавишу CONTROL (иногда отмечаемая как CTRL или CTL) или клавишу META (иногда помеченную как ALT или EDIT). Вместо того, чтобы каждый раз писать META или CONTROL, мы будем использовать следующие сокращения:

      • C- — следует удерживать клавишу CONTROL, пока набирается символ . Так, C-f означает: одновременно нажать клавиши CONTROL и f.
      • M- — следует удерживать клавишу META, пока набирается символ . Если нет клавиши META, ALT или EDIT, то нажмите , отпустите ее, а потом наберите символ .

      Многие действия в Emacs выполняются с помощью последовательного нажатия нескольких комбинаций клавиш. Например, открытие файла выполняется комбинацией C-x C-f . Выполнить такую комбинацию очень просто. Необходимо нажать CONTROL, затем x , затем f .

      Если Emacs перестал реагировать на ваши команды, то вы можете вывести его из этого состояния нажав C-g . Вы можете также использовать C-g , чтобы остановить выполнение команд, которые слишком долго выполняются.

      Комбинациям клавиш соответствуют команды (функции Elisp). Для поиска и непосредственного ввода команд можно использовать комбинацию M-x .

      Для выхода из редактора используйте комбинацию C-x C-c .

      Работа с файлами и буферами

      Для того, чтобы открыть файл нажмите C-x C-f , Emacs попросит вас ввести имя файла. Оно набирается в нижней строке экрана, которая называется мини-буфером. Для того, чтобы создать файл введите новое имя в мини-буфере.

      Когда вы вводите имя файла (или любую другую информацию в мини-буфере), вы можете отменить текущую команду нажав C-g .

      Чтобы сохранить содержимое файла нажмите C-x C-s . Если файл изменялся с момента открытия или последнего сохранения, в строке состояния (внизу окна Emacs) слева будут отображены два символа * (звёздочка), иначе на их месте отображаются символы - (дефис).

      Открывать и сохранять файлы можно также через пункт меню File.

      Каждому открытому файлу в Emacs соответствует так называемый буфер, отображающий содержимое этого файла. Чтобы увидеть список буферов, созданных в текущем сеансе Emacs, наберите C-x C-b . Мы видим, что каждый буфер имеет имя и может иметь связанное с ним имя файла, содержимое которого хранится в данном буфере. Просматривать и перемещаться по буферам можно также через пункт меню Buffers.

      Любой текст, который вы видите в окне Emacs (в том числе сам список буферов), является частью какого-либо буфера. Чтобы убрать список буферов наберите C-x 1 (данная комбинация оставляет в текущем окне только выделенный буфер).

      Перейти в буфер по имени можно с помощью комбинации C-x b . После ее выполнения имя буфера для перехода будет запрошено в мини-буфере.

      Для того, чтобы отобразить в текущем окне два буфера нажмите C-x 2 (чтобы разделить окно горизонтально) или C-x 3 (чтобы разделить окно вертикально). Для перехода между буферами используйте комбинацию C-x o или мышь.

      Удаленная работа с файлами

      Emacs позволяет прозрачно для пользователя работать с файлами на других компьютерах. Например, чтобы открыть файл inf/task1/hello.c , расположенный в домашнем каталоге пользователя kryshen на сервере kappa.cs.karelia.ru можно ввести комбинацию клавиш C-x C-f и указать все параметры подключения в имени файла следующим образом: /ssh:kryshen@kappa.cs.karelia.ru:inf/task1/hello.c (при работе из Windows с PuTTY вместо ssh: используйте префикс plink: ), после чего Emacs запросит в мини-буфере пароль для подключения к серверу и все дальнейшие изменения в файле будут выполняться уже удаленно на сервере.

      При редактировании файла на другом сервере, все связанные с ним команды будут также выполняться удаленно. Например сборка ( M-x compile ) или отладка ( M-x gud-gdb ) программы hello.c из предыдущего примера будут выполнены на сервере kappa.cs.karelia.ru .

      Emacs поддерживает большое количество протоколов для удаленной работы с файлами: SSH, Telnet, FTP, WebDAV, OBEX и др.

      Редактирование текста

      Как и в большинстве других редакторов для того, чтобы начать вводить текст необходимо просто нажимать соответствующие символы на клавиатуре. Для перемещения курсора можно использовать стрелки, указатель мыши, а также комбинации клавиш, позволяющие осуществлять более сложные перемещения (подробнее см. руководство по Emacs).

      Комбинации клавиш для выполнения операций выделения текста, копирования, вставки, отмены и т.д. могут показаться пользователям редакторов с менее богатой историей слегка необычными:

      • C-/ , C-_ или C-x u — отменить предыдущую команду редактирования.
      • C- — начать выделение текста.
      • M-w — поместить выделенный текст в буфер обмена.
      • C-w — вырезать выделенный текст и поместить его в буфер обмена.
      • C-k — вырезать весь текст от курсора до конца строки и поместить его в буфер обмена.
      • C-y — вставить текст из буфера обмена, который был помещен туда последним.
      • M-y — если нажата сразу после C-y , то заменит только что вставленный текст на тот, который был помещен в буфер обмена предпоследним. Таким образом, можно поместить в буфер обмена сразу несколько элементов и затем последовательно вставить их в разных местах документа.
      • C-s — поиск по файлу. Строка для поиска вводится в мини-буфер, поиск осуществляется по мере набора текста.
      • M-% — замена текста в текущем буфере.

      Emacs также может имитировать более простой режим редактирования документов, в котором используются комбинации: C-c для копирования, C-v для вставки, C-z для отмены и Shift для выделения текста. Для включения этой возможности выберите пункт меню Options → Use CUA Keys.

      Другие возможности Emacs

      • Чтение системной докумнтации: M-x man и M-x info .
      • M-x shell : командная оболочка Shell (при удаленной работе может потребоваться явно ввести путь к интерпретатору /bin/bash ).
      • dired-mode — файловый менеджер Emacs. Откройте любой каталог с помощью привычной комбинации клавиш C-x C-f , содержимое каталога автоматически откроется в режиме dired . В данном режиме вы можете навести курсор на любой файл и переименовать его (нажать R ), скопировать его (нажать C ) или удалить (нажать D ). Нажав C-x C-q вы можете редактировать имена файлов просто редактируя их в текущем буфере (изменения примут силу после сохранения, C-x C-s ). Подробнее см. описание Dired в руководстве по Emacs.
      • M-x gnus — Почтовый клиент. В вычислительной системе кафедры ИМО он по умолчанию настроен на работу с почтовым сервером mail.cs.petrsu.ru .
      • M-x compile — простой способ вызова команды make из текущего каталога.
      • M-x gdb — интерфейс к отладчику GDB. Для перехода в расширенный интерфейс отладчика выберите пункт меню Gud → GDB-MI → Display Other Windows. При работе с удаленными файлами рекомендуется использовать M-x gud-gdb — более легкий вариант отладчика без поддержки расширенного интерфейса.
      • org-mode — простой формат разметки, позволяющий превратить Emacs в ежедневник для ведения заметок, списка важных дел, расписания и т. д. Для того, чтобы начать использовать org-mode просто начните редактировать в Emacs любой файл с расширением .org . Кстати, это руководство также сделано в org-mode (emacs-short-tutorial.org). См. также более развернутый пример (org-example.org), демонстрирующий некоторые дополнительные возможности org-mode .
      • M-x term — эмулятор терминала.
      • M-x butterfly — см. рисунок 1.
      • Делу время, потехе час:
        • M-x tetris — тетрис,
        • M-x snake — змейка,
        • M-x doctor — психотерапевт,
        • многое другое.

        Дистрибутивы

        Существуют дистрибутивы Емакса, предоставляющие готовую конфигурацию и наборы дополнительных пакетов:

        • Prelude достаточно близок к конфигурации Емакса в вычислительной системе ИМИТ, рекомендуется для самостоятельной установки;
        • Spacemacs,
        • Doom Emacs.

        Дополнительные источники информации

        • Встроенное в Emacs руководство по Emacs (для вызова нажмите C-h t )
        • Emacs для начинающих
        • A Guided Tour of Emacs
        • Шпаргалка по командам Emacs (версия на английском)
        • A Visual Guide to Emacs

        Эта работа публикуется на условиях лицензии Creative Commons Attribution 4.0 International.

        Последние изменения: 2021-09-21 Вт 13:37

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *