Emacs Python模式中的bpython风格自动补全和参数描述?

9 投票
1 回答
1060 浏览
提问于 2025-04-17 03:22

我已经使用bpython一段时间了,来处理我所有的Python解释需求。它真的很棒,特别是在使用一些不太熟悉的新库或者功能很多的库时。总之,能在我做其他事情的时候同时运行一个bpython解释器是很不错的,但如果我在Emacs编辑代码时,能同时享受到像bpython那样的自动补全功能和参数描述,那就更好了。我是不是太疯狂了?有没有人知道怎么做到这一点?

谢谢,
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 代码,所以我就打开了我的临时缓冲区,把它设置为 Python 缓冲区 (M-x python-mode)。然后我询问这个新模式的帮助信息 (C-h m),看看它能做些什么。这个模式的作者很贴心地提供了一个简短的功能总结,提到了 eldoc-mode、Imenu、outline-modehippie-expand、rlcompleter、缩写表和其他一些功能。接着我开始查看源代码。例如,为了和 eldoc-mode 集成,它定义了一个叫 python-eldoc-function 的函数,并将其提供给 eldoc 模块在 Python 缓冲区中使用。阅读这些代码让我了解了它是如何与后台缓冲区互动的等等。

希望这些信息能对你有所帮助。

撰写回答