Come posso iniziare ad imparare Emacs Lisp?


39

Sfondo:

Sono principalmente un utente vi e mi sto convertendo in Emacs.

Passa le basi e ora usalo per scrivere codice in C e alcuni Python con piani per fare anche una conversione R.

Ho scritto (Common) LISP per anni più di vent'anni fa quando ero alla scuola elementare ma ora sono gravemente decaduto (posso scrivere ciao mondo ma è tutto).

Domanda:

Cosa consiglieresti a un ragazzo nella mia posizione di apprendere l'ambiente LISP di Emacs e iniziare a hackerare Emacs.

Ci sono libri, blog, risorse che dovrei leggere, esercizi che dovrei fare?

Risposte:


11

Nella mia esperienza, il tutorial incluso su Emacs Lisp non è stato di grande aiuto (ho provato due volte nel corso degli anni e ho fallito). Invece, ho finalmente usato l'Emacs Lisp Reference incluso.

Cosa alla fine ha funzionato:

Comprendi che ci sono due aspetti di Emacs Lisp: il linguaggio di base stesso e l'interazione con Emacs. Separa questi due nella tua mente. Concentrati prima sul primo (non dovrebbe essere troppo difficile come hai imparato Lisp in passato). Usa siti come Excercism per esercitarti.

Una volta che hai acquisito conoscenza delle basi (loop, funzioni, variabili, condizionali, ecc.), Passa agli aspetti che coinvolgono Emacs stesso (modifica del testo, commutazione dei buffer, ecc.). Questo è vasto e probabilmente ti perderai in un mare di dettagli. Ci sono alcune cose che dovresti capire davvero bene, poiché le userai spesso. Loro sono:

  • interattivo
  • Salva-escursione
  • Salva-restrizione
  • ganci
  • funzioni di consulenza
  • con corrente-buffer

Una volta compresi questi, invece di passare tutto il tuo tempo a leggere il riferimento ELisp, pensa ai semplici problemi che hai con Emacs che vuoi scrivere e prova a risolverli con Elisp. Probabilmente avrai bisogno di aiuto su alcuni dei passaggi, ed è qui che Google può aiutarti.

Esempi di problemi che ho risolto per esercitarmi con il mio Elisp:

  • Quando si utilizza la cattura dell'organizzazione e si scrive il testo nell'ultima riga del buffer di acquisizione, non inserisce una nuova riga alla fine, quindi se avessi dei titoli dopo la posizione di acquisizione, quel titolo non sarebbe più un titolo . La correzione consisteva nel fare un hook che controlla se ci sono nuove linee e, in caso contrario, aggiungerne uno alla fine della cattura.

  • Quando acquisisco e refile in un solo passaggio, non viene salvato il file in cui è stata ripristinata la voce. Ma se catturo senza refiling, lo fa. Ho risolto questa incoerenza.

  • Quando scrivo i minuti durante una riunione (in un file org), se compare un TODO per qualcuno, voglio fare un'acquisizione che cercherà un titolo chiamato TODO (sotto il titolo di livello superiore in cui mi trovo) e posizionare il TODO in Là. Ogni incontro ha il suo titolo TODO e dovrebbe andare a quello della riunione corrente nel file. Ciò ha comportato la scrittura di una funzione che sale all'albero al livello più alto e cerca un bambino chiamato TODO.

  • Uccidi tutti i buffer di una determinata modalità (potrebbe esserci una funzione interna che già lo fa, ma non lo sapevo).

