- PVSM.RU - https://www.pvsm.ru -
Если вы получаете удовольствие от программирования, то, наверняка, перманентно находитесь в состоянии поиска лучших инструментов, лучших идей, лучших решений. И знаете, конечной остановкой лично для меня стал Emacs. А точнее — его сборка под названием ErgoEmacs. Под катом будет попытка логического и последовательного рассказа об использовании данного текстового редактора в контексте знакомства с ним впервые в жизни (не вдаваясь в сильную конкретику, а скорее стараясь уловить общую идею); идеологическая пропаганда (емакса вообще и лиспа в частности); небольшая критика последней из статей на Хабре по данной тематике, а также небольшое философское заключение. Если вы хотите расширить свой кругозор, прошу под кат.
Данную статью я решил написать после прочтения этой [1] потому, что если бы я не использовал Emacs, то ничего бы не понял (из статьи, на которую приведена ссылка), а если бы использовал, то понял бы, что если бы не использовал, то ничего бы не понял. Статься написана бессистемно, используя простую компиляцию (фактологического материала, ссылок на ресурсы и собственного .emacs [файла настроек]), что явно не поспособствует привлечению в наши ряды новых адептов. Попробуем исправить ситуацию.
Итак, изначально предполагается, что вы:
Вопрос настолько же риторический для любого емаксера, насколько и бессмысленный для любого человека, который впервые откроет этот редактор. Формальный ответ следующий — при работе с Emacs вы получаете возможность:
Вообще говоря, это все из действительно объективных показателей полезности (кроссплатформенность, нетребовательность к аппаратным ресурсам и прочее я в расчет не беру, так как от этого мало толку, учитывая некоторую сложность при изучении программы). Но, с моей точки зрения, и исходя из моего опыта пользования редактором, двух описанных пунктов вполне достаточно, чтобы начать получать максимальное удовольствие и удобство в процессе работы (даже пусть и после некоторого потраченного времени на освоение возможностей Emacs).
Дополнительные бонусы появляются, если вы программируете на Common Lisp [2]. Устанавливая Emacs, SBCL [3], Slime [4] и quicklisp [5] вы, по сути, получаете «нативную» среду разработки. Для Emacs написано огромное количество дополнений разной степени полезности и качества, но в общем и целом для Web-разработки этого хватает с головой. Существует также прекрасный менеджер пакетов [6] и менеджер библиотек [5], которые существенно облегчат вам жизнь. Есть множество прекрасных тем оформления для комфортной работы.
Но самое главное, в контексте обсуждаемого нами вопроса, это то, что есть умные китайцы. И один из них, по имени Xah Lee (старый, прожженный емаксер), создал сборку Emacs, «перебиндив» почти все активно используемые сочетания клавиш (а в базовом емаксе, они, мягко говоря, не удобные и не очевидные), добавил некоторые пункты меню и установил море нужных (в каждом хозяйстве) плагинов и с десяток тем оформления. Назвал он все это дело ErgoEmacs [7]?, тонко намекая будущим пользователям на то, что его сборка «несколько удобнее», чем базовый редактор. Я считаю, что первоначальное знакомство (да и все последующее в принципе тоже), нужно начинать именно с этой сборки. И главной причиной тому является простота освоения (и пользования) программой, по сравнению с установкой базовой версии (дело и в сочетаниях клавиш, и в сэкономленном времени на установку и настройку плагинов, и в прекрасном «туториале» [8] для этой сборки). Также высока вероятность того, что юный адепт не плюнет в экран монитора и не закроет этот сложный и не понятный редактор, как это обычно бывает в случаях, когда морально (умственно, идейно) не подготовленный человек устанавливает Emacs.
На этом базовая настройка емакса, в принципе, закончена. Можете начинать экспериментировать и творить. Крайне рекомендую почитать туториал на сайте проекта, выучить основные комбинации клавиш (для перемещения курсора, к примеру, зажмите Alt и нажимайте J, K, L, I). В сборке, по умолчанию, вместо комбинации клавиш «M-x» предусмотрена комбинация клавиш «M-a» (где М это Alt). Посмотрите хотя бы первые три (самые основы) лекции подкаста Дмитрия Бушенко [10]. Также можете ознакомится с творением того же Дмитрия Бушенко в соавторстве с А. Оттом «Programming Emacs for Editting and Refactoring Code», в котором дается база программирования emacs lisp. Надумаете создать из Emacs среду разработки для Common Lisp — следующее видео в помощь [11]. Купите эргономичную клавиатуру. И будет вам счастье.
Собственно статья эта не об ErgoEmacs (хотя большая ее часть было именно о нем). Она о Лиспе (точнее о современном диалекте этого языка — Common Lisp). Потому как, на мой взгляд, заставить человека использовать даже ErgoEmacs (не говоря уже о базовой версии этого редактора), крайне тяжело без веской на то причины. И главной причиной был и всегда будет Lisp. Если ты любишь Lisp — ты программируешь в Emacs. И это утверждение не нуждается в доказательстве.
В конечном итоге, последней инстанцией, определяющей выбор той или иной идеи (языка, концепции, теории, веры) является понятие «красоты». Нет более страшного оскорбления для физика, к примеру, чем сказать ему о том, что его теория не красива. Рефлексивность нашего
Да, Лисп потерпел рыночный крах и как язык системного программирования [13], и как прикладного [14], а Lisp-машины [15] стали экспонатами музеев. Но вина ли в этом Лиспа? Я думаю, что нет. Не буду углубляться в историю компании Symbolics, Inc. [16], самого крупного игрока на рынке lisp-машин, системного и прикладного программного обеспечения, написанного на Лиспе, но одним из ключевых инженеров этой компании был некто иной как Ричард Столмэн — бог современных линуксоидов и основатель Free Software Foundaion. Столмэн по идейным соображениям ненавидел идею коммерческого ПО и воровал код из Symbolics, копируя его в бесплатный продукт MIT [17]. Когда же это вскрылось, он послал e-mail в компанию и угрожал взорвать динамитом. И смешно, и грустно. Это одна из более-менее конкретных причин краха Лиспа. Но она далеко не ключевая, на мой взгляд.
Корень проблемы в идеологии современного общества. Лисп был на пике популярности во время бума исследований в области искусственного интеллекта и создания экспертных систем [18]. Когда человечеству надоело заниматься развитием, а захотелось получать наслаждение (продавая и покупая), то и Лисп ушел со сцены. Он стал не нужен. Он артефакт современного общества — предмет уникальный и обладающий особыми свойствами, но практически не использующийся по прямому назначению в следствии своей сложности (в изучении, воспроизведении) и отсутствия задач соответствующего масштаба.
Тем не менее, это не умаляет мощности, красоты и выразительности языка, а так же его гомоморфности [19] человеческому интеллекту.
Если кому-то интересен мой .emacs, то вот он.
(load (expand-file-name "~/quicklisp/slime-helper.el"))
;; Replace «sbcl» with the path to your implementation
(setq inferior-lisp-program «C:/sbcl/sbcl.exe»)
(setq show-paren-style 'expression)
(show-paren-mode 2)
(menu-bar-mode 1)
(tool-bar-mode -1)
(setq make-backup-files nil); Don't want any backup files
(setq auto-save-list-file-name nil); Don't want any .saves files
(setq auto-save-default nil); Don't want any auto saving
(set-language-environment 'UTF-8)
(setq default-buffer-file-coding-system 'utf-8-unix)
(require 'slime)
(setq slime-net-coding-system 'utf-8-unix)
(slime-setup '(slime-fancy))
(setq lisp-indent-function 'common-lisp-indent-function)
;; built-in
(require 'ido)
(ido-mode t)
(setq ido-enable-flex-matching t)
;; built-in
(require 'bs)
(setq bs-configurations
'((«files» "^\*scratch\*" nil nil bs-visits-non-file bs-sort-buffer-interns-are-last)))
(global-set-key (kbd "") 'bs-show)
(require 'sr-speedbar)
(global-set-key (kbd "") 'sr-speedbar-toggle)
(when (>= emacs-major-version 24)
(require 'package)
(package-initialize)
(add-to-list 'package-archives '(«melpa». «melpa.milkbox.net/packages/ [20]») t)
)
(global-set-key (kbd "") 'other-window)
(global-set-key (kbd "") 'slime-eval-defun)
(global-set-key (kbd "") 'slime-eval-last-expression)
(global-set-key (kbd "") 'slime-compile-file)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(cua-mode t nil (cua-base))
'(custom-enabled-themes (quote (deeper-blue)))
'(show-paren-mode t)
'(tool-bar-mode nil))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family «Consolas» :foundry «outline» :slant normal :weight bold :height 158 :width normal))))
'(completions-common-part ((t (:inherit default :foreground «red»))))
'(diredp-compressed-file-suffix ((t (:foreground "#7b68ee"))))
'(diredp-ignored-file-name ((t (:foreground "#aaaaaa"))))
'(show-paren-match ((((class color) (background light)) (:background «azure2»)))))
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq TeX-save-query nil)
(setq TeX-PDF-mode t)
Автор: LanKano_CL
Источник [21]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/80792
Ссылки в тексте:
[1] этой: http://habrahabr.ru/post/248663/
[2] Common Lisp: https://ru.wikipedia.org/wiki/Common_Lisp
[3] SBCL: https://ru.wikipedia.org/wiki/Steel_Bank_Common_Lisp
[4] Slime: https://ru.wikipedia.org/wiki/SLIME
[5] quicklisp: http://www.quicklisp.org/beta/
[6] менеджер пакетов: http://emacswiki.org/emacs/ELPA
[7] ErgoEmacs: http://ergoemacs.org/
[8] «туториале»: http://ergoemacs.org/emacs/emacs.html
[9] ErgoEmacs: https://code.google.com/p/ergoemacs/downloads/detail?name=ErgoEmacs%202.0.0%20Setup-rc1.exe
[10] подкаста Дмитрия Бушенко: https://www.youtube.com/user/dbushenko/videos
[11] видео в помощь: https://www.youtube.com/watch?v=VnWVu8VVDbI
[12] мышления: http://www.braintools.ru
[13] язык системного программирования: http://en.wikipedia.org/wiki/Genera_(operating_system)
[14] как прикладного: http://en.wikipedia.org/wiki/Macsyma
[15] Lisp-машины: https://ru.wikipedia.org/wiki/Лисп-машина
[16] Symbolics, Inc.: http://en.wikipedia.org/wiki/Symbolics
[17] MIT: https://ru.wikipedia.org/wiki/Массачусетский_технологический_институт
[18] экспертных систем: https://ru.wikipedia.org/wiki/Экспертная_система
[19] гомоморфности: http://dic.academic.ru/dic.nsf/enc_philosophy/4333/ИЗОМОРФИЗМ
[20] melpa.milkbox.net/packages/: http://melpa.milkbox.net/packages/
[21] Источник: http://habrahabr.ru/post/248957/
Нажмите здесь для печати.