Skip to main content

Layout and Display Options

Beyond height and border, fzf offers fine-grained control over how its interface is presented.

Header and Label

--header

Static informational text shown at the top of the list:

ls | fzf --header "Select a file to edit (Ctrl+/ for preview)"

# Multi-line header
ls | fzf --header $'Open: Enter\nDelete: Ctrl+D\n'

--header-lines

Use the first N lines of the input as a fixed header (useful for columnar data):

# Keep the ps column names frozen at the top
ps aux | fzf --header-lines=1

# Keep 2 header lines from a table file
cat report.tsv | fzf --header-lines=2

--border-label

Text inside the border:

ls | fzf --border=rounded --border-label="  Files" --border-label-pos=3

# Dynamic label with --bind
ls | fzf \
--border=rounded \
--border-label=" Files" \
--bind 'focus:change-border-label( {})'

Separator and Scrollbar

# Custom separator line between header and results
fzf --separator='─'
fzf --separator='━'
fzf --no-separator # hide separator

# Scrollbar characters
fzf --scrollbar='▌' # default
fzf --scrollbar='│'
fzf --no-scrollbar

Gap (Space Between Items)

fzf --gap             # add one blank line between each result
fzf --gap=2 # 2 blank lines between results

Useful when results are dense and hard to visually distinguish.

Tabstop

fzf --tabstop=4       # tab characters align to every 4 columns (default: 8)

Ellipsis

fzf --ellipsis='…'    # character shown when text is truncated
fzf --ellipsis='..'

Highlight Mode

# How matched characters are highlighted
fzf --highlight-line # highlight the entire selected line (not just chars)

--input-label and --list-label

Separate labels for the input area and the list (fzf 0.60+):

ls | fzf \
--input-label='Query' \
--list-label='Files' \
--border=rounded

Combining Options for a Polished UI

A fully styled fzf invocation
find . -type f | fzf \
--height=60% \
--layout=reverse \
--border=rounded \
--border-label=" File Picker" \
--border-label-pos=3 \
--margin=1,2 \
--padding=1 \
--prompt=" " \
--pointer="▶ " \
--marker="✓ " \
--info=right \
--separator="─" \
--scrollbar="▌" \
--header=$'Ctrl+/: preview Ctrl+A: select all\n' \
--preview='bat --color=always --style=numbers {}' \
--preview-window='right:60%:hidden' \
--bind='ctrl-/:toggle-preview' \
--bind='ctrl-a:select-all'

What's Next