Как я могу начать изучать Emacs Lisp?


39

Задний план:

Я в основном пользователь vi и перехожу на Emacs.

Прошлое основы и теперь используйте его для написания кода на C и некоторых Python с планами сделать преобразование R тоже.

Я писал (общий) LISP более двух десятилетий назад, когда я учился в аспирантуре, но сейчас у меня серьезные проблемы (могу написать привет, но это все).

Вопрос:

Что бы вы посоветовали парню из моего положения, чтобы изучить среду Emacs LISP и начать взламывать Emacs.

Есть ли книги, блоги, ресурсы, которые я должен прочитать, упражнения, которые я должен сделать?

Ответы:


11

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

Что в итоге сработало:

Поймите, что в Emacs Lisp есть два аспекта: сам базовый язык и взаимодействие с Emacs. Разделите эти два в своем уме. Сначала сфокусируйтесь на первом (не должно быть слишком сложно, как вы изучали Lisp в прошлом). Используйте такие сайты, как Excercism для практики.

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

  • интерактивный
  • копи-экскурсия
  • копи-ограничение
  • крючки
  • функции консультирования
  • с током-буфера

Как только вы это поймете, вместо того, чтобы тратить все свое время на чтение справочника ELisp, подумайте о простых проблемах, которые у вас есть с Emacs, которые вы хотите написать, и попробуйте решить их с помощью Elisp. Скорее всего, вам потребуется помощь на некоторых этапах, и в этом вам может помочь Google.

Примеры задач, которые я решил применить на практике в Elisp:

  • Когда вы используете org-capture и пишете текст в последней строке буфера захвата, он не ставит новую строку в конце, и поэтому, если бы у меня были какие-либо заголовки после позиции захвата, этот заголовок больше не был бы заголовком , Исправление состояло в том, чтобы сделать ловушку, которая проверяет, есть ли какие-либо новые строки, и если нет, добавьте один в конце захвата.

  • Когда я записываю и перезаправляю за один шаг, он не сохраняет файл, в который была перезаписана запись. Но если я снимаю без дозаправки, это так. Я исправил это несоответствие.

  • При записи минут во время собрания (в файле org), если для кого-то подходит TODO, я хочу сделать захват, который будет искать заголовок под названием TODO (под заголовком верхнего уровня, в котором я нахожусь) и помещать TODO в там. Каждое собрание имеет свой собственный заголовок TODO, и оно должно быть указано в текущем собрании в файле. Это включало написание функции, которая поднимается по дереву на верхний уровень и ищет дочернего элемента с именем TODO.

  • Убить все буферы определенного режима (может быть внутренняя функция уже это делает, но я этого не знал).

Наконец, убедитесь, что вы знаете следующие сочетания клавиш:

  • Cx Ce (оценить выражение)
  • Ch v (посмотрите значение и значение переменной)
  • Ch f (посмотрите описание встроенной функции).

33

Какой замечательный вопрос! Вот путь, который я выбрал:

Шаг 0: прочитайте учебник по Emacs

Прочитайте Учебник Emacs прежде всего. Похоже, вы сделали это. Молодец! Тем не менее, для тех, кто придет к этому позже, это место, где можно начать путешествие Emacs. Есть много вводящих в заблуждение сообщений в блоге там. Они более усложняют вещи. Emacs делает это легко:

  1. Запустите Emacs
  2. Нажмите <RET>

Вы также можете получить доступ к нему через Ctrl + h t, или C-h tв Emacs нотации.

Учебное пособие знакомит с основными понятиями Emacs, разъясняет историческую терминологию и дает вам представление менее чем за 30 минут. Это также создает основу для следующего шага.

Откройте Emacs.  Нажмите Ввод.  Это так просто!

Шаг 1: Прочтите «Введение в программирование в Emacs Lisp»

Следующий шаг - прочитать Введение в программирование в Emacs Lisp . Я не могу рекомендовать эту книгу достаточно; это так хорошо написано! Он поставляется с большинством установок Emacs 1 . Просто нажмите C-h iи выберите его из меню. Вы также можете перейти к нему напрямую через C-h i m Emacs Lisp Intro.

Предисловие гласит:

Этот текст написан как элементарное введение для людей, которые не являются программистами.

Следует сказать «для людей, которые не являются программистами на Лиспе». Lisp немного отличается от других языков, поэтому его стоит прочитать, если вы не знакомы с Lisp. Автор имеет доступный стиль и просматривает множество примеров. Мне потребовалось около недели, чтобы проработать.

Шаг 1.5: Советы по разработке Emacs Lisp с Джоном Вигли

С конца 2015 года Джон является сопровождающим проекта Emacs . Sacha Чуа делает большое интервью с ним здесь , в котором Джон переходит основы Emacs, среды разработки и предоставляет много хороших советов.

Шаг 2: Прочитайте OPC (код другого человека)

2а. Прочитайте исходный код

Поскольку Emacs является «расширяемым, настраиваемым, самодокументируемым редактором отображения в реальном времени», весь исходный код включен. Научитесь использовать функции справки, C-h fдля функции и C-h vдля переменной. Всегда есть ссылка на исходный код:

Нажмите на ссылку исходного кода, чтобы увидеть исходный код!

2b. Читать все init.el«S

Многие люди отслеживают свои init.elфайлы в Git или Mercurial. Ищите их. Одна хитрость заключается в том, чтобы щелкнуть профиль пользователя в StackOverflow, особенно emacs.stackexchange.com :

Чувак - опытный пользователь!

У них часто есть ссылки на их GitHub или персональный сайт:

Золотая жила!

Репо называются dotemacsили dotfilesвстречаются довольно часто. Со временем вы получите представление о том, как выглядит хороший код и как выглядит плохой код. Вы также узнаете такие громкие имена, как Xah , Sasha Chua , binchen , Magnar Sveen , abo-abo и многие другие. Есть так много людей, чтобы учиться!

Шаг 3: Взломать Emacs

Испытайте себя, чтобы написать функциональность, которую вы хотите. Никогда не копируйте код вслепую; всегда находите время, чтобы понять это. Если вы этого не понимаете, не используйте его! Если вы потратите время на то, чтобы понять фрагмент кода, помимо изучения чего-то нового, вы часто будете думать о том, как улучшить его для своего конкретного случая использования. Это возможность взломать! В конце концов, это то, что вы init.elдля! Делайте ошибки, ломайте вещи, учитесь отлаживать. Вы обнаружите, что, поскольку Emacs написан на Elisp, разработка доставляет удовольствие.

Шаг 4: Задайте вопросы на emacs.stackexchange.com

Я обнаружил, что сообщество Emacs на StackExchange любит хороший вопрос по Elisp. Так что взломайте с уверенностью, что другие люди оценят ваши усилия по обучению.

Шаг 5: Ответьте на вопросы на emacs.stackexchange.com

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

Вывод

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

Счастливого взлома! :)

PS: проверить пакет зла .


1 Некоторые установки не идут с этим. Например, пользователи Debian должны устанавливать его отдельно. Это немного глупо , но хранится в несвободных репозиториях . Добавьте несвободное репо /etc/apt/sources.list, добавив non-freeв конец каждой записи:

deb http://http.us.debian.org/debian stable main contrib non-free

1
такое ощущение, что я только что посетил quora
user3496846

10

Я рекомендую "Emacs Lisp Intro".

"Emacs Lisp Intro" может быть уже доступно в информационном формате в вашем Emacs. Попробуйте C-h i m Emacs Lisp Intro RETили оцените (info "(eintr) Top")в Emacs.

Если это не сработает, поищите в Интернете «Emacs Lisp Intro».


