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:
M-x fzf
M-x fzf-directory
M-x fzf-find-file
M-x fzf-find-file-in-dir
M-x fzf-recentf
M-x fzf-git
M-x fzf-git-files
M-x fzf-git-grep
M-x fzf-hg
M-x fzf-projectile
Note:
fzf-grep-*-with-narrowing
functions launch an interactivefzf/grep-command
instead of using fuzzy filtering. See the fzf advanced documentation for more details.
M-x fzf-grep
M-x fzf-grep-dwim
M-x fzf-grep-in-dir
M-x fzf-grep-with-narrowing
M-x fzf-grep-dwim-with-narrowing
M-x fzf-grep-in-dir-with-narrowing
M-x fzf-switch-buffer
fzf.el
exposes functions to let you interface with fzf
however you'd like:
fzf-with-command (command action &optional directory as-filter initq)
: Runfzf
on the output of a shell command.command
: The shell command whose output is passed tofzf
.action
: A function that handles the result offzf
(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 executefzf
in.as-filter
: If non-nil, usecommand
as the filter instead offzf
's fuzzy filtering. Seefzf-grep-*-with-narrowing
functions for example usages.initq
: Ifas-filter
is non-nil,initq
will be used as the value for the--query
option. Ifas-filter
is 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)))
GPL3