【发布时间】:2017-12-10 00:24:36
【问题描述】:
fzf 摇滚!我想用它来搜索 bash 历史记录。找到匹配项后,我希望将其放在命令行上,但 not 已执行,因此我可以进一步编辑它。 (所有这些都在一个有源的 bash 函数或脚本中,因此它可以访问我的历史记录。)
我几乎可以使用它,但不完全。
这会选择命令,但会立即运行它:
eval $(history | "$HOME/bin/fzf" +s | sed 's/ *[0-9]* *//')
这会将它放入我的剪贴板,但是当我粘贴它时,它仍然以空白和换行符结尾,因此它会立即执行。
history | "$HOME/bin/fzf" +s | sed 's/ *[0-9]* *//' | xclip -se c
我还尝试了几种变体,包括
history | "$HOME/bin/fzf" +s | sed -e 's/ *[0-9]* *//' -e 's/$//' | xclip -se c
结果相同。
这确实有效,但我还是要把它放在剪贴板中,然后手动粘贴。
history | "$HOME/bin/fzf" +s | sed -re 's/ *[0-9]* *//' | awk '{printf "%s", $0}' | xclip -se c
如何一步完成 - 无需手动粘贴?
我以为只要不使用 xclip 就可以了,但它不起作用。
【问题讨论】:
-
有什么理由不使用反向搜索(Ctrl 和 r)?
-
我从来不习惯使用它。我刚试过。 fzf 好很多。它让我可以一次看到许多替代方案,并提供更多搜索选项,而不仅仅是一次。而且,我没有看到编辑我发现的内容的方法。当我按 Enter 时,它只是运行未修改的命令。此外,如果我能弄清楚这一点,它可能会为自动获取命令行上的内容以供我使用提供其他可能性。
-
您可以多次按 Ctrl-r 来浏览与输入文本相关的不同选项。然后您可以按 Escape 以获取命令行上的命令进行编辑。我建议在花时间尝试设计自己的选项之前花时间研究已经可用的选项
-
另外,如果您想在屏幕上显示与搜索相关的所有不同选项,您可以简单地使用历史记录并通过 grep 管道进行搜索。然后您可以使用 !
来执行命令 -
@RamanSailopal 这些都是很好的建议。除了使用向上箭头返回之外,我没有对历史做太多事情。偶尔,我尝试一个!后面跟着一些字符,但这很危险,因为它会在您查看它是否选择您认为的内容之前运行它。尽管如此,fzf 似乎很受欢迎,所以我不是唯一一个从中发现价值的人。此外,这些工具需要几行代码才能实现。我不是在编写自己的文本编辑器或新版本的 mencoder。