我最近尝试从使用 python-mode.el
切换至python.el
在 emacs 中编辑 python 文件时,发现这种体验有点陌生和低效,于是匆忙返回。我一直在使用python-mode.el
大约十年了,所以也许我的方式有点固定。我很想听听任何仔细评估过这两种模式的人的意见,特别是他们对每种模式的看法,以及他们的工作通常如何与 python.el
特有的功能相互作用。 .
python.el
对我来说有两个主要问题是
每个访问 python 文件的缓冲区都有自己的劣质交互式 python shell。我习惯于在一个交互式 shell 中进行开发并在 python 文件之间共享数据。 (从软件工程的角度来看,这似乎是一种不好的做法,但我通常使用大量数据集,这些数据集需要一段时间才能加载到内存中。)
python.el 中的骨架模式支持,看起来完全是免费的(python 的语法使得这种自动化变得不必要)并且设计糟糕(例如,它不知道“
for
”循环生成器表达式或“<expr 1> if <cond> else <expr 2>
"表达式,所以在坚持在小缓冲区中输入表达式子句之后,您必须返回并删除它有用地插入的冒号。)我不知道如何将其关闭。有一个python.el
声称可以控制这一点的变量,但它似乎不起作用。可能是python.el
的版本我使用的是损坏的(它来自 debian emacs-snapshot 包)所以如果有人知道它的最新版本,我想听听它。 (大约两周前,我在 CVS emacs 中的版本遇到了同样的问题。)
最佳答案
对于它的值(value),我没有看到您在问题 #1 中看到的行为,“每个访问 python 文件的缓冲区都有自己的劣质交互式 python shell。”
这是我使用 Emacs 22.2 中的 python.el 所做的。
C-x C-f foo.py [插入:打印“foo”]
C-x C-f bar.py [插入:打印“条”]
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 文件缓冲区中工作。
关于python - 从 python-mode.el 切换到 python.el,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/362522/