Commit Graph
10635 Commits
Author SHA1 Message Date
claude[bot]andClaude Opus 5.5 b7e748803e Update changelog: Fix Enter and Esc in popups with no open file
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 05:16:55 +00:00
1grzyb1andClaude Opus 5.5 f4e6a1727c VIM-4228 Fix Rider tests compilation on 2025.3
The driver SDK's SelectionModel has no getSelectedText(Boolean) in 2025.3,
which broke the compilation of the ui-rd-tests module in the 2025.3 and
nvim jobs. Call it through our own remote interface instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:48:22 +02:00
1grzyb1 f1351f0efe VIM-4343 map key events as keystrokes
Other components were taking mapped actions as keystrokes before our dispatcher so we have to register them as keystrokes also
2026-10-15 15:24:59 +02:00
1grzyb1 a24e2939b8 VIM-4343 Don't add esc to all mappings 2026-10-15 15:24:59 +02:00
1grzyb1 4328ec17da VIM-4343 Don't register shortcuts on modal contexts 2026-10-15 15:24:59 +02:00
claude[bot]andClaude Opus 5.5 b024e59899 Update changelog: Visual selection of end of line, Rider expand selection fix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 05:21:30 +00:00
dependabot[bot] 30e7aa2f69 Bump gradle-wrapper from 9.8.0 to 9.8.1
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.8.0 to 9.8.1.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.8.0...v9.8.1)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-14 21:44:49 +00:00
1grzyb1 b8f9ad7892 VIM-4228 Postpone caret movement after rider action 2026-10-14 16:28:42 +02:00
1grzyb1 0efcd70c6f VIM-4228 Move Rider tests to teamcity 2026-10-14 16:28:42 +02:00
1grzyb1 a00e382bdf VIM-4228 Refactor rider tests to use RemoteRobot 2026-10-14 16:28:42 +02:00
1grzyb1 713a61e362 Redraw panel only on current document changes
Without that even some random intelij change of gitignroe could redraw our panel what made Large file tests flaky
2026-10-14 11:50:01 +02:00
AndDe-gourav bb18bb5356 fix none selction on toggling visual form select mode on empty line and test for supporting selecting new line char 2026-10-14 08:31:08 +02:00
AndDe-gourav 2201617e81 join tests and passes deleteJoinRange an exculsive range 2026-10-14 08:31:08 +02:00
AndDe-gourav fe78002de0 fixed caret resting on new line char 2026-10-14 08:31:08 +02:00
AndDe-gourav 6cedadc455 vim-paragraph-motion test fix and other selection test fix 2026-10-14 08:31:08 +02:00
AndDe-gourav d2ac6b9fd8 fixed getRange for character wise selection 2026-10-14 08:31:08 +02:00
AndDe-gourav 8914f1da2d fix 'zf' collapse next line in visual mode 2026-10-14 08:31:08 +02:00
AndDe-gourav ee77c6de90 updated exchange test that include new line char
# Conflicts:
#	src/test/java/org/jetbrains/plugins/ideavim/extension/exchange/VimExchangeExtensionTest.kt
#	src/test/java/org/jetbrains/plugins/ideavim/extension/exchange/VimExchangeWithClipboardTest.kt
2026-10-14 08:31:08 +02:00
AndDe-gourav 3fdb747969 remove todo comment of not selecting new line char 2026-10-14 08:31:08 +02:00
AndDe-gourav f4272fe350 fix 'D' on empty(only new line char) visual line 2026-10-14 08:31:08 +02:00
AndDe-gourav 8b97cd8bed remove restriction not selecting new line char 2026-10-14 08:31:08 +02:00
claude[bot]andClaude Opus 5.5 518c5eab09 Update changelog: search count freeze in large files, message timer, ? history name
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 05:18:22 +00:00
1grzyb1 398b161704 Wait for rpc modal input before next keystrokes
When rpc call was made and it showed modal dialog keystroke were lost during that time
2026-10-13 15:41:38 +02:00
1grzyb1 2d72b1f083 Restart clear output panel timer on change
Each n after search didn't restart timer so after 10s output panel was closed. It broke new Large file tests this way.
2026-10-13 15:41:38 +02:00
1grzyb1 36ef5574bd Mae sure C-B is handled by ide in large file tests 2026-10-13 15:41:38 +02:00
claude[bot] c3f7c1c216 Update changelog: :! no longer hangs on commands reading stdin
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

 Conflicts:
	CHANGES.md
