从python-mode.el切换到python.el

时间:2008-12-12 11:37:05

标签: python emacs editing

我最近尝试从使用python-mode.el切换到python.el来编辑emacs中的python文件,发现这种体验有点陌生和没有效果,并且匆匆回来。我已经使用python-mode.el十年了,所以也许我的方式有点不对劲。我有兴趣听取任何仔细评估这两种模式的人的意见,特别是他们对每种模式的利弊,以及他们的工作通常如何与python.el特有的功能相互作用。

python.el给我的两个主要问题是

  1. 访问python文件的每个缓冲区都有自己的劣质交互式python shell。我习惯在一个交互式shell中进行开发,并在python文件之间共享数据。 (从软件工程的角度来看,可能看起来很糟糕,但我通常使用大量的数据集,需要一段时间才能加载到内存中。)

  2. python.el中的骨架模式支持,看起来绝对无偿(python的语法使得这种自动化变得不必要)并且设计糟糕(例如,它不知道“for”循环生成器表达式或“<expr 1> if <cond> else <expr 2>”表达式,所以你必须返回并删除它有助于在迷你缓冲区中输入表达式条款后插入的冒号。)我无法弄清楚如何关闭它。有一个python.el变量声称可以控制它,但它似乎不起作用。可能是我使用的python.el版本被破坏了(它来自debian emacs-snapshot包)所以如果有人知道它的最新版本,我想听听它。 (大约两周前,我在CVS emacs中的版本遇到了同样的问题。)

5 个答案:

答案 0 :(得分:4)

对于它的价值,我没有看到你在问题#1中看到的行为,“访问python文件的每个缓冲区都有它自己的低级交互式python shell。”

这就是我使用Emacs 22.2中的python.el所做的。

C-x C-f foo.py [insert:print“foo”]

C-x C-f bar.py [insert:print“bar”]

C-c C-z [* Python *缓冲区出现]

C-x o

C-c C-l RET [“bar”以* Python *]

打印

C-x b foo.py RET

C-c C-l RET [“foo”打印在相同的* Python *缓冲区]

因此这两个文件共享相同的低级python shell。也许你的python-mode的个人定制和python.el的默认行为之间存在一些无法预见的交互。您是否尝试过在没有.emacs自定义的情况下使用python.el并检查其行为是否相同?

python.el在python-mode上的主要特性是符号完成函数python-complete-symbol。你可以添加这样的东西

(define-key inferior-python-mode-map "\C-c\t" 'python-complete-symbol)

然后输入

>>> import os
>>> os.f[C-c TAB]

您将获得包含

的* Completions *缓冲区
Click <mouse-2> on a completion to select it.
In this buffer, type RET to select the completion near point.

Possible completions are:
os.fchdir                          os.fdatasync
os.fdopen                          os.fork
os.forkpty                         os.fpathconf
os.fstat                           os.fstatvfs
os.fsync                           os.ftruncate

它也可以在.py文件缓冲区中使用。

答案 1 :(得分:3)

  1. 我无法在Emacs v23.1上重现此行为,此后必须更改此内容。

  2. 忘记任何模式的骨架支持并使用超高级和可扩展的yasnippet代替,这真的值得一试!

答案 2 :(得分:2)

注意,随着事情发生变化,几乎所有这里所说的都是过时的。

python-mode.el命令基本上以“py-”作为前缀,你应该能够使用两者中的命令,尽管首先加载了哪一个。

python-mode.el不会卸载python.el;旁边是python-mode-map,它是重新定义的。

差异显示在显示的菜单和键设置中,但最后一个加载将确定。

答案 3 :(得分:1)

python-mode.el由Python社区编写。 python.el由emacs社区编写。我已经使用了python-mode.el,因为我记得并且python.el甚至没有接近python-mode.el的标准。我相信Python社区比Emacs社区更能提出一个体面的模式文件。坚持使用python-mode.el,真的有理由不去吗?

答案 4 :(得分:1)

python-mode.el不支持三引号字符串,因此如果您的程序包含长文档字符串,则所有语法着色(以及相关的语法特征)都会崩溃。

我的.02