Skip to content

Prior Art

Patrick edited this page Jan 29, 2021 · 15 revisions

Jethrokuan/fzf

[jethrokuan/fzf][] is another fzf plugin that provides similar features and is prevalent in the fish community (470+ stargazers and 30 contributors, including me). In fact, I referenced it when creating this plugin—thank you Jethro!

So why another fzf plugin? While contributing to jethrokuan/fzf, I was discouraged by the complexity and inefficiency of the code that resulted from feature cruft (e.g. it provides multiple overlapping ways to action on files: find, cd, and open) and poor design decisions (e.g. Tmux support was implemented using a variable command). Moreover, Jethro has lost interest in his plugin (he later confirmed to me that he stopped using fish). Wanting a sharper tool and to give back to the community, I decided to write my own plugin.

After much work, fzf.fish now implements most of the same features but is faster, easier to maintain, and more [Unix-y][unix philosophy]. I also added new features: using fzf to search git status, git log, and shell variables. However, I chose not to implement Tmux support, because users can easily add support externally themselves; and tab completion, because even jethrokuan/fzf's implementation of it is buggy as evidenced by the many [issues reported about it][].

TLDR: choose fzf.fish over [jethrokuan/fzf][] if you want

  • faster, more efficient, code
  • code that is easier to debug if you encounter issues
  • a tool built on [Unix philosophy][]
  • a plugin that is more likely to attract future contributors because it is more maintainable
  • a plugin that will be more frequently updated by its author (Jethro no longer uses fish)
  • features for searching git status, git log, and shell variables

and you don't mind

  • having to integrate fzf with Tmux yourself, which is easy to do
  • not having buggy fzf tab completion

Fzf's out-of-the-box Fish extension

Fzf optionally comes with its own [Fish extension][]. It is substantial but fzf.fish has these advantages over it:

  • features for searching git status, git log, and shell variables
  • timestamps when searching command history
  • colorized results when searching for files
  • previews when searching for files
  • configurable key bindings
  • [autoloaded][autoloads] functions for faster shell startup
  • easier to read, maintain, and contribute to
  • better maintained

Clone this wiki locally