Wie kann ich Emacs Lisp lernen?


39

Hintergrund:

Ich bin größtenteils ein vi-Benutzer und konvertiere zu Emacs.

Überholen Sie die Grundlagen und verwenden Sie sie jetzt, um Code in C und Python zu schreiben, mit dem Plan, auch eine R-Konvertierung durchzuführen.

Ich habe (Common) LISP vor über zwei Jahrzehnten geschrieben, als ich in der Grundschule war, aber jetzt bin ich schwer daneben gegangen (kann Hallo Welt schreiben, aber das war's).

Frage:

Was würden Sie einem Mann in meiner Position empfehlen, um die Emacs LISP-Umgebung kennenzulernen und Emacs zu hacken?

Gibt es Bücher, Blogs, Ressourcen, die ich lesen sollte, Übungen, die ich machen sollte?

Antworten:


11

Meiner Erfahrung nach war das mitgelieferte Tutorial zu Emacs Lisp nicht allzu hilfreich (ich habe es über die Jahre zweimal versucht und bin gescheitert). Stattdessen habe ich endlich die mitgelieferte Emacs Lisp Reference verwendet.

Was hat endlich funktioniert:

Erkennen Sie, dass Emacs Lisp zwei Aspekte hat: Die Basissprache selbst und die Interaktion mit Emacs. Trennen Sie diese beiden in Ihrem Kopf. Konzentriere dich zuerst auf Ersteres (sollte nicht zu schwer sein, wie du Lisp in der Vergangenheit gelernt hast). Verwenden Sie Websites wie Excercism zum Üben.

Sobald Sie die Grundlagen (Schleifen, Funktionen, Variablen, Bedingungen usw.) im Griff haben, fahren Sie mit den Aspekten fort, die Emacs selbst betreffen (Ändern von Text, Wechseln von Puffern usw.). Das ist gewaltig und Sie werden sich wahrscheinlich in einem Meer von Details verlieren. Es gibt ein paar Dinge, die Sie wirklich gut verstehen sollten , da Sie sie häufig verwenden werden. Sie sind:

  • interaktiv
  • Sicherheitsausflug
  • Speicherbeschränkung
  • Haken
  • beratende Funktionen
  • with-current-buffer

Wenn Sie diese verstanden haben, denken Sie an einfache Probleme mit Emacs, die Sie schreiben möchten, und versuchen Sie, sie mit Elisp zu lösen, anstatt Ihre Zeit mit dem Lesen der ELisp-Referenz zu verbringen. In einigen Schritten werden Sie wahrscheinlich Hilfe benötigen, und hier kann Google Ihnen helfen.

Beispiele für Probleme, die ich gelöst habe, um mein Elisp zu üben:

  • Wenn Sie org-capture verwenden und Text in die letzte Zeile des Capture-Puffers schreiben, wird am Ende keine neue Zeile eingefügt. Wenn ich also nach der Capture-Position Überschriften hätte, wäre diese Überschrift keine Überschrift mehr . Der Fix bestand darin, einen Hook zu erstellen, der prüft, ob Zeilenumbrüche vorhanden sind, und, falls nicht, einen am Ende der Aufnahme hinzufügt.

  • Wenn ich in einem Schritt aufnehme und erneut speichere, wird die Datei, in die der Eintrag erneut gespei- chert wurde, nicht gespeichert. Aber wenn ich ohne Nachfüllen aufnehme, tut es das auch. Ich habe diese Inkonsistenz behoben.

  • Wenn ich während einer Besprechung (in einer Organisationsdatei) ein Protokoll schreibe und ein TODO für jemanden auftaucht, möchte ich ein Capture erstellen, das nach einer Überschrift namens TODOs (unter der Überschrift auf oberster Ebene, in der ich mich befinde) sucht und das TODO einfügt Dort. Jede Besprechung hat eine eigene Überschrift für die Aufgaben und sollte zu der Überschrift für die aktuelle Besprechung in der Datei wechseln. Dazu musste eine Funktion geschrieben werden, die den Baum bis zur obersten Ebene hochführt und nach einem Kind namens TODOs sucht.

  • Löschen Sie alle Puffer eines bestimmten Modus (möglicherweise gibt es eine interne Funktion, die dies bereits ausführt, aber ich wusste es nicht).

Stellen Sie abschließend sicher, dass Sie die folgenden Tastenkombinationen kennen:

  • Cx Ce (Ausdruck auswerten)
  • Ch v (die Bedeutung und den Wert einer Variablen nachschlagen)
  • Ch f (Beschreibung einer eingebauten Funktion nachschlagen).

33

Was für eine tolle Frage! Hier ist der Weg, den ich eingeschlagen habe:

Schritt 0: Lesen Sie das Emacs-Tutorial

Lesen Sie vor allem das Emacs-Tutorial. Es hört sich so an, als hättest du das getan. Gut auf dich! Für alle, die zu einem späteren Zeitpunkt hierher kommen, ist dies jedoch der richtige Ort, um Ihre Emacs-Reise zu beginnen. Es gibt viele irreführende Blog-Posts. Sie verkomplizieren die Dinge. Emacs macht es einfach:

  1. Starten Sie Emacs
  2. Drücken Sie <RET>

Sie können auch über Ctrl + h toder C-h tin Emacs-Notation darauf zugreifen .

Das Tutorial führt in die grundlegenden Konzepte von Emacs ein, klärt die historische Terminologie und bringt Sie in weniger als 30 Minuten zum Laufen. Es schafft auch die Voraussetzungen für den nächsten Schritt.

Öffnen Sie Emacs.  Drücken Sie Enter.  So einfach ist das!

Schritt 1: Lesen Sie "Eine Einführung in die Programmierung in Emacs Lisp"

Der nächste Schritt ist das Lesen einer Einführung in die Programmierung in Emacs Lisp . Ich kann dieses Buch nicht genug empfehlen. es ist so gut geschrieben! Es kommt mit den meisten Emacs installiert 1 . Drücken C-h iSie einfach und wählen Sie es aus dem Menü. Sie können es auch direkt über aufrufen C-h i m Emacs Lisp Intro.

Im Vorwort heißt es:

Dieser Text ist eine grundlegende Einführung für Personen, die keine Programmierer sind.

Es sollte heißen "für Leute, die keine Lisp-Programmierer sind." Lisp ist ein bisschen anders als andere Sprachen, es lohnt sich also zu lesen, wenn Sie mit Lisp nicht vertraut sind. Der Autor hat einen ansprechbaren Stil und geht durch viele Beispiele. Es dauerte ungefähr eine Woche, bis ich fertig war.

Schritt 1.5: Emacs Lisp-Entwicklungstipps mit John Wiegley

Ab Ende 2015 ist John der Betreuer des Emacs-Projekts . Sacha Chua führt hier ein großartiges Interview mit ihm , in dem John die Grundlagen von Emacs Lisp, der Entwicklungsumgebung, erläutert und viele gute Ratschläge gibt.

Schritt 2: OPC lesen (Code anderer Leute)

2a. Lesen Sie den Quellcode

Da Emacs "der erweiterbare, anpassbare, selbstdokumentierende Echtzeit-Anzeige-Editor" ist, ist der gesamte Quellcode enthalten. Erfahren Sie, wie Sie die Hilfefunktionen C-h ffür eine Funktion und C-h veine Variable verwenden. Es gibt immer einen Link zum Quellcode:

Klicken Sie auf den Quellcode-Link, um den Quellcode anzuzeigen!

2b. Lesen Sie alle init.el‚s

Viele Leute verfolgen ihre init.elDateien in Git oder Mercurial. Suche sie aus. Ein Trick ist, auf das Profil von Leuten auf StackOverflow zu klicken, insbesondere auf emacs.stackexchange.com :

Geck ist ein Power-User!

Sie haben oft Links zu ihrem GitHub oder ihrer persönlichen Website:

Zahlen Sie Schmutz!

Repos werden angerufen dotemacsoder dotfilessind durchaus üblich. Mit der Zeit werden Sie ein Gefühl dafür bekommen, wie guter Code aussieht und wie schlechter Code aussieht. Sie werden auch die großen Namen, wie die von lernen Xah , Sasha Chua , binchen , Magnar Sveen , abo-abo , und viele mehr. Es gibt so viele Menschen, von denen man lernen kann!

Schritt 3: Hack auf Emacs

Fordern Sie sich heraus, die gewünschte Funktionalität zu schreiben. Kopieren Sie den Code niemals blind. Nimm dir immer die Zeit, es zu verstehen. Wenn du es nicht verstehst, benutze es nicht! Wenn Sie sich die Zeit nehmen, einen Teil des Codes zu verstehen, denken Sie oft darüber nach, etwas Neues zu lernen und es für Ihren speziellen Anwendungsfall zu verbessern. Dies ist eine Gelegenheit zum Hacken! Immerhin ist das, wofür du init.elbist! Fehler machen, Dinge kaputt machen, Debuggen lernen. Sie werden feststellen, dass die Entwicklung eine Freude ist, da Emacs in Elisp geschrieben ist.

Schritt 4: Stellen Sie Fragen auf emacs.stackexchange.com

Ich habe festgestellt, dass die Emacs-Community auf StackExchange eine gute Elisp-Frage liebt. Hacken Sie also mit Zuversicht, dass andere Menschen Ihre Lernanstrengungen schätzen.

Schritt 5: Beantworten Sie Fragen auf emacs.stackexchange.com

Nichts macht Ihr Verständnis klarer als der Versuch, etwas zu erklären. Auf der Hauptseite finden Sie auch Antworten auf Fragen, von denen Sie nie gewusst haben, dass Sie sie haben.

Fazit

Mit der Zeit werden Sie in der Lage sein, schneller Lösungen zu generieren und die Fragen anderer zu beantworten. Wie bei jeder Programmierung kann es frustrierend sein. Denken Sie jedoch daran, sich heute gegen sich selbst zu richten. Einige Leute haben Emacs buchstäblich 30 Jahre lang gehackt! Die meiste Zeit werden Sie jedoch feststellen, dass es ein Vergnügen ist, mit Emacs zu arbeiten, und die Freiheit, die es Ihnen gibt, ist inspirierend.

Viel Spaß beim Hacken! :)

