在shell提示下按Up时,搜索具有相同前缀的上一个命令


19

来自FreeBSD世界,我希望使Linux终端的行为类似于FreeBSD,尤其是9.1版本,基本上,当您cd在终端中键入并按“向上”箭头时,您可以浏览历史记录中的所有命令,cd从而使您可以收获很多时间。

我不知道如何在Linux Debian或CentOS中启用此功能,这迫使我键入整个字符,请有人帮忙。


7
那是外壳的功能,而不是终端的功能。您在FreeBSD中使用什么shell?您可能能够为Linux获得相同(或相似)的shell。
cjm

我正在使用tcsh shell。
Abdelilah Benaou 2013年

2
我用tcsh下OS X并没有这个方便的前瞻性行为......经过一番搜索,我发现我可以通过将启用它bindkey -k (up|down) history-search-(back|for)ward在我.tcshrc 这里所描述的。凉!
加勒特·奥尔布赖特

Answers:


34

添加到以下内容~/.inputrc

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

说明

~/.inputrcGNU readline的配置文件。许多shell,包括bashtcsh使用readline进行命令行编辑。当遇到向上箭头键(\e[A)和向下箭头键(\e[B)的转义序列时,上面的两行将告诉readline调用其历史搜索功能。


我喜欢添加F12以将最后一行的最后一个单词放在当前命令的末尾。我Last word经常想在各种奥秘的陈词滥调中尝试这条路。和Shift键F12把我带回编辑工作从一开始整个最后一行。~/.inputrc是一个方便的工具。
jalanb 2015年

移位F12 一个需要vi模式
jalanb 2015年

6

事实是,FreeBSD和Linux默认使用不同的shell。FreeBSD默认使用tcsh,它比过去的bash具有更好的交互功能(但是bash已经赶上了),但是脚本功能明显更差

获得您所习惯的环境的最直接方法是在Linux上将Shell切换到tcsh。如果tcsh已在系统范围内安装(如果未安装,请要求系统管理员安装),请运行chsh -s tcsh以更改默认的Shell。

另外,您可以设置bash以使您习惯使用此命令。默认情况下,UpDown箭头会在历史记录中的所有命令之间导航,而不仅仅是以您键入的前缀开头的命令。要将其更改为您惯常的行为,请将以下行放入bash的初始化文件中,该文件.bashrc位于您的主目录中。运行. ~/.bashrc或启动新的外壳程序以重新读取初始化文件。

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

转义序列是您按箭头键时终端发送到外壳的内容。Up可以是\eOA(逃逸,OA),或\e[A取决于在终端上,并且类似地为Down

默认情况下,bash提供了不同的键绑定来搜索命令历史记录。您可以按Ctrl+ R,然后输入一些字符以在行中的任何位置搜索包含此子字符串的命令。按Ctrl+ S前进而不是后退。搜索是渐进式(即按您的类型);Alt+ PAlt+N为您提供非增量搜索。

您可以切换到zsh来代替bash和tcsh,它具有一些其他Shell中找不到的简洁功能。Zsh 默认情况下与bash一样具有Ctrl+ RCtrl+ S。要获得UpDowntcsh相同的效果,请将以下行放入~/.zshrc

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

如果您想在所有地方使用相同的shell,只要安装了端口,您也可以在FreeBSD上使用bash或zsh(同样请询问系统管理员)。


1

tcsh适用于大多数Linux发行版。尝试安装该tcsh软件包,然后运行chsh -s /bin/tcsh以使其成为默认外壳。


1
或者,您可能考虑切换到bash(我这样做了)。
基思·汤普森

1

其他答案可以解决这个问题,但是如果您想要更多,请看看 https://github.com/zsh-users/zsh-history-substring-search

Prezto(https://github.com/sorin-ionescu/prezto)也充满了zsh好东西。


谢谢您的回答,顺便说一句,我仍然看不出zsh比bash或tcsh有什么好处?
2013年

1
哼,您几乎可以在所有这些shell中完成所有基本工作。我之所以使用zsh,是因为其维护良好的prezto捆绑包(可能是大型游戏改变者),正确的提示(这是独有的功能),并且它的感觉比bash(配置和东西)还要优美。
Fuad Saud
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.