macOS system-wide Vim keybindings and modal editor.
ovim has two independent editing modes:
| In-Place Mode | Edit Popup |
|---|---|
| Simulates Vim motions by intercepting keystrokes and injecting native macOS key events. Works instantly in any app. Supports a subset of Vim commands. | Opens your actual Neovim installation in a terminal window with your full config and plugins. Edit complex text, then paste back with :wq. |
![]() | ![]() |
| Feature | In-Place Mode | Edit Popup |
|---|---|---|
| Vim support | Basic motions, operators, text objects (see list) | Full Neovim with all your plugins |
| User config | In app configuration for widgets, ignore list | Uses your ~/.config/nvim |
| Speed | Instant | ~500ms (terminal startup) |
| App compatibility | All apps (with Accessibility permission) | Apps with Accessibility API or browsers |
| Use case | Quick edits, modal navigation | Complex edits, regex, macros, multi-line |
brew install --cask tonisives/tap/ovim
Download the latest .dmg from the Releases page.
git clone https://github.com/tonisives/ovim.git
cd ovim
pnpm install
pnpm tauri build
# Built app in src-tauri/target/release/bundle/
Requires Rust, Node.js v18+, and pnpm.
The repository includes a tracked post-merge hook that builds the macOS app
from the primary checkout and installs it at ~/workspace/_tools/ovim.app:
pnpm hooks:install
The Git setting is shared with linked worktrees, but merges inside task
worktrees are skipped. Set OVIM_OUTPUT_DIR to choose another installation
directory, or set OVIM_SKIP_POST_MERGE_PACKAGE=1 to skip a build for one
merge. The hook does not restart a running app.
Alacritty is recommended. We also include Kitty, Terminal.app and WezTerm limited support.| In-Place Mode | Edit Popup |
|---|---|
| Press Caps Lock to toggle between Normal/Insert modes. Use Vim motions directly in any app. | Assign a shortcut to "Toggle Edit Popup" in Settings. Press it to open Neovim, edit, then :wq to paste back. |
Toggle between Normal and Insert modes with Caps Lock (configurable). In Normal mode, use Vim motions directly in any application.
Supported commands: hjkl, w/b/e, 0/$, gg/G, d/y/c + motions, dd/yy/cc, x, p/P, u/Ctrl+r, Visual mode, counts, and more. See docs/keybindings.md for the full list.

Display battery status, time, or selection info
Opens your actual Neovim installation in a terminal window. Your full config (~/.config/nvim) and all plugins are available.
How it works:
:wq to save and paste back, or close the window to cancelSupported terminals: Alacritty, Kitty, WezTerm, iTerm2, Terminal.app
Check out full docs and the official website
Please check logs at /tmp/ovim-rust.log and submit an issue
ClawTab - Schedule and manage Claude Code agents, shell scripts, and AI jobs from your macOS menu bar. Control everything remotely from your phone.
MIT License - see LICENSE for details.
Rust
74.2%
TypeScript
17.1%
CSS
4.2%
JavaScript
2.8%
macOS system-wide Vim keybindings and modal editor.
ovim has two independent editing modes:
| In-Place Mode | Edit Popup |
|---|---|
| Simulates Vim motions by intercepting keystrokes and injecting native macOS key events. Works instantly in any app. Supports a subset of Vim commands. | Opens your actual Neovim installation in a terminal window with your full config and plugins. Edit complex text, then paste back with :wq. |
![]() | ![]() |
| Feature | In-Place Mode | Edit Popup |
|---|---|---|
| Vim support | Basic motions, operators, text objects (see list) | Full Neovim with all your plugins |
| User config | In app configuration for widgets, ignore list | Uses your ~/.config/nvim |
| Speed | Instant | ~500ms (terminal startup) |
| App compatibility | All apps (with Accessibility permission) | Apps with Accessibility API or browsers |
| Use case | Quick edits, modal navigation | Complex edits, regex, macros, multi-line |
brew install --cask tonisives/tap/ovim
Download the latest .dmg from the Releases page.
git clone https://github.com/tonisives/ovim.git
cd ovim
pnpm install
pnpm tauri build
# Built app in src-tauri/target/release/bundle/
Requires Rust, Node.js v18+, and pnpm.
The repository includes a tracked post-merge hook that builds the macOS app
from the primary checkout and installs it at ~/workspace/_tools/ovim.app:
pnpm hooks:install
The Git setting is shared with linked worktrees, but merges inside task
worktrees are skipped. Set OVIM_OUTPUT_DIR to choose another installation
directory, or set OVIM_SKIP_POST_MERGE_PACKAGE=1 to skip a build for one
merge. The hook does not restart a running app.
Alacritty is recommended. We also include Kitty, Terminal.app and WezTerm limited support.| In-Place Mode | Edit Popup |
|---|---|
| Press Caps Lock to toggle between Normal/Insert modes. Use Vim motions directly in any app. | Assign a shortcut to "Toggle Edit Popup" in Settings. Press it to open Neovim, edit, then :wq to paste back. |
Toggle between Normal and Insert modes with Caps Lock (configurable). In Normal mode, use Vim motions directly in any application.
Supported commands: hjkl, w/b/e, 0/$, gg/G, d/y/c + motions, dd/yy/cc, x, p/P, u/Ctrl+r, Visual mode, counts, and more. See docs/keybindings.md for the full list.

Display battery status, time, or selection info
Opens your actual Neovim installation in a terminal window. Your full config (~/.config/nvim) and all plugins are available.
How it works:
:wq to save and paste back, or close the window to cancelSupported terminals: Alacritty, Kitty, WezTerm, iTerm2, Terminal.app
Check out full docs and the official website
Please check logs at /tmp/ovim-rust.log and submit an issue
ClawTab - Schedule and manage Claude Code agents, shell scripts, and AI jobs from your macOS menu bar. Control everything remotely from your phone.
MIT License - see LICENSE for details.
Rust
74.2%
TypeScript
17.1%
CSS
4.2%
JavaScript
2.8%