needed to make InsertCharacterAboveCursorAction SingleExecution as otherwise exception was thrown that accept on lookup cannot be called inside run for each
when going jk between lines with just 1 column difference and going back it moved one column before.
It was due to not normilzed offset so when doing k went to AbsoulteOffset and didn't save last column position
Add an `ideavim.use.debug.ideavimrc` flag (VimRcService.USE_DEBUG_VIMRC_PROPERTY):
when set to "true", IdeaVim prefers ~/.debug.ideavimrc over ~/.ideavimrc,
falling back to the regular file if the debug one is absent. The runIde
Gradle task sets the flag so development runs can use a separate config
without touching the real ~/.ideavimrc.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
It adds new action that opens special kind of editor where user can paste and yank control cahrachters like ^M ^[.
Normally IDE doesn't allow showing them especially ^M is always turned into \n s othere was no way of editing macros.
findAll silently ignored its ignoreCase parameter and re-derived case
sensitivity from the global smartcase/ignorecase options. As a result,
using * on a capitalized word with 'smartcase' enabled performed a
case-insensitive search but highlighted only the case-sensitive matches.
findAll now honors an explicit ignoreCase request: smartcase is skipped
and ignorecase is forced when the caller has already resolved case
handling. Behavior is unchanged when ignoreCase is false, so existing
callers are unaffected.
Cherry-picked from #1466 by davidot.
In split mode every per-caret event drove PatchEngineEditorSynchronizer, which walks all carets to build a model and ships an RD-protocol message per event — block-visual motion fires N caret events × O(N) per event = O(N²) per keystroke on the host, freezing the EDT.
Bulk caret-mutating sites (block-visual setVisualSelection, exitVisualMode's secondary-caret removal, repeatInsert's row-by-row replay) now run inside caretModel.runForEachCaret so beforeAllCaretsAction/afterAllCaretsAction fire and the synchronizer batches per-event sends into one end-of-op snapshot; a new CaretVisualAttributesListenerSuppressor gates IdeaVim's own EditorCaretHandler.updateCaretsVisualAttributes to drop the same O(N²) walk on the local side.
- Remove dead if/else in visitRange: both branches returned the same
Multi.RangeMulti value, making the condition a no-op
- Simplify `?: run { 0 }` to `?: 0` in limited lookbehind visitors;
a run block with a single constant expression adds no value
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The comment "Determines whether the visited tree contains" was missing
what the tree contains; it now reads "contains uppercase characters".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wrap the undo-mark only when there's actual replay work (count > 1, block insert, or dot-repeat) — otherwise the always-fired wrap on plain `iHi<Esc>` emitted an empty mark group that swallowed the first `u`.
- Remove double space in DigraphGetFunctionHandler
- Add missing space before != in MapFunctionHandlerBase
- Add missing space before colon in MapCheckFunctionHandler class declaration
- Move else keyword to same line as closing brace in MapSetFunctionHandler
- Remove unnecessary blank line after function opening brace in MapSetFunctionHandler
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>