Emacs Python模式中类似bpython的自动完成和参数描述?

时间:2011-09-29 19:06:26

标签: python emacs bpython

我已经使用bpython一段时间了解我的所有Python解释需求。这是令人愉快的,特别是当您使用不熟悉的新库或具有多种功能的库时。无论如何,有一个bpython解释器与我正在做的一起运行是很好的,但如果我同时拥有类似自动完成的功能,并且bpython执行时的参数描述,那就更好了。 我在Emacs中编辑代码。我完全疯了吗?有没有人知道如何做到这一点?

谢谢, 布拉德利权力

1 个答案:

答案 0 :(得分:10)

你并不是完全疯了。

python-mode可以与eldoc-mode集成,以显示您在点上调用的函数的arg规范。当你在python文件中时,只需执行M-x eldoc-mode即可启用它,它应该开始工作。它与一个较差的python缓冲区进行对话,直接检查函数,因此它应该始终准确无误。您可以在emacs启动文件中为python-mode的所有新(add-hook 'python-mode-hook '(lambda () (eldoc-mode 1)) t)缓冲区自动启用它。现在,在这一点上,我不得不说我不做任何常规的python编程,而且当我尝试它时,它现在不起作用。我花了几分钟在源代码中探索,一切似乎都已到位,但它在下级进程中运行的代码只是返回一个空字符串。也许这只是我的设置,或者我正在阅读错误的源文件;很难说。

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

本着帮助他人自助的精神,我想指出我是如何得到这些信息的。我的第一步是在python-mode中打开一个文件。我实际上没有任何python代码可用,所以我只是去了我的临时缓冲区并使它成为一个python缓冲区(M-x python-mode)。然后我就这个奇怪的新模式(C-h m)寻求帮助,看看它能做些什么。作者简要总结了模式可以做什么,提及eldoc-mode,Imenu,outline-modehippie-expand,rlcompleter,缩写表和其他一些东西。从那里我开始查看源代码。例如,为了与eldoc-mode集成,它定义了一个名为python-eldoc-function的函数,并将其提供给eldoc模块,以便在python缓冲区中使用。阅读该代码会告诉我它如何与劣质缓冲区等进行交互。

我希望其中一些有帮助。