Infine, assicurati di conoscere i seguenti tasti:

  • Cx Ce (valuta l'espressione)
  • Ch v (cerca il significato e il valore di una variabile)
  • Ch f (cercare la descrizione di una funzione integrata).

33

Che bella domanda! Ecco il percorso che ho seguito:

Step 0: leggi l'Emacs Tutorial

Leggi l'Emacs Tutorial prima di ogni altra cosa. Sembra che tu l'abbia fatto. Bene su di te! Tuttavia, per chiunque venga a questo in un secondo momento, questo è il posto dove iniziare il tuo viaggio Emacs. Ci sono molti post di blog fuorvianti là fuori. Complicano le cose. Emacs semplifica:

  1. Avvia Emacs
  2. stampa <RET>

Puoi anche accedervi tramite Ctrl + h t, o C-h tnella notazione di Emacs.

Il tutorial introduce i concetti di base di Emacs, chiarisce la terminologia storica e ti avvia in meno di 30 minuti. Inoltre pone le basi per il passaggio successivo.

Apri Emacs.  Premere Invio.  È così facile!

Step 1: Leggi "Introduzione alla programmazione in Emacs Lisp"

Il prossimo passo è leggere An Introduction to Programming in Emacs Lisp . Non posso raccomandare abbastanza questo libro; è scritto così bene! Viene fornito con la maggior parte delle installazioni di Emacs 1 . Basta premere C-h ie selezionarlo dal menu. Puoi anche accedervi direttamente tramite C-h i m Emacs Lisp Intro.

La prefazione afferma,

Questo testo è scritto come un'introduzione elementare per le persone che non sono programmatori.

Dovrebbe essere indicato "per le persone che sono programmatori non Lisp". Lisp è un po 'diverso dalle altre lingue, quindi vale la pena leggere se non si ha familiarità con Lisp. L'autore ha uno stile accessibile e percorre molti esempi. Mi ci è voluta circa una settimana per lavorare.

Step 1.5: Suggerimenti per lo sviluppo di Emacs Lisp con John Wiegley

Alla fine del 2015, John è il manutentore del progetto Emacs . Sacha Chua fa una grande intervista con lui qui in cui John analizza le basi di Emacs Lisp, l'ambiente di sviluppo, e fornisce molti ottimi consigli.

Passaggio 2: leggi OPC (codice di altre persone)

2a. Leggi il codice sorgente

Poiché Emacs è "l'editor di visualizzazione in tempo reale estensibile, personalizzabile e autocompattante", è incluso tutto il codice sorgente. Impara a usare le funzioni di aiuto, C-h fper una funzione e C-h vper una variabile. C'è sempre un collegamento al codice sorgente:

Clicca sul link del codice sorgente per vedere il codice sorgente!

2b. Leggi tutte le init.el's

Molte persone tengono traccia dei propri init.elfile in Git o Mercurial. Cercali. Un trucco è fare clic sul profilo delle persone su StackOverflow, in particolare emacs.stackexchange.com :

Amico è un utente esperto!

Spesso hanno collegamenti al loro GitHub o al sito Web personale:

Paga sporco!

Repos chiamati dotemacso dotfilessono abbastanza comuni. Nel tempo avrai un'idea di come appare un buon codice e di come si presenta. Imparerai anche i grandi nomi, come quelli di Xah , Sasha Chua , Binchen , Magnar Sveen , abo-abo e molti altri. Ci sono così tante persone da cui imparare!

Step 3: Hack su Emacs

Sfida te stesso a scrivere la funzionalità che desideri. Non copiare mai il codice alla cieca; prenditi sempre il tempo per capirlo. Se non lo capisci, non usarlo! Quando ti prendi il tempo per capire un pezzo di codice, oltre a imparare qualcosa di nuovo, spesso pensi a modi per migliorarlo per il tuo particolare caso d'uso. Questa è un'opportunità per hackerare! Dopotutto, ecco a cosa init.elserve! Fai errori, rompi le cose, impara a eseguire il debug. Scoprirai che, poiché Emacs è scritto in Elisp, lo sviluppo è un piacere.

Passaggio 4: porre domande su emacs.stackexchange.com

Ho scoperto che la comunità Emacs su StackExchange ama una buona domanda su Elisp. Quindi, hackera con fiducia che altre persone apprezzeranno i tuoi sforzi per imparare.

Passaggio 5: rispondere alle domande su emacs.stackexchange.com

Niente chiarisce la tua comprensione come cercare di spiegare qualcosa. Trollando la pagina principale, troverai anche le risposte a domande che non sapevi di avere.

Conclusione

Nel tempo ti troverai in grado di generare soluzioni più velocemente e di rispondere alle domande di altre persone. Come tutta la programmazione, può essere frustrante. Tuttavia, ricorda di giudicare te stesso oggi contro te stesso ieri. Alcune persone hanno hackerato Emacs per, letteralmente, per 30 anni! La maggior parte delle volte, tuttavia, scoprirai che Emacs è un piacere lavorare con te e la libertà che ti dà è stimolante.

Happy hacking! :)

