Respostas:
No caso de alguém estar vagando por aqui recentemente, o IPython 5.0 mudou de readline para prompt_toolkit , então uma resposta atualizada a esta pergunta é passar uma opção:
$ ipython --TerminalInteractiveShell.editing_mode=vi
... ou para defini-lo globalmente na configuração do perfil ( ~/.ipython/profile_default/ipython_config.py; crie-o com ipython profile createse você não tiver) com:
c.TerminalInteractiveShell.editing_mode = 'vi'
Parece que uma solução funciona para muitos outros aplicativos compatíveis com readline:
Defina o seguinte em seu ~/.inputrcarquivo:
set editing-mode vi
set keymap vi
set convert-meta on
set convert-meta on. Ele entra em conflito com a entrada Unicode, portanto, se você colar ou digitar Unicode, poderá acionar vários eventos, o que pode ser surpreendente. Por exemplo, tente digitar ü e você verá um resultado interessante.
set keymap vimuda o mapa de teclado (ou seja, modo) que os comandos a seguir afetarão , e set convert-meta onmuda como algumas teclas se comportam . Não tenho certeza se você precisa deles.
set convert-meta on(e qualquer coisa abaixo dessa linha) só se aplica ao modo de comando, não ao modo de inserção.
Você também pode alternar interativamente entre o modo Vi e o modo Emacs. De acordo com os documentos do readline para alternar entre eles você deve ser capaz de usar a combinação de teclas MCj, mas isso só me permite mudar para o modo vi - no meu Mac (onde ESC é usado como a tecla 'Meta' ) é: ESC+ CTRL+ j. Para voltar ao modo Emacs, pode-se usar Ce, mas isso não pareceu funcionar para mim - eu tive que fazer o MCe - no meu Mac é: ESC+ CTRL+ e.
Para sua informação, meu ~ / .inputrc é configurado da seguinte forma:
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
ipythonusa a biblioteca readline e isso é configurável usando o ~/.inputrcarquivo. Você pode adicionar
set editing-mode vi
a esse arquivo para fazer com que todos os readlineaplicativos baseados usem atalhos de teclado no estilo vi ao invés do Emacs.
ipythonmudado de readlineuma biblioteca python chamado prompt_toolkitde 5.0.0modo que este não funciona mais.
Você pode definir o vi em seu arquivo de configuração de inicialização .ipython. Crie um se não o tiver, adicionando um arquivo a ~/.ipython/profile_default/startup/algo como start.py. Aqui está um exemplo:
# Initializing script for ipython in ~/.ipython/profile_default/startup/
from IPython import get_ipython
ipython = get_ipython()
# If in ipython, set vi and load autoreload extension
if 'ipython' in globals():
ipython.editing_mode = 'vi'
ipython.magic('load_ext autoreload')
ipython.magic('autoreload 2')
from Myapp.models import *
A última linha é se você usa ipython com Django e deseja importar todos os seus modelos por padrão.