代码之家  ›  专栏  ›  技术社区  ›  Alex Coventry

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

  •  29
  • Alex Coventry  · 技术社区  · 16 年前

    我最近试着从使用 python-mode.el python.el 在emacs中编辑python文件时,发现这段经历有点陌生和徒劳,于是匆忙返回。我一直在用 python模式.el 大概十年了,所以也许我有点固步自封了。我很有兴趣听取任何仔细评估这两种模式的人的意见,特别是他们对每种模式的利弊看法,以及他们的工作通常如何与特定于 巨蜥 .

    两个主要问题 巨蜥

    1. 访问python文件的每个缓冲区都有自己的劣质交互式python shell。我习惯于在一个交互式shell中进行开发,并在python文件之间共享数据。(从软件工程的角度来看,这似乎是一种不好的做法,但我通常要处理大量的数据集,这些数据集需要一段时间才能加载到内存中。)

    2. 在python.el中支持骨架模式,这看起来是完全没有必要的(python的语法使得这种自动化变得不必要)并且设计得很糟糕(例如,它不知道“ for “循环生成器表达式或” <expr 1> if <cond> else <expr 2> “表达式,因此在坚持在minibuffer中输入表达式子句后,必须返回并删除它有用地插入的冒号。)我不知道如何关闭它。有一个 巨蜥 变量,它声称可以控制这个,但似乎不起作用。可能是 巨蜥 我使用的是was break(它来自debian emacs快照包),所以如果有人知道它的最新版本,我想听听。(大约两周前,我在cvs emacs中遇到了同样的问题。)

    5 回复  |  直到 12 年前
        1
  •  4
  •   Steven Huwig    16 年前

    值得一提的是,我没有看到您在第1期中看到的行为:“访问python文件的每个缓冲区都有自己的劣质交互式python shell。”

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

    C-X C-F食品 [插入:打印“foo”]

    C-X C-F棒.py [插入:打印“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模式的个人定制与python.el的默认行为之间存在一些无法预料的交互。您是否尝试在不使用.emacs自定义的情况下使用python.el并检查其行为是否相同?

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

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

    然后打字

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

    你会得到一个包含

    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文件缓冲区中工作。

        2
  •  3
  •   paprika    14 年前
    1. 我无法在EmacsV23.1上复制此行为,从那时起必须进行更改。

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

        3
  •  2
  •   Andreas Röhler    12 年前

    请注意,几乎这里所说的一切都是过时的同时,随着事情的变化。

    python-mode.el命令的前缀是“py-”,基本上,您应该能够同时使用这两个命令,而不必先加载哪个命令。

    python-mode.el不卸载python.el;位于python mode map旁边,后者是重新定义的。

    diff在显示的菜单和按键设置中,但是,最后一个加载的将决定。

        4
  •  1
  •   Johan Dahlin Idelic    16 年前

    python-mode.el是由python社区编写的。python.el是由emacs社区编写的。我使用python-mode.el已经有很长一段时间了,python.el甚至都没有达到python-mode.el的标准。比起emacs社区,我更相信python社区能提供一个好的模式文件。坚持python-mode.el,真的有理由不这么做吗?

        5
  •  1
  •   Gyom    15 年前

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

    我的02号