English 中文(简体)
标准的Python解释器有一个vi命令模式吗?
原标题:
  • 时间:2009-02-11 16:11:44
  •  标签:

我正在Python解析器上工作(在RHEL 5.3上的Python 2.4),突然发现自己处于似乎是vi命令模式的状态。也就是说,我可以使用典型的vi键绑定编辑以前的命令,用h向左移动,用x删除...

我喜欢它 - 唯一的问题是,我不知道我是如何到达这里的(也许是通过我导入的其中一个模块:pylab/matplotlib?)。

可以有人解释一下在解释器中如何启用这种模式吗?

最佳回答

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

或者将 "set editing-mode vi" 添加到您的 ~/.inputrc 中。

问题回答

这要看具体条件而定。

首先,Python shell 使用 readline,因此您的~/.inputrc 在此很重要。这对于 PostgreSQL 命令行解释器 psql 和 MySQL shell mysql 也是一样的。所有这些都可以配置为使用带有历史记录等内容的 vi 样式命令绑定。

一旦您将编辑模式设置为vi,<ESC>将使您进入Python shell的vi模式。

你可能需要在你的~/.inputrc中使用以下定义。

set editing-mode vi

OSX信息

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

例如,为了模仿一种流行的键盘组合来搜索您的历史记录,您可以将以下内容添加到您的.editrc中。

bind "^R" em-inc-search-prev

对于 Mac OS X 10.10.3,python2.7,可以通过在 ~/.editrc 中放置 bind -v 来配置 vi 模式。手册的最后几段给出了这一提示。

使用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日):或许,您可以通过使用Athame给 Python 的 readline 打上补丁来获取真正的 vim 功能。 我用 bash 做到了这一点,非常酷。

macOS Monterey(12.5) 中使用 Python 3.10,我通过在 ~/.inputrc(我也创建了这个文件)中添加 set editing-mode vi,使得 vi 绑定在 python 解释器中起作用。





相关问题
热门标签