Developer Tooling
Helix + Byobu on macOS
A practical reference for getting comfortable in Helix editor running inside Byobu — covering keybindings, multiple cursors, LSP, Byobu pane management, clipboard, and all the macOS-specific gotchas.
macOS Setup
Install everything via Homebrew: brew install helix byobu tmux. Run byobu-tmux if plain byobu doesn't launch. Config lives at ~/.config/helix/config.toml.
F-keys getting intercepted by macOS
By default macOS maps F-keys to brightness, volume, and Mission Control — which breaks Byobu's entire interface. Fix it one of two ways:
- System-wide: System Settings → Keyboard → enable "Use F1, F2, etc. keys as standard function keys". You can still trigger media actions with Fn + F-key.
- iTerm2 (recommended): iTerm2 intercepts F-keys before macOS and passes them straight to the terminal. No system setting change needed. Prefer iTerm2 over Terminal.app for this setup.
Option key as Alt
Helix uses Alt combos heavily (e.g. Alt-C for multiple cursors). The Option key needs to emit escape sequences, not Unicode characters:
- Terminal.app: Preferences → Profiles → Keyboard → ✅ Use Option as Meta key
- iTerm2: Preferences → Profiles → Keys → Left Option key →
Esc+
Byobu Essentials
Byobu wraps tmux. Its primary interface uses F-keys, which almost never conflict with Helix.
Sessions & Windows
| Key | Action |
|---|---|
F2 | New window |
F3 / F4 | Previous / next window |
F6 | Detach session |
F8 | Rename window |
F9 | Byobu config menu |
Panes
| Key | Action |
|---|---|
Ctrl-F2 | New vertical pane split |
Shift-F2 | New horizontal pane split |
Shift-F3 / Shift-F4 | Previous / next pane |
Shift-↑↓←→ | Move between panes |
Alt-↑↓←→ | Resize pane |
Scrollback
Use F7 to enter tmux scroll mode — navigate with arrow keys or PgUp/PgDn, exit with q or Enter. Only use this for scrolling terminal output outside Helix. Inside Helix, use Ctrl-d / Ctrl-u instead.
Keep Helix in one pane and a shell in the adjacent pane. Use Shift-←→ to hop between them without ever leaving Helix's normal mode. Run your compiler, git, or test suite in the shell pane and stay in flow.
Helix Core Concepts
Helix is selection-first, unlike Vim's operator-first model. You select something, then act on it.
Vim: d w → operator (delete) then motion (word)
Helix: w d → select word, then delete selection
| Mode | Enter with | Purpose |
|---|---|---|
| Normal | Esc | Navigation and editing commands |
| Insert | i / a / o | Type text |
| Select | v | Extend the current selection |
Navigation
| Key | Action |
|---|---|
h j k l | Move left / down / up / right |
w / b | Next / prev word start |
e | Next word end |
W / B / E | Same but WORD (whitespace-delimited) |
f<char> | Find char forward on line |
F<char> | Find char backward on line |
t<char> / T<char> | Till char (stops before it) |
gg | Go to top of file |
ge | Go to end of file |
g<line> | Go to line number |
Ctrl-d / Ctrl-u | Scroll down / up half page |
Ctrl-f / Ctrl-b | Full page down / up |
% | Jump to matching bracket |
mi / ma | Select inside / around object (word, bracket, etc.) |
Selection & Multiple Cursors
Multiple cursors are a first-class feature in Helix — no plugin needed.
| Key | Action |
|---|---|
v | Enter Select mode (extend selection) |
x | Select current line |
X | Extend selection to whole lines |
C | Duplicate cursor downward |
Alt-C | Duplicate cursor upward |
s | Select regex within selection |
S | Split selection on regex |
, | Keep primary cursor only (collapse) |
Alt-, | Remove primary cursor |
& | Align selections |
_ | Trim whitespace from selections |
Search with /pattern → all matches highlighted. Press Ctrl-d to select matches one at a time additively. Press Alt-d to skip and deselect. Then act on all of them at once.
Editing
| Key | Action |
|---|---|
i | Insert before selection |
a | Insert after selection |
o | Open line below |
O | Open line above |
d | Delete selection |
c | Change (delete + enter insert) |
r<char> | Replace each selected char |
~ | Switch case |
` | Lowercase selection |
Alt-` | Uppercase selection |
u / U | Undo / Redo |
y | Yank (copy) |
p / P | Paste after / before |
> / < | Indent / de-indent |
J | Join lines |
Surround operations
| Key | Action |
|---|---|
ms<char> | Add surround around selection |
ds<char> | Delete surround |
cs<old><new> | Change surround character |
Search & Jump
| Key | Action |
|---|---|
/ | Search forward |
? | Search backward |
n / N | Next / prev match |
* | Search for word under cursor (forward) |
# | Search for word under cursor (backward) |
Ctrl-s | Save current position to jumplist |
Ctrl-i / Ctrl-o | Jump forward / back in jumplist |
File & Buffer Management
| Key | Action |
|---|---|
:w | Save |
:q / :q! | Quit / force quit |
:wq | Save and quit |
:o <file> | Open file |
Space-f | Fuzzy file picker |
Space-b | Buffer picker |
Space-/ | Global grep search |
Space-y / Space-p | Yank / paste using system clipboard |
gf | Go to file path under cursor |
Space-e | Toggle file explorer |
pbcopy / pbpaste work automatically — no config needed. If clipboard breaks inside Byobu/tmux, add set -g default-command "reattach-to-user-namespace -l zsh" to ~/.tmux.conf and install with brew install reattach-to-user-namespace.
Window Splits (inside Helix)
Helix has its own split system independent of Byobu panes. Use Helix splits to view two files side by side; use Byobu panes to run a shell alongside your editor.
| Key | Action |
|---|---|
Ctrl-w s | Horizontal split |
Ctrl-w v | Vertical split |
Ctrl-w h/j/k/l | Move between splits |
Ctrl-w q | Close split |
Ctrl-w o | Close all other splits |
Ctrl-w f | Open file picker in new split |
LSP & Code Intelligence
LSP is built in — no plugins. Install the language server for your language (e.g. brew install rust-analyzer, npm i -g typescript-language-server) and Helix picks it up automatically.
| Key | Action |
|---|---|
Space-d | Diagnostics picker |
Space-a | Code actions |
Space-r | Rename symbol |
K | Hover / show docs |
gd | Go to definition |
gr | Go to references |
gi | Go to implementation |
gy | Go to type definition |
]d / [d | Next / prev diagnostic |
Ctrl-space | Trigger completion |
Productivity Tips
Repeat f/t motions
After pressing f<char> or t<char>, press ; to repeat the motion forward or , to repeat backward. Much faster than retyping.
Text object selections
Press m then i (inside) or a (around) followed by a delimiter. Examples: mi( selects inside parentheses, maw selects around a word including surrounding whitespace, mi" selects inside quotes.
Jump to any visible line
Use relative line numbers (see config below) combined with g<number> to jump anywhere on screen instantly — no counting from the top.
Shell in an adjacent Byobu pane
Press Ctrl-F2 to create a vertical pane. Run your build/test/git there. Shift-← to return to Helix. This flow keeps you from losing Helix context just to run a command.
Recommended Config (~/.config/helix/config.toml)
[editor]
line-number = "relative" # jump anywhere with g<number>
scrolloff = 8 # keep cursor away from screen edges
cursorline = true # highlight current line
color-modes = true # mode indicator changes color
mouse = true # click to move cursor
[editor.statusline]
left = ["mode", "spinner", "file-name", "file-modification-indicator"]
right = ["diagnostics", "position", "file-encoding", "file-type"]
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[keys.normal]
";" = "repeat_last_motion" # repeat last f/t/F/T
Helix vs Vim: Mental Model
The hardest adjustment coming from Vim is remembering the order is reversed: select then act.
| Task | Vim | Helix |
|---|---|---|
| Delete word | dw | wd |
| Change inner word | ciw | miwc |
| Delete line | dd | xd |
| Visual line select | V | x (repeatable) |
| Multiple cursors | Plugin (vim-visual-multi) | Built-in |
| Fuzzy file finder | Plugin (telescope) | Built-in Space-f |
| LSP | Plugin (nvim-lspconfig) | Built-in |
| Surround | Plugin (vim-surround) | Built-in ms / ds / cs |
Written by Anshil Gandhi · June 2026
Helix editor · Byobu · macOS