Як я можу почати вивчати Emacs Lisp?


39

Фон:

Я здебільшого користувач vi та переходжу на Emacs.

Минулі основи і тепер використовуйте його для написання коду на C та деяких Python, які також планують зробити перетворення R.

Я писав (звичайний) LISP протягом двох десятиліть тому, коли я навчався в середній школі, але зараз сильно провалився (можу написати привіт, але все це).

Питання:

Що б ти порадив хлопцеві, який займає моє становище, щоб дізнатися середовище Emacs LISP та почати хакнути Emacs.

Чи є книги, блоги, ресурси, які я повинен читати, вправи, які я повинен робити?

Відповіді:


11

На мій досвід, включений підручник з Emacs Lisp був не надто корисним (я намагався двічі за ці роки і не вдався). Натомість я нарешті використав включену Emacs Lisp Reference.

Що нарешті спрацювало:

Зрозумійте, що для Emacs Lisp є два аспекти: сама основна мова та взаємодія з Emacs. Розділіть ці два у своєму розумі. Зосередьтеся спочатку на колишньому (не повинно бути занадто важким, як ви дізналися Лісп у минулому). Використовуйте такі сайти, як 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.  Натисніть Enter.  Це так просто!

Крок 1: Прочитайте "Вступ до програмування в Emacs Lisp"

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

У передмові зазначено,

Цей текст написаний як елементарний вступ для людей, які не є програмістами.

Слід сказати, "для людей, які не є програмами Lisp". Lisp трохи відрізняється від інших мов, тому його варто прочитати, якщо ви не знайомі з Lisp. Автор має доступний стиль і проходить багато прикладів. Я пропрацював близько тижня.

Крок 1.5: Поради щодо розвитку Emacs Lisp з Джоном Віглі

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

Крок 2: Прочитайте OPC (Код інших людей)

2а. Прочитайте вихідний код

Оскільки Emacs є "розширюваним, настроюваним, самодокументованим, редактором відображення в режимі реального часу", весь вихідний код включений. Навчіться використовувати довідкові функції, C-h fдля функції та C-h vзмінної. Завжди є посилання на вихідний код:

Клацніть посилання на вихідний код, щоб побачити вихідний код!

2б. Читати всі init.el«S

Багато людей відслідковують свої init.elфайли в Git або Mercurial. Шукайте їх. Один фокус - натиснути на профіль людей на StackOverflow, особливо на emacs.stackexchange.com :

Чувак - енергетичний користувач!

Вони часто мають посилання на свій GitHub або особистий веб-сайт:

Платити брудом!

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

Крок 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
відчуває, що я щойно відвідав квору
user3496846

10

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

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

Якщо цього не вдалося, пошукайте в Інтернеті "Emacs Lisp Intro".


7
  1. Почніть зі сторінки Вікі Emacs Learn 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 . Дізнатися про загальні підводні камені, читаючи основні питання тут, буде корисно. Для вирішення конкретних проблем шукайте або цей сайт, розеткод або улюблену пошукову систему.

Після ознайомлення з основами посібники з інформацією зазвичай дадуть відповідь на більшість питань, що залишилися, що виникають під час злому на Emacs.


1

Оскільки у вас є загальний досвід у Common Lisp і ви "минули основи", немає сенсу губитися у "Введення в програмування в Emacs Lisp".

Що ви можете зробити відразу (у мене немає досвіду роботи в CL, і це працювало для мене):

1) знайти режим, який ви використовуєте, і спробувати додати функції, ви знайдете довідку в довіднику Emacs Lisp

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

Список довідки gnu-emacs надзвичайно корисний.


1

Що б ти порадив хлопцеві, який займає моє становище, щоб дізнатися середовище Emacs LISP та почати хакнути Emacs.

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

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

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

Якщо ви збираєтеся розробити плагін, я виявив, що з читанням коду якогось конкретного плагіна, який вам сподобався, ви можете почати досить швидко.

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

Отож, моя порада - одразу дістатися до точки налаштування, і ви дізнаєтесь все, що потрібно, на ходу. Тим більше, що ви зламали lisp раніше, давно чи ні, і тому, що навчання elisp є, наскільки я можу сказати, засобом для досягнення мети, а саме - налаштувати emacs.


1

Доріжка Елісп на exacism.io - це також цікавий спосіб покращити свої навички. Вправи більш орієнтовані на елісп, ніж на Emacs, але охоплюють хороший діапазон основ, таких як регулярні вирази, структури даних, математика тощо.


Чи можете ви покращити це посилання (наприклад, надати посилання)? Ви можете, будь ласка, підсумувати те, що там знайдено (схоже, вправи)?
Дрю

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

0

Мені здається, що відповідь Лорен Іпсум досить добре висвітлює її.

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

Я просто додам, що я припускаю, що ви знаєте основи Ліспа. Це допомогло б вам, але це не обов'язково (я повернуся до цього.)

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

Таким чином, ви можете зробити це з мовою на ваш вибір, скажімо, режимом Java, режимом Lisp або навіть файлом режиму Elisp.

Змініть його, додайте макроси і т. Д. Ось як я це зробив.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.