IdeaFim
IdeaFim is a spinoff of the origin IdeaVim plugin from JetBrains. Its aim is to support a more native shortcut support based around more common keybindings.
Resources:
Compatibility
IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive, Android Studio and other IntelliJ platform based IDEs.
Setup
-
IdeaFim can be installed via
Settings | Plugins
. See the detailed instructions. -
Use
Tools | Fim
in the menu to enable or disable fim. -
Use the
~/.ideafimrc
file as an analog of~/.fimrc
(learn more). The XDG standard is supported, as well. -
Shortcut conflicts can be resolved by using:
- On Linux & Windows:
File | Settings | Editor | Fim
&File | Settings | Keymap
, - On macOS:
Preferences | Editor | Fim
&Preferences | Keymap
, - Regular Vim mappings in the
~/.ideafimrc
file.
- On Linux & Windows:
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-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
- match.it
See also:
- The list of all supported commands
- Top feature requests and bugs
- Vimscript support roadmap
- List of supported in-build functions
Files
~/.ideafimrc
- Your IdeaFim-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 ~/.fimrc
file from ~/.ideafimrc
with this command:
source ~/.fimrc
Also note that if you have overridden the user.home
JVM option, this
will affect where IdeaVim looks for your .ideafimrc
file. For example, if you
have -Duser.home=/my/alternate/home
then IdeaVim will source
/my/alternate/home/.ideavimrc
instead of ~/.ideafimrc
.
Alternatively, you can set up initialization commands using XDG standard.
Put your settings to $XDG_CONFIG_HOME/ideafim/ideafimrc
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}
- 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
<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
. ⚠️ Mappings to<Action>
don't work withnoremap
. If you know the case when it's needed, please the original IdeaVim creator know.
- For the mappings you can use a special
Finding action ids:
-
IJ provides
IdeaFim: 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:
QuickJavaDoc - Quick Documentation (not only for java, all languages)
ShowErrorDescription - Show description of the error under the caret (cursor hovering)
QuickImplementations - Quick Definition
Vim Script
IdeaFim 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 or Vim Script Roadmap.
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
💎 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.
IdeaFim 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 Vim marks:
set ideamarks
- Check out more ex commands.
-
Use your vim settings with IdeaVim. Put
source ~/.fimrc
in~/.ideafimrc
. -
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. -
Have you ever used
U
afterdd
? 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
Most of the files belong to the original IdeaVim project and are licensed under the terms of the GNU Public License v2.