La característica de PyCharm que mencionas fue una de mis favoritas, y una de las primeras cosas que busqué al tratar de reemplazar PyCharm completamente con Emacs (que estoy feliz de decir que he podido hacer).
Como se mencionó en otra respuesta, el elpy
paquete tiene esta característica (además de muchas otras características útiles de IDE ). Sin embargo, si usa elpy-goto-definition
para buscar el símbolo en el punto, tarde o temprano encontrará que, en algunos casos, PyCharm podría encontrar lo que está buscando, elpy
pero no lo hará. Como dicen los documentos:
los backends no siempre pueden identificar qué tipo de símbolo está en el punto. Especialmente después de algunas indirectas, básicamente no tienen ninguna esperanza de acertar, por lo que no
En este caso, invocar elpy-goto-definition
no hará nada y mostrará un pequeño mensaje de error en el área de eco. Cuando esto sucede, por supuesto, todavía desea encontrar lo que está buscando y elpy
no lo deja colgado. En este tipo de situación siempre uso C-c C-s
( elpy-rgrep-symbol
) rgrep
para el símbolo en el punto en cualquier proyecto en el que me encuentre. Al menos para mí, lo que busco más o menos siempre aparece en los rgrep
resultados. En realidad, creo que esto es similar a lo que hace PyCharm también: si intentas buscar la definición de algo y PyCharm no está seguro de dónde está definido, te hará elegir de una lista. De hecho, prefiero elpy
la implementación, porque en lugar de una lista transitoria que desaparece cuando vas a la primera opción,elpy-rgrep-symbol
dejará la lista de posibilidades abierta en otro búfer para que pueda saltar entre ellas si es necesario.
Como mi flujo de trabajo es casi siempre llamar primero elpy-goto-definition
y si falla, llamar elpy-rgrep-symbol
, decidí hackear una función simple que solo llama elpy-rgrep-symbol
automáticamente si elpy-goto-definition
falla. Esa función está abajo:
(defun goto-def-or-rgrep ()
"Go to definition of thing at point or do an rgrep in project if that fails"
(interactive)
(condition-case nil (elpy-goto-definition)
(error (elpy-rgrep-symbol (thing-at-point 'symbol)))))
Luego lo asocio a M-.
(el enlace predeterminado para elpy-goto-definition
).
(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)
De esta manera, puedo usar una de mis funciones favoritas de PyCharm en mi editor favorito. Sé que esta es una pregunta vieja y es posible que ya haya resuelto este problema o haya seguido adelante, ¡pero espero que usted u otra persona lo encuentren útil!
python-mode
que Emacs tiene por defecto. ( stackoverflow.com/questions/11363089/… )METRO-. funciona en modo anaconda (que cambié después de tener problemas con elpy).
Tenga en cuenta que lo que necesita el medio ambiente pitón adecuada, en mi caso hago lo siguiente: -
mkvirtualenv someenv
-python setup.py develop
para todos los módulos se desarrollan o uso (o prefieren llegar a la fuente en lugar de la versión instalada) -M-x venv-workon
someenv
para permitir caminos en emacs.Luego configuro
anaconda-mode
para estar activo cada vez que edito python y voila,M-.
funcionafuente
Buena pregunta, que no está disponible desde el primer momento y es una característica útil de los IDE completos. Lo hago
cscope
con una bonita interfaz de timón: http://wikemacs.org/wiki/Python#cscope Puede responder preguntas como "¿dónde se define este símbolo? ¿Dónde se usa?".ps: en modo malvado podemos ir a la definición de un símbolo en el mismo archivo con
gd
.fuente
gd
en el mal solo encuentra la primera aparición del símbolo en el archivo (a pesar de la cadena de documentación: "Ir a la definición o primera aparición del símbolo debajo del punto")M-.
que está obligado aelpy-goto-definition
hacer el truco. El usoM-*
le permitirá volver a la ubicación anterior en el búfer. Esto le permite verificar rápidamente algo y volver a la ubicación anterior.También uso a
C-c C-o
menudo (elpy-occur-definitions
). Esto abrirá una ventana con toda la clase y la función es el búfer actual. Desde ese búfer, presionar loEnter
llevará a la definición en el código fuente.fuente
M-.
está vinculadoxref-find-definitions
yelpy-goto-definition
no está en ninguna tecla por defecto (aunque está en los menús). Encontrar definiciones en los paquetes del sitio no parece funcionar del todo bien.Jedi es una impresionante biblioteca de autocompletado / análisis estático para Python, la utilicé mucho antes cuando usaba vim.
Al igual que el motor de autocompletado de golang (es decir, gocode) funciona tanto para vim como para emacs, el mismo motor Jedi funciona tanto para vim como para emacs .
fuente