如何解决ipython:更改 PageDown/PageUp 以在命令历史记录中后退/前进
在我的 shell (zsh
) 或 python
中,我可以按 PageDown 向后浏览命令历史记录,按 PageUp 可以向前浏览。
但在 ipython
中,这些快捷方式是相反的。
为 ipython
定义的这些快捷方式在哪里,以及如何将它们反转回来,以便
PageDown回到历史,PageUp在历史上前行?
我在 Debian 10 上使用 ipython3
版本 5.8.0
。
解决方法
在 IPython 5.x 版中,文档中提到了这一点:Specific config details — IPython 5.11.0.dev documentation
要获取要绑定的函数,请参阅car_id category_id category_name value
1 1 engine power 125 kW
1 1 seats 125 kW
1 3 release year 2008
:默认为
key_binding/bindings/basic.py
因此,将此代码放在 startup file 中:
handle("pageup",filter=~has_selection)(get_by_name("previous-history"))
handle("pagedown",filter=~has_selection)(get_by_name("next-history"))
在较新的 IPython 版本(例如 7.19.0)上,将 from IPython import get_ipython
from prompt_toolkit.filters import HasSelection
from prompt_toolkit.keys import Keys
from prompt_toolkit.key_binding.bindings.named_commands import get_by_name
registry = get_ipython().pt_cli.application.key_bindings_registry
registry.add_binding(Keys.PageUp,filter=~HasSelection())(get_by_name("next-history"))
registry.add_binding(Keys.PageDown,filter=~HasSelection())(get_by_name("previous-history"))
行替换为
registry = ...
参考:Specific config details — IPython 7.19.0 documentation
,在 ~/.ipython/profile_default/startup
目录中创建任何名称以扩展名 .py
或 .ipy
结尾的脚本
例如我创建了 history_keybindings.py
并将其放在 ~/.ipython/profile_default/startup
目录中
from IPython import get_ipython
from IPython.terminal.shortcuts import previous_history_or_previous_completion,next_history_or_next_completion
from prompt_toolkit.keys import Keys
from prompt_toolkit.filters import HasSelection
ip = get_ipython()
registry = None
if (getattr(ip,'pt_app',None)):
# for IPython versions 7.x
registry = ip.pt_app.key_bindings
elif (getattr(ip,'pt_cli',None)):
# for IPython versions 5.x
registry = ip.pt_cli.application.key_bindings_registry
if registry:
registry.add_binding(Keys.PageUp,filter=(~HasSelection()))(previous_history_or_previous_completion)
registry.add_binding(Keys.PageDown,filter=(~HasSelection()))(next_history_or_next_completion)
注意:有关详细信息,请查看 here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。