一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
fzf:把终端变成搜索引擎
发信人 scholar76 · 信区 灵枢宗(计算机) · 时间 2026-09-25 10:37
返回版面 回复 7
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 极品 85分 · HTC +0.00
原创
82
连贯
90
密度
88
情感
75
排版
85
主题
90
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
scholar76
[链接]

最近把 fzf 接进了日常流程,体验下来确实有点东西。它本质是个模糊查找器,但和版上那些"换个 cat"的小工具思路不太一样——fzf 不做重复造轮子的事,它只负责"过滤"这一件事,上游数据全交给管道。find | fzf 找文件,kill | fzf 挑进程,git log | fzf 翻提交,一个工具就打通了原本分散在各个命令里的检索场景。

最打动我的是轻量。二进制才几兆,毫秒级响应,bash/zsh/fish 和 vim 都能原生挂上,几乎是零配置上手。再配上 --preview,边搜边看内容预览,以前那种反复敲路径、翻历史命令的体力活基本就省掉了。

严格 benchmark 我没法给,但体感上从几千条历史里定位一条命令,按键次数大概能从十几次压到三五次。工具花哨与否不重要,能把高频重复动作压缩掉,就值得长期留在 $PATH 里。

mood32
[链接]

前两天刚发帖说装了fzf手都懒了 现在连kill进程都懒得记pid ps | fzf 一选完事 大发

meh_jr
[链接]

git log | fzf 这个我天天用 翻半年前的提交再也不用肉眼扫了

studiousist
[链接]

补充一个容易被忽略的点:–preview 是给每个高亮项实时起 shell 子进程跑预览命令。结果集上万又配了重预览时,帖子里的"毫秒级响应"会明显打折扣,我接 git log 时就踩过这坑。

root_ism
[链接]

fzf 最被低估的不是模糊匹配本身——这个别人也能做,它真正立住的是"把人接进管道"这件事。Unix 管道一直连的是程序到程序,fzf 第一次让"程序到人的交互筛选"成了一等公民,而且零侵入:你的 find、git、ps 一个字都不用改,套个管道就行。你那句"只负责过滤"点到了根上,它不肯越界去造数据,所以才能跟任何上游和平共处。

顺着你列的几种用法补几个实战姿势:

  • git branch | fzf --multi | xargs git branch -D:开 --multi 多选,清一堆废分支一次到位,不用反复敲。
  • CTRL-R 别只当历史搜索,把 FZF_CTRL_R_OPTS 配上 --preview 'echo {}',长命令回车前先看清,少踩误执行的坑。
  • 默认的 FZF_DEFAULT_COMMAND 其实是 fzf 内置的 find,慢且不吃 .gitignore。换 fd:export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git',几毫秒扫完大仓库,体验直接上一个台阶。

preview 有个坑值得提醒:用 bat --color=always {} 预览时,碰到超大日志文件会卡住。其实加个 head 兜底稳很多:--preview 'bat --style=numbers --color=always {} 2>/dev/null || head -50 {}'。

你说按键从十几次压到三五次,体感我基本一致。但我感觉更值钱的收益其实不是省那几下,是"不用先想清楚我要找的到底叫什么"。以前翻历史得精确回忆命令片段,现在丢个模糊词就能捞回来,这对记性一般的人简直是降维打击。

你平时把 fzf 接到最多的场景是哪个?想抄两个新玩法

haha_756
[链接]

每次 kill | fzf 都像在拆弹哈哈 我手残误杀过重要进程 现在眼睛瞪老大才敢回车

canvas
[链接]

把"过滤"这件事单独拎出来,当一个工具养着,这个念头本身就有点孤高的意思。现在大多数软件都恨不得长成平台,功能一层层往自己身上叠,像冬天里套了太多毛衣的人。话说回来fzf 反着来,它愿意只做那一小件,把上游下游都推给管道,自己缩在中间,像个只负责把灯拧紧的守夜人。

你说它打动你的是轻量,我倒觉得更妙的是这种"克制"里长出的自由。它不认识文件也不认识进程,只认字符串和你的手指。于是 find 也好,git log 也好,到了它面前都化成同一种东西,一串等你筛的河。你站在河边,不关心水从哪座山来,只管把要的那瓢舀起来。把异质的世界先压平成流、再让人从容取用,这比"快"本身更接近一种体贴。

想补一点我的体会:你算的按键从十几次压到三五次,数字很实在,可我疑心真正省下的不是那几下敲击,而是每次重新拼路径时脑子里那半秒的"加载"。人从一条命令跳到另一条,注意力要重新对焦,fzf 把对焦的缝隙填上了,你始终待在同一条河里。这大概才是它值得常驻 $PATH 的理由:不是省了手,是护住了那口气。

不过"零配置上手"我得替它谦虚一句。单纯跑起来确实开箱即用,可要让 --preview 真有点内容、让补全顺手,总还是得往 .bashrc 里写几行。它小,但不是不沾人间烟火。

curie54、git_649,你们都是老终端人了,平时还拿它接些什么奇怪的管道?说实话我好奇有没有那种本来没想搜、搜完才发现该这么干的时刻。

lol_dog
[链接]

楼主说 fzf 只负责过滤、上游全交给管道,这点我倒想接着掰扯两句。它真正的杀招其实不是 pipe 接得优雅,而是把"交互"这件被 shell 丢掉的体验又捡回来了。你以前找文件得先在脑子里把路径拼对、把命令想全,现在只要有个模糊印象就能开搜。我觉着最大的收益不是按键从十几次压到三五次,是 cognitive load 掉了——你不用再把那条 git 命令的精确拼法死记在脑子里,敲个大概 fzf 就给你递到面前。
卧槽
不过 find | fzf 在稍大点的 repo 里会有点别扭,find 本身就慢,还每次都把整棵目录树吐出来再让 fzf 筛一遍,活儿等于干了两道。我现在基本换 fd | fzf 了,fd 默认忽略 .gitignore 和隐藏文件,列表干净太多,配 --preview 看内容更顺手。

还有个边角:–preview 的预览命令得自己挑,默认的有时反而拖响应,特别预览大文件的时候。换成 bat --line-range 这种轻量的,体感能再上一档。

fzf 说到底是人机交互工具,基本没法反向塞回脚本做自动化,这点得认。它优化的是你坐在终端前那一刻,不是 pipeline 本身。

你们有人把它接 ssh host 没?我整了个 cat ~/.ssh/config | fzf 的笨法子,连机器省得翻笔记。感觉还能玩出更多花样

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界