31

我在 python 解释器(RHEL 5.3 上的 python 2.4)中工作了一下,突然发现自己处于“vi 命令模式”中。也就是说,我可以用典型的 vi 键绑定编辑以前的命令,用 h 向左,用 x 删除......

我喜欢它——唯一的是,我不知道我是怎么到这里的(也许是通过我导入的模块之一:pylab/matplotlib?)。

谁能阐明如何在解释器中启用此模式?

4

4 回答 4

34

Ctrl-Alt-J 在readline 程序中从 Emacs 模式切换到 Vi 模式。

或者将“设置编辑模式 vi”添加到您的 ~/.inputrc

于 2009-02-11T20:18:07.360 回答
32

这一切都取决于一些事情。

首先,python shell 使用 readline,因此,你~/.inputrc在这里很重要。这与 PostgreSQL 命令行解释器 psql 和 MySQL shell 相同。所有这些都可以配置为使用 vi 风格的命令绑定,以及历史记录等。

<ESC>将编辑模式设置为 vi 后,将在 python shell 中将您置于 vi 模式

您可能需要在您的~/.inputrc

set editing-mode vi

OSX 信息

OSX 使用 libedit,它使用 ~/.editrc。您可以man editrc了解更多信息。

例如,要模仿在您的历史记录中搜索的流行组合键,您可以将以下内容添加到您的 .editrc

bind "^R" em-inc-search-prev
于 2009-02-11T16:32:38.887 回答
5

对于 Mac OS X 10.10.3、python2.7,可以vi通过将bind -v. ~/.editrc手册页的最后几段暗示了这一点。

于 2015-04-22T21:01:20.573 回答
3

使用readline.parse_and_bind方法。例如,在 python 交互式控制台上尝试:

import readline
readline.parse_and_bind("set editing-mode vi")

似乎您可以在 .inputrc 中设置的任何命令也可以通过此方法设置。我在 Python 2.7 和 3.5.1 中尝试过。

也可以看看man readline


编辑 (2019 年 12 月 21 日):或者,要拥有真正的 vim,您可以设法用Athame修补 python 的 readline 。我用 bash 完成了它,它非常酷。

于 2016-04-01T19:22:22.307 回答