标准python解释器有一个vi命令模式?

yun*_*hin 27 python vi

这听起来很无知,但是:

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

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

任何人都可以解释如何在解释器中启用此模式?

Phi*_*lds 31

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

首先,python shell使用readline,因此,~/.inputrc这里很重要.这与psql的PostgreSQL命令行解释器和mysql的MySQL shell是一样的.所有这些都可以配置为使用vi样式的命令绑定,历史记录等.

<ESC> 一旦你的编辑模式设置为vi,你将进入python shell的vi模式

您可能需要以下定义 ~/.inputrc

set editing-mode vi
Run Code Online (Sandbox Code Playgroud)

OSX信息

OSX使用libedit,它使用〜/ .editrc.你可以通过manrc来获取更多信息.

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

bind "^R" em-inc-search-prev
Run Code Online (Sandbox Code Playgroud)

  • 在Mac OS X上,将以下内容放在.editrc文件中:`bind -v` (6认同)
  • 在 MAC OS X 上 - 在完成上述所有建议后我仍然遇到问题。这里提供的答案解决了我的问题 - http://stackoverflow.com/questions/6636124/how-do-i-make-vi-editing-mode-work-in-irb-when-using-rvm 总之,添加两者将 -v 绑定到 .editrc,并将编辑模式 vi 设置为 inputrc 有效。 (2认同)

小智 27

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

或者在您的〜/ .inputrc中添加"set editing-mode vi"

  • 对我不起作用 - 似乎只产生了一个<return>.我在Mac上; 这有什么区别吗? (3认同)
  • @JohnFouhy 我遇到了同样的问题。并且在我的 `~/.inputrc` 中设置编辑模式 vi 也没有帮助。 (3认同)
  • 对于任何有足够代表添加到此答案的人,这里有一个指向readline文档的链接:http://tiswww.case.edu/php/chet/readline/rluserman.html#SEC22 ...所以对于emacs-editing-mode点击Ce,对于vi-editing-mode命中MCj (2认同)

小智 5

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


Iac*_*hus 5

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

import readline
readline.parse_and_bind("set editing-mode vi")
Run Code Online (Sandbox Code Playgroud)

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

也可以看看man readline


编辑 (2019 年 12 月 21 日) :或者也许,要拥有一个真正的 vim,您可以设法使用Athame修补 python 的 readline 。我用 bash 做到了,非常酷。