目前在 Bash 中,我使用set -o vi
在我的 bash 提示符中启用 vi 模式。
我如何在 ipython 中实现这一点?
万一最近有人在这里闲逛,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'
看起来一个解决方案适用于许多其他 readline 兼容的应用程序:
在您的文件中设置以下内容~/.inputrc
:
set editing-mode vi
set keymap vi
set convert-meta on
您还可以在 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
ipython
使用 readline 库,这可以使用~/.inputrc
文件进行配置。你可以加
set editing-mode vi
到该文件以使所有readline
基于应用程序的应用程序使用 vi 样式键绑定而不是 Emacs。
我需要能够在 IPython 5 中以交互方式切换模式,我发现您可以通过即时重新创建提示管理器来做到这一点:
a = get_ipython().configurables[0]; a.editing_mode='vi'; a.init_prompt_toolkit_cli()
您可以在 .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 一起使用,并且希望默认导入所有模型。