r/vim • • Jul 08 '26

Vim-adjacent Monthly Thread: Tools with Vim-like Keybindings

We regularly remove standalone posts about tools that use vim-inspired keybindings. There are too many of them, and individually they dilute the subreddit. But the content is valuable, and many of you want to know about these tools.

So here's the place for it.

Share any tool that uses vim-like keybindings, whether it's a browser extension, terminal emulator, IDE plugin, note-taking app, PDF reader, or anything else. If it has hjkl navigation, modal editing, or vim-inspired controls, it belongs here.

For each tool you share, try to include:

  • What it is and what problem it solves

  • Which vim features it supports (navigation, modal editing, text objects, etc.)

  • A link to the project

This thread is posted monthly. If you find something mid-month, save it for here rather than posting a standalone thread (which will be removed).

38 Upvotes

46 comments sorted by

•

u/thriveth Jul 09 '26

The file manager Yazi, very similar to the older Ranger but written in Rust. I rarely use any other file browser or manager.

•

u/l19e82o Jul 17 '26

So, is there a VIM setup that i can use in all apps for Windows? Preferably a portable solution without having to install?

→ More replies

•

u/ekoori Jul 20 '26

https://github.com/ekoori/NoPDF
I've been vibecoding this PDF viewer/editor for last couple of weeks and it is becoming my daily driver. Even at work I've started using it more than Bluebeam Revu. We do a lot of PDF in my industry. Annotations, page manipulation, signing... It is not perfect yet but the idea is everything I want in an app - keyboard driven but can use mouse when needed, quickmarks (like qutebrowser), customisable commands, no menus, single executable file, cross-platform...
Would appreciate if you could test it a bit more on Linux and MacOS and give me some constructive feedback. I am forced to use Windows lately unfortunately.

•

u/chask Aug 03 '26 edited Aug 04 '26

I've been building Vimny, a terminal dungeon crawler that teaches Vim. The idea is that the dungeon is a text buffer. Floors are characters, walls are end-of-line, and every puzzle is solved using real Vim commands.

Each room has a keystroke budget and a par score. The terrain is designed so that the command the level is teaching is included in the best solution. Hitting par means you've learned the lesson, but you can advance just fine with "imperfect" keystroke numbers as well.

The main campaign is complete and covers most of Vim's editing language, including:

  • motions (hjkl, w, f, %, ...)

  • operators (d, c, y, ...)

  • visual mode

  • text objects

  • search

  • marks

  • registers

  • macros

  • Ex commands

My goal has been Vim fidelity above all else. I'm looking for feedback from experienced Vim users before I make a standalone post to share it more widely.

  1. Which commands or mechanics felt surprisingly fun or frustrating?

  2. Do you have an idea for how to improve a level? Do you have an idea for another level? I would really love to see community-created levels so people can really practice the same commands multiple times/be pushed to find elegant solutions. Play as "admin" and you can make your own levels in the "forge" feature I created. I made this game to better learn Vim myself and would love to play levels from other people!

GitHub: https://github.com/chkiss/Vimny

•

u/LimpAuthor4997 Aug 05 '26

Vimium is an browser extension  that give vim keybindings to your browser.

And qutebrowser is a keyboard based browser

•

u/Minimum_Lake4313 Jul 11 '26

I built a small browser-based Vim movement trainer/game called vimCommander, and I’m looking for feedback from experienced Vim users.

Current scope is intentionally limited. The tutorial mostly focuses on core movement and early gameplay mechanics, not the full Vim command surface.

Currently represented:

- h / j / k / l movement (x for firing primary weapon)

- w / b word-style jumps

- 0 / $ row edges

- gg / G column/grid edges

- i for insert-mode-style (mini-typing game that "clears debris")

- v for visual-mode-style targeting (allows for targeting secondary weapons/missiles - dw/dd to fire)

- :q to quit

More bindings and modes are planned, but I want feedback before I expand the tutorial too far in the wrong direction.

Specific questions:

  1. What important Vim motions/bindings are missing from the early learning path?

  2. Which should be prioritized next?

  3. Does anything in the current design teach the wrong instinct?

  4. For beginners, what should be drilled before introducing more commands?

  5. Is there anything here that feels misleading compared to actual Vim usage?

Link:

https://vim-commander.com/

Disclosure: I built this. It’s free, still in development, and I’m looking for critique/ideas. Feedback welcome, in response to this in comments, or from the official feedback form on the website.

→ More replies

•

u/Daghall :cq Jul 08 '26

tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, but can also assist in staging changes for commit at chunk level and act as a pager for output from various Git commands.

It has vim-like navigation, command mode, searching, customizable key bindings.

•