PS: controlla il pacchetto male .


1 Alcune installazioni non sono incluse. Gli utenti Debian, ad esempio, devono installarlo separatamente. È un po 'sciocco , ma è archiviato nei repository non liberi . Aggiungi un repository non libero /etc/apt/sources.listaggiungendo non-freealla fine di ogni voce:

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

1
mi sembra di aver appena visitato quora
user3496846

10

Consiglio "Emacs Lisp Intro".

"Emacs Lisp Intro" potrebbe essere già disponibile in formato informazioni all'interno di Emacs. Prova C-h i m Emacs Lisp Intro RETo valuta (info "(eintr) Top")in Emacs.

Se questo non riesce, cerca nel web "Emacs Lisp Intro".


7
  1. Inizia con la pagina Wiki Emacs Scopri Emacs Lisp .

    Non quella stessa pagina ti insegnerà Emacs Lisp. Indicherà invece le risorse di apprendimento, esattamente quello che stai cercando qui , con la tua domanda. Molti utenti hanno contribuito ad esso e lo hanno modificato per un periodo di anni. Ciò presenta vantaggi e svantaggi rispetto al blog di un utente. La qualità dei suggerimenti è ovviamente varia, a causa della varietà di input.

  2. Oltre a ciò, tutto ciò che altri hanno detto qui, specialmente a partire dal documento integrato di Emacs:

    • Il manuale Elisp - principalmente un riferimento, ma anche una buona guida all'uso e informazioni concettuali. È integrato in Emacs: C-h iquindi scegli il manuale Elisp.

    • The Emacs Lisp Intro - introduzione passo-passo a Lisp ed Emacs Lisp. Anche integrato in Emacs e disponibile da C-h i.

  3. Dato che hai usato Common Lisp, sarà molto facile raccogliere Emacs Lisp. Considerati fortunato per questo.

    Se avessi usato Common Lisp (o Zeta Lisp o altro) su una macchina Lisp, l'esperienza sarebbe stata abbastanza simile. Puoi pensare a Emacs come (tra le altre cose), un grande ambiente Lisp. Puoi passare da zero a 60 in pochissimo tempo, durante l'apprendimento.

  4. Divertiti!


2

Come aggiornamento su Lisp consiglio vivamente i primi tre capitoli dei paradigmi della programmazione di intelligenza artificiale di Peter Norvigs . Questi ti danno una grande e veloce (ri) introduzione a Lisp che ti farà tornare rapidamente in pista.

Per tutti i rumori c'è LISP COMUNE: una dolce introduzione al calcolo simbolico che ti insegna gli stessi concetti ma a un ritmo molto più basso.

Entrambi i libri sono disponibili online gratuitamente.

Dopo aver esaminato uno dei precedenti, puoi leggere tutti i post con tag Elisp su nullprogram.com e consultare la guida alla lettura su masteringemacs.org . Per conoscere le insidie ​​più comuni, leggere le domande principali qui sarà di aiuto. Per problemi specifici cerca questo sito, rosettacode o il tuo motore di ricerca preferito.

Dopo aver acquisito familiarità con le nozioni di base, i manuali Info risponderanno generalmente alla maggior parte delle domande rimanenti che sorgono durante l'hacking su Emacs.


1

