fzf模糊选择工具

前言

fzf,一个能对输入的内容显示交互式菜单,
使用模糊匹配进行选择的工具.
可以实现许多种功能.
就像是命令行版本的emacs插件console.

针对的应用场景

对于

  1. 备选项的值可以使用命令获取
  2. 输入需要从备选项中选择
  3. 不知道有哪些选项(比如安装软件,PID)
  4. 记不清选项的完整名字(比如git分支)
  5. 不想输入完整名字(比如cd)

这样模式的操作都可以辅助提升速度,
可以说是命令行里的万金油了.
只不过由于是一口气不加过滤全部拿来可选项.
CPU运算量可能会稍稍加大.
macbook甚至可能会烫.

fzf的主要功能

  1. 匹配
  2. 交互式外观

模糊匹配能力

  • 多关键词
  • 智能大小写
  • 模糊匹配(一个词分拆成多个部分来支配)
  • 手动精确匹配

外观的定制

  • 高度,宽度,位置
  • 显示条目数
  • 预览动作

可实现的功能

选择文件

fd + fzf
fd搜索当前目录下的全部文件,
传给fzf,
模糊选出最想使用的结果

切换目录

但有 z 可以用了,就不再用了

模糊匹配的历史

history + fzf
不需要再对历史进行严格的匹配,
忘记一部分也可以匹配了.

搭配kill

ps aux + fzf
进一步增强了kill的使用能力

切换branch

git branch -a + fzf
列出能切换的分支名,
选择好.
使用类似 git checkout $(git branch -a | fzf) 的形式即切换

直接检索文件内容

rg + fzf
对于个人笔记存放的目录,
大小有限的情况下,
可以使用fzf来增强

浏览器

使用一定的接口,
检索浏览器的历史和书签.
一定程度上类似alfread的workflow的某些功能.
但alfread的不知道是否支持模糊匹配.

各种安装

apt安装,homebrew安装等.
由于个人习惯安装软件先看其自身介绍,
而不是接受安利,直接安装.
因此暂时不用.

作为i3的启动器

获取 dmenu 的内容然后选择.
不过个人喜欢有UI但不能模糊匹配的rofi.
软件太多记不清名字的不多.

安装

pacman可安装.

自动补全的支持情况

对于一些热门的命令,输入命令后按下 Tab 就能直接调用fzf了.
对于稍微不热门的命令,需要输入 ** 占位符,然后使用 Tab 调用fzf.
对于官方尚未支持的命令,需要自定义函数并使用原始的管道等命令组合.

外观的定制

TODO 一些默认值

参考

  1. 官方介绍的社区,想你不曾想