IdeaVim
IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs.
Contact maintainers:
- Bug tracker
- @IdeaVim on Twitter
- Chat on gitter
- IdeaVim Channel on JetBrains Server
Resources:
Compatibility
IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive, Android Studio and other IntelliJ platform based IDEs.
Setup
-
IdeaVim can be installed via
Settings | Plugins. See the detailed instructions. -
Use
Tools | Vim Emulatorin the menu to enable or disable emulation. -
Use the
~/.ideavimrcfile as an analog of~/.vimrc(learn more). The XDG standard is supported, as well. -
Shortcut conflicts can be resolved by using:
- On Linux & Windows:
File | Settings | Editor | Vim&File | Settings | Keymap, - On macOS:
Preferences | Editor | Vim&Preferences | Keymap, - Regular Vim mappings in the
~/.ideavimrcfile.
- On Linux & Windows:
Get Early Access
Would you like to try new features and fixes? Join the Early Access Program and receive EAP builds as updates!
Or subscribe to EAP updates manually:
- Open
Settings | Plugins - Click the gear icon
⚙️ , selectManage Plugin Repositories, and add the following url:
https://plugins.jetbrains.com/plugins/eap/ideavim
See the changelog for the list of unreleased features.
It is important to distinguish EAP builds from traditional pre-release software. Please note that the quality of EAP versions may at times be way below even usual beta standards.
You can always leave your feedback with:
- @IdeaVim in Twitter
- Bug tracker
Summary of Supported Vim Features
Here are some examples of supported vim features and commands:
- Normal / insert / visual / select / etc. modes
- Motion / deletion / change / window / etc. commands
- Key mappings
- Marks / Macros / Digraphs / Registers
- Some set commands
- Full Vim regexps for search and search/replace
- Vim web help
~/.ideavimrcconfiguration file
- vim-easymotion
- NERDTree
- vim-surround
- vim-multiple-cursors
- vim-commentary
- argtextobj.vim
- vim-textobj-entire
- ReplaceWithRegister
- vim-exchange
- vim-highlightedyank
- vim-paragraph-motion
- vim-indent-object
See also:
- The list of all supported commands
- Top feature requests and bugs
- Vimscript support roadmap
- List of supported in-build functions
Files
~/.ideavimrc- Your IdeaVim-specific Vim initialization commands
Example (click to see)
""" Map leader to space ---------------------
let mapleader=" "
""" Plugins --------------------------------
set surround
set multiple-cursors
set commentary
set argtextobj
set easymotion
set textobj-entire
set ReplaceWithRegister
""" Plugin settings -------------------------
let g:argtextobj_pairs="[:],(:),<:>"
""" Common settings -------------------------
set showmode
set so=5
set incsearch
set nu
""" Idea specific settings ------------------
set ideajoin
set ideastatusicon=gray
set idearefactormode=keep
""" Mappings --------------------------------
map <leader>f <Plug>(easymotion-s)
map <leader>e <Plug>(easymotion-f)
map <leader>d <Action>(Debug)
map <leader>r <Action>(RenameElement)
map <leader>c <Action>(Stop)
map <leader>z <Action>(ToggleDistractionFreeMode)
map <leader>s <Action>(SelectInProjectView)
map <leader>a <Action>(Annotate)
map <leader>h <Action>(Vcs.ShowTabbedFileHistory)
map <S-Space> <Action>(GotoNextError)
map <leader>b <Action>(ToggleLineBreakpoint)
map <leader>o <Action>(FileStructurePopup)Suggested options (click to see)
Here is also a list of the suggested options from defaults.vim
" Show a few lines of context around the cursor. Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5
" Do incremental searching.
set incsearch
" Don't use Ex mode, use Q for formatting.
map Q gqYou can read your ~/.vimrc file from ~/.ideavimrc with this command:
source ~/.vimrc
Also note that if you have overridden the user.home JVM option, this
will affect where IdeaVim looks for your .ideavimrc file. For example, if you
have -Duser.home=/my/alternate/home then IdeaVim will source
/my/alternate/home/.ideavimrc instead of ~/.ideavimrc.
Alternatively, you can set up initialization commands using XDG standard.
Put your settings to $XDG_CONFIG_HOME/ideavim/ideavimrc file.
Emulated Vim Plugins
Executing IDE Actions
IdeaVim adds various commands for listing and executing arbitrary IDE actions as
Ex commands or via :map command mappings:
Executing actions:
:action {action_id}- Execute an action by id. Works from Ex command line.
<Action>(*action_id*)- For the mappings you can use a special
<Action>keyword. Don't forget the parentheses.
- For the mappings you can use a special
Finding actions:
-
:actionlist [pattern]- Find IDE actions by id or keymap pattern (E.g.
:actionlist extract,:actionlist <C-D)
- Find IDE actions by id or keymap pattern (E.g.
-
In addition to
:actionlistcommand, IdeaVim providesIdeaVim: track action Idsoption to extract the ids of executed command. This option can be found in "Search everywhere" (doubleshift).
Examples:
" Map \r to the Reformat Code action
:map \r <Action>(ReformatCode)
" Map <leader>d to start debug
:map <leader>d <Action>(Debug)
" Map \b to toggle the breakpoint on the current line
:map \b <Action>(ToggleLineBreakpoint)Some popular actions:
QuickJavaDoc - Quick Documentation (not only for java, all languages)
ShowErrorDescription - Show description of the error under the caret (cursor hovering)
QuickImplementations - Quick Definition
💎 Contributing
The power of contributing drives IdeaVim
See CONTRIBUTING.md to start bringing your value to the project.
Authors
See AUTHORS.md for a list of authors and contributors.
IdeaVim tips and tricks
-
Use the power of IJ and Vim:
set ideajointo enable join via the IDE. See the examples.- Make sure
ideaputis enabled forclipboardto enable native IJ insertion in Vim. - Sync IJ bookmarks and Vim marks:
set ideamarks - Check out more ex commands.
-
Use your vim settings with IdeaVim. Put
source ~/.vimrcin~/.ideavimrc. -
Control the status bar icon via the
ideastatusiconoption. -
Not familiar with the default behaviour during a refactoring? See the
idearefactormodeoption.
Some facts about Vim
Let’s relax and have some fun now! Here are a few things we've found interesting during development and would like to share with you.
-
There are no such commands as
dd,yy, orcc. For example,ddis not a separate command for deleting the line, but adcommand with admotion.
Wait, but there isn't admotion in Vim! That’s right, and that’s why Vim has a dedicated set of commands for which it checks whether the command equals to motion and if so, it executes_motion instead.
_is an interesting motion that isn't even documented in vi, and it refers to the current line. So, commands likedd,yy, and similar ones are simply translated tod_,y_, etc. Here is the source of this knowledge. -
x,D, and&are not separate commands either. They are synonyms ofdl,d$, and:s\r, respectively. Here is the full list of synonyms. -
Have you ever used
Uafterdd? Don't even try. -
A lot of variables that refers to visual mode start with two uppercase letters, e.g.
VIsual_active. Some examples. -
Other strange things from vi:
- ":3" jumps to line 3
- ":3|..." prints line 3
- ":|" prints current line
-
Vim script doesn't skip white space before comma.
F(a ,b)=> E475.
License
IdeaVim is licensed under the terms of the GNU Public License version 2 or any later version.


