Skip to content

The search pane (rg) ​

The Search pane runs full-text search through ripgrep. Every result is an ordinary pane row, with a second context column showing the matching lines.

Search pane

Overview ​

  • Query mode re-runs ripgrep as you type; filter mode narrows already-loaded results.
  • % switches the filter to the context column.
  • Advancing on a match exports HIGHLIGHT_LINE / HIGHLIGHT_COLUMN, so editors open at the exact match.
WayCommand
In-appctrl-r
Subcommandfs :rg (alias :)
With argsfs :rg "pattern" -p path1 -p path2
shell
fs :rg "TODO" -p src                    # pattern + paths
fs :rg -i -C 2 "error" .                # case-insensitive, 2 lines of context
fs :rg -- --glob '!vendor/**' "fix"     # anything after `--` goes to rg raw
echo -e "src\nlib" | fs :rg "foo"       # paths can come from stdin

Query and filter mode ​

Toggled with ctrl-r:

Query mode — your input is the pattern. Every change re-runs ripgrep, streaming results in. Multiple whitespace-separated queries are OR'd; wrap a query containing spaces in single quotes, escape a literal quote as \'.

Filter mode — results are already loaded; your input is a fuzzy nucleo filter over them. Instant, no re-search.

The two modes keep separate inputs; the inactive one is shown in the status line (rg_status_template / fs_status_template).

Tip: start in query mode to search the tree, then ctrl-r into filter mode to drill down through thousands of matches.

Filtering the context column ​

The filter targets the path column by default. Prefix the query with % to filter the context column instead:

text
path_filter % context_filter

% (percent + space) selects the context column, %_ the path column. Queries are regexes in query mode, literal matches in filter mode.

Flags ​

FlagMeaning
-i / -s / -SIgnore case / case-sensitive / smart case
-A n / -B n / -C nContext lines after / before / both sides
--one-line, -1One line per match (--no-heading)
--fixed-strings / --no-fixed-stringsLiteral patterns (default: regex)
--preserve-whitespacePrefix the query with ' so it isn't split
--rebaseRun rg from the deepest common directory of the given paths
--filteringStart in filter mode
--no-readDon't read paths from stdin
--sort <sort>name mtime atime none (size is not available)

In-app, the same knobs live in the options overlay (ctrl-p): context before/after, case, one-line, regex/fixed, and sort.

What rg actually runs ​

F:ist builds a deterministic rg command: --line-number --column --heading|--no-heading --null plus visibility flags, patterns as repeated -e arguments, paths at the end. --color=ansi and --trim come from [rg] base_args; --sortr=modified|accessed / --sort=path handle sorting.

  • Arguments after -- are appended last and override internal flags.
  • -v (invert match) is detected from extra args; results lose column info so the context column still makes sense.
  • [rg] empty_pattern (default -v ^ *$) runs when the query is empty — everything except blank lines.

Not supported through the wrapper (use -- to pass them raw): --pre / --pre-glob, -z zip search, --count-matches, --passthru, --multiline.

Opening at the match ​

When you advance on a single-line search hit, f:ist exports:

VariableMeaning
HIGHLIGHT_LINELine number of the match
HIGHLIGHT_COLUMNByte column (when non-zero)

The lessfilter edit preset consumes these and opens the file at the right spot when your editor is supported (micro, vim, nvim, nano); other editors get plain paths. The same variables let the previewer jump to the matching line.

Sorting and stability ​

The search pane sorts by name, mtime, atime, or none (match order — the default); size is not available here (see Sorting). Sort options translate to rg flags (--sort=path, --sortr=modified|accessed). In filter mode, sorting is nucleo-side with a stability threshold so live results don't thrash.

Status templates ​

While searching, the status line shows the active mode and input. Shipped defaults:

toml
[panes.search]
rg_status_template = '{blue:filter: {}} \s\m/\t'   # shown in query mode
fs_status_template = '{red:query: {}} \s\m/\t'     # shown in filter mode

{} is replaced with the active input. Both are text templates with style directives.

FAQ ​

What's the difference between query mode and filter mode?

Query mode searches the tree (re-runs ripgrep); filter mode narrows the results already loaded. ctrl-r toggles.

How do I search for a phrase with spaces?

Single quotes in query mode: 'search this'.

How do I exclude files?

Pass rg flags raw: fs :rg -- --glob '!vendor/**' pattern.