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/… )