¿Cómo soluciono los problemas de Emacs?

21

En una situación en la que Emacs no se comporta como yo quiero, ¿qué puedo hacer para solucionar el problema? ¿Qué pasos puedo seguir para encontrar y solucionar el problema yo mismo?

O, en su defecto, ¿cómo puedo reunir información útil para que las personas aquí (o en la lista de correo u otros foros) puedan ayudarme con mi problema?

Mi Emacs incluye muchos paquetes, una colección de fragmentos copiados y pegados (o asesinados y arrancados) de todo Internet, y mi propio elisp personalizado, algunos de los cuales no recuerdo haber escrito, o ya no entiendo. ¿Hay alguna manera de dar sentido a todas estas complicaciones?

Tyler
fuente
No estoy seguro de si este es el mejor lugar para esto, pero hay muchas preguntas que obtienen respuestas / comentarios que solicitan emacs -Qcomo primer paso. Escribí esto como algo para vincular esas preguntas como ayuda genérica para nuevos usuarios.
Tyler el
Sí, es el mejor lugar para esto. En realidad, tal pregunta fue sugerida (casi) hace 2 años: meta.emacs.stackexchange.com/q/198/184 ¡Gracias!
T. Verron

Respuestas:

28

Paso 1: corriendo emacs -Q

Lo primero que debe hacer es ejecutar emacs sin ninguna de sus personalizaciones. Si puede reproducir el problema en Emacs vanilla, en realidad puede ser un error en Emacs. Eso es raro, pero lo descartamos como primer paso.

Si inicia Emacs desde la línea de comando con el -Qindicador, es decir, emacs -Qobtendrá un emacs simple o 'vainilla', sin ninguna de sus personalizaciones locales cargadas. ¿Su problema todavía ocurre? Si es así, pase a "Proporcionar una receta de error".

Paso 1b: ¿y si el problema es con un paquete?

Si su problema es específico de un paquete en particular, entonces obviamente no puede reproducirlo sin cargar ese paquete. Pero desea cargar solo el paquete en cuestión, no toda su configuración. Para hacerlo, emacs -Qvuelva a ejecutarlo y prepare un script corto como el siguiente:

(require 'package)
(setq package-load-list
      '((package1 t)))
(package-initialize)

Reemplace package1con el nombre del paquete que desea cargar. Si necesita cargar varios paquetes, modifique el script en consecuencia:

(require 'package)
(setq package-load-list
      '((package1 t)
        (package2 t)
        (package3 t)))
(package-initialize)

Para cargar este código, puede pegarlo en el *scratch*búfer y llamar M-x eval-buffer. (¡o cualquier búfer, siempre que no tenga ningún otro código!).

En este punto, ha cargado los paquetes y solo los paquetes que está probando. Si puede reproducir el problema ahora, salte a "Proporcionar una receta de error".

Paso 2: Encontrar un error en su .emacs

Ahora ha confirmado que el problema proviene de algo en su configuración ("¡la llamada proviene del interior de la casa!"). Su configuración puede tener muchos miles de líneas y puede cargar muchos archivos diferentes. Para encontrar el problema, harás una búsqueda binaria, comentando la mitad del código a la vez para reducir las cosas. 1

  1. Abra sus emacs regulares emacs, sin la -Qopción.
  2. Abra su archivo de configuración (generalmente ~/.emacso .emacs.d/init.el, si no puede encontrarlo, intente C-h v user-init-file)
  3. Seleccione la primera mitad del archivo: C-spacepara establecer la marca, desplácese hacia abajo hasta la mitad para extender la región
  4. Comente la región seleccionada: M-;y guarde el archivo
  5. Abra uno nuevo emacs (su prueba de emacs ), dejando los primeros emacs en ejecución. Test emacs leerá la versión reducida de su configuración.
  6. Intenta reproducir el problema en test emacs
  7. Si no puede reproducirlo, cerca de prueba emacs , y en sus originales emacs undoel comentario con C-/, y comentar la mitad del código restante. Abra un nuevo emacs de prueba e intente nuevamente.
  8. Si puede reproducir el problema, comente la mitad del código restante y vea si el problema persiste.
  9. Repita este proceso hasta que encuentre la parte más pequeña de su configuración necesaria para reproducir el problema.

Si su problema es con un paquete específico, tendrá que dejar el código que carga ese paquete sin comentar, por supuesto.

Si su archivo de configuración carga otros archivos, puede terminar extendiendo su búsqueda también a esos archivos.

En este punto, es posible que haya encontrado que el problema se debe solo a una o dos líneas de código. Incluso puede arreglarlo usted mismo. Si es así, felicidades, ¡has aprendido algo! De lo contrario, avance al paso tres.

Paso 3: proporcionar una receta de error

En este punto, deberías poder proporcionar una receta de error detallada para publicar aquí. Debe incluir:

  • Su versión de Emacs (puede obtener esto de Emacs con M-x emacs-version
  • Su sistema operativo (Windows #, Mac, distribución de Linux)
  • La versión del paquete con el que estás luchando, si corresponde
  • Los pasos específicos necesarios para demostrar el problema, incluido lo que espera que suceda y lo que realmente sucede .

Por ejemplo, podría publicar una pregunta como esta:

Tengo un problema con el modo súper. Cuando lo uso M-x sm-compile-code, hace un retiro de mi cuenta PayPal.

Pasos para reproducir:

Carga supermodo:

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • abrir un nuevo archivo con C-x C-f my-code
  • ingrese una línea de código:
10 goto 10
  • llamada M-x sm-compile-code

Espero que esto invoque al supercompilador y compile mi programa. En cambio, veo un mensaje en el minibúfer "$ 100 transferidos del autor de PayPal al modo súper"

GNU Emacs 25.1.50.3
Debian Linux
Super-mode versión 3.1415


1 El paquete Bug Hunter puede ayudarlo con esto, (biseccionando semi-) automáticamente su archivo init.

Tyler
fuente
Tal vez podrías mencionar a The Bug Hunter .
Omar el