ipython:更改PageDown/PageUp以在命令历史记录中前后移动

ipython:更改PageDown/PageUp以在命令历史记录中前后移动,python,ipython,prompt-toolkit,Python,Ipython,Prompt Toolkit,在我的shell(zsh)或python中,我可以通过按PageDown向后浏览命令历史,也可以通过按PageUp向前浏览 但是在ipython中,这些快捷方式是相反的 这些快捷键是为ipython定义的,我如何将它们反转回去,以便 PageDown可以追溯到历史,PageUp可以追溯到历史 我正在Debian 10上使用ipython3版本5.8.0。在IPython版本5.x中,文档中提到了这一点: 要获取要绑定到的函数,请参见key\u binding/bindings/basic.py:

在我的shell(
zsh
)或
python
中,我可以通过按PageDown向后浏览命令历史,也可以通过按PageUp向前浏览

但是在
ipython
中,这些快捷方式是相反的

这些快捷键是为
ipython
定义的,我如何将它们反转回去,以便

PageDown可以追溯到历史,PageUp可以追溯到历史


我正在Debian 10上使用
ipython3
版本
5.8.0

在IPython版本5.x中,文档中提到了这一点:

要获取要绑定到的函数,请参见
key\u binding/bindings/basic.py
:默认值为

handle(“pageup”,filter=~具有\u选择)(按\u名称获取\u(“以前的历史记录”))
handle(“pagedown”,filter=~具有\u选择)(按\u名称获取\u(“下一个历史记录”))
因此,将此代码放在:

从IPython导入获取
从提示符_toolkit.filters导入
从prompt_toolkit.keys导入密钥
从提示符_toolkit.key_binding.bindings.named_命令导入按_名称获取_
registry=get\u ipython().pt\u cli.application.key\u bindings\u注册表
registry.add_绑定(Keys.PageUp,filter=~HasSelection())(通过_名称(“下一个历史记录”)获取_)
registry.add_绑定(Keys.PageDown,filter=~HasSelection())(通过_名称(“以前的历史”)获取_)
在较新的IPython版本(如7.19.0)上,将
注册表=…
行替换为

registry=get\u ipython().pt\u app.key\u绑定

参考:

~/.ipython/profile\u default/startup
目录中创建脚本,任何名称以扩展名
.py
.ipy
结尾

例如,我创建了
history\u keybindings.py
并将其放入
~/.ipython/profile\u default/startup
目录中

从IPython导入获取
从IPython.terminal.shortcuts导入上一个\历史\或\上一个\完成、下一个\历史\或\下一个\完成
从prompt_toolkit.keys导入密钥
从提示符_toolkit.filters导入
ip=get_ipython()
注册表=无
如果(getattr(ip,“pt_应用程序”,无)):
#对于IPython 7.x版
注册表=ip.pt\u app.key\u绑定
elif(getattr(ip,'pt_cli',None)):
#对于IPython版本5.x
注册表=ip.pt\u cli.application.key\u绑定\u注册表
如果注册处:
registry.add_绑定(Keys.PageUp,filter=(~HasSelection())(上一个_历史记录或上一个_完成)
registry.add_绑定(Keys.PageDown,filter=(~HasSelection())(next_history_或next_completion)

注意:有关更多信息,请查看您的python版本。@Chandan-
python 3.7.3
您的操作系统是什么?Debian 10@Chandantry在
ipythonrc
文件-
readline\u parse\u和\u bind“\e[5~”:历史向后搜索
readline\u parse\u和\u bind”\e[6~”:历史向前搜索
可能相关:我得到此错误:
AttributeError:“TerminalInteractiveShell”对象没有属性“pt_app”
@400theCat在那里…仍然不工作:
AttributeError:“CommandLineInterface”对象没有属性“key_bindings”
@400theCat我已经更新了答案,请重新检查谢谢。