https://github.com/erikw/vim-keybindings-everywhere-the-ultimate-list Skip to content Toggle navigation Sign up * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions For + Enterprise + Teams + Startups + Education By Solution + CI/CD & Automation + DevOps + DevSecOps Case Studies + Customer Stories + Resources * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Pricing [ ] * # In this repository All GitHub | Jump to | * No suggested jump to results * # In this repository All GitHub | Jump to | * # In this user All GitHub | Jump to | * # In this repository All GitHub | Jump to | Sign in Sign up {{ message }} erikw / vim-keybindings-everywhere-the-ultimate-list Public * Notifications * Fork 21 * Star 351 The ultimate list of which programs support Vim keybindings natively, or how they can be added with extensions. License MIT license 351 stars 21 forks Star Notifications * Code * Issues 1 * Pull requests 1 * Actions * Security * Insights More * Code * Issues * Pull requests * Actions * Security * Insights erikw/vim-keybindings-everywhere-the-ultimate-list This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. main Switch branches/tags [ ] Branches Tags Could not load branches Nothing to show {{ refName }} default View all branches Could not load tags Nothing to show {{ refName }} default View all tags Name already in use A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? Cancel Create 1 branch 0 tags Code * Local * Codespaces * Clone HTTPS GitHub CLI [https://github.com/e] Use Git or checkout with SVN using the web URL. [gh repo clone erikw/] Work fast with our official CLI. Learn more about the CLI. * Open with GitHub Desktop * Download ZIP Sign In Required Please sign in to use Codespaces. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching Xcode If nothing happens, download Xcode and try again. Launching Visual Studio Code Your codespace will open once ready. There was a problem preparing your codespace, please try again. Latest commit @erikw erikw Order sections alphabetically ... d5431d3 May 4, 2023 Order sections alphabetically d5431d3 Git stats * 143 commits Files Permalink Failed to load latest commit information. Type Name Latest commit message Commit time .githooks Remvoe githook instructions no longer needed May 4, 2023 22:56 .github/workflows Don't need to run GH workflow on PRs May 4, 2023 23:23 bin Script must be bash, not sh May 4, 2023 22:41 img Modified: README.md img/github_md_toc.png December 4, 2021 23:50 .gitignore Added: .gitignore December 5, 2021 00:59 LICENSE.txt Added: LICENSE.txt December 4, 2021 20:16 OSSMETADATA Update OSSMETADATA March 6, 2023 22:13 README.md Order sections alphabetically May 4, 2023 23:38 TODO.md Update TODO May 4, 2023 23:08 View code [ ] Vim Keybindings Everywhere - The Ultimate List What is this list? The Ultimate Vim Keybinding List General Development Debuggers E-Mail File Management IDEs Music players News/RSS Readers PDF viewers Personal Knowledge Management Source Code Management Shells System Tools Text Editors WYSIWYG Editors Web browsers Contributing Acknowledgments README.md Vim Keybindings Everywhere - The Ultimate List Tweet OSS Lifecycle License Bump count of tools listed Contributors including these top contributors: [6874747073] What is this list? 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: * learn which programs/apps that you already use which you can enhance with Vim keybindings. Search in your browser with ctrl/ cmd + f. * discover new programs that support Vim keybindings. In the need for a new file manager? Why not get one that has Vim keybindings? * be up-to-date and alive -- add new programs and extensions as they evolve! 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. There are Vim-emulator add-ons 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). The Ultimate Vim Keybinding List The following symbols are used with each list item to make it clearer what kind of Vim keybindings support exist * - built-in support (possibly via a setting) * - via addon/extension Terminology: * TUI - Text User Interface Tip: navigate this file easily by using GitHub's built-in Markdown Table of Contents in the top left corner: ToC General * vim-anywhere - spawn a vim buffer from any text input in the operating system. * tmux - the terminal multiplexer, superseding GNU Screen. + ~/.config/tmux/tmux.conf 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. * irssi - the popular IRC client. + vim_mode plugin. Development * 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). * LINQPad - The .NET Programmer's Playground. vi mode available in settings. Go to Edit > Preferences > General UI to enable. * Azure Data Studio - Database tool similar to Microsoft SQL Server Management Studio. Supports VSCode extensions. + Vim plugin - Cannot be installed directly in the plugin section. Go to Vim plugin release page and download .vsix file. Then open the file in Azure Data Studio. If you see error that the extension is not compatible with current VS Code engine version try older release. Debuggers * cgdb - a curses interface on top of the GDB debuger with keybindings modeled after vim. * vimpdb - An integration of the python debugger pdb and vim. E-Mail * Mutt - The vim of email, a TUI email client * NeoMutt - A fork of mutt, intendted to reignite the development. * Thunderbird + Muttator - Like Vimperator but for thunderbird. File Management * vifm - TUI file manager with vi keybindings. * ranger - Another TUI file manager. * lf - TUI file manager similar to ranger. * ncdu - ncurses disk usage explorer. IDEs * Jetbrain's IDEs (Intellij, PYCharm, PHPStorm, WebStorm, ...) + IdeaVim - install it directly from the plugin section in the IDE settings. * Visual Studio Code + Vim plugin - install it directly in the plugin section in the IDE settings. + NVim plugin - alternative to the VIM plugin, uses a full nvim instance in the background instead of just emulating VIM * XCode - Apple's IDE. Vim mode can be enabled under the "Editor" menu without use of plugins. + [DEL:XVim2:DEL] plugin. Deprecated, use native keybindings (above) instead. * Eclipse + vrapper-vim + viplugin + viable * Visual Studio 2015 and above + VsVim - install through the extensions inside Visual Studio Music players * ncmpcpp - An ncurses client for mpd. The navigation can quite easily be made to behave like vim with some keyboard configurations. + ~/.config/ncmpcpp/bindings 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 News/RSS Readers * Newsboat - RSS/Atom reader with a TUI. * [DEL:Newsbeuter:DEL] - Unmaintained, see Newsboat./ PDF viewers * apvlv - A PDF Viewer that acts Like Vim * MuPDF - PDF and ebook reader with vim keybindings. * zathura - Document reader, vim-keybindings, partly based on MuPDF. Linux only. * SumatraPDF - Document reader, vim-keybindings. Windows only. Personal Knowledge Management * Obsidian - under "Editor" options * Logseq + logseq-plugin-vim-shortcuts - normal mode commands deal with whole blocks, editing text is only possible in edit mode Source Code Management * 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: + ~/.config/tig/config bind generic scroll-page-down bind generic scroll-page-up bind generic g move-first-line # Move cursor to top. bind generic G move-last-line # Move cursor to bottom. bind main B :toggle commit-title-graph # Rebind G to B. bind main G move-last-line # Move cursor to bottom. * hg/mercurical - Put in your ~/.config/hg/hgrc: + [ui] editor = vim Shells * 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 * zsh - just put this in your ZSH startup file, most likely ~ /.zshrc: + bindkey -v * fish - just add to your ~/.config/fish/config.fish (reference): + fish_vi_key_bindings * tcsh - put this in your ksh startup file e.g. ~/.kshrc ( 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. System Tools * htop-vim - A patched version the htop interactive process viewer that has vim keybindings for navigation. * aptitude - ncurses interface for APT on Debian-derived Linux distros. The keybindings are already vim-like. Text Editors We know that Vi-clones/derivatives have Vi(m) keybindings so let's skip those here (Vim, NeoVim, vile, ...) * Atom + atom-vim-mode-plus * Emacs + evil-mode - Extensible vi layer for Emacs. + spacemacs - Emacs configuration package that improves the Emacs experience, including vim bindings via evil-mode. Features a vim-like leader (space) for common commands. + doom emacs - Configuration package that provides a similar experience to Spacemacs (including evil-mode. Also implements spacebar-as-leader-key. + doom emacs - Configuration package that provides a similar experience to Spacemacs (including evil-mode. Also implements spacebar-as-leader-key. + [DEL:Vimpulse:DEL] Deprecated, check out Evil. + [DEL:Vim Mode:DEL] Deprecated, check out Evil. * oni2 (onivim) WYSIWYG Editors * zettlr - Markdown document editor on the fly, vim+emacs keybindings. * VNote - A note taking app. Web browsers * qutebrowser * Vieb - Vim bindings for the web by design (electron based) * Firefox + tridactyl-vim + Vimium-FF + Surfingkeys + Vim Vixen * Chrome + Vimium + cVim + Surfingkeys + wasavi - Transform text areas into a vi editor. * Safari + Surfingkeys + Vimari * Edge + Surfingkeys * Opera + wasavi - Transform text areas into a vi editor. * Various + firenvim - Transform text areas into a neovim instance that inherits your existing config (keymaps, plugins, etc). Contributing 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 is limited to the tools he uses or knows of, so there is a lot of room for further additions here! * Please: + add links to references for configuration if you have any. + use XDG paths when possible. * It's okay to list deprecated or unmaintained software for the sake of completness, but let's put a [DEL:strigke-through:DEL] on them. Acknowledgments 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. About The ultimate list of which programs support Vim keybindings natively, or how they can be added with extensions. Topics vim keyboard list configuration awesome-list vi collaborative keybindings shortcuts ultimate ultimate-list Resources Readme License MIT license Stars 351 stars Watchers 2 watching Forks 21 forks Report repository Releases No releases published Contributors 18 * * * * * * * * * * * + 7 contributors Languages * Shell 100.0% Footer (c) 2023 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact GitHub * Pricing * API * Training * Blog * About You can't perform that action at this time. You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.