Answers:
我为Python使用Jedi模式,对此我感到非常满意。它不仅可以对函数调用进行准确的查找,而且即使在复杂的情况下(如继承),也可以将函数解析为正确的定义。带有自动完成启动功能。 http://tkf.github.io/emacs-jedi/latest/
您提到的PyCharm的功能是我最喜欢的功能之一,也是我试图用Emacs完全替代PyCharm时要寻找的第一件事(我很高兴地说我已经能够做到)。
如另一个答案中所述,elpy
程序包具有此功能(除了许多其他有用的IDE功能之外)。但是,如果您elpy-goto-definition
过去经常在点上查找符号,则迟早会发现,在某些情况下PyCharm可以成功找到所需的内容,elpy
而不会。正如文档所说:
后端不能总是识别出哪种符号。尤其是经过几次间接访问后,他们基本上没有猜对的希望,因此他们不会
在这种情况下,调用elpy-goto-definition
将不执行任何操作,并在回显区域中显示一些错误消息。当发生这种情况时,您当然当然仍然希望找到想要的东西,并且elpy
不会让您感到困惑。在这种情况下,无论我处于哪个项目中,我总是使用C-c C-s
(elpy-rgrep-symbol
)来rgrep
表示符号。至少对于我来说,我正在寻找的东西或多或少总是显示在rgrep
结果中。实际上,我认为这也与PyCharm相似:如果您尝试查找某物的定义,而PyCharm不确定该在何处定义,它将从列表中进行选择。实际上elpy
,我更喜欢使用的实现,因为当您转到第一个选项时,瞬态列表不会消失,elpy-rgrep-symbol
会将可能性列表留在另一个缓冲区中,以便您在必要时在它们之间来回跳转。
由于我的工作流程几乎总是要首先调用elpy-goto-definition
,如果失败,请致电elpy-rgrep-symbol
,我决定将一个简单的函数归为一体,该函数elpy-rgrep-symbol
在elpy-goto-definition
失败时会自动调用。该功能如下:
(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)))))
然后将其绑定到M-.
(的默认绑定 elpy-goto-definition
)。
(define-key elpy-mode-map (kbd "M-.") 'goto-def-or-rgrep)
这样,我可以在我最喜欢的编辑器中使用我最喜欢的PyCharm功能之一。我知道这是一个古老的问题,您可能已经解决了这个问题或继续前进,但是我希望您或其他人觉得这有用!
很好的问题,这不是开箱即用的,是成熟的IDE的便捷功能。我使用cscope
Helm界面不错,可以做到这一点:http : //wikemacs.org/wiki/Python#cscope它可以回答诸如“此符号在哪里定义?在哪里使用?”之类的问题。
ps:在邪恶模式下,我们可以使用转到同一文件中符号的定义gd
。
gd
邪恶只会在文件中找到符号的第一个出现(尽管文档字符串:“转到定义或指向点下的符号的第一个出现。”)
python-mode
默认情况下,它不是Emacs拥有的。(stackoverflow.com/questions/11363089/...)