PS: Schauen Sie sich das Paket böse an .


1 Einige Installationen werden nicht mitgeliefert. Debian-Benutzer müssen es zum Beispiel separat installieren. Es ist irgendwie albern , aber es ist in den unfreien Repos gespeichert . Fügen Sie ein unfreies Repo hinzu, /etc/apt/sources.listindem Sie non-freeam Ende jedes Eintrags Folgendes anfügen :

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

1
fühlt sich an, als hätte ich gerade quora besucht
user3496846

10

Ich empfehle das "Emacs Lisp Intro".

Das "Emacs Lisp Intro" ist möglicherweise bereits im Info-Format in Ihrem Emacs verfügbar. Probieren C-h i m Emacs Lisp Intro REToder bewerten Sie (info "(eintr) Top")in Emacs.

Wenn dies fehlschlägt, suchen Sie im Web nach "Emacs Lisp Intro".


7
  1. Beginnen Sie mit der Emacs Wiki-Seite Learn Emacs Lisp .

    Nicht, dass dir diese Seite selbst Emacs Lisp beibringen würde. Stattdessen wird auf Lernressourcen verwiesen - genau das , wonach Sie mit Ihrer Frage hier suchen . Viele Benutzer haben über einen Zeitraum von Jahren dazu beigetragen und sie bearbeitet. Das bringt sowohl Vor- als auch Nachteile für den Blog eines Benutzers mit sich. Die Qualität der dortigen Vorschläge ist natürlich aufgrund der Vielzahl der Eingaben unterschiedlich.

  2. Darüber hinaus - alles, was andere hier gesagt haben, insbesondere beginnend mit dem eingebauten Dokument von Emacs:

    • Das Elisp-Handbuch - meist eine Referenz, aber auch einige gute Anleitungen und konzeptionelle Informationen. Es ist in Emacs integriert: C-h iWählen Sie dann das Elisp-Handbuch.

    • Das Emacs Lisp Intro - Schritt für Schritt Einführung in Lisp und Emacs Lisp. Auch in Emacs eingebaut und erhältlich von C-h i.

  3. Da Sie Common Lisp verwendet haben , wird es Super leicht Emacs Lisp zu holen. Betrachten Sie sich glücklich darüber.

    Wenn Sie Common Lisp (oder Zeta Lisp oder was auch immer) auf einem Lisp-Computer verwendet hätten, wäre die Erfahrung ziemlich ähnlich. Sie können sich Emacs (unter anderem) als eine großartige Lisp-Umgebung vorstellen. Sie können beim Lernen in kürzester Zeit von Null auf 60 wechseln.

  4. Habe Spaß!


