Paneflow

Keybindings

Every Paneflow keyboard shortcut, grouped by what it controls, with the action name to use in paneflow.json overrides.

Paneflow ships with one keybinding table that resolves the right modifier per OS. Reach for Cmd/Ctrl+Shift+D on macOS and Linux alike

  • the binding metadata uses a secondary modifier that GPUI maps to Cmd on macOS and Ctrl on Linux.

TL;DR. Cmd/Ctrl+Shift+D and Cmd/Ctrl+Shift+E split, Alt+Arrow moves focus, Cmd/Ctrl+1-9 jumps workspaces, Ctrl+Shift+C/V copies and pastes inside a terminal pane. Override any of it in paneflow.json.

The "Context" column tells you when a binding fires:

  • Global - active everywhere in the window.
  • Terminal - only when a terminal pane has focus.
  • Search - only when the find-in-buffer overlay is open.
  • Markdown / MarkdownSearch - only when a markdown pane has focus, or its find overlay is open.

How do I navigate panes?

Alt+Arrow moves focus structurally across the pane tree on every OS:

  • Alt+Left / Alt+Right - move focus to the pane on the left or right.
  • Alt+Up / Alt+Down - move focus to the pane above or below.

Inside a terminal pane, two extras help you jump between shell prompts in the scrollback:

  • Ctrl+Shift+Up - jump to the previous shell prompt.
  • Ctrl+Shift+Down - jump to the next shell prompt.

The active pane has a brighter title-bar border so you can always tell where the next keystroke will land.

How do I split or close panes?

Split chord vocabulary:

  • Cmd/Ctrl+Shift+D - split horizontally (top and bottom).
  • Cmd/Ctrl+Shift+E - split vertically (side by side).
  • Cmd/Ctrl+Shift+W - close the focused pane.
  • Cmd/Ctrl+Shift+T - undo the last pane close.

A few power-user chords keep the layout tidy:

  • Cmd/Ctrl+Shift+Z - zoom the focused pane (toggle full-window).
  • Cmd/Ctrl+Shift+S - swap the focused pane with its sibling.
  • Cmd/Ctrl+Shift+= - equalize all split ratios in the workspace.

Preset layouts replace the current split tree with a canonical arrangement:

  • Cmd/Ctrl+Alt+1 - even horizontal split.
  • Cmd/Ctrl+Alt+2 - even vertical split.
  • Cmd/Ctrl+Alt+3 - main pane on the left, stack on the right.
  • Cmd/Ctrl+Alt+4 - tiled grid.

See Layouts for diagrams and use cases.

How do I switch workspaces?

Workspace shortcuts work from any pane:

  • Cmd/Ctrl+Shift+N - open a folder picker and create a new workspace.
  • Cmd/Ctrl+Shift+Q - close the current workspace.
  • Cmd/Ctrl+Tab - rotate to the next workspace.
  • Cmd/Ctrl+1 through Cmd/Ctrl+9 - jump directly to workspace 1-9 by position.

A handful of workspace-aware utilities are also available:

  • Ctrl+Shift+Alt+C - copy the active workspace's path to the clipboard.
  • Ctrl+Alt+R - reveal the workspace folder in your file manager.
  • Ctrl+Alt+Z / Ctrl+Alt+C / Ctrl+Alt+V / Ctrl+Alt+W - open the workspace folder in Zed, Cursor, VS Code, or Windsurf.

How do I copy and paste in a terminal pane?

Terminal panes claim a tighter set of clipboard bindings so that Ctrl+C still reaches the shell as SIGINT:

  • Ctrl+Shift+C - copy the active selection.
  • Ctrl+Shift+V - paste from the clipboard.

On macOS, the muscle-memory chords work as well:

  • Cmd+C - copy (alongside Ctrl+Shift+C).
  • Cmd+V - paste (alongside Ctrl+Shift+V).

Both pairs land in the same Terminal context, so neither will fire when a non-terminal pane has focus.

How do I scroll the buffer?

Scrollback navigation lives in the Terminal context:

  • Shift+PageUp - scroll one page up in the scrollback buffer.
  • Shift+PageDown - scroll one page down.

The same chords scroll a markdown pane when one is focused.

To search the buffer, open the find overlay with Ctrl+Shift+F, then use Enter / Shift+Enter to step through matches and Escape to dismiss the overlay. Alt+R toggles regular-expression matching while the overlay is open.

Full keybinding table

Every default binding shipped today. The "Action" column is the string you use in paneflow.json shortcuts overrides.

Panes

Stable
ActionDefault keysContextSince
split_horizontallyCmd/Ctrl+Shift+DGlobal0.1.7
split_verticallyCmd/Ctrl+Shift+EGlobal0.1.7
close_paneCmd/Ctrl+Shift+WGlobal0.1.7
undo_close_paneCmd/Ctrl+Shift+TGlobal0.2.0
toggle_zoomCmd/Ctrl+Shift+ZGlobal0.2.0
swap_paneCmd/Ctrl+Shift+SGlobal0.2.0
split_equalizeCmd/Ctrl+Shift+=Global0.2.0
new_tabCmd/Ctrl+Alt+TGlobal0.2.0
close_tabCmd/Ctrl+WGlobal0.2.0

