为什么 Korn Shell 不能执行 ctrl-r?

Nik*_* R. 3 ksh command-history history line-editor pc-bsd

如果我将 PC-BSD 与默认 shell (Korn) 一起使用,那么Ctrl+r将不起作用。为什么它不起作用?

Ctrl-r在 1970 年代末或 80 年代初被引入以搜索您的历史记录,而我的 BSD 仍然无法做到(而 Ubuntu 可以)。

Ctrl-r 起源于 Emacs 不是吗?什么时候?1975年?1983年?

Sté*_*las 11

Ctrl+Rkshinemacs模式(ksh -o emacsset -o emacsinside ksh)一起使用,它很可能是第一个支持它的 shell。只是它不像zshorbashtcshi-search-back小部件那样具有交互性。

kshksh88ksh93)中,您键入Ctrl+RtextReturn。并Ctrl+RReturn使用相同的文本再次搜索。

vi模式下,您可以使用?向后搜索和n下一次搜索。

emacs 增量搜索功能已添加到:

  • bash/readline至少从 1989 年 7 月开始,因为当时usenet 上已经提到了该功能但可能不是从一开始,因为readline随附的版本zsh-1.0没有它。
  • zsh自 1991 年 2.0 后行编辑器被改写不再使用readline
  • tcsh在 V6.00.03, 10/21/91 中,但不受默认限制(尽管在此之前有一段时间tcsh启用了其他搜索机制Meta-P)。
  • ksh:ksh很可能是第一个具有emacs编辑模式的Unix shell ,由 Mike Veach 于 1982 年vi在 AT&T编写(以及Pat Sullivan的模式,重用了这两个人已经独立应用于 Bourne shell 的代码)。ksh 在1983 年的 USENIX 会议上首次在 AT&T 之外推出,会上描述了这些功能,但直到此后一段时间才在商业上可用 ( 1 , 2 )。很难说^R当时是否已经存在(无论如何,它在 1986 年和 1985 年就已经存在(参见Unix Heritage Society 的 Unix V8 tarball 中的usr/man/man1/ksh.1ksh85 手册页))),但很难想象它不是一个必不可少的功能,尤其是对于 shell,我希望当时也有vi模式?


Ste*_*itt 7

Korn shell 确实支持使用 进行历史搜索CtrlR,至少从ksh93(甚至可能ksh88)开始,但它们的工作方式与bash. 首先你需要启用 Emacs 模式:

set -o emacs
Run Code Online (Sandbox Code Playgroud)

(这会启用其他细节,例如默认情况下工作的箭头键。)

现在,如果您按CtrlR,shell 将打印^R;输入您的搜索,点击Enter,shell 将向您显示最接近的匹配历史条目。您可以Enter再次点击以按原样运行它,或对其进行编辑。