在linux/bash中,反向搜索(Ctrl+R)只搜索历史
是否有一个包,让我可以(像反向搜索):
a ) save a command that I like
b ) search the saved list of commands - much like reverse-i-search ?
别名并将其添加到.bash_profile的问题是它们是不可修改的。例如,我经常使用'git rebase -i HEAD~NUM',我只能别名某些NUM,而使用反向搜索我可以检索命令,编辑它并执行它。
谢谢。
你可以:
-
只需将它们添加到您的历史记录中并按Ctrl+ r搜索它们
如果你一直在避免,因为你发现行从历史记录中消失,这是可配置的。
-
添加为别名,并使用
bind '"C-k": alias-expand-line'
。这将允许你输入例如myalias
,按Ctrl+K,它将展开成完整的命令,然后你可以修改。 -
编写接受参数的函数,如
rebase() { git rebase -i HEAD~$1; }
,因此您不需要修改它。你可以直接运行rebase 4
保存命令
这是我围绕save.sh
的工作:
#!/bin/bash
echo $1
if [ -z $1 ] && [ -z $2 ] ; then
echo 'not enough param'
else
echo 'alias' $2'="'$1'"' >> ~/.bash_aliases;
echo 'done';
fi
这将在bash_aliases
文件中存储一个新别名,以便以后调用它。把它放在你想要的任何地方,记住把它chmod为可执行文件。
用法:
$ ./save.sh 'echo nice' ncm
# this will refresh your bash alias so you dont have
$ source ~/.bashrc to restart terminal or open new one.
$ ncm
nice
历史扩张此外,您可以在历史记录中搜索最后一个命令,并执行它:
!! #to run last command again
!!:p #to print last command
或!prefix
运行最后一个匹配前缀的命令,例如:
~$ !echo
echo nice #my last echo command
查看更多文档:历史扩展
我有一个简单的方案,允许从shell提示符搜索历史记录,对于我目前感兴趣的历史记录中的任何术语,该方案返回类似grep
的结果。没有什么神奇的,只是设置你想要在历史记录中维护的条目的数量,以及你想要历史记录的行为方式(例如ignoreboth:erasedups
不向历史记录列表中添加以空格开头的命令,并忽略重复的条目)。包含erasedups
以清除因使用或移动可能包含重复的其他历史文件的部分而导致的任何重复)
你可以简单地从你的.bashrc
(或类似的启动文件,无论你使用什么shell)中export
历史控制值,例如,在历史记录中保持一个整洁的20K命令列表,你可以这样做:
export HISTFILESIZE=20000
export HISTSIZE=20000
export HISTCONTROL=ignoreboth:erasedups
(您还有HISTIGNORE
环境变量,它允许您更细粒度地控制什么可以或不可以添加到您的历史文件中。)
有了一个整洁的历史文件,您可以方便地使用历史文件中包含的所有值,在.bashrc
(或适当的启动文件)中使用一个简短的函数,然后在alias
中调用该函数。例如:
showhist() {
[ -z "$1" ] && { printf "usage: hist <search term>n"; return 1; }
history | grep "$1"
return 0
}
alias hist='showhist'
showhist
函数需要一个single_search项来搜索您的历史条目。我不喜欢键入,所以我进一步将alias
函数简化为hist
。如果您没有提供任何输入,则会打印一个简短的usage:提示,提示您所期望的内容。
因此,当我想要调用一个我有一段时间没有运行的命令以及它所使用的任何参数时,(比如在Arch上安装grub2
),我只需发出命令:
# hist grub
99 pacman -S grub
100 grub-install --target=i386-pc /dev/sda
101 grub-mkconfig -o /boot/grub/grub.cfg
211 vi /boot/grub/grub.cfg
<snip>
所需命令的简单高亮显示和鼠标中间粘贴在命令行中,我已经检索了不常用的命令,只需在提示符下输入hist grub
…做。
如果你正在寻找类似的东西,试试这个方法。根据您使用命令行的程度,构建完整的命令集需要花费一些时间,但是无论如何,如果您有当前的历史文件,则此设置将立即有用。