2

Als Auffrischung zu Lisp empfehle ich die ersten drei Kapitel von Peter Norvigs Paradigmen der Programmierung künstlicher Intelligenz . Diese geben Ihnen einen tollen und schnellen Einstieg in Lisp, der Sie schnell wieder auf den richtigen Weg bringt.

Für Total Noobs gibt es COMMON LISP: Eine sanfte Einführung in die symbolische Berechnung, die Ihnen die gleichen Konzepte beibringt, jedoch mit viel geringerem Tempo.

Beide Bücher sind kostenlos online erhältlich.

Durch eine der oben Nachdem wir können Sie alle Elisp tagged posts auf lesen nullprogram.com und gehen durch die Leseführung bei masteringemacs.org . Um zu erfahren , über häufige Fehlerquellen , die wichtigsten Fragen zu lesen hier wird hilfreich sein. Suchen Sie nach bestimmten Problemen entweder auf dieser Website, in rosettacode oder in Ihrer bevorzugten Suchmaschine.

Nachdem Sie mit den Grundlagen vertraut sind, beantworten die Info-Handbücher in der Regel die meisten verbleibenden Fragen, die beim Hacken auf Emacs auftreten.


1

Da Sie einen Hintergrund in Common Lisp haben und "die Grundlagen hinter sich haben", macht es keinen Sinn, sich in der "Einführung in die Programmierung in Emacs Lisp" zu verlieren.

Was Sie sofort tun können (ich habe keinen Hintergrund in CL und es hat bei mir funktioniert) ist:

