Some notes on computer stuff

The big list of Vi[m]-like software

August 13, 2016
[vim]

Last updated: May 27, 2017

There are a number of similar lists already, but they usually lack grouping and miss pointing out things that are of interest for the author of this one. So based on those lists and other sources here's another one, which actually might be the biggest so far.

The listing is followed by some critique, which obviously comes from personal views and experience, so don't expect to agree with everything in that section.

The description below is organized in nested lists with occasional notes, which might not be extremely accurate and neutral. The order at each level is alphabetical. The descriptions are often taken from corresponding websites and thus might be biased.

The categorization is: really Vi[m]-like applications in groups, similar applications that don't form big groups ("Other" category), applications that remind or can be configured to be somewhat Vi[m]-like.

When licenses are listed below, "GPL" means GPL of any version and "MIT" also means any kind of BSD/X Consortium license.

  1. Browsers (notes)
  2. E-mail related
  3. Editors (notes)
  4. File managers
  5. Music players and MPD-clients (notes)
  6. PDF-viewers
  7. Plugins
  8. Other
  9. With similar/configurable bindings
  10. Notes
  11. Some of the sources

Browsers

Graphical browsers

  • Cream-Browser
    A Vim-like lightweight Web browser with Vimperator interface.
    • WebKit and GTK+ · GPL · C
    • looks abandoned
  • dwb
    Quite nicely done Vim-like browser, modulo some issues with memory.
    • WebKit and GTK+ · GPL · C
    • author claimed to abandon it, but there is some activity
  • jumanji
    The idea behind jumanji is a Web browser that provides a minimalistic and space saving interface as well as an easy usage that mainly focuses on keyboard interaction like Vimperator does.
    • WebKit and GTK+ · MIT · C
    • stale development
  • luakit
    Fast, small, WebKit based browser framework extensible by Lua.
    • WebKit and GTK+ · GPL · C + Lua
  • qutebrowser
    Qutebrowser is a keyboard-focused browser with a minimal GUI.
    • QtWebEngine and Qt5 · GPL · Python
    • see bizarre claims about software development in their FAQ
  • surf
    Ultra-minimalistic Web browser.
    • WebKit and GTK+ · MIT · C
    • supports XEmbed protocol (instead of tabs)
    • process per tab
  • Uzbl
    Web interface tools which adhere to the unix philosophy.
    • WebKit and GTK+ · GPL · C and Python
    • requires configuration (syntax wasn't really obvious)
    • process per tab
  • Vimprobable
    A lean stand-alone web browser optimised for full keyboard control (inspired by Vimperator).
    • WebKit and GTK+ · MIT · C
    • didn't have history and cookies (claimed that this is for security)
  • vimb
    Vim-like browser based on the WebKit engine and the GTK toolkit.
    • WebKit and GTK+ · GPL · C
  • xombrero/xxterm
    A minimalist's Web browser, which strives to be Vi-like for heavy keyboard users while maintaining traditional Web browser behavior.
    • WebKit and GTK+ · ISC · C
    • stale development

Text browsers

They aren't all that Vim-like, but seem to be popular among Vim users, so deserve to be listed.

  • lynx
    Text Web browser.
    • GPL · C
    • has Vi-like mode (-vikeys command-line option)
  • Netrik
    A simplistic text mode (character cell display) Web browser, similar to w3m or Lynx.
    • GPL · C
    • stale development
  • w3m
    w3m is a text-based Web browser as well as a pager like more' orless'.
    • MIT · C

E-mail related

  • mutt
    Mutt is a small but very powerful text-based mail client for Unix operating systems.
    • curses or S-lang · GPL · C
  • notmuch
    E-mail indexer/framework, which provides plugin for Vim.
    • CLI · GPL · C
  • sup
    A console-based e-mail client for people with a lot of e-mail.
    • curses · GPL · Ruby
  • wyrd
    A text-based front-end to remind, a sophisticated calendar and alarm program.
    • curses · GPL · OCaml

Editors

  • bvi
    A display-oriented editor for binary files (hex editor).
    • curses · GPL · C
  • bvi plus
    Fork of bvi with more features.
    • curses · GPL · C
  • elvis
    A free Vi clone for Unix and other operating systems.
    • terminal · Clarified Artistic License · C
  • ex-vi
    The traditional vi editor, ported to modern Unix systems.
    • terminal · MIT · C
  • Kakoune
    Interactive only editor inspired by Vim.
    • ncurses · public domain · C++
    • not really Vim-like judging by examples in the Readme
  • neovim
    Fork of Vim.
    • terminal · Vim's + Apache · C
    • has multiple incompatibilities with Vim
    • doesn't have graphical version
  • nvi
    Vi reimplementation.
    • terminal · MIT · C
  • nvi
    Node.js Vi clone.
    • terminal · CoffeeScript
    • looks abandoned
  • pyvim
    Pure Python Vim clone.
    • terminal · MIT · Python
    • not sure how Vim-like it is
  • spacemacs
    An Emacs-based editor that draws heavily from Vim keybindings.
    • Emacs · GPLv3 · Emacs Lisp
  • vile
    Vi clone with multiple buffers and similar features from Emacs added.
    • terminal + X Window System + Windows · GPL · C
  • Vim
    The ubiquitous text editor.
    • lots of environments · Vim's · C
  • vis
    A Vim-like text editor.
    • terminal · ISC · C + Lua
    • if I get it right, it's not really that Vim-like (e.g. lots of Lua is used) and is deliberately handicapped compared to Vim
  • WinVi
    Vi-like text and hex editor, which also tries to be Notepad compatible.
    • Windows · GPL · C
    • stale development
  • xvi
    The smallest full-function Vi text editor clone.
    • terminal · Emacs license · C
  • Yzis
    A Vi/Vim engine that can be integrated in graphical applications.
    • Qt (for editor) · GPL and LGPL library · C++
    • stale development

File managers

  • jvifm
    A try of implementing graphical Vi-like file manager in Java.
    • SWT · GPL · Java
    • two-pane kind of interface
    • abandoned
  • noice
    Small file browser.
    • curses · MIT · C
    • very minimalistic
  • ranger
    A console file manager with Vi key bindings, includes application association guessing tool.
    • ncurses · GPL · Python
    • Miller columns kind of interface
  • rover
    A small file browser that aims to be simple, fast and portable.
    • curses · public domain · C
  • Vide
    A graphical predecessor of vifm.
    • GTK+ · GPL · C
    • see buildable-version branch and supply CFLAGS=-std=gnu90 on modern GCC (C99 semantics of inline conflicts with GTK+1) if you want to try it out
    • abandoned many years ago
  • vifm
    File manager with Vi like keybindings/modes/options/commands/configuration, which also borrows some useful ideas from mutt.
    • curses · GPL · C
    • single/two-pane kind of interface

Music players and MPD-clients

  • cmus
    Not so minimalistic terminal player.
    • curses · GPL · C
  • herrie
    Minimalistic player with curses interface.
    • curses · MIT or GPL (it depends) · C
    • uses mplayer to play the music
    • main controls aren't very Vi-like
  • pms
    Probably the most Vi-like music player (MPD client).
    • curses · GPL · C++
    • is in constant rewrite process sometimes with very long pauses
    • the database is presented as one long list
  • Siren
    A text-based audio player for Unix-like operating systems, inspired by cmus.
    • curses · ISC mostly · C
  • vimpc
    Client for mpd with Vi-like key bindings.
    • curses · GPL · C++
    • using it wasn't very intuitive
  • vimus
    Terminal MPD client with Vim-like key bindings.
    • curses · MIT · Haskell
  • vitunes
    Console playlist/music database manager with Vi-like bindings.
    • curses · MIT · C
    • uses mplayer to play the music

PDF-viewers

  • apvlv
    A PDF/DJVU/UMD/TXT viewer under Linux/WIN32, which tries to behave like Vim.
    • GTK+ · GPL · C++
    • remember it being kinda raw, but usable
  • zathura
    A document viewer with plugin system.
    • GTK+ · MIT · C
    • had troubles installing newer version, so using the old one
    • search used to be one match at a time, later was changed to whole-document search, which is very slow on huge documents

Plugins

For Browsers

For Eclipse IDE

  • Eclim
    Two-way integration between Eclipse IDE and Vim.
    • GPL · Java + VimL
  • ExEdit
    Pluging for running Ex command in Eclipse IDE.
    • GPL · Java
  • Viable, viPlugin
    Plugins for Eclipse IDE.
    • Proprietary · Java
  • vimplugin
    An attempt to use the Vim editor inside the Eclipse IDE.
    • SWT · GPL · Java
    • might be outdated
  • vrapper
    Plugin for Eclipse IDE that supposedly preserves original keybindings.
    • GPL · Java

Miscellaneous

  • CubicleVim
    A COM Add-In to allow editing Microsoft Outlook messages.
    • MIT · Visual Basic
  • FakeVim
    Standard QtCreator plugin (the link is to the widget).
    • Qt · GPL · C++
    • was quite good implementation compared to many others
  • IDEAVim
    IntelliJ IDEA Vim-like plugin.
    • GPL · Java
  • jVi
    NetBeans IDE Vim-like plugin.
    • MPL · Java
    • one of the closest Vim-like emulation plugins, among those I've ever tried
  • Melodactyl
    Vim-like plugin for Sunbird.
    • MIT · JavaScript
  • Muttator, Teledactyl
    Vim-like plugins for Thunderbird.
    • MIT · JavaScript
  • vibreoffice
    LibreOffice plugin that adds Vim-like shortcuts and modality.
    • MIT · Visual Basic
  • viemu
    Plugins for Visual Studio, Xcode, Outlook, Word, SQL Server.
    • Proprietary
    • tried it for Visual Studio, it wasn't bad, but it left me unimpressed (quite long time ago)
  • viex
    NetBeans IDE Vim-like plugin.
    • GPL · Java
  • Vintage
    Vim-like plugin for Sublime Text.
    • MIT · Python
  • Vim Mode
    Plugin for Atom.
    • MIT · CoffeeScript
  • Vimpulse, eVil, Viper, Vim Mode
    Emacs plugins.
  • ViTunes
    A Vim plugin that allows you to control iTunes.
    • MIT · VimL, Ruby, Objective-C
  • VsVim
    Vim emulation layer for Visual Studio.
    • Apache · F#
  • XVim
    Xcode plugin for Vim keybindings.
    • MIT · Objective-C

Other

  • cgdb
    Console front-end to the GNU debugger.
    • ncurses · GPL · C
  • less
    Its controls are Vi-like.
    • terminal · GPL · C
  • Kommand
    AutoHotKey script, which provides cross-application Vim-like hot key solution.
  • ncdu
    Disk usage browser.
    • ncurses · MIT · C
  • newsbeuter
    The Mutt of RSS feed readers.
    • curses · MIT · C++
  • PIDA
    An IDE that allows integration of Vim/Emacs as editor.
    • GTK+ · MIT · Python
    • looks abandoned
  • sc
    Terminal spreadsheet editor.
    • curses · MIT · C
  • sc-im
    Improved version of sc.
    • curses · MIT · C
  • Termite
    A keyboard-centric terminal.
    • GTK+ and VTE · GPL · C++
  • tig
    Text-mode interface for git.
    • curses · GPL · C
  • TuDu
    Vi-like TODO manager.
    • curses · GPL · C++
  • vchatter
    Vi-like jabber client.
    • C++
    • stale development
  • ViPaint
    A modal, Vi like painting program.
    • JavaFX · GPL · Java
  • vlrtt
    Vim-like real-time tactics game.
    • MIT · Some scripting language
  • GNU Screen and tmux
    These terminal multiplexers can be configured to use some Vi-like keys, they also have command-line mode.
    • terminal · Screen is GPL, tmux is MIT · C
    • Screen has command classes, which allows implementing modes (e.g. resize mode)
  • MonoDevelop, GNOME Builder and KomodoEdit
    These seem to have (hard to find details) Vi-like editing mode.
  • SlickEdit, Kate and Editra
    These have Vi-like editing mode.
  • set -o vi
    Enables Vi-mode in bash (you can see current mode after adding set show-mode-in-prompt On to ~/.inputrc).
  • bindkey -v
    Enables Vi-mode in zsh
  • set editing-mode vi in ~/.inputrc
    Enables Vi-like mode in all applications that use readline.

With similar/configurable bindings

Image viewers

  • feh
    An X11 image viewer aimed mostly at console users.
    • X Window System · MIT · C
    • bindings can be configured to be like in Vi
  • pim
    Python image viewer with Vim-like keybindings.
    • GTK+ · MIT · Python
  • sxiv
    Simple X Image Viewer.
    • X Window System · GPL · C++
    • some bindings are like in Vi
  • xzgv
    Image viewer with at least j/k mapped.
    • GTK+ · GPL · C++

Document viewers

  • Evince
    A document viewer for multiple document formats.
    • GTK+ · GPL · C and a bit of C++
    • has h/j/k/l mappings
  • MuPDF
    A lightweight PDF and XPS viewer.
    • Various · AGPL · C
    • bindings are relatively Vi-like
  • Okular
    A universal document viewer developed by KDE.
    • KDE · GPL · C++
    • supports h/j/k/l

Window managers

  • euclid-wm
    Window manager with kind of Vim-like default mappings.
    • X Window System · MIT · C
  • howm
    A lightweight, X11 tiling window manager that is promises to behave like Vim (objects/motions/count).
    • X Window System · GPL · C
    • tries to follow Unix-way too much (see next item)
    • I used the word "promises" in the description because howm demonstrated severe issues with input processing when I gave it a try, drawing it useless
  • i3
    Tiling WM.
    • X Window System · MIT · C + Perl
    • it seems to be possible to define Vim-like modes and there are some predefined ones
  • wmii
    A small, scriptable window manager, with a 9P filesystem interface and an acme-like layout.
    • X Window System · MIT · C
    • has basic Vi bindings by default

Miscellaneous

  • Abiword has Vi-like bindings.
  • calcurse
    Terminal calendar and scheduling application with some Vim-like keys by default.
    • curses · MIT · C
  • CopyQ
    Clipboard manager with advanced features, which claims "support for simple Vim-like editor and shortcuts".
    • Qt · GPL · C++
  • ncmpc, ncmpcpp
    More MPD clients, which are somewhat Vim-like.
    • curses · GPL · ncmpc in C and ncmpcpp in C++
  • NetHack
    Rougue-like game with h/j/k/l.
    • C
  • rekonq
    A Web browser for KDE based on WebKit. Has basic Vi-like keys.
    • KDE + WebKit · GPL · C++
    • looks abandoned
  • rexima
    Vi-like audio-mixer alternative to alsamixer.
    • curses · GPL · C
  • rtv
    Reddit terminal viewer.
    • curses · MIT · Python
  • urxvt
    • X Window System · GPL · C++ + Perl
    • looks like it's possble to make it somewhat Vim-like (scrollback)
  • WeeChat
    IRC client.
    • curses · GPL · C
    • bindings can be configured to be like in Vi
  • xpdf
    Can be configured to be somewhat Vi-like (see).
    • X Window System and Motif · GPL · C++
  • There are patches for making some applications Vim-like:
  • DuckDuckGo, GitHub, gmail, and HabraHabr Web interfaces
    Somewhat Vi-like, but they do conflict with Vim-like browsers/plugins, which makes them significantly less useful.

Notes

Common notes

A lot of the listed software share the same set of issues with regard to emulation of Vi[m]-like features. The most important ones that cause inconvenience for seasoned Vim users are below.

These are the things, which ideally should be addressed in any Vi[m]-like software. Languages and licenses (there is only a fraction of proprietary software) are listed above so that people with relevant skills or no skills and desire to acquire them could help the projects they like. The contributions shouldn't be limited to these things, but they can be a start.

Combinations with control key

Authors usually forget about these in GUI applications, but some should be handled explicitly in terminal ones too. Here are the most commonly unimplemented shortcuts:

  • Control+[ – should be treated like Escape
  • Control+H – should behave as Backspace
  • Control+C – usually makes sense to treat it as Escape
  • Control+M / Control+J – should behave as Enter
  • Control+P / Control+N – should go up/down or forward/backward
  • Control+I / Control+O – can go forward/backward in history
Processing of key sequences

Some applications/plugins treat key sequences in command (that is Normal) mode differently compared to Vim. Prefixes of unmatched key sequences should be discarded automatically without requiring the user to press Escape (in some cases it only Backspace worked).

Search origin

The search (including when user presses n or N) should account for current position in the document/webpage, not the position of the last match found.

Notes on browsers

Unfortunately almost all of the enumerated browsers suffer from the same huge problem: WebKit. Even though browser interfaces are lightweight, this hog-like web-engine ruins everything by consuming tremendous volumes of the memory. Jokes about Firefox using too much memory couldn't be more wrong today. This gets even worse if you realize that this behaviour is by design and there is effectively no means to control memory consumption whatsoever (last time I checked, the only API method for this could free several hundred Kibibytes), compared to flexible configuration of Gecko (and hopefully Servo in the future if it will work properly at some point). So be very skeptical when authors of those browsers say that they are "fast", "small" and "lightweight", they just can't be such as long as they are running on WebKit. Of course it's not entirely fault of WebKit developers, the content of the modern Web is the reason number one, but WebKit developers don't really seem to care too much either (otherwise there would be means of controlling consumption of resources).

Browsers that run different tabs in different processes are creating even more issues. This inevitably leads to somewhat slower performance (due to address space switches, page faults and unshared objects of previously visited pages) and bigger memory consumption (heap isn't shared and this is where lots of small objects related to pages reside, which can't even be deduplicated between processes). This can be partially addressed by limiting number of processes or using smarter architecture (Firefox developers seem to be going this way).

Another issue you could have noticed is that most of the browsers are basically the same... Authors don't even bother providing different description and I'm not sure whether they can, this is how similar the browsers (actually browser interfaces) are. There isn't much point in having that many equally undermaintained and so much similar browsers. One can get an impression that authors of new such browsers have no idea about existing ones. It's sad to see quite a lot of efforts being spread among too many separate projects.

Most of the browsers have the same issues with blocking ads and keyboard navigation. It's hard to do this right in general, so feel free to blame those who put tons of JavaScript on pages that are meant to be simple (if you're a Web-developer and want to do a good job for Internet users, take my advise and use this and/or this site as your ideal, not that scroll-based thing with huge background animations and alike stuff that make Web harder to use).

Notes on editors

Some of the projects were created just to rewrite the code in some particular language which their author knows, the others are here to make stuff "modern", "define the future", "bring something into 21 century" (we're only 16% in it, but they already know what to do...), <put your favourite senseless phrase here> (and if you don't have any, go visit some corporate sites and pick one there, the first page you see will be full of them more often than not).

Some alternative editors do have interesting capabilities, but the drawbacks (in form of missing features or completely incompatible ones) usually outweigh those advantages for long term Vim users (that is if they took time to learn what Vim has to offer, otherwise the difference won't be that pronounced).

Notes on music players

As you can see, authors of this kind of software like to do very similar applications too. Unfortunately those that are more original and useful get abandoned faster...

It seems like all of them are missing integration with external tools. One might want to open a file manager or terminal at current location or process selected files with another application, haven't seen means for this in players I tried. UPD: @juef notes that cmus can do this.

Some of the sources