An Emacs front-end for fzf.
fzf.el is available on MELPA.
Below is an illustrative
use-package configuration of
fzf.el showing all
available customizations and their default values.
Note: This package does not set default keybindings.
(use-package fzf :bind ;; Don't forget to set keybinds! :config (setq fzf/args "-x --color bw --print-query --margin=1,0 --no-hscroll" fzf/executable "fzf" fzf/git-grep-args "-i --line-number %s" ;; command used for `fzf-grep-*` functions ;; example usage for ripgrep: ;; fzf/grep-command "rg --no-heading -nH" fzf/grep-command "grep -nrH" ;; If nil, the fzf buffer will appear at the top of the window fzf/position-bottom t fzf/window-height 15))
fzf.el comes with a number of useful commands:
Searching for files:
fzf-grep-*-with-narrowingfunctions launch an interactive
fzf/grep-commandinstead of using fuzzy filtering. See the fzf advanced documentation for more details.
Using input from Emacs:
define custom functions
fzf.el exposes functions to let you interface with
fzf however you'd like:
fzf-with-command (command action &optional directory as-filter initq): Run
fzfon the output of a shell command.
command: The shell command whose output is passed to
action: A function that handles the result of
fzf(e.g. open a file, switch to a buffer, etc.). This package ships with two default actions that can handle opening a file and opening a file at a specific line.
directory: Directory to execute
as-filter: If non-nil, use
commandas the filter instead of
fzf's fuzzy filtering. See
fzf-grep-*-with-narrowingfunctions for example usages.
initqwill be used as the value for the
as-filteris nil, this does nothing.
fzf-with-entries (entries action &optional directory): run fzf, passing in an elisp list and running the function action with the user's selected results.
Using these functions, it's easy to define your own commands that use fzf:
(defun fzf-example () (fzf-with-entries (list "a" "b" "c") 'print))
Or more exciting:
(defun fzf-find-file (&optional directory) (interactive) (let ((d (fzf/resolve-directory directory))) (fzf (lambda (x) (let ((f (expand-file-name x d))) (when (file-exists-p f) (find-file f)))) d)))