【问题标题】:ipython up and down arrow strange behaviouripython上下箭头奇怪的行为
【发布时间】:2012-10-22 15:44:39
【问题描述】:

在我安装 ipython 的过程中,我遇到了一个奇怪的问题,我无法使用向上和向下箭头可靠地浏览命令历史记录......很多时候它只是不起作用(按键时没有任何反应)。有时在命令末尾写普通字符也是行不通的。

我的系统:Mac OSX Lion

我已经安装了 readline...

感谢您的帮助! 大卫

【问题讨论】:

  • 哪个前端?经典的 ipython 或 qtconsole ?哪个版本? 0.13.1 已于数小时前发布。您可以尝试在github上打开一个问题。
  • Matt,感谢您的来信...回答您的问题:经典的 ipython... 我尝试了 0.13.1,它是一样的。是的,也许我会打开这个问题 - 谢谢你的提示。

标签: python macos ipython


【解决方案1】:

确保您在 ipython 之前安装了 readline。

sudo pip uninstall ipython

sudo pip install readline ipython

(我知道这个问题是几个月前的问题,但供将来参考)

【讨论】:

  • 我不必卸载 ipython。只需“easy_install readline”就可以了。
  • 如果运行 pip 时出现“-lncurses”未找到错误,则需要安装 ncurses-devel(用于 redhat)或 libncurses5-dev 用于 debian/ubuntu
【解决方案2】:

我必须使用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).
******************************************************************************

【讨论】:

    【解决方案3】:

    在 iPython 和上下箭头访问历史记录后遇到问题,并浏览这篇文章,一个简单的解决方案(关闭“滚动锁定”)原来对我有用。

    【讨论】:

    • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
    【解决方案4】:

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

    您可以在 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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2016-03-16
      • 2012-08-10
      相关资源
      最近更新 更多