¿Cómo puedo comenzar a aprender Emacs Lisp?


39

Fondo:

Soy principalmente un usuario vi y me estoy convirtiendo a Emacs.

Pasó lo básico y ahora lo usa para escribir código en C y en Python con planes para hacer una conversión de R también.

Escribí LISP (común) durante años hace más de dos décadas cuando estaba en la escuela de posgrado, pero ahora he caído severamente (puedo escribir hola mundo pero eso es todo).

Pregunta:

¿Qué le recomendarías a un chico en mi posición para aprender el entorno Emacs LISP y comenzar a hackear Emacs?

¿Hay libros, blogs, recursos que debería leer, ejercicios que debería hacer?

Respuestas:


11

En mi experiencia, el tutorial incluido sobre Emacs Lisp no fue muy útil (lo intenté dos veces a lo largo de los años y fallé). En cambio, finalmente utilicé la referencia Emacs Lisp incluida.

Lo que finalmente funcionó:

Tenga en cuenta que Emacs Lisp tiene dos aspectos: el lenguaje básico en sí mismo y la interacción con Emacs. Separe estos dos en su mente. Concéntrese primero en lo primero (no debería ser demasiado difícil como aprendió Lisp en el pasado). Usa sitios como Excercism para practicar.

Una vez que tenga un control de los conceptos básicos (bucles, funciones, variables, condicionales, etc.), pase a los aspectos que involucran a Emacs (cambio de texto, cambio de buffers, etc.). Esto es vasto y es probable que te pierdas en un mar de detalles. Hay algunas cosas que debes entender realmente bien, ya que las usarás con frecuencia. Son:

  • interactivo
  • guardar-excursión
  • guardar-restricción
  • manos
  • funciones de asesoramiento
  • con-actual-buffer

Una vez que comprenda esto, en lugar de pasar todo el tiempo leyendo la referencia de ELisp, piense en los problemas simples que tiene con Emacs que desea escribir e intente resolverlos con Elisp. Probablemente necesitará ayuda en algunos de los pasos, y ahí es donde Google puede ayudarlo.

Ejemplos de problemas que resolví para practicar mi Elisp:

  • Cuando usa org-capture, y escribe texto en la última línea del búfer de captura, no pone una nueva línea al final, por lo que si tuviera algún título después de la posición de captura, ese título ya no sería un título. . La solución fue hacer un gancho que verifique si hay líneas nuevas, y si no, agregue una al final de la captura.

  • Cuando capturo y vuelvo a archivar en un solo paso, no guarda el archivo en el que se rellenó la entrada. Pero si capturo sin rellenar, lo hace. Arreglé esta inconsistencia.

  • Al escribir actas durante una reunión (en un archivo de organización), si aparece un TODO para alguien, quiero hacer una captura que busque un título llamado TODO (debajo del título de nivel superior en el que estoy) y coloque el TODO en allí. Cada reunión tiene su propio título de TODO, y debe ir al de la reunión actual en el archivo. Esto implicó escribir una función que sube el árbol hasta el nivel superior y busca un niño llamado TODOS.

  • Elimina todos los buffers de cierto modo (puede haber una función interna que ya lo hace, pero no lo sabía).

Finalmente, asegúrese de conocer las siguientes combinaciones de teclas:

  • Cx Ce (evaluar expresión)
  • Ch v (busque el significado y el valor de una variable)
  • Ch f (busque la descripción de una función incorporada).

33

¡Qué gran pregunta! Aquí está el camino que he tomado:

Paso 0: lee el tutorial de Emacs

Lea el Tutorial de Emacs antes que nada. Parece que has hecho esto. Bien por ti! Sin embargo, para cualquiera que venga a esto más adelante, este es el lugar para comenzar su viaje de Emacs. Hay muchas publicaciones de blog engañosas por ahí. Sobre complican las cosas. Emacs lo hace fácil:

  1. Inicie Emacs
  2. prensa <RET>

También puede acceder a través de Ctrl + h t, o C-h ten notación Emacs.

El tutorial presenta los conceptos básicos de Emacs, aclara la terminología histórica y te permite comenzar en menos de 30 minutos. También prepara el escenario para el siguiente paso.

Abre Emacs.  Presione Entrar.  ¡Es fácil!

Paso 1: Lea "Introducción a la programación en Emacs Lisp"

El siguiente paso es leer Una Introducción a la Programación en Emacs Lisp . No puedo recomendar este libro lo suficiente; está muy bien escrito! Viene con la mayoría de las instalaciones de Emacs 1 . Simplemente presione C-h iy selecciónelo del menú. También puede ir directamente a través de C-h i m Emacs Lisp Intro.

El prefacio dice:

Este texto está escrito como una introducción elemental para personas que no son programadores.

Debería decir "para personas que no son programadores de Lisp". Lisp es un poco diferente de otros idiomas, por lo que vale la pena leerlo si no está familiarizado con Lisp. El autor tiene un estilo accesible y recorre muchos ejemplos. Me llevó alrededor de una semana resolverlo.

