重击历史记录搜索,部分+向上箭头


145

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

追溯到那时,我有一个使用debian系统的用户,并且一个朋友为我设置了便捷的历史记录搜索功能(我相信当时我使用的是tcsh),在那里我可以键入上一个命令的开头,按向上箭头,并根据部分字符串进行搜索。

例如,如果我的历史是:

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

然后输入.,然后按向上箭头,它会向我显示:./script.pl arg1。再按一次,它将显示./script.pl,等等。

非常像它将grep在.bash_history上执行。有没有办法获得此功能?



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

Answers:


196

将以下行放入您的~/.inputrc

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

以开头的行#是注释。我不记得什么是落后的,什么是前进的。尝试一下。也许您必须前后切换。


一点背景资料:

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

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

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

  1. cat终端开始(只是cat,没有其他参数)。
  2. 在键盘上键入按键,您会看到诸如^[[A向上箭头和^[[B向下箭头之类的信息。
  3. 替换^[\e

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

谁能告诉我我该如何实现同样的目标
Hitesh Kumar

@lesmana,我会给予加分单独猫部分
麦克d

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

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

30

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

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

我认为这是最好的方法。通常,如果您使用的是厨师,人偶等配置管理系统,

而且系统配置仍然保持不变!


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

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

.inputrc对我来说很棒,但是在我加载之后不起作用screen。奇怪的是,其他.inputrc快捷方式有效,但这些无效。因此,我现在同时使用两种解决方案。
Orwellophile

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

13

Ctrl + R将为您提供这种功能。开始输入部分命令,它将附带旧命令,您可以使用向上和向下箭头进行导航。更多信息:http : //www.nuxified.org/blog/ctrl_r_in_the_bash_shell


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

5
@TLP,重复命中Ctrl+r
akostadinov 2014年

4

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

shopt -s histappend  
PROMPT_COMMAND='history -a'  

https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique中已经用法语对此进行了解释。


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


0

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

  1. 通过按CTRL + UP和CTRL + DOWN在历史记录中向上/向下移动(仅具有相同前缀的条目)。这可以与仅通过UP和DOWN在整个历史记录中向上/向下移动的标准功能共存
  2. 通过按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'

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

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.