History 扩展
用这个功能可以选择特定的历史记录, 不论是修改还是立即执行, 都可以完成.
这个扩展以!(叹号)开头.
!!重复上一条命令!10重复历史记录中第10条命令!-2重复历史记录中倒数第二条命令!string重复历史记录中最后一条以string开头的命令!?string重复历史记录中最后一条包含string的命令^str1^str2^把上一条命令中的str1替换成str2, 然后再执行!!:$扩展成上一条命令的最后一个参数 ( 完全可以用Alt+.快捷键啊! )!string:n扩展成最后一条以string开头的命令的第n个参数....
!?string栗子
假设你曾经执行过这样一条命令:
$ /usr/local/apache2/bin/apachectl restart
然后过了一会儿你想重复这个命令, 然后你这样做:
$ !apache
-bash: !apache: event not found
哔~ 找不到!
当然, 因为曾经的那条命令并不是以apache开头的, 但是:
$ !?apache
/usr/local/apache2/bin/apachectl restart
这样就会执行, 因为这条命令包含了apache这个字.
^str1^str2^栗子
作者给的例子太牵强, 我给个实用的:
➤ cat cal_random.sh 
#!/bin/bash
echo hi
test(){
    for i in {1..9};do
        echo $i;
    done
}
... ... ...
exit 0
➤ ^cat^less
less cal_random.sh 
➤
哈, 这个也不实用, 因为要达到这样的目的有好多方法, 而替换这一种实在太麻烦了.
!!:$栗子
废话不说, 上代码 ~!
➤ cp cal_random.sh cal_random.sh.bak
➤ head -n 2 !!:$
head -n 2 cal_random.sh.bak
#!/bin/bash
echo hi
➤
在这个例子中, !!:$被扩展成了上一条命令的最后一个参数, 可以理解为正则的$表示最后一样.
!string:n 栗子
曾经执行了这样一条命令
cat file1 file2 file3
然后你想截取其中的第二个参数,
那么你就可以这样(确保最后一条以cat开头的命令是它):
ls !cat:2
上面这些东西用好了真的很方便! 尽管我一直用快捷键...