Emacs Python模式中的bpython风格自动补全和参数描述?
我已经使用bpython一段时间了,来处理我所有的Python解释需求。它真的很棒,特别是在使用一些不太熟悉的新库或者功能很多的库时。总之,能在我做其他事情的时候同时运行一个bpython解释器是很不错的,但如果我在Emacs编辑代码时,能同时享受到像bpython那样的自动补全功能和参数描述,那就更好了。我是不是太疯狂了?有没有人知道怎么做到这一点?
谢谢,
Bradley Powers
1 个回答
你并不是完全疯了。
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-mode
、hippie-expand
、rlcompleter、缩写表和其他一些功能。接着我开始查看源代码。例如,为了和 eldoc-mode 集成,它定义了一个叫 python-eldoc-function
的函数,并将其提供给 eldoc 模块在 Python 缓冲区中使用。阅读这些代码让我了解了它是如何与后台缓冲区互动的等等。
希望这些信息能对你有所帮助。