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 |
|---|---|
| enter | Keep 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.
Two behaviours
Section titled “Two behaviours”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.
Query syntax
Section titled “Query syntax”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 |
| Log — a compared range | filter | state: (what the range did to the file: A, M, D, or part of a state name) |
The file path |
| Files — Changes, Changelists, Diffs, Rejects | filter | state: (a status code such as M, exactly as the row draws it, or part of a state name such as modified; a code may be suffixed + for copy history), 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.goModified files whose path contains app.go.
state:A+Files scheduled with history — the A+ rows, which are where a copy or a move put its
content. state:+ drops the code and takes any of them. Note that this finds the
destination of a move; its source is a separate D row, which Main names when either half
is highlighted. See copies and moves.
A code matches the row as it is drawn, so state:A is the plain adds only and leaves the
A+ rows to state:A+. A state name covers both, since it is added either way:
state:added takes the plain adds and the copies together.
A single letter is always read as a status code, never as part of a state name — state:D
is the deleted rows, not everything with a d in its name. Two letters or more read as a
name, which is what makes state:mod work.
cl:stagedOnly 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.
A filter lasts as long as you keep it. To keep build output and generated files out of the Changes view for good, use a hide rule instead — it is remembered between sessions and leaves the filter free for looking things up.
rev:128 user:alice parserRevision 128, authored by alice, with parser anywhere in the commit message.
date:2026-07 path:internal/svnJuly 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.
Drilled into a compared range the panel lists files rather than revisions, so the filter narrows those instead — by path, or by what the range did to them:
state:deleted internal/svnThe two queries are written in different terms, so they are kept apart: the revisions’ own filter is set aside while you read a comparison and handed back when you leave it. The label in the input names whichever list is on screen.
Main and Status
Section titled “Main and Status”No parameters; the whole query is a case-insensitive substring match over the visible lines. This is how you search inside a diff:
- 0 to focus Main.
- /, type the term, enter.
- n / N to walk the matches.
Clearing
Section titled “Clearing”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.