优秀的写法,肖恩! 我本想把这个放在评论里,但我害羞了几分声誉。 :-)
还有一个相关的、有用的技术,就是可以在改字的同时运行以前的命令。比如说你打错了目录名,或者想改文件名:
$ echo my name is bob my name is bob $ ^bob^jordan echo my name is jordan my name is jordan
注意,在命令运行之前,命令会被展开、替换和输出,所以如果运行错误的命令,你可以看到bash以为它在做什么。
由于使用Ctrl-r在历史记录中导航很麻烦,你可以考虑hh 。 https://github.com/dvorka/hstr
这使得导航更加简单、直接和高效–包括运行命令。
如果你的shell配置为使用vi
键绑定(set -o vi
或在set editing-mode vi
中有$HOME/.inputrc
),那么你用<Esc>/some-command<Return>
进行搜索,并点击n
(下一个)或Shift-n
(上一个)来循环浏览命令行历史。
我喜欢HSTR,但有时似乎无法安装它。所以我用 fzf 写了一个别名,模仿它的行为(hx
,代表 “历史执行")
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history
: 好吧,得到历史 sed
: 从列表中删除数字列(POSIX) fzf
: 这里是神奇的,允许你交互式地模糊搜索列表,或者用C-J
和C-K
移动,然后用Enter
执行命令。--height
: 设置显示的行数。--tac
: 恢复列表 (对于历史记录来说更合理) --tiebreak=index
: 当 fzf 更新结果时,保持历史记录顺序。