2012-05-01 15 views

Respuesta

89

En caso de que alguien está vagando por aquí recientemente, IPython 5.0 switched from readline to prompt_toolkit, por lo que una respuesta actualizada a esta pregunta es para pasar una opción:

$ ipython --TerminalInteractiveShell.editing_mode=vi 

... o definirlo globalmente en la configuración de su perfil (~/.ipython/profile_default/ipython_config.py; crearlo con ipython profile create si no lo tienes) con:

c.TerminalInteractiveShell.editing_mode = 'vi' 
+2

Vine aquí para publicar esta respuesta, gracias por darme una paliza :) –

+1

Gracias. Esto es molestamente difícil de encontrar en cualquier lugar de los documentos para IPython, Jupyter o prompt_toolkit. – jth

+1

¿Dónde puedo agregar mis asignaciones de enlaces de teclas personalizadas? – Aravinda

30

Parece que una solución que funciona para muchas otras aplicaciones compatibles readline:

Set lo siguiente en su archivo ~/.inputrc:

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

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

+5

ser * muy * cuidado con 'set convert-meta de '. Entra en conflicto con la entrada de Unicode, por lo que si pega o escribe unicode, puede desencadenar varios eventos, lo que puede ser sorprendente. Por ejemplo, intente escribir ü, y verá un resultado interesante. – minrk

+3

¿Sabes lo que hacen las dos últimas líneas? Una comprobación rápida muestra que solo la primera línea proporciona combinaciones de teclas vi básicas. Desearía saber si había alguna razón para agregar las otras. – weronika

+1

@weronika Parece que ['set keymap vi' cambia qué mapa de teclas (es decir, modo) afectarán los siguientes comandos] (http://stackoverflow.com/a/10002721/84745), y [' set convert-meta on' cambia el comportamiento de algunas teclas] (http://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html). No estoy seguro si los necesitas. – s4y

8

ipython usa la biblioteca readline y esto se puede configurar usando el archivo ~/.inputrc. Puede añadir

set editing-mode vi 

a ese archivo para que todas las aplicaciones basadas en readline usar vi combinaciones de teclas de estilo en lugar de Emacs.

+7

'ipython' cambió de' readline' a una biblioteca de python llamada 'prompt_toolkit' en' 5.0.0', por lo que ya no funciona. – jellycola

10

También puede cambiar interactivamente entre el modo Vi-modo y el modo Emacs. De acuerdo con el readline docs para cambiar entre ellos se supone que se puede usar la combinación de teclas MCj pero eso solo parece permitirme cambiar al modo vi - en mi Mac (donde ESC se usa como la tecla 'Meta') es: ESC + CTRL + j. Para volver al modo de Emacs se puede utilizar C-e, pero eso no parece funcionar para mí - que tenía que en lugar hacerlo M-C-e - en mi Mac es: ESC + CTRL + e.

FYI mi ~/.inputrc está configurado de la siguiente manera:

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

¡He estado intentando averiguar por qué M-C-j no funcionaba todo este tiempo! – shangxiao

2

que tenía que ser capaz de cambiar los modos de forma interactiva en IPython 5 y me encontré puede hacerlo al recrear el gerente rápida sobre la marcha:

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