2008-12-12 18 views
29

Hace poco intenté cambiar de usar python-mode.el a python.el para editar archivos python en emacs, encontré la experiencia un poco extraña e improductiva, y me escabullí. He estado usando python-mode.el durante algo así como diez años, así que tal vez estoy un poco en mi camino. Me interesaría saber de alguien que haya evaluado cuidadosamente los dos modos, en particular de los pros y contras que perciben de cada uno y cómo su trabajo generalmente interactúa con las características específicas de python.el.Cambiando de python-mode.el a python.el

Las dos cuestiones importantes para mí con python.el eran

  1. Cada buffer visitar un archivo pitón obtiene su propia concha pitón interactiva inferior. Estoy acostumbrado a desarrollar en un shell interactivo y a compartir datos entre archivos de Python. (Podría parecer una mala práctica desde una perspectiva de ingeniería de software, pero normalmente estoy trabajando con grandes conjuntos de datos que tardan un poco en cargarse en la memoria).

  2. El soporte en modo esqueleto en python.el, que parecía absolutamente gratuita (la sintaxis de Python hace que tal automatización sea innecesaria) y mal diseñada (por ejemplo, no tiene conocimiento de las expresiones del generador de bucles "for" o expresiones "<expr 1> if <cond> else <expr 2>", por lo que debe volver atrás y quitar los dos puntos que insiste amablemente después de insistir ingrese las cláusulas de expresión en el minibúfer). No pude encontrar la forma de desactivarlo. Había una variable python.el que decía controlar esto, pero no parecía funcionar. Podría ser que la versión de python.el que estaba usando estaba rota (vino del paquete debian emacs-snapshot) así que si alguien sabe de una versión actualizada de la misma, me gustaría saber de ella. (Tuve el mismo problema con la versión de emacs CVS a partir de hace aproximadamente dos semanas.)

+5

No dice por qué intentó cambiar a python.el. ¿Qué estuvo bien al respecto? – ShreevatsaR

Respuesta

1

pitón-mode.el está escrita por la comunidad Python. python.el está escrito por la comunidad emacs. He usado python-mode.el durante el tiempo que puedo recordar y python.el ni siquiera se acerca a los estándares de python-mode.el. Confío en la comunidad de Python mejor que la comunidad de Emacs para encontrar un archivo de modo decente. Simplemente quédate con python-mode.el, ¿hay realmente una razón para no hacerlo?

+17

Gracias por su opinión, pero es bastante autoritario. Estoy buscando una comparación de las características de los paquetes, en un nivel práctico. No me importan las credenciales percibidas por los autores. –

4

Por lo que vale, no veo el comportamiento que está viendo en el número 1, "Cada memoria intermedia que visita un archivo python tiene su propio shell python interactivo inferior".

Esto es lo que hice usando python.el de Emacs 22.2.

Cx Cf foo.py [indicar: print "foo"]

Cx Cf bar.py [indicar: print "bar"]

Cc Cz [* Python * búfer aparece]

Cx o

Cc Cl RET [ "bar" se imprime en * Python *]

Cx b foo.py RET

C-c C-l RET [ "foo" está impreso en el mismo * Python * tampón]

Por lo tanto los dos archivos están compartiendo el mismo shell pitón inferior. Quizás exista alguna interacción imprevista entre sus personalizaciones personalizadas de python-mode y los comportamientos predeterminados de python.el. ¿Has probado usar Python?el sin sus personalizaciones .emacs y comprobar si se comporta de la misma manera?

La adición de función principal de python.el sobre el modo python es la función de terminación de símbolo python-complete-symbol. Puede añadir algo como esto

(define-key inferior-python-mode-map "\C-c\t" 'python-complete-symbol) 

Entonces, al escribir

>>> import os 
>>> os.f[C-c TAB] 

obtendrá un Terminaciones * * tampón que contiene

Click <mouse-2> on a completion to select it. 
In this buffer, type RET to select the completion near point. 

Possible completions are: 
os.fchdir       os.fdatasync 
os.fdopen       os.fork 
os.forkpty       os.fpathconf 
os.fstat       os.fstatvfs 
os.fsync       os.ftruncate 

que va a trabajar en los búferes de archivo .py también.

+3

Utilizando python.el del paquete emacs-snapshot en Ubuntu 8.04 (Emacs 23), no parece tener la función python-complete-symbol. –

+1

La información en esta respuesta no está actualizada ahora con Emacs 24.1.50. El defun anterior se ha eliminado y reemplazado por 'python-completion-complete-at-point' y algunos otros mecanismos de finalización. No estoy muy claro cómo funcionan estos, de lo contrario, editaría la respuesta. – suvayu

1

python-mode.el no admite cadenas de comillas triples, por lo que si su programa contiene cadenas largas, todo el color de la sintaxis (y las características sintácticas asociadas) tiende a romperse.

mi .02

+0

Acabo de probar esto con python-mode.el versión 5.1.0 y no pude reproducirlo: las cadenas de documentos funcionan bien con el bloqueo de fuentes. No creo que un error como este esté presente durante mucho tiempo en * el * modo de python predominante para Emacs, las cadenas de documentación están en todas partes, alguien habría atrapado el mal comportamiento muy pronto. – paprika

+0

¡Ah! * Ahora * Sé a qué se refiere ... Acabo de descubrir este error en una docstring: citando * dentro * una docstring sí que rompe el resaltado de sintaxis. – paprika

+1

@ paprika, @ Gyom: FWIW, parece que el problema de cadenas entre comillas se trató en [5.2.0] (https://launchpad.net/python-mode/+milestone/5.2.0). –

3
  1. No puedo reproducir este comportamiento en Emacs v23.1, esto debe haber sido cambiado desde entonces.

  2. Olvídese del soporte de esqueleto de cualquier modo y use el hiper-avanzado y extensible yasnippet en cambio, ¡realmente vale la pena intentarlo!

2

Nota casi todo lo que se dice aquí es obsoleto mientras tanto las cosas cambiaron.

Los comandos python-mode.el tienen el prefijo "py-", básicamente, debería poder usar comandos de ambos, sin importar cuál se cargó primero.

python-mode.el no descarga python.el; al lado de python-mode-map, que se redefine.

La diferencia se encuentra en el menú que se muestra y el conjunto de teclas, sin embargo, determinará el último cargado.