¿Cómo se establecen los enlaces vim específicos en Ipython 5.0.0?

Entiendo que debido a que Ipython 5.0.0 usa una nueva biblioteca de entrada (prompt_toolkit), ya no está predeterminada para el modo de editor especificado en .inputrc (* nix). Esta opción debe configurarse en un archivo de configuración de perfil de Ipython (consulte https://stackoverflow.com/a/38329940/2915339 ).

Mi pregunta es: después de haber configurado el modo vi en el archivo de configuración del perfil, ¿cómo se especifica una combinación de teclas en particular? Me gusta usar ‘jk’ para escapar, por ejemplo.

Tienes razón. prompt_toolkit ignora .inputrc . No parece haber una manera de definir combinaciones de teclas personalizadas para el modo vi en el archivo de configuración de perfil IPython 5.0.0.

Aquí está la solución que estoy usando actualmente. No es bonito, pero funciona por ahora.

De acuerdo con los documentos de IPython , puede especificar atajos de teclado en un script de configuración de inicio.

En lugar de volver a vincular jk a ESC , hago un unicode “j” ( u'j' ) seguido de un unicode “k” ( u'k' ) dentro de VimInsertMode() un acceso directo para un evento prompt_toolkit que cambia a la navegación modo.

.ipython/profile_default/startup/keybindings.py un .ipython/profile_default/startup/keybindings.py con el siguiente código:

 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) 

La fuente prompt_toolkit te ayudará a implementar otros accesos directos según sea necesario.

Esta es una publicación antigua, pero me ayudó a encontrar mi respuesta, así que pensé en publicar cómo agregué un par de enlaces al modo vi en ipython. Agregué el siguiente código en ~ / .ipython / profile_default / startup / 00-keybindings.py para enlazar con K y J en el modo de navegación 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)