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

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

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

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

Для расширения Emacs используется диалект языка LispEmacs 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.

Стоит сказать, что в современной IT-индустрии все чаще появляются различные амбициозные проекты, связанные с разработкой «текстовых редакторов XXI века», убийц замен Emacs и/или Vim:


Ну что сказать… Удачи им в этом нелегком труде. А мы, пожалуй, займемся настройкой GNU Emacs.


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

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

Итак, поехали!

Установка


Для MS Windows:

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

Для дистрибутивов GNU/Linux (на примере deb-based дистрибутивов) есть четыре способа:

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

    sudo aptitude install emacs emacs-goodies-el
    

  • через менеджер пакетов synaptic;
  • через центр приложений дистрибутива;
  • собрать из исходников.

Для Mac OS X:


На момент написания статьи последняя версия редактора — Emacs-24.4. Вот ее и берите для Mac OS X или MS Windows. Для GNU/Linux советую использовать ту версию, которая представлена в стандартных репозиториях Вашего дистрибутива.

Настройка


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

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

Мы не ищем легких путей! Будем писать конфигурационный файл на языке elisp!
Сказано — сделано!

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


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

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

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

Для начала, расскажем 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.

Если Вы пользователь ОС MS Windows и, вдруг, пишете на Common Lisp, то Вам нужно:

  • скачать SBCL;
  • установить в C:\sbcl\ скаченный SBCL;
  • скачать Slime;
  • разместить в C:\slime\ скаченный Slime.

На GNU/Linux все проще: выполнить из командной строки:

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 "<f6>") '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 "<f2>") 'bs-show) ;; запуск buffer selection кнопкой F2


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

  • скачаем пакет color-theme для Emacs отсюда;
  • создадим директории .emacs.d/plugins/color-theme;
  • распакуем туда содержимое архива с темами;
  • расположить папку .emacs.d в:
    • для MS Windows в корень диска C:\.emacs.d
    • для GNU/Linux в домашнюю директорию ~/.emacs.d
  • запишем в наш .emacs следующие строки:

