Answers:
如果有人最近在这里闲逛,那么IPython 5.0从readline切换到hint_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
set convert-meta on
。它与unicode输入冲突,因此,如果粘贴或键入unicode,则可以触发各种事件,这可能令人惊讶。例如,尝试键入ü,您将看到一个有趣的结果。
set keymap vi
更改了以下命令将影响哪种按键图(即模式),以及set convert-meta on
更改了某些按键的行为。我不确定您是否需要它们。
set convert-meta on
(以及该行下的所有内容)将仅适用于命令模式,而不适用于插入模式。
您也可以在Vi-mode和Emacs模式之间交互切换。根据readline文档在它们之间进行切换,您应该能够使用MCj组合键,但这似乎只允许我切换到vi模式-在Mac上(其中ESC被用作“ Meta”键) )是: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
从readline
python库切换到prompt_toolkit
,5.0.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一起使用,并且要默认导入所有模型。