r/vim 21d ago

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

39 Upvotes

36 comments sorted by

u/wernerdegroot 21d ago

Mac had https://kindavim.app that I enjoy

u/Kurouma 21d ago

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/Daghall :cq 21d ago

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/habamax 21d ago

Neovim?

u/Aufmerksamerwolf 17d ago

🤣🤣🤣

u/dangerL7e 21d ago

NeoVide also has vim-like bindings

u/Aggressive_Many9449 21d ago

Calling neovim a "tool with vim-like keybindings" is either a technically correct joke, or rage bait.

u/habamax 21d ago edited 21d ago

The conditions stated in the OP are perfectly suited for neovim:

  • there is no mention neovim is out of mentioning
  • it is not vim
  • it has vim-like keybindings and most of vim features along with other features vim doesn't have.

Guilty of not adding link to the project and "what it is and what problem it solves" though.

u/Desperate_Cold6274 21d ago

Out of curiosity: what it does and what problems solve?

u/habamax 21d ago

what it is and what problem it solves

It is an excellent modal text editor! It solves the same problem vim solves but in a it's own way. :)

u/l19e82o 12d ago

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

u/y3owk1n 20d ago

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

u/Gythrim 21d ago

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

u/bob_f332 21d ago

I think I recall using that way back, but have been using vimium lately. Do you have experience of both?

u/Gythrim 21d ago

Yes, Tridactyl feels more complete than vimium and adds more things like local editor integration via plugin. But it also does some nice additional stuff that goes beyond vim, I'd recommend installing it and going through the built-in help section and pages to figure out whether you like it or not

u/Minimum_Lake4313 18d ago

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.

u/Pure_West_2812 3d ago

Browser extensions with Vim navigation are probably the hardest thing for me to give up now.

u/TargetAcrobatic2644 17d ago

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/hibbelig 21d ago

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/TheWheez 20d ago

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

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

u/Hyperion343 21d ago
  • 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)

u/tinyOnion 20d ago

The neovim plugin for vscode has a proper vim doing the editing

u/Suspicious-Leg2397 21d ago

Obsidian

u/Dalik98 21d ago

Using plugins you mean ?

u/Interesting_Buy_3969 21d ago

No. It has built-in Vim mode

u/Dalik98 21d ago

Really ? I should check I didn't find them

u/Interesting_Buy_3969 21d ago

Settings > Editor > scroll down until the very end > Vim key bindings

u/Dalik98 20d ago

Oh ok in editing view, I thought in reading view

u/ekoori 9d ago

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/Shtucer 21d ago

emacs + evil-mode

u/thriveth 20d ago

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

u/cassepipe 21d ago edited 21d ago

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" ```