Skip to content

Filtering & searching

Press / to narrow the focused panel. A slim input opens in the status bar and the query applies live as you type.

Key Effect
enterKeep the query. The hint bar then shows it, with esc to clear.
esc Clear the query.
n / N In Main and Status: jump to the next / previous match.

The query is remembered per panel, so the Files panel can stay narrowed to state:M while you search inside a diff in Main.

List panels filter. In Files and Log, non-matching rows are hidden. The panel footer keeps counting, and appends the full unfiltered count in brackets — 1 of 16 (29) — so you always know how much is out of view.

Detail panels search. In Main and Status, nothing is removed. Matching lines are highlighted in place: the current match is a reverse-video bar and the rest get a subtle highlight. n / N move between them, wrapping at the ends, and the hint bar shows the position — 2/5. If nothing matches, a toast says so.

Every query accepts free text. The list panels also accept key:value parameters, which can be combined in any order with the free text. Keys are case-insensitive, and so is matching.

Panel Behaviour Parameters Free text matches
Log filter rev: (exact revision, with or without the leading r), user: / author:, path: (a changed path), date: (YYYY-MM-DD) The full commit message, not just its first line
Files — Changes, Changelists, Diffs, Rejects filter state: (a status code such as M, or part of a state name such as modified), cl: / changelist: The file path
Main / Status highlight + jump The visible lines

Anything that is not a recognised key:value pair — including an unknown key — is treated as free text.

state:M app.go

Modified files whose path contains app.go.

cl:staged

Only the staged set. cl:unstaged is its counterpart, and cl:feature-x narrows to a named changelist.

The Files filter is shared by all four views — Changes, Changelists, Diffs and Rejects — so switching views with [ / ] keeps the same query. In the Diffs view only the free text applies, matched against the patch file name, and in the Rejects view likewise, matched against the reject’s path below the root.

rev:128 user:alice parser

Revision 128, authored by alice, with parser anywhere in the commit message.

date:2026-07 path:internal/svn

July 2026 revisions that touched something under internal/svn. date: is a substring match over YYYY-MM-DD HH:MM, so date:2026-07-14 pins a single day and date:2026-07 covers a month.

rev: is exact — rev:12 does not match revision 128.

No parameters; the whole query is a case-insensitive substring match over the visible lines. This is how you search inside a diff:

  1. 0 to focus Main.
  2. /, type the term, enter.
  3. n / N to walk the matches.

esc clears the focused panel’s query. It only consumes the keypress when there was a query to clear, so esc still backs out of a drilled-in changelist when no filter is active.

/ is in the Navigation section of the keybindings reference.