Paso 1.5: Consejos de desarrollo de Emacs Lisp con John Wiegley

A finales de 2015, John es el responsable del proyecto Emacs . Sacha Chua hace una gran entrevista con él aquí en la que John repasa los conceptos básicos de Emacs Lisp, el entorno de desarrollo, y brinda muchos buenos consejos.

Paso 2: Lea el OPC (Código de otras personas)

2a. Lee el código fuente

Debido a que Emacs es "el editor de visualización en tiempo real extensible, personalizable, autodocumentado", se incluye todo el código fuente. Aprenda a usar las funciones de ayuda, C-h fpara una función y C-h vpara una variable. Siempre hay un enlace al código fuente:

Haga clic en el enlace del código fuente para ver el código fuente.

2b. Leer todos los init.el's

Mucha gente rastrea sus init.elarchivos en Git o Mercurial. Búscalos. Un truco es hacer clic en el perfil de las personas en StackOverflow, especialmente emacs.stackexchange.com :

¡El tipo es un usuario avanzado!

A menudo tienen enlaces a su sitio web personal o GitHub:

¡Paga la suciedad!

Repos llamados dotemacso dotfilesson bastante comunes. Con el tiempo, tendrá una idea de cómo se ve el código bueno y cómo se ve el código malo. También aprenderá los grandes nombres, como los de Xah , Sasha Chua , binchen , Magnar Sveen , abo-abo y muchos más. ¡Hay tanta gente de la que aprender!

Paso 3: piratea Emacs

Ponte a prueba para escribir la funcionalidad que deseas. Nunca copie el código a ciegas; siempre tómate el tiempo para entenderlo. Si no lo entiendes, ¡no lo uses! Cuando se toma el tiempo de comprender un código, además de aprender algo nuevo, a menudo piensa en formas de mejorarlo para su caso de uso particular. Esta es una oportunidad para hackear! Después de todo, ¡para eso estás init.el! Cometer errores, romper cosas, aprender a depurar. Descubrirá que debido a que Emacs está escrito en Elisp, el desarrollo es una delicia.

Paso 4: haga preguntas en emacs.stackexchange.com

Descubrí que la comunidad de Emacs en StackExchange ama una buena pregunta de Elisp. Por lo tanto, piratee con confianza de que otras personas apreciarán sus esfuerzos por aprender.

Paso 5: Responda preguntas en emacs.stackexchange.com

Nada aclara tu comprensión como tratar de explicar algo. Recorriendo la página principal, también encontrará respuestas a preguntas que nunca supo que tenía.

Conclusión

Con el tiempo, podrá generar soluciones más rápido y responder las preguntas de otras personas. Como toda programación, puede ser frustrante. Sin embargo, recuerda juzgarte hoy contra ti mismo ayer. ¡Algunas personas han estado pirateando Emacs durante, literalmente, 30 años! Sin embargo, la mayoría de las veces encontrará que trabajar con Emacs es un placer y la libertad que le brinda es inspiradora.

¡Feliz pirateo! :)

PD: Mira el paquete malvado .


1 Algunas instalaciones no vienen con él. Los usuarios de Debian, por ejemplo, deben instalarlo por separado. Es un poco tonto , pero se almacena en los repositorios no libres . Agregue un repositorio no gratuito al /etc/apt/sources.listagregar non-freeal final de cada entrada:

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

1
parece que acabo de visitar quora
user3496846

10

Recomiendo la "Introducción a Emacs Lisp".

La "Introducción a Emacs Lisp" ya puede estar disponible en formato de información dentro de sus Emacs. Probar C-h i m Emacs Lisp Intro RETo evaluar (info "(eintr) Top")en Emacs.

Si esto no funciona, busque en la web "Emacs Lisp Intro".


7
  1. Comience con la página Wiki de Emacs Aprenda Emacs Lisp .

    No es que esa página en sí te enseñe Emacs Lisp. En cambio, apuntará a recursos de aprendizaje : exactamente lo que está buscando aquí , con su pregunta. Muchos usuarios han contribuido y editado durante años. Eso presenta ventajas y desventajas en el blog de un usuario. La calidad de las sugerencias allí es, por supuesto, diversa, debido a la variedad de entradas.

  2. Más allá de eso, todo lo que otros han dicho aquí, especialmente comenzando con el documento incorporado de Emacs:

    • El manual de Elisp: principalmente una referencia, pero también una buena guía de uso e información conceptual. Está integrado en Emacs: C-h iluego elija el manual de Elisp.

    • La introducción de Emacs Lisp: introducción paso a paso a Lisp y Emacs Lisp. También integrado en Emacs y disponible desde C-h i.

  3. Como has usado Common Lisp, será muy fácil elegir Emacs Lisp. Considérate afortunado con esto.

    Si hubiera utilizado Common Lisp (o Zeta Lisp o lo que sea) en una máquina Lisp, entonces la experiencia sería bastante similar. Puedes pensar en Emacs como (entre otras cosas), un gran entorno Lisp. Puede pasar de cero a 60 en poco tiempo, al aprender.

  4. ¡Que te diviertas!


