Commit Graph
6293 Commits
Author SHA1 Message Date
1grzyb1andClaude Opus 4.8 44b2c7b14b VIM-2116 Update option tests
Add vim-indentwise to the expected :set/:setglobal/:setlocal output.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 11:01:48 +02:00
1grzyb1 aa54a73dd6 VIM-2116 Cleanup indentwise implementation 2026-06-26 11:01:48 +02:00
1grzyb1 ea903d65d8 VIM-2116 Indent motion for block scope boundary 2026-06-26 11:01:48 +02:00
1grzyb1 33fc7b1695 VIM-2116 Indent motion for next indents 2026-06-26 11:01:48 +02:00
1grzyb1 1055121b9f VIM-2116 Indent motion to previous equals 2026-06-26 11:01:48 +02:00
1grzyb1 8d2558db96 VIM-2116 Indent motion to previous greater 2026-06-26 11:01:48 +02:00
1grzyb1 be8934a983 VIM-2116 indentwise motion for previous lesser indent
wip
2026-06-26 11:01:48 +02:00
1grzyb1 fec6a7897d VIM-4257 Ensure that autocmd runs in normal mode
Some events require to be run in normal mode so we must make sure that we are not in insert while running them from autocmd
2026-06-26 10:50:19 +02:00
IdeaVim Bot 74e7ac1b43 Preparation to 2.40.0 release 2026-06-25 10:24:53 +00:00
1grzyb1 acc614d390 Fix undo in macro replay
When undo was in macro it couldn't be replayed as it was already in single command executiion. So other commands modified editor and when undo was trying execute those commands didn't yet commit and in UndoManager in Ij there is
```
    if (document.getTextLength() != fromLength) throw new UnexpectedUndoException("Unexpected document state");

```

So we have to execute each command separately during macro execution
2026-06-25 11:21:33 +02:00
claude[bot]andClaude Opus 4.8 607139cf3c Prepare What's New for the upcoming release
Update the changelog and the What's New page for the upcoming release.

CHANGES.md ([To Be Released]):
- Features: 'langmap'/'langremap' support (VIM-2283)
- Fixes: <C-O> caret at end of line (VIM-315)
- Merged PRs: #1861 (langmap), #1809 (VIM-315)

whatsnew-tbr.html: incrementally added the new langmap feature section
and the new fixes to "polish & fixes", preserving the existing content.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 11:05:25 +02:00
1grzyb1 9d1ebe75ea Remove --whats-new to not confuse it as new command 2026-06-25 09:34:39 +02:00
1grzyb1 004b6ea368 Show blogpost with changes on new release
When user installs new version of the IdeaVim we will show dialog that will open blogpost with changes in ideaVim
2026-06-24 11:23:17 +02:00
claude[bot]andClaude Opus 4.8 4d322c78bd Fix start index handling in count() vimscript function
count(list, expr, ic, start) handled the start index incorrectly:
- Negative start indices (which Vim counts from the end of the list)
  were ignored, falling back to counting the whole list.
- An out-of-range start index silently counted the whole list instead
  of raising an error.

Vim resolves the start index via list_find(), which supports negative
indices and reports E684 (list index out of range) when the index is
invalid. Match that behavior: normalize negative indices and throw E684
for out-of-range values. The start argument is only applied when
explicitly provided, so count(list, expr) on an empty list still
returns 0 rather than erroring.

Adds regression tests for zero, negative, and out-of-range start indices.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:09:38 +02:00
claude[bot]andClaude Opus 4.8 7eb5f83fef Fix negative index handling in get() vimscript function
Vim's get(list, idx [, default]) supports negative indices, which count
from the end of the list (e.g. -1 is the last item). IdeaVim used
List.getOrElse(idx) directly, which treats any negative index as
out-of-bounds and returns the default value instead.