1) Suchen Sie einen Modus, den Sie verwenden, und versuchen Sie, Funktionen hinzuzufügen. Hilfe finden Sie in der Emacs Lisp-Referenz

2) Schreiben Sie Ihre eigene benutzerdefinierte Datei mit Ihren eigenen einfachen Funktionen. Verwenden Sie auch hier die Emacs Lisp-Referenz

Die Hilfe-Gnu-Emacs-Liste ist sehr hilfreich.


1

Was würden Sie einem Mann in meiner Position empfehlen, um die Emacs LISP-Umgebung kennenzulernen und Emacs zu hacken?

Ich glaube wirklich nicht, dass Sie etwas Spezielles über Emacs Lisp lesen müssen. Es ist kein Geheimnis, dass man, wenn man etwas in Emacs machen will , wahrscheinlich nur den richtigen Befehl finden muss oder jemand den Code bereits geschrieben hat und er sich jetzt irgendwo auf einer Wiki-Seite oder einem Github befindet oder in einem Plugin erstellt wurde . Wenn Sie diesen Code einfach kopieren und lesen , haben Sie einen guten Teil von Emacs Lisp gelernt, wenn Sie mit Ihren .emacs sogar ein wenig zufrieden sind.

Wenn Sie einige Ideen zum Anpassen von Emacs erhalten möchten, sind benutzerdefinierte Konfigurationen anderer Benutzer möglicherweise eine gute Quelle der Weisheit. Eine ausgewählte Liste solcher Konfigurationen finden Sie hier . Eigentlich funktioniert es jedoch besser, wenn Sie Ihre eigene Vision haben und die .emacs anderer Leute besuchen. Dies ist normalerweise nur dann gerechtfertigt, wenn einige Fragen beantwortet werden sollen (z. B. wie strukturiere ich meinen Code / meine Pakete?) Oder wenn ein Code für ein bestimmtes Ziel von Ihnen kopiert wird.

Durchsuchen von MELPA hat mich veranlasst, ein Dutzend Pakete zu installieren und zu testen .

Wenn Sie ein Plugin entwickeln, kann das Lesen des Codes eines bestimmten Plugins, das Ihnen gefällt, Ihnen den Einstieg erleichtern.

Da Sie vi benutzen, schauen Sie sich den Bösen-Modus an , er hat bei mir großartig funktioniert. Ich würde auch Helm mit helm-apropos(oder nur aproposwenn Sie nicht wollen helm) Befehl empfehlen , um Ihre Reise einfacher zu machen.

Mein Rat ist also, sofort zum Anpassungspunkt zu gelangen, und Sie werden unterwegs alles lernen, was Sie brauchen. Vor allem, dass Sie vor langer Zeit lisp gehackt haben oder nicht, und weil das Lernen von elisp für Sie, soweit ich das beurteilen kann, ein Mittel zum Zweck ist, nämlich das Anpassen von Emacs.


1

Der Elisp-Track zu exercism.io ist auch eine unterhaltsame Möglichkeit, Ihre Fähigkeiten zu verbessern. Die Übungen konzentrieren sich mehr auf Elisp als auf Emacs, decken jedoch eine Reihe von Grundlagen wie reguläre Ausdrücke, Datenstrukturen, Mathematik usw. ab.


Können Sie diesen Verweis verbessern (z. B. einen Link bereitstellen)? Können Sie bitte zusammenfassen, was dort zu finden ist (es scheint, dass es sich um Übungen handelt)?
Drew

exercism.io Auf dieser Website können Sie eine Sprache auswählen und verschiedene Probleme damit lösen - und die Lösungen anderer sehen. Ich habe festgestellt, dass das Durchsuchen der Lösungen anderer Leute für ein Problem, für das Sie gerade Zeit aufgewendet haben, eine gute Möglichkeit ist, neuere Funktionen zu erlernen.
Käfer B.

0

Mir scheint, die Antwort von Loren Ipsum deckt das ziemlich gut ab.

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

Ich möchte einfach hinzufügen, dass ich davon ausgehe, dass Sie die Grundlagen von Lisp kennen. Das würde dir helfen, aber es ist nicht notwendig (darauf komme ich zurück.)

Eine Möglichkeit zum Erlernen besteht darin, einen vorhandenen Modus / eine vorhandene Erweiterung einfach zu hacken oder zu ändern. Ich habe es 93 durch Hacken in der Ada-Sprachmodus-Datei gelernt. Es war eine der spaßigsten Erfahrungen, die ich auf dem College gemacht habe.

Sie können dies also mit einer Sprache Ihrer Wahl tun, beispielsweise einem Java-Modus oder einem Lisp-Modus oder sogar einer Elisp-Modus-Datei.

Ändere es, füge Makros hinzu usw. So habe ich es gemacht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.