107

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

我如何在 ipython 中实现这一点?

4

6 回答 6

194

万一最近有人在这里闲逛,IPython 5.0 从 readline 切换到 prompt_toolkit,所以这个问题的更新答案是传递一个选项:

$ ipython --TerminalInteractiveShell.editing_mode=vi

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

c.TerminalInteractiveShell.editing_mode = 'vi'
于 2016-07-12T13:12:35.087 回答
33

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

在您的文件中设置以下内容~/.inputrc

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

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

于 2012-05-01T06:24:54.190 回答
11

您还可以在 Vi 模式和 Emacs 模式之间进行交互切换。根据在它们之间切换的readline 文档,您应该能够使用 MCj 组合键,但这似乎只允许我切换到 vi 模式 - 在我的 Mac 上(ESC 用作“元”键) 它是:ESC+ CTRL+ j。要切换回 Emacs 模式,可以使用 Ce 但这似乎对我不起作用 - 我不得不改为使用 MCe - 在我的 Mac 上它是:ESC+ CTRL+ e

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

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
于 2013-06-28T09:18:01.920 回答
9

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

set editing-mode vi

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

于 2012-05-01T06:26:24.647 回答
9

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

a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()
于 2017-09-13T10:43:32.200 回答
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 一起使用,并且希望默认导入所有模型。

于 2019-08-17T18:11:27.140 回答