среда, 8 апреля 2009 г.

Пара слов о Emacs

Emacs - это очень навороченный текстовый редактор. По-видимому, программисты так к нему в своё время привыкли, что никогда не хотели из него вылазить, стараясь делать всё в любимом текстовом редакторе. Надо сказать, что порой наблюдается просто страшный изврат (например прослушивание музыки из Emacs), но чаще всего это вполне разумные шаги к тому, чтобы сделать свою жизнь проще. Что мне особо нравится в этом текстовом редакторе, так это то, что в нём можно править тексты статей в LaTeX, писать программы на любом языке программирования; при этом не надо запоминать различные клавиатурные сокращения для разных программ.

Для начала надо бы прочитать руководство TUTORIAL.ru. У меня (Debian Lenny) оно лежит в /usr/share/emacs/22.2/etc/TUTORIAL.ru. Вы узнаете из него о клавиатурных сокращениях и особенностях работы в Emacs.

В Emacs используются, как может поначалу показаться, весьма непривычные комбинации клавиш. Принято обозначать C-x C-f следующее действие: сначала нажимается комбинация Control-x, а затем (можно отпустить Control, а можно и не отпускать), комбинация Control-f. M означает клавишу Meta, она же на PC клавиатурах Alt. Либо можно нажать и отпустить Esc, а затем уже нажать клавишу, которая идет в комбинации за Meta.

Основные комбинации клавиш

C-x C-f
открывает файл на редактирование (работает автодополнение).
C-f, C-b, C-n, C-p
перемещают курсор, соответственно, вперед, назад, вниз и вверх на один символ.
M-f, M-b
- на слово вперед и назад.
C-v, M-v
пролистывают текст на экран вперёд и назад. Это намного удобнее, чем тянуться руками к клавишам перемещения курсора. Особенно проблематично мне на ноутбуке ковыряться в поисках клавиш PageUp и PageDown - здесь же все гораздо проще.
C-Backspace, M-d
удаляет слово после курсора и перед курсором, соответственно.
C-a, C-e
отправляет курсор в начало и конец строки.
M-a, M-e
в начало и конец предложения. В обычном тексте предложения разделяются двумя пробелами, на английский манер.
C-u число действие
M-число действие
выполняет действие заданное число раз.
C-/
C-space-/
undo, redo.
C-x b
показать список буферов.
C-x k
убить буфер.
C-x 1
C-x 2
C-x 3
оставить только текущий буфер активным, разбить окно на два по вертикали, по горизонтали, соответственно.

Переносы и символы разрыва строки

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

M-x auto-fill-mode
однако будет он работать совсем не так, как многие привыкли, а именно, будет разрывать строку, принудительно вставляя символ разрыва строки. Поначалу для меня это казалось диким после использования, например, kate. Однако вскоре я почувствовал несомненное преимущество. При компиляции LaTeX, в случае ошибки выдается номер строки. Гораздо легче ориентироваться, когда в строке 75 символов, нежели целый абзац, скажем, из 500. Если исправляются строки вверху, то переформатирования не происходит - Emacs ведь не текстовый процессор. Для принудительного переформатирования необходимо нажать
M-q
Это переформатирует всю область между символами переноса строки. Таким образом, если ваши параграфы не разделены пустой строкой, они переформатируются вместе и сольются.

Настройка редактора

Для управления настройками емакса служит текстовый файл ~/.emacs. Поскольку, Emacs написан на Lisp, то и конфигурационный файл тоже. Для меня это всегда становилось препятствием. Да и становится всё ещё. Минимальная настройка, которую я почерпнул на http://www.emacswiki.org/emacs/GnuEmacsRussification, такова (комментарии начинаются с ";"):