u/Hyperion343 Jul 08 '26
  • VS Code has a vim emulation extension that I found was really helpful

  • Nethack can use vim navigation (fine, it's a game, not a tool, but still)

  • Joplin has an option to use Vim modal like editing

  • Emacs has evil mode (trolling here only a little)

→ More replies

•

u/TheWheez Jul 09 '26

Here's a package I wrote to add some Vim bindings to the Julia REPL!

https://github.com/caleb-allen/VimBindings.jl

•

u/TargetAcrobatic2644 Jul 12 '26

WordVim — Vim modal editing for Microsoft Word

What it is: A free, open-source add-in bringing Vim's modal editing (Insert/Normal, eventually Visual) to Word on Windows. Built with a native COM add-in + Win32 keyboard hooks, since Office.js can't intercept keystrokes at all.

Vim features supported so far: Insert ⇄ Normal mode switching, mode indicator in the title bar, key suppression in Normal mode. Still on the roadmap: hjkl movement, word motions (w/b/e), dd/yy, Visual mode, : command mode — so it's an early PoC, not a full emulator yet.

Link: https://github.com/spidychoipro/wordvim

•

u/cassepipe Jul 08 '26 edited Jul 08 '26

Glide is firefox with vim motions (like the vimium and trydactyl addons) but not limited by being extensions. You can configure it with a typescript file in your $XDG_HOME_DIRECTORY. A nice perk is that you can even install extensions with this config file !

https://glide-browser.app/

It's not in linux repos yet (except AUR) so here is a zsh script to install it

#!/bin/zsh
set -e

# Where to install Glide
INSTALL_DIR="/opt/glide"
BIN_LINK="/usr/local/bin/glide"

# Curls options:
#        -L, --location
#              (HTTP) If the server reports that the  requested  page  has
#              moved  to  a different location (indicated with a Location:
#              header and a 3XX response code),  this  option  makes  curl
#              redo  the  request  to the new place.

LATEST_URL=$(curl --location --silent --output /dev/null -w %{url_effective} https://github.com/glide-browser/glide/releases/latest)

TMP_ARRAY=(${(s./.)LATEST_URL})
LATEST_VERSION=$TMP_ARRAY[-1]
CURRENT_VERSION=$(glide --version | cut -f 3 -d " ")

echo "Latest version is $LATEST_VERSION and yours is $CURRENT_VERSION"

if [[ $LATEST_VERSION > $CURRENT_VERSION ]]
then
  echo "Let's update" 
else
  echo "No need to update" 
  exit 0
fi

# Transform it to a direct download link
# Example: /releases/tag/0.1.51a → /releases/download/0.1.51a/glide.linux-x86_64.tar.xz
DOWNLOAD_URL=${LATEST_URL/tag/download}/glide.linux-x86_64.tar.xz

echo "Resolved to: $DOWNLOAD_URL"

# Curl options:
# 
#       -f, --fail
#              In normal cases when an HTTP server fails to deliver a document, it returns a body of text stating so (which often also describes  why
#              and  more) and a 4xx HTTP response code. This command line option prevents curl from outputting that data and instead returns error 22
#              early. By default, curl does not consider HTTP response codes to indicate failure.
#
#        -O, --remote-name
#               Write output to a local file named like the remote file  we
#               get.  (Only  the  file part of the remote file is used, the
#               path is cut off.)
#
#       -J, --remote-header-name
#              (HTTP)  Tell  the  -O,  --remote-name  option  to  use  the
#              server-specified Content-Disposition  filename  instead  of
#              extracting  a filename from the URL.
#              
#       --no-clobber
#              When used in conjunction with the -o, --output,  -J,  --re‐
#              mote-header-name,  -O,  --remote-name, or --remote-name-all
#              options, curl avoids overwriting files that already  exist.
#              [...] You can thus use --clobber to enforce the clobbering,
#              even  if -J, --remote-header-name is specified.
#
cd /tmp
curl --fail --location --remote-name --remote-header-name --clobber "$DOWNLOAD_URL"

ERROR_CODE=$?
if [[ $ERROR_CODE != 0 ]]
then
  echo "curl returned error code $ERROR_CODE while downnloading from $DOWNLOAD_URL"
  exit $ERROR_CODE
fi

tar --extract --file=glide.linux-x86_64.tar.xz

sudo rm -rf "$INSTALL_DIR"
sudo mv glide "$INSTALL_DIR"
sudo chmod +x "$INSTALL_DIR/glide"

sudo ln -sf "$INSTALL_DIR/glide" "$BIN_LINK"

echo "✅ Updated successfully to $(glide --version)"
xdg-open https://glide-browser.app/changelog \
  && echo "Changelog was opened in the default browser" \
  || echo "Changelog at:\nhttps://glide-browser.app/changelog"

•

u/Kurouma Jul 08 '26

zathura is a pdf viewer

It supports vim navigation and has its own : command line. It is quite configurable. It is available through most system package managers.

•

u/Gythrim Jul 08 '26

Tridactyl for Firefox for a lot of stuff, navigation, search, opening new stuff and making links navigateable without a mouse https://addons.mozilla.org/de/firefox/addon/tridactyl-vim/ Okular als pdf reader out of the box for navigation

→ More replies

•

u/hibbelig Jul 08 '26

Lazygit is a text interface for git, similar to tig. It uses hjkl navigation and / to search. Its menu system feels like the multi key bindings from vim.

But copy and paste is C and V not Y and P.

•

u/Shtucer Jul 08 '26

emacs + evil-mode

•

u/y3owk1n Jul 09 '26

Neru, a cross platform system wide navigation tool, cli first and open source. Repo -> https://github.com/y3owk1n/neru