Skip to content
bmux

· bmux guides

Keyboard-Driven Split Browsing with Vim-Style Navigation

Open links in split panes, switch pages from the keyboard, and save a bmux workspace. Add Vim-style navigation that preserves typing in text fields.

Open links in split panes, navigate with the keyboard, and edit text with Vim.
Walkthrough transcript

Keep your GitHub draft on the left and open the repository beside it. Double tap Option, press L for a right split, then type the link hint for Code. Control B, then O, switches panes. These optional J and K bindings scroll the page. G G returns to the top. Control B, then Z, expands the selected pane. Press it again to restore the split. The same letters still work inside a text field. The pane not editing condition keeps page navigation shortcuts from taking over while you type. Here, J and K remain ordinary text. With Vim editing enabled in General settings, press Control E inside the field. The inline editor starts in Normal mode. Use J to move down, C W to change a word, then type the replacement. Escape returns to Normal mode. Press Z Z to close the editor and return to the original field. Edits reach the page live. Closing the editor does not submit the form, although a website can autosave. Your reference remains beside the draft.

Introduction

To read a source and its reference side by side in bmux, double-tap Option, press l, then type the reference link's hint. The link opens in a split on the right. Add conditional Vim-style bindings for scrolling and search, and you can move through the pages while keeping ordinary typing in text fields.

A split screen browser solves the layout part of that task. Keyboard browser navigation covers the next steps: choosing a link, moving between panes, reading, and returning to a form. This guide compares the approaches, then builds a small workflow using bmux's native Click Mode, pane shortcuts, and optional page bindings.

Watch the walkthrough to open the repository beside a GitHub issue draft, navigate between panes, and edit the description with Vim.

Choose an extension, a Vim browser, or tab tiling

Start with the part of your current workflow that needs improvement. If you mainly want keyboard navigation in your existing browser, an extension may be enough. If you regularly compare pages, look at how the browser combines navigation with its split layout.

Approach Documented keyboard workflow When to consider it
Vimium extension Page scrolling, link hints, search, and tab navigation You want Vim-style navigation in a supported browser you already use
Vieb browser Vim-inspired commands, window splitting, and Ctrl-w bindings You want browser interaction built around Vim conventions
Vivaldi tab tiling Tile selected tabs using shortcuts or Quick Commands You want side-by-side pages within Vivaldi's tab workflow
bmux panes Native link hints open left/right splits or floats; configurable page keys apply outside editing fields You want to open a reference beside the source and keep pane actions in the browser's keyboard configuration

Vimium's official command list covers navigation and link hints. Vieb explicitly documents window splitting and Vim-compatible options. Vivaldi's tiling guide describes keyboard tiling and opening links as tiled tabs. These are documented approaches, not a speed or compatibility benchmark.

bmux's workflow combines native pane-opening actions with conditional page bindings. You can use its splits without enabling single-letter keys, and add only the navigation commands you need.

Try this with a documentation page that links to a reference you need to read alongside it. The activation shortcut below uses the documented Option default; change it in settings if another key suits your keyboard.

  1. Select the source pane and find a visible reference link.
  2. Double-tap Option to enter Click Mode.
  3. Press l for a right split, then type the hint beside the reference link. Use h instead for a left split.
  4. Press Control+B, then o, to cycle to the next pane when you need to change focus.
  5. Press Control+B, then z, to expand the selected pane while reading. Repeat it to restore the split view.

Choose h or l before typing the hint. These actions show links only, so a button may disappear from the candidates. Hints depend on the current page state; read the displayed label each time.

A release handbook on the left and its API reference in a right-hand bmux splitKeep the handbook and API reference side by side.

A split is useful when both pages remain part of the task. For a brief lookup, choose f before the hint to open a floating pane instead. The floating pane guide explains how to dock it later.

For a new side-by-side pane without following a link, press Control+B, then %. Control+B, then ", creates an above-and-below split. These prefix shortcuts are separate from Click Mode's link actions. The Click Mode guide covers hints and target selection in more detail.

