所以我有 Emacs 24.3,它附带了一个相当新的 python.el
文件,提供了一个 Python 模式进行编辑。
但我一直读到 Launchpad 上有一个 python-mode.el
,比较这两个文件,我发现前者不到 4000 行,而后者将近 20000 行。这表明后者的功能要丰富得多。
而且我找不到任何关于它们的在线功能比较、文档,或者至少是关于它们每个功能的列表。是的,有语法高亮和嵌入式解释器,但是在 shell 缓冲区中完成、在源文件缓冲区中完成、自动缩进、重新缩进等呢?
那么这些模式的重要特点是什么? (或您推荐的任何其他适用于 Emacs 的 Python 模式。)请提供详细答案。
最佳答案
我曾经是 python-mode.el 的用户,但一年前就停止使用它,因为我觉得它的开发方式组织得不好。这是我当时记下的一份 list 。但是我需要提醒你,从那时起已经过去了将近一年,所以情况可能会改变。
- 许多复制和粘贴功能。
- 许多意外工作的代码。例如,不传递变量而是使用隐式绑定(bind)。这会产生许多编译错误(如果将其更改为词法范围,将无法正常工作)。
- 提交的粗略粒度。我发送了一个补丁,并提交了不相关的更改。
我喜欢 python-mode.el 的一点是它带有自动化测试集(尽管我从未运行过它)。 python.el 还没有测试集。但是我知道python.el的作者现在正在写。
虽然 python.el 很紧凑,但这并不意味着您的功能很差。它更像是保持核心小,并通过提供简洁的 API 让其他人扩展它。 python.el 的同一作者写道 python-django.el为 django 项目扩展 python.el。我为 Python 编写了名为 Jedi.el 的自动完成插件。和名为 EIN 的高级 IPython 插件.与 python-mode.el 相比,它们对 python.el 的支持都更好(嗯,那是因为我不使用 python-mode.el)。
我首先从 python-mode.el 中遗漏了一些东西,但它们很快在 python.el 中得到了修复(当然,这可能意味着我没有在 python-mode.el 中使用这么多的功能)。
what about completion in shell buffer, completion in source file buffer, autoindent, reindent etc.
在 shell 缓冲区中完成: 它在 python.el 和 python-mode.el 中都有效。但有时如果 Emacs 版本和 python(-mode).el 版本的组合不好,它就不起作用。所以可能 python.el 以这种方式更安全。 但是,如果您想要更好的解决方案,请使用 EIN :)
在源文件缓冲区中完成: 只需使用 Jedi.el :)
自动缩进/重新缩进: 我不知道哪一个在性能方面更好。但是,用于返回的键绑定(bind)彼此不同。在 python-mode.el 中,如果你输入 RET 你会得到自动缩进。在 python.el 中,RET 不给你缩进,你应该使用 C-j 代替。实际上,换行+缩进的 C-j 是 Emacs 中的通用行为。所以如果你用其他语言编程,python.el 会更好。
关于python - Emacs 的 Python 模式比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15670505/