Как установить конкретные привязки vim в Ipython 5.0.0

Я понимаю, что, поскольку Ipython 5.0.0 использует новую входную библиотеку (prompt_toolkit), он больше не использует режим редактора, указанный в .inputrc (* nix). Эта опция должна быть установлена ​​в файле конфигурации профиля Ipython (см.https://stackoverflow.com/a/38329940/2915339).

Мой вопрос: установив vi-mode в файле конфигурации профиля, как указать конкретную привязку клавиш? Например, мне нравится использовать jk для побега.

Ответы на вопрос(2)

Это старая статья, но она помогла мне найти ответ, поэтому я решил опубликовать, как я добавил пару привязок в режим vi в ipython. Я добавил следующий код в ~ / .ipython / profile_default / startup / 00-keybindings.py для привязки к K и J в режиме навигации vi.

"""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)
 Jonathan Branam21 янв. 2019 г., 03:02
Я искал и искал именно эту связку клавиш. Я наткнулся на это, когда искал правильный способ настройки режима редактирования vi, и я так благодарен. Спасибо @GaryBishop!
Решение Вопроса

Ты прав.prompt_toolkit игнорируемых.inputrc, Кажется, нет способа определить пользовательские сочетания клавиш дляvi режим в файле конфигурации профиля IPython 5.0.0.

Вот обходной путь, который я сейчас использую. Это не красиво, но пока работает.

СогласноIPython документы, вы можете указать сочетания клавиш в сценарии конфигурации запуска.

Вместо переплетаjk вESCЯ делаю юникод "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)

Источник prompt_toolkit поможет вам реализовать другие ярлыки по мере необходимости.

 Aaron Feldman27 окт. 2018 г., 03:04
этоkeybindings.py перестал работать некоторое время между IPython 5.1.0 и 7.0.1, с сообщением об ошибке'TerminalInteractiveShell' object has no attribute 'pt_cli', Увидетьgithub.com/ipython/ipython/pull/11426/commits/... для исправления.
 Olivier Moindrot14 мар. 2019 г., 14:07
Следующая ссылка также содержит обновленный код сочетаний клавиш:ipython.readthedocs.io/en/stable/config/...

Ваш ответ на вопрос