如何让fzf的命令历史搜索无需按下CTRL-R,即可在每次新提示符出现时自动显示?
如何让fzf的命令历史搜索无需按下CTRL-R,即可在每次新提示符出现时自动显示?
嘿,这个需求挺实用的!要实现每次新提示符出现时自动弹出fzf的命令历史搜索框,不用手动按CTRL-R,咱们得从shell的配置文件入手,分bash和zsh两种常见情况来操作,具体看你用的哪个shell:
针对Bash用户
- 首先打开你的bash配置文件,用编辑器比如
nano ~/.bashrc或者vim ~/.bashrc都行 - 在文件里找到fzf相关的配置段,你应该能看到类似
bind '"\C-r": fzf-history-widget'的行——这就是绑定CTRL-R触发历史搜索的配置 - 接下来咱们要利用bash的
PROMPT_COMMAND变量,这个变量里的命令会在每次显示新提示符之前自动执行。在文件末尾添加一行:PROMPT_COMMAND='fzf-history-widget; '"$PROMPT_COMMAND" - 保存文件后,执行
source ~/.bashrc让配置立即生效。之后每次新提示符出现时,fzf的历史搜索框就会自动弹出来啦!
针对Zsh用户
- 打开zsh的配置文件
~/.zshrc - 找到fzf的绑定配置,通常是
bindkey '^R' fzf-history-widget这一行 - Zsh里是用
precmd函数来实现“提示符出现前执行命令”的逻辑,所以在文件里添加这个函数:precmd() { fzf-history-widget } - 保存文件后执行
source ~/.zshrc,配置就生效了,以后每次新提示符出来都会自动触发fzf历史搜索。
小提醒
- 如果你之前的
PROMPT_COMMAND(bash)或者precmd(zsh)已经有其他内容,千万别直接覆盖!比如bash里原来PROMPT_COMMAND是update_terminal_cwd,那就要改成PROMPT_COMMAND='fzf-history-widget; update_terminal_cwd',把fzf的命令追加进去就行 - 要是某一次你不想自动弹出搜索框,直接按ESC键就能关掉fzf的搜索框,然后正常输入命令就好啦
备注:内容来源于stack exchange,提问作者Oneechan69
相关产品推荐
相关产品推荐

