¿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!