我正在Python解析器上工作(在RHEL 5.3上的Python 2.4),突然发现自己处于似乎是vi命令模式的状态。也就是说,我可以使用典型的vi键绑定编辑以前的命令,用h向左移动,用x删除...
我喜欢它 - 唯一的问题是,我不知道我是如何到达这里的(也许是通过我导入的其中一个模块:pylab/matplotlib?)。
可以有人解释一下在解释器中如何启用这种模式吗?
我正在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 解释器中起作用。