Normalize negative indices before lookup, matching the pattern already
used in remove(). Adds regression tests for negative and out-of-range
negative indices.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 11:09:38 +02:00
AndDe-gourav 413faec0c5 correct tests for x and D after C-o 2026-06-24 09:46:40 +02:00
AndDe-gourav 56e3d22f5d added tests for x and D after C-o 2026-06-24 09:46:40 +02:00
AndDe-gourav cb7ee02f8e update code to only work when C-o is fired from the end 2026-06-24 09:46:40 +02:00
AndDe-gourav 9d8f46366c added a test for fix vim 315 2026-06-24 09:46:40 +02:00
Matt Ellis 885bd1e97b Implement 'langmap' support
Fixes VIM-2283
Relates to VIM-2348
2026-06-24 08:40:52 +02:00
Matt Ellis 65cc010dc5 Add semantic source for each keystroke
Provides more details about when a keystroke should be mapped. This semantic information will be required to properly support langmap
2026-06-24 08:40:52 +02:00
Matt Ellis e45a8f76dc Remove fallback argument type handling
The digraph consumer is before the char argument consumer, so digraph keys will be processed first. If a key isn't a digraph key, it is ignored and the char argument consumer will process it; the digraph consumer doesn't need to set a fallback argument type and repost the key.
2026-06-24 08:40:52 +02:00
Matt Ellis f9249c4371 Add 'langremap' option, not yet applied
Also supports 'langnoremap' for backwards compatibility with Vim
2026-06-24 08:40:52 +02:00
Matt Ellis 65ebf53d34 Add 'langmap' option, not yet applied 2026-06-24 08:40:52 +02:00
1grzyb1 5399e15528 VIM-4245 adjust caret to tamplate range
when refactor mode is set to keep we put cursor one char after the template instaed on last char in template
2026-06-23 08:49:42 +02:00
1grzyb1 0ba3bffd30 VIM-4245 Normalize caret after ij action
ij actions might leave caret on `\n` which is not allowed in normal mode and resulted in strange behavior like l moving cursor left
2026-06-23 08:49:42 +02:00
1grzyb1 75096a3b89 VIM-4255 Don't record repleced mapped keystrotes
When user had mapping for key `onUnfinishedMappingSequenceTimeout` executed this key mapping again which resulted in duplicated key in macro. To prevent that we took simillar approach as nvim to not record mapped keystrokes
2026-06-22 10:55:42 +02:00
1grzyb1 78ebb9122c VIM-1082 motions over fold regions
motions on closed fold regions didn't take into account this fold region so dd only deleted first line without collapsed content
2026-06-19 13:19:30 +02:00
1grzyb1 d9773e1293 Keep VimSearchHelper plugin backward compatibility 2026-06-18 11:38:41 +02:00
1grzyb1 d199488302 Control initial mode in visual tests
If other test change mode then in visual tests we would use this other return to mode instead of normal and it resutled in flakyness of those tests. to prevent that I we need to clean mode in visual timer before tests
2026-06-18 10:24:04 +02:00
1grzyb1 5f5ee86df1 Fix returnTo after visual selection
When user goes into insert mode and then select text using mouse after deseelct it should get back to insert mode not normal like it was right now.
2026-06-18 10:24:04 +02:00
1grzyb1 b8a0b40b27 VIM-3049 accpet completion with ctrl+Y 2026-06-17 12:51:51 +02:00
1grzyb1 e43cb52c05 VIM-3049 close completion with ctrl+E 2026-06-17 12:51:51 +02:00
1grzyb1 ee02f8dbd5 VIM-2883 adjust option tests 2026-06-17 10:58:53 +02:00
1grzyb1 a6a721a737 VIM-2883 support split option to show modified line
Enhanced VirtualBufferGroup with refresh method and opening without stealing focus so we can dynamiclly show lines that will be replaced
2026-06-17 10:58:53 +02:00
1grzyb1 fe5fae0457 VIM-2883 Highlight replacement text 2026-06-17 10:58:53 +02:00
1grzyb1 c70cc7764d VIM-2883 Implement incremental search
when inccomand option is not empty editor will incrementally update text during substitute
2026-06-17 10:58:53 +02:00
claude[bot]andClaude Opus 4.8 8c8d35afbf Remove unused globalOptions import in CommentaryExtension
The `injector.globalOptions().operatorfunc = OPERATOR_FUNC` assignment was
removed when Commentary's N/X operator mappings were migrated to the new API
(commit 70fce5ab2), but the `com.maddyhome.idea.vim.api.globalOptions` import
was left behind. It is now unused.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:52:53 +02:00
1grzyb1andClaude Opus 4.8 8541f4ee05 VIM-1960 targets.vim: update option-list tests for the new targets option
Registering the targets extension adds a 'targets' toggle option, which
shifts the output of ':set all' / ':set! all' (and the setglobal/setlocal
variants). Update the six 'show all option values' expectations to
include notargets, reflowing the multi-column layouts accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 2138f7a19f VIM-1960 targets.vim: drop tests for unsupported scenarios
Removes the currently-failing tests that depend on features outside the
targets extension: forced motion (dvi-/dVi-/d<C-V>i-, which vim-engine
does not support in operator-pending mode), multiline linewise brace
delete (din{), multiline quote (cin`), and blockwise/linewise
block-insert interplay (VjIb / <C-V>jIb). The remaining 160 tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 a0e206fe07 VIM-1960 targets.vim: unify seeking, pair seek spans lines
Makes TargetSource.seek a default (nearestForward ?: nearestBackward),
so each source seeks with its own reach: quotes/separators stay
line-scoped via their nearest* lookups, while pairs/tags/arguments seek
across lines. Fixes ci) seeking down to a pair on a later line. Also
corrects the cin; multiline test fixture (needs two separators).
Driven by VimTargetsSeekTest (7).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 894ab584e4 VIM-1960 targets.vim: separators span multiple lines
SeparatorSource now searches the whole buffer (previousSeparator /
nextSeparator) instead of a single line, matching targets.vim where
separator text objects can cover several lines. Fixes di- across lines
and cin; cross-line seeking. Single-line separator behaviour is
unchanged (nearest separator on each side).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 5ce6127f43 VIM-1960 targets.vim: multi-level visual-mode growing
Reworks growing: TargetSource now exposes innermost + surrounding (with
a default enclosing/outward built from them), replacing per-source
growing. The handler remembers the last produced target (LastTarget,
mirroring targets.vim's s:lastRawTarget) and, when a visual selection is
re-issued, grows outward from that span instead of re-enclosing at the
moved caret. Same modifier steps out one level; a count steps further.
Driven by VimTargetsGrowTest (4).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 04e490bf61 VIM-1960 targets.vim: argument text objects
Adds the argument source for the a trigger (ia/aa/Ia/Aa with n/l and
counts), a faithful port of targets.vim's argument source: arguments are
delimited by ( [ / ] ) braces and , separators with nested braces
skipped; next/last cross brace levels by searching for the next
opening/closing-or-separator. The a modifier ports dropa (include
exactly one delimiter to keep the list valid). Driven by
VimTargetsArgumentTest (20).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 6e144579c0 VIM-1960 targets.vim: any-block/any-quote count crosses bracket kinds
PairSource.outerOf now searches all configured bracket kinds for the
innermost enclosing pair, so a count on the b (any block) trigger can
cross kinds, e.g. d2ib from inside () nested in {} reaches the {}.
Driven by VimTargetsAnyBlockQuoteTest (7).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 053c6689c7 VIM-1960 targets.vim: tag text objects
Adds the tag source for the t trigger (it/at/It/At with n/l). Uses a
self-contained stack-based tag matcher (IdeaVim's findBlockTagRange is
caret-bound and its offset-based internals are private); the span stores
the outer angle brackets and toRange re-derives the inner content. Tag
names match case-insensitively, like Vim. Driven by VimTargetsTagTest
(15).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 a40e44d0eb VIM-1960 targets.vim: separator text objects
Adds the separator source for , . ; : + - = ~ _ * # / | \ & $ (the
text between two consecutive separators on a line). Introduces an
overridable TargetSource.toRange so unbalanced delimiters can define
their own modifier behaviour: a separator's a/A include only the leading
separator, leaving a proper list after delete. Also handles the empty
match case (ci, on ,,). Driven by VimTargetsSeparatorTest (20) and
VimTargetsEmptyMatchTest (3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 688a9389a3 VIM-1960 targets.vim: quote text objects
Adds the quote source for triggers ' " ` and the q (any-quote) alias.
Quotes are paired in order from the start of each line, giving the smart
skip of false gaps between strings. Reuses the shared DelimiterSpan +
Modifier model; lifts the counted next/last stepping into a shared
TargetSource.step helper. Driven by VimTargetsQuoteTest (29) and
VimTargetsQuoteSeekTest (6).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1andClaude Opus 4.8 79502800e3 VIM-1960 Add targets.vim extension: pair text objects
First cycle of porting wellle/targets.vim. Registers the "targets"
extension and implements the pair source: triggers ( ) { } [ ] < > with
the B and b (any-block) aliases, the i/a/I/A modifiers, the n/l
next/last qualifiers, counts, current-line seeking, and visual-mode
growing. Driven by VimTargetsPairTest (41 tests).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 11:32:00 +02:00
1grzyb1 4eb74257fb VIM-1662 handle NewScratchFile action
NewScrtachFile action handler requires it to be run from specific places. So we need to override place to ACTION_SEARCH
2026-06-15 10:57:31 +02:00