Rambler's Top100 Service калинин.ru / комментарии / по /  << 06.09.00 >>

Emacs

Emacs является культовой программой для редактирования текстов. Я думаю, что у людей, которые впервые о нем слышат, должно вызвать удивление номер версии Emacs'а, например стандартный GNU Emacs нумеруется уже 20 версией, а XEmacs --- 21. Количество версий, я думаю, свидетельствует о популярности, распространенности и возрасте этой программы.

Фактически, Emacs не является текстовым редактором в том виде, в котором он представляется, например, программой Notepad из стандартной поставки Windows. Все дело в том, что предназначение Emacs как программы не столько в предоставлении жестко запрограммированных возможностей по редактированию текста, а в предоставлении расширения этих возможностей. Для этого предназначен специальный язык программирования Emacs Lisp. Практически все, что представляет из себя Emacs тогда, когда вы его запустите в перый раз, является результатом работы "дополнений", написанных на Emacs Lisp'е.

Этот редактор текстов очень популярен в среде Unix. Все дело в том, что он существует практически для каждой архитектуры и каждой вариации Unix'а, что позволяет использовать его вне зависимости от операционной системы. Да и "родился" он именно в Unix'е...

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

Во-первых, у него свои собственные "горячие" клавиши, что всегда несколько неприятно. То есть, например, Shift-стрелки могут и не выделять блок, как это принято. Вместо этого надо нажать Ctrl-Space в начале блока а концом блока будет считаться позиция курсора (или "точки" в терминологии Emacs'а) на момент выполнения команды, оперирующей с этим блоком. И разговоры о том, что все эти клавиши могут быть настроены таким образом, как это захочет пользователь, но для этого надо немного разобраться, ни к чему не приводят.

Во-вторых, он построен таким образом, что при работе с ним человеку можно вообще не пользоваться меню. Все доступные команды могут выполняться из его собственной командной строки (минибуфера) и для того что бы записать файл можно нажать Ctrl-x Ctrl-s, а можно набрать Alt-x save-buffer. И так --- для любой команды, включая те, которым "горячие" клавиши не назначены.

Но все это было бы совершенно бесполезно, если бы командная строка Emacs не предоставляла бы удобные средства для набора команд. Согласитесь, помнить все, что можно набрать, совершенно нереально. Поэтому в ней работает идеология завершения имен, что выражается в следующем: набираете часть команды (что можно вспомнить или догадаться, например, понятно что команда сохранения будет начинаться на save), после этого нажимаете TAB. Если такая команда единственная, то ее название автоматически завершится, иначе будет выдан список возможных вариантов.

Тем самым пользователь может выполнить любую операцию не убирая рук с клавиатуры; мало того, даже не перенося пальцев на дополнительную клавиатуру "со стрелочками". Это очень удобно.

Вообще говоря, тут стоит отвлечься и сказать несколько слов про интерфейсы. Ален Голуб в своих "Правилах программирования на C и C++" пишет о том, что интерфейс бывает понятный, а бывает удобный. Разница заключается в том, что при использовании понятного интерфейса человек, который никогда не видел компьютера, все равно может выполнить некоторые операции, потому что ему будет понятно как это сделать. То есть, идеология меню является понятной, потому что изучив его в течение нескольких минут, можно все-таки найти то место, где можно выполнить требуемое действие. Это понятно.

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

Что лучше, потратить несколько дней на изучение непонятного сразу интерфейса, но потом не мучаться с его использованием, или приступать сразу к работе с использованием понятного интерфейса но неудобного? По-моему, первое лучше. Потому что мой личный опыт показывает, что выполнение операций "руками" всегда будет быстрее, чем каждый раз разбираться с "понятным" интерфейсом. Потому что используя удобный интерфейс мысли всегда сосредоточены на действии, а при использовании понятного приходиться еще думать что и как сделать.

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

Для Emacs существует громадное количество "расширений". Есть режимы чтения почты, новостей; есть даже свой собственный Web-браузер. Под Emacs написаны игры (тетрис, сокобан и т.д.). Есть поддержка большого количества режимов редактирования текстов: исходные тексты программ на C/C++, html/xml/sgml, TeX, nroff, ... Для многих из этих режимов есть автоматическая расстановка отступов. Он это делает не так, как обычные редакторы для программистов: "тупо" вставляя столько же пробелов, сколько было на предыдущей строчке, а анализирует текст и расставляет отступы в соответствии с тем, чем является строка. В общем, это очень удобно, потому что после, например, "обнесения" некоторого блока текста C++ фигурными скобками вам не потребуется везде вставлять символы табуляции для того, что бы восстановить структурный внешний вид программы. Все это сделает Emacs, когда ему подадут команду indent-region.

Emacs позволяет запускать компилятор и автоматически "выдирает" сообщения о синтаксических ошибках, после чего можно позиционировать курсор сразу же на место ошибки. Есть поддержка gdb, в результате чего Emacs'ом можно отлаживать программы. В общем, много чего можно сделать при его помощи. Для этого надо просто попробовать и посмотреть что получится. Повторю, даже если он вам не понравится, от Emacs'а все равно будет много пользы, потому что с ним можно будет работать на любой платформе. На моей прошлой работе мои сотрудники пытались угадать, под чем я сейчас "сижу": Windows, FreeBSD или Linux. Это было очень непросто сделать, потому что во всех операционных системах внешний вид экрана был одинаковый: "распахнутое" окно Emacs'а, по которому очень сложно что-то сказать. Определяли по ICQ: я им пользуюсь только под Windows'ом (больше по привычке, наверно, скоро перестану; этот "интернет-пейджер" уже достал; электронная почта надежнее и удобнее), поэтому под Win32 в правом верхнем углу у меня была зеленая ромашка, чего не было в остальных ОС.

Резюме

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


Версия для печати


  Ссылки по теме:
http://www.emacs.org
   Официальный сайт "правильного" Столлменовского Emacs'а.
http://www.xemacs.org
   "Ветка" emacs'а; на самом деле, несколько более удобный, чем стандартный GNU Emacs. Я пользуюсь именно им.
  Рядом в разделе:
Командный интерпретатор bash (22.09.00)
   Текст ниже предназначен для тех людей, которые по принципиальным соображениям не пользуются командной строкой, мотивируя это тем, что им там работать...   >>>>
Пакет шрифтов Cyr-RFX (10.09.00)
   Руссификация X11 стала в последнее время достаточно простой. Для этого достаточно указать X-серверу то, что он находится в России и попросить...   >>>>
  Рядом по дате:
Формальные оценки (07.09.00)
   Оценка знаний у студента, на мой взгляд, является самым спорным вопросом всего "учебного процесса". Вообще, выставление отметок превращается в некоторое странное...   >>>>
Охотовед (05.09.00)
   Где-то к полудню дядя Билл вернулся, поймав некоторое количество окуней, из которых сделали уху. В это же время мы начали знакомиться...   >>>>
  Содержание:
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
   C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Просто так
Студенческое
Туризм
  Байки
Фотографии
Комментарии
   Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Благодарности
Форум
Хронология
 
  В этом разделе:
Игры (01.12.01)
   Я очень давно не играл в компьютерные игры (за редким исключением --- например, дорвавшись до тетриса) и когда наконец-то собрал себе...   >>>>
Click here to begin (07.01.01)
   Волею судеб мне приходится работать с различными операционными системами и пользовательскими оболочками. И с некоторых пор мне кажется, что интерфейс Windows,...   >>>>
Командный интерпретатор bash (22.09.00)
   Текст ниже предназначен для тех людей, которые по принципиальным соображениям не пользуются командной строкой, мотивируя это тем, что им там работать...   >>>>
Пакет шрифтов Cyr-RFX (10.09.00)
   Руссификация X11 стала в последнее время достаточно простой. Для этого достаточно указать X-серверу то, что он находится в России и попросить...   >>>>
Emacs (06.09.00)
   Emacs является культовой программой для редактирования текстов. Я думаю, что у людей, которые впервые о нем слышат, должно вызвать удивление номер...   >>>>
Содержание раздела полностью...
   Примерно в тоже время
Формальные оценки (07.09.00)
   Оценка знаний у студента, на мой взгляд, является самым спорным вопросом всего "учебного процесса". Вообще, выставление отметок превращается в некоторое странное...   >>>>
Охотовед (05.09.00)
   Где-то к полудню дядя Билл вернулся, поймав некоторое количество окуней, из которых сделали уху. В это же время мы начали знакомиться...   >>>>
Хронология полностью...
   Содержание
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
  C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Туризм
  Байки
Фотографии
Комментарии
  Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Студенческое
Просто так
Благодарности
Форум
Хронология
© 2000-2008, Andrey L. Kalinin
mailto:andrey@kalinin.ru
Rambler's Top100