ipython上下箭头奇怪的行为

时间:2012-10-22 15:44:40

标签: python macos ipython

在我的ipython安装中,我遇到了这个奇怪的问题,我无法通过向上和向下箭头可靠地移动命令历史...很多时候它不起作用(按键时没有任何反应)。另外,有时在命令末尾写正常字符也不起作用。

我的系统:Mac OSX Lion

我安装了readline ......

谢谢你的帮助! 大卫

4 个答案:

答案 0 :(得分:7)

确保在 ipython之前安装了readline

sudo pip uninstall ipython

sudo pip install readline ipython

(我知道这个问题已有几个月了,但供将来参考)

答案 1 :(得分:5)

我必须使用easy_install readline安装readline并修复它。 使用pip install readline对我不起作用,ipython发出警告:

******************************************************************************
libedit detected - readline will not be well behaved, including but not limited to:
   * crashes on tab completion
   * incorrect history navigation
   * corrupting long-lines
   * failure to wrap or indent lines properly
It is highly recommended that you install readline, which is easy_installable:
     easy_install readline
Note that `pip install readline` generally DOES NOT WORK, because
it installs to site-packages, which come *after* lib-dynload in sys.path,
where readline is located.  It must be `easy_install readline`, or to a custom
location on your PYTHONPATH (even --user comes after lib-dyload).
******************************************************************************

答案 2 :(得分:0)

在iPython和up-& -down箭头出现问题以访问历史记录并浏览此帖子后,一个简单的解决方案(关闭" Scroll lock")结果对我有效。

答案 3 :(得分:0)

这是IPython的故意特征。如果您键入“abc”然后按向上箭头,它将仅滚动以“abc”开头的行。如果在滚动时点击向右/向右,则会触发相同的行为。当前行的全部内容被解释为您的搜索前缀,任何仅以所有将在上/下按键上显示的行开头。

您可以在PYTHONSTARTUP文件中更改此行为。我有以下几行:

import readline
# Prevent ctrl-p/ctrl-n/Up/Down from doing prefix searching 
readline.parse_and_bind('"\\C-p": previous-history')
readline.parse_and_bind('"\\C-n": next-history')
readline.parse_and_bind('"\\e[A": previous-history')
readline.parse_and_bind('"\\e[B": next-history')

如果你很好奇,here are the bindings in IPython's source code我们会凌驾于其中。

不相关,但我也想覆盖readline的默认ctrl-w:

# Ctrl-W behavior more like Vim
readline.parse_and_bind('"\\C-w": backward-kill-word')