For macOS 14 and later
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 the other Vim habits already in your fingers. The mouse stays where it is. It also opens apps by name and can dim everything but the window you are using.
Install with Homebrew
brew install rath/tap/vimdowWhat the demo shows
- Control–Option–A enters command mode.
- l moves the window right, one step per press.
- 12j moves it down twelve steps at once.
- Option–l widens it, keeping the top-left corner in place.
- zz centers it on the display.
- u undoes the last change.
- Control–W, then H, fills the left half.
- Q numbers the windows; 2 switches to the second one and leaves command mode.
- Back in command mode, Control–W, then L, fills the right half with it.
- 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. Almost everything on a Mac could be done from the keyboard except managing windows: nudging one a few points, or sending 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 the 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, published 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, and 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 followed by H, J, K, or L fills half the display; followed by O, all of it.
Undo and redo, per window
u and Control–R step through each window's own history of moves, resizes, snaps, and display changes, even if you have since dragged it by hand.
Displays that remember
Control–Option–K or L sends a window to the next display. Bring it back and it lands exactly where it was.
Switch between your chosen windows
Press M in command mode to mark a window, then Control–Option–[ for the previous mark or Control–Option–] for the next. Cycle in registration order, wrapping at either end. The destination pulses twice, for 0.18 seconds each. Marks last until Vimdow quits; hidden windows rejoin when visible. An optional tmux integration shows pane numbers after marked switches. Enable it in Settings; it is off by default.
Switch without hunting
Q shows large white numbers in translucent black badges at window centers. Overlapping badges spread out; selection cancels after three seconds without keyboard input. Type a digit to focus a window, or use / to search and n and N to cycle matches.
Launch without Spotlight
Type an application or System Settings pane name and press Return. Vimdow scans /Applications, the system application folders, and System Settings panes, and understands initials such as gc for Google Chrome. It remembers what you picked and shows it first for the same query. The shortcut is unbound until you record one, such as Option–Command–Space, in Settings.
Dim everything else
Control–Option–D lays a translucent black layer over every window except the one you are working in, on every display, like HazeOver. The bright window follows your clicks and app switches. Set the intensity in Settings → General → Dimming. Full-screen Spaces stay untouched.
Yours to tune
Set separate move and resize steps, choose whether resizing stops at display edges, turn the glide off, and rebind the nine global shortcuts. You can also start Vimdow automatically at login. Command–W closes Settings.
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 pages; three seconds idle cancels |
| m | Mark / unmark the focused window and exit command mode |
| ⌃⌥[/⌃⌥] | Cycle marked windows, also available in normal mode |
| ⌃⌥d | Dim every window except the focused one, also available in normal mode |
| //n/N | Search by application name; next / previous match |
| ⌃⌥k/⌃⌥l | Move to the next display |
| , | Open Settings |
| esc/. | Exit command mode |
Keys are bound to physical ANSI positions, so they stay in the same place on JIS, Korean, and other layouts.
Frequently asked questions
How is Vimdow different from Rectangle or a tiling window manager?
Rectangle and similar apps give each layout its own global shortcut, and tiling window managers such as yabai and AeroSpace arrange windows for you. Vimdow does neither. One shortcut enters command mode, where a handful of Vim keys move, resize, snap, and undo, and no window moves until you ask.
Do I need to know Vim?
No. Four keys cover most of it: h, j, k, and l move a window left, down, up, and right. Counts, gg, zz, and the rest are there when you want them, and the cheat sheet above lists every key.
Does it work with Korean, Japanese, and other keyboard layouts?
Yes. Command-mode keys are bound to physical key positions rather than characters, so h, j, k, and l work whatever input source is active. Searching by app name accepts Korean, Japanese, and other input methods.
Can I change the shortcuts?
You can rebind or clear the nine global shortcuts in Settings, including Control–Option–A for command mode and Control–Option–[ and Control–Option–] for previous and next marked windows. Keys inside command mode are fixed, so they always mean the same thing.
Does it work with every app?
It works with any app whose windows macOS lets other apps move, which is nearly all of them. When an app refuses a move or resize, for example a window with a fixed size, Vimdow beeps instead of forcing it.
Can it dim everything except the window I am using?
Yes. Control–Option–D lays a translucent black layer over every other window on every display, like HazeOver, and the bright spot follows the focus as you click or switch apps. Set how dark it gets under Settings → General → Dimming; press the shortcut again to stop.
Can Vimdow start automatically when I log in?
Yes. Enable Open Vimdow at login under Settings → General → Startup. It is off by default. macOS manages this setting in System Settings → General → Login Items, and Restore Defaults leaves it unchanged.
How do I update Vimdow?
Quit Vimdow, then download the latest Vimdow.zip and replace the app in Applications. If installed with Homebrew, run brew update and brew upgrade --cask vimdow. Settings stay; window marks reset on restart. Vimdow never checks for updates itself.
Get Vimdow
Vimdow 1.3.1 supports macOS 14 or later, on Apple silicon and Intel Macs. The app is signed with Developer ID and notarized by Apple.
Download Vimdow.zipRelease notesBuild from source
Move Vimdow.app from the downloaded zip to Applications.
Open it, then allow it in System Settings → Privacy & Security → Accessibility.
Press ⌃⌥A to enter command mode.
Or install with Homebrew, then open Vimdow and grant Accessibility permission:
brew install rath/tap/vimdow
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.