2026-10-13 11:01:29 +00:00
dependabot[bot] 1033626866 Bump org.junit.vintage:junit-vintage-engine from 6.1.2 to 6.1.3
Bumps [org.junit.vintage:junit-vintage-engine](https://github.com/junit-team/junit-framework) from 6.1.2 to 6.1.3.
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r6.1.2...r6.1.3)

---
updated-dependencies:
- dependency-name: org.junit.vintage:junit-vintage-engine
  dependency-version: 6.1.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-13 10:57:32 +00:00
claude[bot]andClaude Opus 5.5 7cccaaa814 Support "?" as search history name in history functions
Vim's `:help hist-names` lists "?" alongside "/" as an alias for the
search history, but getTypeByString only recognised "/". As a result,
histadd('?', ...), histdel('?'), histget('?') and histnr('?') failed
instead of operating on the search history.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:36:15 +02:00
1grzyb1 06778f5380 Generate ideavim_extensions.json only in root module 2026-10-13 12:16:43 +02:00
1grzyb1 738b73417f Load intellij.platform.rpc dependency from an optional module
intellij.platform.rpc doesn't exist in 2025.3, is embedded in the core
classloader in 2026.1-2026.2 and is a standalone module since 2026.3.
Declaring it as a dependency of the embedded ideavim-common module disables
the whole plugin on 2025.3 and breaks the 2025.3 build.

Move the dependency to a new optional ideavim-rpc module that provides
VimRemoteApiResolver via the IdeaVIM.remoteApiResolver extension point.
When the module is skipped (2025.3), fall back to calling
RemoteApiProviderService from the core classloader.
2026-10-13 12:16:43 +02:00
1grzyb1 81ad363113 VIM-4342 publish metrics for large file tests 2026-10-13 10:37:34 +02:00
1grzyb1 bd0f361afa VIM-4341 Run search count on background thread
For large files running search count blocked edt which caused IDE freezes.
Now we first try to quickly show coutn and if we are not able in given threshold move it to other thread and later on update UI accordingly.
Additionally added tests for large files
2026-10-13 10:37:34 +02:00
claude[bot]andClaude Opus 5.5 fbc9424f6f Update changelog: clever-f extension
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 05:22:27 +00:00
1grzyb1 9e142d4401 VIM-1975 implement clever-f extension 2026-10-12 12:06:01 +02:00
1grzyb1 19925409d5 VIM-4340 add standalone rpc module 2026-10-12 10:28:10 +02:00
grzybek 55549efd72 Remove in in notification massage 2026-10-12 08:55:50 +02:00
claude[bot]andClaude Opus 5.5 2275c21729 Update changelog: 2.47.3 release
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 05:21:26 +00:00
claude[bot]andClaude Opus 5.5 90f715dee5 Update changelog: :function command, cc indent, % and Vimscript fixes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:21:36 +00:00
claude[bot]andClaude Opus 5 4114fc1122 Update changelog: 2.46.1 release, percent register, g8 fixes
Adds a 2.46.1 section for the two fixes that went into the release (VIM-4310, VIM-4309), and documents the % register (VIM-1266) and the two g8 fixes under 2.47.0, the release they shipped in.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:40:58 +00:00
claude[bot]andClaude Opus 5.5 644f9cf628 Fix: IndexOutOfBoundsException on % in an empty document
findMatchingPairOnCurrentLine read the character at the caret offset
without checking that the current line has any characters. On an empty
document this indexed past the end of the text. An empty line has no
pair characters to match, so return no match there, as Vim does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:30:02 +02:00
claude[bot]andClaude Opus 5 8e3aa39789 Update changelog: visual r caret position, End key handler
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-09 10:27:29 +00:00
claude[bot]andClaude Opus 5 1e46befc77 Keep replaceText character-wise for partial line ranges
determineSelectionType classified every range spanning more than one line as
line-wise. replaceText then built a line-wise VimSelection from it, which
expands to whole lines, so the text before startOffset on the first line and
after endOffset on the last one was silently discarded.

    // "one two three\nfour five six\nseven eight"
    replaceText(8, 18, "XXX")   // "three\nfour"
    // was:      "XXX\nseven eight"
    // expected: "one two XXX five six\nseven eight"

A multi-line range is now line-wise only when it actually covers those lines
completely, which is what ReplaceWithRegister's `2grr` needs; anything that
starts or ends mid-line stays character-wise and replaces exactly the
requested range.

