~ $ ideavim
Here's what landed in __VERSION__.
new plugin · text objects
The bundled textobj-user extension lets you declare custom text objects straight from
your ~/.ideavimrc — no plugin code required. Describe a pattern (or a head/tail delimiter
pair) and the keys that select it, and IdeaVim wires up the matching i/a objects
and motions for you.
Plug 'kana/vim-textobj-user' " a spec maps a name to a pattern and the keys that select it call textobj#user#plugin('datetime', { \ 'date': { \ 'pattern': '\<\d\d\d\d-\d\d-\d\d\>', \ 'select': ['ad', 'id'], \ }, \ }) " now 'dad' deletes a date like 2013-03-16, and 'cid' changes it
Objects support select-a/select-i, next/previous motions, a
charwise/linewise/blockwise region-type, and remappable
<Plug> mappings.
operators · motions
Slot v, V, or <C-V> between an operator and its motion to force the range's shape. v forces charwise and flips the motion's inclusive/exclusive nature, V forces linewise, and <C-V> forces blockwise.
dvw " charwise — includes the landing char dv$ " charwise — leaves the last char dVe " linewise — deletes the whole line d<C-V>j " blockwise — deletes a vertical block
insert mode · completion
Vim's <C-X> completion submode arrives in Insert mode. Start it with <C-X>, then complete whole lines from the current buffer or file paths from disk.
<C-X><C-L> " complete the current line from matching lines <C-X><C-F> " complete a file path from the file system
input · keyboard layouts
The new 'keymap' option loads a set of language mappings so you can type non-English
text while your system keyboard stays on its usual layout. Choose one of the dozens of bundled
keymaps — from russian-jcukenwin to greek, dvorak, or
accents — or drop your own file into ~/.config/ideavim/keymap/. The mappings
apply to typed text only while 'iminsert' is on; toggle it any time with
<C-^> in Insert mode.
set keymap=russian-jcukenwin " load a bundled keymap set iminsert=1 " enable it for typed text (or press <C-^>)
Also adds the :loadkeymap command and the :lmap /
:lnoremap / :lunmap / :lmapclear language-mapping commands.
spelling · dictionary
Vim's spelling commands now talk to the IDE's own spell checker. Put the caret on a word and press zg to accept it as correctly spelled, zw to take it back out of your dictionary, or z= to choose from a list of suggested replacements.
zg " mark the word under the caret as correct zw " remove it from the dictionary again z= " pick a replacement from the suggestions
Accepted words go into the IDE's spelling dictionary, so the rest of the IDE stops flagging them too.
also worth a look
With incsearch on, press <C-G> to jump to the next match and
<C-T> to the previous one — without leaving the / or ?
prompt.
Set the IDEA_VIM_CUSTOM_VIMRC environment variable to load your
.ideavimrc from a custom path instead of the default locations.
Press gx in Normal mode to open the URL under the caret with your OS default handler —
any scheme:// address works, and the program is overridable via
g:netrw_browsex_viewer.
:w {file} saves the buffer to a new path, a range like :1,2w out.txt
writes only those lines, and :w! overwrites while plain :w refuses to
clobber an existing file.
Normal mode, motions, and Esc now work in the Python console input, while the console keeps handling Enter, the history keys, and the horizontal arrows.
polish & fixes
idearefactormode=keep, a rename (or similar action) no longer leaves you in Visual mode;
the mode you were in beforehand is restored.
% respects your range — running a command on a Visual
selection with a % appended (e.g. :'<,'>%d) no longer expands to the
whole file; the % is now ignored, matching Vim.
: output panel and command line now
refresh their text colors when you switch the IDE theme or editor color scheme while they are open.
:s///g on indented lines — a global substitute such as
%s/Cinema/Other/g now replaces every match on lines that start with tabs, not just the
first one.
d$, or d3w after <C-O> now leaves the caret in the right
place when you return to Insert mode.
/heap[,
/[[[, or /[a-z work again: an unmatched [ is a plain bracket,
and a ] right after [ or [^ belongs to the collection (so
/[]] matches a ]), just like Vim.