¿Cómo puedo usar meta-punto (M.) En python con emacs?
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?
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!