;; Color-theme definition <http://www.emacswiki.org/emacs/ColorTheme>
(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
  • запишем в наш .emacs следующие строки:

;; Auto-complete plugin <http://www.emacswiki.org/emacs/AutoComplete>
(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 "<f3>") 'bookmark-set) ;; создать закладку по F3 
(global-set-key (kbd "<f4>") 'bookmark-jump) ;; прыгнуть на закладку по F4
(global-set-key (kbd "<f5>") 'bookmark-bmenu-list) ;; открыть список закладок
(setq bookmark-default-file (concat user-emacs-directory "bookmarks")) ;; хранить закладки в файл bookmarks в .emacs.d

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

MS Windows:

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

GNU/Linux:

  • .emacs в домашнюю директорию: /home/%username%/
  • папку .emacs.d в домашнюю директорию: /home/%username%/

Мой .emacs можно скачать с моей странички на GitHub.

Мой Emacs:

image

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


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



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

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

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

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

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

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

Спасибо за внимание.
Поделиться публикацией

Похожие публикации

Комментарии 44
    +8
    Вы простите, но за статью — минус. 90% статьи — «Вот мой .emacs, смотрите и учитесь». Но таких примеров в интернете — пруд пруди и Ваш .emacs — далеко не лучшего качества. Вы не объясняете выбор многих компонентов и более-менее подробное их действие, что было бы полезно начинающим Емаксерам. За CL — плюс, хотя мы так и не дождались упоминания (require 'cl).
      +3
      (require 'cl)
      — это включение поддержки Common Lisp для программирования самого Emacs. Это необязательный параметр для Emacs, если использовать его как IDE Common Lisp.
      Но таких примеров в интернете — пруд пруди

      И сколько времени понадобится новичку, чтобы найти более-менее нормальный .emacs?
      Вы не объясняете выбор многих компонентов и более-менее подробное их действие
      — я дал более чем достаточно ссылок для того, чтобы начать понимать что значит каждая строка. Тем более не хотел раздувать статью. Цель статьи проста — дать сконцентрированный источник полезной информации для начинающих емаксеров с примером моего .emacs, пусть и не идеального. Я его часто редактирую (.emacs).

      Спасибо за замечания.
        +1
        Так в том и прелесть, что нет понятия "Нормальный .emacs". Вы например любите dired, а мне куда удобнее работать с dired+. Или момент о «никаких резервных копий» — но ведь это одна из удобнейших фич! CEDET, я как понял, вы взяли встроенный, однако факт, что порой он на пол-года или больше отстаёт по функционалу от апстрима. Или например, почему Вы явно включается font-lock, который с версии 22 включается по-умолчанию.
          0
          «никаких резервных копий» — но ведь это одна из удобнейших фич!
          Это практически первое что я отключил. А я вот хочу .swp файлы как в Vim'е, сможете мне их дать при работе в Emacs с Evil модом или без него???
          +7
          И сколько времени понадобится новичку, чтобы найти более-менее нормальный .emacs?

          Нормальный .emasc найти нельзя, его можно только написать :}
        +4
        Друзья, я написал эту статью для новичков. Мне именно этого не хватало, когда начал работать с Emacs — ссылок, примеров кода. И чтобы все в одном месте. Те, кто знает и применяет Emacs в своей работе повседневно — не аудитория данной статьи. А вот те, кто хочет с чего-то (только не с пустого .emacs) начать, могут посмортеть приведенную мной настройку, поиграться с ней, выбрать лучший для себя вариант изучения этого замечательного инструмента, посмотреть ссылки и т.д.
        Прошу прощения, что не все прозрачно, в смысле объяснения приведенного кода, но расчет на то, чтобы молодой емаксер сел и начал разбираться самостоятельно — иначе, Emacs не освоить.
          +1
          Отключать меню и тулбары для новичков — очень странное решение.
            –1
            Если Вы хотите использовать Emacs как Notepad++ (с тулбарами и меню, без изучения комбинаций клавиш, режимов), не готовы забыть про мышь — флаг Вам в руки. Только не нужно после этого говорить, что Emacs ничем не отличается от других текстовых редакторов, и, мол,
            я ничего полезного для себя не нашел
            (прошу прощения, я не про Вас конкретно, а про сферического user'а в вакууме, который решил «освоить» Emacs, используя менюшки и тулбары). Я, например, с самого начала отключил все эти GUI дополнения. ИМХО, Emacs с GUI смотрится так же странно, как MS Visual Studio без GUI.
            Это как с Vim: сферический user в вакууме не смог с первого раза выйти из программы (хотя, на стартовой странице написано как это сделать) — все, Vim плохой… Vim и Emacs не виноваты, что user привык к блокноту. Не стоит ждать, что эти редакторы похожи на все другие. Нет — они другие.
            Либо Вы учитесь ими пользоваться, либо не пользуйтесь. Все же просто…
              +4
              Например, в org-mode меню — очень полезная штука. Очень много разных функций, и клавиатурные комбинации к ним подписаны прямо возле пунктов меню — помогает выучить, если что-то часто используешь.

              Отлючение меню удобно не для всех, и это явно не для новичков.
                +1
                Я разобрал свой .emacs, и, если внимательно прочитаете статью, не написал, что это — эталон.
                Выбор за пользователем. Нельзя угодить всем. Мне меню, например, вообще не нужно. Вам — нужно. Это Ваш выбор. Давайте не спорить по таким неоднозначным вопросам. Пусть начинающий Emacs'ер сам решит: нужно ему меню или нет.
              +1
              F10 всегда к вашим услугам, для себя в редких случаях именно ей и пользуюсь, если что-то забылось
                +1
                Спасибо! Самый грамотный подход.
              0
              Мне, как новичку, статья понравилась:
              1. Рассказывается о плагинах, о которых я не знал.
              2. Приводится рабочий .emacs-файл, с пусть кратким, но более-менее понятным описанием.
              3. Автор не заставляет тупо копировать его .emacs себе — он лишь описывает то, чем пользуется.

              Да, хотелось бы более развёрнутого ответа насчёт того, почему тут или иной плагин. За neotree замолвите слово. Что насчёт ergo-emacs? Мне кажется, он достоин упоминания в статье для новичков.
              Отключать меню и всякие тулбары — это правильно. Да, это несколько повышает порог вхождения, но ведь мы все тут любим Emacs не за его красивые иконки в тулбаре, верно? А приучать к keyboard-only, как мне кажется, надо сразу.
              0
              Начинающие могут начать с github.com/bbatsov/prelude
                +1
                Тоже вариант. Согласен.
                  0
                  Готовые конфиги? Смысл?
                    +2
                    Как минимум, чтобы иметь наглядное представление о том, как другие организуют свои настройки, какие настройки применяют чаще всего и т.д. Про Prelude — попытка упростить жизнь новичкам. Удалась ли эта попытка — каждому решать самостоятельно. Я же написал русским по белому в статье:
                    спереть позаимствовать чужой файл .emacs и начать работать (не советую).
                      +3
                      Вот именно, настоятельно не советуете использовать, но поддерживаете готовую сборочку от Васян^W bbatsov. Прелюд не помогает новичкам, скорее дезориентирует и не даёт понимания, что такое емакс. Прелюд может быть полезен тем, кто уже знает емакс — какие-нибудь фичи или моды подтянуть, но уж точно не новичкам. Я разобрался в емаксе за полчаса, конфиг переписал готовый, но разбирал каждую строчку с автором конфига и это очень сильно помогло понять емакс и в дальнейшем спокойно улучшать под себя.
                        +3
                        Я хотел сказать, что Prelude можно посмотреть на предмет наличия там дополнительных, интересующих конкретно Вас настроек и решений, а не устанавливать его.
                        А за
                        конфиг переписал готовый, но разбирал каждую строчку с автором конфига и это очень сильно помогло понять емакс и в дальнейшем спокойно улучшать под себя

                        Вам только плюс — это самый грамотный подход, ИМХО.
                  –2
                  «Розыгрышь стандартной троектории нейтрона … егометрических …»

                  Без обид, но вам еще нужен модуль проверки орфографии комментариев :) А вообще, русский — это такой же язык программирования, только семантического. Мне кажется, что правильно организовав в голове правила грамматики и орфографию, можно неплохо прокачать и свои профессиональные навыки. Принципы ведь те же.
                    +2
                    Это было самое ценное, что Вы извлекли из статьи. Без обид…
                    Отлично, поздравляю.
                    0
                    Как же хочется ворваться в этот Emacs, но черт побери, сила есть, воля есть, а силы воли нет.
                      0
                      Спасибо за статью. Раньше на SublimeText сидел, сейчас на Light Table. Ну и vim немного знаю, чтобы в чужих системах можно было удобно редактировать файлы. Емакс всегда пугал. Как только с Light Table вырасту, попробую емакс с вашей статьи.

                      Вы выложили также .vimrc. В каких случаях пользуетесь vim, а в каких емакс?

                      Что за шрифт используете?
                        +1
                        Я рад, что для Вас статья оказалась полезной!
                        В каких случаях пользуетесь vim, а в каких емакс?

                        Vim использую для быстрого редактирования любой текстовой информации, в частности, для конфигурационных файлов.
                        Emacs — для программирования. Он незаменим для меня, когда я работаю с Lisp/Python/Perl. Org-mode — прекрасная штука. Рискну сказать так:
                        даже если бы Emacs был ужасным и плохим (без всех полюсов и расширений), наличие org-mode полностью оправдало бы его использование...
                        Что за шрифт используете?

                        PT Mono
                          –1
                          Честно скажу, мне статья не понравилась. Если бы ты такое написал лет 10 назад, тогда да — без вопросов. Но сейчас, в 2015 году ты пишешь:

                          даже если бы Emacs был ужасным и плохим (без всех полюсов и расширений), наличие org-mode полностью оправдало бы его использование


                          Так почему же ты не раскрываешь тему орг-мода в контексте публикации настроек Emacs? Это выглядит чрезвычайно сомнительно на мой взгляд.
                          Просто чтобы ты понял о чем я говорю, взгляни на этот рабочий, но незаконченный черновик: gist.github.com/zahardzhan/e1d77d71ba93b008ec21#file-init-org
                            –1
                            Так почему же ты не раскрываешь тему орг-мода в контексте публикации настроек Emacs?

                            Потому что Вам, наверно, нужно было статью повнимательнее почитать.
                            Я же в начале статьи написал:
                            В данной статье хочу подробно рассказать про настройку текстового редактора GNU Emacs.

                            а не про Org-mode.

                            даже если бы Emacs был ужасным и плохим (без всех полюсов и расширений), наличие org-mode полностью оправдало бы его использование

                            это — ответ на вопрос в комментариях, если что, не часть статьи.

                            Это выглядит чрезвычайно сомнительно на мой взгляд.

                            Что в статье сомнительно, по Вашему?
                            Или Вы написали коментарий, чтобы разрекламировать разместить ссылку на Вашу gist'у?

                            Если бы ты такое написал лет 10 назад, тогда да — без вопросов.

                            Вы, вообще, о чем? Причем тут «лет 10 лет назад» и настройка Emacs?

                            Еще раз повторяю: это статья про начальную настройку Emacs. Для начинающих. Не для опытных пользователей Emacs!
                              +2
                              Не думаю, что имеет смысл вести с вами дискуссию, если вы считаете что ссылку я разместил чтобы ее «разрекламировать». Вы даже не удосужились посмотреть что это. Единственное что я точно могу сказать, следуя вашей собственной логике — вы разместили эту статью чтобы разрекламировать свои настройки, большая часть которых мало кому из начинающих пользователей подойдет. Каждый в конце концов использует свои собственные.
                                0
                                Прошу прощения, промахнулся: вместо минуса поставил Вам плюс…

                                Вы даже не удосужились посмотреть что это.

                                Посмотрел, прочитал. Это не имеет никакого отношения к тому, что я написал в своей статье.

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


                                Что за бред? Детский сад, вторая группа… Я рад любой критике, только она должна быть, как минимум, аргументированной.

                                Я одного понять не могу: целью Ваших комментариев является сам факт их написания?
                                Если высказали точку зрения, будьте добры, аргументируйте Вашу критику. А пока, она у Вас безосновательна.

                                Хотя… Что с Вами спорить? Не вижу смысла.
                              0
                              Я бы хотел взлянуть, но к сожалению получаю такое сообщение:

                              «Whoops.
                              We seem to have missed the gist of that gist you were looking for.»
                          0
                          Статью прочитал, т. к. являюсь как раз начинающим пользователем Emacs, выделил для себя несколько интересных моментов.

                          Стоит сказать, что в современной IT-индустрии все чаще появляются различные амбициозные проекты, связанные с разработкой «текстовых редакторов XXI века», замен Emacs и/или Vim:


                          Перед Emacs долгое время работал с Sublime Text'ом и за мое небольшое время обучения работы с Emacs пока ни нашел ни одной функции, которую не поддерживал бы мой Sublime (пишу на Python).
                          Возможно я все еще не постиг всю прелесть указанного в статье редактора(кроме того, что он бесплатный), но если сравнивать время настройки того же Sublime и Emacs, то первый на мой взляд бесспорно выигрывает именно как текстовый редактор, т. к. многие из нужных функций уже включены «из коробки».

                          P. S. я не беру в расчет, то что на Emacs есть и свой браузер и почтовый клиент и т. д., так как к редактированию теста они имеют не большое отношение.
                            0
                            Из самого интересного и полезного, наверное — org-mode.
                              0
                              Для sumblime тоже есть порт org-mode или же PlainTask
                                0
                                Ну тогда — встроенная система управления пакетами. А вообще, я думаю, самая главная фишка Emacs это полная прозрачность модулей друг для друга и для пользователя и возможность модификации всего и вся прямо на лету с помощью мощнейших средств типа аспектно-ориентированного программирования advice и макросов.
                            +1
                            Как в emacs включить virtual spaces (возможность заводить курсор за пределы конца строки)?
                              +2
                              Хотел бы отметить, что воспользовавший этой частью вашего конфига:
                              Удалить лишние пробелы в конце строк, заменить 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)
                              

                              при программировании на Python можно испытать очень большую боль, ибо при сохранении, например py файлов чужих библиотек или не должным образом отформатированных в другом редакторе по отступам py файлов (format-current-buffer) просто делает с отступами что хочет:

                              file = open('/path/to/file', 'r')
                              for line in file
                                  print(line)
                              file.close()


                              легко становится:

                              file = open('/path/to/file', 'r')
                              for line in file
                                  print(line)
                                  file.close()


                              Хорошо, если после этого код просто перестанет работать и интерпритатор покажет ошибки, если же что-то такое случится в файле с over9000 строк и он будет исполнятся без ошибок интерпретатора, будет адово.
                                0
                                Вы какой версией Emacs пользуетесь? Emacs-24.4?
                                Если да, то там, по дефолту, включена опция electric-indent-mode, что и может быть причиной корявой индентации python кода.
                                Попробуйте отключить этот режим (запишите в свой .emacs):
                                (electric-indent-mode -1)

                                У меня такие же проблемы возникали, когда этот режим оставлял включенным.
                                –1
                                Для новичков я бы посоветовал использовать emacs-starter-kit, prelude, или подобные. Когда 15 лет назад я начинал пользоваться Emacs, то ничего подобного не было. А это, во-первых, готовый конфиг, модули общего назначения, и т.д. Во-вторых, оно доводит дефолтный Emacs до уровня «о, так неплохо уже из коробки».

                                Еще автор не упомянул про репозитории ELPA, MELPA, и т.д. А это, по моему скромному мнению, очень важно, т.к. там есть куча модулей расширения, которые уже делают то, чего пользователь только начал желать (:
                                  0
                                  Вот я только начал желать virtual spaces (возможность заводить курсор за пределы конца строки). Что мне поставить?
                                    0
                                    Не знаю, у меня такого желания не было. И я не Google.
                                    0
                                    Автор starter-kit говорит, что для новичков он бы посоветовал Emacs Wiki )
                                      0
                                      Если новичок уже поставил starter-kit, то хороший совет. А если еще не поставил, то с очень высокой вероятностью этот новичок перестанет использовать Emacs уже на следующий день.
                                        0
                                        В том-то и дело, что starter-kit как программный проект был закрыт полтора года назад и его больше нельзя «поставить». Это просто небольшой гайд.
                                          0
                                          И что? Новички могут поставить что-нибудь подобное prelude, better-defaults, etc. Что вы к названию-то прицепились. Название не важно, важно то, что дефолтный Emacs очень сложно сделать менее «юзабельным», а вот более удобным его можно делать бесконечно.
                                          0
                                          Как правило Emacs используют тогда, когда нет «более удобных» инструментов чем Emacs и по этой причине его не перестают использовать в будущем. Например, как автор этой статьи — для игр с коммон лиспом. Есть и более экзотические варианты — как среду разработки с голосовым вводом и выводом и тому подобное.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое