¿Cómo uso las claves vi en ipython bajo * nix?

Actualmente en Bash, uso set -o vi para habilitar el modo vi en mi indicador de bash.

¿Cómo consigo esto yendo en ipython?

Nota: si una respuesta se aplica a todos * nix, eliminaré el OS X del título 🙂

En caso de que alguien haya estado vagando aquí recientemente, IPython 5.0 cambió de readline a prompt_toolkit , por lo que una respuesta actualizada a esta pregunta es pasar una opción:

 $ ipython --TerminalInteractiveShell.editing_mode=vi 

… o para configurarlo globalmente en la configuración del perfil ( ~/.ipython/profile_default/ipython_config.py ; ipython profile create con ipython profile create si no lo tiene) con:

 c.TerminalInteractiveShell.editing_mode = 'vi' 

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

Establezca 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

También puede alternar interactivamente entre el modo Vi y el modo Emacs. De acuerdo con los documentos de readline para cambiar entre ellos, se supone que debes poder usar la combinación de teclas MCj, pero eso solo parece permitirme cambiar al modo vi en mi Mac (donde se usa ESC como la tecla ‘Meta’ ) es: ESC + CTRL + j . Para volver al modo Emacs, uno puede usar Ce, pero no me pareció que funcionara. En mi Mac, tuve que hacer MCe. En mi Mac es: ESC + CTRL + e .

Para mi información, mi ~ / .inputrc está configurado de la siguiente manera:

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

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

 set editing-mode vi 

a ese archivo para que todas las aplicaciones basadas en línea de lectura utilicen combinaciones de teclas de estilo vi en lugar de Emacs.

Necesitaba poder cambiar los modos de manera interactiva en IPython 5 y descubrí que puedes hacerlo recreando el administrador de avisos al vuelo:

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