在终端中从 fzf 获取输出而不执行它

Joe*_*Joe 7 bash terminal fzf

fzf 摇滚!我想用它来搜索 bash 历史记录。找到匹配项后,我希望将它放在命令行上,但执行,以便我可以进一步编辑它。(所有这些都在源 bash 函数或脚本中,因此它可以访问我的历史记录。)

我几乎可以正常工作,但不完全。

这将选择命令,但立即运行它:

eval $(history | "$HOME/bin/fzf" +s | sed 's/ *[0-9]* *//')
Run Code Online (Sandbox Code Playgroud)

这会将它放入我的剪贴板,但是当我粘贴它时,它仍然以空白和换行符结尾,因此它会立即执行。

history | "$HOME/bin/fzf" +s | sed 's/ *[0-9]* *//' | xclip -se c
Run Code Online (Sandbox Code Playgroud)

我还尝试了几种变体,包括

history | "$HOME/bin/fzf" +s | sed -e 's/ *[0-9]* *//' -e 's/$//' | xclip -se c
Run Code Online (Sandbox Code Playgroud)

结果相同。

这确实有效,但我仍然必须将其放入剪贴板,然后手动粘贴。

history | "$HOME/bin/fzf" +s | sed -re 's/ *[0-9]* *//' | awk '{printf "%s", $0}' | xclip -se c
Run Code Online (Sandbox Code Playgroud)

如何一步完成 - 无需手动粘贴?

我以为只是离开 xclip 就可以了,但它不起作用。

sud*_*id4 0

在我看来,junegunn 已经为你解决了这个问题。在这个文件中,他将 bash ctrl-r 替换为您想要的功能。由于行fzf-file-widget输出,我在获取该文件时确实遇到了一个小问题sh: ``fzf-file-widget': not a valid identifier,但是在更改fzf_file_widget它之后效果很好。