├── .githooks └── pre-commit ├── .github └── workflows │ └── bump_tool_count.yml ├── .gitignore ├── LICENSE.txt ├── OSSMETADATA ├── README.md ├── bin └── update_list_count.sh └── img └── github_md_toc.png /.githooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # NOTE this is no longer needed as of the GitHub Action ../.github/workflows/bump_tool_count.yml 3 | # 4 | # Setup: 5 | # $ git clone git@github.com:erikw/vim-keybindings-everywhere-the-ultimate-list.git 6 | # $ cd vim-keybindings-everywhere-the-ultimate-list/ 7 | # $ git config core.hooksPath .githooks 8 | # 9 | # This can be bypassed like 10 | # $ git commit --no-verify 11 | 12 | # Only update the counts if README.md is staged, to prevent accidental commit of unstaged changes. Not bullet proof of the file is both staged and modifier in the workspace though. 13 | if (git status --porcelain | grep -q "^M README.md$"); then 14 | bin/update_list_count.sh 15 | git add README.md 16 | fi 17 | -------------------------------------------------------------------------------- /.github/workflows/bump_tool_count.yml: -------------------------------------------------------------------------------- 1 | # Updates the README counts in the badges. 2 | 3 | name: Bump count of tools listed 4 | 5 | on: 6 | workflow_dispatch: 7 | push: 8 | branches: ["main"] 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - name: Run script 16 | run: ./bin/update_list_count.sh 17 | - name: Commit 18 | uses: EndBug/add-and-commit@v9.1.2 19 | with: 20 | message: "chore: Update tool count" 21 | default_author: github_actions 22 | add: "README.md" 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /README.md.bak 2 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2021 Erik Westrup 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /OSSMETADATA: -------------------------------------------------------------------------------- 1 | osslifecycle=active 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vim Keybindings Everywhere - The Ultimate List [![Post on X](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://x.com/intent/tweet?text=Get%20Vim%20keybindings%20everywhere%20-%20the%20ultimate%20list%20of%20programs%20with%20native%20support%20or%20extensions%20providing%20it&url=https://github.com/erikw/vim-keybindings-everywhere-the-ultimate-list&via=erik_westrup&hashtags=vim,keybindings,list) 2 | [![](https://img.shields.io/badge/Native%20programs%20listed-174-brightgreen)](#) 3 | [![](https://img.shields.io/badge/Extensions%20listed-79-blue)](#) 4 | [![Closed issues](https://img.shields.io/github/issues-closed/erikw/vim-keybindings-everywhere-the-ultimate-list?color=success)](https://github.com/erikw/vim-keybindings-everywhere-the-ultimate-list/issues?q=is%3Aissue+is%3Aclosed) 5 | [![Closed PRs](https://img.shields.io/github/issues-pr-closed/erikw/vim-keybindings-everywhere-the-ultimate-list?color=success)](https://github.com/erikw/vim-keybindings-everywhere-the-ultimate-list/pulls?q=is%3Apr+is%3Aclosed) 6 | [![OSS Lifecycle](https://img.shields.io/osslifecycle/erikw/vim-keybindings-everywhere-the-ultimate-list)](https://github.com/Netflix/osstracker) 7 | [![License](https://img.shields.io/github/license/erikw/vim-keybindings-everywhere-the-ultimate-list?color=lightgrey)](LICENSE.txt) 8 | [![Bump count of tools listed](https://github.com/erikw/vim-keybindings-everywhere-the-ultimate-list/actions/workflows/bump_tool_count.yml/badge.svg)](https://github.com/erikw/vim-keybindings-everywhere-the-ultimate-list/actions/workflows/bump_tool_count.yml) 9 | 10 | 11 | [![Contributors](https://img.shields.io/github/contributors/erikw/vim-keybindings-everywhere-the-ultimate-list)](https://github.com/erikw/vim-keybindings-everywhere-the-ultimate-list/graphs/contributors) including these top contributors:
12 | 13 | 14 | 15 | 16 | > [!NOTE] 17 | > **:rocket: PRs are very welcome** 18 | 19 | ## What is this list? 20 | Once your fingers have [learned](https://www.thejach.com/view/2012/07/vims_learning_curve_is_wrong) 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. 21 | 22 | The intention of this collaborative list is to: 23 | * learn which programs/apps that you already use which you can enhance with Vim keybindings. Search in your browser with `ctrl/cmd + f`. 24 | * discover new programs that support Vim keybindings. In the need for a new file manager? Why not get one that has Vim keybindings? 25 | * be up-to-date and alive -- add new programs and extensions as they evolve! 26 | 27 | There are of course already lists like this one floating around on the internet (see [Acknowledgments](#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. 28 | 29 | (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). 30 | 31 | 32 | > [!TIP] 33 | > **Tip**: navigate this document easily by using GitHub's built-in Markdown Table of Contents in the top left corner: 34 | > ToC 35 | 36 | 37 | ## Legend 38 | The following symbols and formattings are used with each list item to make it clearer what kind of Vim keybindings support exist: 39 | * :white_check_mark: - built-in support (possibly via a setting) 40 | * :heavy_plus_sign: - via addon/extension 41 | * ~strikethrough~: deprecated or unsupported software 42 | 43 | Terminology: 44 | * [TUI](https://itlaw.fandom.com/wiki/Text_user_interface) - Text User Interface 45 | 46 | 47 | 48 | 49 | 50 | 51 | # The Ultimate Vim Keybinding List 52 | 53 | ## Debuggers 54 | * :white_check_mark: [cgdb](http://cgdb.github.io/) - a curses interface on top of the GDB debuger with keybindings modeled after vim. 55 | * :white_check_mark: [vimpdb](https://github.com/gotcha/vimpdb) - An integration of the python debugger `pdb` and vim. 56 | 57 | 58 | ## Development 59 | * :white_check_mark: [ipython](https://ipython.org/) - 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](https://gist.github.com/sstirlin/c3c207b1052b613ab9554b4ebdfc3f35)): 60 | * ```ini 61 | c.TerminalInteractiveShell.editing_mode = "vi" 62 | ``` 63 | * :white_check_mark: [GHCi](https://wiki.haskell.org/GHC/GHCi) - Interactive Haskell environment. It uses [haskeline](https://hackage.haskell.org/package/haskeline) instead of readline. Put this in `~/.haskeline`: 64 | * ```yaml 65 | editMode: Vi 66 | ``` 67 | 68 | * :heavy_plus_sign: [Jupyter Lab](https://pypi.org/project/jupyterlab-vim/) - Science and Data Development notebook environment. Add this package [jupyterlab-vim](https://pypi.org/project/jupyterlab-vim/) and restart the server. It is available for both `pip` and `conda` managed environments (and their derivatives). 69 | * :white_check_mark: [LINQPad](https://www.linqpad.net/) - The .NET Programmer’s Playground. vi mode available in settings. To enable go to Edit > Preferences > vi mode. Quite limited, doesn't support ex commands, registers and macros. 70 | 71 | * [Azure Data Studio](https://azure.microsoft.com/en-us/products/data-studio/) - Database tool similar to Microsoft SQL Server Management Studio. Supports VSCode extensions. 72 | * :heavy_plus_sign: [Vim plugin](https://github.com/VSCodeVim/Vim) - Cannot be installed directly in the plugin section. Go to [Vim plugin release page](https://github.com/VSCodeVim/Vim/releases) and download `.vsix` file. Inside Azure Data Studio navigate to Extensions > three dots at the top > Install from VSXI. You will likely see 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 earlier release. 73 | * :white_check_mark: [Google Colab](https://colab.research.google.com/) - 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 mode supported through [keyboard binding settings](https://colab.research.google.com/notebooks/editor_details.ipynb#scrollTo=bEXkvERUtU5O). You can [enable](https://stackoverflow.com/questions/48674326/is-there-a-way-to-use-vim-keybindings-in-google-colaboratory ) it through Tools > Settings > Editor 74 | * [The Julia Programming Language](https://julialang.org/) - High level, general-purpose dynamic programming language suited for numerical analysis and computational science 75 | * :heavy_plus_sign: [VimBindings.jl](https://github.com/caleb-allen/VimBindings.jl) - A Julia package which emulates vim directly in the Julia REPL 76 | 77 | * :white_check_mark: [k9s](https://k9scli.io/) - Kubernetes CLI tool with full VIM bindings 78 | * [DBeaver](https://dbeaver.io/) - Free Universal Database Tool 79 | * :heavy_plus_sign: [Vrapper plugin](https://vrapper.sourceforge.net/home/) - Plugin adds vim bindings to SQL editor. Install it using instructions from https://github.com/dbeaver/dbeaver/issues/8219 80 | 81 | * :white_check_mark: [ptpython](https://github.com/prompt-toolkit/ptpython) - A better Python REPL. Start it with `ptpython --vi` or add `repl.vi_mode = True` to its `config.py`. 82 | 83 | ## E-Mail 84 | * :white_check_mark: [Mutt](http://www.mutt.org/) - The vim of email, a TUI email client 85 | * :white_check_mark: [NeoMutt](https://neomutt.org/) - A fork of mutt, intendted to reignite the development. 86 | * :white_check_mark: [sup](https://sup-heliotrope.github.io/) - a console-based email client for people with a lot of email with Vim-inspired [keyboard shortcuts](https://github.com/sup-heliotrope/sup/wiki/Keyboard-reference). 87 | * [Thunderbird](https://www.thunderbird.net/en-US/) 88 | * :heavy_plus_sign: [Muttator](https://addons.thunderbird.net/en-US/thunderbird/addon/muttator/) - Like Vimperator but for thunderbird. 89 | * :heavy_plus_sign: ~[teledactyl](https://github.com/5digits/dactyl/tree/master/teledactyl)~ 90 | * :white_check_mark: [aerc](https://aerc-mail.org/) - Terminal email client with Vim keybindings. 91 | * :white_check_mark: [meli](https://meli.delivery/) - A TUI email client with Vim-like keybindings. 92 | * Microsoft Outlook 93 | * :heavy_plus_sign: ~[cubiclevim](https://sourceforge.net/projects/cubiclevim/)~ - Edit Microsoft Outlook messages in Vim-style. 94 | 95 | 96 | ## Economy 97 | * :white_check_mark: [cointop](https://github.com/cointop-sh/cointop) - interactive terminal based UI application for tracking and monitoring cryptocurrency. 98 | 99 | ## File Management 100 | * :white_check_mark: [vifm](https://vifm.info/) - TUI file manager with vi keybindings. 101 | * :white_check_mark: [ranger](https://github.com/ranger/ranger) - Another TUI file manager. 102 | * :white_check_mark: [lf](https://github.com/gokcehan/lf) - TUI file manager similar to ranger. 103 | * :white_check_mark: [felix](https://github.com/kyoheiu/felix) - TUI file manager. 104 | * :white_check_mark: [nnn](https://github.com/jarun/nnn) - TUI file manager. 105 | * :white_check_mark: [xplr](https://github.com/sayanarijit/xplr) - TUI file manager. 106 | * :white_check_mark: [ncdu](https://dev.yorhel.nl/ncdu) - ncurses disk usage explorer. 107 | * :white_check_mark: [cfiles](https://github.com/mananapr/cfiles) - A ncurses file manager written in C with Vim-like keybindings. 108 | * :white_check_mark: [rover](http://lecram.github.io/p/rover/) - A small file browser with Vi-like key bindings for navigation. 109 | * :white_check_mark: [broot](https://dystroy.org/broot/) - An interactive file tree explorer. [vim_mode](https://dystroy.org/broot/vim_mode/) can be enabled in the configuration file. 110 | * [Total Commander](https://www.ghisler.com/) 111 | * :heavy_plus_sign: [ViATc](https://github.com/magicstep/ViATc-English) - adds a Vim mode to Total Commander. 112 | * macOS Finder 113 | * :heavy_plus_sign: [Finder Vim Mode](https://github.com/chrisgrieser/finder-vim-mode) - adds extensive vim-like/ranger-like keybindings, works via Karabiner Elements. 114 | * :white_check_mark: ~[jvifm](https://sourceforge.net/projects/jvifm/)~ - A Java implementation of vifm; a file manager with Vim-like keybindings. 115 | * :white_check_mark: ~[vide](https://github.com/xaizek/vide)~ - The graphical predecessor of vifm that uses GTK+ 116 | * [fman](https://fman.io/) - A dual-pane file manager. 117 | * :heavy_plus_sign: [VimNavigation](https://github.com/raguay/VimNavigation) - Adds Vim-style keyboard navigation to the fman file manager. 118 | * :white_check_mark: [yazi](https://yazi-rs.github.io/) - Blazing fast terminal file manager written in Rust, based on async I/O. 119 | 120 | ## IDEs 121 | * [Jetbrain's IDEs](https://www.jetbrains.com/products/#type=ide) (Intellij, PYCharm, PHPStorm, WebStorm, ...) 122 | * :heavy_plus_sign: [IdeaVim](https://plugins.jetbrains.com/plugin/164-ideavim) - Install it directly from the plugin section in the IDE settings. 123 | * [Visual Studio Code (VSCode)](https://code.visualstudio.com/) 124 | * :heavy_plus_sign: [VSCodeVim](https://marketplace.visualstudio.com/items?itemName=vscodevim.vim) - Vim emulation for Visual Studio Code. [GitHub](https://github.com/VSCodeVim/Vim) 125 | * :heavy_plus_sign: [VSCode Neovim](https://marketplace.visualstudio.com/items?itemName=asvetliakov.vscode-neovim) - Alternative to the VIM plugin, uses a full nvim instance in the background instead of just emulating VIM. [GitHub](https://github.com/vscode-neovim/vscode-neovim) 126 | * :white_check_mark: [XCode](https://developer.apple.com/xcode/) - Apple's IDE. Vim mode can be enabled under the "Editor" menu without use of plugins. 127 | * :heavy_plus_sign: ~[XVim](https://github.com/XVimProject/XVim)~ plugin. Deprecated, use native keybindings (above) instead. 128 | * :heavy_plus_sign: ~[XVim2](https://github.com/XVimProject/XVim2)~ plugin. Deprecated, use native keybindings (above) instead. 129 | * [Eclipse](https://www.eclipse.org/ide/) 130 | * :heavy_plus_sign: [vrapper-vim](https://marketplace.eclipse.org/content/vrapper-vim) - A wrapper that provides a Vim-like input scheme for moving around and editing text. 131 | * :heavy_plus_sign: [viplugin](https://marketplace.eclipse.org/content/viplugin) 132 | * :heavy_plus_sign: [viable](https://marketplace.eclipse.org/content/viable-vim-eclipse) 133 | * :heavy_plus_sign: ~[vimplugin](https://sourceforge.net/projects/vimplugin/)~ 134 | * [NetBeans](https://netbeans.apache.org/) - Java IDE 135 | * :heavy_plus_sign: [jVI](https://jvi.sourceforge.net/) - A Vim-editor clone for the NetBeans IDE. 136 | * :heavy_plus_sign: ~[viex](https://sourceforge.net/projects/viex/)~ 137 | * [Visual Studio](https://visualstudio.microsoft.com/) 138 | * :heavy_plus_sign: [VsVim (Visual Studio 2015-2019)](https://marketplace.visualstudio.com/items?itemName=JaredParMSFT.VsVim) - install through the extensions inside Visual Studio 139 | * :heavy_plus_sign: [VsVim 2022 (Visual Studio 2022)](https://marketplace.visualstudio.com/items?itemName=JaredParMSFT.VsVim2022Preview) - install through the extensions inside Visual Studio 140 | * :heavy_plus_sign: [viemu](http://www.viemu.com/) - add Vim emulation to Visual Studio, SQL Server, Word & Outlook. 141 | * [Geany](https://www.geany.org/) 142 | * :heavy_plus_sign: [vimode](https://github.com/geany/geany-plugins/blob/master/vimode/README) - The vimode plugin can be enabled from the settings. 143 | * :white_check_mark: [KDevelop](https://www.kdevelop.org/) - Uses the same editor component as Kate. Enable [Vi-mode](https://docs.kde.org/stable5/en/kate/katepart/vi-input-mode-chapter.html) in the editor settings. 144 | * :white_check_mark: [Qt Creator](https://www.qt.io/product/development-tools) - Vim mode is built-in. Enable [FakeVim](https://doc.qt.io/qtcreator/creator-reference-preferences-fakevim.html) via Preferences > FakeVim. 145 | * :white_check_mark: [RStudio](https://posit.co/download/rstudio-desktop/) - There's a built-in [Vim Editing Mode](https://stackoverflow.com/a/47208291). 146 | * :white_check_mark: [MonoDevelop](https://www.monodevelop.com/) - Cross platform IDE for C#, F# and more, with [Vi-mode](https://www.monodevelop.com/archived/developers/tasks/source-editing/vi-mode/). 147 | * :white_check_mark: ~[pida](https://launchpad.net/pida)~ - An IDE that aims to use the tools you wish to use(including Vim and Emacs). 148 | * DrRacket - IDE for learning the Racket language. 149 | * :heavy_plus_sign: ~[DrRacket Vim Tool](https://github.com/takikawa/drracket-vim-tool)~ - An IDE that aims to use the tools you wish to use(including Vim and Emacs). 150 | * :white_check_mark: [Zed](https://zed.dev/) - Vim mode is built-in. Can be [enabled](https://zed.dev/docs/configuring-zed#vim) and [configured](https://zed.dev/docs/vim) in the settings file. 151 | 152 | ## Image Editors 153 | * :white_check_mark: [rx](https://rx.cloudhead.io/) - A pixel editor. 154 | * :white_check_mark: [ViPaint](https://gitlab.com/jgkamat/ViPaint) - A modal Vi-like painting program. 155 | 156 | ## Image Viewers 157 | * :white_check_mark: [vimiv-qt](https://github.com/karlch/vimiv-qt) - An image viewer with Vim-like keybindings. 158 | * :white_check_mark: [xzgv](https://sourceforge.net/projects/xzgv/) - Keyboard driven image viewer with Vim-style navigation. 159 | * :white_check_mark: [Pim](https://github.com/Narrat/Pim) - A PyGObject based image viewer with Vim-like keybindings. 160 | * :white_check_mark: [imv](https://sr.ht/~exec64/imv/) - A command line image viewer intended for use with tiling window managers (X11/Wayland). 161 | * :white_check_mark: [nsxiv](https://codeberg.org/nsxiv/nsxiv) - A maintained fork of sxiv. 162 | * :white_check_mark: ~[sxiv](https://github.com/xyb3rt/sxiv)~ - See nsxiv instead. 163 | * :white_check_mark: ~[vimiv](https://github.com/karlch/vimiv)~ - See vimiv-qt. 164 | 165 | ## Hex editors 166 | * :white_check_mark: [bvi](https://bvi.sourceforge.net/) - A Hex editor for those familiar with Vi-like keybindings 167 | * :white_check_mark: [hed](https://repo.or.cz/w/hed.git) - A terminal hexadecimal editor with Vim-like controls. 168 | * :white_check_mark: [hexer](https://devel.ringlet.net/editors/hexer/) - a Vi-like binary editor. 169 | * :white_check_mark: [hx](https://github.com/krpors/hx) - Hex editor for the terminal with simple Vim-like keybindings. 170 | * :white_check_mark: ~[HEdit](https://github.com/95ulisse/hedit)~ - A Vim-like terminal-based hex editor scriptable with JS. 171 | * :white_check_mark: ~[bviplus](https://bviplus.sourceforge.net/)~ - An ncurses based Gex editor with a Vim-like interface. 172 | 173 | ## Misc 174 | * :white_check_mark: [Foliate](https://johnfactotum.github.io/foliate/) - An e-book reader with basic vim-like navigation 175 | * :white_check_mark: [fx](https://github.com/antonmedv/fx) - Terminal based JSON viewer. 176 | * :white_check_mark: [glow](https://github.com/charmbracelet/glow) - Terminal based markdown reader. 177 | * :white_check_mark: [gollum](https://github.com/gollum/gollum) - A Git-powered wiki with built-in vim editing mode. Start with `--default-keybind vim`. 178 | * :white_check_mark: [mdp](https://github.com/visit1985/mdp) - A command-line based markdown presentation tool. 179 | * :white_check_mark: [pipedial](https://code.reversed.top/user/xaizek/pipedial) - A terminal selector with basic Vim-like keybindings. 180 | * :white_check_mark: [pulsemixer](https://github.com/GeorgeFilipkin/pulsemixer) - CLI and curses mixer for [PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/). 181 | * :white_check_mark: [sentaku](https://github.com/rcmdnk/sentaku) - A terminal selector with Vim-like keybindings. 182 | * :white_check_mark: [stig](https://github.com/rndusr/stig) - TUI/CLI for the BitTorrent client Transmission. 183 | * :white_check_mark: [termshark](https://termshark.io/) - a UI for tshark with Vim-navigation. 184 | * :white_check_mark: ~[Yzis](https://github.com/chrizel/Yzis)~ - A vi/vim engine that is easy to integrate in any graphical application. 185 | * :white_check_mark: [mycli](https://www.mycli.net) - 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. 186 | * [Anki](https://apps.ankiweb.net/) - Spaced repetition and media-rich cards flashcard program for study. 187 | * ➕ [anki_vimove](https://ankiweb.net/shared/info/1997961715) - Add-on for vi-like movement in deck browser. 188 | 189 | ## Music Players 190 | * :white_check_mark: [ncmpcpp](https://github.com/ncmpcpp/ncmpcpp) - An ncurses client for [mpd](https://www.musicpd.org/). The navigation can quite easily be made to behave like vim with some keyboard configurations. 191 | *
192 | ~/.config/ncmpcpp/bindings 193 | 194 | ``` 195 | def_key "j" 196 | scroll_down 197 | def_key "k" 198 | scroll_up 199 | def_key "h" 200 | previous_column 201 | def_key "l" 202 | next_column 203 | def_key "ctrl-b" 204 | page_up 205 | def_key "ctrl-u" 206 | page_up 207 | def_key "ctrl-f" 208 | page_down 209 | def_key "ctrl-d" 210 | page_down 211 | def_key "g" 212 | move_home 213 | def_key "G" 214 | move_end 215 | def_key "n" 216 | next_found_item 217 | def_key "N" 218 | previous_found_item 219 | ``` 220 |
221 | * :white_check_mark: [cmus](https://github.com/cmus/cmus) - A console music player with vim-like [keybindings](https://man.archlinux.org/man/cmus.1.en#KEYBINDINGS). 222 | * :white_check_mark: [vimus](https://github.com/vimus/vimus) - An MPD client with Vim-like keybindings. 223 | * :white_check_mark: [vimpc](https://github.com/boysetsfrog/vimpc) - A console mpd client that provides a vim-like interface. Default keybindings in the [help file](https://github.com/boysetsfrog/vimpc/blob/master/doc/help.txt) 224 | * :white_check_mark: [vitunes](http://vitunes.org/) - An MPD client with Vi-like bindings. 225 | * :white_check_mark: [pms](https://kimtore.github.io/pms/) - A frontend to MPD with Vim-like keybindings. 226 | * :white_check_mark: [siren](https://www.kariliq.nl/siren/) - A text-based audio player with [Vim-like](https://www.kariliq.nl/man/siren.1.html) keybindings. 227 | * Spotify 228 | * :white_check_mark: [spotify-tui](https://github.com/Rigellute/spotify-tui) - TUI for Spotify with Vim-like keybindings. 229 | * :heavy_plus_sign: [spicetify](https://spicetify.app/) - an extension framework for spotify. Includes an extension with [vim-like](https://spicetify.app/docs/advanced-usage/extensions/#keyboard-shortcut) keybindings. 230 | * :white_check_mark: ~[herrie](https://github.com/EdSchouten/herrie)~ - a MPD player with Vim-like [keybindings](https://github.com/EdSchouten/herrie/blob/master/herrie/man/00-man). 231 | 232 | ## Music Production 233 | * :white_check_mark: ~[pineapple-tracker](https://github.com/pineapple-tracker/pineapple-tracker)~ - A console-based sequencer with a vi-style UI. 234 | * [Reaper](https://www.reaper.fm/) - A DAW. 235 | * :heavy_plus_sign: [Reaper-Keys](https://github.com/gwatcha/reaper-keys) - Bringing a modal editor to the Reaper DAW. 236 | 237 | ## News/RSS Readers 238 | * :heavy_plus_sign: [Newsboat](https://newsboat.org/) - RSS/Atom reader with a TUI. 239 | * :heavy_plus_sign: ~[Newsbeuter](https://github.com/akrennmair/newsbeuter)~ - Unmaintained, see Newsboat./ 240 | 241 | ## Office Productivity 242 | * [LibreOffice](https://www.libreoffice.org/) 243 | * :heavy_plus_sign: ~[vibreoffice](https://github.com/seanyeh/vibreoffice)~ - Vi Mode for LibreOffice/OpenOffice. 244 | * :heavy_plus_sign: [vibreoffice](https://github.com/Nazo1412/vibreoffice) - Vi Mode for LibreOffice/OpenOffice, fork that supports calc. 245 | * [AbiWord](http://www.abisource.com/) - An OSS word processor. 246 | * :heavy_plus_sign: It can be [configured](http://recycledelectron.blogspot.com/2009/01/vi-and-emacs-key-bindings-in-abiword.html) to get Vim keybindings. 247 | * :white_check_mark: [sc](https://en.wikipedia.org/wiki/Sc_(spreadsheet_calculator)) - The venerable Spreadsheet Calculator with Vim-like [keybindings](https://www.linuxjournal.com/article/10699). 248 | * :white_check_mark: [sc-im](https://github.com/andmarti1424/sc-im) - Like sc but improved, a Vim-like spreadsheet calculator. 249 | * :white_check_mark: [VisiData](https://www.visidata.org/) - A TUI data exploration tool with Vim-like [navigation](https://jsvine.github.io/intro-to-visidata/basics/navigating-visidata/). 250 | * Google Docs Editors suite 251 | * :heavy_plus_sign: [SheetKeys](https://github.com/philc/sheetkeys) - Browser extension (Chrome and Firefox) which adds Vim keybindings to Google Sheets. 252 | 253 | ## Pagers 254 | * :white_check_mark: [less](https://en.wikipedia.org/wiki/Less_(Unix)) 255 | * :white_check_mark: [bat](https://github.com/sharkdp/bat) 256 | 257 | ## PDF Viewers 258 | * :white_check_mark: [apvlv](https://github.com/naihe2010/apvlv) - A PDF Viewer that acts Like Vim 259 | * :white_check_mark: [MuPDF](https://mupdf.com) - PDF and ebook reader with [vim keybindings](http://tuxdiary.com/2015/04/18/mupdf/). 260 | * :white_check_mark: [zathura](https://pwmt.org/projects/zathura) - Document reader, vim-keybindings, partly based on MuPDF. Linux only. 261 | * :white_check_mark: [SumatraPDF](https://www.sumatrapdfreader.org/free-pdf-reader) - Document reader, vim-keybindings. Windows only. 262 | * :white_check_mark: [Okular](https://okular.kde.org/) - Has some [basic](https://docs.kde.org/stable5/en/okular/okular/okular.pdf) Vim-like navigation. 263 | * :white_check_mark: [Evince](https://gitlab.gnome.org/GNOME/evince) - Has some basic Vim-like navigation. 264 | * :white_check_mark: [xpdf](https://www.xpdfreader.com/) - This PDF viewer can be [configured](https://stackoverflow.com/a/11800265/265508) to get Vim-like navigation. 265 | * :white_check_mark: [Sioyek](https://github.com/ahrm/sioyek) - Both keyboard and (optionally) mouse focused. Configurable and has the possibility of adding and developing plugins. 266 | * Preview.app - macOS native document viewer: 267 | * :heavy_plus_sign: [preview-vim](https://github.com/xrisk/preview-vim) - Adds vim-like keybindings, works via Karabiner Elements. 268 | 269 | ## Personal Knowledge Management 270 | * :white_check_mark: [Obsidian](https://obsidian.md/) - under "Editor" options 271 | * [Logseq](https://logseq.com/) 272 | * :heavy_plus_sign: [logseq-plugin-vim-shortcuts](https://github.com/vipzhicheng/logseq-plugin-vim-shortcuts) - normal mode commands deal with whole blocks, editing text is only possible in edit mode 273 | * :white_check_mark: [Joplin](https://joplinapp.org/) - under "Tools" → "Options" → "General" → "Show Advanced Settings" → "Keyboard Mode" 274 | * :white_check_mark: [Trilium](https://github.com/zadam/trilium) - 'Enable Vim Keybindings' added to Options in early-2022 275 | * code notes use the [CodeMirror](https://github.com/codemirror/dev/) editor and its [Vim mode](https://codemirror.net/5/demo/vim.html) 276 | 277 | ## Social 278 | * :white_check_mark: [iamb](https://github.com/ulyssa/iamb) - A Matrix client for Vim addicts. 279 | * :white_check_mark: [matui](https://github.com/pkulak/matui) - a Matrix TUI with vim-like navigation. 280 | * :white_check_mark: [tut](https://github.com/RasmusLindroth/tut) - a Mastodon client with vim-like navigation 281 | * [irssi](https://github.com/shabble/irssi-scripts/tree/master/vim-mode) - the popular IRC client. 282 | * :heavy_plus_sign: [vim_mode](https://github.com/shabble/irssi-scripts/tree/master/vim-mode) plugin. 283 | * [weechat](https://weechat.org/) - A flexible IRC client. 284 | * :heavy_plus_sign: [weechat-vimode](https://github.com/GermainZ/weechat-vimode) - A script that will configure Weechat to get Vim-like navigation. 285 | * :white_check_mark: [scli](https://github.com/isamert/scli) - Signal messenger TUI with Vim-like keybindings. 286 | * ~[rtv](https://github.com/michael-lazar/rtv)~ - A Reddit TUI viewer 287 | * ~[vchatter](https://vchatter.sourceforge.net/)~ - A Vi-like Jabber chat client. 288 | 289 | ## Source Code Management 290 | * :white_check_mark: [git](https://git-scm.com/) - 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`: 291 | * ```ini 292 | [user] 293 | editor = vim 294 | ``` 295 | * :white_check_mark: [tig](https://jonas.github.io/tig/) - Text interface for git. Works mostly like vim out of the box, but can be enhanced by sourcing these [keybindings](https://github.com/jonas/tig/blob/master/contrib/vim.tigrc) in your `~/.tigrc`. 296 | * :white_check_mark: [hg/mercurical](https://www.mercurial-scm.org/) - Put in your `~/.config/hg/hgrc`: 297 | * ```ini 298 | [ui] 299 | editor = vim 300 | ``` 301 | * :white_check_mark: [GitUI](https://github.com/extrawurst/gitui) - GitUI provides you with the comfort of a git GUI but right in your terminal. 302 | * instruction how to enable vi bindings - https://github.com/extrawurst/gitui/blob/master/KEY_CONFIG.md 303 | 304 | 305 | 306 | 307 | ## Shells 308 | * :white_check_mark: [readline](https://man.archlinux.org/man/readline.3) - 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`: 309 | * ``` 310 | set editing-mode vi 311 | set keymap vi-insert 312 | ``` 313 | * :white_check_mark: [Bash](https://www.gnu.org/software/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`: 314 | * ```bash 315 | set -o vi 316 | ``` 317 | * :heavy_plus_sign: [ble.sh](https://github.com/akinomyoga/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`. 318 | * ``` 319 | # bashrc 320 | 321 | # Add this lines at the top of .bashrc: 322 | [[ $- == *i* ]] && source /path/to/blesh/ble.sh --noattach 323 | 324 | # your bashrc settings come here... 325 | 326 | # Add this line at the end of .bashrc: 327 | [[ ! ${BLE_VERSION-} ]] || ble-attach 328 | ``` 329 | * :white_check_mark: [zsh](https://en.wikipedia.org/wiki/Z_shell) - just put this in your ZSH startup file, most likely `~/.zshrc`: 330 | * ```bash 331 | bindkey -v 332 | ``` 333 | *
334 | Extra text object keybindings 335 | 336 | ```bash 337 | # Add text object extension -- eg ci" da(: 338 | autoload -U select-quoted 339 | zle -N select-quoted 340 | for m in visual viopp; do 341 | for c in {a,i}{\',\",\`}; do 342 | bindkey -M $m $c select-quoted 343 | done 344 | done 345 | ``` 346 |
347 | * :heavy_plus_sign: [zsh-vi-mode](https://github.com/jeffreytse/zsh-vi-mode) - A better and friendly Vim-mode plugin for zsh. 348 | * :white_check_mark: [fish](https://fishshell.com/) - Just add to your `~/.config/fish/config.fish` ([reference](https://stackoverflow.com/a/28445450/265508)): 349 | * ```bash 350 | fish_vi_key_bindings 351 | ``` 352 | * :white_check_mark: [tcsh](https://www.tcsh.org/) - Put this in your tcsh startup file e.g. `~/.tcshrc` ([reference](https://www.oreilly.com/library/view/mac-os-x/0596004583/ch04s02.html)): 353 | * ```bash 354 | bindkey -v 355 | ``` 356 | * :white_check_mark: [ksh](https://en.wikipedia.org/wiki/KornShell) - Put this in your ksh startup file e.g. `~/.kshrc`: 357 | * ```bash 358 | set -o vi 359 | ``` 360 | * :white_check_mark: [nushell](https://www.nushell.sh) - Put this in your config file e.g. `$nu.config-path`: 361 | * ```nu 362 | let-env config = { 363 | # ... 364 | edit_mode: vi, 365 | # ... 366 | } 367 | ``` 368 | 369 | * ✅ [pwsh](https://learn.microsoft.com/en-us/powershell/) - The Readline module offers support for convenient vim support. Add this to your `$Profile`: 370 | * 371 | ``` 372 | Import-Module PSReadLine 373 | # enable Vim on the shell and as editor 374 | $OnViModeChange = [scriptblock]{ 375 | if ($args[0] -eq 'Command') { 376 | # Set the cursor to a blinking block. 377 | Write-Host -NoNewLine "`e[2 q" 378 | } 379 | else { 380 | # Set the cursor to a blinking line. 381 | Write-Host -NoNewLine "`e[5 q" 382 | } 383 | } 384 | 385 | Set-PsReadLineOption -EditMode Vi 386 | Set-PSReadLineOption -ViModeIndicator Script -ViModeChangeHandler $OnViModeChange 387 | ``` 388 | * 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 389 | feedback does not work. Just remove it and it will still work, just no feedback of the mode you're in. 390 | * :white_check_mark: [xsh](https://xon.sh/) - Put this in your run control file `~/.xonshrc`: 391 | * ``` 392 | $VI_MODE = True 393 | ``` 394 | 395 | ## System-wide 396 | * :white_check_mark: [vim-anywhere](https://github.com/cknadler/vim-anywhere) - Spawn a vim buffer from any text input in the operating system. 397 | * :white_check_mark: [Homerow](https://www.homerow.app/) - Add vim-like navigation to any macOS app. 398 | * :white_check_mark: [kindaVim](https://kindavim.app/) - Get Vim motions all over macOS, in text fields, text areas, and other UI elements. 399 | * :white_check_mark: [Scrolla](https://scrolla.app/) - Scroll in macOS using Vim motions. 400 | * :white_check_mark: [sketchyvim](https://github.com/FelixKratz/SketchyVim) - Get vim-like navigation in any macOS text field. 401 | * :white_check_mark: [athame](https://github.com/ardagnir/athame) - Patches your shell to add full Vim support by routing your keystrokes through an actual Vim process. 402 | * :white_check_mark: ~[kommand](https://www.autohotkey.com/board/topic/42706-kommand-a-cross-application-vim-like-hot-key-solution/)~ - A cross-application Vim-like hot key solution. 403 | * :white_check_mark: [win-vind](https://github.com/pit-ray/win-vind) - Control the Windows GUI in the same way as Vim. 404 | * :white_check_mark: [warpd](https://github.com/rvaiya/warpd) - A modal keyboard driven interface for mouse manipulation, Linux (X11/Wayland) 405 | * :white_check_mark: [keystrokes](https://github.com/Darukutsu/keystrokes) - Record you keystrokes and replay them just like in vim macro, Linux (X11/Wayland) 406 | * :white_check_mark: [AltTab](https://alt-tab-macos.netlify.app/) - A utility that brings Windows-style Alt-Tab functionality to macOS with Vim key support. To enable Vim keys, go to: `Preferences` → `Controls` → `Additional controls` → **Select windows using Vim keys**. 407 | 408 | ## System Tools 409 | * :white_check_mark: [htop-vim](https://aur.archlinux.org/packages/htop-vim/) - A patched version the [htop](https://htop.dev/) interactive process viewer that has vim keybindings for navigation. 410 | * :white_check_mark: [btop++](https://github.com/aristocratos/btop) - A resource monitor. To enable Vim-navigation, set in the config file: 411 | * ```ini 412 | vim_keys = True 413 | ``` 414 | * :white_check_mark: [aptitude](https://wiki.debian.org/Aptitude) - ncurses interface for APT on Debian-derived Linux distros. The [keybindings](https://www.debian.org/doc/manuals/aptitude/ch02s05s02.en.html) are already vim-like. 415 | * :white_check_mark: [CopyQ](https://github.com/hluk/CopyQ) - A clipboard manager with basic Vim-like navigation. 416 | * :white_check_mark: [lnav](https://lnav.org/) - A log viewer with minimal Vim-like [navigation](https://docs.lnav.org/en/latest/hotkeys.html). 417 | 418 | 419 | ## Task Management 420 | * :white_check_mark: [Keyban](https://site.keyban.app/) - Kanban board/task management/bullet journal app built for Vim-like operation. 421 | * :white_check_mark: [TuDu](https://code.meskio.net/tudu/) - A comand line interface to manage hierarchical todos. 422 | * :white_check_mark: [calcurse](https://calcurse.org/) - A calendar and scheduling application for the command line with default [vim-like keybindings](http://culot.org/calcurse/manual_en.html#options_keys). 423 | * :white_check_mark: [kabmat](https://github.com/PlankCipher/kabmat) - TUI for managing kanban boards with Vim-like keybindings. 424 | * :white_check_mark: [taskell](https://taskell.app/) - Command-line Kanban board/task management. 425 | * :white_check_mark: [vit](https://github.com/vit-project/vit) - An TUI for [Taskwarrior](https://taskwarrior.org/) Vim-like keybindings. 426 | * :white_check_mark: [Remember The Milk](https://www.rememberthemilk.com/help/answer/basics-basics-keyboard) - A task management application available on various platforms including web, Windows, Linux, macOS desktop, and Android & iOS mobile apps. It offers built-in Vim-like keybindings on its desktop and web versions. 427 | 428 | ## Terminal Emulators 429 | * :white_check_mark: [tmux](https://github.com/tmux/tmux) - the terminal multiplexer, superseding GNU Screen. 430 | *
431 | ~/.config/tmux/tmux.conf 432 | 433 | ```ini 434 | set-option -g status-keys vi # Use Vi bindings in tmux command prompt. 435 | set-window-option -g mode-keys vi # Use Vi bindings in copy and choice mode. 436 | 437 | # Optional: some Vi-like navigation for smart pane switching. 438 | # NOTE this could override default keybindigns like -l. 439 | bind h select-pane -L 440 | bind j select-pane -D 441 | bind k select-pane -U 442 | bind l select-pane -R 443 | ``` 444 |
445 | * :white_check_mark: [alacritty](https://github.com/alacritty/alacritty) - A cross-platform, OpenGL terminal emulator with Vim-like keybindings by default. 446 | * [rxvt-unicode](https://wiki.archlinux.org/title/rxvt-unicode) - The Unicode fork of the rxvt terminal emulator. 447 | * :heavy_plus_sign: [urxvt-vim-scrollback](https://github.com/ervandew/urxvt-vim-scrollback) - Provides Vim-like scrollback mode and pasting. 448 | * :white_check_mark: ~[Termine](https://github.com/thestinger/termite)~ - See alacritty instead. 449 | * :white_check_mark: [Kitty](https://sw.kovidgoyal.net/kitty/) - The fast, feature-rich, GPU based terminal emulator. Through its configuration, users can configure splitting and navigation to mimic the behavior of Vi. 450 | *
451 | ~/.config/kitty/kitty.conf 452 | 453 | ``` 454 | # Jump around neighboring window Vi key binding 455 | map ctrl+shift+w>h neighboring_window left 456 | map ctrl+shift+w>l neighboring_window right 457 | map ctrl+shift+w>j neighboring_window down 458 | map ctrl+shift+w>k neighboring_window up 459 | 460 | map ctrl+shift+w>shift+h move_window left 461 | map ctrl+shift+w>shift+l move_window right 462 | map ctrl+shift+w>shift+j move_window down 463 | map ctrl+shift+w>shift+k move_window up 464 | 465 | # Create a new window splitting the space used by the existing one so that 466 | # the two windows are placed one above the other 467 | map ctrl+shift+w>s launch --location=hsplit 468 | 469 | # Create a new window splitting the space used by the existing one so that 470 | # the two windows are placed side by side 471 | map ctrl+shift+w>v launch --location=vsplit 472 | 473 | # Use nvim as the pager. Remove all ASCII formatting characters. 474 | 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' - 475 | ``` 476 |
477 | 478 | ## Text Editors 479 | We know that Vi-[clones](http://www.linfo.org/vi/clones.html)/derivatives have Vi(m) keybindings so let's skip those here (Vim, NeoVim, vile, elvis, nvi, vis, pyvim, jVi, ex-vi ...) 480 | 481 | * Emacs 482 | * :white_check_mark: [evil-mode](https://www.emacswiki.org/emacs/Evil) - Extensible vi layer for Emacs. 483 | * :heavy_plus_sign: [spacemacs](https://www.spacemacs.org/) - Emacs configuration package that improves the Emacs experience, including vim bindings via `evil-mode`. Features a vim-like leader (space) for common commands. 484 | * :heavy_plus_sign: [doom emacs](https://github.com/doomemacs/doomemacs) - Configuration package that provides a similar experience to Spacemacs (including `evil-mode`. Also implements spacebar-as-leader-key. 485 | * :heavy_plus_sign: ~~[Vimpulse](https://www.emacswiki.org/emacs/Vimpulse)~~ Deprecated, check out Evil. 486 | * :heavy_plus_sign: ~~[Vim Mode](https://www.emacswiki.org/emacs/VimMode)~~ Deprecated, check out Evil. 487 | * :white_check_mark: [Sublime Text](https://www.sublimetext.com/) has a bult-in [Vintage mode](https://www.sublimetext.com/docs/vintage.html) that can be enabled. 488 | * :heavy_plus_sign: [NeoVintageous](https://github.com/NeoVintageous/NeoVintageous) - An advanced Vim emulation layer. 489 | * :heavy_plus_sign: ~[Vintageous](https://github.com/guillermooo/Vintageous)~ 490 | * :heavy_plus_sign: ~[VintageEx](https://github.com/SublimeText/VintageEx)~ 491 | * :heavy_plus_sign: ~[Six](https://packagecontrol.io/packages/Six)~ 492 | * QTextEdit/QPlainTextEdit 493 | * :heavy_plus_sign: [FakeVim](https://github.com/hluk/FakeVim) 494 | * :white_check_mark: [amp](https://amp.rs/) - A modal terminal text. 495 | * :white_check_mark: [kakoune](https://github.com/mawww/kakoune) - A modal text editor inspired by Vim-navigation. 496 | * :white_check_mark: [moe](https://editor.moe/) - A modal text editor with a Vim-like mode. 497 | * :white_check_mark: [kate](https://kate-editor.org/) - A text editor with a [Vi-mode](https://kate-editor.org/kate-vi-mode/). 498 | * :white_check_mark: [Komodo Edit](https://www.activestate.com/products/komodo-edit/) - Has [Vi emulation](https://www.activestate.com/blog/komodos-vi-emulation/). 499 | * :white_check_mark: [rim](https://github.com/mathall/rim) - The aspiring Vim-like text editor. 500 | * :white_check_mark: [slickedit](https://www.slickedit.com/) - A Code editor with [Vim emulation](https://www.slickedit.com/images/stories/products/slickedit/emulation_charts/Vim_Emulation.pdf). 501 | * :white_check_mark: [vy](https://github.com/vyapp/vy) - A Vim-like in python made from scratch. 502 | * :white_check_mark: [WinVi](https://winvi.de/en/) - A Windows text editor highly compatible with Vi. 503 | * :white_check_mark: [VNote](http://app.vnote.fun/en_us/) - A note-taking editor with Vi mode and Vi-like navigation. 504 | * :white_check_mark: ~[oni2 (onivim)](https://github.com/onivim/oni2)~ - [Deprecated](https://github.com/onivim/oni2/issues/3861). 505 | * :white_check_mark: ~[editra](https://github.com/cjprecord/editra)~ - Developers Text Editor, with a Vi-mode. 506 | * [Inkdrop](https://www.inkdrop.app/) - A Markdown note taking app. 507 | * :heavy_plus_sign: [inkdrop-vim](https://github.com/inkdropapp/inkdrop-vim) - Provides a Vim modal control for Inkdrop. 508 | * :white_check_mark: [GNOME Text Editor](https://gitlab.gnome.org/GNOME/gnome-text-editor) - If it's [installed](https://askubuntu.com/a/1439846) with APT, enable the Vim mode by running this in a Terminal: 509 | * ```bash 510 | $ gsettings set org.gnome.TextEditor keybindings vim 511 | ``` 512 | * ~Atom~ - [Discontinued](https://github.blog/2022-06-08-sunsetting-atom/) 513 | * :heavy_plus_sign: ![atom-vim-mode-plus](https://github.com/atom/vim-mode)~ 514 | * :heavy_plus_sign: ~[atom-vim-mode-plus](https://github.com/t9md/atom-vim-mode-plus)~ 515 | 516 | ## Web Apps 517 | * :white_check_mark: [HackerRank](https://www.hackerrank.com/) - Coding challenges and interview preparation across multiple domains. 518 | * :white_check_mark: [leetcode](https://leetcode.com/) - Algorithmic programming problem repository. 519 | * :white_check_mark: [OnlineGDB](https://www.onlinegdb.com/) - Online compiler and debugger supporting many programming languages. 520 | * :white_check_mark: [Rust Playground](https://play.rust-lang.org/) - The editor in the rust playground has a Vim mode. 521 | 522 | ## Web browsers 523 | * :white_check_mark: [qutebrowser](https://qutebrowser.org/) 524 | * :white_check_mark: [Vieb](https://vieb.dev/) - Vim bindings for the web by design (electron based) 525 | * Firefox 526 | * :heavy_plus_sign: [Tridactyl](https://addons.mozilla.org/en-US/firefox/addon/tridactyl-vim/) 527 | * :heavy_plus_sign: [Vimium-FF](https://addons.mozilla.org/en-US/firefox/addon/vimium-ff/) 528 | * :heavy_plus_sign: [Vimium C](https://addons.mozilla.org/en-US/firefox/addon/vimium-c/) 529 | * :heavy_plus_sign: [Surfingkeys](https://addons.mozilla.org/en-US/firefox/addon/surfingkeys_ff/) 530 | * :heavy_plus_sign: [Vim Vixen](https://addons.mozilla.org/en-US/firefox/addon/vim-vixen/) 531 | * :heavy_plus_sign: [vimkeybindings](https://addons.mozilla.org/en-US/firefox/addon/vimkeybindings/) - Small addon adding just basic keyboard navigation shortcuts. 532 | * :heavy_plus_sign: [Krabby](https://krabby.netlify.app/) - keyboard-based navigation inspired by Kakoune. 533 | * :heavy_plus_sign: ~[Vimperator](http://vimperator.org/vimperator)~ - See Tridactyl instead 534 | * :heavy_plus_sign: ~[Pentadactyl](https://en.wikipedia.org/wiki/Pentadactyl)~ - See Tridactyl instead 535 | * :heavy_plus_sign: [Video Speed Controller](https://addons.mozilla.org/en-US/firefox/addon/videospeed/) – Allows remapping HTML5 video playback controls (e.g., seeking with `h/l`, speed adjustment with `j/k`) to match Vim-like navigation. 536 | * Chrome 537 | * :heavy_plus_sign: [Vimium](https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb) 538 | * :heavy_plus_sign: [Vimium C](https://chrome.google.com/webstore/detail/vimium-c-all-by-keyboard/hfjbmagddngcpeloejdejnfgbamkjaeg?hl=en) 539 | * :heavy_plus_sign: ~[cVim](https://github.com/1995eaton/chromium-vim)~ 540 | * :heavy_plus_sign: [Surfingkeys](https://chrome.google.com/webstore/detail/surfingkeys/gfbliohnnapiefjpjlpjnehglfpaknnc) 541 | * :heavy_plus_sign: ~[wasavi](https://github.com/akahuku/wasavi)~ - Transform text areas into a vi editor. 542 | * :heavy_plus_sign: [Krabby](https://krabby.netlify.app/) - keyboard-based navigation inspired by Kakoune. 543 | * :heavy_plus_sign: ~[ViChrome](https://github.com/k2nr/ViChrome)~ 544 | * :heavy_plus_sign: ~[vrome](https://github.com/jinzhu/vrome)~ 545 | * :heavy_plus_sign: [Video Speed Controller](https://chromewebstore.google.com/detail/video-speed-controller/nffaoalbilbmmfgbnbgppjihopabppdk) – Allows remapping HTML5 video playback controls (e.g., seeking with `h/l`, speed adjustment with `j/k`) to match Vim-like navigation. 546 | * Safari 547 | * :heavy_plus_sign: [Surfingkeys](https://apps.apple.com/us/app/surfingkeys/id1609752330) 548 | * :heavy_plus_sign: [Vimari](https://apps.apple.com/us/app/vimari/id1480933944?ls=1&mt=12) - A Safari [extension](https://televator.net/vimari/) that provides vim style keyboard based navigation, based on Vimium. 549 | * Edge 550 | * :heavy_plus_sign: [Surfingkeys](https://microsoftedge.microsoft.com/addons/detail/surfingkeys/kgnghhfkloifoabeaobjkgagcecbnppg) 551 | * Opera 552 | * :heavy_plus_sign: ~[wasavi](https://github.com/akahuku/wasavi)~ - Transform text areas into a vi editor. 553 | * :heavy_plus_sign: ~[VimOperate](https://github.com/rscircus/VimOperate)~ 554 | * :white_check_mark: [w3m](https://w3m.sourceforge.net/) - A text-based web browser with some Vim-like [keyboard shortcuts](https://cheatsheetfactory.geekyhacker.com/linux/w3m). 555 | * :white_check_mark: [netrik](https://netrik.sourceforge.net/) - A text-based web browser with Vi-inspired keyboard commands. 556 | * :white_check_mark: [lynx](https://lynx.invisible-island.net/) - 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`: 557 | * ```bash 558 | alias lynx='lynx -vikeys' 559 | ``` 560 | * :white_check_mark: [vimb](https://fanglingsu.github.io/vimb/) - The vim like browser. 561 | * :white_check_mark: [jumanji](https://pwmt.org/projects/jumanji) - A keyboard driven web browser. 562 | * :white_check_mark: [luakit](https://luakit.github.io/) - A highly configurable browser with [Vim-like](https://wiki.archlinux.org/title/Luakit) navigation. 563 | * :white_check_mark: [nyxt](https://github.com/atlas-engineer/nyxt) - A keyboard-driven web browser inspired by Vim and Emacs. 564 | * :white_check_mark: [wyeb](https://github.com/jun7/wyeb) - A Vim-like webkit2gtk web browser. 565 | * :white_check_mark: [bombadillo](https://bombadillo.colorfield.space/) - A non-web browser but for other protocols e.g. Gopher, Gemini, Finger. 566 | * :white_check_mark: ~[Vimprobable](https://github.com/ThomasAdam/vimprobable)~ 567 | * :white_check_mark: ~[dwb](https://github.com/diab0l/dwb)~ - See qutebrowser instead. 568 | * :white_check_mark: ~[uzbl](https://www.uzbl.org/)~ 569 | * :white_check_mark: ~[xombrero](https://github.com/conformal/xombrero)~ - A minimalist web browser with vi-like keyboard commands. 570 | * :white_check_mark: ~[Cream-Browser](https://github.com/linkdd/cream-browser)~ - A browser developped in C with GTK+ having the same interface as Vimperator. 571 | * Various 572 | * :heavy_plus_sign: [firenvim](https://github.com/glacambre/firenvim) - Transform text areas into a neovim instance that inherits your existing config (keymaps, plugins, etc). 573 | 574 | ## Window Managers 575 | * :white_check_mark: [howm](https://github.com/HarveyHunt/howm) - A lightweight, X11 tiling window manager that behaves like vim. 576 | * :white_check_mark: [i3wm](https://i3wm.org/) - A tilling window manager with Vim-like [keyboard shortcuts](https://i3wm.org/docs/refcard.html). 577 | * :white_check_mark: [sway](https://swaywm.org/) - A drop-in replacement for i3 for Wayland. 578 | * :white_check_mark: [wmii](https://github.com/0intro/wmii) - A small and scriptable window manager that can be configured with Vim-like [keyboard shortcuts](https://wiki.debian.org/Wmii#Basic_Configuration). 579 | * :white_check_mark: [euclid-wm](https://code.google.com/archive/p/euclid-wm/) - A minimalist tiling wm with default Vim-like keybindings. 580 | * :white_check_mark: [howm](https://github.com/HarveyHunt/howm) - A lightweight tiling X11 window manager that mimics vi. 581 | * :white_check_mark: [AppGrid](https://github.com/mjolnirapp/AppGrid) - A window manager for macOS with Vim-like hotkeys. 582 | 583 | 584 | ## WYSIWYG Editors 585 | * :white_check_mark: [zettlr](https://www.zettlr.com) - Markdown document editor on the fly, vim+emacs keybindings. 586 | * :white_check_mark: [VNote](https://vnotex.github.io/vnote/en_us/) - A note taking app. 587 | 588 | 589 | 590 | 591 | 592 | # Keyboard Remapping 593 | Keyboard remapping tools can improve your efficiency while navigating across the system, as well as enhance your experience inside Vim. 594 | They allow you to flexibly remap any key—for example, replacing the arrow keys with `hjkl`, among other useful remappings. 595 | Most of these tools are universal enough to work system-wide, even inside a Linux TTY, due to their low-level nature. 596 | * :heavy_plus_sign: [keyd](https://github.com/rvaiya/keyd) - A key remapping daemon for Linux. 597 | *
598 | Example: Vim-like remaps using keyd 599 | 600 | ```ini 601 | [ids] # A valid config file has the extension .conf and must begin with an [ids] section 602 | * 603 | [main] 604 | # Map Caps Lock to Escape when tapped and Control when held. 605 | capslock = overload(control, esc) # Super useful for Vim and not only! 606 | 607 | # Make Alt a modifier ("[alt") for defined keys and act as regular Alt (":A]") when used with other keys. 608 | [alt:A] 609 | h = left 610 | k = up 611 | j = down 612 | l = right 613 | 614 | 0 = home 615 | 4 = end 616 | # i = home 617 | # a = end 618 | 619 | u = pageup 620 | d = pagedown 621 | 622 | x = delete 623 | 624 | # Check the keyd repo for more! 625 | ``` 626 |
627 | 628 | 629 | 630 | 631 | 632 | # Contributing 633 | 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! 634 | 635 | * Please: 636 | * add links to references for configuration if you have any. 637 | * use [XDG paths](https://wiki.archlinux.org/title/XDG_Base_Directory) when possible. 638 | * It's okay to list deprecated or unmaintained software for the sake of completness, but let's put a ~~strigke-through~~ on them. 639 | 640 | # Acknowledgments 641 | Hats off to the authors of these articles that helped kick-start this list together with the author's own experiences: [#1](https://www.reddit.com/r/vim/comments/3tluqr/my_list_of_applications_with_vi_keybindings/), [#2](https://reversed.top/2016-08-13/big-list-of-vim-like-software/), [#3](https://www.slant.co/topics/7131/~programming-text-editors-with-vim-key-bindings), [#4](https://vim.reversed.top/), [#5](https://vim.fandom.com/wiki/Vim_key_bindings_for_web_browsers). 642 | -------------------------------------------------------------------------------- /bin/update_list_count.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Update the count of listed programs / extension in the README.md 3 | 4 | set -o errexit 5 | set -o nounset 6 | set -o pipefail 7 | [[ "${TRACE-0}" =~ ^1|t|y|true|yes$ ]] && set -o xtrace 8 | 9 | FILE="README.md" 10 | 11 | MARKER_NATIVE="" 12 | MARKER_EXTENSIONS="" 13 | 14 | TEMPLATE_NATIVE="[![${MARKER_NATIVE}](https://img.shields.io/badge/Native%%20programs%%20listed-%d-brightgreen)](#)" 15 | TEMPLATE_EXTENSIONS="[![${MARKER_EXTENSIONS}](https://img.shields.io/badge/Extensions%%20listed-%d-blue)](#)" 16 | 17 | SIGN_NATIVE=:white_check_mark: 18 | SIGN_EXTENSIONS=:heavy_plus_sign: 19 | 20 | count_occurences() { 21 | local sign="$1" 22 | c=$(grep --count "$sign" "$FILE") 23 | echo $(($c-1)) # Listed in explanation - does not count! 24 | } 25 | 26 | update_count() { 27 | local count="$1" 28 | local template="$2" 29 | local search="$3" 30 | 31 | img_tag=$(printf "$template" "$count") 32 | sed -i.bak -e "s|^.*${search}.*$|${img_tag}|" "$FILE" 33 | test -e "${FILE}.bak" && rm "${FILE}.bak" 34 | } 35 | 36 | count_native=$(count_occurences $SIGN_NATIVE) 37 | count_extensions=$(count_occurences $SIGN_EXTENSIONS) 38 | 39 | printf "Found %d native entries\n" "$count_native" 40 | printf "Found %d extension entries\n" "$count_extensions" 41 | 42 | update_count "$count_native" "$TEMPLATE_NATIVE" "$MARKER_NATIVE" 43 | update_count "$count_extensions" "$TEMPLATE_EXTENSIONS" "$MARKER_EXTENSIONS" 44 | -------------------------------------------------------------------------------- /img/github_md_toc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/erikw/vim-keybindings-everywhere-the-ultimate-list/eaeb806a1d42ced69710e8f01a707b288ded4793/img/github_md_toc.png --------------------------------------------------------------------------------