2012-05-01 10 views

risposta

89

Nel caso in cui qualcuno sta vagando nel qui di recente, IPython 5.0 switched from readline to prompt_toolkit, in modo da una risposta aggiornata a questa domanda è quello di passare un'opzione:

$ ipython --TerminalInteractiveShell.editing_mode=vi 

... o per impostare globalmente nella configurazione del profilo (~/.ipython/profile_default/ipython_config.py; crearlo con ipython profile create se non ce l'hai) con:

c.TerminalInteractiveShell.editing_mode = 'vi' 
+2

Sono venuto qui per pubblicare questa risposta - grazie per avermi picchiato :) –

+1

Grazie. Questo è fastidiosamente difficile da trovare ovunque nei documenti per IPython, Jupyter o prompt_toolkit. – jth

+1

Dove posso aggiungere i miei mapping personalizzati di associazione chiavi? – Aravinda

30

Sembra una soluzione funziona per molte altre applicazioni compatibili readline:

Set il seguente nel file ~/.inputrc:

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

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

+5

essere * molto * attenti con 'set convert-meta su '. È in conflitto con la voce Unicode, quindi se si incolla o si digita unicode, è possibile attivare vari eventi, che possono essere sorprendenti. Ad esempio, prova a digitare ü e vedrai un risultato interessante. – minrk

+3

Sai cosa fanno le ultime due linee? Un rapido controllo mostra che solo la prima riga fornisce i tasti di base vi - vorrei sapere se c'era un motivo per aggiungere gli altri. – weronika

+1

@weronika Sembra che ['set keymap vi' cambi quale keymap (cioè mode) i seguenti comandi influenzeranno] (http://stackoverflow.com/a/10002721/84745), e [' set convert-meta on' cambia il comportamento di alcuni tasti] (http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html). Non sono sicuro che tu ne abbia bisogno. – s4y

8

ipython utilizza la libreria readline e questo è configurabile utilizzando il file ~/.inputrc. È possibile aggiungere

set editing-mode vi 

a quel file per rendere tutte le applicazioni basate su readline usare vi scorciatoie da tastiera in stile invece di Emacs.

+7

'ipython' è passato da' readline' a una libreria python chiamata 'prompt_toolkit' in' 5.0.0', quindi non funziona più. – jellycola

10

È anche possibile passare in modo interattivo tra la modalità Vi e la modalità Emacs. Secondo lo readline docs per passare da una all'altra dovresti essere in grado di usare la combinazione di tasti MCj ma sembra che mi permetta solo di passare a vi-mode - sul mio Mac (dove ESC è usato come tasto "Meta") è: ESC + CTRL + j. Per tornare alla modalità di Emacs si può usare C-e, ma che non sembra funzionare per me - ho dovuto fare, invece M-C-e - sul mio Mac è: ESC + CTRL + e.

FYI mio ~/.inputrc è configurato come segue:

set meta-flag on 
set input-meta on 
set convert-meta off 
set output-meta on 
+0

Ho cercato di capire perché M-C-j non ha funzionato per tutto questo tempo! – shangxiao

2

avevo bisogno di essere in grado di passare da una modalità interattiva in IPython 5 e ho trovato che si può fare in modo ricreando prompt direttore al volo:

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()