7
  1. Начните со страницы Emacs Wiki Изучите Emacs Lisp .

    Не то чтобы эта страница сама научила вас Emacs Lisp. Вместо этого он будет указывать на учебные ресурсы - именно то, что вы ищете здесь , с вашим вопросом. Многие пользователи внесли свой вклад и редактировали его в течение нескольких лет. Это дает как преимущества, так и недостатки в блоге одного пользователя. Качество предложений там, конечно, различно из-за разнообразия входных данных.

  2. Помимо этого - все, что здесь говорили другие, особенно начиная со встроенного документа Emacs:

    • Руководство по Elisp - в основном справочное пособие, но также есть хорошее руководство по использованию и концептуальная информация. Он встроен в Emacs: C-h iзатем выберите руководство по Elisp.

    • Введение в Emacs Lisp - пошаговое введение в Lisp и Emacs Lisp. Также встроен в Emacs и доступен из C-h i.

  3. Поскольку вы использовали Common Lisp, вам будет очень легко получить Emacs Lisp. Считай, что тебе повезло.

    Если бы вы использовали Common Lisp (или Zeta Lisp или что-то еще) на машине Lisp, то опыт был бы весьма схожим. Вы можете думать о Emacs как о (среди прочего), отличной среде Lisp. Вы можете перейти от нуля до 60 в кратчайшие сроки, при обучении.

  4. Повеселись!


2

В качестве переподготовки по Lisp я настоятельно рекомендую первые три главы « Парадигм программирования искусственного интеллекта» Питера Норвигса . В них вы познакомитесь с Lisp в быстром и быстром темпе, который быстро вернет вас в нужное русло.

Для всех новичков есть COMMON LISP: Нежное Введение в Символьные Вычисления, которое учит вас тем же самым понятиям, но в намного более низком темпе.

Обе книги доступны онлайн, бесплатно.

После ознакомления с одним из вышеперечисленных вы можете прочитать все сообщения с тегами Elisp на nullprogram.com и просмотреть руководство по чтению на masteringemacs.org . Чтобы узнать о распространенных ошибках чтения главных вопросов здесь будет помощь. Для определенных проблем ищите либо этот сайт, розеттакод или ваш любимый поисковик.

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


1

Поскольку у вас есть опыт работы с Common Lisp, и вы «не знакомы с основами», нет смысла терять в «Введение в программирование в Emacs Lisp».

То, что вы можете сделать прямо сейчас (у меня нет опыта в CL, и он работал для меня), это:

1) найдите режим, который вы используете, и попробуйте добавить функции, вы найдете помощь в Справочнике по Emacs Lisp

2) напишите свой собственный файл с вашими простыми функциями, и здесь используйте Emacs Lisp Reference

Список help-gnu-emacs чрезвычайно полезен.


1

Что бы вы посоветовали парню из моего положения, чтобы изучить среду Emacs LISP и начать взламывать Emacs.

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

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

Просмотр MELPA заставил меня установить и попробовать, может быть, дюжину пакетов.

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

Так как вы используете vi, посмотрите режим зла , он отлично работает для меня. Я бы также порекомендовал helm с helm-apropos(или просто, aproposесли вы не хотите helm) командой, чтобы облегчить ваше путешествие.

Поэтому я советую сразу же добраться до пункта настройки, и вы узнаете все, что вам нужно, на ходу. Тем более, что вы взламывали lisp раньше, давно или нет, и потому что изучение elisp, насколько я могу судить, для вас является средством для достижения цели, а именно для настройки emacs.


1

Трасса Elisp на exercism.io - это еще и увлекательный способ улучшить свои навыки. Упражнения в большей степени сосредоточены на elisp, чем на Emacs, но охватывают широкий спектр основ, таких как регулярные выражения, структуры данных, математика и т. Д.


Можете ли вы улучшить эту ссылку (например, предоставить ссылку)? Не могли бы вы подвести итог тому, что там найдено (какие-то упражнения, кажется)?
Дрю

exercism.io Это сайт, где вы можете выбрать язык и решить с ним различные проблемы - и увидеть решения других людей. Я обнаружил, что просмотр решений других людей о проблеме, которую вы только что потратили на решение проблемы, является хорошим способом изучения новых функций.
Жук Б.

0

Мне кажется, что ответ Лорен Ипсум достаточно хорошо освещает это.

https://emacs.stackexchange.com/a/47320/21433

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

Один из способов обучения - просто взломать или изменить существующий режим / расширение. Я узнал об этом еще в 93 году, взломав файл языкового режима Ada. Это был один из самых забавных событий, которые я получил в колледже.

Таким образом, вы можете сделать это с языком по вашему выбору, скажем, режимом Java, режимом Lisp или даже файлом режима Elisp.

Измените это, добавьте макросы и т. Д. Вот как я это сделал.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.