Comment définir une liaison vim spécifique dans Ipython 5.0.0



linux prompt-toolkit (1)

Je comprends que parce que Ipython 5.0.0 utilise une nouvelle bibliothèque d'entrée (prompt_toolkit), il ne prend plus par défaut le mode d'éditeur spécifié dans .inputrc (* nix). Cette option doit être définie dans un fichier de configuration de profil Ipython (voir https://stackoverflow.com/a/38329940/2915339 ).

Ma question est la suivante: après avoir défini le mode vi dans le fichier de configuration du profil, comment spécifier une liaison de touches particulière? J'aime utiliser 'jk' pour l'évasion, par exemple.


Answer #1

Tu as raison. prompt_toolkit ignore .inputrc . Il ne semble pas y avoir moyen de définir des raccourcis clavier personnalisés pour le mode vi dans le fichier de configuration de profil IPython 5.0.0.

Voici une solution de contournement que j'utilise actuellement. Ce n'est pas joli, mais ça marche pour le moment.

Selon les documents IPython , vous pouvez spécifier des raccourcis clavier dans un script de configuration de démarrage.

Au lieu de relier jk à ESC , je fais un "j" unicode ( u'j' ) suivi d'un "k" unicode ( u'k' ) dans VimInsertMode() un raccourci pour un événement prompt_toolkit qui passe à la navigation mode.

J'ai créé un .ipython/profile_default/startup/keybindings.py avec le code suivant:

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 source de prompt_toolkit vous aidera à implémenter d'autres raccourcis si nécessaire.





prompt-toolkit