如何在 Ipython 5.0.0 中设置特定的 vim-bindings
How does one set specific vim-bindings in Ipython 5.0.0
我知道因为 Ipython 5.0.0 使用新的输入库 (prompt_toolkit) 它不再默认为 .inputrc (*nix) 中指定的编辑器模式。此选项必须在 Ipython 配置文件中设置(参见 )。
我的问题是:在配置文件配置文件中设置了 vi 模式后,如何指定特定的键绑定?例如,我喜欢使用 'jk' 进行转义。
你是对的。 prompt_toolkit
忽略 .inputrc
。似乎没有办法在 IPython 5.0.0 配置文件中为 vi
模式定义自定义键绑定。
这是我目前正在使用的解决方法。它不漂亮,但它现在有效。
根据IPython docs,您可以在启动配置脚本中指定键盘快捷键。
我没有将 jk
重新绑定到 ESC
,而是制作了一个 unicode "j" (u'j'
),然后是一个 unicode "k" (u'k'
) VimInsertMode()
内部 prompt_toolkit
切换到导航模式的事件的快捷方式。
我使用以下代码创建了一个 .ipython/profile_default/startup/keybindings.py
:
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 将帮助您根据需要实施其他快捷方式。
这是一个旧的 post 但它帮助我找到了我的答案所以我想我会 post 我如何在 ipython 中添加几个绑定到 vi 模式。我在 ~/.ipython/profile_default/startup/00-keybindings.py 中添加了以下代码以在 vi 导航模式下绑定到 K 和 J。
"""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)
我知道因为 Ipython 5.0.0 使用新的输入库 (prompt_toolkit) 它不再默认为 .inputrc (*nix) 中指定的编辑器模式。此选项必须在 Ipython 配置文件中设置(参见 )。
我的问题是:在配置文件配置文件中设置了 vi 模式后,如何指定特定的键绑定?例如,我喜欢使用 'jk' 进行转义。
你是对的。 prompt_toolkit
忽略 .inputrc
。似乎没有办法在 IPython 5.0.0 配置文件中为 vi
模式定义自定义键绑定。
这是我目前正在使用的解决方法。它不漂亮,但它现在有效。
根据IPython docs,您可以在启动配置脚本中指定键盘快捷键。
我没有将 jk
重新绑定到 ESC
,而是制作了一个 unicode "j" (u'j'
),然后是一个 unicode "k" (u'k'
) VimInsertMode()
内部 prompt_toolkit
切换到导航模式的事件的快捷方式。
我使用以下代码创建了一个 .ipython/profile_default/startup/keybindings.py
:
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 将帮助您根据需要实施其他快捷方式。
这是一个旧的 post 但它帮助我找到了我的答案所以我想我会 post 我如何在 ipython 中添加几个绑定到 vi 模式。我在 ~/.ipython/profile_default/startup/00-keybindings.py 中添加了以下代码以在 vi 导航模式下绑定到 K 和 J。
"""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)