python emacs ropemacs pymacs rope

¿Cómo puedo usar un meta-punto(M-.) En python con emacs?



ropemacs pymacs (6)

¿Hay un equivalente de limo para python?

Por ejemplo, si posiciono el cursor en foo () y hago M-. (saltar a definición) Me gustaría ver la definición de origen de la función foo

Esto debería funcionar independientemente de si Foo está en

1) el directorio del proyecto local

2) en algunos ~ / .virtualenvs / bar / lib / site-packages

3) en alguna otra ruta de python

4) env virtual está en uso (es decir, debería buscar en mi virtualenv actual)

¿La combinación pymacs / ropemacs hace algo de esto?


La mayoría de las respuestas mencionadas aquí están desactualizadas. Una solución simple es usar elpy para M-. sin etags (lo que requiere trabajo adicional).

Instale elpy como se menciona aquí .

M-x package-install elpy

y luego instalar paquetes de python

$ sudo pip install rope jedi

Reinicie emacs, abra cualquier archivo de Python y ejecute M-.

Elpy está completamente documentado, puedes leer sobre M-. aqui


La respuesta aceptada pierde un punto importante, si ejecuta etags como find . -type f -name ''*.py'' | xargs etags find . -type f -name ''*.py'' | xargs etags find . -type f -name ''*.py'' | xargs etags entonces el archivo TAGS se generaría cada vez para cada archivo.

La forma correcta de hacerlo es adjuntar datos al archivo TAGS existente con --append like

rm -f TAGS find . -type f -name ''*.py'' -print0 | xargs -0 etags --append

Además, si desea incluir identificadores del directorio de paquetes de sitio de env virtual (por ejemplo: ~/.virtualenvs/bar/lib/site-packages ):

SITEPACKAGES=$(cdvirtualenv;pwd)/lib/python3.6/site-packages/ find $SITEPACKAGES -type f -name ''*.py'' -print0 | xargs -0 etags -a

* ajusta python3.6 a tu versión actual de Python


Lo siguiente indexará tu proyecto actual.

find . -type f -name ''*.py'' | xargs etags

Pero si quieres indexar tus librerías importadas. Primero activas tu virtualenv. Luego, usa which Python para detectar dónde están tus libs y luego canalízalos a etags.

workon my-project # if using virtualenvwrappwer source bin/activate # if using virtualenv find ${$(which python)///bin//python/} -type f -name ''*.py'' | xargs etags


METRO-. Normalmente ejecuta la función " find-tag ". Debería crear un archivo TAGS de sus archivos fuente de python. Entonces, " visit-tags-table " antes de hacer una M-. De esa manera, Emacs saltará a todas las definiciones de la etiqueta. Tipo Cu M-. para saltar a la siguiente definición de tu etiqueta. Consulte la documentación de la etiqueta de búsqueda para obtener ayuda. Consulte la ayuda de Emacs para saber cómo crear un archivo TAGS a partir de archivos fuente de python.

Por ejemplo, puede utilizar Ctags exuberantes para crear el archivo TAGS.

Vaya al directorio raíz de sus archivos python y haga esto:

ctags -e -R .

Un archivo TAGS normalmente se crea en el directorio raíz del proyecto.


Para evitar el -e puede usar etags y con un hallazgo agregue recursivamente el archivo py:

find . -type f -name ''*.py'' | xargs etags


Pruebe los paquetes anaconda-mode y company-anaconda emacs. Actualizar configuración:

(eval-after-load "company" ''(add-to-list ''company-backends ''company-anaconda)) (add-hook ''python-mode-hook ''anaconda-mode) (add-hook ''python-mode-hook ''company-mode)

Cambie a virtualenv con pythonic-activate , si tiene uno.

Ahora tienes M-. y puedes presionar M-* para volver!