Top Related Projects
The official Vim repository
Vim-fork focused on extensibility and usability
A modular configuration of Vim and Neovim
🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.
Blazing fast Neovim framework providing solid defaults and a beautiful UI, enhancing your neovim experience.
Quick Overview
IdeaVim is a plugin for JetBrains IDEs that emulates Vim key bindings and functionality. It brings the power and efficiency of Vim to the feature-rich environment of JetBrains IDEs, allowing developers to use familiar Vim commands and motions while benefiting from the IDE's advanced features.
Pros
- Seamless integration of Vim keybindings with JetBrains IDEs
- Customizable configuration through
.ideavimrc
file - Support for many Vim plugins and extensions
- Regular updates and active community support
Cons
- Not a complete Vim emulation; some advanced Vim features may be missing
- Occasional conflicts with IDE-specific shortcuts
- Performance impact on older or less powerful machines
- Learning curve for users new to Vim or transitioning from pure Vim
Getting Started
- Install the IdeaVim plugin from the JetBrains Marketplace in your IDE.
- Create a
.ideavimrc
file in your home directory to customize IdeaVim settings. - Add the following basic configuration to your
.ideavimrc
:
" Enable Vim emulation
set ideajoin
set idearefactormode=keep
" Set up some common Vim settings
set incsearch
set hlsearch
set ignorecase
set smartcase
" Map IDE actions to IdeaVim
nnoremap <Space>f :action GotoFile<CR>
nnoremap <Space>g :action FindInPath<CR>
nnoremap <Space>b :action Switcher<CR>
" Enable IdeaVim-EasyMotion plugin
set easymotion
-
Restart your IDE or reload the
.ideavimrc
file using the:source ~/.ideavimrc
command in the IDE. -
Start using Vim keybindings in your JetBrains IDE!
Competitor Comparisons
The official Vim repository
Pros of vim
- Full-featured Vim implementation with extensive plugin ecosystem
- Runs on virtually any platform, from embedded systems to mainframes
- Highly customizable with Vimscript and native support for various programming languages
Cons of vim
- Steeper learning curve for newcomers to modal editing
- Requires terminal or separate GUI application, not integrated into IDEs
- Configuration and plugin management can be complex for beginners
Code comparison
vim:
:set number
:syntax on
:set expandtab
:set tabstop=4
:set shiftwidth=4
IdeaVim:
set number
set syntax
set expandtab
set tabstop=4
set shiftwidth=4
Key differences
- vim is a standalone text editor, while IdeaVim is a Vim emulation plugin for JetBrains IDEs
- IdeaVim provides Vim keybindings and basic functionality within the IDE environment
- vim offers more extensive customization options and a wider range of features
- IdeaVim integrates seamlessly with IDE features like code completion and refactoring tools
Use cases
- Choose vim for a full-featured, standalone text editor with maximum flexibility
- Opt for IdeaVim when working in JetBrains IDEs and wanting Vim-like editing capabilities
- vim is ideal for users who prioritize customization and work across various environments
- IdeaVim suits developers who want Vim keybindings while leveraging IDE-specific features
Vim-fork focused on extensibility and usability
Pros of Neovim
- Full-featured, standalone text editor with extensive plugin ecosystem
- Highly customizable and extensible through Lua scripting
- Better performance and lower resource usage
Cons of Neovim
- Steeper learning curve for new users
- Requires more setup and configuration to achieve IDE-like functionality
Code Comparison
IdeaVim:
public class IdeaVimExtension implements VimExtension {
@Override
public void initComponent() {
// IdeaVim-specific initialization
}
}
Neovim:
local M = {}
function M.setup()
-- Neovim-specific setup
end
return M
Key Differences
- IdeaVim is a plugin for JetBrains IDEs, while Neovim is a standalone editor
- IdeaVim focuses on Vim emulation within IDEs, Neovim aims to be a full Vim replacement
- IdeaVim uses Java for extensions, Neovim primarily uses Lua for configuration and plugins
Use Cases
- IdeaVim: Ideal for developers who want Vim keybindings in JetBrains IDEs
- Neovim: Suitable for users seeking a lightweight, customizable text editor with Vim-like functionality
Community and Support
- IdeaVim: Smaller community, focused on JetBrains IDE users
- Neovim: Larger, more diverse community with active development and plugin ecosystem
A modular configuration of Vim and Neovim
Pros of SpaceVim
- More comprehensive and feature-rich Vim distribution
- Supports multiple programming languages out-of-the-box
- Highly customizable with a modular architecture
Cons of SpaceVim
- Steeper learning curve due to its complexity
- May be overkill for users who prefer a simpler Vim setup
- Potentially slower startup time compared to IdeaVim
Code Comparison
SpaceVim configuration example:
let g:spacevim_enable_debug = 1
let g:spacevim_realtime_leader_guide = 1
call SpaceVim#layers#load('incsearch')
call SpaceVim#layers#load('lang#python')
call SpaceVim#layers#load('lang#vim')
IdeaVim configuration example:
set surround
set multiple-cursors
set commentary
set argtextobj
set textobj-entire
SpaceVim offers a more extensive configuration with layer-based customization, while IdeaVim focuses on enabling specific Vim plugins within the JetBrains IDE environment. SpaceVim provides a full-fledged Vim distribution with built-in support for various languages and features, whereas IdeaVim aims to bring Vim keybindings and functionality to JetBrains IDEs.
🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.
Pros of LunarVim
- Fully customizable Neovim configuration with sensible defaults
- Extensive plugin ecosystem and built-in LSP support
- Active community and frequent updates
Cons of LunarVim
- Steeper learning curve for users new to Vim/Neovim
- Requires more setup and configuration compared to IdeaVim
Code Comparison
LunarVim configuration example:
lvim.colorscheme = "lunar"
lvim.format_on_save = true
lvim.leader = "space"
IdeaVim configuration example:
set surround
set multiple-cursors
set commentary
LunarVim offers more extensive configuration options and plugin support, while IdeaVim provides a simpler setup within JetBrains IDEs. LunarVim is a standalone Neovim distribution, whereas IdeaVim is a plugin for JetBrains IDEs that emulates Vim keybindings and functionality.
LunarVim is better suited for users who want a fully customizable Vim-like experience with advanced features, while IdeaVim is ideal for those who want Vim keybindings within the familiar JetBrains IDE environment.
Blazing fast Neovim framework providing solid defaults and a beautiful UI, enhancing your neovim experience.
Pros of NvChad
- Highly customizable and extensible Neovim configuration
- Faster startup time and better performance
- Active community and frequent updates
Cons of NvChad
- Steeper learning curve for users new to Neovim
- Limited IDE-like features compared to IdeaVim
Code Comparison
NvChad configuration example:
local custom_init = function()
vim.opt.relativenumber = true
vim.opt.wrap = false
end
local plugins = {
{ "folke/which-key.nvim", enabled = true },
}
IdeaVim configuration example:
set relativenumber
set nowrap
set ideajoin
set surround
set commentary
NvChad offers a more modern, Lua-based configuration approach, while IdeaVim uses traditional Vimscript and focuses on integrating Vim keybindings into JetBrains IDEs. NvChad provides a full Neovim setup with extensive customization options, whereas IdeaVim aims to bring Vim-like editing to JetBrains environments while leveraging existing IDE features.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
IdeaVim
IdeaVim is a Vim engine for JetBrains IDEs.
Contact maintainers:
- Bug tracker
- @IdeaVim on Twitter
- Chat on gitter
- IdeaVim Channel on JetBrains Server
Resources:
Compatibility
IntelliJ IDEA, PyCharm, GoLand, CLion, PhpStorm, WebStorm, RubyMine, DataGrip, DataSpell, Rider, Cursive, Android Studio, and other JetBrains IDEs.
Setup
-
IdeaVim can be installed via
Settings | Plugins
. See the detailed instructions. -
Use
Tools | Vim
in the menu to enable or disable vim. -
Use the
~/.ideavimrc
file 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
~/.ideavimrc
file.
- 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!
- Click the IdeaVim icon
in the status bar |
Early Access Program
|Subscribe to EAP
Or subscribe to EAP updates manually:
- Open
Settings | Plugins
- Click the gear icon :gear:, 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
~/.ideavimrc
configuration file- Vim script
- IdeaVim plugins
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
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.
IdeaVim 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})
- For the mappings you can use a special
<Action>
keyword. Don't forget the parentheses. - E.g.
map gh <Action>(ShowErrorDescription)
<- execute hover ongh
. - :warning: Mappings to
<Action>
don't work withnoremap
. If you know the case when it's needed, please let us know.
- For the mappings you can use a special
:action {action_id}
- Execute an action by
{action_id}
. Works from Ex command line. - Please don't use
:action
in mappings. Use<Action>
instead.
- Execute an action by
Finding action IDs:
-
IJ provides
IdeaVim: track action IDs
command to show the id of the executed actions. This command can be found in "Search everywhere" (doubleshift
)."Track action IDs" Details (click to see)
-
: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.
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:
ShowHoverInfo - Quick Documentation and Error Description
QuickImplementations - Quick Definition
Vim Script
IdeaVim can execute custom scripts that are written with Vim Script. At the moment we support all language features, but not all of the built-in functions and options are supported.
Additionally, you may be interested in the Vim Script Discussion.
IDE specific options
You can evaluate the has('ide')
function call and get 1
if it was called with IdeaVim or 0
if the function was called from Vim/NeoVim.
The option &ide
contains the name and edition of your IDE, for example, "IntelliJ IDEA Ultimate Edition".
To see its value for the current IDE you are using, execute the :echo &ide
command.
To write an IDE-specific configuration, use Vim's regexp match operators =~?
(case-insensitive) / =~#
(case-sensitive)
Example config:
" options and mappings that are supported by both Vim and IdeaVim
set nu
set relativenumber
if has('ide')
" mappings and options that exist only in IdeaVim
map <leader>f <Action>(GotoFile)
map <leader>g <Action>(FindInPath)
map <leader>b <Action>(Switcher)
if &ide =~? 'intellij idea'
if &ide =~? 'community'
" some mappings and options for IntelliJ IDEA Community Edition
elseif &ide =~? 'ultimate'
" some mappings and options for IntelliJ IDEA Ultimate Edition
endif
elseif &ide =~? 'pycharm'
" PyCharm specific mappings and options
endif
else
" some mappings for Vim/Neovim
nnoremap <leader>f <cmd>Telescope find_files<cr>
endif
:gem: Contributing
The power of contributing drives IdeaVim :muscle:. Even small contributions matter!
See the contribution guide in CONTRIBUTING.md to start bringing your value to the project.
ð In 2025, we launched a rewards program. See the guide for details.
Authors
See AUTHORS.md for a list of authors and contributors.
IdeaVim tips and tricks
-
Use the power of IJ and Vim:
set ideajoin
to enable join via the IDE. See the examples.- Make sure
ideaput
is enabled forclipboard
to enable native IJ insertion in Vim. - Sync IJ bookmarks and IdeaVim global marks:
set ideamarks
(works for marks with capital letters only) - Check out more ex commands.
-
Use your vim settings with IdeaVim. Put
source ~/.vimrc
in~/.ideavimrc
. -
Control the status bar icon via the
ideastatusicon
option. -
Not familiar with the default behaviour during a refactoring? See the
idearefactormode
option.
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,dd
is not a separate command for deleting the line, but ad
command with ad
motion.
Wait, but there isn't ad
motion 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. -
You can read a post about how modes work in Vim and IdeaVim.
-
Have you ever used
U
afterdd
? Don't even try. -
A lot of variables that refer to visual mode start with two uppercase letters, e.g.
VIsual_active
. Some examples. As mentioned here, this was done this way to avoid the clash with X11. -
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. -
Fancy constants for undolevels:
The local value is set to -123456 when the global value is to be used.
-
Vi (not Vim) is a POSIX standard, and has a spec! Vim is mostly POSIX compliant when Vi compatibility is selected with the
'compatible'
option, but there are still some differences that can be changed with'copoptions'
. The spec is interesting because it documents the behaviour of different commands in a stricter style than the user documentation, describing the current line and column after the command, for example. More details can be found by reading:help posix
. -
The Vim documentation contains many easter eggs. We encounter them occasionally, but GitHub user mikesmithgh has compiled a substantial collection here.
- In addition to
:call err_teapot()
, which returnsE418: I'm a teapot
, there is also:call err_teapot(1)
, which returnsE503: Coffee is currently not available
. Naturally, this is also supported in IdeaVim.
- In addition to
-
Insert mode has all
Ctrl
keys mapped, exceptCtrl-B
. In the documentation, it is marked as "CTRL-B in Insert mode gone". Call:h i_CTRL-B-gone
in Vim to read whyCtrl-B
was removed.
License
IdeaVim is licensed under the MIT license.
Third-party components and licenses are listed in ThirdPartyLicenses.md.
All releases before 2.0.0 were licensed under terms of GPL-2.0 or later. The last commit before switch to MIT is 05852b07c6090ad40fde7d3cafe0b074604f7ac5. You can read more about the license change here: https://github.com/JetBrains/ideavim/discussions/543
Top Related Projects
The official Vim repository
Vim-fork focused on extensibility and usability
A modular configuration of Vim and Neovim
🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.
Blazing fast Neovim framework providing solid defaults and a beautiful UI, enhancing your neovim experience.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot