【问题标题】:Strange behavior with ipython in EmacsEmacs 中 ipython 的奇怪行为
【发布时间】:2011-07-27 17:16:26
【问题描述】:

我在使用 ipython 作为带有 python-mode.el 的 python 解释器时遇到了一个小问题。一切功能正常,但是按 RET 会向前跳两行(无论我是否输入了表达式)并且函数定义的自动缩进很奇怪。这是它的样子:

In [164]: a = 1

In [165]:   
In [166]: a + 3

Out[166]: 4

In [167]:   
In [168]: def nine():

   .....:    .....:     return 4+5

   .....: 
In [169]: 

In [170]:   

应该只有一个.....:在“返回”行。我怀疑 ipython.el 或 python-mode.el 中的一些缩进/换行函数以某种方式被调用了两次。 (我真的不知道 elisp,但这可能是让我陷入其中的问题)。

当我执行“M-x ansi-term RET ipython”时,它按预期工作,但这并不理想,因为从其他文件发送代码、调试等都不起作用。

我可以想出两种方法来解决这个问题:要么找出我的设置如何导致双缩进/换行符并修复它,要么以某种方式将默认 python 解释器从 ipython.el 更改为 ansi-term 中的 ipython,同时仍然保留发送代码和调试的能力。

感谢任何关于从哪里开始的建议。

【问题讨论】:

    标签: emacs ipython


    【解决方案1】:

    您可以在 Python 缓冲区 (M-x describe-bindings) 中检查您的 RET 绑定,然后从那里开始。对我来说,它必然是换行符。点击绑定函数或使用 M-x describe-function 查找绑定函数的定义。

    【讨论】:

      【解决方案2】:

      好的,我在将 .emacs 从我的 Ubuntu 工作机器移植到我的 MacBook 的过程中发现了这一点。

      首先,我从我的 .emacs 中注释掉了以下几行:

      (defadvice comint-send-input (around block-comint-formatting activate)
       (if (string= (buffer-name) "*Python*")
           (letf (((symbol-function 'add-text-properties) (lambda (x y z) nil)))
             ad-do-it))
      ad-do-it)
      

      去掉了双换行符。我也加了

      (define-key py-shell-map "\C-j" 'ipython-send-and-indent)
      

      到我的 ipython.el 的结尾,这样我就可以像在 python 模式中一样使用它了。

      【讨论】:

        【解决方案3】:

        M-x ipython RET

        这就是当前 python-mode.el 所需要的一切

        http://launchpad.net/python-mode

        虽然 ipython 并不完美,但您可能会帮助发送错误报告

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-22
          • 2022-12-03
          • 2012-07-14
          相关资源
          最近更新 更多