Skip to content

Key Bindings

Keys are contextual: the same letter means different things in the diff, in the comments panel and in the PR overview. Each table below is one surface.

g? opens the keymap overlay — this page, condensed, without leaving the app. Ctrl+p opens the action menu, which is the authoritative list: it shows only what applies to the state you’re in, with the shortcut next to it. Bindings are not configurable yet.

The keymap overlay

In the diff. These follow vim, including the ones you only notice when they’re missing.

KeyAction
j kDown, up (arrow keys too)
h lLeft, right
w e bWord forward, end of word, word back
0 ^ $Line start, first non-blank, line end
f{char} t{char}Find character forward, till character
; ,Repeat that find, forward and back
Ctrl+d Ctrl+uHalf page down, up
gg GTop, bottom of the diff
VVisual line mode — select a range for a comment or a yank
EscLeave visual mode, or clear search highlights

The diff scrolls sideways rather than wrapping, and moving the cursor carries the view with it. These are for moving the view on its own.

KeyAction
zl zhScroll one column right, left
zL zHScroll half a screen right, left
zs zePut the cursor’s column at the left, right edge
glPeek the line in full — or, in a markdown table, the table as a grid
zwToggle soft wrap for the whole diff
KeyAction
]c [cNext, previous hunk
]f [fNext, previous file
]u [uNext, previous unviewed file
]o [oNext, previous outdated file — viewed, but changed since
]r [rNext, previous comment thread
]n [nNext, previous comment you have not seen
]R [RSame, skipping resolved threads
]g [gNext, previous commit’s diff; wraps back to the full diff
sFlash jump — search what’s on screen, press a label to land (file headers included)
Ctrl+o Ctrl+iJumplist back, forward (Tab is forward too)

Every one of these records a jumplist entry, so Ctrl+o undoes it.

KeyAction
/ ?Search forward, backward
n NNext, previous match
* #Search the word under the cursor, forward and backward
EscClear the highlights
KeyAction
zaToggle the fold at the cursor — file header, hunk, or fenced code block
zAFold or unfold every fenced code block in this file
zo zcOpen, close it
zR zrOpen every fold
zM zmClose every fold
EnterOn a context divider: reveal the hidden unchanged lines

Expanded context lines are for reading only — GitHub can’t anchor a comment outside a hunk.

KeyAction
Ctrl+bToggle the file tree
Ctrl+eToggle the file tree — or the comments panel, when it has focus — to full width
Ctrl+hMove focus left: comments → diff → tree
Ctrl+lMove focus right: tree → diff → comments
Ctrl+tToggle the comments panel
Ctrl+fFuzzy file picker, from every view
/Filter the list that has focus — tree, PR overview, feed, comments panel; search, in the diff
Ctrl+gPick commits to scope the diff to — Space marks, V marks a run (Esc in the diff leaves it)
vMark the file viewed and advance to the next unviewed
EscLeave single-file view — after clearing a selection or search highlights

In the file tree: j/k moves, l/Enter opens a file or expands a folder, h collapses, v toggles viewed, / filters by path, Esc hands focus back to the diff.

Filtering: / opens an input in the panel header, typing narrows the tree live (loosely, against the whole path — apicl finds src/api/client.ts), Enter keeps the filter and returns to navigating it, Esc drops it. It’s a real text field, so Ctrl+w, word jumps, paste and undo all work.

Backspace (the same key as Ctrl+h) walks focus left first, so coming back to the tree keeps the filter; once there is nowhere left to move it clears an applied filter. Esc in the tree clears it too, after any multi-select and before leaving the panel.

From the diff:

KeyAction
cComment on the cursor’s line, or on the visual-line selection
CThe same, drafted in $EDITOR
EEdit the thread on this line in $EDITOR
EnterOpen the thread on this line in the comments panel
gCFuzzy picker over every comment in the PR

In the comments panel (focused — Ctrl+t, or Enter on a thread):

KeyAction
j kMove between comments
J KJump to the next, previous thread
Ctrl+d Ctrl+uHalf a screen of comments
za / EnterExpand or collapse the highlighted thread
nNew thread at the diff cursor’s line
sFlash — label every visible comment, next key jumps
g?The keymap
gx gXPick from every link in the panel’s comments — open it, or copy it
r RReply inline, reply in $EDITOR
e EEdit inline, edit in $EDITOR
dDelete the highlighted comment
xToggle the thread resolved
SPost this one comment now
yCopy a link to it
oOpen its file at its line in $EDITOR
q Esc Ctrl+hClose the panel, or hand focus back

While writing a comment:

KeyAction
Enter / Ctrl+sSave locally
Ctrl+pSave and post it to GitHub now
Ctrl+jNewline
Ctrl+gContinue in $EDITOR
Ctrl+yInsert a suggestion block for the lines the comment replaces
@Mention picker — / or Ctrl+p/Ctrl+n, Tab/Enter accepts
:Emoji picker, same keys — :roc → 🚀
EscCancel

Ctrl+Enter also posts, in the terminals that can send it. Ctrl+p is the one that works everywhere, tmux included. In local mode both just save — there’s nothing to post to.

KeyAction
gSSubmit review — opens the preview
gsSync edits, replies and resolutions
grRefresh diff, commits and comments
giPR overview panel
i / a / dPR state / feed / diff — the same key again goes back
c m r b t p uIn the feed: toggle a type, unseen only; Esc puts everything back
zaIn the feed: open a commit into its files
goOpen the PR in a browser
gyCopy the PR URL
gYCopy a permalink to the selection, line, or file
gPEdit the PR title and body — or create a PR, in local mode
gcCheck out the PR branch and open the file in $EDITOR

In the review preview (gS): 1 2 3 pick comment / approve / request changes, Tab switches between the summary box and the comment list, j/k walks it, space excludes a comment from this review, Enter or Ctrl+s submits, Esc backs out. The sync preview (gs) is simpler: Enter confirms, Esc cancels.

i or gi gets you here. Sections are description, conversation, checks, approvals, commits and files.

KeyAction
j kMove
l hExpand, collapse the selected item
zaFold the section, thread, or check under the cursor
zr zR / zm zMExpand, collapse one section or all of them
cWrite a conversation comment
xToggle the focused review thread resolved
EnterContext-dependent: open a check’s annotation in $EDITOR, expand a failing check, or open the item in a browser
yCopy a link to the focused item
ggTop
g?The keymap
gx gXPick from every link in the overview — open it, or copy it
gr go gyRefresh, open in browser, copy PR URL — as everywhere
sFlash — label every row, next key jumps
q Esc Tab iBack to the diff
KeyAction
gx gXFollow the link under the cursor in the browser, or copy it
gfOpen the current file in $EDITOR at the cursor’s line
gFThe same, in a new tmux window, with riff still running
yYank the line or selection, without the +/- gutter
YYank it with the gutter intact
gd gDDiff this file’s two versions in $EDITOR, in a tmux pane

Every fuzzy picker — files, comments (gC), commits, the action menu (Ctrl+p) — takes the same keys: type to filter, / or Ctrl+p/Ctrl+n to move, Enter to choose, Esc to cancel. They all type into the same input widget, so Ctrl+w deletes a word, Ctrl+u the line, and word motions, paste, undo and selection work in every one of them — the filter prompts included.

KeyAction
Ctrl+pAction menu
g?Keymap overlay (Esc or q closes)
Ctrl+oJump back
qQuit
y / nAnswer a confirmation dialog

Chords (g, z, ], [) time out after half a second, so a g you didn’t mean to press costs nothing.