Emacs Python Mode中是否有类似bpython的自动补全和参数描述功能?

9
我已经使用bpython一段时间来满足我的Python解释需求。它非常好用,尤其是在使用不熟悉的新库或者有大量函数的库时。总之,当我编辑代码时,在旁边运行一个bpython解释器很不错,但如果我能像bpython一样在Emacs中同时获得自动补全和参数描述功能,那就更好了。这个想法太疯狂了吗?有没有人有实现这个想法的思路呢?
谢谢, Bradley Powers
1个回答

10

你并不是完全疯了。

python-mode可以与eldoc-mode集成,以显示光标所在位置调用的函数的参数规范。只需在Python文件中执行M-x eldoc-mode即可打开它,并且它应该开始工作。它会与一个较差的Python缓冲区交流,直接检查函数,因此它应该始终相当准确。您可以通过在emacs启动文件中添加(add-hook 'python-mode-hook '(lambda () (eldoc-mode 1)) t)来自动为所有新的python-mode缓冲区打开它。现在,在这一点上,我必须说我不做任何常规的Python编程,并且当我刚才尝试时它没有起作用。我花了几分钟时间在源代码中四处探索,一切似乎都就位了,但是在较差的进程中运行的代码只返回一个空字符串。也许这只是我的设置问题,或者我正在阅读错误的源文件;很难说。

Emacs提供了几种不同类型的扩展/自动完成。默认情况下,您可以通过按下M-/访问dabbrev-expand。这是一种相当简单的完成形式;它只是为了在您编辑的任何旧文件上工作。更为复杂的是hippie-expand,但即使这也不会做任何Python特定的事情。文档说它可以与hippie-expand集成以进行精确完成,但这可能是一个谎言;我无法弄清楚它的工作方式。稍微探索一下就会发现有几个相关的解决方案,所有这些解决方案似乎都依赖于pymacs。如果我要做大量的Python编程,并且还没有一个相当复杂的emacs设置,我可能会从安装emacs-for-python开始。它看起来是一个相当完整的设置,甚至声称具有实时警告/错误检测。

为了帮助别人自助,我想指出我是如何获得所有这些信息的。我的第一步是在python-mode中打开一个文件。我实际上没有任何可用的Python代码,所以我只是去了我的scratch缓冲区,并将它变成了一个Python缓冲区(M-x python-mode)。然后我请求关于这个奇怪的新模式的帮助(C-h m),看看它能做什么。它的作者很好地提供了关于该模式可以做什么的简要概述,其中提到了eldoc-mode、Imenu、outline-modehippie-expand、rlcompleter、abbrev表和许多其他内容。从那里开始,我开始查看源代码。例如,为了与eldoc-mode集成,它定义了一个名为python-eldoc-function的函数,并将其提供给Python缓冲区中使用的eldoc模块。阅读该代码向我展示了它如何与下属缓冲区互动等方面的情况。
我希望这些信息对你有所帮助。

非常感谢您。初步实验表明这个有效,我稍后到实验室会进一步研究emacs-for-python。 - Bradley Powers
@db48x 另一个非常好的答案。我喜欢你的风格。 - event_jr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接