Skip to main content

Preview Window Basics

The preview window is one of fzf's most powerful features. It shows a live preview of the currently highlighted item — file contents, git diffs, directory trees — updated in real time as you navigate.

Core Idea

--preview 'COMMAND {}' runs a shell command for every focused item. The {} is replaced with the current item. The command's output appears in a split panel.

Basic Preview

# Preview file contents as you navigate
ls | fzf --preview 'cat {}'

# With syntax highlighting (bat)
ls | fzf --preview 'bat --color=always {}'

# Directory preview with tree
ls -d */ | fzf --preview 'tree -C {} | head -100'

--preview-window — Control the Panel

# Position: right | left | up | down
fzf --preview 'cat {}' --preview-window=right
fzf --preview 'cat {}' --preview-window=down
fzf --preview 'cat {}' --preview-window=left

# Size: percentage or absolute lines
fzf --preview 'cat {}' --preview-window=right:60%
fzf --preview 'cat {}' --preview-window=down:20
fzf --preview 'cat {}' --preview-window=right:50%:border-left

# Start hidden (toggle with key)
fzf --preview 'cat {}' --preview-window=right:hidden

Preview Window Options

# Multiple options separated by colon
--preview-window=right:60%:border-left:wrap:~3
# ^pos ^size ^border ^wrap ^header lines pinned
OptionEffect
right/left/up/downPosition of preview panel
60% or 30Width/height (% or lines)
hiddenStart hidden
wrapWrap long lines
nofollowDon't follow the cursor
noscrollDisable scroll in preview
border-left/right/top/bottom/noneBorder side
~NPin first N lines as header
+NScroll preview to line N

Using bat for Syntax Highlighting

# Full bat preview
ls | fzf --preview 'bat --color=always --style=numbers,changes,header {}'

# With line range limit (performance)
ls | fzf --preview 'bat --color=always --style=numbers --line-range=:300 {}'

# Highlight a specific line in preview
ls | fzf --preview 'bat --color=always --style=numbers --highlight-line=10 {}'

Using cat with Fallback

# bat if available, fall back to cat
ls | fzf --preview '(bat --color=always {} 2>/dev/null || cat {}) 2>/dev/null'

Directory Preview with tree or eza

# Directory tree
find . -type d | fzf --preview 'tree -C -L 3 {} | head -100'

# Modern eza (if installed)
find . -type d | fzf --preview 'eza --tree --color=always --icons {} | head -100'

# File or dir — handle both
find . | fzf --preview '
if [ -d {} ]; then
tree -C -L 2 {}
else
bat --color=always --style=numbers {}
fi
'

Scrolling the Preview

Key (default)Action
Shift+↑Scroll preview up
Shift+↓Scroll preview down
(custom) Ctrl+uHalf page up in preview
(custom) Ctrl+dHalf page down in preview

Add scroll bindings:

fzf --preview 'bat --color=always {}' \
--bind 'ctrl-u:preview-half-page-up' \
--bind 'ctrl-d:preview-half-page-down' \
--bind 'ctrl-f:preview-page-down' \
--bind 'ctrl-b:preview-page-up'

Toggling Preview

# CTRL-/ to show/hide
fzf --preview 'bat --color=always {}' \
--preview-window=right:hidden \
--bind 'ctrl-/:toggle-preview'

Scrolling to a Specific Line in Preview

# Jump to a line number embedded in the selection
# (useful when input contains "filename:lineno")
grep -rn "TODO" . | fzf --delimiter=: \
--preview 'bat --color=always --highlight-line={2} {1}' \
--preview-window '+{2}/2'
# +{2}/2 means: scroll preview to line {2}, center it

What's Next