如果我使用带有默认 shell (Korn) 的 PC-BSD,则Ctrl+r不起作用。为什么行不通?
Ctrl-r在 20 世纪 70 年代末或 80 年代初被引入来搜索你的历史记录,但我的 BSD 仍然无法做到(而 Ubuntu 可以)。
Ctrl-r 起源于 Emacs 不是吗?什么时候? 1975 年? 1983 年?
答案1
Ctrl+Rksh
与inemacs
模式(ksh -o emacs
或set -o emacs
inside )一起使用ksh
,它很可能是第一个支持它的 shell。只是它不像zsh
or bash
ortcsh
的i-search-back
小部件那样具有交互性。
在ksh
(ksh88
和ksh93
)中,您键入Ctrl+Rtext
Return。并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-Pksh
:ksh
很可能是第一个具有emacs
编辑模式的 Unix shell,由 Mike Veach 于 1982 年在 AT&T 编写(以及vi
Pat Sullivan 的模式,重用了这两者已经独立应用于 Bourne shell 的代码)。 ksh 首次在 AT&T 之外推出1983年USENIX会议在哪里描述了这些功能,但直到此后一段时间才商用(1,2)。很难说^R
当时是否已经在那里(无论如何,它已经在那里了1986年和 1985(参见usr/man/man1/ksh.1
ksh85 手册页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
它在历史记录中找到别名命令。