;;; Русификация
;;; Использовать окружение UTF-8
(set-language-environment 'UTF-8)
(set-language-environment "Russian")
(set-language-environment "cyrillic-koi8")
;; UTF-8 для вывода на экран
(set-terminal-coding-system 'utf-8)
;; UTF-8 для ввода с клавиатуры
(set-keyboard-coding-system 'utf-8)
;; Необходима поддержка кодировок cp866 и cp1251
(codepage-setup 1251)
(define-coding-system-alias 'windows-1251 'cp1251)
(codepage-setup 866)
;; Установки автоопределения кодировок
;; prefer-coding-system помещает кодировку в НАЧАЛО списка предпочитаемых кодировок
;; Поэтому в данном случае первой будет определяться utf-8-unix
(prefer-coding-system 'cp866)
(prefer-coding-system 'windows-1251-dos)
(prefer-coding-system 'koi8-r-unix)
(prefer-coding-system 'utf-8-unix)

;; Проверка орфографии
(setq-default ispell-program-name "aspell")
(setq ispell-dictionary "russian") ; русский словарь для ispell
(global-set-key "\e\ed" 'ispell-change-dictionary) ; изменить словарь
(global-set-key "\e\ef" 'flyspell-mode); вкл/выкл проверки орфографии "на ходу"
(global-set-key "\e\es" 'ispell-buffer); проверить орфографию в текущем буфере

;; подвсетка скобок
(show-paren-mode t)

;;; режим Text и режим Auto Fill
(setq default-major-mode 'text-mode)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;; длина строки в текстовом режиме в 75 символов
(setq fill-column 75)

;;; Подсветка текущей строки
(global-hl-line-mode 1)

;;; Убрать splash-screen
(setq inhibit-startup-message t)

В области, где задается проверка орфографии вы можете видеть комбинацию клавиш типа "\e\ef". Это сочетания Esc-Esc-f, то есть два раза нажать Esc, а затем f. Такие сочетания я стал использовать, ознакомившись со статьей Точки Emacs - огромное спасибо автору!

Шрифт и цвета

Для русификации, да и вообще для лучшего восприятия емакса, желательно сказать ему использовать какой-нибудь шрифт поприличнее, чем fixed, который, вроде бы, идет по умолчанию. Есть возможность прикрутить Xft шрифты, но у меня никогда такого желания не было. Больше всего мне нравится шрифт terminus - его я использую в консоли и в емаксе. Также неплохо было бы внести коррективы в настройки цветов. Для этого необходимо править файл ~/.Xresources. Добавляем строчки

emacs*Background: #1B3035
emacs*Foreground: #ffffff
emacs*pointerColor: #F2D14D
emacs*cursorColor: #F2D14D
emacs*bitmapIcon: on
emacs*font: -xos4-terminus-bold-r-normal--16-160-72-72-c-80-iso10646-1
emacs.geometry: 80x60
Чтобы настройки вступили в силу, даём команду
xrdb ~/.Xresources
Цвета, естественно, можно подобрать на свой вкус. Шрифты можно просмотреть по команде
xlsfonts
В случае юникода интерес представляют шрифты с iso10646-1 на конце. При таких цветах в моём случае вид следующий:

Очень много полезной информации получил от прочтения отличного перевода замечательной статьи Effective Emacs (настоятельно рекомендуется к прочтению). В частности:

;; удаление слова не только по C-Backspace, но и по C-w
(global-set-key "\C-w" 'backward-kill-word)
;; удаление области текста с возможности последующей вставки
(global-set-key "\C-x\C-k" 'kill-region)

;; назначаем на Ctrl-H backspace
(global-set-key "\M-h" 'help-command)
(global-set-key "\C-h" 'delete-backward-char)

Emacs самодокументирован, поэтому можно смело вызывать справку (M-x help) и читать что требуется (сокращения клавиш, описание режимов и т.д.).

Надеюсь, что кому-нибудь это окажется полезным. В дальнейшем я напишу о том, как можно использовать Emacs для редактирования исходных текстов в LaTeX. Также предлагаю к прочтению http://emacs-tips.blogspot.com/search/label/emacs.

Копируете статью - поставьте ссылку на оригинал!

Комментариев нет:

Отправить комментарий