Dato che hai un background in Common Lisp e hai "superato le basi", non ha senso perdersi in "Introduzione alla programmazione in Emacs Lisp".

Quello che puoi fare subito (non ho un background in CL e ha funzionato per me) è:

1) trova una modalità che usi e prova ad aggiungere funzioni, troverai aiuto nel riferimento Lisp di Emacs

2) scrivi il tuo file personalizzato con le tue semplici funzioni, qui usa ancora Emacs Lisp Reference

L'elenco help-gnu-emacs è estremamente utile.


1

Cosa consiglieresti a un ragazzo nella mia posizione di apprendere l'ambiente LISP di Emacs e iniziare a hackerare Emacs.

Non credo davvero che tu debba leggere qualcosa di specifico su emacs lisp. Non è un segreto che se vuoi fare qualcosa in Emacs, è probabile che devi solo trovare il comando giusto o qualcuno ha già scritto il codice e ora risiede da qualche parte su una pagina wiki, o github, o è stato trasformato in un plugin . Semplicemente copia-incollare il codice e la lettura , avrete imparato una congrua parte di Emacs Lisp per il momento si sta anche un po 'soddisfatti del vostro .emacs.

Se vuoi avere qualche idea su come personalizzare Emacs, le configurazioni personalizzate di altre persone potrebbero essere una buona fonte di saggezza. Un elenco selezionato di tali configurazioni è possibile trovare qui . Sebbene, in realtà, avere la propria visione funzioni meglio e visitare .emacs di altre persone è generalmente garantito solo quando si desidera rispondere ad alcune domande [ad esempio, come strutturare il mio codice / pacchetti?] O copiare un codice per un obiettivo specifico del proprio.

La navigazione su MELPA mi ha fatto installare e provare forse una dozzina di pacchetti.

Se hai intenzione di sviluppare un plug-in, ho scoperto che leggere il codice di alcuni plug-in di tuo gradimento può iniziare abbastanza rapidamente.

Da quando usi vi, dai un'occhiata alla modalità malvagia , ha funzionato benissimo per me. Consiglierei anche timone con helm-apropos(o solo aproposse non vuoi helm) il comando per facilitare il tuo viaggio.

Quindi, il mio consiglio è di arrivare subito al punto di personalizzazione e imparerai tutto ciò di cui hai bisogno in viaggio. Soprattutto che hai hackerato lisp prima, molto tempo fa o meno, e perché imparare elisp è, per quanto posso dire, un mezzo per raggiungere un fine per te, che è quello di personalizzare emacs.


1

La traccia Elisp su Exercism.io è anche un modo divertente per migliorare le tue abilità. Gli esercizi sono più focalizzati su elisp che su Emacs ma copriranno una buona gamma di basi come espressioni regolari, strutture dati, matematica, ecc.


Puoi migliorare quel riferimento (ad es. Fornire un link)? Puoi per favore riassumere ciò che si trova lì (esercizi di qualche tipo, a quanto pare)?
Ha

Exercism.io È un sito in cui puoi scegliere una lingua e risolvere vari problemi con essa - e vedere le soluzioni di altre persone. Ho scoperto che sfogliare le soluzioni di altre persone di un problema che hai appena trascorso del tempo a risolvere è un buon modo per imparare nuove funzionalità.
Scarabeo B.

0

Mi sembra che la risposta di Loren Ipsum la copra piuttosto bene.

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

Vorrei semplicemente aggiungere che presumo che tu conosca le basi di Lisp. Questo ti aiuterebbe, ma non è necessario (tornerò su quello.)

Un modo per imparare è semplicemente hackerare o modificare una modalità / estensione esistente. L'ho imparato nel 93 hackerando il file della modalità di lingua Ada. È stata una delle esperienze più divertenti che ho avuto al college.

Quindi potresti farlo con una lingua a tua scelta, diciamo, una modalità Java, o una modalità Lisp, o anche un file in modalità Elisp.

Modificalo, aggiungi macro, ecc. Ecco come l'ho fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.