2

Como actualización de Lisp, recomiendo los tres primeros capítulos de Peter Norvigs Paradigms of Artificial Intelligence Programming . Esos le brindan una (re) introducción excelente y rápida a Lisp que lo ayudará a retomar el camino rápidamente.

Para los novatos totales hay COMMON LISP: una introducción suave a la computación simbólica que te enseña los mismos conceptos pero a un ritmo mucho más bajo.

Ambos libros están disponibles en línea, de forma gratuita.

Después de pasar por uno de los anteriores, puede leer todas las publicaciones etiquetadas de Elisp en nullprogram.com y consultar la guía de lectura en masteringemacs.org . Para obtener información sobre las dificultades comunes, leer las principales preguntas aquí será de ayuda. Para problemas específicos, busque este sitio, rosettacode o su motor de búsqueda favorito.

Una vez que esté familiarizado con los conceptos básicos, los manuales de información generalmente responderán a la mayoría de las preguntas restantes que surjan al piratear Emacs.


1

Dado que tiene experiencia en Common Lisp y está "más allá de lo básico", no tiene sentido perderse en la "Introducción a la programación en Emacs Lisp".

Lo que puede hacer de inmediato (no tengo experiencia en CL y funcionó para mí) es:

1) encuentre un modo que use e intente agregar funciones, encontrará ayuda en la Referencia de Emacs Lisp

2) escriba su propio archivo personalizado con sus propias funciones simples, aquí nuevamente use la Referencia de Emacs Lisp

La lista help-gnu-emacs es extremadamente útil.


1

¿Qué le recomendarías a un chico en mi posición para aprender el entorno Emacs LISP y comenzar a hackear Emacs?

Realmente no creo que necesites leer algo específico en emacs lisp. No es ningún secreto que si quieres hacer algo en Emacs, lo más probable es que solo tengas que encontrar el comando correcto o alguien ya ha escrito el código y ahora reside en algún lugar de una página wiki, o github, o se convirtió en un complemento . Simplemente copiando y pegando ese código y leyéndolo , habrá aprendido una buena parte de Emacs lisp cuando esté satisfecho con sus .emacs.

Si desea obtener algunas ideas sobre cómo personalizar Emacs, las configuraciones personalizadas de otras personas pueden ser una buena fuente de sabiduría. Puede encontrar una lista seleccionada de tales configuraciones aquí . Sin embargo, en realidad, tener su propia visión funciona mejor y visitar los .emacs de otras personas generalmente está garantizado solo cuando desea que se respondan algunas preguntas [por ejemplo, ¿cómo estructuro mi código / paquetes?] O algún código copiado para algún objetivo específico suyo.

Navegar por MELPA me hizo instalar e intentar una docena de paquetes.

Si va a desarrollar un complemento, descubrí que leer el código de algún complemento particular de su agrado puede ayudarlo a comenzar con bastante rapidez.

Desde que usas vi, mira el modo malvado , me ha funcionado muy bien. También recomendaría timón con el comando helm-apropos(o simplemente apropossi no lo desea helm) para facilitar su viaje.

Por lo tanto, mi consejo es llegar al punto de personalización de inmediato y aprenderá todo lo que necesita sobre la marcha. Especialmente que hackeaste lisp antes, hace mucho tiempo o no, y porque aprender elisp es, por lo que puedo decir, un medio para un fin para ti, que es personalizar emacs.


1

La pista de Elisp sobre exercism.io también es una forma divertida de mejorar tus habilidades. Los ejercicios se centran más en elisp que en Emacs, pero cubrirán una buena variedad de conceptos básicos como expresiones regulares, estructuras de datos, matemáticas, etc.


¿Puede mejorar esa referencia (por ejemplo, proporcionar un enlace)? ¿Puede resumir lo que se encuentra allí (ejercicios de algún tipo, parece)?
Dibujó el

exercism.io Es un sitio donde puedes elegir un idioma y resolver varios problemas con él, y ver las soluciones de otras personas. Descubrí que explorar las soluciones de otras personas de un problema que acaba de pasar tiempo resolviendo es una buena manera de aprender nuevas funciones.
Escarabajo B.

0

Me parece que la respuesta de Loren Ipsum lo cubre bastante bien.

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

Simplemente agregaría que estoy asumiendo que conoces los conceptos básicos de Lisp. Eso te ayudaría, pero no es necesario (volveré sobre eso).

Una forma de aprender es simplemente piratear o modificar un modo / extensión existente. Lo aprendí en el 93 pirateando el archivo de modo de idioma Ada. Fue una de las experiencias más divertidas que tuve en la universidad.

Por lo tanto, puede hacerlo con un idioma de su elección, por ejemplo, un modo Java o un modo Lisp, o incluso un archivo de modo Elisp.

Cámbielo, agregue macros, etc. Así es como lo hice.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.