How do I use vi keys in ipython under *nix?

目前在 Bash 中,我使用 set -o vi在 Bash 提示符中启用 vi 模式。

我如何在 ipython 中得到这个?

21619 次浏览

Looks like a solution works for many other readline compatible apps:

~/.inputrc文件中设置以下内容:

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

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

ipython使用 readline 库,可以使用 ~/.inputrc文件对其进行配置

set editing-mode vi

使所有基于 readline的应用程序使用 vi 样式的键绑定而不是 Emacs。

您还可以在 Vi 模式和 Emacs 模式之间进行交互切换。根据 j2在它们之间切换的功能,你应该能够使用‘ Meta’+ CTRL + j组合键,但是这似乎只允许我切换到 vi 模式——在我的 Mac 电脑上(ESC 被用作‘ Meta’键) ,它是: ESC + CTRL + j。要切换回 Emacs 模式,你可以使用 CTRL + e,但这对我似乎不起作用-我不得不使用‘ Meta’+ CTRL + e-在我的 Mac 上是: ESC + CTRL + e

仅供参考,我的 ~/. inputrc 设置如下:

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

如果有人最近在这里徘徊,IPython 5.0 switched from readline to prompt_toolkit,所以这个问题的最新答案是传递一个选项:

$ 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'

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()

你可以把 vi 放在你的。Ipython 启动配置文件。如果没有,可以创建一个,方法是向 ~/.ipython/profile_default/startup/添加一个名为 start.py的文件。这里有一个例子:

# 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 *

最后一行是如果在 Django 中使用 ipython,并且希望默认导入所有模型。