Pane focus

ActionDefault keysContextSince
focus_leftAlt+LeftGlobal0.1.7
focus_rightAlt+RightGlobal0.1.7
focus_upAlt+UpGlobal0.1.7
focus_downAlt+DownGlobal0.1.7

Layouts

Stable
ActionDefault keysContextSince
layout_even_horizontalCmd/Ctrl+Alt+1Global0.2.0
layout_even_verticalCmd/Ctrl+Alt+2Global0.2.0
layout_main_verticalCmd/Ctrl+Alt+3Global0.2.0
layout_tiledCmd/Ctrl+Alt+4Global0.2.0

Workspaces

ActionDefault keysContextSince
new_workspaceCmd/Ctrl+Shift+NGlobal0.1.7
close_workspaceCmd/Ctrl+Shift+QGlobal0.1.7
next_workspaceCmd/Ctrl+TabGlobal0.1.7
select_workspace_1Cmd/Ctrl+1Global0.1.7
select_workspace_2Cmd/Ctrl+2Global0.1.7
select_workspace_3Cmd/Ctrl+3Global0.1.7
select_workspace_4Cmd/Ctrl+4Global0.1.7
select_workspace_5Cmd/Ctrl+5Global0.1.7
select_workspace_6Cmd/Ctrl+6Global0.1.7
select_workspace_7Cmd/Ctrl+7Global0.1.7
select_workspace_8Cmd/Ctrl+8Global0.1.7
select_workspace_9Cmd/Ctrl+9Global0.1.7
copy_workspace_pathCtrl+Shift+Alt+CGlobal0.2.0
reveal_workspace_in_file_managerCtrl+Alt+RGlobal0.2.0
open_workspace_in_zedCtrl+Alt+ZGlobal0.2.0
open_workspace_in_cursorCtrl+Alt+CGlobal0.2.0
open_workspace_in_vscodeCtrl+Alt+VGlobal0.2.0
open_workspace_in_windsurfCtrl+Alt+WGlobal0.2.0

Terminal pane

ActionDefault keysContextSince
terminal_copyCtrl+Shift+CTerminal0.1.7
terminal_pasteCtrl+Shift+VTerminal0.1.7
terminal_copyCmd+C (macOS only)Terminal0.2.9
terminal_pasteCmd+V (macOS only)Terminal0.2.9
scroll_page_upShift+PageUpTerminal0.1.7
scroll_page_downShift+PageDownTerminal0.1.7
toggle_copy_modeCtrl+Shift+XTerminal0.2.0
toggle_searchCtrl+Shift+FTerminal0.2.0
jump_to_prompt_prevCtrl+Shift+UpTerminal0.2.0
jump_to_prompt_nextCtrl+Shift+DownTerminal0.2.0

Search overlay

ActionDefault keysContextSince
search_nextEnterSearch0.2.0
search_prevShift+EnterSearch0.2.0
dismiss_searchEscapeSearch0.2.0
toggle_search_regexAlt+RSearch0.2.0

Markdown pane

Beta
ActionDefault keysContextSince
markdown_scroll_page_upShift+PageUpMarkdown0.2.14
markdown_scroll_page_downShift+PageDownMarkdown0.2.14
markdown_find_openCtrl+FMarkdown0.2.14
markdown_copyCtrl+Shift+CMarkdown0.2.14
markdown_find_nextEnterMarkdownSearch0.2.14
markdown_find_prevShift+EnterMarkdownSearch0.2.14
markdown_find_dismissEscapeMarkdownSearch0.2.14

macOS menu bar

Stable
ActionDefault keysContextSince
quitCmd+Q (macOS only)Global0.2.9

Actions without a default binding

These actions ship with the runtime but are not bound to a key out of the box. Map them in paneflow.json shortcuts to reach them from the keyboard.

ActionDescription
close_windowClose the active window.
clear_scroll_historyDrop the scrollback buffer in the focused terminal pane.
reset_terminalSend a full reset to the focused terminal pane.
start_self_updateTrigger the in-app update flow.
dismiss_updateDismiss the update pill for the current launch.
aboutOpen the About dialog.
open_helpOpen this documentation site.
copy / paste / select_allGeneric clipboard fallbacks for non-terminal surfaces.

How do I override a binding?

Set the shortcuts object in paneflow.json. Keys are keystrokes; values are action names from the tables above.

{
  "shortcuts": {
    "ctrl+shift+t": "new_tab",
    "alt+1": "select_workspace_1"
  }
}

The full override syntax, including the secondary modifier and context scoping, lives on the schema page.

Bindings can be overridden in paneflow.json; conflicts resolve in last-write-wins order. Your user entries layer on top of the built-in defaults, so the most recently registered binding for a given keystroke wins. If two user entries map the same keystroke to different actions, the later entry takes effect.

On this page