Currently in Bash I use set -o vi
to enable vi mode in my bash prompt.
How do I get this going in ipython?
Note: If an answer applies to all *nix, I'll remove the OS X from the title :)
Currently in Bash I use set -o vi
to enable vi mode in my bash prompt.
How do I get this going in ipython?
Note: If an answer applies to all *nix, I'll remove the OS X from the title :)
In case someone's wandering in here recently, IPython 5.0 switched from readline to prompt_toolkit, so an updated answer to this question is to pass an option:
$ ipython --TerminalInteractiveShell.editing_mode=vi
... or to set it globally in the profile configuration (~/.ipython/profile_default/ipython_config.py
; create it with ipython profile create
if you don't have it) with:
c.TerminalInteractiveShell.editing_mode = 'vi'
Looks like a solution works for many other readline compatible apps:
Set the following in your ~/.inputrc
file:
set editing-mode vi
set keymap vi
set convert-meta on
Source: http://www.jukie.net/bart/blog/20040326082602
You can also interactively switch between Vi-mode and Emacs mode. According to the the readline docs to switch between them you are supposed to be able to use the M-C-j key combination but that only seems to allow me to switch to vi-mode - on my Mac (where ESC is used as the 'Meta' key) it is: ESC+CTRL+j. To switch back to Emacs mode one can use C-e but that didn't appear to work for me - I had to instead do M-C-e - on my Mac it is: ESC+CTRL+e.
FYI my ~/.inputrc is set up as follows:
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
ipython
uses the readline library and this is configurable using the ~/.inputrc
file. You can add
set editing-mode vi
to that file to make all readline
based applications use vi style keybindings instead of Emacs.
I needed to be able to switch modes interactively in IPython 5 and I found you can do so by recreating the prompt manager on the fly:
a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()