Pregunta

¿Hay un equivalente de baba para Python?

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

Esto debería funcionar independientemente de si foo es en

1) el directorio local del proyecto

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

3) en algún otro pitón-path

4) env virtual está en uso (es decir, que debe ser en mi virtualenv actual)

¿La combinación pymacs / ropemacs hacer nada de esto?

¿Fue útil?

Solución

Para evitar el -e puede utilizar etags y con un encontrar agrega de forma recursiva el archivo py:

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

Otros consejos

La mayoría de las respuestas mencionadas aquí son obsoletas. Una solución simple es utilizar elpy para M-. sin etags (que requiere trabajo adicional).

elpy como se ha mencionado aquí .

M-x package-install elpy

y luego instalar los paquetes de Python

$ sudo pip install rope jedi

emacs Restart, abrir cualquier archivo Python y correr M-.

Elpy está totalmente documentado, se puede leer href="https://elpy.readthedocs.org/en/latest/ide.html#command-elpy-goto-definition" sobre M-. aquí.

M-. normalmente se ejecuta la función "find-tag". Debe crear un archivo de etiquetas de sus archivos fuente de Python. A continuación, "visit-tags-table" antes de hacer una M-. De esa manera, Emacs saltará a todas las definiciones de la etiqueta. Tipo C-u M-. para saltar al siguiente definición de su etiqueta. Consulte la documentación hallazgo etiqueta de ayuda. Consulte a Emacs ayuda para saber cómo crear un archivo de etiquetas de archivos fuente de Python.

Se puede, por ejemplo, el uso exuberante Ctags para la creación del fichero de etiquetas.

Ir al directorio raíz de los archivos de pitón y hacer esto:

ctags -e -R .

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

respuesta pierde un punto importante, si se ejecuta como etags find . -type f -name '*.py' | xargs etags entonces el archivo de etiquetas sería genera cada vez para cada archivo.

La forma correcta de hacerlo es añadir datos al fichero de etiquetas existentes con --append como

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

Además, si desea incluir identificadores de paquetes virtuales env sitio dir (ej .: ~/.virtualenvs/bar/lib/site-packages):

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

* ajustar python3.6 a la versión actual de Python

El siguiente índice voluntad su proyecto actual

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

Pero si desea indexar sus bibliotecas importadas. En primer lugar, active su virtualenv. A continuación, el uso de pitón which para detectar dónde están sus bibliotecas y luego tubería 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

anaconda-try de modo emacs y paquetes anaconda-empresa. Actualización de 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)

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

Ahora tienes M-. y puede pulsar M-* a volver!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top