在我安装 ipython 的过程中,我遇到了一个奇怪的问题,我无法使用向上和向下箭头可靠地浏览命令历史......很多时候它只是不起作用(按键时没有任何反应)。有时在命令末尾写普通字符也是行不通的。
我的系统:Mac OSX Lion
我已经安装了readline...
感谢您的帮助!大卫
确保在ipython之前安装了 readline 。
sudo pip uninstall ipython
sudo pip install readline ipython
(我知道这个问题已经有几个月了,但供将来参考)
我必须安装 readlineeasy_install 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).
******************************************************************************
在 iPython 和上下箭头访问历史的麻烦之后,浏览这篇文章,一个简单的解决方案(关闭“滚动锁定”)结果对我有用。
这是 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')
如果你好奇,这里是我们覆盖的 IPython 源代码中的绑定。
不相关,但我也想覆盖 readline 的默认 ctrl-w:
# Ctrl-W behavior more like Vim
readline.parse_and_bind('"\\C-w": backward-kill-word')