我已经搜索过,但是没有找到任何东西。我正在使用终端在bash中寻找功能。

回来的时候,我有一个使用debian系统的用户,而一个朋友为我设置了便捷的历史记录搜索功能(我相信我然后使用tcsh),在这里我将键入上一个命令的开头,按向上箭头,然后将根据部分字符串进行搜索。

例如如果我的历史记录是:

./script.pl
./script.pl arg1
cat output
cat output | grep yada


然后输入.,然后按向上箭头,它将显示我:./script.pl arg1。再次按它会显示./script.pl等。非常类似于它在.bash_history上执行grep的过程。有没有办法获得此功能?

评论

类似于Shell的命令历史记录的iPython的可能副本

@Marcel看起来可能是相同的答案,我在搜索中看到了它,但没有使用iPython和Shell关键字将其与我的问题联系起来。

听起来像这样-github.com/zsh-users/zsh-autosuggestions。

#1 楼

打开您的~/.inputrc。如果没有此文件,请参见最后的创建方法。添加以下行:

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward


#开头的行为注释。我不记得什么是落后的,什么是前进的。尝试一下。也许您需要向前和向后切换。

只需重新打开可能打开的终端窗口,新方法才能生效。


一些背景信息:

Bash正在使用readline处理提示。 ~/.inputrc是readline的配置文件。请注意,这还将在使用readline库的其他软件中生效,例如IPython。

阅读bash手册以获取有关readline的更多信息。您还可以在其中找到更多与历史记录相关的readline命令。

要获取箭头键的转义码,您可以执行以下操作:


在Windows中启动cat终端(仅cat,无其他参数)。
键入键盘上的键,您将得到类似^[[A的向上箭头和^[[B的向下箭头。
^[替换\e


如果没有~/.inputrc文件,请复制默认设置,否则所有其他默认键绑定将被覆盖:

cp /etc/inputrc ~/.inputrc


或以以下一行开始您的~/.inputrc文件

$include /etc/inputrc


评论


很好,但是此解决方案禁用了ctrl-left / ctrl-right快捷方式。

–Eyal
16-2-2在14:22

谁能告诉我我如何才能做到

–Hitesh Kumar
17年2月10日在17:29

@lesmana,我想给猫咪一个部分加分

– Mike D
17年17月17日下午16:50

其次,@ Eyal,有人对我如何拥有此建议但保留ctrl-left / ctrl-right快捷方式有任何建议吗?

–kbrose
18年8月28日在21:59

要保留所有默认值,最好在第一行添加$ include / etc / inputrc。

– Tulio Casagrande
18-09-5在17:38

#2 楼

在/etc/profile.d/中以模式644创建一个名为setup_readline.sh的文件,内容如下,登录并检查您的首选键:

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


我认为是最好的方法。通常,如果您使用诸如Chef,Puppet之类的配置管理系统

而系统配置仍保持不变!

评论


奇怪的是,〜/ inputrc对我不起作用-但将这些命令放入.bash_profile中确实起作用。

–乔
2015年6月7日在18:45

.inputrc在我的主文件夹中不存在,无论如何,我还是喜欢在.bashrc中具有这些设置,因此我可以随身携带一个文件进行设置。因此,这可能是一个更好的答案。

– Shital Shah
16年4月4日,0:33

.inputrc对我来说效果非常好,但是在我加载屏幕后却无法工作。奇怪的是,其他.inputrc快捷方式有效,但这些无效。因此,我现在同时使用两种解决方案。

–嗜尿菌
16-11-28在4:25

例如,当您登录到服务器来执行某项操作而又错过了很多麻烦而又不想在服务器上编辑并重新加载〜/ .inputrc时,这将非常有用。

– Danmactough
17年12月7日在20:56

#3 楼

Ctrl + R将为您提供这种功能。开始输入部分命令,它将附带旧命令,您可以使用上下箭头进行导航。

更多信息在这里。

评论


感谢您的回复。是的,我已经尝试过了,但是我发现它有点...挑剔。它不允许我滚动显示以partial开头的命令,而只显示第一个。它还会在整个命令中搜索字符,这是没有用的。

– TLP
2011年9月3日在12:23

@TLP,重复按Ctrl + r

–akostadinov
2014年10月3日在21:54

#4 楼

要完成有关我应该在Trusty 14.04下创建的~/.inputrc的lesmana答案,请在~/.bashrc中验证/添加(我的~/.bashrc中已经存在第一行):

shopt -s histappend  
PROMPT_COMMAND='history -a'  


它已经在这里用法语解释。

评论


该命令基本上指示bash立即将命令附加到历史文件,而不是等待会话结束。如果您有许多开放的终端机,并且不想丢失一个历史记录,但是如果没有必要,它很有用。 digitalocean.com/community/tutorials/…

– Shital Shah
16年4月4日,0:30

#5 楼

也许您可能想尝试https://github.com/dvorka/hstr,它提供了对Bash历史记录的简单和多行简单过滤,该过滤基于度量(命令的频率,时间和长度很重要)-您可以使用箭头键轻松浏览历史记录:



可以轻松绑定到Ctrl-r和/或Ctrl-s

#6 楼

以下解决方案结合并扩展了上述一些方法:
将以下行添加到~/.bash_aliases文件中(无需~/.inputrc)以实现以下行为:


通过按CTRL + UP和CTRL + DOWN在历史记录中向上/向下移动(仅具有相同前缀的条目)。这可以与仅通过UP和DOWN在整个历史记录中上/下移动的标准功能共存。
通过按CTRL + RIGHT和CTRL + LEFT

bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'


重新登录到外壳程序(或运行source ./bash_aliases)以应用更改。

评论


嗨,您知道我在哪里可以找到有关如何创建更复杂的键盘快捷键的信息吗?也许这个符号叫做“等等”?

– Ekanshdeep Gupta
20年5月11日上午10:30

相关术语是“键码”或“扫描码”(我不是专家)。但是,务实的解决方案是:运行showkey -a会为您提供有用的输出,例如,“ ^ [[1; 5A”表示“ \ e [1; 5A””,也就是说,前导的“ ^ [”似乎是指“ \ e”。

–user27164
20年5月11日在18:26

#7 楼

有一个类似于上述@lesmana的替代方法,但是您不必创建新的.inputrc文件。

相反,如果您具有sudo权限,则可以在/ etc /中启用它。 inputrc文件。此文件中有各种键盘设置,包括历史记录搜索功能(至少适用于18.04)。 / etc / inputrc的摘录是:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward


使用sudo文件编辑器(例如$ sudo vim)取消注释底部的两行,然后一个新的终端会话将具有历史记录搜索功能(适用于所有用户)。这样,您不必担心创建〜/ .inputrc文件,也不必添加注释中提到的@Tulio Casagrande的$include语句来保留ctrl-arrow输入。