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"