This also drops the `isLine` check that the old code computed but could never
observe as true: it required the range to end with a line break while start
and end sat on the same line, and it was only consulted on the
startLine == endLine branch, where that cannot hold.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-09 12:18:29 +02:00
claude[bot]andClaude Opus 5 3058a337d4 Honour allowEnd in CaretTransaction's getLineEndOffset
CaretTransactionImpl declared its own getLineStartOffset, getLineEndOffset
and getLine, duplicating the implementations it already inherits through
`EditorAccessor by EditorAccessorImpl(projectId)`. The copies had drifted:
getLineEndOffset dropped the allowEnd argument and always called the
single-argument VimEditor.getLineEndOffset, so it behaved as allowEnd = true
regardless of what the caller asked for.

The visible effect is that the same EditorAccessor function disagrees with
itself depending on how deeply it is nested:

    change {
      getLineEndOffset(line, allowEnd = false)                  // last character
      withPrimaryCaret { getLineEndOffset(line, allowEnd = false) }  // line break
    }

ReadScopeImpl and TransactionImpl both rely on the delegate, so dropping the
three redundant overrides fixes the argument handling and removes the
duplication that let them drift apart in the first place.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-09 12:18:29 +02:00
IdeaVim Bot 1d34cc3206 Update help file 2026-10-09 09:43:09 +00:00
1grzyb1 21ffd15bdb Add missing function command description 2026-10-09 11:40:31 +02:00
claude[bot]andClaude Opus 5 f90bc0bca6 Fix: cmdwin editor was never Vim initialised, so its buffer local options were missing
`isCommandHistoryWindow` used `Editor.getVirtualFile()`, which is not necessarily
populated while the editor is still being created - and that is exactly when it is
called, from `isAllowedFileEditor` via `vimDisabled`, to decide whether an editor
should be initialised. The command-line window opened by `q:`, `q/` and `q?` was
therefore classified as a non-Vim editor and `EditorListeners.add` never ran, so its
buffer never got its local option values.

Search count and search highlights are computed for the selected editor and for every
open editor, so searching for a pattern containing `\<` asked the cmdwin buffer for its
local 'iskeyword' and threw "Unexpected uninitialised buffer local value: iskeyword".

Resolve the file from the document instead, as every other check in `EditorHelper`
already does.

Found by the RandomActionsPropertyTest property tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-09 11:40:31 +02:00
claude[bot]andClaude Opus 5 f686ed5911 Add tests for exclusive and inclusive slice end indices
`SliceFunctionTest` covered negative and out-of-range end indices, but
not an end index that resolves to zero, which is the boundary where the
exclusive end index of `slice()` and the inclusive end index of a sublist
expression disagree. Verified against the previous implementation: the
`end index of zero` cases fail (returning the whole collection), and the
negative cases that resolve to zero or below already passed.

Also pin the sublist side of that boundary: an explicit `-1` end index,
`-length` (first item only), and `-length - 1` (empty). These passed
before, and guard the shared `VimList.slice`/`VimString.substring`
against a regression in the other direction.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-09 10:46:17 +02:00
claude[bot]andClaude Opus 5 86e9130d87 Fix slice() treating an end index of zero as the whole collection
`VimList.slice` and `VimString.substring` treated an exclusive end index
of zero as "count from the end", i.e. as the size of the collection. That
convention exists only because `SublistExpression` has to convert Vim's
*inclusive* end index (which defaults to -1, the last item) into an
exclusive one, so `endInclusive + 1` legitimately produces zero for the
common `list[1:]` and `list[1:-1]` cases.

`slice()`, however, takes an end index that is already exclusive, so
`slice([1, 2, 3, 4, 5], 0, 0)` must be an empty list, and
`slice([1, 2, 3, 4, 5], 0, -5)` likewise resolves to an exclusive end of
zero. Both returned the entire collection instead. (See Vim's
`list_slice_or_index` / `eval_index_inner`, which decrement the end index
when it is exclusive and produce an empty result once it drops below
zero.)

Make the end index of `slice`/`substring` an unambiguous absolute index
and move the resolution of Vim's negative indices into the two call
sites, where the inclusive/exclusive distinction is known.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-09 10:46:17 +02:00
claude[bot]andClaude Opus 5.5 1a2cc3c401 Fix :tags failing when the line jumped from was deleted
Tag stack entries keep the line number they were recorded with and are not
adjusted on edits. When that line no longer exists, :tags called
getLineText() with an out-of-range line and failed with
"Incorrect line: N, out of M". Show empty text for such entries instead.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 10:40:55 +02:00
claude[bot]andClaude Opus 5.5 5e6c95c187 Fix: crash on empty search range such as :/ or :?
A search range consisting of a single delimiter made SearchAddress call
substring(1, 0), throwing StringIndexOutOfBoundsException. An empty
pattern now uses the last search pattern, as in Vim, and reports E35
when there is none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:39:32 +02:00