如何在* nix下的ipython中使用vi键?

时间:2012-05-01 06:21:35

标签: python bash vi ipython readline

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

我如何在ipython中实现这一目标?

注意:如果答案适用于所有* nix,我将从标题中删除OS X:)

6 个答案:

答案 0 :(得分:138)

如果有人最近在这里徘徊,IPython 5.0 switched from readline to prompt_toolkit,那么此问题的更新答案就是通过一个选项:

$ ipython --TerminalInteractiveShell.editing_mode=vi

...或者在配置文件配置中全局设置(~/.ipython/profile_default/ipython_config.py;如果您没有,请使用ipython profile create创建):

c.TerminalInteractiveShell.editing_mode = 'vi'

答案 1 :(得分:30)

看起来解决方案适用于许多其他与readline兼容的应用程序:

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

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

来源:http://www.jukie.net/bart/blog/20040326082602

答案 2 :(得分:11)

您还可以在Vi模式和Emacs模式之间交互式切换。根据要在它们之间切换的readline docs你应该能够使用MCj组合键,但这似乎只允许我切换到vi-mode - 在我的Mac上(其中ESC被用作''元'键'是: ESC + CTRL + j 。要切换回Emacs模式,可以使用Ce,但这对我来说似乎不起作用 - 我不得不在我的Mac上执行MCe - 它是: ESC + CTRL + 电子

FYI我的〜/ .inputrc设置如下:

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

答案 3 :(得分:9)

ipython使用readline库,可以使用~/.inputrc文件进行配置。你可以添加

set editing-mode vi

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

答案 4 :(得分:7)

我需要能够在IPython 5中以交互方式切换模式,我发现你可以通过动态重新创建提示管理器来实现这一点:

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

答案 5 :(得分:0)

您可以在.ipython启动配置文件中设置vi。如果没有文件,则通过向~/.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 * 

最后一行是如果您将ipython与Django一起使用,并且要默认导入所有模型。