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+R与ksh
inemacs
模式(ksh -o emacs
或set -o emacs
inside ksh
)一起使用,它很可能是第一个支持它的 shell。只是它不像zsh
orbash
或tcsh
的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-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.1
ksh85 手册页))),但很难想象它不是一个必不可少的功能,尤其是对于 shell,我希望当时也有vi
模式?
。Korn shell 确实支持使用 进行历史搜索CtrlR,至少从ksh93
(甚至可能ksh88
)开始,但它们的工作方式与bash
. 首先你需要启用 Emacs 模式:
set -o emacs
Run Code Online (Sandbox Code Playgroud)
(这会启用其他细节,例如默认情况下工作的箭头键。)
现在,如果您按CtrlR,shell 将打印^R
;输入您的搜索,点击Enter,shell 将向您显示最接近的匹配历史条目。您可以Enter再次点击以按原样运行它,或对其进行编辑。