HyprVim brings the power of Vim keybindings and motions to your Hyprland GUI desktop environment.
HyprVim.Demo.mp4
Think of it as a lightweight, system-wide Vim mode for all of your GUI applications.
π Full Reference: For a complete, searchable reference of all features, visit the Wiki.
π° Latest News: For the latest release information, visit the News.
Built on Hyprlandβs native submap system, uses standard GUI application keyboard shortcut macros to emulate Vim-style navigation and text editing.
- π¦ Vim Modes -
NORMAL,INSERT,VISUAL,V-LINE, andCOMMANDmodes - π§ Navigation - Character (
hjkl), word (w/b/e), line (0/$), paragraph ({}), page (Ctrl+d/u), document (gg/G) - βοΈ Operators - Delete (
d), change (c), yank (y) with motion and text object support - π Text Objects - Inner/around word (
iw/aw), inner/around paragraph (ip/ap) - π’ Count Support - Repeat any motion or operator (e.g.,
5j,3dw,2yy) - π Marks - Save and jump to positions across workspaces/monitors (
m{mark},`{mark}) - π Registers - Multi-clipboard with named (
"a-z) and special registers ("0,"_,"/) - π Find/Search - Interactive search (
/,?,f,t,*,#) with next/previous (n/N) - π Replace - Character (
r) and string replacement (R) - π Surround - Wrap text with pairs (
gsfor word,Sin visual) - supports(),{},[],<div>, or custom with spaces - β©οΈ Undo/Redo - Standard undo/redo (
u,Ctrl+r) - β¨οΈ Command Mode - Execute commands (
:w,:q,:split,:float,:workspace,:reload, etc.) - πΊοΈ Which-Key HUD - Shows all keybinds for submaps on entry. Press
SPACEto toggle (requireseww) - Open Vim/Nvim Anywhere - Press
SUPER + Nto open selected text in Vim/Nvim for complex editing. Save/close to paste.
Warning
Just like real Vim, you also need to know how to exit HyprVim: press SUPER + ESC or ALT+ESC
All extra configs for a better global Vim experience.
To use the extras, refer to their respective documentation.
| Tool | Description | Extra |
|---|---|---|
| Hyprland Basics | Hyprland keymap kickstart config for HyprVim (Resize, Move, Windows, etc) | extras/hyprland-basics |
| Keyd | System-wide key remaps and tap/hold layers | extras/keyd |
| Thunderbird | Keybinds for Vim driven navigation | extras/thunderbird |
| Vimium | Vim-style navigation for web browsers | extras/vimium |
| Waybar Submap | Waybar submap visual Indicator | extras/waybar |
| WhichKey | WhichKey like display built using eww to see keybinds for submaps |
wiki/whichkey |
| Wl-kbptr | Keyboard-driven mouse cursor control on Wayland | extras/wl-kbptr |
If you'd like an extra config added, raise a feature request or put one together and send a pull request.
| Name | Description |
|---|---|
| Hyprland | Wayland compositor |
| Bash | For shell scripts |
wl-clipboard |
Wayland clipboard utilities (wl-copy, wl-paste) |
jq |
JSON processor for parsing hyprctl output |
| A terminal emulator | For the gh help viewer |
| A prompt tool | One of: rofi, wofi, tofi, fuzzel, dmenu, zenity, or kdialog |
eww (optional) |
Widget system for the which-key HUD |
socat (optional) |
Required by the which-key daemon to listen on Hyprland's event socket |
- Clone this repository into your Hyprland config directory:
cd ~/.config/hypr
git clone https://github.com/uhs-robert/hyprvim.git- Add the following line to your
~/.config/hypr/hyprland.conf:
source = ~/.config/hypr/hyprvim/init.conf-
Set up any settings in
~/.config/hypr/hyprvim/settings.conf, see configuration -
Reload your Hyprland configuration:
hyprctl reloadTip
Verify installation: Press SUPER + ESC and you should enter NORMAL mode. Press gh to view help.
To update your installation with the latest features and fixes:
cd ~/.config/hypr/hyprvim
git pull
hyprctl reloadStay informed about new releases:
- Watch the repository - Click "Watch" β "Custom" β Check "Releases" on this page
- Check the releases page - View all releases at https://github.com/uhs-robert/hyprvim/releases
- RSS Feed - Subscribe to releases:
https://github.com/uhs-robert/hyprvim/releases.atom
Note
Each release includes a detailed changelog with new features, improvements, and bug fixes.
π Full Reference: For a complete usage guide, visit the Wiki.
Press SUPER + ESCAPE (or your configured leader key + activation key) to enter NORMAL mode.
- Enter NORMAL mode:
SUPER + ESC - See all keybindings: Press
ghto show help - Navigate: Use
hjkl,w,b,eto move around - Select text/items: Press
vfor visual mode, then navigate to select - Edit: Use operators like
d,c,ywith motions or in visual mode - Return to insert: Press
i,a, or other insert commands - Exit Vim mode: Press
SUPER + ESCagain
Save and jump to window positions across workspaces and monitors using m{mark} to set, `{mark} to jump.
π Learn more: Marks wiki
Multi-clipboard management with named registers ("a - "z) and special registers ("" unnamed, "0 yank, "_ black hole). Use "{register}{operation} (e.g., "ayy to yank to register a, "ap to paste from register a).
π Learn more: Registers wiki
Press : in NORMAL mode to execute Vim-style commands. Common commands: :w (save), :q (quit), :wq (save & quit), :split (split window), :float (toggle floating), :ws <num> (switch workspace), :reload (reload Hyprland config).
π Learn more: Command Mode wiki
HyprVim includes pragmatic pass-through bindings in NORMAL mode for better GUI interaction: TAB, RETURN, CTRL+V/X/A/S/W/Z.
This enables dialog navigation and clipboard operations without constantly switching to INSERT mode.
Warning
These may trigger unwanted actions in text editors. Use i to enter INSERT mode when editing text, or create override bindings by sourcing a custom config after HyprVim.
HyprVim sets a few global defaults in ./init.conf.
You can override any of these settings by creating your own ./settings.conf in the hyprvim directory:
Tip
To override or append keys in each submap, be sure to source your overriding keybindings after HyprVim
- Copy the example config:
- Edit
./settings.confto override any defaults from./init.conf
cd ~/.config/hypr/hyprvim
cp settings.conf.example settings.confπ Learn more: Configuration wiki
Removing HyprVim from your system is a three step process:
- Remove the source line from your
~/.config/hypr/hyprland.conf:
# Remove this line:
source = ~/.config/hypr/hyprvim/init.conf- Delete the HyprVim directory:
rm -rf ~/.config/hypr/hyprvim- Reload your Hyprland configuration:
hyprctl reloadNote
Any temporary files created by HyprVim for state management are automatically cleaned up on reboot.
To see which Vim mode you're currently in, add the Hyprland submap module to your Waybar configuration.
This displays the active submap in your status bar.
WhichKey requires eww to display. It is an optional feature that is disabled by default.
We highly recommend using WhichKey to learn the keybindings. It also displays active marks and works with your other submaps too.
You can find the demo and setup instructions in the Wiki for WhichKey.
On that note, check out all the extras too! This is just the tip of the iceberg, you never know what you might find.
- No macros
- No visual block mode (
Ctrl+vorCtrl+q) - Limited text object support (word and paragraph only)
- Registers/marks are stored in tmpfs (not persistent across reboots)
- Find operations use interactive prompts and application find dialogs
- Effectiveness depends on application supporting standard keyboard shortcuts
Warning
HyprVim is designed for GUI applications first. Terminals behave differently.
Terminals often use a different set of keyboard shortcuts so motions may not work as expected.
However shells (bash, zsh, etc) usually ship a vi mode. Try using that instead.
If you must use it in the shell, some actions may work but your mileage will vary.
You can extend HyprVim by adding new submaps or referencing the submaps in your own keybinds after sourcing HyprVim as well as using HyprVim scripts in your own keybinds. Some examples of this are included in the Hyprland basics.
If you make an enhancement that you think would benefit the community then please submit a pull request and I'll be happy to review it.
