IdeaVim
IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs.
Contact maintainers:
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 Emulatorto 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 Emulation&File | Settings | Keymap, - On macOS:
Preferences | Editor | Vim Emulation&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 ⚙️, select
Manage 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
- vim-surround
- vim-multiple-cursors
- vim-commentary
- argtextobj.vim
- vim-textobj-entire
- ReplaceWithRegister
- vim-exchange
- vim-highlightedyank
See also:
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 gq
You can read your ~/.vimrc file from ~/.ideavimrc with this command:
source ~/.vimrc
⚠️ Please note that IdeaVim currently parses
~/.ideavimrc&~/.vimrcfiles via simple pattern-matching. See VIM-669 for proper parsing of VimL files.
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)
💎 Contributing
The power of contributing drives IdeaVim 💪. Even small contributions matter!
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.⚠️ Please note that IdeaVim currently parses
~/.ideavimrc&~/.vimrcfiles via simple pattern-matching. See VIM-669 for proper parsing of VimL files. -
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.
