Vimdow GitHub

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/vimdow

Download ZIPSource on GitHub

What the demo shows

  1. Control–Option–A enters command mode.
  2. l moves the window right, one step per press.
  3. 12j moves it down twelve steps at once.
  4. Option–l widens it, keeping the top-left corner in place.
  5. zz centers it on the display.
  6. u undoes the last change.
  7. Control–W, then H, fills the left half.
  8. Q numbers the windows; 2 switches to the second one and leaves command mode.
  9. Back in command mode, Control–W, then L, fills the right half with it.
  10. 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

  1. Enter command mode

    Press ⌃⌥A and release. Until you leave, keys go to Vimdow instead of the frontmost app.

  2. 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.

  3. Leave

    Press esc or . to return to normal mode. Your typing goes back to the app.

What it does

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.

KeysAction
hjklMove left, down, up, right by one step
⌥hjklResize, keeping the top-left corner fixed
⇧hjklResize, keeping the bottom-right corner fixed
12jRepeat: 12j moves down twelve steps
u/⌃rUndo / redo the focused window's last change
0/$Move to the left / right edge of the display
gg/GMove to the top / bottom edge
zzCenter on the display
⌃wHJKLFill the left / bottom / top / right half
⌃woFill the display
q1–9Focus a numbered window; Q pages; three seconds idle cancels
mMark / unmark the focused window and exit command mode
⌃⌥[/⌃⌥]Cycle marked windows, also available in normal mode
⌃⌥dDim every window except the focused one, also available in normal mode
//n/NSearch by application name; next / previous match
⌃⌥k/⌃⌥lMove 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

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

  1. Move Vimdow.app from the downloaded zip to Applications.

  2. Open it, then allow it in System Settings → Privacy & Security → Accessibility.

  3. Press ⌃⌥A to enter command mode.

Or install with Homebrew, then open Vimdow and grant Accessibility permission:

brew install rath/tap/vimdow

Full changelog

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.