The ultimate list of which programs support Vim-like keybindings natively, or how they can be added with extensions. A collaborative project.
Shell
2,620
405 commits
updated Oct 10, 2026
including these top contributors:
[!NOTE] 🚀 PRs are very welcome
Once your fingers have learned to speak Vim, they don't want to speak anything else! It's simply a very effective way of navigating, creating, and editing text. Thus, it's natural that one would like to get Vim-like keybindings in as many programs we use as possible.
The intention of this collaborative list is to:
ctrl/cmd + f.There are, of course, already lists like this one floating around on the internet (see Acknowledgments). While they are great, the issue is that they are not up-to-date with the latest developments. Vim-emulator add-ons are being developed all the time! This is why this collaborative list was created.
(yes, technically it is vi-like keybindings we talk about here, but most people know and Google for vim, thus vim is used here instead of vi).
[!TIP] Tip: navigate this document easily by using GitHub's built-in Markdown Table of Contents in the top right corner:
The following symbols and formatting are used with each list item to make it clearer what kind of Vim keybindings support exist:
Terminology:
pdb and vim.✅ ipython - Interactive Python shell. It no longer uses readline for input, so it must be configured in the ipython profile ~/.ipython/profile_default/ipython_config.py itself (reference):
c.TerminalInteractiveShell.editing_mode = "vi"
✅ GHCi - Interactive Haskell environment. It uses haskeline instead of readline. Put this in ~/.haskeline:
editMode: Vi
➕ Jupyter Lab - Science and Data Development notebook environment. Add this package jupyterlab-vim and restart the server. It is available for both pip and conda managed environments (and their derivatives).
✅ marimo - An open-source reactive Python notebook that's stored as a .py file, executable as a script, and deployable as an app. Supports importing and exporting as Jupyter Notebooks. Built-in vim keybinds.
✅ LINQPad - The .NET Programmer’s Playground. vi mode is available in settings. To enable, go to Edit > Preferences > vi mode. Quite limited, doesn't support ex commands, registers, and macros.
Azure Data Studio - Database tool similar to Microsoft SQL Server Management Studio. Supports VSCode extensions.
.vsix file. Inside Azure Data Studio, navigate to Extensions > three dots at the top > Install from VSXI. You will likely see the message: "Unable to install extension 'vscodevim.vim' as it is not compatible with the current VS Code engine version". If you see that message, you should try an earlier release.✅ Google Colab - Data analysis and machine learning tool that allows you to combine executable Python code and rich text along with charts, images, HTML, LaTeX, and more into a single document stored in Google Drive. Vi modeis supported through keyboard binding settings. You can enable it through Tools > Settings > Editor
The Julia Programming Language - High-level, general-purpose dynamic programming language suited for numerical analysis and computational science
✅ k9s - Kubernetes CLI tool with full VIM bindings
DBeaver - Free Universal Database Tool
✅ ptpython - A better Python REPL. Start it with ptpython --vi or add repl.vi_mode = True to its config.py.
✅ Foliate - An e-book reader with basic vim-like navigation
✅ fx - Terminal based JSON viewer.
✅ glow - Terminal based markdown reader.
✅ gollum - A Git-powered wiki with built-in Vim editing mode. Start with --default-keybind vim.
✅ mdp - A command-line based markdown presentation tool.
✅ pipedial - A terminal selector with basic Vim-like keybindings.
✅ pulsemixer - CLI and curses mixer for PulseAudio.
✅ sentaku - A terminal selector with Vim-like keybindings.
✅ stig - TUI/CLI for the BitTorrent client Transmission.
✅ termshark - a UI for tshark with Vim-navigation.
✅ Yzis - A vi/vim engine that is easy to integrate in any graphical application.
✅ mycli - A CLI for MySQL, MariaDB, and Percona with auto-completion and syntax highlighting. There are two types of keybindings available. Emacs mode and Vi mode.
Anki - Spaced repetition and media-rich cards flashcard program for study.
✅ ly - A TUI display manager. Supports vi-like movement. Edit this in your /etc/ly/config.ini
# Default vi mode
# normal -> normal mode
# insert -> insert mode
vi_default_mode = normal
# Enable vi keybindings
vi_mode = true
def_key "j"
scroll_down
def_key "k"
scroll_up
def_key "h"
previous_column
def_key "l"
next_column
def_key "ctrl-b"
page_up
def_key "ctrl-u"
page_up
def_key "ctrl-f"
page_down
def_key "ctrl-d"
page_down
def_key "g"
move_home
def_key "G"
move_end
def_key "n"
next_found_item
def_key "N"
previous_found_item
✅ git - Nothing's better than the real deal. Tell git to use vim/nvim when editing commit messages, interactive rebase, etc. by putting in your ~/.config/git/config:
[user]
editor = vim
✅ tig - Text interface for git. Works mostly like vim out of the box, but can be enhanced by sourcing these keybindings in your ~/.tigrc.
✅ hg/mercurical - Put in your ~/.config/hg/hgrc:
[ui]
editor = vim
✅ GitUI - GitUI provides you with the comfort of a git GUI but right in your terminal.
✅ Lazygit - Simple terminal UI for git commands with Vim-like keybindings.
✅ searxng - SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled. You can either enable vi binds in the settings when using the site or when selfhosting, you can set the default hotkeys to be vi styled for every user.
Preferences > USER INTERFACE > Hotkeys
ui:
hotkeys: vim
✅ DuckDuckGo - DuckDuckGo lets you search and browse privately, it never tracks you. It has some vim-like bindings by default in its keyboard shortcuts.
✅ Kagi - Kagi is a paid ad-free search engine that has vim-like bindings by default in its keyboard shortcuts.
✅ readline - Readline is a library used by many CLI programs to read input from users. By configuring readline to use vi key bindings, you automatically get it for programs like bash, irb, octave, etc. By default, readline has Emacs-like keybindings, but you can change that by putting this in your ~/.inputrc:
set editing-mode vi
set keymap vi-insert
✅ Bash - The preferred method is to set Vi mode in ~/.inputrc via readline, as you will get Vi mode automatically in all programs using the library. However, if you just want this for bash, put this in your bash startup file e.g., ~/.bashrc:
set -o vi
➕ ble.sh (Bash Line Editor) - An interactive plugin ble.sh provides a better Vim mode as well as syntax highlighting and autosuggestions. In addition to the above setting of set -o vi in ~/.bashrc or set editing-mode vi in ~/.inputrc, you can add the following settings in ~/.bashrc to enable ble.sh.
# bashrc
# Add these lines at the top of .bashrc:
[[ $- == *i* ]] && source /path/to/blesh/ble.sh --noattach
# your bashrc settings come here...
# Add this line at the end of .bashrc:
[[ ! ${BLE_VERSION-} ]] || ble-attach
✅ zsh - just put this in your ZSH startup file, most likely ~/.zshrc:
bindkey -v
# Add text object extension -- eg ci" da(:
autoload -U select-quoted
zle -N select-quoted
for m in visual viopp; do
for c in {a,i}{\',\",\`}; do
bindkey -M $m $c select-quoted
done
done
➕ zsh-vi-mode - A better and friendlier Vim-mode plugin for zsh.
✅ fish - Just add to your ~/.config/fish/config.fish (reference):
fish_vi_key_bindings
✅ tcsh - Put this in your tcsh startup file e.g. ~/.tcshrc (reference):
bindkey -v
✅ ksh - Put this in your ksh startup file e.g. ~/.kshrc:
set -o vi
✅ nushell - Put this in your config file e.g. $nu.config-path:
let-env config = {
# ...
edit_mode: vi,
# ...
}
✅ pwsh - The Readline module offers support for convenient vim support. Add this to your $Profile:
Import-Module PSReadLine
# enable Vim on the shell and as editor
$OnViModeChange = [scriptblock]{
if ($args[0] -eq 'Command') {
# Set the cursor to a blinking block.
Write-Host -NoNewLine "`e[2 q"
}
else {
# Set the cursor to a blinking line.
Write-Host -NoNewLine "`e[5 q"
}
}
Set-PsReadLineOption -EditMode Vi
Set-PSReadLineOption -ViModeIndicator Script -ViModeChangeHandler $OnViModeChange
This was collected from many GitHub issues and posts. PowerShell 5.1, for one reason or another, refuses to change the cursor, so the script to give feedback does not work. Just remove it, and it will still work, just no feedback of the mode you're in.
✅ xonsh - Put this in your run control file ~/.xonshrc:
$VI_MODE = True
Preferences → Controls → Additional controls → Select windows using Vim keys.✅ htop-vim - A patched version the htop interactive process viewer that has vim keybindings for navigation.
✅ btop++ - A resource monitor. To enable Vim navigation, set in the config file:
vim_keys = True
✅ aptitude - ncurses interface for APT on Debian-derived Linux distros. The keybindings are already vim-like.
✅ CopyQ - A clipboard manager with basic Vim-like navigation.
✅ lnav - A log viewer with minimal Vim-like navigation.
set-option -g status-keys vi # Use Vi bindings in tmux command prompt.
set-window-option -g mode-keys vi # Use Vi bindings in copy and choice mode.
# Optional: some Vi-like navigation for smart pane switching.
# NOTE this could override default keybindings like <prefix>-l.
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Jump around neighboring window Vi key binding
map ctrl+shift+w>h neighboring_window left
map ctrl+shift+w>l neighboring_window right
map ctrl+shift+w>j neighboring_window down
map ctrl+shift+w>k neighboring_window up
map ctrl+shift+w>shift+h move_window left
map ctrl+shift+w>shift+l move_window right
map ctrl+shift+w>shift+j move_window down
map ctrl+shift+w>shift+k move_window up
# Create a new window, splitting the space used by the existing one so that
# the two windows are placed one above the other
map ctrl+shift+w>s launch --location=hsplit
# Create a new window, splitting the space used by the existing one so that
# the two windows are placed side by side
map ctrl+shift+w>v launch --location=vsplit
# Use nvim as the pager. Remove all ASCII formatting characters.
scrollback_pager nvim --noplugin -c 'set buftype=nofile' -c 'set noswapfile' -c 'silent! %s/\%x1b\[[0-9;]*[sumJK]//g' -c 'silent! %s/\%x1b]133;[A-Z]\%x1b\\//g' -c 'silent! %s/\%x1b\[[^m]*m//g' -c 'silent! %s///g' -
We know that Vi-clones/derivatives have Vi(m) keybindings so let's skip those here (Vim, NeoVim, vile, elvis, nvi, vis, pyvim, jVi, ex-vi ...)
Emacs
evil-mode. Features a vim-like leader (space) for common commands.evil-mode. Also implements spacebar-as-leader-key.✅ Sublime Text has a bult-in Vintage mode that can be enabled.
QTextEdit/QPlainTextEdit
✅ amp - A modal terminal text.
✅ kakoune - A modal text editor inspired by Vim-navigation.
✅ moe - A modal text editor with a Vim-like mode.
✅ Komodo Edit - Has Vi emulation.
✅ rim - The aspiring Vim-like text editor.
✅ slickedit - A Code editor with Vim emulation.
✅ vy - A Vim-like in python made from scratch.
✅ WinVi - A Windows text editor highly compatible with Vi.
✅ VNote - A note-taking editor with Vi mode and Vi-like navigation.
✅ novelWriter - Plain text editor for novel writing with built-in Vim mode navigation
✅ oni2 (onivim) - Deprecated.
✅ editra - Developers Text Editor, with a Vi-mode.
Inkdrop - A Markdown note-taking app.
✅ GNOME Text Editor - If it's installed with APT, enable the Vim mode by running this in a Terminal:
gsettings set org.gnome.TextEditor keybindings vim
Atom - Discontinued
✅ Vieb - Vim bindings for the web by design (electron-based)
Firefox
h/l, speed adjustment with j/k) to match Vim-like navigation.Chrome
h/l, speed adjustment with j/k) to match Vim-like navigation.Safari
Edge
Opera
✅ w3m - A text-based web browser with some Vim-like keyboard shortcuts.
✅ netrik - A text-based web browser with Vi-inspired keyboard commands.
✅ lynx - A customizable text-based browser and the oldest web browser still being maintained. You can enable Vi-like movement by passing -vikeys or add an alias in your .bashrc:
alias lynx='lynx -vikeys'
✅ vimb - The vim like browser.
✅ jumanji - A keyboard driven web browser.
✅ luakit - A highly configurable browser with Vim-like navigation.
✅ nyxt - A keyboard-driven web browser inspired by Vim and Emacs.
✅ wyeb - A Vim-like webkit2gtk web browser.
✅ bombadillo - A non-web browser but for other protocols, e.g., Gopher, Gemini, Finger.
✅ dwb - See qutebrowser instead.
✅ uzbl
✅ xombrero - A minimalist web browser with vi-like keyboard commands.
✅ Cream-Browser - A browser developped in C with GTK+ having the same interface as Vimperator.
Various
Keyboard remapping tools can improve your efficiency while navigating across the system, as well as enhance your experience inside Vim.
They allow you to flexibly remap any key—for example, replacing the arrow keys with hjkl, among other useful remappings.
Most of these tools are universal enough to work system-wide, even inside a Linux TTY, due to their low-level nature.
keyd# A valid config file has the extension .conf and must begin with an [ids] section
[ids]
*
[main]
# Map Caps Lock to Escape when tapped and Control when held
capslock = overload(control, esc) # Super useful for Vim and not only!
# Make Alt a layer activator for the defined keys and act as regular Alt with all other keys
[alt]
h = left
k = up
j = down
l = right
0 = home
4 = end
# i = home
# a = end
u = pageup
d = pagedown
x = delete
# Check the keyd repo for more!
This is a collaborative list -- please fork and make a pull request to add or improve the entries here! The initial contributions by the repo owner are limited to the tools he uses or knows of, so there is a lot of room for further additions here!
Hats off to the authors of these articles that helped kick-start this list together with the author's own experiences: #1, #2, #3, #4, #5.
(top 24 of 26)
1,716 followers · starred May 2023
297 followers · starred Dec 2025
71 followers · starred May 2025
560 followers · starred May 2023
The ultimate list of which programs support Vim-like keybindings natively, or how they can be added with extensions. A collaborative project.
Shell
2,620
405 commits
updated Oct 10, 2026
including these top contributors:
[!NOTE] 🚀 PRs are very welcome
Once your fingers have learned to speak Vim, they don't want to speak anything else! It's simply a very effective way of navigating, creating, and editing text. Thus, it's natural that one would like to get Vim-like keybindings in as many programs we use as possible.
The intention of this collaborative list is to:
ctrl/cmd + f.There are, of course, already lists like this one floating around on the internet (see Acknowledgments). While they are great, the issue is that they are not up-to-date with the latest developments. Vim-emulator add-ons are being developed all the time! This is why this collaborative list was created.
(yes, technically it is vi-like keybindings we talk about here, but most people know and Google for vim, thus vim is used here instead of vi).
[!TIP] Tip: navigate this document easily by using GitHub's built-in Markdown Table of Contents in the top right corner:
The following symbols and formatting are used with each list item to make it clearer what kind of Vim keybindings support exist:
Terminology:
pdb and vim.✅ ipython - Interactive Python shell. It no longer uses readline for input, so it must be configured in the ipython profile ~/.ipython/profile_default/ipython_config.py itself (reference):
c.TerminalInteractiveShell.editing_mode = "vi"
✅ GHCi - Interactive Haskell environment. It uses haskeline instead of readline. Put this in ~/.haskeline:
editMode: Vi
➕ Jupyter Lab - Science and Data Development notebook environment. Add this package jupyterlab-vim and restart the server. It is available for both pip and conda managed environments (and their derivatives).
✅ marimo - An open-source reactive Python notebook that's stored as a .py file, executable as a script, and deployable as an app. Supports importing and exporting as Jupyter Notebooks. Built-in vim keybinds.
✅ LINQPad - The .NET Programmer’s Playground. vi mode is available in settings. To enable, go to Edit > Preferences > vi mode. Quite limited, doesn't support ex commands, registers, and macros.
Azure Data Studio - Database tool similar to Microsoft SQL Server Management Studio. Supports VSCode extensions.
.vsix file. Inside Azure Data Studio, navigate to Extensions > three dots at the top > Install from VSXI. You will likely see the message: "Unable to install extension 'vscodevim.vim' as it is not compatible with the current VS Code engine version". If you see that message, you should try an earlier release.✅ Google Colab - Data analysis and machine learning tool that allows you to combine executable Python code and rich text along with charts, images, HTML, LaTeX, and more into a single document stored in Google Drive. Vi modeis supported through keyboard binding settings. You can enable it through Tools > Settings > Editor
The Julia Programming Language - High-level, general-purpose dynamic programming language suited for numerical analysis and computational science
✅ k9s - Kubernetes CLI tool with full VIM bindings
DBeaver - Free Universal Database Tool
✅ ptpython - A better Python REPL. Start it with ptpython --vi or add repl.vi_mode = True to its config.py.
✅ Foliate - An e-book reader with basic vim-like navigation
✅ fx - Terminal based JSON viewer.
✅ glow - Terminal based markdown reader.
✅ gollum - A Git-powered wiki with built-in Vim editing mode. Start with --default-keybind vim.
✅ mdp - A command-line based markdown presentation tool.
✅ pipedial - A terminal selector with basic Vim-like keybindings.
✅ pulsemixer - CLI and curses mixer for PulseAudio.
✅ sentaku - A terminal selector with Vim-like keybindings.
✅ stig - TUI/CLI for the BitTorrent client Transmission.
✅ termshark - a UI for tshark with Vim-navigation.
✅ Yzis - A vi/vim engine that is easy to integrate in any graphical application.
✅ mycli - A CLI for MySQL, MariaDB, and Percona with auto-completion and syntax highlighting. There are two types of keybindings available. Emacs mode and Vi mode.
Anki - Spaced repetition and media-rich cards flashcard program for study.
✅ ly - A TUI display manager. Supports vi-like movement. Edit this in your /etc/ly/config.ini
# Default vi mode
# normal -> normal mode
# insert -> insert mode
vi_default_mode = normal
# Enable vi keybindings
vi_mode = true
def_key "j"
scroll_down
def_key "k"
scroll_up
def_key "h"
previous_column
def_key "l"
next_column
def_key "ctrl-b"
page_up
def_key "ctrl-u"
page_up
def_key "ctrl-f"
page_down
def_key "ctrl-d"
page_down
def_key "g"
move_home
def_key "G"
move_end
def_key "n"
next_found_item
def_key "N"
previous_found_item
✅ git - Nothing's better than the real deal. Tell git to use vim/nvim when editing commit messages, interactive rebase, etc. by putting in your ~/.config/git/config:
[user]
editor = vim
✅ tig - Text interface for git. Works mostly like vim out of the box, but can be enhanced by sourcing these keybindings in your ~/.tigrc.
✅ hg/mercurical - Put in your ~/.config/hg/hgrc:
[ui]
editor = vim
✅ GitUI - GitUI provides you with the comfort of a git GUI but right in your terminal.
✅ Lazygit - Simple terminal UI for git commands with Vim-like keybindings.
✅ searxng - SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled. You can either enable vi binds in the settings when using the site or when selfhosting, you can set the default hotkeys to be vi styled for every user.
Preferences > USER INTERFACE > Hotkeys
ui:
hotkeys: vim
✅ DuckDuckGo - DuckDuckGo lets you search and browse privately, it never tracks you. It has some vim-like bindings by default in its keyboard shortcuts.
✅ Kagi - Kagi is a paid ad-free search engine that has vim-like bindings by default in its keyboard shortcuts.
✅ readline - Readline is a library used by many CLI programs to read input from users. By configuring readline to use vi key bindings, you automatically get it for programs like bash, irb, octave, etc. By default, readline has Emacs-like keybindings, but you can change that by putting this in your ~/.inputrc:
set editing-mode vi
set keymap vi-insert
✅ Bash - The preferred method is to set Vi mode in ~/.inputrc via readline, as you will get Vi mode automatically in all programs using the library. However, if you just want this for bash, put this in your bash startup file e.g., ~/.bashrc:
set -o vi
➕ ble.sh (Bash Line Editor) - An interactive plugin ble.sh provides a better Vim mode as well as syntax highlighting and autosuggestions. In addition to the above setting of set -o vi in ~/.bashrc or set editing-mode vi in ~/.inputrc, you can add the following settings in ~/.bashrc to enable ble.sh.
# bashrc
# Add these lines at the top of .bashrc:
[[ $- == *i* ]] && source /path/to/blesh/ble.sh --noattach
# your bashrc settings come here...
# Add this line at the end of .bashrc:
[[ ! ${BLE_VERSION-} ]] || ble-attach
✅ zsh - just put this in your ZSH startup file, most likely ~/.zshrc:
bindkey -v
# Add text object extension -- eg ci" da(:
autoload -U select-quoted
zle -N select-quoted
for m in visual viopp; do
for c in {a,i}{\',\",\`}; do
bindkey -M $m $c select-quoted
done
done
➕ zsh-vi-mode - A better and friendlier Vim-mode plugin for zsh.
✅ fish - Just add to your ~/.config/fish/config.fish (reference):
fish_vi_key_bindings
✅ tcsh - Put this in your tcsh startup file e.g. ~/.tcshrc (reference):
bindkey -v
✅ ksh - Put this in your ksh startup file e.g. ~/.kshrc:
set -o vi
✅ nushell - Put this in your config file e.g. $nu.config-path:
let-env config = {
# ...
edit_mode: vi,
# ...
}
✅ pwsh - The Readline module offers support for convenient vim support. Add this to your $Profile:
Import-Module PSReadLine
# enable Vim on the shell and as editor
$OnViModeChange = [scriptblock]{
if ($args[0] -eq 'Command') {
# Set the cursor to a blinking block.
Write-Host -NoNewLine "`e[2 q"
}
else {
# Set the cursor to a blinking line.
Write-Host -NoNewLine "`e[5 q"
}
}
Set-PsReadLineOption -EditMode Vi
Set-PSReadLineOption -ViModeIndicator Script -ViModeChangeHandler $OnViModeChange
This was collected from many GitHub issues and posts. PowerShell 5.1, for one reason or another, refuses to change the cursor, so the script to give feedback does not work. Just remove it, and it will still work, just no feedback of the mode you're in.
✅ xonsh - Put this in your run control file ~/.xonshrc:
$VI_MODE = True
Preferences → Controls → Additional controls → Select windows using Vim keys.✅ htop-vim - A patched version the htop interactive process viewer that has vim keybindings for navigation.
✅ btop++ - A resource monitor. To enable Vim navigation, set in the config file:
vim_keys = True
✅ aptitude - ncurses interface for APT on Debian-derived Linux distros. The keybindings are already vim-like.
✅ CopyQ - A clipboard manager with basic Vim-like navigation.
✅ lnav - A log viewer with minimal Vim-like navigation.
set-option -g status-keys vi # Use Vi bindings in tmux command prompt.
set-window-option -g mode-keys vi # Use Vi bindings in copy and choice mode.
# Optional: some Vi-like navigation for smart pane switching.
# NOTE this could override default keybindings like <prefix>-l.
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Jump around neighboring window Vi key binding
map ctrl+shift+w>h neighboring_window left
map ctrl+shift+w>l neighboring_window right
map ctrl+shift+w>j neighboring_window down
map ctrl+shift+w>k neighboring_window up
map ctrl+shift+w>shift+h move_window left
map ctrl+shift+w>shift+l move_window right
map ctrl+shift+w>shift+j move_window down
map ctrl+shift+w>shift+k move_window up
# Create a new window, splitting the space used by the existing one so that
# the two windows are placed one above the other
map ctrl+shift+w>s launch --location=hsplit
# Create a new window, splitting the space used by the existing one so that
# the two windows are placed side by side
map ctrl+shift+w>v launch --location=vsplit
# Use nvim as the pager. Remove all ASCII formatting characters.
scrollback_pager nvim --noplugin -c 'set buftype=nofile' -c 'set noswapfile' -c 'silent! %s/\%x1b\[[0-9;]*[sumJK]//g' -c 'silent! %s/\%x1b]133;[A-Z]\%x1b\\//g' -c 'silent! %s/\%x1b\[[^m]*m//g' -c 'silent! %s///g' -
We know that Vi-clones/derivatives have Vi(m) keybindings so let's skip those here (Vim, NeoVim, vile, elvis, nvi, vis, pyvim, jVi, ex-vi ...)
Emacs
evil-mode. Features a vim-like leader (space) for common commands.evil-mode. Also implements spacebar-as-leader-key.✅ Sublime Text has a bult-in Vintage mode that can be enabled.
QTextEdit/QPlainTextEdit
✅ amp - A modal terminal text.
✅ kakoune - A modal text editor inspired by Vim-navigation.
✅ moe - A modal text editor with a Vim-like mode.
✅ Komodo Edit - Has Vi emulation.
✅ rim - The aspiring Vim-like text editor.
✅ slickedit - A Code editor with Vim emulation.
✅ vy - A Vim-like in python made from scratch.
✅ WinVi - A Windows text editor highly compatible with Vi.
✅ VNote - A note-taking editor with Vi mode and Vi-like navigation.
✅ novelWriter - Plain text editor for novel writing with built-in Vim mode navigation
✅ oni2 (onivim) - Deprecated.
✅ editra - Developers Text Editor, with a Vi-mode.
Inkdrop - A Markdown note-taking app.
✅ GNOME Text Editor - If it's installed with APT, enable the Vim mode by running this in a Terminal:
gsettings set org.gnome.TextEditor keybindings vim
Atom - Discontinued
✅ Vieb - Vim bindings for the web by design (electron-based)
Firefox
h/l, speed adjustment with j/k) to match Vim-like navigation.Chrome
h/l, speed adjustment with j/k) to match Vim-like navigation.Safari
Edge
Opera
✅ w3m - A text-based web browser with some Vim-like keyboard shortcuts.
✅ netrik - A text-based web browser with Vi-inspired keyboard commands.
✅ lynx - A customizable text-based browser and the oldest web browser still being maintained. You can enable Vi-like movement by passing -vikeys or add an alias in your .bashrc:
alias lynx='lynx -vikeys'
✅ vimb - The vim like browser.
✅ jumanji - A keyboard driven web browser.
✅ luakit - A highly configurable browser with Vim-like navigation.
✅ nyxt - A keyboard-driven web browser inspired by Vim and Emacs.
✅ wyeb - A Vim-like webkit2gtk web browser.
✅ bombadillo - A non-web browser but for other protocols, e.g., Gopher, Gemini, Finger.
✅ dwb - See qutebrowser instead.
✅ uzbl
✅ xombrero - A minimalist web browser with vi-like keyboard commands.
✅ Cream-Browser - A browser developped in C with GTK+ having the same interface as Vimperator.
Various
Keyboard remapping tools can improve your efficiency while navigating across the system, as well as enhance your experience inside Vim.
They allow you to flexibly remap any key—for example, replacing the arrow keys with hjkl, among other useful remappings.
Most of these tools are universal enough to work system-wide, even inside a Linux TTY, due to their low-level nature.
keyd# A valid config file has the extension .conf and must begin with an [ids] section
[ids]
*
[main]
# Map Caps Lock to Escape when tapped and Control when held
capslock = overload(control, esc) # Super useful for Vim and not only!
# Make Alt a layer activator for the defined keys and act as regular Alt with all other keys
[alt]
h = left
k = up
j = down
l = right
0 = home
4 = end
# i = home
# a = end
u = pageup
d = pagedown
x = delete
# Check the keyd repo for more!
This is a collaborative list -- please fork and make a pull request to add or improve the entries here! The initial contributions by the repo owner are limited to the tools he uses or knows of, so there is a lot of room for further additions here!
Hats off to the authors of these articles that helped kick-start this list together with the author's own experiences: #1, #2, #3, #4, #5.
(top 24 of 26)
1,716 followers · starred May 2023
297 followers · starred Dec 2025
71 followers · starred May 2025
560 followers · starred May 2023