fzf 实战指南:模糊搜索让你的命令行效率翻倍
fzf 实战指南:模糊搜索让你的命令行效率翻…
fzf 实战指南:模糊搜索让你的命令行效率翻倍
如果你每天在终端里花的时间超过两小时,那你大概率遇到过这个痛点:记不住文件名、找不到历史命令、目录跳来跳去手指都酸了。今天IT大叔给你安利一个神器——fzf,一个通用的命令行模糊搜索工具。用上它之后,你会怀疑之前那些年自己是怎么活过来的。
fzf 到底是什么?
简单说,fzf(fuzzy finder)是一个交互式模糊搜索过滤器。你给它一堆文本行,它弹出一个漂亮的终端界面让你实时筛选——输入几个字母,匹配项立刻过滤出来,按回车就输出结果。
但它真正厉害的地方不在”搜索”,而在它可以是任何命令管道中间的一环。你想模糊搜索文件、进程、git分支、docker容器、ssh主机……都可以把 fzf 嵌进去。而且它是纯 Go 写的,零依赖,启动速度毫秒级,完全不拖后腿。
安装和三个”开箱即用”的功能
安装一行搞定:
# Ubuntu/Debian
sudo apt install fzf
# macOS
brew install fzf
# 装完记得跑这个,开启快捷键绑定
$(brew --prefix)/opt/fzf/install # macOS
# 或者 Linux 下直接:
/usr/share/doc/fzf/examples/key-bindings.bash
装好之后,fzf 立刻给你三样东西:
- Ctrl+T:模糊搜索当前目录及子目录下的所有文件,选中后路径直接贴到命令行上
- Ctrl+R:模糊搜索你的 Shell 历史命令——从此告别按上箭头按到手酸
- Alt+C:模糊搜索目录,直接
cd过去
就这三个快捷键,已经值回票价。但别急,好戏在后头。
实战:把 fzf 塞进你的工作流
1. 秒杀 git 分支切换
你是不是也经常 git branch 看完列表,再手敲分支名?用 fzf 一行脚本搞定:
# 加进你的 .bashrc 或 .zshrc
alias gco='git branch --all | grep -v HEAD | fzf --preview "git log --oneline --graph --color=always {}" | sed "s/.* //" | xargs git checkout'
敲 gco,弹出分支列表,输入几个字母定位目标分支,右侧预览窗实时显示该分支的提交历史。回车直接切换。
2. 杀死进程不再靠猜
# 模糊搜索进程名,选中后 kill
alias fkill='ps aux | fzf --header "选一个进程干掉" --preview "echo {}" | awk "{print \$2}" | xargs kill -9'
比 ps aux | grep xxx 再手动复制 PID 快了十倍不止。
3. SSH 主机瞬间跳转
管十几台服务器的人必备:
alias fssh='ssh $(awk "/^Host /{print \$2}" ~/.ssh/config | fzf --prompt="选一台机器 > ")'
自动从你的 ~/.ssh/config 里提取所有 Host 别名,fzf 选哪个连哪个。
4. Docker 容器秒进
alias dex='docker exec -it $(docker ps --format "{{.Names}}" | fzf --prompt="进哪个容器 > ") /bin/sh'
跑着十几个容器的 Homelab 玩家,这条命令能救你的手指。
进阶:用 –preview 把 fzf 变成文件浏览器
fzf 的 --preview 参数允许你在右侧预览窗里执行任意命令。配合 bat(带语法高亮的 cat 替代品),直接变成一个迷你文件管理器:
export FZF_DEFAULT_OPTS="--height 60% --layout=reverse --border --preview 'bat --style=numbers --color=always --line-range :500 {}'"
# 如果没装 bat,用 cat 也能凑合:
export FZF_DEFAULT_OPTS="--height 60% --layout=reverse --border --preview 'cat {}'"
设好环境变量之后,所有 fzf 调用都会自动带上预览窗。按 Ctrl+T 搜文件时,右边实时显示文件内容,选文件就像翻书一样直观。
IT大叔的 fzf 核心配置
我自己的 ~/.bashrc 里常年挂着这几行,拿走直接抄:
# === fzf 配置 ===
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'
export FZF_DEFAULT_OPTS="
--height 50%
--layout=reverse
--border
--color=bg+:#363a4f,bg:#24273a,spinner:#f4dbd6,hl:#ed8796
--color=fg:#cad3f5,header:#ed8796,info:#c6a0f6,pointer:#f4dbd6
--color=marker:#f4dbd6,fg+:#cad3f5,prompt:#c6a0f6,hl+:#ed8796
"
这里用 fd 替代默认的 find 作为文件搜索后端——fd 速度更快,且自动忽略 .gitignore 里的文件,搜出来的结果干净得多。配色我用了 Catppuccin 风格,跟我的终端主题统一,看着舒服。
总结
fzf 不是一个”看看就好”的炫技工具,而是真正能每天帮你省几十次键盘敲击的生产力利器。核心思路就一句话:任何需要从列表里选一个东西的操作,都用 fzf 套一层。文件、进程、分支、容器、主机、命令历史……万物皆可 fzf。
装完花五分钟配好几条 alias,之后每次用都是在省时间。这就是 IT大叔一直信奉的原则:磨刀不误砍柴工,好工具值得花时间配置。
有问题欢迎在评论区交流。下次想看我写哪个命令行神器?ripgrep、delta 还是 atuin?留言告诉我。