Keep a split workspace for the next visit

Suppose you are comparing an API reference with a draft. Open the draft first, then use Click Mode to put the reference on the right. If you need a third page, select the reference pane and press Control+B, then ", to divide that side into an upper and lower pane. The draft stays on the left.

Task Default keyboard path
Open a blank side-by-side pane Control+B, then %
Stack a new pane above or below Control+B, then "
Cycle to the next pane Control+B, then o
Expand the selected pane and restore its split Control+B, then z
Find another session Control+B, then s, and type its name
Open the workspace command prompt Control+B, then :

Save this arrangement when it is useful enough to repeat. In the command prompt, enter:

save-layout draft-and-reference

The saved layout is a reusable arrangement of pages. To apply it later, select the internal window you want to replace, open the command prompt again, and enter:

restore-layout draft-and-reference --confirm

Restoring replaces that window's pages, so finish any draft first. To return to a workspace that is still open, use the session picker instead. Switching sessions keeps their pages and layouts available; a layout restore creates replacement pages.

Name the session after the project with Control+B, then $. Use Control+B, then s, to switch away and find it again by name. A session organizes your work, while a profile holds the cookies and site storage used by its panes. Two project sessions can share the same login through a profile.

Detaching a client leaves the live session running. Quitting stops the browser; reopening restores saved URLs and layouts, rather than unsaved form text or arbitrary JavaScript state. Keep drafts in the website's own save flow. The workspace model explains sessions, windows, panes, and profiles.

The CLI starter walkthrough takes the next step: create a background profile, target a pane from the terminal, and watch a worker beside your own pages.

Why a global binding can interfere with a website

A single-letter shortcut is convenient on a document and disruptive in a text box. If every j means “scroll down,” you cannot type ordinary words containing that letter.

pane-not-editing applies a shortcut only while the selected page has focus outside editable fields. The address bar, browser prompts, website inputs, and editable page content retain their normal keyboard behavior.

If bmux cannot determine focus safely, it does not intercept the conditional shortcut. That includes unknown focusable controls and closed shadow roots. Selecting ordinary page text does not itself count as editing.

Choose direct keys, prefix bindings, or Click Mode

Mechanism Example Useful for
Conditional direct shortcut j scrolls outside an input Frequent page actions
Multi-key sequence gg goes to the top Familiar ordered key combinations
tmux-style prefix Control+B, then % Workspace actions such as splitting
Click Mode Option twice, then a hint Activating a visible page target

Vimium's command list is a useful comparison for readers accustomed to keyboard browser navigation. bmux's bindings map keys to its own actions; they are not a full Vim editing language or a claim of extension compatibility.

Keep workspace actions on the prefix when you want a clear separation from typing on the page. Use Click Mode for links and buttons. Direct page bindings are most useful for actions you repeat while reading.

Open settings with Command+, and edit ~/.config/bmux/config.yaml. Merge this example into the existing keyboard mapping. Avoid creating a second keyboard key or deleting unrelated bindings.

keyboard:
shortcuts:
j: { action: scroll-down, when: pane-not-editing }
k: { action: scroll-up, when: pane-not-editing }
d: { action: scroll-half-down, when: pane-not-editing }
u: { action: scroll-half-up, when: pane-not-editing }
Shift+G: { action: scroll-bottom, when: pane-not-editing }
r: { action: reload, when: pane-not-editing }
Shift+R: { action: hard-reload, when: pane-not-editing }
/: { action: find, when: pane-not-editing }
sequences:
gg: { action: scroll-top, when: pane-not-editing }

The settings reload automatically. You do not need to restart the browser. Two-letter sequences use prefixTimeoutMs as the allowed interval between letters; the default is 1.6 seconds.

If you only want scrolling, start with j, k, and gg. Reload bindings can discard page work just as the ordinary reload button can. Add them when their convenience fits your workflow.

