首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Ipython 5.0.0中设置特定的vim绑定

如何在Ipython 5.0.0中设置特定的vim绑定
EN

Stack Overflow用户
提问于 2016-07-19 02:43:30
回答 2查看 1.8K关注 0票数 6

我知道因为IPython5.0.0使用了一个新的输入库(prompt_toolkit),所以它不再默认使用.inputrc (*nix)中指定的编辑器模式。此选项必须在Ipython配置文件中设置(参见https://stackoverflow.com/a/38329940/2915339)。

我的问题是:在配置文件中设置vi-mode之后,如何指定特定的键绑定?例如,我喜欢用'jk‘来表示转义。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-07 12:12:16

你是对的。prompt_toolkit忽略.inputrc。似乎没有一种方法可以在IPython 5.0.0配置文件中为vi模式定义自定义的键绑定。

这是我目前正在使用的变通方法。它不是很漂亮,但现在可以用了。

根据IPython docs,您可以在启动配置脚本中指定键盘快捷键。

我没有将jk重新绑定到ESC,而是将VimInsertMode()内部的unicode "j“(u'j')后跟unicode "k”(u'k')作为切换到导航模式的prompt_toolkit事件的快捷方式。

我用以下代码创建了一个.ipython/profile_default/startup/keybindings.py

代码语言:javascript
复制
from IPython import get_ipython
from prompt_toolkit.enums import DEFAULT_BUFFER
from prompt_toolkit.filters import HasFocus, ViInsertMode
from prompt_toolkit.key_binding.vi_state import InputMode


ip = get_ipython()

def switch_to_navigation_mode(event):
    vi_state = event.cli.vi_state
    vi_state.reset(InputMode.NAVIGATION)

if getattr(ip, 'pt_cli'):
    registry = ip.pt_cli.application.key_bindings_registry
    registry.add_binding(u'j',u'k',
                         filter=(HasFocus(DEFAULT_BUFFER)
                                 & ViInsertMode()))(switch_to_navigation_mode)

The prompt_toolkit source将根据需要帮助您实现其他快捷方式。

票数 10
EN

Stack Overflow用户

发布于 2018-11-29 01:37:31

这是一个旧的帖子,但它帮助我找到了答案,所以我想我应该发表我是如何在ipython中向vi模式添加几个绑定的。我在~/.ipython/profile_default/startup/00-keybindings.py中添加了以下代码,以便在vi导航模式下绑定到K和J。

代码语言:javascript
复制
"""Improve history access so I can skip over functions"""

from IPython import get_ipython
from prompt_toolkit.enums import DEFAULT_BUFFER
from prompt_toolkit.filters import HasFocus, ViNavigationMode
from prompt_toolkit.key_binding.bindings.named_commands import get_by_name

ip = get_ipython()
registry = ip.pt_app.key_bindings
ph = get_by_name('previous-history')
nh = get_by_name('next-history')
registry.add_binding('K',
                     filter=(HasFocus(DEFAULT_BUFFER) &
                             ViNavigationMode()))(ph)
registry.add_binding('J',
                     filter=(HasFocus(DEFAULT_BUFFER) &
                             ViNavigationMode()))(nh)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38443907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档