web-dev-qa-db-fra.com

Comment utiliser les clés vi dans ipython sous * nix?

Actuellement dans Bash j'utilise set -o vi pour activer le mode vi dans mon invite bash.

Comment faire pour que cela se passe dans ipython?

Note: Si une réponse s'applique à tous * nix, je supprimerai l'OS X du titre :)

81
gak

Au cas où quelqu'un se promènerait ici récemment, IPython 5.0 est passé de readline à Prompt_toolkit , donc une réponse mise à jour à cette question consiste à passer une option:

$ ipython --TerminalInteractiveShell.editing_mode=vi

... ou pour le définir globalement dans la configuration du profil (~/.ipython/profile_default/ipython_config.py; créez-le avec ipython profile create si vous ne l'avez pas) avec:

c.TerminalInteractiveShell.editing_mode = 'vi'
144
imiric

Il semble qu'une solution fonctionne pour de nombreuses autres applications compatibles avec Readline:

Définissez les éléments suivants dans votre ~/.inputrc fichier:

set editing-mode vi
set keymap vi
set convert-meta on

Source: http://www.jukie.net/bart/blog/20040326082602

30
gak

Vous pouvez également basculer de manière interactive entre le mode Vi et le mode Emacs. Selon les readline docs pour basculer entre eux, vous êtes censé pouvoir utiliser la combinaison de touches MCj mais cela ne semble me permettre que de passer en vi-mode - sur mon Mac (où ESC est utilisé comme clé 'Meta') c'est: ESC+CTRL+j. Pour revenir au mode Emacs, on peut utiliser C-e mais cela ne semble pas fonctionner pour moi - je devais plutôt faire M-C-e - sur mon Mac c'est: ESC+CTRL+e.

Pour info mon ~/.inputrc est configuré comme suit:

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
11
Pierz

ipython utilise la bibliothèque readline et celle-ci est configurable à l'aide de ~/.inputrc fichier. Vous pouvez ajouter

set editing-mode vi

à ce fichier pour que toutes les applications basées sur readline utilisent des raccourcis clavier de style vi au lieu d'Emacs.

9
Noufal Ibrahim

J'avais besoin de pouvoir changer de mode de manière interactive dans IPython 5 et j'ai trouvé que vous pouvez le faire en recréant le gestionnaire d'invites à la volée:

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_Prompt_toolkit_cli()
7
Lex R

Vous pouvez définir vi dans votre fichier de configuration de démarrage .ipython. Créez-en un si vous ne l'avez pas en ajoutant un fichier à ~/.ipython/profile_default/startup/ a appelé quelque chose comme start.py. Voici un exemple:

# Initializing script for ipython in ~/.ipython/profile_default/startup/
from IPython import get_ipython
ipython = get_ipython()

# If in ipython, set vi and load autoreload extension
if 'ipython' in globals():
    ipython.editing_mode = 'vi'
    ipython.magic('load_ext autoreload')
    ipython.magic('autoreload 2')
from Myapp.models import * 

Cette dernière ligne est si vous utilisez ipython avec Django et que vous souhaitez importer tous vos modèles par défaut.

0
gregory