A reference page scrolled to its final review sectionShift+G moves to the bottom of the page.

gg returns to the beginning. This is useful for long reference documents where scrolling is a repeated part of reading.

Check the binding where you actually type

Try the keys on an ordinary page, then click a search or notes field and type the same letters. Also test the address bar and any web editor you use frequently.

The letters j and k typed normally in a review fieldType normally in text fields with conditional bindings.

The context condition lets the same letters work as page commands and ordinary text.

Website shortcuts outside editable fields can still conflict. Configured bmux shortcuts take precedence, so pane-not-editing does not automatically resolve every application's keyboard convention. Remove or remap a binding if a site uses it for an action you prefer.

Edit the draft with inline Vim mode

Page navigation and text editing have separate controls. Conditional j and k bindings leave a website field alone. When you want Vim commands inside that field, enable Vim editing in General settings, focus the field, and press Ctrl+E. The inline editor takes its place in the page layout and starts in Normal mode.

In the walkthrough, the GitHub repository stays on the right while the issue description becomes an editor on the left. The draft has three lines. gg0j moves to the beginning of the second line, cw changes its first word, and typing Confirm replaces Check. Escape returns to Normal mode; ZZ closes the editor and returns to the original website field.

Context What j does How to leave it
Page content with the optional binding Scrolls the active page down Focus a text field
Ordinary website text field Types the letter j Press Ctrl+E to open the editor
Inline editor, Normal mode Moves the cursor down one line i enters Insert mode; ZZ saves and closes
Inline editor, Insert mode Types the letter j Escape returns to Normal mode

The inline bmux Vim editor inside a GitHub issue descriptionEdit a GitHub draft in place with Vim commands.

Edits reach the original field live, so site character counts and autosave may run while you work. Closing the editor does not submit the website form.

Use native editing for passwords and unsupported fields. Rich-text drafts contain plain text; embedded media and formatting are outside the Vim draft. The 0.1.9 release article explains the editor's save checkpoints and limitations, including the 0.1.10 initialization fix. Install 0.1.10 or newer for this workflow.

Adapt the configuration

Use the action names from the keyboard reference with keys comfortable on your keyboard. You can use several shortcuts for the same action. Set a particular binding to null to disable it.

Conditional bindings also work for pane actions. For example, a conditional Command+Z binding can zoom the selected pane while retaining Undo in text fields:

keyboard:
shortcuts:
Cmd+Z: { action: toggle-pane-zoom, when: pane-not-editing }

This is an optional remapping, not the default Command+Z behavior. Keep only bindings whose meaning you will remember outside an input.

Vim navigation FAQ

Can I use split panes without Vim bindings?

Yes. Click Mode and the default pane prefix shortcuts work independently of the optional j, k, and gg configuration. Start by opening one reference beside your source, then add page keys if scrolling is the repetitive part.

Are these keys enabled by default?

No. The single-letter page bindings in this article are an example configuration. Add the ones you want.

Why does a key sometimes do nothing?

Check focus first. The active element may be editable, an unfamiliar focusable control, or browser UI rather than page content. The conditional action deliberately leaves those contexts alone.

Why does gg fail when I pause?

The second g must arrive within the configured sequence timeout. Adjust prefixTimeoutMs if necessary, remembering that it also controls the tmux-style prefix interval.

Do I need an extension?

No extension is needed for these bmux actions. Combine a small set of conditional navigation keys with native Click Mode and the normal workspace prefix. That gives each part of browsing a predictable keyboard path.

Try one reference beside your source

Start with two pages you already compare. Open the reference using Option twice, l, and its hint. Cycle panes with Control+B, then o. Once the layout works for you, add j, k, and gg, then check them in a text field before adding more bindings. Enable Vim editing when you also want to revise that field with motions and operators.

Install bmux to try the workflow. Keep the keyboard reference nearby for the complete action names and configuration options.

A GitHub issue draft and its repository side by side in bmux split panes