我在网上发现了一个很好的zsh命令,它使用fzf
来模糊搜索shell历史:
fh() {
eval $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed 's/ *[0-9]* *//')
}
但是,我不想使用eval
-ing命令,而是想将它放在提示符中,并在运行它之前进一步编辑它,类似于:
$ fh grep
(search happens)
$ grep -RI foo . <--- cursor
我试着用echo
替换eval
,这样更好,但没有给予我编辑的命令。在bash/zsh中有没有办法做到这一点?
Here是一个相关的线程,建议使用xvkbd
,但我希望有更简单的东西。
3条答案
按热度按时间ekqde3dh1#
您可以使用官方的shell集成。我使用zsh,所以我只是复制了提供的脚本并将其放入我的
~/.zshrc
中。这将为您提供您正在寻找的确切行为,例如返回命令并将结果放在输入行上,而不是在无法编辑的情况下运行命令。注意:它会覆盖ctrl+r的快捷键来进行历史搜索,而不是把它放在别名或类似的地方,所以也许不是你想要的。但是也许你可以构建一个脚本来从那里工作。
https://github.com/junegunn/fzf/blob/master/shell/key-bindings.zsh
kuuvgm7e2#
在zsh中,zsh行编辑器(ZLE)内置的
vared
将允许您编辑环境变量。编辑后,更新后的变量可用于执行命令:
在
vared
命令中,-p
设置提示符。-ac
选项将fzfresult
变量更改为数组,以便我们可以在下一步中执行它。我没有安装
fzf
,所以没有完全测试,但结果应该是这样的:vq8itlhq3#
我最终使用了这个:
即默默地打印,其次是向上箭头,这带来了编辑命令。很乐意听到,如果有一个更简单的方法。