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

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

如果我使用带有默认 shell (Korn) 的 PC-BSD,则Ctrl+r不起作用。为什么行不通?

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

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

答案1

Ctrl+Rksh与inemacs模式(ksh -o emacsset -o emacsinside )一起使用ksh,它很可能是第一个支持它的 shell。只是它不像zshor bashortcshi-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
  • kshksh很可能是第一个具有emacs编辑模式的 Unix shell,由 Mike Veach 于 1982 年在 AT&T 编写(以及viPat Sullivan 的模式,重用了这两者已经独立应用于 Bourne shell 的代码)。 ksh 首次在 AT&T 之外推出1983年USENIX会议在哪里描述了这些功能,但直到此后一段时间才商用(1,2)。很难说^R当时是否已经在那里(无论如何,它已经在那里了1986年和 1985(参见usr/man/man1/ksh.1ksh85 手册页Unix Heritage Society 中的 Unix V8 tarball)),但很难想象它不是,因为它是一个基本功能,特别是对于 shell,而且我希望vi模式?当时也已经存在。

答案2

Korn shell 确实支持使用历史搜索CtrlR,至少从那时起ksh93(甚至可能ksh88),但它们的工作方式不太像bash。首先您需要启用 Emacs 模式:

set -o emacs

(这可以实现其他细节,例如默认情况下使用箭头键。)

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

答案3

在 20 世纪 70 年代,shell 还没有光标可编辑的历史。

第一个具有集成光标可编辑历史记录的 shell 是我bsh在 1984 年开发的(基于 1982 年的原型)。此历史记录实现使用 crontrol -r 重新显示当前命令行。

1986 年,Korn Shell 成为实现完全集成的光标可编辑历史记录的 shell 组的一员。

带有集成编辑器的 tcsh 版本于 1987 年首次出现。

Bash 出现于 1989 年。

默认情况下,Ksh 不是在emacs模式下运行,而是在gmacs模式下运行。

请注意,即使在默认模式下,ksh93 也支持使用 control-r 进行搜索,它只是不告诉您它处于该模式。如果我输入:

^R

我得到了回显,然后可以输入搜索字符串:

^Rali
alias a=b

它在历史记录中找到别名命令。

相关内容