Your windows, in Vim's vocabulary.
Vimdow is a keyboard-driven window manager for macOS. Press one shortcut to enter command mode, then move, resize, snap, and switch windows with h, j, k, l, counts, and undo. The mouse stays where it is.
What the demo shows
- Control–Option–A enters command mode.
- l moves the window right, one step per press.
- 12j moves it down twelve steps.
- Option–l widens it, keeping the top-left corner in place.
- zz centers it on the display.
- Control–W, then H fills the left half.
- u undoes the last change.
- Escape returns to normal mode.
Why Vimdow
Vimdow was written by someone who has used Vim since 1998 and would rather not reach for the mouse. Most of a Mac can be driven from the keyboard, but window management could not: nudging a window a few points, or moving it to another display, always meant leaving the home row.
The first version, in 2013, was a small Objective-C app that fixed exactly that for one user. Instead of new shortcuts to learn, it mapped window operations onto the Vim vocabulary: hjkl to move, a count to repeat, 0 and $ for the edges, gg and G for top and bottom, zz to center, u to undo, / to search. In 2026 it was rewritten in Swift 6 with a tested command engine.
Vimdow is modal, like Vim. It is not a tiling window manager and does not arrange windows for you; it makes arranging them yourself fast. It is one person's preference, shared for anyone whose hands have the same habits.
How it works
Enter command mode
Press ⌃⌥A and release. Until you leave, keys go to Vimdow instead of the frontmost app.
Move and resize
h j k l move the focused window by a configurable step. Type a count to repeat, hold a key to glide, add Option or Shift to resize.
Leave
Press esc or . to return to normal mode. Your typing goes back to the app.
What it does
Move and resize with counts
Steps are configurable, keys repeat while held, and every change glides into place. 12j moves twelve steps; Option and Shift resize from opposite corners.
Snap and tile
0, $, gg, G, and zz put a window at an edge or the center, keeping its size. Control–W with H, J, K, L, or O fills a half or the whole display.
Undo and redo, per window
u and Control–R step through each window's own history of moves, resizes, snaps, and display changes, even after you dragged it by hand.
Displays that remember
Control–Option–K and L send a window to the next display. Coming back restores the frame it had there.
Switch without hunting
Q shows up to nine numbered windows; type a digit to focus one. / searches by application name, and n and N cycle through the matches.
Yours to tune
Set separate move and resize steps, choose whether resizing stops at display edges, turn the glide off, and rebind the five global shortcuts.
Command mode at a glance
Enter with Control–Option–A (the default). Digits typed before a command repeat it. Two keys shown together are pressed one after the other.
| Keys | Action |
|---|---|
| hjkl | Move left, down, up, right by one step |
| ⌥hjkl | Resize, keeping the top-left corner fixed |
| ⇧hjkl | Resize, keeping the bottom-right corner fixed |
| 12j | Repeat: 12j moves down twelve steps |
| u/⌃r | Undo / redo the focused window's last change |
| 0/$ | Move to the left / right edge of the display |
| gg/G | Move to the top / bottom edge |
| zz | Center on the display |
| ⌃wHJKL | Fill the left / bottom / top / right half |
| ⌃wo | Fill the display |
| q1–9 | Focus a numbered window; Q again shows the next nine |
| //n/N | Search by application name; next / previous match |
| ⌃⌥k/⌃⌥l | Move to the previous / next display |
| , | Open Settings |
| esc/. | Exit command mode |
Keys follow physical ANSI positions, as in Vim, so they stay in the same place on JIS, Korean, and other layouts.
Get Vimdow
Requires macOS 14 or later and Accessibility permission.
There is no binary download yet. Vimdow is built from source with Xcode 27 and XcodeGen. The README walks through setup, building, and signing so that Accessibility permission survives rebuilds.
About Accessibility permission
macOS requires it for any app that moves another app's windows. Vimdow uses it for that and nothing else: no network access, no analytics, nothing leaves your Mac.