1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-08-17 16:31:45 +02:00

Compare commits

...

2315 Commits

Author SHA1 Message Date
f2b532a8dc Fix(VIM-2227): Wrong behavior when deleting / changing surround with invalid character 2022-06-18 22:16:56 +02:00
filipp
9dbe3c3363 Fix(VIM-308) Undo requires one more step if the cursor is not at the position where it was after undo 2022-06-16 18:50:42 +06:00
filipp
8a98f46235 Move mapDepth to MappingState 2022-06-15 16:22:31 +06:00
filipp
9ed8db4d4a Add oldundo option 2022-06-15 16:06:47 +06:00
Alex Plate
5b94276836 Move more methods to vim-engine 2022-06-15 12:58:15 +03:00
filipp
f1e427e2ff Fix command history 2022-06-14 22:10:04 +06:00
filipp
a112cfe35f Add count to undo/redo 2022-06-14 18:47:16 +06:00
filipp
412b60d6b4 Fix selection after undo 2022-06-14 18:36:14 +06:00
Alex Plate
11d9ef7507 Partially move change group to vim-engine 2022-06-14 10:31:23 +03:00
Alex Plate
ca143272f3 Update changelog 2022-06-13 09:54:32 +00:00
Alex Plate
072449825c Fix(VIM-2675): Fix numbering register in visual mode 2022-06-13 12:53:05 +03:00
Alex Plate
38ed9c206a Fix compilation 2022-06-13 12:53:05 +03:00
Alex Plate
8235a649a1 Move VisualMotionGroup to vim-engine 2022-06-13 12:53:05 +03:00
Alex Plate
09efdd076e Remove unused method 2022-06-13 12:53:05 +03:00
Alex Plate
da9b6ea762 Update formatting 2022-06-12 00:17:39 +00:00
Alex Plate
437450a93b Fix long running test 2022-06-10 16:01:13 +03:00
Alex Plate
50fff8871e Update changelog 2022-06-10 12:28:35 +00:00
Alex Plate
350e9cfca2 Fix(VIM-2595): Support plugins in macro execution 2022-06-10 15:27:03 +03:00
Alex Plate
5639edf173 Refactor mapping stack 2022-06-10 15:27:03 +03:00
Alex Plate
f72313df9c Fix(VIM-2671): Fix using plugins from mappings 2022-06-10 15:27:03 +03:00
filipp
f52eb5e124 Update formatting 2022-06-10 00:07:27 +06:00
filipp
5da9c5e1cd Move variableService logic to base class 2022-06-09 23:54:43 +06:00
filipp
53fdd891fb Move optionService logic to base class 2022-06-09 02:17:40 +06:00
filipp
94820d7a83 Update formatting 2022-06-08 20:04:50 +06:00
Alex Plate
fe66d06ce2 Move VimMark to vim-injector 2022-06-08 12:06:45 +03:00
Alex Plate
b6e917a2d7 Get rid of DialogDataContext
Actually, it was removed for some time already.
Caused this exception: https://web.ea.pages.jetbrains.team/#/issue/533401
2022-06-07 16:40:38 +03:00
Alex Plate
a6a39d249b Move key group to vim-engine 2022-06-07 15:53:31 +03:00
Alex Plate
518784c371 Use ShortcutOwnerInfo in savedShortcuts 2022-06-07 15:53:30 +03:00
filipp
51c50cb902 Update formatting 2022-06-07 04:00:06 +06:00
filipp
6355d7765e Add documentation to OptionService.kt and fix some exception messages 2022-06-07 03:59:23 +06:00
filipp
c083631590 Undo changing ideaVersion 2022-06-07 01:13:07 +06:00
filipp
f62575c870 Fix bugs with appending/prepending/removing value from string option 2022-06-07 01:09:19 +06:00
filipp
01e367cadf Delete deprecated OptionsManager.kt 2022-06-07 01:08:10 +06:00
Alex Plate
e248bb5565 Update formatting 2022-06-05 00:23:42 +00:00
filipp
1744ec74c7 Add some info to the Map command 2022-06-05 00:12:09 +06:00
filipp
905f8003da Fix repeating the @@ command 2022-06-04 01:02:01 +06:00
filipp
3b3a036806 Remove StringHelper.kt & CommonStringHelper.kt 2022-06-03 22:22:49 +06:00
Alex Plate
ccf48d1e53 Add some more notes to injector about it's status 2022-06-01 13:59:51 +03:00
Alex Plate
d7a74fdf5e Mark the states of the injector 2022-05-31 10:44:00 +03:00
Alex Plate
462c1bc75e Fix resetting the modes to empty state 2022-05-31 10:20:31 +03:00
Alex Plate
96b05dcc94 Mute some neovim tests 2022-05-31 09:54:34 +03:00
Alex Plate
ceafe9d4e7 Rename base for property tests 2022-05-31 09:31:00 +03:00
Alex Plate
fc9b09cf72 Update ij plugin to 1.6.0 2022-05-31 09:29:40 +03:00
filipp
11c80b2ea9 Fix cast :action mappings to <Action> 2022-05-30 16:22:40 +06:00
filipp
eb536766db Fix exception during parsing of empty stings 2022-05-30 15:34:17 +06:00
Alex Plate
f3b6687d79 Update kotlin version 2022-05-30 11:22:24 +03:00
Alex Plate
adf483a748 Enable property based and long running tests 2022-05-30 09:52:12 +03:00
Alex Plate
7332cd1ed1 Start implementing Troubleshooter 2022-05-30 09:52:11 +03:00
Alex Plate
7726f4347b Unmap removed mappings after using ReloadVimRc action 2022-05-30 09:52:11 +03:00
Alex Plate
ee092d988b Update formatting 2022-05-29 00:17:16 +00:00
Alex Plate
b3db3bb940 Add a note that :action should not be used in mappings 2022-05-26 11:05:00 +03:00
Alex Plate
edcb17a436 Update changes 2022-05-26 11:05:00 +03:00
filipp
f3b4933ef2 Fix number options 2022-05-25 19:33:40 +06:00
Alex Plate
c6fdf9cdf4 [VIM-2643]: Implement a redo-register feature 2022-05-25 11:30:55 +03:00
Alex Plate
2244d0f776 Downgrade intellij-plugin due to https://github.com/JetBrains/gradle-intellij-plugin/issues/998 2022-05-25 11:30:54 +03:00
Matt Ellis
d7c4e4a8dd Add support for "-Command" flag for powershell
Fixes VIM-2622
2022-05-25 11:30:36 +03:00
Matt Ellis
b7c54d02cb Fix minor scroll bug
If caret is less than 'sidescrolloff' columns from the left of the screen, moving down one line will animate. Greater than 'sidescrolloff' does not animate. This is because the scroll model tries to scroll to a negative horizontal offset, to try and put the caret in the middle of the screen. This isn't possible, but the scroll model sees a large enough distance to trigger an animation.
2022-05-25 11:30:36 +03:00
Alex Plate
620eca3a0d Correctly fix the test 2022-05-24 15:16:45 +03:00
Alex Plate
aa3b2e988f Update TC constant 2022-05-24 15:14:36 +03:00
Alex Plate
753f589ea5 Mark a test as VimBehDiffers 2022-05-24 14:34:34 +03:00
Alex Plate
831e4e8c42 Fix services initialization in VimInjectorBase 2022-05-24 13:49:01 +03:00
Alex Plate
329722f338 Turn off experimental api 2022-05-24 13:05:12 +03:00
filipp
2ff429cc76 Update changelog 2022-05-23 22:54:51 +06:00
filipp
47d4aee986 Support return without expression 2022-05-23 22:47:47 +06:00
filipp
938325b93e Update formatting 2022-05-23 21:02:39 +06:00
filipp
12d0a2ffb7 Update gradle & gradle wrapper 2022-05-23 21:00:52 +06:00
filipp
4ff7e9aefa Move some logic to base classes 2022-05-23 21:00:32 +06:00
filipp
f52792e7f0 Move Regexp from engine 2022-05-23 00:10:57 +06:00
filipp
cbc6662ef7 Update formatting 2022-05-08 21:10:40 +06:00
filipp
26ffc2ad32 Move some classes to vim-engine 2022-05-08 21:09:52 +06:00
filipp
df32e573b0 Move some classes to vim-engine 2022-05-08 15:49:53 +06:00
filipp
19647d96b2 Move some classes to vim-engine 2022-05-08 12:23:14 +06:00
Alex Plate
b1714a2fc1 Update formatting 2022-05-08 00:16:10 +00:00
filipp
83199d5475 Move some classes to vim-engine 2022-05-07 22:45:52 +06:00
Alex Plate
4c0af66dff Update formatting 2022-05-01 00:20:06 +00:00
Alex Plate
ccd7204b21 Update changelog 2022-04-27 10:56:37 +03:00
Alex Plate
b82f1e6602 Move more classes to vim-engine 2022-04-27 10:40:44 +03:00
Alex Plate
4104258219 Move playbackregister to vim-engine 2022-04-26 14:21:10 +03:00
Alex Plate
11054f908b Move some classes from file package to vim-engine 2022-04-26 10:02:23 +03:00
Alex Plate
e0dc6f7214 Update changelog 2022-04-25 11:44:22 +00:00
Alex Plate
735686c415 Update TC constant 2022-04-25 14:42:24 +03:00
Alex Plate
385bcbc383 fix(VIM-2604): Update action execution rules 2022-04-25 14:41:32 +03:00
aleksei.plate
f273620466 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'Qodana checks' build configuration were updated 2022-04-25 07:11:28 +00:00
Alex Plate
acb27d5ccc [TC] Update qodana configs 2022-04-25 09:45:49 +03:00
Alex Plate
62c79e1470 Move yank package to vim-engine 2022-04-25 09:45:48 +03:00
Alex Plate
1a99918819 Move some put actions to vim-engine 2022-04-25 09:45:48 +03:00
Alex Plate
7e3a9e0b38 Move window actions to vim-engine 2022-04-25 09:45:48 +03:00
Alex Plate
f51d74f2b8 Use correct name of notifications toolwindow for Track Action Ids 2022-04-25 09:45:24 +03:00
Alex Plate
987cba6072 Change implementation of configurable for lazy loading 2022-04-25 09:45:24 +03:00
Alex Plate
770e6371df Rename .java to .kt 2022-04-25 09:45:24 +03:00
Alex Plate
30e660cf19 Update changelog 2022-04-25 09:45:24 +03:00
Alex Plate
8ccf0b5364 Update changelog 2022-04-25 09:45:23 +03:00
filipp
3ef86186eb Fix parsing strings with \r in the end 2022-04-25 00:30:56 +06:00
filipp
b8b3669b04 Fix antlr4 and antlr4-runtime dependency version conflict 2022-04-24 19:33:21 +06:00
Alex Plate
ac41890759 Update formatting 2022-04-24 00:15:29 +00:00
dependabot[bot]
cf85e0f25e Bump github-api from 1.303 to 1.305
Bumps [github-api](https://github.com/hub4j/github-api) from 1.303 to 1.305.
- [Release notes](https://github.com/hub4j/github-api/releases)
- [Changelog](https://github.com/hub4j/github-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hub4j/github-api/compare/github-api-1.303...github-api-1.305)

---
updated-dependencies:
- dependency-name: org.kohsuke:github-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-21 10:45:24 +03:00
dependabot[bot]
a4b52be833 Bump antlr4-runtime from 4.9.3 to 4.10.1
Bumps [antlr4-runtime](https://github.com/antlr/antlr4) from 4.9.3 to 4.10.1.
- [Release notes](https://github.com/antlr/antlr4/releases)
- [Changelog](https://github.com/antlr/antlr4/blob/master/CHANGES.txt)
- [Commits](https://github.com/antlr/antlr4/compare/4.9.3...4.10.1)

---
updated-dependencies:
- dependency-name: org.antlr:antlr4-runtime
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-21 10:45:13 +03:00
dependabot[bot]
4cb8f27ca5 Bump org.jetbrains.intellij from 1.5.2 to 1.5.3
Bumps org.jetbrains.intellij from 1.5.2 to 1.5.3.

---
updated-dependencies:
- dependency-name: org.jetbrains.intellij
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-21 10:44:59 +03:00
Matt Ellis
9a06ee97c4 Refactor CaretVisualAttributesHelper 2022-04-21 10:36:15 +03:00
Matt Ellis
d7dfc6dc05 Remove pre-212 caret attribute helpers 2022-04-21 10:36:15 +03:00
Alex Pláte
5a6de3afaa Merge pull request #493 from citizenmatt/feature/commentary
Improvements to Commentary extension
2022-04-21 10:28:30 +03:00
Matt Ellis
cd242511a8 Fallback to line comment if block is unavailable
Fixes VIM-2381
2022-04-20 12:37:11 +01:00
Matt Ellis
745ae6caa4 Migrate Commentary tests to VimTestCase 2022-04-20 12:23:17 +01:00
Matt Ellis
acc7d0954d Maintain old mappings for compatibility 2022-04-20 00:16:22 +01:00
Alex Plate
330d64c7cb Move mark package to vim-engine 2022-04-19 18:43:33 +03:00
Alex Plate
673e43dd77 Move scroll package to vim-engine 2022-04-19 10:20:15 +03:00
Alex Plate
c2c5c60899 Move select package to vim-engine 2022-04-19 09:56:38 +03:00
Matt Ellis
7d5176829b Merge branch 'master' into feature/commentary 2022-04-18 17:12:02 +01:00
Matt Ellis
fd0dc0d445 Remove unnecessary setting of sub mode 2022-04-15 13:36:44 +01:00
Matt Ellis
be11317667 Use comment actions instead of low level handlers 2022-04-13 10:53:25 +01:00
Matt Ellis
22fce51640 Fix Exchange tests after operator changes
OperatorAction no longer normalises linewise ranges, but Exchange doesn't need this
2022-04-12 23:47:46 +01:00
Matt Ellis
4223da47d6 Refactor and simplify Commentary objects
Also introduces Visual support for the `g@` operator action
2022-04-12 22:05:48 +01:00
Matt Ellis
64100fea59 Add Commentary command 2022-04-12 16:53:21 +01:00
Matt Ellis
2244c65233 Reposition caret after commenting 2022-04-12 16:26:28 +01:00
Matt Ellis
e08bffd7ba Add gcu mapping 2022-04-12 15:33:24 +01:00
Matt Ellis
0d5aa52af2 Add gc text object
Fixes VIM-2589
2022-04-12 15:33:23 +01:00
filipp
e617fc4c34 Move some classes from vimscript package to engine 2022-04-10 15:57:46 +06:00
Alex Plate
c34a7f123d Update formatting 2022-04-10 00:15:21 +00:00
Matt Ellis
cc029fc98e Implement gcc as gc_ motion
gcc now respects count

Fixes VIM-1687
2022-04-08 16:50:10 +01:00
Matt Ellis
feae15c48c Use same mapping as Commentary plugin 2022-04-08 16:47:54 +01:00
Matt Ellis
07485727c4 Use Kotlin helper functions 2022-04-08 16:46:08 +01:00
Matt Ellis
8b0ad7680b Rearrange code 2022-04-08 16:44:04 +01:00
Matt Ellis
43d70cd467 Convert to Kotlin 2022-04-08 16:35:03 +01:00
Matt Ellis
d73b605ef0 Rename Java to Kotlin 2022-04-08 16:32:59 +01:00
aleksei.plate
5afd4df69a TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Tests with nvim' build configuration settings were updated 2022-04-08 07:08:06 +00:00
aleksei.plate
323c611f87 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Qodana checks' build configuration settings were updated 2022-04-08 07:07:47 +00:00
aleksei.plate
0dd0a4976b TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Plugin verification' build configuration settings were updated 2022-04-08 06:58:58 +00:00
Alex Plate
48820d4dff Fix compilation 2022-04-08 09:54:52 +03:00
Alex Plate
2fbab395f1 Fix incorrect code 2022-04-08 09:54:43 +03:00
filipp
a9fd32f64e Move some actions from change.insert 2022-04-07 23:49:18 +06:00
filipp
da7a2226d4 Move actions from change.shift 2022-04-07 23:49:18 +06:00
filipp
44b37339dc Moved actions from change.delete 2022-04-07 23:49:18 +06:00
Alex Plate
db1ec29470 Update plugin verifier version 2022-04-07 15:44:23 +03:00
filipp
713c3f0a3c Moved some actions from change.change package 2022-04-07 17:50:10 +06:00
Alex Plate
c6c2bc5e74 Update changelog 2022-04-07 12:03:25 +03:00
Alex Plate
c8352158b8 Add a note about the refactoring 2022-04-07 12:03:24 +03:00
dependabot[bot]
8927c0acfa Bump github-api from 1.301 to 1.303
Bumps [github-api](https://github.com/hub4j/github-api) from 1.301 to 1.303.
- [Release notes](https://github.com/hub4j/github-api/releases)
- [Changelog](https://github.com/hub4j/github-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hub4j/github-api/compare/github-api-1.301...github-api-1.303)

---
updated-dependencies:
- dependency-name: org.kohsuke:github-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-07 12:03:18 +03:00
dependabot[bot]
02dfac8a34 Bump markdown from 0.2.4 to 0.3.1
Bumps [markdown](https://github.com/JetBrains/markdown) from 0.2.4 to 0.3.1.
- [Release notes](https://github.com/JetBrains/markdown/releases)
- [Commits](https://github.com/JetBrains/markdown/commits)

---
updated-dependencies:
- dependency-name: org.jetbrains:markdown
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-07 11:57:50 +03:00
Martin Yzeiri
8ab3664992 Matchit: Add CMake Patterns 2022-04-07 11:55:31 +03:00
Martin Yzeiri
03e6101747 Matchit: Add GNU Make Patterns 2022-04-07 11:55:31 +03:00
Martin Yzeiri
9f47995c10 Matchit: Add C patterns 2022-04-07 11:55:31 +03:00
Martin Yzeiri
d58f36ea1a Matchit: Enhance pattern creation
The new LanguagePatterns class lets us easily configure the patterns for
a language in a similar way to the original plugin. Most language
features can be configured by passing strings to the alternate
constructor. And the overloaded + operator makes combining patterns easy.

findMatchingPair() was refactored to work with the new class.

In addition, the concept of prefixes was removed. The cursor should jump
if it's anywhere inside or before an extended pair (excluding the
default pairs). Instead of appending a prefix to each regex, we simply
check in findMatchingPair() what the closest pair to the cursor is. The
original plugin behaves the same way.

We prefer matches containing the cursor over matches after the cursor.
If the cursor in inside multiple patterns, we pick the smaller one. And
a default pair after the cursor is preferred over any extended pairs
after the cursor.
2022-04-07 11:55:31 +03:00
Martin Yzeiri
442970a986 Matchit: Refactor parsePatternAtOffset()
The ending offset of the initial match isn't enough information for some
language features. For example, if the cursor is on "i" in the "else if"
of a Makefile, the previous implementation would jump to the "else" on a
reverse jump instead of treating "else if" as a single structure.

parsePatternAtOffset() needs to return both the match start and end for
us to correctly handle such a distinction.
2022-04-07 11:55:31 +03:00
Martin Yzeiri
fcc6c8a3c5 Matchit: Simplify findClosingPair() and findOpeningPair()
findClosingPair() always moves forward and findOpeningPair() always
moves backwards. That fact lets us simplify both implementations.

Using a stack of Pairs to track the match starts and ends is unnecessary 
since we know ahead of time whether the jump needs to go to the start or
end of the target pair.

findOpeningPair() can be further simplified since it doesn't need to
check the isInOpPending flag -- the distinction between operator pending
mode and regular jumps only matters when moving forward in the buffer.
2022-04-07 11:55:31 +03:00
Martin Yzeiri
1dbd4b4391 Matchit: Use setOf for sets 2022-04-07 11:55:31 +03:00
dependabot[bot]
1943c72c1c Bump org.eclipse.jgit from 6.0.0.202111291000-r to 6.1.0.202203080745-r
Bumps org.eclipse.jgit from 6.0.0.202111291000-r to 6.1.0.202203080745-r.

---
updated-dependencies:
- dependency-name: org.eclipse.jgit:org.eclipse.jgit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-07 11:39:05 +03:00
dependabot[bot]
7816da3f2d Bump org.jetbrains.changelog from 1.3.0 to 1.3.1
Bumps org.jetbrains.changelog from 1.3.0 to 1.3.1.

---
updated-dependencies:
- dependency-name: org.jetbrains.changelog
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-07 11:38:33 +03:00
Alex Plate
b25d7e358d Update gradle plugin 2022-04-05 12:36:31 +03:00
filipp
04b62e6392 Update changelog 2022-04-05 14:20:05 +06:00
Alex Plate
4ecfb796d4 Move some classes of scroll package to vim-engine 2022-04-04 23:53:14 +03:00
Alex Plate
de9fa81da3 Move objects to vim-engine 2022-04-04 23:53:14 +03:00
Alex Plate
be484d381c Update changelog 2022-04-04 19:50:19 +00:00
Alex Plate
351e3b15ea Move leftright package to vim-engine 2022-04-04 22:48:41 +03:00
Alex Plate
2b9b48ac2f Split PutGroup into base class 2022-04-03 23:48:21 +03:00
Alex Plate
7c4ac5f561 Move toggle recording to vim-engine 2022-04-03 23:39:41 +03:00
Alex Plate
def09b0be8 Update formatting 2022-04-03 00:15:00 +00:00
Alex Plate
2415b167fb Add Simon Rainer to contributors list 2022-04-02 07:54:35 +00:00
Simon Rainer
dfc7aef07d Fix(VIM-2553): Substitute consecutive matches
We need to set newend after the content of match is final, otherwise we
can end up in an endless loop. This allows us to remove the
startoff != latestOff check that previously prevented this endless
loop and caused this bug.
2022-04-02 13:52:58 +06:00
Alex Plate
276ad276ec Move few more classes to vim-engine 2022-03-30 18:44:38 +03:00
Alex Plate
83da2d304e Move some actions to vim-engine 2022-03-30 18:36:32 +03:00
Alex Plate
6ddc40d080 Move folder actions to vim-engine 2022-03-30 13:52:27 +03:00
Alex Plate
42fb5487e5 Move gn package to vim-engine 2022-03-30 13:48:06 +03:00
Alex Plate
1ce35ac233 Move updown package to vim-engine 2022-03-30 13:20:40 +03:00
Alex Plate
2734202e12 Move visual package to vim-engine 2022-03-29 19:10:19 +03:00
Alex Plate
6a31fd2732 Move text package to vim-engine 2022-03-29 17:54:17 +03:00
Alex Plate
5d84aa6939 Move some actions to engine 2022-03-29 17:43:43 +03:00
Alex Plate
7173b7960d Move MotionSentenceEndAction to vim-engine 2022-03-29 16:17:14 +03:00
Alex Plate
bb1c30d6c8 Move paragraph action to vim-engine 2022-03-29 15:01:11 +03:00
Alex Plate
d70abf6e27 Move an action to a different module 2022-03-29 14:48:43 +03:00
Alex Plate
8931fdf82a Fix incorrect tests 2022-03-29 12:45:17 +03:00
Alex Plate
25ba72e46b Reformat code 2022-03-29 12:25:37 +03:00
Alex Plate
ebd71d41dc Update TC constant 2022-03-29 12:23:08 +03:00
Alex Plate
4b49bb4737 Fix ]] and ][ commands
Discussion: 486
2022-03-29 12:12:48 +03:00
Alex Plate
eeac47e522 Fix neovim tests 2022-03-29 12:12:34 +03:00
Alex Plate
335267c0af Update gradle wrapper 2022-03-29 12:12:19 +03:00
Alex Plate
c4254dc6dd Refactor history group 2022-03-29 11:08:21 +03:00
Alex Plate
12cb359967 Update changelog 2022-03-28 15:07:36 +00:00
Alex Plate
d73cb274b4 Refactoring of some methods 2022-03-28 18:06:05 +03:00
Alex Plate
6cb6afe032 Fix(VIM-2590): Fix caret shape in PyCharm 2022-03-28 17:01:49 +03:00
Alex Plate
3686f0eb24 Update some usages 2022-03-28 16:10:58 +03:00
Alex Plate
6cc24fe99e Convert VimActionHandler to using VimEditor 2022-03-28 16:10:58 +03:00
Alex Plate
3784f1957f Some refactoring of change group 2022-03-28 16:09:25 +03:00
Alex Plate
69fd8d68af Small refactoring of change group 2022-03-28 16:09:25 +03:00
Alex Plate
301d72c169 Refactor Direction class 2022-03-28 16:09:24 +03:00
Alex Plate
ca11974b12 Move all methods to the base class 2022-03-28 16:09:24 +03:00
Alex Plate
8917dbf4bb Update formatting 2022-03-27 00:15:32 +00:00
Alex Plate
56afa6d564 Move some methods of marks group to engine 2022-03-26 01:38:03 +03:00
Alex Plate
8ecac1a8cf Start moving mark group to vim-engine 2022-03-26 01:05:05 +03:00
Alex Plate
f742e414e6 Extract vim mark constants into the separate file 2022-03-25 16:44:10 +03:00
Alex Plate
c462af2d10 Small refactoring 2022-03-25 16:22:39 +03:00
Alex Plate
66ede93d95 Close some fields of VimRegisterGroupBase.kt 2022-03-25 16:21:50 +03:00
Alex Plate
c97f5be3fa Small refactoring of VimRegisterGroupBase.kt 2022-03-25 16:11:08 +03:00
Alex Plate
c4d35849fd Move listener to base 2022-03-25 15:30:45 +03:00
Alex Plate
88c191bc61 Move some methods from RegisterGroup to clipboard 2022-03-24 18:07:13 +03:00
Alex Plate
a1e6318bce Move register classes into the separate package 2022-03-24 17:42:03 +03:00
Alex Plate
3606f5ea14 Move a lot of methods to RegisterBase 2022-03-24 17:07:23 +03:00
Alex Plate
38c3b206e2 Move a method to RegisterGroupBase 2022-03-24 16:21:04 +03:00
Alex Plate
e69bf9760d Move a method to RegisterGroupBase 2022-03-24 16:08:21 +03:00
Alex Plate
0b763e23cf Move Register to vim-engine 2022-03-24 14:39:13 +03:00
Alex Plate
311cb0bada Get rid of TransferableData 2022-03-24 14:25:40 +03:00
Alex Plate
a78782b73a Extract VimClipboardManager 2022-03-24 14:17:10 +03:00
Alex Plate
54df803ee1 Move some code from register group to base class 2022-03-23 19:32:03 +03:00
Alex Plate
2819b782c9 Move isCloseKeyStroke to extension method 2022-03-23 19:00:37 +03:00
Alex Plate
38c12660b0 Update usages of vimLogger 2022-03-23 18:40:48 +03:00
Alex Plate
3917a8c5e3 Move KeyHandler to vim-engine 2022-03-22 19:20:17 +03:00
Alex Plate
17c642d5ed Move some classes to vim-engine 2022-03-22 19:17:31 +03:00
Alex Plate
2d84e2d788 Move argument capturing to vim engine 2022-03-22 19:09:09 +03:00
Alex Plate
ca19d2bfd5 Move injector fully to vim-engine 2022-03-22 16:20:28 +03:00
Alex Plate
cd56fb87d0 Rename .java to .kt 2022-03-22 16:20:27 +03:00
Alex Plate
7290edd3ae Move all members of injector to vim-engine 2022-03-22 15:47:34 +03:00
Alex Plate
8d4e9b8514 Move VimChangeGroup to vim-engine 2022-03-22 15:46:20 +03:00
Alex Plate
db87b51784 Move some base classes to vim-engine 2022-03-22 15:44:33 +03:00
Alex Plate
96dc9af1e3 Move NativeActionManager to injectorBasfe 2022-03-22 12:36:32 +03:00
Alex Plate
a453cb2582 Move DigraphSequence to vim-engine 2022-03-21 19:04:33 +03:00
Alex Plate
b0d53330bb Move some classes to vim-engine 2022-03-21 19:04:33 +03:00
Alex Plate
99ebcacf31 Extract injector base for easier refactoring 2022-03-21 19:04:33 +03:00
Alex Plate
3ec90194d7 Move VimStringParser.kt to a different package 2022-03-21 19:04:33 +03:00
Alex Plate
5ce52f7189 Update changelog 2022-03-21 14:36:04 +00:00
Alex Plate
d163837d8d fix(VIM-2587): Use ctrl-6 as ctrl-^ 2022-03-21 17:31:39 +03:00
Alex Plate
81811530de Extract StringParser from IJ API 2022-02-28 12:00:05 +03:00
Alex Plate
7276bc49a7 Move runWrite/Read actions to VimApplication 2022-02-28 12:00:05 +03:00
Alex Plate
90cff7e574 Unbind concrete actions from keyHandler 2022-02-28 12:00:05 +03:00
Alex Plate
c673550901 Initialize injector in VimPlugin 2022-02-28 12:00:05 +03:00
Alex Plate
5b360b6de2 Move ExException to vim-engine 2022-02-28 12:00:05 +03:00
Alex Plate
8e2783962f Move OptionService to vim-engine 2022-02-28 12:00:04 +03:00
Alex Plate
866b319c5b Move VimDataType to vim-engine 2022-02-28 12:00:04 +03:00
Alex Plate
6eb47567e8 Unbind VimDataType from Variable 2022-02-28 12:00:04 +03:00
Alex Plate
d27f87fbb8 Push down addOption 2022-02-28 12:00:03 +03:00
Alex Plate
b2a2299347 Move OptionListener to vim-engine 2022-02-28 11:59:36 +03:00
Alex Plate
905862ab9f Move some classes to vim-engine 2022-02-28 11:58:44 +03:00
Alex Plate
5c307fd22c Rename .java to .kt 2022-02-28 11:58:43 +03:00
Alex Plate
e92b69ad3f Update formatting 2022-02-27 00:16:40 +00:00
Alex Plate
c6a5f9c268 Update changelog 2022-02-24 11:53:36 +03:00
Alex Plate
54f91f2a64 Add Thomas Schouten to contributors list 2022-02-24 07:40:28 +00:00
Thomas Schouten
4b2ed33cdd Implement UserDataHolder for EditorDataContext, so that handlers like AutoHardWrapHandler can store user data in the context delegate. 2022-02-24 10:38:33 +03:00
Alex Plate
5fa48fc7dd Extract KeyMappingLayer and MappingInfoLayer 2022-02-22 18:45:38 +03:00
Alex Plate
e028c269b7 Move VimRegisterGroup to vim-engine 2022-02-22 18:11:05 +03:00
Alex Plate
9798c7aca2 Rename .java to .kt 2022-02-22 17:58:14 +03:00
Alex Plate
b5bca78ef4 Move register group to vim-engine 2022-02-22 17:12:15 +03:00
Alex Plate
1c619cfc74 Rename .java to .kt 2022-02-22 17:12:14 +03:00
Alex Plate
dc5832a44c Convert TextObjectAction to new API 2022-02-22 16:40:57 +03:00
Alex Plate
8fd64afc90 Move CommandFlags to vim-engine 2022-02-22 15:45:04 +03:00
Alex Plate
1484f4e370 Use VimCaret api in MotionActionHandler 2022-02-22 15:44:05 +03:00
Alex Plate
32df1597c4 Move noneOfEnum to engine 2022-02-22 14:44:22 +03:00
Alex Plate
707b750ff1 Unbind VimSelection from IJ 2022-02-22 12:39:11 +03:00
Alex Plate
3388c8517b Remove unused OptionService import 2022-02-22 12:39:11 +03:00
Alex Plate
60a8e0d5f5 Rename Scope to OptionsScope and move it to vim-engine 2022-02-22 12:39:10 +03:00
Alex Plate
5a757a58b5 Move OptionConstants.kt to vim-engine 2022-02-22 12:39:10 +03:00
Alex Plate
2e555b6eaa Move CommandState.kt to injector 2022-02-22 12:39:10 +03:00
Alex Plate
c57277cc15 Move Nodes.kt to vim-engine 2022-02-22 12:39:09 +03:00
Alex Plate
bf035d42af Add some methods to VimEditor 2022-02-22 12:39:09 +03:00
Alex Plate
8cb6f9b65f Move MessageHelper to injector 2022-02-22 12:39:09 +03:00
Alex Plate
fcbc4a0688 Rename some methods in messages 2022-02-22 12:39:09 +03:00
Alex Plate
42bc15c8ea Remove VimPlugin from DigraphSequence 2022-02-22 12:39:09 +03:00
Alex Plate
992231bcad Use services in vim injector 2022-02-22 12:39:09 +03:00
Alex Plate
6d494c99e3 Use vimlogger and injector in MappingState 2022-02-22 12:39:08 +03:00
Alex Plate
a848f2175a Move CurrentCommandState to vim-engine 2022-02-22 12:39:08 +03:00
Alex Plate
4e6a2f951b Move MappingMode to vim-engine 2022-02-22 12:39:08 +03:00
Alex Plate
5a41bbe806 Update usage of toUpperCase 2022-02-22 12:39:08 +03:00
lippfi
066e6619af Fix ActionTracker rule 2022-02-21 18:53:00 +03:00
Alex Plate
f0dbabd20f Update formatting 2022-02-21 11:56:52 +03:00
Alex Plate
35c0e33ec4 Upgrade API to kotlin 1.5 2022-02-21 11:56:26 +03:00
Alex Plate
a5715dac7d Inline capitalize function 2022-02-21 11:56:26 +03:00
Alex Plate
cdb9af5ab6 Convert StringHelper to kotlin 2022-02-21 11:56:25 +03:00
Alex Plate
19c05c23f3 Rename .java to .kt 2022-02-21 11:56:25 +03:00
Alex Plate
12c744c1ba Update formatting 2022-02-20 00:15:01 +00:00
Alex Plate
604a6a5140 Convert DigraphSequence.kt to kotlin 2022-02-18 19:21:50 +03:00
Alex Plate
62aae7b7c4 Rename .java to .kt 2022-02-18 19:21:50 +03:00
Alex Plate
2ea899330c Move DigraphResult.kt to vim-engine 2022-02-18 19:12:29 +03:00
Alex Plate
3574db020f Convert DigraphResult.kt to kotlin 2022-02-18 19:10:19 +03:00
Alex Plate
b2ae2a38ec Rename .java to .kt 2022-02-18 19:10:19 +03:00
Alex Plate
04ebb6077a Move some classes to vim engine 2022-02-18 19:08:07 +03:00
Alex Plate
d5062944d0 Rename vim-engin folder to kotlin and change VimEditor package 2022-02-18 18:21:49 +03:00
Alex Plate
dc181ce0ce Exclude kotlin runtime from IdeaVim builds 2022-02-18 13:09:53 +03:00
Alex Plate
042e3388b0 Move VimEditor to vim-engine 2022-02-17 19:00:35 +03:00
Alex Plate
d4a1ffa9a9 Update package structure 2022-02-17 19:00:35 +03:00
Alex Plate
54927d0af7 Move VimLogger to vim-engine 2022-02-17 19:00:35 +03:00
Alex Plate
d26765e217 Create vim-engine module 2022-02-17 19:00:35 +03:00
Alex Plate
277b4e63c3 Introduce ActionInitiator 2022-02-17 19:00:34 +03:00
Alex Plate
848514405b Remove usages of VimPlugin from keyHandler 2022-02-17 19:00:34 +03:00
Alex Plate
7b8fd0ee55 Extract vim messages into a separate service 2022-02-17 19:00:34 +03:00
Alex Plate
d373ebac58 Use optionService from injector 2022-02-17 19:00:34 +03:00
lippfi
370ccc5254 Hardcode extension names 2022-02-17 14:31:25 +03:00
lippfi
9272fc8cd7 Fix parseKeys 2022-02-17 14:24:57 +03:00
dependabot[bot]
22cfdbae0a Bump mockito-kotlin from 3.2.0 to 4.0.0
Bumps [mockito-kotlin](https://github.com/mockito/mockito-kotlin) from 3.2.0 to 4.0.0.
- [Release notes](https://github.com/mockito/mockito-kotlin/releases)
- [Commits](https://github.com/mockito/mockito-kotlin/compare/3.2.0...4.0.0)

---
updated-dependencies:
- dependency-name: org.mockito.kotlin:mockito-kotlin
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-17 12:56:36 +03:00
Alex Plate
f49f5e5d25 Roll back working version of changelog plugin 2022-02-17 12:45:09 +03:00
Alex Plate
118c12e7fe Prepare to 1.10.0 release 2022-02-17 11:44:55 +03:00
Alex Plate
02a7eb34ee [TC]: Update version 2022-02-17 11:42:00 +03:00
Alex Plate
739390739e [TC]: Register VCS root 2022-02-17 10:56:57 +03:00
Alex Plate
6b2ead0d4e [TC]: Remove old tests from TC build 2022-02-17 10:52:51 +03:00
Alex Plate
1eaf9e7b17 [TC]: Apply patches 2022-02-17 10:45:12 +03:00
Alex Plate
954e1a9099 Remove IJ api from MotionActionHandler 2022-02-16 18:28:38 +03:00
Alex Plate
5aeff6f914 Remove IJ api from EditorActionHandlerBase 2022-02-16 17:16:01 +03:00
Alex Plate
fb15049fbf Include forEachCaret to VimEditor 2022-02-16 16:39:31 +03:00
Alex Plate
6f3a9c210e Convert Argument to new API 2022-02-16 14:21:17 +03:00
Alex Plate
6fdd6d839e Remove IJ API from CommandBuilder 2022-02-16 14:00:03 +03:00
Alex Plate
ac1101a410 Update wrapInsertedTextWithVisualMarks code 2022-02-16 12:53:40 +03:00
Alex Plate
2fd33e6ec2 Unbind command state from IJ api 2022-02-15 21:46:20 +03:00
Alex Plate
779c69a982 Abstract action executor 2022-02-15 21:46:20 +03:00
Alex Plate
3494286e66 Rename .java to .kt 2022-02-15 21:46:20 +03:00
Alex Plate
139b78d7f4 Add a protection from an accidental usage of equals in VimCaret and VimEditor 2022-02-15 21:46:19 +03:00
Alex Plate
daee2f615c Remove IjVimEditor usages from KeyHandler 2022-02-15 21:46:19 +03:00
Alex Plate
710825ec28 Fix incorrect usage of template presentation 2022-02-15 21:46:19 +03:00
Alex Plate
478539911b Update MappingInfo to use new api 2022-02-15 21:46:19 +03:00
Alex Plate
b21d984cf8 Switch from application service to singleton 2022-02-15 21:46:19 +03:00
Alex Plate
1a92cebf6b Reformat KeyHandler 2022-02-15 21:46:18 +03:00
Alex Plate
fd3f939526 Remove few dependencies to IJ API 2022-02-15 21:46:18 +03:00
Alex Plate
7d28760fa1 Inline several methods into beforHandleKey 2022-02-15 21:46:18 +03:00
Alex Plate
4a0a1c95a9 Remove a few IJ classes from KeyHandler 2022-02-15 21:46:18 +03:00
Alex Plate
9da0c10141 Remove Ref from KeyHandler 2022-02-15 21:46:18 +03:00
Alex Plate
43b9ecdf3c Get rid of Editor in KeyHandler.kt 2022-02-15 21:46:18 +03:00
Alex Plate
987952a2f2 Get rid of DataContext in KeyHandler.kt 2022-02-15 21:46:17 +03:00
Alex Plate
92f6ac57ad Remove usages of flushDelayedKeyEvents
I'm not sure about this commit, but currently it seems like this method does nothing because of fixes in JBR

See 39265c4773de6a8e26e7ac376428687e1332dffe in IJ repository
2022-02-15 21:46:17 +03:00
Alex Plate
b4af51f3cc Add vim implementation of logger 2022-02-15 21:46:17 +03:00
lippfi
4ba6e62ada Fix gv 2022-02-15 13:42:40 +03:00
Alex Plate
58d5924e80 Update changelist 2022-02-14 14:31:59 +03:00
lippfi
8f55551339 Mocked tests for tabmove 2022-02-14 13:11:58 +03:00
Alex Plate
9229497be8 Add David Dadon to contributors list 2022-02-14 08:25:42 +00:00
Alex Pláte
99e77cd8ed Update ideajoin-examples.md 2022-02-14 11:24:12 +03:00
David Dadon
8d8809238c Add shortcut to ideajoin example 2022-02-14 11:24:12 +03:00
Alex Plate
f03d574e86 Update formatting 2022-02-13 00:12:41 +00:00
lippfi
cbb5fbe92e Add vimscript statistic 2022-02-11 14:54:34 +03:00
lippfi
6a376ad62c Add shortcut conflict statistic 2022-02-11 14:53:09 +03:00
lippfi
8e61853459 Add PluginState statistic 2022-02-11 14:51:44 +03:00
lippfi
b17bc1bb3e Add ActionTracker statistic 2022-02-11 14:48:15 +03:00
lippfi
1343c7603b Rename VimStatistic to OptionState 2022-02-11 14:46:18 +03:00
Alex Plate
5b5a4b1347 Fix tests 2022-02-11 11:26:12 +03:00
Alex Plate
62fb3f9c5a Make IdeaVim compatible with 213+ only 2022-02-11 10:58:38 +03:00
Alex Plate
986378db42 Comment out two incompatipable tests 2022-02-11 10:21:58 +03:00
Alex Plate
ce99c26c03 Introduce ExecutionContext - abstract context holder 2022-02-10 18:03:40 +03:00
Alex Plate
3571595838 Use VimEditor in Local scope of options 2022-02-10 17:10:30 +03:00
Alex Plate
c0c450124f Fix test 2022-02-10 17:07:39 +03:00
Alex Plate
aa62022218 Reorder functions 2022-02-10 16:26:36 +03:00
Alex Plate
71c27babfd Update tests 2022-02-10 16:24:13 +03:00
Alex Plate
2ff93270d7 Konvert keyHandler to kotlin 2022-02-10 16:17:59 +03:00
Alex Plate
c07719dd3d Rename KeyHandler.java to KeyHandler.kt 2022-02-10 16:17:41 +03:00
Alex Plate
6b7ef88418 Fix test 2022-02-10 16:07:11 +03:00
Alex Plate
ee9f12180d Extract VimActionExecutor 2022-02-10 13:18:23 +03:00
Alex Plate
8df3bc57c5 Execute action execution to a separate class 2022-02-10 13:15:54 +03:00
Alex Plate
0aabb2971e Support extension handlers with a callback
After the refactoring of AceJump, the current approach is not synchronous anymore.
So, it's needed to explicitly notify IdeaVim that the motion was finished and IdeaVim can continue the execution
2022-02-10 12:55:44 +03:00
Alex Plate
e5740bf496 Add kotlin test as a dependency 2022-02-10 11:03:28 +03:00
Alex Plate
e8f1dff61c Add some comments for handler injector 2022-02-09 11:46:04 +03:00
Alex Plate
267fc62865 Add TC tests for 213 2022-02-09 09:54:07 +03:00
Alex Plate
05a64f51f7 Update changelog 2022-02-08 15:23:00 +00:00
Alex Plate
e5460d7a31 Extract keyHandlerKeeper 2022-02-08 18:20:12 +03:00
Alex Plate
1826a31e2f Update changelog 2022-02-08 14:20:35 +03:00
Alex Plate
2bb44c414f Refactoring for the new api 2022-02-08 14:20:35 +03:00
Alex Plate
ef7442c488 Create carets() method in VimEditor 2022-02-08 14:20:34 +03:00
Alex Plate
775bde62c8 VimEditor update 2022-02-08 14:20:34 +03:00
Alex Plate
c5a504bde3 Top level editor is hidden behind VimEditor 2022-02-08 14:20:34 +03:00
Alex Plate
f7f7e010c4 Update dic 2022-02-08 14:20:34 +03:00
Alex Plate
aa82f7ed64 Add Alex Pláte to contributors list 2022-02-08 11:15:12 +00:00
Alex Pláte
684d192b4b Remove unnecessary code update 2022-02-08 14:13:49 +03:00
Matt Ellis
aed2d1159d fix(VIM-2470): Fix incorrect reset of cursor shape 2022-02-08 14:13:49 +03:00
lippfi
d2500df05e Better digraph support 2022-02-07 13:47:02 +03:00
lippfi
8922303a72 Fix paste 2022-02-07 13:45:11 +03:00
lippfi
cea4de03cd Add tabmove command 2022-02-07 13:44:56 +03:00
Alex Plate
9529c19b9b Update formatting 2022-01-30 00:11:14 +00:00
Alex Plate
b0f5c502d9 Inject VimEditor into keyHandler 2022-01-27 13:17:39 +03:00
Alex Plate
c3fc369bc4 [VIM-1028] Support global state
Not yet documented and enabled
2022-01-27 12:34:28 +03:00
lippfi
a5ef0d5edf Fix tab character for StringHelper.stringToKeys() 2022-01-26 21:37:10 +03:00
Alex Plate
26e9056f17 Fix multicaret test for o 2022-01-26 17:05:49 +03:00
Alex Plate
1553aa774b Add docs to VimPlugin 2022-01-26 17:01:36 +03:00
Alex Plate
2ebdbc5ac4 Do not update carets in notebook command mode 2022-01-26 16:57:46 +03:00
Alex Plate
e3ca172101 Update changes in plugin.xml 2022-01-26 16:57:46 +03:00
lippfi
17d4ec6c29 Fix option listeners 2022-01-26 16:43:28 +03:00
lippfi
bec317615d Better map <expr> context 2022-01-26 16:42:44 +03:00
Alex Plate
d00fd767ff Add some docs regarding plugin initialization 2022-01-26 11:20:03 +03:00
Alex Plate
557652c526 Use executeNonCancelableSection for macro execution 2022-01-25 14:44:21 +03:00
Alex Plate
e138541495 Enable experimental api by default 2022-01-25 11:06:10 +03:00
Alex Plate
f6dfbcad0d Update changelog 2022-01-25 07:54:34 +00:00
Alex Plate
2518be2704 Fix(VIM-2504): Fix esc with using python notebooks 2022-01-25 10:52:39 +03:00
Alex Plate
42ec2b9dce Disable new api for o commands 2022-01-25 10:28:23 +03:00
Alex Plate
9484599bfd Remove duplicating copyright 2022-01-25 09:42:38 +03:00
Alex Plate
5e6d3ddae8 Update changes 2022-01-24 13:00:25 +03:00
Alex Plate
13cce3afcc Update changelog 2022-01-24 13:00:25 +03:00
Alex Plate
9743cb1424 Add Lonre Wang to contributors list 2022-01-24 09:59:09 +00:00
Lonre Wang
dbbcf3860a Update VimVisualTimer.kt 2022-01-24 12:57:37 +03:00
Lonre Wang
ae983be0a8 Update OptionsManager.kt 2022-01-24 12:57:37 +03:00
Lonre Wang
f8156fbbca Update NotificationService.kt 2022-01-24 12:57:37 +03:00
lippfi
1909547543 Make OptionConstants non-internal 2022-01-24 12:53:07 +03:00
lippfi
e47c0c1914 Update changes 2022-01-24 12:32:20 +03:00
lippfi
1a122337fe Replace deprecated option data classes with constants 2022-01-24 02:27:33 +03:00
lippfi
bcf2578da9 Replace hardcoded option names with string constants 2022-01-24 00:52:28 +03:00
lippfi
06cd41ba0e Make VimScriptGlobalEnvironment deprecated 2022-01-23 02:35:53 +03:00
lippfi
64ec421cfc Rename parent to vimContext 2022-01-23 02:28:35 +03:00
lippfi
86fcda5afc Fix beep in source command 2022-01-23 02:05:23 +03:00
lippfi
e799d40803 Fix built-in functions with global context 2022-01-23 02:00:26 +03:00
lippfi
c84325a37c Replace Executable with VimLContext 2022-01-23 01:53:07 +03:00
Alex Plate
3b6d57849c Add Piotr Mikulski to contributors list 2022-01-21 12:06:35 +00:00
Piotr Mikulski
9b4825db77 String colors that aren't supported properly 2022-01-21 15:04:51 +03:00
Piotr Mikulski
6a4bb7395b Print stderr when running a command just like vim does 2022-01-21 15:04:51 +03:00
Alex Plate
c8463d9b3e Update dependencies and reformat 2022-01-21 14:17:13 +03:00
Alex Plate
376ca4e93b Add merge to changes 2022-01-21 14:17:13 +03:00
Alex Plate
6a43e558fd Add Michael Schertenleib to contributors list 2022-01-21 11:10:35 +00:00
Michael Schertenleib
05414276f2 Support custom element names in vim-surround 2022-01-21 14:05:27 +03:00
Alex Plate
bec73749c2 [VIM-2494] Add logs for registers reading/writing 2022-01-21 11:50:26 +03:00
Alex Plate
0d4f9891c3 Fix(VIM-2471): Fix incorrectness 2022-01-19 17:24:19 +03:00
Alex Plate
f082ab4b68 Update changelog 2022-01-19 13:28:45 +00:00
Alex Plate
d4f4765ffd Fix(VIM-2471): Multiple [{ and ]} actions 2022-01-19 16:25:45 +03:00
Alex Plate
8902c0839c Write down the issues for o in new API 2022-01-19 09:56:17 +03:00
Alex Plate
66fc8034ba Correct indent for o command when the caret is in the middle of the indent 2022-01-18 11:22:39 +03:00
Alex Plate
109cb58d68 Cleanup saved shortcut conflicts after tests 2022-01-18 11:15:15 +03:00
Alex Plate
a71916df84 Allow an accidental whitespace at the end of sethandler command 2022-01-18 10:06:53 +03:00
Alex Plate
5f10eb808e Fix the O command on the line top 2022-01-17 10:22:25 +03:00
Alex Plate
6c1e7b0b60 Write tests for status string 2022-01-17 10:22:24 +03:00
Alex Plate
792c22a90a Update formatting 2022-01-16 00:12:11 +00:00
lippfi
eff2cd02f9 Add <C-char> support to VimL's double quoted strings 2022-01-15 12:40:34 +03:00
Alex Pláte
163e7751f2 Merge pull request #420 from JetBrains/dependabot/gradle/org.eclipse.jgit-org.eclipse.jgit-6.0.0.202111291000-r
Bump org.eclipse.jgit from 5.13.0.202109080827-r to 6.0.0.202111291000-r
2022-01-14 19:06:28 +03:00
Alex Plate
370c22b2f5 Add Kevin Suen to contributors list 2022-01-14 19:05:30 +03:00
Alex Plate
a251ac55e5 Update changelog 2022-01-14 19:03:46 +03:00
Alex Plate
987df6958e Manually specify the list of IDEs to verify 2022-01-14 19:03:46 +03:00
Alex Pláte
60ae189442 Merge pull request #440 from ksrb/feat/matchitHandlebars
Add matchit support for handlebars
2022-01-14 19:01:58 +03:00
Alex Pláte
ce734906d4 Merge branch 'master' into feat/matchitHandlebars 2022-01-14 19:01:30 +03:00
Alex Plate
3b26572731 Add DanEEStar to contributors list 2022-01-14 15:57:33 +00:00
Daniel Egger
4d9c606c79 Add Matchit support for Vue.js files 2022-01-14 18:56:00 +03:00
Alex Plate
22050fc16d Specify untilBuild 2022-01-14 18:16:34 +03:00
Alex Plate
2fb419253c Setup sinceBuild for plugin verifier 2022-01-14 17:45:16 +03:00
Alex Plate
3bb4fc67bf Update changelog 2022-01-14 13:41:29 +00:00
Alex Plate
a0a009cb59 fix(VIM-2523): i command for the folder in the project tree 2022-01-14 15:45:29 +03:00
Alex Plate
ce2bb85e18 Fix test for non-experimental api 2022-01-14 15:23:48 +03:00
Alex Plate
7ff8ac76fa Disable guarded tests for old api 2022-01-14 15:05:21 +03:00
Alex Plate
935c51c985 Support operations with python notebooks guarded blocks 2022-01-14 14:05:41 +03:00
Alex Plate
a8d0e698eb New approach for folder processing in o command 2022-01-13 14:47:26 +03:00
Alex Plate
5b13ad6726 Allow guards creation in tests 2022-01-13 13:51:39 +03:00
Alex Plate
e88d0d1493 Corrections for o command 2022-01-13 12:28:33 +03:00
Alex Plate
898af47f89 o command with repeat 2022-01-13 11:14:11 +03:00
Alex Plate
84868c0fb5 Move O to new API 2022-01-13 09:59:22 +03:00
Alex Plate
8e2b7d2089 Fix repeating after o command with count 2022-01-13 09:54:41 +03:00
Alex Plate
f359ac49f3 Fix o command with folders 2022-01-13 09:18:19 +03:00
Alex Plate
37ce0925a5 Massive copyright data update 2022-01-13 08:59:49 +03:00
Alex Plate
23985aea7d Move experimental api to the separate package 2022-01-13 08:57:09 +03:00
Alex Plate
3bd5ab970f Use new api in o command 2022-01-13 08:52:37 +03:00
Kevin Suen
fbdcbdc626 Add matchit support for handlebars 2022-01-12 11:50:20 -08:00
Alex Plate
f197ee54d1 Fix cc with indenting 2022-01-12 19:38:29 +03:00
Alex Plate
efa0489f7b Introduce Pointer 2022-01-12 07:02:20 +03:00
Alex Plate
66dd90a090 Update some docs for experimental API 2022-01-11 21:15:38 +03:00
Alex Plate
68cfb12746 Rename line pointers 2022-01-11 19:50:56 +03:00
Alex Plate
4ad14f3404 Add docs about offsets 2022-01-11 17:55:50 +03:00
Alex Plate
4bcf44570b Use offsets in experimental api 2022-01-11 17:23:48 +03:00
lippfi
3637022890 Update changes 2022-01-10 15:02:09 +03:00
lippfi
5f3a78e7ce Add register support to let command 2022-01-10 14:56:07 +03:00
lippfi
c7872ad841 Add an option way to track action ids 2022-01-10 13:05:28 +03:00
Alex Plate
9eeab756e4 Update formatting 2022-01-02 00:11:44 +00:00
Alex Plate
ef971a1236 Support indenting after cc 2021-12-29 15:49:45 +03:00
Alex Plate
5ec851a120 Remove useless method 2021-12-28 09:27:57 +03:00
Alex Plate
2a94ff2ef6 Review experimental api 2021-12-27 12:10:31 +03:00
Alex Plate
1738892500 Fix test for non-experimental mode 2021-12-27 12:10:31 +03:00
Alex Plate
765d876a51 Use delete via the experimental API 2021-12-27 12:10:30 +03:00
Alex Plate
a0c8e26b38 Update formatting 2021-12-26 00:12:11 +00:00
Alex Plate
4b4f4b3d8f Add draft of experimental API 2021-12-23 22:49:23 +03:00
Alex Plate
63fe7a88eb Pass keys via IDE in tests 2021-12-23 10:59:49 +03:00
Alex Plate
871ee1a6b6 Update release version 2021-12-21 12:51:23 +03:00
Alex Plate
6a36599a29 Revert "Revert "Update formatting""
This reverts commit 27fb36a6c5.
2021-12-21 12:51:10 +03:00
Alex Plate
d11ab20617 Revert "Revert "Support new marks""
This reverts commit 932296af
2021-12-21 12:51:09 +03:00
Alex Plate
ea713edfb5 Revert "Update remoteRobot version"
This reverts commit 4d49385529.
2021-12-21 12:08:56 +03:00
Alex Plate
ff48a9dea2 Formatting 2021-12-21 11:57:08 +03:00
Alex Plate
0a1812ec8c Release preparation 2021-12-21 11:36:53 +03:00
Alex Plate
113d4ac078 Rollback changes regarding esc in normal mode 2021-12-21 11:36:53 +03:00
Alex Plate
4d49385529 Update remoteRobot version 2021-12-21 11:36:53 +03:00
Alex Plate
94a8455267 Update remoteRobot version 2021-12-21 11:36:53 +03:00
Alex Plate
406d2a054c Enable manual test scanning because of the gradle issue 2021-12-21 11:36:53 +03:00
Alex Plate
932296afb6 Revert "Support new marks"
This reverts commit 134c68c705.
2021-12-21 11:36:53 +03:00
Alex Plate
27fb36a6c5 Revert "Update formatting"
This reverts commit 4e37ccfff8.
2021-12-21 11:36:52 +03:00
Alex Plate
f5e0f21869 Update formatting 2021-12-19 00:11:15 +00:00
lippfi
180c35d5c2 Fix toggle for set command 2021-12-16 18:15:32 +03:00
Alex Plate
4bd25f3220 Update changelog 2021-12-15 07:46:09 +00:00
Alex Plate
1299f107dd fix(VIM-2502): Fix the shape of new carets 2021-12-15 10:44:08 +03:00
Alex Plate
43ae40e077 Update remote robot version 2021-12-15 10:18:01 +03:00
Alex Plate
1af0b00892 Get rid of replace character submode 2021-12-14 12:42:55 +03:00
Alex Plate
36f7219964 Get rid of register pending submode 2021-12-14 12:08:41 +03:00
Alex Plate
529ad853ee Get rid of SINGLE_COMMAND submode and replace it with a regular mode 2021-12-14 04:18:55 +03:00
Alex Plate
4e37ccfff8 Update formatting 2021-12-12 00:13:09 +00:00
Alex Plate
134c68c705 Support new marks 2021-12-10 11:31:57 +03:00
Alex Plate
ea61e87b31 Update changelog 2021-12-10 10:49:08 +03:00
Alex Plate
6e82008ffa Prepare to 1.9.0 release 2021-12-10 09:51:30 +03:00
Alex Plate
016bcc00d8 New jupyter notebook fixes 2021-12-09 11:23:58 +03:00
Alex Plate
936e7508e3 Ignore test for the moment 2021-12-09 10:20:23 +03:00
Alex Plate
34220ab759 Update gradle version to 7.3.1 2021-12-09 10:20:22 +03:00
lippfi
51ba63faae Fixed parent for execute and substitute command 2021-12-04 22:21:36 +03:00
lippfi
f4f1e397cb Better strings 2021-12-04 21:47:27 +03:00
Alex Plate
721117ce1b Handle esc in all cases except normal mode 2021-12-02 22:55:17 +03:00
dependabot[bot]
b6128418be Bump org.eclipse.jgit from 5.13.0.202109080827-r to 6.0.0.202111291000-r
Bumps org.eclipse.jgit from 5.13.0.202109080827-r to 6.0.0.202111291000-r.

---
updated-dependencies:
- dependency-name: org.eclipse.jgit:org.eclipse.jgit
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-01 15:02:01 +00:00
Alex Plate
2da917add7 Update some documentation md files 2021-12-01 10:04:26 +03:00
Alex Plate
678c53dc39 Update changelog 2021-12-01 09:48:55 +03:00
Alex Plate
d57359b2ff Add documentation as raw md files 2021-12-01 09:47:23 +03:00
Alex Plate
3796d9f8b4 Removed submodule doc 2021-12-01 09:44:00 +03:00
b6d84e0e66 Fix compile errors in unit tests on Windows 2021-12-01 09:37:24 +03:00
Alex Plate
3dbdbefc58 Update changes 2021-11-30 10:56:10 +03:00
dependabot[bot]
23570c7270 Bump github-api from 1.135 to 1.301
Bumps [github-api](https://github.com/hub4j/github-api) from 1.135 to 1.301.
- [Release notes](https://github.com/hub4j/github-api/releases)
- [Changelog](https://github.com/hub4j/github-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hub4j/github-api/compare/github-api-1.135...github-api-1.301)

---
updated-dependencies:
- dependency-name: org.kohsuke:github-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-30 09:29:20 +03:00
lippfi
4d5024f8b8 Fix test 2021-11-29 19:45:44 +03:00
lippfi
ea8670702a Disable normal command 2021-11-29 19:23:55 +03:00
Alex Plate
b8828f48c9 Update formatting 2021-11-28 00:11:06 +00:00
Alex Plate
b468fef242 Fix track action id stopping 2021-11-26 18:57:50 +03:00
Alex Plate
358f8eeca3 Downgrade to kotlin 1.5 2021-11-26 18:57:50 +03:00
lippfi
150a70e69f Removed deprecated EditorDataContext constructor call 2021-11-26 18:33:37 +03:00
Alex Plate
b9fb0f2bcd Fix dot repeat with count 2021-11-26 17:46:32 +03:00
lippfi
d4a8b8e400 Optimise imports 2021-11-26 14:53:30 +03:00
lippfi
8009c9a5f9 Tests for substitute with expression 2021-11-26 14:34:46 +03:00
lippfi
177115e2fc Submatch function 2021-11-26 13:57:12 +03:00
lippfi
85bc12df59 Substitute with expressions 2021-11-26 13:33:36 +03:00
lippfi
1da818b0d5 Fix pattern in mappings 2021-11-25 10:45:16 +03:00
lippfi
c23d3f1442 Test for macro with count 2021-11-24 14:30:59 +03:00
lippfi
6500ce9154 Long running tests 2021-11-24 13:00:24 +03:00
lippfi
63ecaff1bc Add long running tests 2021-11-24 09:52:17 +03:00
Alex Plate
e29c268d0b Extract progress strings 2021-11-23 17:22:36 +03:00
Alex Plate
2758e89a51 Draft of a potemkin progress during macro execution 2021-11-22 20:40:56 +03:00
lippfi
d0670d0244 Macro without invokeLater 2021-11-22 18:45:55 +03:00
Alex Plate
1e2005451c Update formatting 2021-11-21 00:10:37 +00:00
Alex Plate
29a95ca592 Fix missing import 2021-11-19 12:06:43 +03:00
Alex Plate
5bfff2a398 Prepare to the EAP 2021-11-19 11:55:42 +03:00
lippfi
4d26947208 Pre-EAP commit 2021-11-19 11:21:27 +03:00
lippfi
f1de741bd5 Fix to prevent infinite loops 2021-11-19 06:14:37 +03:00
lippfi
3394d93b43 Fix register 2021-11-19 05:51:32 +03:00
lippfi
02c64feff8 Fix let command 2021-11-19 04:36:22 +03:00
lippfi
f2ba162359 Fix parent in functions 2021-11-19 04:17:32 +03:00
Alex Plate
16c5d11ead Refactor editor holder in ExTextField 2021-11-18 18:14:29 +03:00
lippfi
3e97c5d5fc Replace service() by ServiceManager.getService() 2021-11-18 14:28:56 +03:00
Alex Plate
cb5499f82f Update plugin.xml 2021-11-18 14:26:26 +03:00
lippfi
3d71c1bcbe Update changelog 2021-11-18 14:12:01 +03:00
lippfi
a12793e67a Made CommandLineHelper a service 2021-11-18 13:42:48 +03:00
lippfi
affec9bb61 Fix macro with count 2021-11-18 13:21:04 +03:00
lippfi
fb62ec4c77 Fix float result in expression register 2021-11-18 12:32:24 +03:00
lippfi
c48cf1a2f7 Update roadmap 2021-11-18 10:55:21 +03:00
lippfi
cf5cc92258 Make source command to throw exceptions 2021-11-18 07:19:28 +03:00
lippfi
ca934fe514 Fix set command 2021-11-18 07:18:44 +03:00
lippfi
d6ca75006a Expression register 2021-11-18 06:52:00 +03:00
Alex Plate
51a9878363 Add oauth for mergeP 2021-11-17 20:15:12 +03:00
Alex Plate
7664c44697 Fix type in github auth 2021-11-17 20:09:58 +03:00
Alex Plate
5a8ee72622 Add github oauth token 2021-11-17 20:07:50 +03:00
Alex Plate
492b2de520 Add debug option to update authors 2021-11-17 19:49:06 +03:00
dependabot[bot]
900d3212a4 Bump antlr4 from 4.9.2 to 4.9.3
Bumps [antlr4](https://github.com/antlr/antlr4) from 4.9.2 to 4.9.3.
- [Release notes](https://github.com/antlr/antlr4/releases)
- [Changelog](https://github.com/antlr/antlr4/blob/master/CHANGES.txt)
- [Commits](https://github.com/antlr/antlr4/compare/4.9.2...4.9.3)

---
updated-dependencies:
- dependency-name: org.antlr:antlr4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-17 18:29:53 +03:00
Alex Plate
d8997e1239 Update authors automation 2021-11-17 17:07:44 +03:00
Alex Plate
e1001534e4 Enable automation 2021-11-17 16:18:38 +03:00
Alex Plate
59a69ed486 Fix automation 2021-11-17 16:04:25 +03:00
Alex Plate
437574328e Add workflow dispatch for update changelog task 2021-11-17 16:01:15 +03:00
Alex Plate
87af7ada40 Try to fix changelog automation 2021-11-17 15:56:16 +03:00
Alex Plate
aa01730c13 Update changelog 2021-11-17 15:45:58 +03:00
Alex Plate
0803b401e7 Update kotlin and gradle 2021-11-17 14:44:30 +03:00
Alex Plate
6d974d799b Update intellij plugin version 2021-11-17 12:46:36 +03:00
lippfi
1fa779b21f Update changelog 2021-11-17 12:36:56 +03:00
lippfi
2c5442c044 Rename "delaymacro" to "ideadelaymacro" 2021-11-17 12:36:56 +03:00
Alex Plate
db4324c478 Use a different method for getting option values 2021-11-17 12:25:48 +03:00
lippfi
a8afca4ccf Normal command 2021-11-17 12:16:46 +03:00
Alex Plate
6849bab741 Add more options to the statistic 2021-11-17 12:15:24 +03:00
lippfi
ff72f24433 Normal command 2021-11-17 12:02:25 +03:00
lippfi
19ea1b204c Set default path to project for CmdFilterCommand 2021-11-17 12:02:25 +03:00
Alex Plate
a9e8dc7b9f Fix compilation issues 2021-11-17 10:49:06 +03:00
Alex Plate
ee14eac009 Rewrite ctrl-^ to use a project service with saved last tab 2021-11-17 10:34:38 +03:00
Alex Plate
3c1bbd5a7f Add few statistic items 2021-11-17 10:34:38 +03:00
lippfi
218cfaca44 Add contains method to OptionService 2021-11-17 04:59:17 +03:00
lippfi
8a78d76a20 OptionService.Scope as a sealed class 2021-11-17 04:39:31 +03:00
lippfi
1ead9f1443 Format 2021-11-16 13:49:38 +03:00
lippfi
c53dd48437 Fix adding options in VimExtensionRegistrar 2021-11-16 13:10:01 +03:00
lippfi
001a1d648c Fix merge 2021-11-16 12:41:27 +03:00
Alex Plate
6bbd162c72 Fix AceJump issues 2021-11-16 12:18:25 +03:00
Alex Plate
8fb8476994 Ignore bookmark test 2021-11-16 12:16:57 +03:00
Alex Plate
8d7a2faf1b Update copyright info 2021-11-16 12:16:57 +03:00
Alex Plate
df946f8525 fix(VIM-2026): Intellij uses a different initialization approach during settings reading 2021-11-16 12:16:55 +03:00
Alex Plate
58f8c315e6 Reformat code 2021-11-16 12:13:24 +03:00
lippfi
c6a379048e Changed object in VariableService to applicationService 2021-11-16 12:13:23 +03:00
Alex Plate
02dd52ccb9 Draft of statistic collector 2021-11-16 12:05:56 +03:00
Alex Plate
abb93af3fb Reformat files 2021-11-16 12:05:56 +03:00
lippfi
06b18b8fb9 Fix if statement 2021-11-16 12:05:56 +03:00
dependabot[bot]
88772a0d8e Bump antlr4 from 4.9.2 to 4.9.3
Bumps [antlr4](https://github.com/antlr/antlr4) from 4.9.2 to 4.9.3.
- [Release notes](https://github.com/antlr/antlr4/releases)
- [Changelog](https://github.com/antlr/antlr4/blob/master/CHANGES.txt)
- [Commits](https://github.com/antlr/antlr4/compare/4.9.2...4.9.3)

---
updated-dependencies:
- dependency-name: org.antlr:antlr4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-16 12:05:56 +03:00
dependabot[bot]
89c2bf0932 Bump annotations from 22.0.0 to 23.0.0
Bumps [annotations](https://github.com/JetBrains/java-annotations) from 22.0.0 to 23.0.0.
- [Release notes](https://github.com/JetBrains/java-annotations/releases)
- [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JetBrains/java-annotations/compare/22.0.0...23.0.0)

---
updated-dependencies:
- dependency-name: org.jetbrains:annotations
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-16 12:05:56 +03:00
Alex Plate
9a0e6336b7 Update changelog 2021-11-16 12:05:56 +03:00
Alex Plate
550a754fab Completely avoid esc handling in normal mode 2021-11-16 12:05:55 +03:00
Alex Plate
5921f7f889 Remove redundant qualifier name 2021-11-16 12:03:51 +03:00
Alex Plate
e097880e95 Add an ability to enable matchit using packadd syntax 2021-11-16 12:03:48 +03:00
Alex Plate
99a0dc6c53 Get rid of PlatformUtils usages
This class should not be used and replaced with ide-specific configurations
2021-11-16 12:02:25 +03:00
eugene.nizienko
ef7e4a752d removing test fail 2021-11-16 12:00:10 +03:00
Alex Plate
cded8e54fb Update changelog 2021-11-16 12:00:10 +03:00
eugene.nizienko
f17a903555 test video recording 2021-11-16 12:00:10 +03:00
lippfi
191aba1f95 Add packadd rule to grammar 2021-11-16 12:00:10 +03:00
lippfi
e8d7a7f8bf Make OptionChangeListener an interface 2021-11-16 10:35:30 +03:00
lippfi
836c1084c4 Optimize MultikeyMap for options 2021-11-16 10:17:48 +03:00
lippfi
649bfdc220 Fix resetAllOptions 2021-11-16 10:11:10 +03:00
lippfi
8d6529ccf1 Better OptionChangeListener 2021-11-16 09:17:31 +03:00
lippfi
c936692403 Moved show* method from OptionService to SetCommand 2021-11-16 08:43:26 +03:00
lippfi
c3d3f2ab50 Fix SpecialKeyHandlers 2021-11-15 15:54:17 +03:00
Alex Plate
f289b19310 Correct usage of option service 2021-11-15 15:51:35 +03:00
lippfi
9866231129 Replace object with applicationService in OptionServiceImpl 2021-11-15 13:04:28 +03:00
lippfi
e0b5b54dda Add more methods to OptionService 2021-11-15 13:02:54 +03:00
lippfi
2687ecc02e Renamed methods 2021-11-15 12:45:01 +03:00
lippfi
3699920515 Add more methods to OptionService 2021-11-15 06:38:22 +03:00
lippfi
4481da75b7 OptionChangeListener 2021-11-15 06:32:04 +03:00
lippfi
037b636be9 Format 2021-11-14 01:20:30 +03:00
lippfi
12ded24cd4 Old and new options are compatible 2021-11-14 01:20:07 +03:00
lippfi
2b5c13e3da IdeaRefactorModeHelper 2021-11-13 23:32:37 +03:00
lippfi
043f07190c Replace older options with new ones 2021-11-13 23:21:24 +03:00
lippfi
dc0758274e Support adding options from plugins 2021-11-11 02:50:48 +03:00
lippfi
0d9aa85a6a Add missing options 2021-11-11 02:24:29 +03:00
lippfi
810440abe7 Better addListener method 2021-11-11 02:17:06 +03:00
lippfi
177aaebaf8 Add scope to optionExpression 2021-11-11 02:02:58 +03:00
lippfi
ba11c565d8 Mark old classes as deprecated 2021-11-11 01:58:43 +03:00
lippfi
5320d3a4fd Move GuiCursorOption subclasses to GuiCursorOptionHelper 2021-11-11 01:41:43 +03:00
lippfi
82f181b80b Temporarily returned OptionsManager to set command 2021-11-11 01:26:00 +03:00
lippfi
eb43fa7c4c Update listeners 2021-11-11 01:08:31 +03:00
lippfi
86c0357725 Better options support in let command 2021-11-11 01:01:02 +03:00
lippfi
844dac6106 set and setlocal commands 2021-11-11 01:00:02 +03:00
lippfi
0a923e98ab Made parseNumber method public 2021-11-11 00:54:45 +03:00
lippfi
a85a5bd055 Add helper classes for options 2021-11-11 00:54:13 +03:00
lippfi
ca51798445 Add OptionService 2021-11-11 00:49:42 +03:00
lippfi
73146ea643 Fix augroup 2021-11-11 00:40:06 +03:00
Alex Plate
f186f4aa5c fix(VIM-2449): Use state to check if the selection is block (instead of multiple ranges) 2021-11-10 19:16:26 +03:00
Alex Plate
a4d89af418 Get back caret shape check disabling 2021-11-10 19:13:53 +03:00
Alex Plate
4eb755fed6 Get back stable version of IJ for development 2021-11-10 18:56:16 +03:00
Alex Plate
95837605b8 Remove unused argument 2021-11-10 18:56:00 +03:00
Alex Plate
3f4bf3f6fd Advertise using of Plug syntax for defining the plugins 2021-11-10 18:40:15 +03:00
Alex Plate
adb71068e3 Add command for packadd 2021-11-10 18:08:58 +03:00
Alex Plate
68f898dbf8 Update changelog 2021-11-09 19:37:07 +03:00
Matt Ellis
296b714282 fix(VIM-2462): reset caret when disabling plugin 2021-11-09 19:35:19 +03:00
Alex Plate
d88f38cf2a Update release version to 1.8.1 2021-11-09 17:00:15 +03:00
Alex Plate
a8098c2c4c fix(VIM-2461): Show action id before action execution 2021-11-08 13:19:31 +03:00
Alex Plate
1eb91889d4 Fix EA-402385
https://web.ea.pages.jetbrains.team/#/issue/402385
2021-11-08 11:45:28 +03:00
Alex Plate
ac451d0fcd Update changelog 2021-11-08 11:06:44 +03:00
Alex Plate
5d7e0a1260 Add a note to the documentation 2021-11-08 11:06:44 +03:00
Matt Ellis
8344207608 fix(VIM-2432): handle scrolloff with <C-D> and <C-U> 2021-11-08 11:03:58 +03:00
Alex Plate
cc45168e25 Update formatting 2021-11-07 00:10:26 +00:00
Alex Plate
81c898dd9e [VIM-2456] Refactor command execution in a way that environment information is collected before running the command.
This also fixes VIM-2397
2021-11-04 13:26:56 +03:00
Alex Plate
87aa50c7be Reformat file 2021-11-04 13:26:45 +03:00
lippfi
a080047632 Update changelog 2021-11-03 20:06:56 +03:00
lippfi
bb4b3dfe61 Fix augroup 2021-11-03 17:31:59 +03:00
lippfi
55aaa6e2c6 Fix split command 2021-11-03 16:30:55 +03:00
lippfi
1fc866eeee Add 'se' abbrev to set command 2021-11-03 16:30:55 +03:00
Alex Plate
15e0692b41 Update changelog 2021-11-01 11:46:09 +03:00
Alex Plate
6db42dc736 [VIM-2199] Fix autocompletion for AppCode 2021-11-01 11:42:20 +03:00
Alex Plate
c1d86a4238 Fix AppCode template detection 2021-11-01 11:34:20 +03:00
Alex Plate
ec761dbe3d [VIM-2332] Make IdeaVim depending on com.intellij.modules.platform module
This should make IdeaVim compatible with CWM
2021-11-01 10:03:59 +03:00
Alex Plate
1328a314de Add exception for strange EA
https://web.ea.pages.jetbrains.team/#/issue/266279
2021-11-01 10:03:59 +03:00
lippfi
06b0a1292f Fix spaces between range units 2021-10-29 15:51:31 +03:00
Alex Plate
11a16a54fc Show the reload action if the IJ starts with the .ideavimrc file 2021-10-29 11:32:20 +03:00
Alex Plate
548cbb4bda Add chylex to contributors list 2021-10-29 10:12:38 +03:00
637ae21089 [VIM-2255] Missing reload icon in .ideavimrc on Windows 2021-10-29 10:09:48 +03:00
dependabot[bot]
6febc4d2fc Bump github-api from 1.133 to 1.135
Bumps [github-api](https://github.com/hub4j/github-api) from 1.133 to 1.135.
- [Release notes](https://github.com/hub4j/github-api/releases)
- [Changelog](https://github.com/hub4j/github-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hub4j/github-api/compare/github-api-1.133...github-api-1.135)

---
updated-dependencies:
- dependency-name: org.kohsuke:github-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-29 10:06:04 +03:00
dependabot[bot]
8253db1486 Bump org.jetbrains.intellij from 1.2.0 to 1.2.1
Bumps org.jetbrains.intellij from 1.2.0 to 1.2.1.

---
updated-dependencies:
- dependency-name: org.jetbrains.intellij
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-29 10:05:55 +03:00
lippfi
8fe1b0891b Fix ! command 2021-10-27 13:42:46 +03:00
Alex Plate
ff1d7f7f1c Add information about vim script into the README.md 2021-10-27 11:42:11 +03:00
Alex Plate
c437a18288 Prepare for 1.8.0 release 2021-10-27 10:26:21 +03:00
Alex Plate
0992c39132 Change changelog ordering 2021-10-27 10:08:58 +03:00
lippfi
610f978c44 Update changelog 2021-10-26 20:21:34 +03:00
lippfi
84ea9266c2 Commands do not require space before argument anymore 2021-10-26 16:24:03 +03:00
lippfi
54abaebe17 Deleted rangesCount from Ranges.kt 2021-10-26 15:11:18 +03:00
lippfi
a16c860ba8 Better marks support in commands 2021-10-26 15:06:03 +03:00
lippfi
b1b7e3439f Underscores in substitute command 2021-10-26 12:49:04 +03:00
Alex Plate
1df75fe25c Fix selection with vim exchange
VIM-2359
https://github.com/JetBrains/ideavim/discussions/388
2021-10-26 11:16:02 +03:00
Alex Plate
4d0e0b8ef8 Fix VCS tagging after EAP release 2021-10-26 11:15:57 +03:00
Alex Plate
36002def70 Add Petar Guglev to contributors list 2021-10-25 11:09:56 +03:00
Petar Guglev
8247ac54a1 Update README.md link
Link was broken.
2021-10-25 11:07:20 +03:00
dependabot[bot]
f4fe80b28a Bump org.jetbrains.changelog from 1.3.0 to 1.3.1
Bumps org.jetbrains.changelog from 1.3.0 to 1.3.1.

---
updated-dependencies:
- dependency-name: org.jetbrains.changelog
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-25 11:06:28 +03:00
lippfi
9e052d6e3a Update roadmap 2021-10-20 13:22:45 +03:00
lippfi
0da18b81b6 Variable locking 2021-10-20 13:22:08 +03:00
lippfi
fc81c6329b Better ambiguous parsing with .
Added originalString field to Expression
2021-10-20 11:53:33 +03:00
Alex Plate
3d92b989ce Disable disposed check in order to find the stack trace of disposed project 2021-10-19 22:53:18 +03:00
Alex Plate
b942e8a950 Do not use Disposer.isDiposed 2021-10-19 22:53:17 +03:00
lippfi
29131b4644 Fixed operator precedence 2021-10-19 20:52:23 +03:00
lippfi
b897b118ca Added scope to for loop variable 2021-10-19 17:43:00 +03:00
lippfi
145af2b6ee Refactoring 2021-10-19 17:40:57 +03:00
lippfi
09a38a854c Comments are back 2021-10-19 17:28:14 +03:00
lippfi
995779a294 Better let command (list and dictionaries are passed by reference) 2021-10-19 14:32:16 +03:00
lippfi
67f38fc646 Fixed parents for Executable 2021-10-19 14:32:16 +03:00
lippfi
316f1fa925 added deepcopy() method to VimDataType 2021-10-19 14:32:16 +03:00
Alex Plate
21f5ad6c0a Lock selection suppressor only on selection starting 2021-10-19 09:51:53 +03:00
Alex Plate
6e6e52f316 Remove deprecated modifications 2021-10-18 09:55:32 +03:00
lippfi
71c19b3ef2 Added nerdtree abbrev to NERDTree option
(https://github.com/JetBrains/ideavim/discussions/378)
2021-10-15 14:18:43 +03:00
lippfi
0befc6385d Added more constructors to SimpleExpression class 2021-10-15 12:18:50 +03:00
lippfi
22371b4b07 Merge remote-tracking branch 'origin/master' 2021-10-15 12:03:49 +03:00
lippfi
913d711b80 Curly braces names 2021-10-15 12:03:30 +03:00
lippfi
d17d12c805 Removed Variable class from plugins 2021-10-15 11:57:45 +03:00
lippfi
4d64109e2c Scope as function argument 2021-10-14 12:08:33 +03:00
Alex Plate
d66d807cff Reset skip events on click 2021-10-14 11:39:10 +03:00
lippfi
e7a68f06b3 Override toString() method for Scope class 2021-10-14 10:46:34 +03:00
lippfi
fd49e86e17 Finish statement 2021-10-14 08:56:10 +03:00
lippfi
337621ca4a For loops with list 2021-10-14 08:54:52 +03:00
lippfi
0e38a4e4f0 Formatting 2021-10-14 07:47:49 +03:00
Alex Plate
c19a160c9c Update notifications 2021-10-13 11:37:02 +03:00
Alex Plate
c390e06e63 Use Path 2021-10-13 11:31:07 +03:00
Alex Plate
00d6a948d0 Update extension point listener 2021-10-13 11:12:47 +03:00
Alex Plate
6f1c2a1a81 Convert lookup listener to TOPIC subscription 2021-10-13 11:02:34 +03:00
Alex Plate
47ba907eb7 Update changenotes 2021-10-12 16:41:25 +03:00
Alex Plate
a14252493f Use java v11 2021-10-12 15:41:37 +03:00
Alex Plate
328c4288c2 Fix since version in plugin.xml 2021-10-12 15:40:22 +03:00
Alex Plate
b7c11ff852 Update minimal IJ version to 203+ 2021-10-12 15:26:35 +03:00
Alex Plate
add1d6225d [TC] Move 202 to old tests 2021-10-12 15:14:41 +03:00
Alex Plate
182424ba05 And more tests compatibility changes 2021-10-12 14:58:40 +03:00
Alex Plate
bf86cd2a51 Keep compatibility in tests 2021-10-12 14:34:29 +03:00
Alex Plate
2085e9cafd Make IJ compatible with older versions of ij (212<) 2021-10-12 13:26:22 +03:00
Alex Plate
fb51236ae2 Add 2021.2 tests 2021-10-12 13:25:58 +03:00
lippfi
9509b5825c Fix icon 2021-10-11 17:35:52 +03:00
lippfi
b8a8acdad7 Update roadmap 2021-10-11 01:37:30 +03:00
lippfi
898e5f8bda Standard project layout 2021-10-11 01:29:18 +03:00
lippfi
30a39497aa Update changelist 2021-10-11 00:06:20 +03:00
lippfi
852a220076 Update list of vimscript functions 2021-10-11 00:06:02 +03:00
lippfi
a34d56b7df Fixed default values in functions 2021-10-11 00:05:09 +03:00
lippfi
13feaa7581 IdeaVim ignore comment's great return 2021-10-10 22:13:23 +03:00
lippfi
14df9ea705 Fix matches operator 2021-10-10 21:48:34 +03:00
lippfi
6bd2bb884a Faster parsing 2021-10-10 19:16:01 +03:00
lippfi
89cdaa611a VIM-2425 ExecuteCommand is a data class 2021-10-10 03:10:38 +03:00
lippfi
cc476a26b4 has() function 2021-10-08 19:13:49 +03:00
lippfi
14d132638d ideaVim ignore comment no longer exists 2021-10-08 04:18:22 +03:00
lippfi
9e62636059 Optional function arguments 2021-10-08 04:13:24 +03:00
lippfi
a3b2b4920a Comments are skipped during parsing 2021-10-08 00:05:54 +03:00
lippfi
e7f128ee59 Anonymous functions 2021-10-08 00:04:54 +03:00
lippfi
e1069c265e Fixed literal dictionary key pattern 2021-10-08 00:03:05 +03:00
lippfi
e0b356c12d Dictionary functions 2021-10-08 00:02:36 +03:00
lippfi
769d900383 Formatting 2021-10-07 23:54:31 +03:00
lippfi
8d99100601 Redundant arguments in lambda functions are ignored 2021-10-07 23:44:15 +03:00
Alex Plate
0c1c8080a6 Update actions docs 2021-10-07 22:18:01 +03:00
Alex Plate
1742541b03 Add note about version update 2021-10-07 22:03:49 +03:00
Alex Plate
d66e6967ee Add Martin Yzeiri to contributors list 2021-10-07 10:27:32 +03:00
Alex Plate
559879301d Add traces to suppressor locks and unlocks 2021-10-07 10:21:30 +03:00
Martin Yzeiri
c524c92062 Emulate matchit.vim 2021-10-07 10:21:19 +03:00
Alex Plate
b329329333 Add settings for testing on latest eap 2021-10-06 12:07:19 +03:00
Alex Plate
5df8ef98a1 Add more logging for selection change 2021-10-06 10:54:55 +03:00
Alex Plate
55154b2996 Update changelog 2021-10-06 09:29:54 +03:00
lippfi
89aa6aecff Added self property to FunctionDeclarations 2021-10-05 13:25:18 +03:00
lippfi
970456e6b0 Added evaluateWithRange method to funcrefCalls 2021-10-05 13:25:18 +03:00
dependabot[bot]
97effae8dc Bump org.jetbrains.changelog from 1.2.0 to 1.3.0
Bumps org.jetbrains.changelog from 1.2.0 to 1.3.0.

---
updated-dependencies:
- dependency-name: org.jetbrains.changelog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-05 09:29:43 +03:00
dependabot[bot]
f26755045d Bump annotations from 21.0.1 to 22.0.0
Bumps [annotations](https://github.com/JetBrains/java-annotations) from 21.0.1 to 22.0.0.
- [Release notes](https://github.com/JetBrains/java-annotations/releases)
- [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JetBrains/java-annotations/compare/21.0.1...22.0.0)

---
updated-dependencies:
- dependency-name: org.jetbrains:annotations
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-05 09:29:34 +03:00
Alex Pláte
067af8356c Merge pull request #337 from citizenmatt/feature/guicursor
guicursor!
2021-10-05 09:28:26 +03:00
Alex Plate
ee743674c2 Merge branch 'master' into feature/guicursor
# Conflicts:
#	src/com/maddyhome/idea/vim/helper/MessageHelper.kt
#	src/com/maddyhome/idea/vim/option/OptionsManager.kt
2021-10-05 09:27:32 +03:00
Alex Plate
362f8a3c99 Update gradle version 2021-10-05 09:24:14 +03:00
lippfi
9f0ecd7f73 Better function calls and call command 2021-10-05 03:24:16 +03:00
lippfi
d01f582646 Dictionary function call 2021-10-05 02:51:24 +03:00
lippfi
cdc8f159f5 Read-only variables 2021-10-04 21:33:16 +03:00
lippfi
b481b6e1b5 Updated VIMSCRIPT_ROADMAP.md 2021-10-04 12:06:18 +03:00
lippfi
505aeff544 VIM-2417 fix bars in substitute command 2021-10-01 20:11:24 +03:00
lippfi
dbf0444110 funcref() function 2021-10-01 19:13:54 +03:00
lippfi
07d753f413 function() function 2021-10-01 17:16:37 +03:00
lippfi
f516e89a5f Better VimFuncref 2021-10-01 17:16:09 +03:00
lippfi
5f15bca561 Add name and scope fields to FunctionHandler 2021-10-01 17:14:06 +03:00
lippfi
d98acd8c39 Moved tests 2021-10-01 17:11:25 +03:00
lippfi
97502a5bd5 Function as method call 2021-10-01 03:31:20 +03:00
lippfi
806184aa5d Lambda 2021-10-01 03:31:20 +03:00
lippfi
d93fb1fdfc Funcref 2021-10-01 03:31:20 +03:00
lippfi
9cf922ae80 FunctionStorage refactoring 2021-10-01 03:31:20 +03:00
lippfi
2070efc35a Changed Executable to interface 2021-10-01 03:31:20 +03:00
lippfi
1dc4dbf7af Optional function arguments 2021-10-01 03:31:20 +03:00
lippfi
c10634f1e3 Updated roadmap 2021-10-01 03:31:20 +03:00
lippfi
c0f8fd8c6b call command 2021-10-01 03:31:20 +03:00
lippfi
95f89792d4 range function flag 2021-10-01 03:31:20 +03:00
lippfi
a299abf18f abort function flag 2021-10-01 03:31:20 +03:00
lippfi
0cc15390a4 Getting dictionary value by dict.key 2021-10-01 03:31:20 +03:00
lippfi
379b23b42d Update formatting 2021-10-01 03:31:20 +03:00
lippfi
160b1b240a Falsy operator 2021-10-01 03:31:20 +03:00
lippfi
5af69377e5 Fixed test 2021-10-01 03:31:20 +03:00
lippfi
bcee0a5964 Optimized imports 2021-10-01 03:31:20 +03:00
lippfi
804128c3d3 Deleted VimContext from Executable 2021-10-01 03:31:20 +03:00
lippfi
4e3ee024ac Deleted VimContext from commands 2021-10-01 03:31:20 +03:00
lippfi
c300fdbfb1 Added closure flag and fixed scopes 2021-10-01 03:31:20 +03:00
lippfi
840ff11335 Deleted VimContext from expressions 2021-10-01 03:31:20 +03:00
lippfi
8d76b51683 ".." as concatenation operator 2021-10-01 03:31:20 +03:00
lippfi
a78bb51831 Added function flags 2021-10-01 03:31:20 +03:00
lippfi
db19d0819e Added "lambda" and "function as method" rules to grammar 2021-10-01 03:31:20 +03:00
lippfi
72b76221f7 Added len() function 2021-10-01 03:31:20 +03:00
lippfi
9eb32034b7 Added 'ide' option 2021-10-01 03:31:20 +03:00
lippfi
24f88b5ffe Added 'exists' function (works only with options for now) 2021-10-01 03:31:20 +03:00
Alex Plate
d27ebad011 Prepare to the new release 2021-09-30 15:28:33 +03:00
Alex Plate
1cebd8551b Update gradle plugin to 1.2.0 2021-09-30 15:25:43 +03:00
Alex Plate
446d5aeb15 Replace AbstractBundle with DynamicBundle 2021-09-30 10:35:22 +03:00
lippfi
58f8ce605d Update changelog 2021-09-30 01:03:30 +03:00
Alex Plate
3fae2fdae5 isBlockCursor method doesn't work for UI tests at the moment 2021-09-29 12:58:30 +03:00
Alex Plate
c268407ce3 Merge branch 'master' into feature/guicursor
# Conflicts:
#	src/com/maddyhome/idea/vim/listener/VimListenerManager.kt
2021-09-29 12:32:32 +03:00
Alex Plate
cd435c5f41 Do not correct selection when the mouse is clicked 2021-09-29 12:30:47 +03:00
Alex Plate
74b0e3bded Merge branch 'master' into feature/guicursor
# Conflicts:
#	src/com/maddyhome/idea/vim/listener/VimListenerManager.kt
2021-09-29 11:08:30 +03:00
Alex Plate
edc0a14ef1 Do not set selection locker on mouse press 2021-09-29 10:49:16 +03:00
Alex Plate
011be78b27 Add ui test for extend selection 2021-09-28 12:04:25 +03:00
Alex Plate
58008e6758 Improve vim selection suppressor 2021-09-28 11:51:43 +03:00
Matt Ellis
ae21727c12 Merge branch 'master' into feature/guicursor 2021-09-27 15:21:41 +01:00
lippfi
a480372d3d Added a colon after scope for variables in VimScriptGlobalEnvironment 2021-09-27 15:19:39 +03:00
lippfi
0bc298014d Fixed string rule 2021-09-27 14:31:39 +03:00
lippfi
63f85a8099 lua << END is skipped now 2021-09-26 19:10:38 +03:00
lippfi
cc16d5ba15 VIM-2411. Added tabs to INLINE_SEPARATOR. Much better comments 2021-09-24 09:47:25 +03:00
lippfi
fa3afe188e VIM-2409. Removed inline comment from SubstituteCommand's rule 2021-09-23 17:52:15 +03:00
lippfi
6df2db86c3 VIM-2406. Added patterns with omitted "/" or "?" at the end of the pattern to GoToLineCommand 2021-09-23 17:32:39 +03:00
lippfi
7791de490d Removed unnecessary spaces from grammar 2021-09-23 13:31:52 +03:00
lippfi
754a8c7250 global and vglobal commands with pipes 2021-09-22 16:23:23 +03:00
lippfi
88b0f31590 Emojis 2021-09-22 15:40:53 +03:00
lippfi
b17dbb37e4 Updated formatting 2021-09-22 15:31:55 +03:00
Alex Plate
4ec360219a Fix UI tests 2021-09-21 17:29:47 +03:00
Alex Plate
b4d4da7250 Refactor UI test 2021-09-21 11:20:33 +03:00
Alex Plate
8bf809a888 Improve mouse selection from the line end 2021-09-21 11:19:41 +03:00
Alex Plate
90e0cee86c Fix Ui test 2021-09-21 10:35:43 +03:00
lippfi
5b571362e3 VIM-2405. Fixed error message for v: scope. NotImplementedErrors are now also shown in status bar. 2021-09-20 21:21:48 +03:00
Alex Plate
9537003a6d Prepare to 1.7.1 release 2021-09-20 12:26:54 +03:00
Alex Plate
bdc50283d2 Switch gradle to 2021.2.2 because of issues in gradle plugin 2021-09-20 12:20:44 +03:00
Alex Plate
85c8968d75 Fix multiple copy from unnamed clipboard 2021-09-20 12:18:45 +03:00
lippfi
1466ad9bef Update changelog 2021-09-20 12:09:55 +03:00
lippfi
0cda2241ed Deleted "lambda" and "function as method" rules 2021-09-20 00:11:10 +03:00
lippfi
3ac96d9ed4 Added tests 2021-09-20 00:11:10 +03:00
lippfi
9f7b6a281b Fixed comma at the end of a literal dictionary 2021-09-20 00:11:10 +03:00
lippfi
96bd5f8259 Fixed unnamed register 2021-09-20 00:11:10 +03:00
lippfi
62917c2a50 VIM-2401. ExException is shown for map <expr> 2021-09-20 00:11:10 +03:00
lippfi
10ea780cdc Better grammar 2021-09-20 00:11:10 +03:00
lippfi
19561bb1f1 Fixed comment rule 2021-09-20 00:11:10 +03:00
lippfi
8088789f51 Fixed augroup and autocmd 2021-09-20 00:11:10 +03:00
lippfi
5dec91caa3 Added lambdas and functions as methods to grammar 2021-09-20 00:11:10 +03:00
lippfi
0c28a9a79b More loyal grammar 2021-09-20 00:11:10 +03:00
Alex Plate
8c2b715f93 Update formatting 2021-09-19 00:09:17 +00:00
aleksei.plate
0fe75031a9 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: VCS roots of 'Publish Release' build configuration were updated 2021-09-17 10:05:03 +00:00
aleksei.plate
0ec01f8d6f TeamCity change in 'IntelliJ IDEA plugins / IdeaVim / IdeaVim releases' project: VCS roots of 'Publish Release' build configuration were updated 2021-09-17 10:04:50 +00:00
aleksei.plate
fbcb3f8cbc TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'https://github.com/JetBrains/ideavim (branch release)' VCS root was created 2021-09-17 10:04:25 +00:00
dependabot[bot]
3f6a454052 Bump github-api from 1.129 to 1.133
Bumps [github-api](https://github.com/hub4j/github-api) from 1.129 to 1.133.
- [Release notes](https://github.com/hub4j/github-api/releases)
- [Changelog](https://github.com/hub4j/github-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hub4j/github-api/compare/github-api-1.129...github-api-1.133)

---
updated-dependencies:
- dependency-name: org.kohsuke:github-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-17 10:44:55 +03:00
dependabot[bot]
088fda12f8 Bump org.eclipse.jgit
Bumps org.eclipse.jgit from 5.12.0.202106070339-r to 5.13.0.202109080827-r.

---
updated-dependencies:
- dependency-name: org.eclipse.jgit:org.eclipse.jgit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-17 10:44:00 +03:00
dependabot[bot]
b207b30108 Bump org.jlleitschuh.gradle.ktlint from 10.0.0 to 10.2.0
Bumps org.jlleitschuh.gradle.ktlint from 10.0.0 to 10.2.0.

---
updated-dependencies:
- dependency-name: org.jlleitschuh.gradle.ktlint
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-17 10:43:46 +03:00
Alex Plate
f12b67088f Remove incorrect changelog 2021-09-16 13:37:18 +03:00
Alex Plate
2643daf0b2 Exclude ktlint test source set check 2021-09-16 10:38:28 +03:00
Alex Plate
21188dad73 Update changelog settings 2021-09-16 10:17:39 +03:00
Alex Plate
0476854d7c Update changelog 2021-09-16 07:14:43 +00:00
Alex Plate
b9ab4f6484 Prepare to 1.7.0 release 2021-09-16 10:08:47 +03:00
lippfi
759d92db4d Fixed checkboxes in VIMSCRIPT_ROADMAP.md 2021-09-15 17:48:37 +03:00
lippfi
263fea1c52 Moved vimscript-related .md files to vimscript-info folder 2021-09-15 17:46:09 +03:00
lippfi
949e9216ff Updated README.md 2021-09-15 17:32:14 +03:00
lippfi
547835f59d Added roadmap & list of implemented functions 2021-09-15 17:31:50 +03:00
Alex Plate
464ed17741 Update changelog 2021-09-15 08:45:49 +00:00
Alex Plate
1ca8b06d74 Fix(VIM-2387): Fix coping with unnamed and ideaput 2021-09-15 11:43:38 +03:00
Alex Plate
5312549db1 Update changelog 2021-09-13 07:47:14 +00:00
Alex Plate
21a8a0467f Update links to discord server 2021-09-10 09:57:49 +03:00
Alex Plate
c5dfd43e48 fix(VIM-2392): Fix possible out of bounds exception 2021-09-10 09:54:06 +03:00
Alex Plate
879bc9bd98 Add some comments 2021-09-09 11:12:40 +03:00
Alex Plate
5a484c3952 Fix changelog formatting 2021-09-08 13:11:27 +03:00
Alex Plate
a1dd917227 Update changelog 2021-09-08 08:53:09 +00:00
Alex Plate
6186fa7e1b fix(VIM-2368): Do not remove selection on right click 2021-09-08 11:50:28 +03:00
Alex Plate
2c227955c7 Remove extra white space in file name 2021-09-08 10:02:49 +03:00
Alex Pláte
1ac50714f5 Update README.md 2021-09-07 18:57:17 +03:00
lippfi
fd1d6a98f1 Fixed sublist expression for lists 2021-08-17 15:10:16 +03:00
lippfi
43b5e7e644 Now all the exceptions are caught 2021-08-17 14:43:27 +03:00
lippfi
13ab68e5b1 Much better sublists 2021-08-17 14:30:32 +03:00
lippfi
165caab526 Fixed function scope (library functions do not modify vimContext anymore) 2021-08-17 14:03:43 +03:00
lippfi
187e5a752a Fixed operators precedence 2021-08-17 14:02:47 +03:00
lippfi
dc81568c45 Fixed less binary operator 2021-08-17 13:59:15 +03:00
lippfi
9fe9d92e04 Updated changelog 2021-08-17 11:49:54 +03:00
lippfi
1e550ac0a3 Map <expr> with invalid expression test 2021-08-17 11:49:54 +03:00
lippfi
1190209409 We do not fix invalid commands or expressions anymore 2021-08-17 11:49:54 +03:00
Alex Plate
c7cc6b54bf Support g:surround_no_mappings variable in vim-surround 2021-08-17 11:32:25 +03:00
Alex Plate
c1afce2939 Use latest EAP to develop the plugin 2021-08-17 11:05:20 +03:00
lippfi
aa40c04302 Added test with caret return symbol 2021-08-17 10:59:49 +03:00
lippfi
bddf07efee Added E15 exception to map <expr> 2021-08-17 01:09:39 +03:00
lippfi
c8a45cb085 Added 'map <expr>' 2021-08-17 00:59:51 +03:00
lippfi
f6720b3d37 Made ranges great again 2021-08-16 22:26:07 +03:00
lippfi
dc8f5e9b25 Fixed beep 2021-08-16 21:02:45 +03:00
lippfi
8a2d3e1aed "ideaVim ignore" comment 2021-08-16 20:22:24 +03:00
lippfi
afeaf4444b 'parseExpression' and 'parseCommand' can return null now 2021-08-16 19:55:30 +03:00
lippfi
f69a284b3f '\r' fix 2021-08-16 16:11:00 +03:00
lippfi
9f1bb44824 More loyal grammar with parametrized tests 2021-08-16 15:45:08 +03:00
lippfi
037a29551c Much safer parsing 2021-08-14 18:37:39 +03:00
Alex Plate
b4ea970c29 Do not include empty Fixes changelog entry 2021-08-13 16:54:19 +03:00
lippfi
719b80baa1 Added function flags to grammar &
Added inline comment to let command &
Fixed parser (visitor is no longer called in scripts with errors)
2021-08-13 13:33:46 +03:00
Alex Pláte
f6002f05e0 Delete GoToLineCommandTest.kt 2021-08-13 10:45:53 +03:00
Alex Plate
0867654347 Update changelog 2021-08-12 16:04:14 +00:00
Alex Plate
687a6d8693 Update changelog 2021-08-12 19:01:05 +03:00
lippfi
6fc362cae2 Removed @deprecated from VimScriptGlobalEnvironment 2021-08-12 16:59:09 +03:00
lippfi
5d03bae931 Log is cleared after each test 2021-08-12 14:39:27 +03:00
lippfi
408e51535d Script's lines with errors are now skipped by parser 2021-08-12 14:39:27 +03:00
lippfi
d4749f4eb8 Lua code in .vimrc is skipped during parsing 2021-08-12 14:39:27 +03:00
lippfi
829501c1b1 Decreased distribution size 2021-08-12 14:39:27 +03:00
lippfi
88ef5a3467 More loyal to spaces and newlines grammar 2021-08-12 14:39:27 +03:00
lippfi
e52948efcc Renamed and moved handler tests 2021-08-12 14:39:27 +03:00
lippfi
56466f889b Fixed map command names 2021-08-12 14:39:27 +03:00
lippfi
5ecfab65fa Added more command names 2021-08-12 14:39:27 +03:00
lippfi
98fc65ec43 Added comments to commands 2021-08-12 14:39:27 +03:00
lippfi
3e37e2cdc4 NotImplementedError and wrong ranges handling 2021-08-12 14:39:27 +03:00
lippfi
2efb08197f Parsing errors handling 2021-08-12 14:39:27 +03:00
lippfi
dd7cb72a25 Fixed tests for delfunction command 2021-08-12 14:39:27 +03:00
lippfi
b73fc88313 One-line statements can be written in multiline way 2021-08-12 14:39:27 +03:00
lippfi
465db2cd22 Options support in let command 2021-08-12 14:39:27 +03:00
lippfi
73c1dc8118 Added 'execute' command 2021-08-12 14:39:27 +03:00
lippfi
509a202f93 Fixed commands that do not support inline comments 2021-08-12 14:39:27 +03:00
lippfi
09a9884b9f UnknownCommand class and cleanup 2021-08-12 14:39:27 +03:00
lippfi
6afc5aa98e Better executor 2021-08-12 14:39:27 +03:00
lippfi
9e497fb5e8 Nonnull editor & dataContext in function handlers 2021-08-12 14:39:27 +03:00
lippfi
16476256c3 Replaced handlers with commands 2021-08-12 14:39:27 +03:00
lippfi
623430359a Execute method accepts only nonnull editor and dataContext 2021-08-12 14:39:27 +03:00
Matt Ellis
6ab53802df Add tests for caret attributes in nested modes
See VIM-1756
2021-08-10 17:29:00 +01:00
Alex Plate
d5f877b83d Update github task to run UI tests 2021-08-04 16:11:05 +03:00
Alex Plate
0b33702712 Mute some nvim tests 2021-08-04 16:03:53 +03:00
Alex Plate
10fce45248 Include few delays in UI test 2021-08-04 15:53:49 +03:00
Alex Plate
b39e5ba1d5 Exclude vim script tests from neovim testing 2021-08-04 15:41:04 +03:00
Alex Plate
700df030f0 Use different approach of setting defaults for nvim 2021-08-04 15:00:14 +03:00
Alex Plate
a44fe15fea Update col and line functions 2021-08-04 13:47:39 +03:00
Alex Plate
12d1553f5a Remove double copyright note 2021-08-04 12:58:17 +03:00
lippfi
503c2580d7 Fixed last command register for ExCommands 2021-08-04 11:44:43 +03:00
lippfi
8ab9509ceb Last command register fix 2021-08-04 09:49:06 +03:00
Alex Plate
197eded6d0 Add test for storing ex command to : register 2021-08-04 03:02:18 +03:00
Alex Plate
1813ad400a Support line and col functions 2021-08-03 20:22:59 +03:00
Alex Plate
a1b048a2f9 Add conversion from vimDataType to VimNumber 2021-08-03 19:59:15 +03:00
Alex Plate
cb43ad3488 Create a helper method to get vim line 2021-08-03 17:57:33 +03:00
Alex Plate
e8daf67276 Small refactoring of VimInt 2021-08-03 17:27:09 +03:00
Alex Plate
00ef191ad0 Define VimInt constants, add method to convert bool to VimInt 2021-08-03 17:24:16 +03:00
Alex Plate
e8d559f6d0 Support empty function 2021-08-03 17:15:13 +03:00
lippfi
82ed892166 Grammar refactoring 2021-08-03 11:54:49 +03:00
Alex Plate
45bd4a72a4 Kotlin compilation now depends on grammar generation 2021-08-03 09:49:22 +03:00
lippfi
7196d83833 Formatting 2021-07-31 12:37:08 +03:00
lippfi
2b7c311a2b Removed "originalString" property from commands 2021-07-31 11:31:01 +03:00
lippfi
7ef4e45945 Better exception handling 2021-07-30 18:57:02 +03:00
Alex Plate
db08ea1587 Add Filipp Vakhitov to contributors list 2021-07-30 18:22:15 +03:00
Alex Plate
af3227684b Use user login on missing name 2021-07-30 18:21:57 +03:00
lippfi
46788cc6c6 Added vimScript package & antlr grammar 2021-07-30 17:33:29 +03:00
Matt Ellis
70a45f3dc8 Treat use block caret option as caret override 2021-07-29 21:20:28 +01:00
Matt Ellis
d63e3dadbc Merge branch 'master' into feature/guicursor 2021-07-28 23:07:47 +01:00
Alex Plate
93109f1e19 Add additional logging for keys execution 2021-07-28 11:26:09 +03:00
Alex Plate
c4e74ee8a5 Update qodana.yaml file 2021-07-26 19:29:12 +03:00
Alex Plate
534fbe1a6b Tests: reset repeat between tests 2021-07-26 19:07:46 +03:00
Alex Plate
e9f0c032a4 UI test: update tests formatting 2021-07-26 18:57:37 +03:00
Alex Plate
293307e63d UI tests: fix reenable vim execution 2021-07-26 18:41:50 +03:00
Alex Plate
2701522605 UI tests: Take screenshots during test 2021-07-26 17:52:14 +03:00
Alex Plate
98666855ad UI tests: Add a step of closing all existing tabs 2021-07-26 14:22:17 +03:00
aleksei.plate
adca9cf292 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'Qodana checks' build configuration were updated 2021-07-26 10:28:07 +00:00
Alex Plate
fc20acd8cb Fix compilation issue for older versions of IJ 2021-07-26 13:25:26 +03:00
Alex Plate
6744e86b62 Catch exceptions during screenshot catching 2021-07-26 11:24:24 +03:00
Alex Plate
5ad202f482 Run linter 2021-07-26 11:21:05 +03:00
Alex Plate
80edb3b8f2 Create UI test for wrapping with if 2021-07-26 03:42:02 +03:00
Alex Plate
3bc8c80422 Create a UI test for enabling and disabling emulator 2021-07-26 03:42:02 +03:00
Alex Plate
4ac19ef8da Run UI tests daily 2021-07-26 03:42:01 +03:00
Alex Plate
797bce2eac Update formatting 2021-07-25 00:08:49 +00:00
Alex Plate
807e80780d Update changelog 2021-07-23 13:01:55 +03:00
eugene.nizienko
a58ca80fc9 fixed Ide Fatal Errors
added UI tests reporting
2021-07-23 12:25:18 +03:00
Alex Plate
4158bf1663 Upload artifact from the correct directory 2021-07-23 11:40:47 +03:00
Alex Plate
cd0c594efb Put some properties to gradle file 2021-07-23 11:20:36 +03:00
Alex Plate
648d4d961d Use correct gradle tasks names 2021-07-23 10:43:48 +03:00
Alex Plate
9bca6f77d6 Add ui tests job 2021-07-23 10:40:36 +03:00
Alex Plate
c33718c39d Update gradle-changelog configurations 2021-07-23 09:35:45 +03:00
Alex Plate
19b51a4a69 Add docs for types of motion 2021-07-22 11:13:58 +03:00
dependabot[bot]
f9e5bc43c6 Bump remote-robot from 0.11.5 to 0.11.6
Bumps remote-robot from 0.11.5 to 0.11.6.

---
updated-dependencies:
- dependency-name: com.intellij.remoterobot:remote-robot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-22 09:52:22 +03:00
dependabot[bot]
42383948b7 Bump org.jetbrains.changelog from 1.1.2 to 1.2.0
Bumps org.jetbrains.changelog from 1.1.2 to 1.2.0.

---
updated-dependencies:
- dependency-name: org.jetbrains.changelog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-22 09:51:31 +03:00
Alex Plate
5f8a1723ba Update changelog 2021-07-20 06:37:16 +00:00
Alex Plate
b8086cb509 Prepare to the 0.69 release 2021-07-20 09:35:42 +03:00
Alex Plate
e2cd0d1246 Update changelog 2021-07-19 14:44:51 +03:00
Alex Plate
9fbb9ac957 Update changelog 2021-07-02 10:27:59 +03:00
Alex Plate
f64439dab9 Remove unused function 2021-07-01 22:24:39 +03:00
Alex Plate
fe423d0b46 Log text after test 2021-07-01 20:13:19 +03:00
Alex Plate
5018b0e9ff Change action place for IdeaVim actions 2021-07-01 19:52:20 +03:00
Alex Plate
8b0a650631 Update qodana script 2021-07-01 19:31:20 +03:00
Alex Plate
81076d9c43 Several improvements 2021-07-01 19:30:37 +03:00
Alex Plate
b610af30ab Fix flaky tests with mappings 2021-07-01 19:30:36 +03:00
aleksei.plate
bbc10cd3db TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: 'Qodana checks' build configuration settings were updated 2021-07-01 16:27:38 +00:00
aleksei.plate
6690139c66 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: triggers of 'Qodana checks' build configuration were updated 2021-07-01 16:27:23 +00:00
Alex Plate
df9d5bfe25 Fix GlobalHandlerTest 2021-07-01 18:13:01 +03:00
Alex Plate
4a0dd31b2c [TC] Exclude ktlint from checking 2021-07-01 17:36:54 +03:00
Alex Plate
afbfacb462 Format code 2021-07-01 17:36:28 +03:00
Alex Plate
5d68e76b30 [TC] Remove linting checks on GH 2021-07-01 17:18:40 +03:00
Alex Plate
246cc1479a Update changelog 2021-07-01 13:44:40 +03:00
Michal Placek
408cd0e037 vim-2335 Support for navigation to previous buffer with :b# 2021-07-01 13:41:15 +03:00
Alex Plate
43884c791f Add Michal Placek to contributors list 2021-07-01 10:34:32 +00:00
Michal Placek
c15eccf49a vim-1062 -fixes 2021-07-01 13:31:27 +03:00
Michal Placek
ddb159eec8 vim-1062 2021-07-01 13:31:27 +03:00
dependabot[bot]
af8edae1d3 Bump remote-robot from 0.11.4 to 0.11.5
Bumps remote-robot from 0.11.4 to 0.11.5.

---
updated-dependencies:
- dependency-name: com.intellij.remoterobot:remote-robot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-07-01 13:29:37 +03:00
Matt Ellis
91585e1059 Run linters 2021-06-30 21:41:59 +01:00
Matt Ellis
d6a99d4354 Update to latest EAP 2021-06-30 21:10:49 +01:00
Matt Ellis
0d840b2c41 Merge branch 'master' into feature/guicursor 2021-06-30 18:39:03 +01:00
Matt Ellis
0288a0f2b5 Use insert caret for select mode 2021-06-30 17:26:44 +01:00
Matt Ellis
fe7dc4902b Make ExShortcutKeyAction dumb aware 2021-06-30 17:17:55 +01:00
Matt Ellis
1caf380505 Improve caret painting in command line 2021-06-30 17:15:52 +01:00
Alex Plate
628ce16e99 [TC] Exclude linting check for jobs 2021-06-30 11:20:39 +03:00
Alex Plate
f822b04a6f Trying to exclude settings.xml using gitignore 2021-06-30 10:49:09 +03:00
Alex Plate
a61747cd94 Try to exclude settings.xml from the data 2021-06-30 10:45:53 +03:00
Alex Plate
86c97f5566 Change the name of the job 2021-06-30 10:42:57 +03:00
Alex Plate
31e633f55e Update formatting 2021-06-30 07:42:22 +00:00
Alex Plate
e3aa3e24f5 Create a job for automatic formatting 2021-06-30 10:39:39 +03:00
Alex Plate
b7396fdf8c Fix formatting 2021-06-30 10:31:27 +03:00
Alex Plate
e8f0e31a27 Correct caret for selecting from the end for 212+ versions of IJ 2021-06-30 10:29:51 +03:00
Alex Plate
d759c6bc24 Remove test file 2021-06-30 09:45:29 +03:00
Alex Plate
f76d0d2f81 Search for the user by github commit 2021-06-30 09:40:20 +03:00
Alex Plate
ec8b02e1c1 Do not add VIM-123 example 2021-06-30 09:25:00 +03:00
Alex Plate
c27ac06f1b Update changelog 2021-06-30 06:21:48 +00:00
Alex Plate
24f8f9ca14 Update run configuration 2021-06-30 09:20:14 +03:00
Alex Plate
8b8bbba85d Get rid of last_processed_cache file 2021-06-30 09:17:31 +03:00
Matt Ellis
64be75142e Use guicursor options to draw ex caret 2021-06-29 17:05:11 +01:00
Alex Plate
f2070bad08 Update changelog 2021-06-29 11:06:24 +00:00
Alex Plate
52a3b680a6 Remove incorrect changelog line 2021-06-29 14:04:35 +03:00
Alex Plate
735bfbae3b Update changelog 2021-06-29 11:03:57 +00:00
Alex Plate
9140234b2c [Automation] Include last_processed_hash to the commit 2021-06-29 14:02:16 +03:00
Alex Plate
cbf35c276e Revert "Update changelog"
This reverts commit ab1b8572f3.
2021-06-29 14:00:54 +03:00
Alex Plate
ab1b8572f3 Update changelog 2021-06-29 10:58:29 +00:00
Alex Plate
960de8647c Fix(VIM-123): This is not a fix, just testing the automation 2021-06-29 13:56:28 +03:00
Alex Plate
acf80417d1 Automatically update changelog 2021-06-29 13:53:30 +03:00
Alex Plate
43a3db178f Refactor UpdateAuthors script 2021-06-29 12:57:35 +03:00
Matt Ellis
f05123123c Use guicursor instead of editor cursor settings
This changes VIM-1475 and ignores IntelliJ's "use block cursor" setting in favour of guicursor. Also affects caret placement around inlays and handling of template hotspots via idearefactormode
2021-06-29 00:21:19 +01:00
Matt Ellis
2f73dac57a Force the caret visible when updating attributes
Changing EditorSettings.setBlockCursor does this via EditorImpl.updateCaretCursor
2021-06-28 23:48:27 +01:00
Matt Ellis
a6087dd08f Use replace mode caret for change character action 2021-06-28 23:42:36 +01:00
Matt Ellis
b4d40fae3b Rename assert method 2021-06-28 23:24:59 +01:00
Matt Ellis
ad19dc0100 Use guicursor options to draw caret 2021-06-28 23:09:21 +01:00
Matt Ellis
d19c776ec3 Minor refactor 2021-06-28 23:08:29 +01:00
Matt Ellis
ccd792bf62 Provide hook for resetting cached values 2021-06-28 23:08:22 +01:00
Matt Ellis
8a55199d62 Add guicursor to dictionary 2021-06-28 23:08:14 +01:00
Matt Ellis
9cf0a1ac26 Report errors while parsing guicursor option 2021-06-28 23:06:49 +01:00
Matt Ellis
43620c280d Add guicursor option 2021-06-28 23:04:58 +01:00
Alex Plate
98ffb3bf9e [VIM-1672] IdeaVim correctly populates clipboard history 2021-06-28 11:48:09 +03:00
Alex Plate
4cc4fb4d3c [VIM-1192] Fix dollar motion from single-command 2021-06-28 09:21:32 +03:00
Alex Plate
1f9718a3c1 Add more tests for till character motions 2021-06-28 08:29:21 +03:00
Alex Plate
16d9a3ba8b Join till character motions into the single file 2021-06-28 08:19:27 +03:00
Alex Plate
a01fc5d72c Remove useless condition 2021-06-28 07:24:30 +03:00
Alex Plate
f4e777b8df [VIM-2336] Fix repeat for 'T' movement 2021-06-28 07:24:15 +03:00
Alex Plate
e8b55881bd Update changelog 2021-06-24 10:48:45 +03:00
Alex Plate
232dd34717 [VIM-2317] Fix memory leak 2021-06-24 10:38:15 +03:00
Alex Plate
e244109073 Use stable IJ release for development because EAP is broken 2021-06-24 10:37:27 +03:00
Alex Plate
e6324a2182 Downgrade github dependency 2021-06-24 10:20:41 +03:00
Alex Plate
46bc66d08c Add some values to dic 2021-06-24 10:14:19 +03:00
Alex Plate
73fe85018e Update configuration script 2021-06-24 10:14:18 +03:00
Matt Ellis
982d6921cb Fix formatting 2021-06-24 10:13:36 +03:00
Matt Ellis
bb28b76a5b Support % as shortcut for file name in filter 2021-06-24 10:13:36 +03:00
Matt Ellis
67fed0da9e [VIM-1566] Use OS shell to execute filter command 2021-06-24 10:13:36 +03:00
Matt Ellis
e3cf50b4c9 [VIM-1357] Invoke shell filter commands with proper path and argument handling
Also moves the filter command out of a write action, and under a cancellable modal progress dialog. Any errors are substituted into the text, as per Vim.

Fixes #VIM-1357
2021-06-24 10:13:36 +03:00
Alex Plate
f72bb31b8e Add some loggins to update authors script 2021-06-22 11:11:16 +03:00
Alex Plate
001f13398c Update jgit version 2021-06-22 11:03:34 +03:00
dependabot[bot]
dcfe93e4a1 Bump github-api from 1.129 to 1.131
Bumps [github-api](https://github.com/hub4j/github-api) from 1.129 to 1.131.
- [Release notes](https://github.com/hub4j/github-api/releases)
- [Changelog](https://github.com/hub4j/github-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hub4j/github-api/compare/github-api-1.129...github-api-1.131)

---
updated-dependencies:
- dependency-name: org.kohsuke:github-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-22 10:56:32 +03:00
Alex Plate
d3e7b5838f [TC] Fix slack notification issues 2021-06-22 10:50:32 +03:00
Alex Plate
8788d109e3 [TC] Extract version constants 2021-06-22 09:54:56 +03:00
Alex Plate
8b1839ff1b Prepare to 0.68 release 2021-06-22 09:17:17 +03:00
Matt Ellis
9f46e1960e Fix typo 2021-06-10 13:51:43 +01:00
Matt Ellis
e93a619859 Make ListOption generic + create StringListOption 2021-06-10 13:51:23 +01:00
Matt Ellis
287ba7055e Simplify BoundedListOption 2021-06-10 11:29:20 +01:00
Matt Ellis
dfbec1f23a Rename "bound" options to "bounded" 2021-06-10 11:18:57 +01:00
Matt Ellis
55dedb4c4d Remove resetShape method
We should avoid setting the shape explicitly, and let it update when the mode changes.

Note that shape can affect the visual position of the caret around inlays (e.g. 'a' at the end of a rename hotspot with a trailing inlay for options will remain in between the text and the inlay, while 'l' in command mode will move after the inlay. Both positions are at the same text offset). We should still avoid explicitly setting shape before moving the caret. We can't guarantee the order of changing mode and moving the caret, so we update the visual position at the current offset when changing mode. (We're also currently using mode as an assumption of shape)
2021-06-10 11:05:41 +01:00
Matt Ellis
9c71b444c6 Update caret visual attributes when mode changes
Removes updateCaretState and unnecessary usages
2021-06-05 01:04:01 +01:00
Matt Ellis
e859b1c131 Remove resetCaret 2021-06-05 00:33:04 +01:00
Matt Ellis
6c4bd9cc10 Refactor caret shape functions 2021-06-05 00:21:58 +01:00
Matt Ellis
b50281f8d5 Extract caret shape methods to helper 2021-06-05 00:14:10 +01:00
Matt Ellis
2be0f5cedb Reset caret visual position after mode changes
Fixes an issue where the caret was incorrectly positioned because it was moved before the mode was changed. This wasn't visible in 211 because a couple of bugs in the platform combined to put the caret in the right place.

See #280, IDEA-262153 and KTIJ-3768
2021-06-04 17:05:03 +01:00
Matt Ellis
646a89d52a Refactor showMode update 2021-06-04 16:45:07 +01:00
Alex Plate
fea71903de Fix global test 2021-06-04 09:39:10 +03:00
Alex Plate
0220d2b40f Suppress inspection 2021-06-04 09:39:09 +03:00
dependabot[bot]
c751c51b25 Bump markdown from 0.2.3 to 0.2.4
Bumps [markdown](https://github.com/JetBrains/markdown) from 0.2.3 to 0.2.4.
- [Release notes](https://github.com/JetBrains/markdown/releases)
- [Commits](https://github.com/JetBrains/markdown/commits)

---
updated-dependencies:
- dependency-name: org.jetbrains:markdown
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 09:37:10 +03:00
Alex Plate
8fedf78e03 refactoring: update formatting 2021-06-03 11:57:27 +03:00
Alex Plate
bd3c86e068 Update plugin.xml 2021-06-03 11:47:00 +03:00
Alex Plate
46d459bd73 Update changelog 2021-06-03 11:04:49 +03:00
Alex Plate
d1feaad5a9 Update dependabot lock 2021-06-03 11:02:27 +03:00
Alex Plate
b5b6c8f37a fix(sethandler): Correct presentation on settings page 2021-06-03 10:44:23 +03:00
Alex Plate
067aaa798d setHandler: fix parsing of a mapping 2021-06-03 10:12:38 +03:00
Alex Plate
c85d7dcd7a Do not save the executed command to history 2021-06-02 10:54:11 +03:00
Alex Plate
c1b1f1efd8 Add tests for nested global commands 2021-06-02 10:31:49 +03:00
Alex Plate
68dcd21c4e More muted neovim tests 2021-06-01 17:52:22 +03:00
Alex Plate
748484e129 Use more neovim in tests 2021-06-01 17:44:32 +03:00
Alex Plate
293e9988c7 Add 2021.1 to plugin verifier 2021-06-01 16:31:41 +03:00
Alex Plate
c390a295cd Update gradle plugin to version 1.0 2021-06-01 16:31:41 +03:00
Alex Plate
bdf1f3c33d Update gradle wrapper to 7.0.2 version 2021-06-01 16:31:40 +03:00
Alex Plate
a0b8685f7d Update some tests to use neovim 2021-06-01 16:31:40 +03:00
Alex Plate
06fc25cf3b Remove TODO 2021-06-01 16:31:40 +03:00
Alex Plate
18e76c5f12 Do not update PR after dependabot 2021-06-01 16:31:40 +03:00
Alex Plate
53e1bc5b83 Update changelog after merging PR 2021-05-31 06:34:38 +00:00
dependabot[bot]
f3b77663f8 Bump annotations from 20.1.0 to 21.0.1
Bumps [annotations](https://github.com/JetBrains/java-annotations) from 20.1.0 to 21.0.1.
- [Release notes](https://github.com/JetBrains/java-annotations/releases)
- [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JetBrains/java-annotations/compare/20.1.0...21.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-31 09:33:13 +03:00
dependabot[bot]
fb25ea7cf9 Bump github-api from 1.128 to 1.129
Bumps [github-api](https://github.com/hub4j/github-api) from 1.128 to 1.129.
- [Release notes](https://github.com/hub4j/github-api/releases)
- [Changelog](https://github.com/hub4j/github-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hub4j/github-api/compare/github-api-1.128...github-api-1.129)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-31 09:33:01 +03:00
Alex Plate
33dec9746a Fmt 2021-05-30 23:58:12 +03:00
Alex Plate
079006e3ce Add suppression of some neovim tests 2021-05-30 23:49:18 +03:00
Alex Plate
b32befe5df Use wrapper functions around myFixture 2021-05-30 15:18:03 +03:00
Alex Plate
91139005dc Suppress some deprecated methods 2021-05-29 11:21:05 +03:00
Alex Plate
9c53f8608a Add SSR inspection to replace myFixture check result 2021-05-28 19:40:22 +03:00
Alex Plate
7144491d0c refactor: Replace myFixture.checkResult with assertState function
assertState function also performs neovim check
2021-05-28 19:39:32 +03:00
Alex Plate
a9831ccf40 style: run ktlint 2021-05-28 19:22:08 +03:00
Alex Plate
fa3e18fe58 test: Update global handler tests 2021-05-28 11:54:44 +03:00
Alex Plate
08f29bacfd feat: Support :print command 2021-05-28 11:51:54 +03:00
Alex Plate
5a6803551b Fix typo 2021-05-28 10:29:34 +03:00
Alex Plate
a5f612c85a Use correct library for neovim testing 2021-05-28 10:09:31 +03:00
Alex Plate
dab69249d0 Fix some neovim tests 2021-05-27 22:44:17 +03:00
Alex Plate
e1f0098164 Add custom inspection to use vimRunForEachCaret 2021-05-27 22:33:05 +03:00
Alex Plate
14428aaf49 Formatting 2021-05-27 22:01:49 +03:00
Alex Plate
f9ebfcc467 Use RangeMarker for marking lines 2021-05-27 12:50:48 +03:00
Alex Plate
07446309d3 Finish command even after an exception 2021-05-27 12:50:48 +03:00
Alex Plate
d2de23481a Add clarification what is weird 2021-05-27 12:50:47 +03:00
Alex Plate
d8ead10c0f Add gotInt variable 2021-05-27 12:50:47 +03:00
Alex Plate
6a38188602 Add tests for incorrect :g command 2021-05-27 12:50:47 +03:00
Alex Plate
13884e9524 Add error message about failed search command 2021-05-27 12:50:47 +03:00
Alex Plate
1ff629e257 Add tests for global command 2021-05-27 12:50:47 +03:00
Alex Plate
67649a1746 Extract search_regcomp function 2021-05-27 12:50:47 +03:00
Alex Plate
3a2f370c8c Show message on missing pattern in global command 2021-05-27 12:50:46 +03:00
Alex Plate
6380608fa2 Change approach of neovim testing 2021-05-27 12:50:46 +03:00
Alex Plate
4df53701a1 Print an amount of tests without nvim 2021-05-27 12:50:46 +03:00
Alex Plate
3050b19366 Move more tests to neovim 2021-05-27 12:50:46 +03:00
Alex Plate
4c0a9b3797 Move more tests to neovim 2021-05-27 12:50:46 +03:00
Alex Plate
7850508cfe Add global busy 2021-05-27 12:50:46 +03:00
aleksei.plate
dfbb36eb53 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'Qodana checks' build configuration were updated 2021-05-26 15:25:49 +00:00
Alex Plate
e55fbe9159 Fix formatting 2021-05-26 13:47:32 +03:00
Alex Plate
8a3af47b35 Support vglobal and global! 2021-05-26 11:58:03 +03:00
Alex Plate
11dc8cf982 Execute global command 2021-05-26 10:58:27 +03:00
Alex Plate
b91a3c16fc Move more tests to neovim 2021-05-26 09:35:58 +03:00
Alex Plate
abfe2bbe37 Convert test to kt 2021-05-25 22:49:34 +03:00
Alex Plate
f8bc330909 Rename .java to .kt 2021-05-25 22:49:34 +03:00
Alex Plate
999cf39aec Update a few tests to use neovim integration 2021-05-25 22:47:12 +03:00
Alex Plate
661a6563b0 Start implementing global handler to support :g command 2021-05-25 22:38:30 +03:00
Alex Plate
e33cf5b4ed Update changelog 2021-05-24 11:08:26 +03:00
Alex Plate
d401b6483c Set branch in mergePr.yml workflow 2021-05-24 11:06:59 +03:00
Alex Pláte
5a855659b0 Merge pull request #308 from citizenmatt/VIM-2308
Fix unnecessary caret movement when switching tabs
2021-05-24 11:03:08 +03:00
Alex Plate
e21e1b0b3d Update docs 2021-05-24 10:55:42 +03:00
Alex Plate
232cb3ee7d Update changelog 2021-05-24 10:45:47 +03:00
Alex Plate
8bdefd85d4 Add Shrikant Sharat Kandula to contributors list 2021-05-24 10:42:15 +03:00
Alex Plate
1719775ffc Fix invalid workflow 2021-05-24 10:41:48 +03:00
Alex Pláte
86296e4066 Merge pull request #261 from sharat87/extension/textobjindent
New extension: Indentation based text objects
2021-05-24 10:35:21 +03:00
Alex Pláte
8c8c2ae271 Update README.md 2021-05-21 16:18:59 +03:00
Alex Plate
25f1674619 Add workflow to update changes after merged PR 2021-05-21 11:53:43 +03:00
Alex Plate
29b3d6de3f Revert correct position of authors 2021-05-21 10:48:52 +03:00
Alex Plate
d6c76c9298 Add Alex Pláte to contributors list 2021-05-21 07:46:16 +00:00
Alex Plate
b0168f46d7 Remove me from AUTHORS.md 2021-05-21 10:43:00 +03:00
Alex Plate
117990cd46 Set authors to commit message 2021-05-21 10:36:29 +03:00
Alex Plate
6d238b382f Fix dependabot ignoring 2021-05-21 10:19:36 +03:00
dependabot[bot]
75fb384109 Bump markdown from 0.1.45 to 0.2.3
Bumps [markdown](https://github.com/JetBrains/markdown) from 0.1.45 to 0.2.3.
- [Release notes](https://github.com/JetBrains/markdown/releases)
- [Commits](https://github.com/JetBrains/markdown/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-21 10:17:38 +03:00
Alex Plate
e2a7a3686b Get rid of detekt 2021-05-21 10:17:02 +03:00
Alex Plate
e29b42c4b1 Exclude dependabot from authors updater 2021-05-21 10:07:30 +03:00
Alex Plate
717806e821 Update shortcuts of ideavim reload 2021-05-21 10:07:30 +03:00
dependabot[bot]
0a4f20b60c Bump io.gitlab.arturbosch.detekt from 1.15.0 to 1.17.0
Bumps io.gitlab.arturbosch.detekt from 1.15.0 to 1.17.0.

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-21 10:07:22 +03:00
dependabot[bot]
90de8f3900 Bump remote-robot from 0.11.2 to 0.11.4
Bumps remote-robot from 0.11.2 to 0.11.4.

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-20 11:45:49 +03:00
Alex Plate
09d4c727b1 Update doc 2021-05-20 10:37:12 +03:00
Alex Plate
5a88c982cb Update plugin.xml 2021-05-20 10:34:03 +03:00
Alex Plate
13a0e1d725 Prepare to 0.67 release 2021-05-20 10:28:56 +03:00
Alex Plate
7c06243d54 Prepare to 0.67 release 2021-05-20 10:28:51 +03:00
Alex Plate
ecd3b90300 Refactor updateAuthors script 2021-05-19 12:33:02 +03:00
Alex Plate
dc5a38ccba Remove TC job for updating authors 2021-05-17 23:16:14 +03:00
Alex Plate
406675f750 Revert "Update authors" 2021-05-17 23:14:25 +03:00
Alex Plate
a5e0572600 Update contributors list 2021-05-17 20:11:34 +00:00
Alex Plate
3e5106525d Checkout with depth 2021-05-17 23:09:48 +03:00
Alex Plate
60b1e14e54 Use project dir variable 2021-05-17 23:06:05 +03:00
Alex Plate
31e667a421 Log email updates 2021-05-17 22:59:51 +03:00
Alex Plate
02428776a7 Commit only authors file 2021-05-17 22:47:50 +03:00
Alex Plate
7c1ab73f11 Revert "Update contributors list"
This reverts commit 8b5758fc37.
2021-05-17 22:43:50 +03:00
Alex Plate
8b5758fc37 Update contributors list 2021-05-17 19:38:12 +00:00
Alex Plate
cb9eb8f67e Add update-authors right in build script 2021-05-17 22:36:24 +03:00
Alex Plate
b496f13c3c Add token to GitHub action 2021-05-17 19:17:38 +03:00
Alex Plate
f21a0622b0 Use new version of update-authors 2021-05-17 19:11:10 +03:00
Alex Plate
5ddf8f2c34 Update authors-update version 2021-05-17 18:52:48 +03:00
Alex Pláte
31655aace4 Create updateAuthors.yml 2021-05-17 18:40:31 +03:00
Alex Plate
32dca0799c Add alex.plate@TeamCity 2021-05-17 18:25:33 +03:00
Alex Plate
79cb90e642 Reformat update checker 2021-05-17 18:17:46 +03:00
Alex Plate
56bde906d9 Add another incorrect email 2021-05-17 18:14:52 +03:00
Alex Plate
315af4cd5b Do not check TC email 2021-05-17 18:09:10 +03:00
Alex Plate
4abc72f05a Update update-authors library version 2021-05-17 18:02:08 +03:00
Alex Plate
393aba90e9 Update authors 2021-05-17 17:52:41 +03:00
Alex Plate
90624c03d2 Apply TC patch 2021-05-17 17:50:50 +03:00
aleksei.plate
f75599805f TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: parameters of 'Update AUTHORS.md' build configuration were updated 2021-05-17 14:46:49 +00:00
Alex Plate
cc343fae9e Add update authors task 2021-05-17 17:41:59 +03:00
Alex Plate
c22b299bed Revert "Add 大牙(Henry Zhu) to contributors list"
This reverts commit 28c806bfee.
2021-05-17 13:38:28 +03:00
alex.plate
28c806bfee Add 大牙(Henry Zhu) to contributors list 2021-05-17 13:37:42 +03:00
Matt Ellis
0bde71d4dd Merge branch 'master' into VIM-2308 2021-05-14 11:51:25 +01:00
Alex Plate
aa51dcddc6 Rename updateChecker 2021-05-14 12:16:53 +03:00
Alex Plate
8ca865e5aa Remove redundant SAM constructors 2021-05-14 10:52:32 +03:00
Alex Plate
a9f1d2ac14 Update changelog 2021-05-14 09:49:40 +03:00
Alex Plate
018e5cba83 Enable copy action only if there are things to copy 2021-05-14 09:41:55 +03:00
Alex Plate
bbcfee3ad6 Revert version of gradle plugin to 0.7.3 2021-05-14 09:38:34 +03:00
Alex Plate
df52f37b69 Add reset handlers action for configurable table 2021-05-14 09:27:54 +03:00
Alex Plate
308ab4b4f5 Update amount of contributors 2021-05-13 23:18:07 +03:00
Alex Plate
f07b6e28c1 Update changelog a bit 2021-05-13 21:00:46 +03:00
Alex Plate
790fc92916 Rename Vim Emulation to Vim in settings 2021-05-13 20:58:23 +03:00
Alex Plate
bb5632c98d Update ktlint and detekt formatting 2021-05-13 19:36:33 +03:00
Alex Plate
879a73494b Run formatters 2021-05-13 19:34:13 +03:00
Alex Plate
93d80b8dfb Move to kotlin 1.5 2021-05-13 19:33:56 +03:00
Alex Plate
edf6a04a36 Run ktlint 2021-05-13 13:55:31 +03:00
Alex Plate
b1662cdc1a [TC] Remove unused imports 2021-05-13 12:05:26 +03:00
Alex Plate
cec56e78bf [TC] Remove 201 release job 2021-05-13 12:02:40 +03:00
Alex Plate
b0bfd0f56e Updates for qodana 2021-05-13 11:59:52 +03:00
Alex Plate
4312aceae7 Do not save per-mode info 2021-05-13 11:05:24 +03:00
Alex Plate
a646a59d8d Move toolbar to the right 2021-05-13 10:51:48 +03:00
Alex Plate
c9eafe1db3 [TC] Username is not required for token publishing 2021-05-13 10:47:01 +03:00
Alex Plate
270ba9d196 Username is not required for token publishing 2021-05-13 10:43:51 +03:00
Matt Ellis
7300d252f8 Rename go to tab actions 2021-05-13 01:18:31 +01:00
Matt Ellis
9b73cc16e6 Move tab actions out of motion package 2021-05-13 01:12:24 +01:00
Matt Ellis
b7da57d6d1 [VIM-2308] Fix caret and scroll position after gt 2021-05-13 00:05:06 +01:00
Alex Plate
dee78cd503 Move to gradle plugin 1.0 2021-05-12 21:12:15 +03:00
Alex Plate
383e1d5245 Keep compatibility with easymotion plugin 2021-05-12 11:51:33 +03:00
Alex Plate
2ec9329f2e Update plugin.xml 2021-05-12 11:31:25 +03:00
Alex Plate
15fc2c01bd Update changes 2021-05-12 11:21:43 +03:00
Alex Plate
4fdd9b4710 Fix issue with global sethandler 2021-05-12 10:56:49 +03:00
Alex Plate
7765c464f3 Add sethandler to dic 2021-05-12 09:51:29 +03:00
Alex Plate
43eba0aa1d Update help link 2021-05-12 09:49:48 +03:00
Alex Plate
e097cd2daa Create sethandler documentation 2021-05-12 09:45:20 +03:00
Alex Plate
ad6b5719d2 Update copy action description 2021-05-12 09:45:20 +03:00
Alex Plate
5d344e3193 Rename setkeydev to sethandler 2021-05-12 09:45:19 +03:00
Alex Plate
0cd86282d2 Use setHtmlText for label 2021-05-12 09:45:19 +03:00
dependabot[bot]
6b8d00decf Bump remote-robot from 0.10.3 to 0.11.2
Bumps remote-robot from 0.10.3 to 0.11.2.

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-11 12:12:25 +03:00
Alex Plate
85aae4d408 Fix issues with Track action IDs notification 2021-05-11 10:54:20 +03:00
Shrikant Sharat Kandula
92b0a3abb2 Merge branch 'master' into extension/textobjindent
# Conflicts:
#	resources/META-INF/includes/VimExtensions.xml
2021-05-09 18:56:34 +05:30
Shrikant Sharat Kandula
444a48f2a1 More tests and fixes 2021-05-09 18:53:50 +05:30
Shrikant Sharat Kandula
039b44b07a Added more tests and fixes for the tests 2021-05-09 18:35:53 +05:30
Shrikant Sharat Kandula
d7ed33c351 Add test for basic tiny buffer, and fix it 2021-05-08 21:35:47 +05:30
Shrikant Sharat Kandula
0edff4665c Fix name mismatch causing tests to not run 2021-05-08 21:35:28 +05:30
Alex Plate
66b2fee823 Add .ideavimrc to dic 2021-05-04 15:42:12 +03:00
Alex Plate
2139e31754 Add help lines for the table 2021-05-04 14:51:19 +03:00
Alex Plate
3752d35229 Trigger readonly handler when perform editing operations 2021-04-30 16:08:04 +03:00
Alex Plate
9a90e80da1 Add more words to dictionary 2021-04-30 14:17:28 +03:00
Alex Plate
5d3ec771c4 Adding ideavim.dic file where IdeaVim-specific words can be defined 2021-04-30 13:48:21 +03:00
Alex Plate
6785d17ab3 Remove warning 2021-04-29 23:02:39 +03:00
Alex Plate
99a0415235 Do not expire the notification after help link pressing 2021-04-29 22:56:08 +03:00
Alex Plate
0fe3f50d93 Make helper text gray 2021-04-29 11:01:35 +03:00
Alex Plate
06647a4cf6 [VIM-2295] Fix s-space in insert mode with an existing mapping 2021-04-29 10:12:16 +03:00
Alex Plate
66b1e4a327 Update baseline 2021-04-28 12:06:20 +03:00
Alex Plate
a5e1a8116f Add copy action for conflicts table 2021-04-28 11:53:37 +03:00
Alex Plate
0bf77e1737 Update changes 2021-04-28 10:21:49 +03:00
Alex Plate
038f0a5135 Sort key owners modes 2021-04-28 10:17:42 +03:00
Alex Plate
e7d4dde9d9 Helper text with an example 2021-04-28 10:17:23 +03:00
michal
96dbbcff3e VIM-1476 Store last inserted text in ". register 2021-04-28 10:15:14 +03:00
Alex Plate
1479742fe8 Add helper message for the shortcut conflicts table 2021-04-27 11:58:11 +03:00
Alex Plate
45bebd898d Update gradle-intellij-plugin 2021-04-27 10:38:34 +03:00
Alex Plate
2f99cf81fc Use default renderer for per-mode shortcut owners 2021-04-26 12:05:56 +03:00
Alex Plate
0aa5450dc6 Expire the notification after pressing the action 2021-04-26 11:01:57 +03:00
Alex Plate
5cdca0b7c1 Change wording for undefined shortcut notification 2021-04-25 19:57:02 +03:00
Alex Plate
58ed857724 Use correct check mark for EAP 2021-04-25 19:34:25 +03:00
Alex Plate
66536a59a9 Add an .ideavimrc file template 2021-04-25 15:52:45 +03:00
Alex Plate
35ab292c9f Show "create ~/.ideavimrc" if this file is missing 2021-04-25 15:22:22 +03:00
Alex Plate
341f1e915f Change Contribute on GitHub to Star on GitHub 2021-04-25 15:01:07 +03:00
Alex Plate
28da9da752 Update README and CHANGES 2021-04-25 14:59:11 +03:00
Alex Plate
6ce9330d3b Rename EAP to Early Access Program 2021-04-25 14:55:07 +03:00
Alex Plate
c251ee2d22 Update shortcuts conflict notification 2021-04-25 00:52:43 +03:00
Alex Plate
cee5137603 Replace three dots with an ellipsis 2021-04-25 00:52:25 +03:00
Alex Plate
fd5c6d0024 Show full settings dialog instead of only part of it 2021-04-25 00:25:01 +03:00
Alex Plate
3d5a962332 Disable editing for PerMode keyowner 2021-04-25 00:14:46 +03:00
Alex Plate
f096b290a7 Parsing of setkey command 2021-04-24 23:44:10 +03:00
Alex Plate
5a9281ece4 [TC] Add 2021.1 version of IJ to tests 2021-04-24 16:42:50 +03:00
Alex Plate
b1367ec0a9 Split ShortcutOwnerInfo into two subclasses 2021-04-24 16:02:02 +03:00
Alex Plate
e73d919ed7 Continuation of experiments with mode-specific key handlers 2021-04-24 13:34:39 +03:00
Alex Plate
9bcb5e73ba Fix vim exchange with backward selection 2021-04-24 13:05:47 +03:00
Alex Plate
87f7510007 Add testWithoutNeovim annotations 2021-04-24 12:05:29 +03:00
Alex Plate
814e3d8ee7 Refactoring shortcut owner to add an information about applied mode 2021-04-24 12:05:10 +03:00
Alex Plate
d2cc6cca36 Convert ShortcutOwner to kt 2021-04-23 21:37:08 +03:00
Alex Plate
ea5a95d536 Rename .java to .kt 2021-04-23 21:37:08 +03:00
Alex Plate
a845eb3942 Rename ShortcutOwner variable name 2021-04-23 21:33:44 +03:00
Alex Plate
f87fb34943 Fix actions popup place issue 2021-04-23 20:34:41 +03:00
Matt Ellis
4dc9c1f433 Fix scrolling at end of file with folds
Caret must be within scrolloff lines of the bottom of the file

Fixes VIM-2291
2021-04-23 20:03:13 +03:00
Alex Plate
d885a63c7d Update plugin.xml 2021-04-23 09:47:59 +03:00
Alex Plate
62833f2fa9 Update formatting 2021-04-22 12:43:53 +03:00
Alex Plate
e6ff69d6fc Downgrade gradle wrapper to 6.8.2 2021-04-22 12:43:47 +03:00
Alex Plate
176f840cb6 Update gradle wrapper to 7.0 version 2021-04-22 12:34:40 +03:00
Alex Plate
76f06170ad [VIM-2290] Support vim-paragraph-motion plugin 2021-04-22 12:08:17 +03:00
Alex Plate
b6561cd940 Remove bintray dependency 2021-04-22 11:06:06 +03:00
Alex Plate
878d7070a4 Add some popular IJ actions to readme 2021-04-22 10:04:53 +03:00
Alex Plate
5f71198c88 [VIM-2289] Fix <End> command behavior 2021-04-22 09:54:22 +03:00
Alex Plate
8d941913aa Qodana cleanup 2021-04-21 10:46:38 +03:00
Alex Plate
599571e6ea Update formatting 2021-04-21 10:23:14 +03:00
Alex Plate
90709ef4d0 [CWM-2643] Create function for get list of editors of the current host 2021-04-21 10:04:04 +03:00
Alex Plate
378aa1026d [VIM-2284] Set command doesn't duplicate options 2021-04-20 11:13:14 +03:00
Alex Plate
4fb1761fa5 Execute action listeners when call for IDE action 2021-04-20 10:44:56 +03:00
Alex Plate
254193eb8c [TC] Revert updated qodana config 2021-04-20 09:39:15 +03:00
Alex Plate
d92e260ffd [TC] Update qodana config 2021-04-19 13:33:14 +03:00
Alex Plate
8f5a5e4d57 Disable neovim test for some tests 2021-04-19 11:58:24 +03:00
Alex Plate
d0d9535d2f Big refactoring of MotionHandler 2021-04-19 11:32:16 +03:00
Alex Plate
df1409af76 Add MichalPlacek to contributors list 2021-04-19 10:43:38 +03:00
michal
cfe34733e9 VIM-2276 ls returns "absolute path" for files on Microsoft Windows. 2021-04-19 10:40:04 +03:00
Alex Plate
e916cbe762 Update changes 2021-04-19 10:27:09 +03:00
Alex Pláte
a8a4142cef Merge pull request #280 from citizenmatt/ideavim-sidescroll
Caret position and view scrolling fixes
2021-04-16 11:21:42 +03:00
Alex Plate
3b3fffe838 [TC] update version 2021-04-09 11:19:13 +03:00
Alex Plate
d32b8a1e71 Prepare for the new release 2021-04-09 11:19:13 +03:00
Alex Plate
05e547edb5 Fix toRegex function for keyword option 2021-04-09 11:19:13 +03:00
Alex Pláte
1b25430fe7 Update README.md 2021-04-06 10:12:01 +03:00
Alex Plate
278dc6880c Add an option to trace actions execution time 2021-04-02 10:26:39 +03:00
Alex Plate
0bd1761077 Fixing Matt name (he is from England, not China) 2021-04-02 09:41:11 +03:00
Alex Plate
b1ae964ca3 Fix SearchGroup parsing in case of broken data 2021-04-01 11:20:19 +03:00
Alex Plate
56cbb9e9af Update changes 2021-04-01 09:33:14 +03:00
Alex Plate
70558574a8 Update changelog 2021-04-01 09:25:02 +03:00
Alex Plate
dab8375f5e Do not test some tests with neovim 2021-03-31 11:16:15 +03:00
Alex Plate
ccd9d05ac7 [TC] Extract linting and formatting into the separate job 2021-03-31 10:51:27 +03:00
Alex Plate
69a045c144 Fix formatting 2021-03-31 10:47:06 +03:00
Alex Plate
8f7b609c7c Remove wildcard import 2021-03-31 10:40:22 +03:00
Alex Plate
0019dd6c7a Do not try to compare text for vim reloading in non .ideavimrc file 2021-03-31 10:32:13 +03:00
Alex Plate
305a99afc8 Rename doTestWithoutNeovim function 2021-03-31 10:32:12 +03:00
Alex Pláte
eec23d9640 Merge pull request #276 from citizenmatt/refactor-searchgroup
More refactoring of SearchGroup
2021-03-31 10:30:31 +03:00
Matt Ellis
76f28ef94a Update formatting 2021-03-23 14:25:59 +00:00
Matt Ellis
3b89d96553 Handle scrolling page with virtual space 2021-03-23 01:01:15 +00:00
Matt Ellis
0fba78f885 [VIM-2177] Do not scroll end of file to bottom of screen 2021-03-22 14:20:28 +00:00
Matt Ellis
ee38944cf9 Fix caret position at end of file with scrolloff 2021-03-22 10:10:36 +00:00
Shrikant Sharat Kandula
c24cbcfbc0 Refactor implementation and test 2021-03-21 11:13:48 +05:30
Shrikant Sharat Kandula
28c01f0a43 Handle outer selection for lower boundary 2021-03-21 10:52:55 +05:30
Shrikant Sharat Kandula
182f671e35 Handle inner selection for upper boundary 2021-03-21 10:46:02 +05:30
Shrikant Sharat Kandula
788495aac8 Merge branch 'master' into extension/textobjindent
# Conflicts:
#	resources/META-INF/includes/VimExtensions.xml
2021-03-21 10:02:52 +05:30
Shrikant Sharat Kandula
7cbeb821f5 Upper boundary functional 2021-03-21 09:59:34 +05:30
Matt Ellis
36901194dc Scroll last line to bottom of screen with G 2021-03-18 21:26:42 +00:00
Matt Ellis
58071007bd Ignore sidescrolloff with caret at start of line 2021-03-18 21:20:48 +00:00
Matt Ellis
07bafdf416 Minor clean up 2021-03-17 12:17:51 +00:00
Matt Ellis
f7bb5ec500 Scroll view with Enter in insert mode 2021-03-17 12:17:51 +00:00
Matt Ellis
b92114fec6 Scroll view when inserting new line above 2021-03-17 12:17:51 +00:00
Matt Ellis
fe9bb2a712 Scroll view when inserting new line below 2021-03-17 12:17:51 +00:00
Matt Ellis
81996f8051 Do not beep when removing highlights with Escape 2021-03-17 12:17:51 +00:00
Matt Ellis
a0a976c345 Scroll view for <Del> and <BS> in insert mode 2021-03-17 12:17:51 +00:00
Matt Ellis
9315f36f16 Scroll view for <Tab> in insert mode
Note that this doesn't actually work, as we ignore <Tab> in insert mode, so that other actions, specifically the live template action, can handle it. Without this, Emmet doesn't work (VIM-674). The scrolling does work with <C-I>
2021-03-17 12:17:51 +00:00
Matt Ellis
cdc03836d2 Scroll view when moving up/down in insert mode 2021-03-17 12:17:50 +00:00
Matt Ellis
a14e95ad6c Scroll view when deleting text 2021-03-17 12:17:50 +00:00
Matt Ellis
dd230f720f [VIM-2230] Caret and inlay with preceding text 2021-03-17 12:17:50 +00:00
Matt Ellis
fa781de76f Simplify inserting register text 2021-03-17 12:17:50 +00:00
Matt Ellis
377e085aa0 Merge branch 'master' into refactor-searchgroup 2021-03-10 11:45:55 +00:00
Matt Ellis
3642b32ed6 Fix range handling 2021-03-10 10:30:33 +00:00
Alex Plate
8a6ecf005b Test using neovim with assertOffset 2021-03-10 11:47:45 +03:00
Alex Plate
6866fdbdf5 Update search group tests 2021-03-05 11:25:38 +03:00
Alex Plate
78bc4060b3 Update after rebase 2021-03-05 10:38:39 +03:00
Matt Ellis
16b901ea9e Update formatting 2021-03-05 10:38:39 +03:00
Matt Ellis
26a3974477 Stop multiple-cursors affecting search state
Searching no longer uses the high level search APIs that affect state such as saved searches, history and highlighting. Also conforms better to vim-multiple-cursors behaviour:
* Searches are now case sensitive
* Regular expressions in search text are ignored
* "Select all" works with nowrapscan
* Next occurrence based on existing selection no longer uses word boundary flag
* "No more matches" message shown at more appropriate times
2021-03-05 10:38:39 +03:00
Matt Ellis
9a10d6fe6c Remove usage of deprecated API 2021-03-05 10:38:38 +03:00
Matt Ellis
eb72def6d0 Remove unnecessary caret move 2021-03-05 10:38:38 +03:00
Matt Ellis
3fe2a2e3b0 Fix updating last search/sub patterns 2021-03-05 10:38:38 +03:00
Matt Ellis
d22d0f67b5 Remove duplication in invalid command message 2021-03-05 10:38:38 +03:00
Matt Ellis
e56e944309 Simplify writing state 2021-03-05 10:38:38 +03:00
Matt Ellis
2d853d8d28 Rename searchAndReplace processSubstituteCommand 2021-03-05 10:38:38 +03:00
Matt Ellis
e5d086dace Introduce test method to set state 2021-03-05 10:38:38 +03:00
Matt Ellis
eccdd725b7 Introduce processSearchRange 2021-03-05 10:38:37 +03:00
Matt Ellis
284e0b4bf5 Rename search to processSearchCommand
The method is doing more than just searching, such as parsing the search command and state management
2021-03-05 10:38:37 +03:00
Matt Ellis
47becb2721 Remove unused count for main search method
This method is the main implementation for '/' and '?' and does not support a count. It is currently being used incorrectly in places that should be using a simpler find helper.
2021-03-05 10:38:37 +03:00
Matt Ellis
0b64e26235 Replace search command flags with Direction enum 2021-03-05 10:38:37 +03:00
Matt Ellis
d90db8157c Remove overload that assumes primary caret offset 2021-03-05 10:38:37 +03:00
Matt Ellis
11da530151 Remove overload that takes a caret 2021-03-05 10:38:37 +03:00
Matt Ellis
c067c67e34 Remove unused code to move caret 2021-03-05 10:38:37 +03:00
Matt Ellis
89913ad4d7 Remove unused search handling from ProcessExEntry 2021-03-05 10:38:36 +03:00
Alex Plate
b73f34ad8c Useless change 2021-03-05 10:38:22 +03:00
Alex Plate
17cf68d8a5 Support testing without neovim for a lot of tests 2021-03-03 11:17:08 +03:00
Alex Plate
5c1795ee03 Add startofline option to the list of supported commands 2021-03-03 11:02:47 +03:00
Alex Plate
19a8480a88 Update changes 2021-03-03 11:01:04 +03:00
Matt Ellis
e0e80d2ea8 Update after running ktlintFormatter 2021-03-03 10:56:50 +03:00
Matt Ellis
adab2326ed Add 'startofline' to count percent motion 2021-03-03 10:56:50 +03:00
Matt Ellis
4ef629950d Add 'startofline' support for shift operations 2021-03-03 10:56:50 +03:00
Matt Ellis
39197df0c7 Add 'startofline' support for scrolling actions 2021-03-03 10:56:50 +03:00
Matt Ellis
1d3d6f0ea1 Add 'startofline' support to G, gg and i_<C-Home> 2021-03-03 10:56:50 +03:00
Matt Ellis
9272ffa52c Add 'startofline' support to goto line action 2021-03-03 10:56:50 +03:00
Matt Ellis
187e5864ac Add tests and introduce 'startofline' option
Update behaviour of H, L and M to handle 'scrolloff' correctly, operator pending mode and 'startofline' caret placement. Also implemented 'startofline' support for delete motion action.
2021-03-03 10:56:50 +03:00
Matt Ellis
e0711248a0 [VIM-2238] Correctly place cursor at mid line of short files 2021-03-03 10:56:50 +03:00
Alex Plate
bbbcf0502e Annotation some functions as not-neovim tested 2021-03-02 12:10:14 +03:00
Alex Plate
0498fac291 [TC] Add git label after stable release 2021-03-02 10:05:55 +03:00
Alex Plate
fa007148da [TC] Make slack notification only on stable releases 2021-03-02 10:05:55 +03:00
Alex Plate
7e69e5704a Rename task from eapNotification to notification 2021-03-02 10:05:55 +03:00
aleksei.plate
8579229797 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: build features of 'Qodana checks' build configuration were updated 2021-03-02 06:59:48 +00:00
aleksei.plate
59d8f4c1cf TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'Qodana checks' build configuration were updated 2021-03-02 06:59:34 +00:00
Alex Plate
d05942ebe1 Use correct version of kotlin plugin 2021-02-26 11:18:28 +03:00
Alex Plate
1b9457bdff Update structure and add comments to build.gradle.kts 2021-02-26 10:21:36 +03:00
Alex Plate
05f2848d41 Convert gradle to kotlin DSL 2021-02-26 10:02:23 +03:00
Alex Plate
ab3a28e50d Rename from groovy to kotlin 2021-02-26 10:01:25 +03:00
Alex Plate
121daa81cc Remove some deprecations 2021-02-24 11:44:27 +03:00
Alex Pláte
17e1d75238 Create codeql-analysis.yml 2021-02-24 11:32:33 +03:00
Alex Plate
597cdf4398 [TC] Add fail condition on artifact size change 2021-02-24 11:20:40 +03:00
Alex Plate
215ca7806e Extract assets from the distribution 2021-02-24 11:20:15 +03:00
Alex Plate
92f0d28d24 Remove some warnings from tests 2021-02-24 10:30:44 +03:00
Alex Plate
d964a0c375 Update gradle-intellij plugin version 2021-02-24 10:21:48 +03:00
Alex Plate
332f04fdfe Remove deprecation 2021-02-24 10:17:12 +03:00
Alex Plate
291ea3bfb0 Enable fail on warning for java 2021-02-24 05:09:34 +03:00
Alex Plate
51dbef9060 [TC] Update job name 2021-02-24 04:28:05 +03:00
Alex Plate
d6f771f6c3 [TC] Extract github pull requests into the separate project 2021-02-24 04:24:09 +03:00
Alex Plate
d659ee2880 Apply qodana patch 2021-02-24 04:16:29 +03:00
Alex Plate
7b37a5e611 Update method 2021-02-24 04:16:20 +03:00
aleksei.plate
b99f2a23a8 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: build features of 'Qodana checks' build configuration were updated 2021-02-24 01:14:35 +00:00
Alex Plate
a54d8af051 Linting 2021-02-24 04:07:51 +03:00
Alex Plate
62a309cba6 Update annotations 2021-02-20 18:20:29 +03:00
Alex Plate
b7c0e4725d Suppress code duplicate 2021-02-20 16:26:58 +03:00
Alex Plate
53a21fb5fe Qodana cleanup 2021-02-20 13:14:27 +03:00
Alex Plate
5802f7c2c5 [TC] Build dev build a bit later 2021-02-20 12:29:06 +03:00
Alex Plate
3c2640c90d [TC] Update fail condition 2021-02-20 12:19:47 +03:00
Alex Plate
6f2ea9e893 [TC] Update fail condition 2021-02-20 12:16:46 +03:00
aleksei.plate
8b06bdfc29 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: build features of 'Tests for IntelliJ Latest EAP' build configuration were updated 2021-02-20 09:15:09 +00:00
Alex Plate
b6a5e60b68 Fix qodana issues 2021-02-20 12:08:06 +03:00
Alex Plate
e16857457c [TC] Update configs 2021-02-20 11:52:00 +03:00
aleksei.plate
20663ec854 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: VCS roots of 'Qodana checks' build configuration were updated 2021-02-20 08:46:44 +00:00
Alex Plate
f0166dd18f Fix compatibility issues 2021-02-20 11:36:20 +03:00
Alex Plate
5b8fe2393e Qodana fixes 2021-02-20 11:26:53 +03:00
dependabot[bot]
b08408c3c7 Bump org.jetbrains.changelog from 1.1.1 to 1.1.2
Bumps org.jetbrains.changelog from 1.1.1 to 1.1.2.

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-19 23:22:43 +03:00
Alex Plate
060f8ece8a Update qodana 2021-02-19 20:06:14 +03:00
Alex Plate
eedc50b4fe Fix deprecation issue 2021-02-19 19:53:59 +03:00
Alex Plate
d7a636e4de Add qodana inspection profile 2021-02-19 19:34:42 +03:00
Alex Plate
9e9319f117 Remove some warnings from the code 2021-02-19 19:14:33 +03:00
Alex Plate
928162798f [TC] Remove unused imports 2021-02-19 11:51:14 +03:00
Alex Plate
b5b71a2dc6 Update detekt rules 2021-02-19 11:48:18 +03:00
Alex Plate
033b792b54 Disable wildcard rule of the ktlint 2021-02-19 11:47:07 +03:00
Alex Plate
7ab53edbbf Code reformatting to avoid issues between IJ and ktlint formatting 2021-02-19 11:31:41 +03:00
Alex Plate
624c3bf223 A massive code reformatting using intellij 2021-02-19 11:12:36 +03:00
Alex Plate
cf28312740 A massive code reformatting using ktlint 2021-02-19 10:42:28 +03:00
Alex Plate
a1e2beb1cf Update submodule reference 2021-02-19 09:58:49 +03:00
Alex Plate
4af9ab0bcb Add information about disabling single click option 2021-02-17 15:44:42 +03:00
Alex Plate
8d3bde86e3 Update nerdtree wiki page 2021-02-17 11:14:23 +03:00
Alex Plate
7011a4fe07 Update TC versions 2021-02-17 11:07:57 +03:00
Alex Plate
76f14fc4ba Preparation for the 0.65 release 2021-02-17 11:06:23 +03:00
Alex Plate
923c0fee7a [VIM-2153] Always store data as base64 encoded 2021-02-16 10:19:14 +03:00
Alex Plate
b62680137e Update dependencies 2021-02-15 10:59:48 +03:00
Andrey Vlasovskikh
cd5c4247a6 Moved Andrey Vlasovskikh to previous maintainers
I maintained the plugin during 2012-10/2021-02. In 2019-02 Alex Plate joined me as a plugin developer and maintainer. Since then Alex has added tons of cool features and important fixes and has become the #1 committer to the IdeaVim repository. Thank you Alex for your great work! I'm stepping down from my maintainer role, but I will keep contributing to the plugin. Alex Plate is now the maintainer of IdeaVim. There is a live community of contributors to the plugin mentioned in AUTHORS.md. IdeaVim is a very active and welcoming open-source project. I wish Alex and the IdeaVim community all the best!
2021-02-11 13:53:05 +03:00
Alex Pláte
d1e1692581 Update CHANGES.md 2021-02-09 11:56:55 +03:00
Alex Plate
c9fd0782ae Use a different method for compatibility 2021-02-08 12:41:30 +03:00
Alex Plate
c5779935d3 Extract escape key code 2021-02-08 12:28:34 +03:00
Alex Plate
70154d4526 Add log line about NERDTree 2021-02-08 12:16:37 +03:00
Alex Plate
070dfae93d Fix nerdtree for multiple opened projects 2021-02-08 12:11:54 +03:00
Alex Plate
4e5fc734e2 Fix quick search in NERDTree 2021-02-08 11:22:53 +03:00
Alex Plate
9004749754 Update compatibility with ActionPromoter 2021-02-08 10:19:06 +03:00
Alex Plate
e42e7b81ef Fix tests 2021-02-02 19:14:02 +03:00
Alex Plate
e788221099 [VIM-2220] Do not try to get a command state for null editor 2021-02-02 11:37:39 +03:00
Alex Plate
e96b383339 Update email 2021-02-02 11:16:57 +03:00
Alex Plate
e63044e72f [VIM-2217] Fix AppCode specific code 2021-02-01 11:14:30 +03:00
Alex Plate
0ac530eb86 Add 大牙(Henry Zhu) to the contributors list 2021-02-01 10:32:53 +03:00
大牙(Henry Zhu)
c1fd63ab25 fix invalid url of docs 2021-02-01 10:28:48 +03:00
Alex Plate
fd0d010908 Update the link to ideajoin examples 2021-02-01 10:27:30 +03:00
Alex Plate
de159d6e3a Add IdeaVim actions promoter to promote vim actions 2021-02-01 10:17:33 +03:00
Alex Plate
27293c3d36 Deprecate EditorDataContext construction instead of making it private 2021-01-29 12:15:16 +03:00
Alex Plate
ffe55f05ba Update plugin verifier versions 2021-01-29 11:46:56 +03:00
Alex Plate
d3b9a5af37 Update todo list of the NERDTree plugin 2021-01-29 11:38:41 +03:00
Alex Plate
d7772bec48 Add empty test to avoid warning 2021-01-29 11:33:06 +03:00
Alex Plate
c2e32d8989 Add docs as submodule 2021-01-28 18:25:57 +03:00
Alex Plate
cdbff1ef64 Remove doc folder from the project 2021-01-28 18:25:00 +03:00
Alex Plate
7d20053401 Disable random mappings property test 2021-01-26 11:19:58 +03:00
Alex Plate
7029346d8d Add information about nerdtree to changes 2021-01-26 11:04:55 +03:00
Alex Plate
544f268ab8 Update extension so they register key mappings only if there isn't already registered another mapping 2021-01-26 10:52:26 +03:00
Alex Plate
7dd10474c4 Update mapping property test 2021-01-25 03:06:24 +03:00
Alex Plate
f851794cf2 Reduce mapping depth to 20 2021-01-25 03:06:13 +03:00
Alex Plate
0ccc0f0846 Use existing variable to track recursion 2021-01-25 02:52:57 +03:00
Alex Plate
40d1b2ddd5 Reduce size of maxmapdepth 2021-01-25 00:24:01 +03:00
Alex Plate
a219be6810 Update mapping property test 2021-01-25 00:21:48 +03:00
Alex Plate
fee3f03e17 Create a property test for mappings 2021-01-25 00:10:56 +03:00
Alex Plate
62128a14e7 Support mapping recursion preventing 2021-01-24 23:59:14 +03:00
Alex Plate
47b604c6a7 Update EditorDataContext to avoid recursion 2021-01-24 23:27:46 +03:00
Alex Plate
9fc9cdc9f3 Add more tests for different mappings cases 2021-01-24 22:00:58 +03:00
Alex Plate
5daa654d10 [VIM-1337] Fix mapping processing after timeout 2021-01-24 22:00:58 +03:00
Alex Plate
8c51c699e9 Enable mappings delay for tests 2021-01-24 20:46:34 +03:00
Alex Plate
913fb0648b Remove unused argument 2021-01-24 20:32:50 +03:00
Alex Plate
1eacb09f3c Add notion why we don't map plugin mappings 2021-01-23 03:11:25 +03:00
Alex Plate
efcfceef39 Join some delete actions into a single file 2021-01-23 03:04:58 +03:00
Alex Plate
e977ae9e88 Remove testing character 2021-01-23 03:04:58 +03:00
dependabot[bot]
b7c8d2f34c Bump remote-robot from 0.10.0 to 0.10.3
Bumps remote-robot from 0.10.0 to 0.10.3.

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-23 03:04:41 +03:00
Alex Plate
51f1e6f866 Fix characters yanking 2021-01-23 02:18:04 +03:00
Alex Plate
28abf15720 Update contacts & help label 2021-01-23 01:21:31 +03:00
Alex Plate
6b9a295549 Extract ui tests into a separate gradle tas 2021-01-22 20:50:46 +03:00
Alex Plate
c63a0200b3 Load extensions after vim script loading 2021-01-22 20:41:10 +03:00
Alex Plate
5fdb817bfd Support t and T 2021-01-22 20:20:24 +03:00
Alex Plate
1b5bdf5db3 Make varible private 2021-01-22 18:18:13 +03:00
Alex Plate
8022ed450c Support more nerdtree ex commands 2021-01-22 17:50:32 +03:00
Alex Plate
255734acc5 Update detekt 2021-01-22 16:18:04 +03:00
Alex Plate
34b0c93ecd Update docs 2021-01-22 16:15:53 +03:00
Alex Plate
2221e5234d Support A, q 2021-01-22 16:14:17 +03:00
Alex Plate
8dd8cce491 Support r, R, and m 2021-01-22 16:06:04 +03:00
Alex Plate
d74965d36d Add scrolling command for existing commands 2021-01-22 15:54:06 +03:00
Alex Plate
cb9e6c4c69 Support C-K and C-J commands 2021-01-22 15:51:26 +03:00
Alex Plate
1d93edd35b Update docs 2021-01-22 15:48:41 +03:00
Alex Plate
4c071b9d97 Update P command implementation 2021-01-22 15:47:58 +03:00
Alex Plate
570eceb653 Support P, p, J, K commands 2021-01-22 15:39:19 +03:00
Alex Plate
a34a01745c Support x and X commands 2021-01-22 14:25:15 +03:00
Alex Plate
a4b9fa0f69 Support O command 2021-01-22 13:59:04 +03:00
Alex Plate
2da18fe59f Support variables in NERDTree 2021-01-22 12:50:59 +03:00
Alex Plate
5a969d573a Add list of commands 2021-01-22 12:41:10 +03:00
Alex Plate
0eff36a38e Implement s, i, gs, gi commands 2021-01-22 12:39:07 +03:00
Alex Plate
241bacfd49 Support s command 2021-01-21 20:48:00 +03:00
Alex Plate
b292644531 Support go command 2021-01-21 20:34:14 +03:00
Alex Plate
3264837478 Use trie to store keys 2021-01-21 20:21:27 +03:00
Alex Plate
70bf5033b5 Extract logic of adding leafs 2021-01-21 19:48:04 +03:00
Alex Plate
9ffe114aeb Generalize existing Node for building a trie 2021-01-21 18:06:53 +03:00
Alex Plate
75f6e08d85 Support o command 2021-01-21 17:30:14 +03:00
Alex Plate
3b0c19fbfc Implement node opening/closing 2021-01-21 16:24:40 +03:00
Alex Plate
e4d10eb622 Implement up/down motions 2021-01-21 10:17:55 +03:00
Alex Plate
9cc4783415 Update gradle wrapper to 6.8 2021-01-20 13:28:58 +03:00
Alex Plate
762bd81611 Update detekt baseline 2021-01-20 13:26:45 +03:00
Alex Plate
6afdfb55ca Start implementing NERDTree support. Support focus command 2021-01-20 10:40:48 +03:00
Alex Plate
cb3508b30d Support command aliases to function 2021-01-20 10:26:44 +03:00
Alex Plate
171ffc6862 Refactor command aliases 2021-01-20 10:19:02 +03:00
Alex Plate
0f19b7415f Update inspections profile 2021-01-20 10:18:52 +03:00
Alex Plate
38019cdb91 Convert command parser to kt 2021-01-20 09:58:40 +03:00
Alex Plate
89bcb43271 Rename .java to .kt 2021-01-20 09:58:39 +03:00
Alex Plate
5101dc00b3 Name for extension is not deprecated 2021-01-20 03:09:04 +03:00
Alex Plate
a7774349e5 Update copyright year 2021-01-20 03:07:13 +03:00
Alex Plate
b309e9d4bd Add alternative plugin syntax for EasyMotion 2021-01-20 03:07:12 +03:00
paksv
ba3fdbe142 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: Updated cloud profile 'amazon-48' in project 'project55' 2021-01-19 18:46:29 +00:00
paksv
645d53f13b TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: Updated cloud profile 'amazon-48' in project 'project55' 2021-01-19 18:46:00 +00:00
Alex Plate
838c6361de Update changelog plugin 2021-01-14 18:40:42 +03:00
Alex Plate
6cb1d4ad1f [TC] Update kotlin dsl version 2021-01-14 17:08:27 +03:00
Alex Plate
28dfda1370 [TC] Add job for property based tests 2021-01-14 17:00:42 +03:00
Alex Plate
c73b8cf795 [TC] Apply TC patch 2021-01-14 16:58:11 +03:00
Alex Plate
807777f022 [TC] Enable qodana job 2021-01-14 16:55:37 +03:00
nikita.koshcheev
866488ac0f TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: Updated cloud profile 'amazon-48' in project 'project55' 2021-01-14 08:34:25 +00:00
Alex Plate
10097e3d6e Exclude property based tests from regular test task 2021-01-14 11:14:55 +03:00
nikita.koshcheev
becb22a6b0 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: Updated cloud profile 'amazon-48' in project 'project55' 2021-01-14 08:07:26 +00:00
Alex Plate
37fcecfdd8 [TC] Apply qodana patch 2021-01-13 22:16:41 +03:00
aleksei.plate
c4144eb3d2 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: runners of 'Qodana checks' build configuration were updated 2021-01-13 17:52:37 +00:00
Alex Plate
d29244efcc [TC] Add qodana build type 2021-01-13 20:22:58 +03:00
Alex Plate
8901ba0128 [VIM-2202] Fix issues with search command macro recording 2021-01-11 13:48:20 +03:00
Alex Plate
b07342baef Convert macros test to kotlin 2021-01-11 12:47:47 +03:00
Alex Plate
4d69f984b8 Rename .java to .kt 2021-01-11 12:47:47 +03:00
Alex Plate
e1149907ce Extract versions into the constant 2020-12-29 19:34:08 +03:00
Alex Plate
263376ae92 Add dev builds to the project 2020-12-29 19:08:18 +03:00
Alex Plate
07abc2e2e0 Disable "always inverted" inspection 2020-12-29 11:01:14 +03:00
Alex Plate
7eba54f09a Disable LightEdit support for IdeaVim 2020-12-29 10:37:55 +03:00
Sergei Vorobyov
1eac924291 fixed: don't show reload vimrc floating toolbar in non-file editors
for example in editor from `Preferences | Editor | Font`
2020-12-29 09:49:23 +03:00
Alex Plate
3ffe250f78 Add dev channel build to teamcity 2020-12-29 09:47:37 +03:00
Alex Plate
15d173e628 Assert register type with neovim 2020-12-26 04:39:52 +03:00
Alex Plate
b24424330c Update detekt baseline 2020-12-25 11:38:53 +03:00
Alex Plate
ebffa83f17 Add counter of NeoVim tests 2020-12-25 11:37:45 +03:00
Alex Plate
6abc71a57d Update neovim api 2020-12-25 11:29:42 +03:00
dependabot[bot]
8afb20c53b Bump io.gitlab.arturbosch.detekt from 1.14.1 to 1.15.0
Bumps io.gitlab.arturbosch.detekt from 1.14.1 to 1.15.0.

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-25 11:05:49 +03:00
Alex Plate
501541b8be Add Sergei Vorobyov to contributions list 2020-12-25 11:03:50 +03:00
Sergei Vorobyov
e56f63dc0f migrated: New floating toolbar API 2020-12-25 10:56:53 +03:00
Alex Plate
7e0c33f9a0 Add log file to run configuration 2020-12-25 10:38:28 +03:00
Alex Plate
bb1b8363d9 Check dependabot updates on wednesday 2020-12-25 09:47:12 +03:00
Alex Pláte
e5e585443d Create dependabot.yml 2020-12-25 09:33:08 +03:00
Shrikant Sharat Kandula
82e39c9236 Fix handling when caret line has no indentation 2020-12-24 21:10:21 +05:30
Shrikant Sharat Kandula
1e69e98b92 Initial working implementation of indent objects 2020-12-24 20:59:55 +05:30
Alex Plate
d0888a063f Refactor code 2020-12-24 10:58:58 +03:00
Alex Plate
bd5781a039 Optimize imports 2020-12-24 10:46:42 +03:00
Alex Plate
a643c75e7f Update detekt config 2020-12-24 10:40:54 +03:00
Alex Plate
d4db40f9cc Add yank delete property test 2020-12-24 10:32:37 +03:00
Alex Plate
788489119b Rename property test 2020-12-24 10:24:41 +03:00
Alex Plate
665adaa44b Fix last line calculation 2020-12-24 10:22:11 +03:00
Alex Plate
9f19ee9586 Include neovim registers check into tests 2020-12-24 09:32:06 +03:00
Alex Plate
bb84b0e368 Refactor deleting 2020-12-24 09:32:06 +03:00
Alex Plate
7976fdd019 Extract old tests into the separate project 2020-12-23 11:35:28 +03:00
Alex Plate
0d3b45189b Add name property 2020-12-23 11:29:50 +03:00
Alex Plate
7005cb0268 Extract releases into the separate TC subproject 2020-12-23 11:27:25 +03:00
Alex Plate
81421d918a Sign releases with Alex Plate name 2020-12-23 11:18:35 +03:00
Alex Plate
e3fe198fc1 Update release token to Alex Plate for 201 release 2020-12-23 10:46:12 +03:00
aleksei.plate
76d62771e0 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: parameters of 'Publish Release 2020.1' build configuration were updated 2020-12-23 07:43:45 +00:00
aleksei.plate
4da538302d TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: parameters of 'Publish Release 2020.1' build configuration were updated 2020-12-23 07:43:30 +00:00
Alex Plate
b981193f19 Create TC configuration for releasing 2020.1 version 2020-12-23 10:37:48 +03:00
Alex Plate
c656da5c75 Prepare to 0.64 release 2020-12-23 09:49:45 +03:00
Alex Plate
dcedf6abca Mute another broken test 2020-12-18 15:03:25 +03:00
Alex Plate
849a71bdac Update changes 2020-12-18 13:18:08 +03:00
Alex Plate
534cc1d1fe Disable broken test 2020-12-18 12:26:10 +03:00
Alex Plate
40ec6c53fa Revert "Add statistic collection for some options"
Classes of the collector are incompatible with 202

This reverts commit b7cb3c09
2020-12-18 11:57:06 +03:00
Alex Plate
b7cb3c0945 Add statistic collection for some options 2020-12-17 23:13:54 +03:00
Alex Plate
69d3c7b754 resetCaset function should not change the shape of other editors
This commit fixes the following issues:
1) Windows splitting
- Start insert mode in editor
- Split editor
- Go back to the previous editor. The caret has a block shape, but insert mode

2) VCS updates
In 2021.1 VCS creates a diff window right after the file was changed.
So, the case described above happens here as well.
2020-12-17 10:53:43 +03:00
Alex Plate
542f11804e Update detekt baseline 2020-12-17 10:14:11 +03:00
Alex Plate
8526054aa8 Update changes 2020-12-17 10:05:04 +03:00
Alex Plate
93700bddc7 Update deprecated methods according to the new minimal IJ requirements 2020-12-17 10:04:52 +03:00
Matt Ellis
494500041b Rearrange and document the public search API
No code changes, just moved everything
2020-12-17 10:02:16 +03:00
Matt Ellis
011a5a3b23 Remove unnecessary UNSET direction enum value 2020-12-17 10:02:16 +03:00
Matt Ellis
03726858f0 Move find methods to SearchHelper 2020-12-17 10:02:16 +03:00
Alex Plate
c8c42cc4b2 Update plugin verifier versions 2020-12-16 13:00:32 +03:00
Alex Plate
0b22b454e6 Prepare to 0.63 release 2020-12-16 12:56:25 +03:00
vladimir.petrenko
f4fe03c582 CWM-927 disable vim for client's hidden editor on host
to provide compatibility with Code With Me plugin
2020-12-16 12:27:34 +03:00
Alex Plate
964e87fd6a Update minimap IJ version to 202 2020-12-16 11:39:49 +03:00
Alex Plate
ec4c0a0d0d Update teamcity configurations to deprecate 201 branch 2020-12-16 11:38:52 +03:00
Alex Plate
f9cf62472c Prepare to 0.62 release 2020-12-15 10:12:31 +03:00
Alex Plate
ace584d294 Fix settings saving issues because of NPE 2020-12-15 09:35:35 +03:00
Alex Plate
5cd669202b Remove time calculation for isIdeavimDisabledHere 2020-12-10 10:06:29 +03:00
Alex Plate
4a09848720 Revert incorrect update 2020-12-10 10:03:51 +03:00
Alex Plate
f998f1be9f Update teamcity ide version for pull requests builds 2020-12-10 09:52:07 +03:00
Alex Plate
3352bdfabb Remove some deprecations in code 2020-12-10 09:50:05 +03:00
Alex Plate
ce43a9648f Update profile settings 2020-12-10 09:40:57 +03:00
Alex Plate
440a0bf393 Remove incorrect link in package-info.java 2020-12-10 09:36:59 +03:00
Alex Plate
64a7555f42 [VIM-2188] Remove deprecated configuration store 2020-12-10 09:35:07 +03:00
Alex Plate
3aa6fe3dc0 Update algorithm of number generation 2020-12-08 12:11:41 +03:00
Alex Plate
3522228d45 Add new line at the end of test 2020-12-08 11:36:23 +03:00
Alex Plate
9b42d9a5c6 Add test for incrementing fancy number 2020-12-08 11:35:11 +03:00
Alex Plate
4e8d98f956 Add Shaun Patterson to contributors list 2020-12-08 10:54:15 +03:00
Alex Plate
f6c3d27bbc Reset caret shape after <C-O> command 2020-12-08 10:50:06 +03:00
Alex Plate
21daf83fbd Include caret shape assertions into checks 2020-12-08 10:50:05 +03:00
Shaun Patterson
7f1203c207 VIM-1756: startSel works in insert mode 2020-12-08 10:49:19 +03:00
Alex Plate
89b1f90973 Fix detekt issues 2020-12-04 11:21:40 +03:00
Alex Plate
8002a5497f [VIM-1913] Update changes 2020-12-04 11:07:11 +03:00
Alex Plate
770d12d79b [VIM-1913] Enable enter for AppCode templates 2020-12-04 11:05:32 +03:00
Alex Plate
7e4ac22d23 [VIM-1913] Enable tab for AppCode templates 2020-12-04 10:45:56 +03:00
Alex Plate
4f4b26d3e1 Update CHANGES.md 2020-12-04 09:54:58 +03:00
Matt Ellis
4ea7c421a8 Extract and use common Direction enum 2020-12-04 09:53:58 +03:00
Matt Ellis
3c8b7e2de4 Convert SearchHighlightsHelper to Kotlin 2020-12-04 09:53:58 +03:00
Matt Ellis
b13acaf823 Rename .java to .kt 2020-12-04 09:53:58 +03:00
Matt Ellis
709cd6ad6e Extract SearchHighlightsHelper 2020-12-04 09:53:58 +03:00
Matt Ellis
1316ccc56f Update default for history to match Vim 2020-12-04 09:53:58 +03:00
Matt Ellis
881ddd0e11 Refactor setting special registers 2020-12-04 09:53:58 +03:00
Matt Ellis
49611ee6b9 Show the correct handler class in :map 2020-12-04 09:33:14 +03:00
Alex Plate
539465bb56 Update property based test 2020-12-03 10:50:57 +03:00
Alex Plate
bc54a73d69 Add suggested options to README.md 2020-12-03 10:13:28 +03:00
Alex Plate
5eb12f5d14 Update mappings in .ideavimrc example 2020-12-03 10:09:05 +03:00
Alex Plate
557e47650f Disable octal for nrformats 2020-12-03 10:07:27 +03:00
Alex Plate
f50753bfd7 Add tests for 2020.3 on TeamCity 2020-12-03 10:02:21 +03:00
Alex Plate
7a164d6d5f Updates to block caret in insert mode 2020-12-02 10:58:04 +03:00
Alex Plate
60bc936cd9 Take back: VIM-1475: Respect the "use block caret" when in insert mode 2020-12-02 10:31:01 +03:00
Alex Plate
d097e636ea Add test for double exiting visual mode 2020-12-02 10:30:37 +03:00
Alex Plate
3ce2bbb624 Rename test for visual exit 2020-12-02 10:27:28 +03:00
Alex Plate
4926d2554e Revert "VIM-1475: Respect the "use block caret" when in insert mode"
Reverting this commit due to VIM-2182

This reverts commit 62c828d7
2020-12-02 09:45:08 +03:00
Alex Plate
eae135acba Fix detekt issues 2020-12-01 12:19:08 +03:00
Alex Plate
8ce3801b87 [VIM-1913] Improve interaction with AppCode templates 2020-12-01 11:55:47 +03:00
Alex Plate
0c7c11f817 Ignore ui test 2020-12-01 10:02:53 +03:00
Alex Plate
b3a39c05d7 Update plugin.xml 2020-12-01 09:56:05 +03:00
Alex Plate
7370012667 Add getUnreleasedChangelog task to build.gradle 2020-12-01 09:52:56 +03:00
Alex Plate
412838fd4b Remove implemented manual tests 2020-11-27 12:05:00 +03:00
Alex Plate
273a614389 Add gutter ui test 2020-11-27 12:03:28 +03:00
Alex Plate
3944c80ae2 Update gradle intellij plugin 2020-11-27 10:54:22 +03:00
Alex Plate
726ab3f91b Add test with mouse dragging 2020-11-26 12:12:54 +03:00
Alex Plate
ab307dd78f Injecting text instead of typing it 2020-11-26 11:53:07 +03:00
Alex Plate
e3079912ae Remove unused handlers 2020-11-26 10:24:22 +03:00
Alex Plate
52da3ed0e4 Update info file 2020-11-26 09:44:48 +03:00
Alex Plate
cda85169ea Add new line for ExEditorKit.kt 2020-11-25 17:22:26 +03:00
Alex Plate
978d1df598 Disable internationalization inspections 2020-11-25 17:13:25 +03:00
Alex Plate
f90d22cc20 Refactoring of ex actions 2020-11-25 10:49:50 +03:00
Alex Plate
bae69d92ae Rename .java to .kt 2020-11-25 10:49:50 +03:00
Alex Plate
b910239825 Put ex panels into the separate package 2020-11-25 10:49:50 +03:00
Alex Plate
6421a5969a Update changes 2020-11-25 10:05:43 +03:00
sumoooru2
5c9faba7f4 Implement cmap 2020-11-25 10:00:15 +03:00
Alex Plate
c1af738cc5 Add another ui test 2020-11-24 12:47:10 +03:00
Alex Plate
23a80a9260 [VIM-2170] Fix alternative range format for s command 2020-11-23 11:49:30 +03:00
Alex Plate
d9d92f7eee Add another ui test 2020-11-20 20:18:19 +03:00
Alex Plate
c8be6c203e Update intellij plugin version 2020-11-20 12:39:00 +03:00
Alex Plate
612c599d9b Update compatibility a bit 2020-11-20 11:38:22 +03:00
Alex Plate
1292c7d1ae Remove unused import 2020-11-20 11:17:40 +03:00
Alex Plate
69f07967b5 Fix compilation issus for <203 2020-11-20 11:00:29 +03:00
Alex Plate
aedd427c07 Optimize imports 2020-11-20 10:45:26 +03:00
Alex Plate
9b6c3dc511 Fix unresolved references 2020-11-20 10:17:52 +03:00
Alex Plate
b4fa7f4317 Replace @NlsSafe annotation from utils with our own 2020-11-20 09:58:43 +03:00
Alex Plate
f053d305d5 Remove neovim from implementation 2020-11-20 09:35:48 +03:00
Alex Plate
1d95b7ddf7 Move run configurations to the .idea 2020-11-19 16:43:27 +03:00
Alex Plate
01a6964d68 Use neovim for tests only 2020-11-19 11:59:41 +03:00
Alex Plate
d661f96a9b Reformat for MessageHelper.kt 2020-11-19 11:26:27 +03:00
Alex Plate
c79fae8ab3 [i18n] Mark some strings as @NonNls 2020-11-19 11:22:11 +03:00
Alex Plate
121f130893 Ignore toString localization 2020-11-19 05:55:35 +03:00
Alex Plate
da9a0a414a [i18n] Extract more starting for localization 2020-11-19 00:26:17 +03:00
Alex Plate
e0732e041b Start with UI tests in the project 2020-11-18 22:03:46 +03:00
Alex Plate
6fc5b3189a [i18n] More extracted strings 2020-11-18 18:49:55 +03:00
Alex Plate
2a0c9cb749 [i18n] Add another file template 2020-11-18 14:22:39 +03:00
Alex Plate
7ad131b448 [i18n] More extracted strings 2020-11-18 13:03:35 +03:00
Alex Plate
3e7186bd60 [i18n] Update @Nls annotations 2020-11-18 13:03:35 +03:00
Alex Plate
132f8cce53 [i18n] Extract more strings 2020-11-18 13:03:35 +03:00
Alex Plate
5c07f42afb Disable unstable api usage inspection 2020-11-18 12:33:51 +03:00
Alex Plate
1f7a2594c8 Convert some strings to properties 2020-11-18 11:26:03 +03:00
Alex Plate
ec64d19a36 Update JetBrains annotations 2020-11-18 11:25:39 +03:00
Alex Plate
5cb67470d5 Enable hardcoded string inspection 2020-11-18 11:25:39 +03:00
Alex Plate
c03f01a96a Update MessageHelper.kt 2020-11-18 03:09:57 +03:00
Alex Plate
26b67a43ae Fix formatting 2020-11-17 19:55:09 +03:00
Alex Plate
a93ca3a205 Support mapclear commands 2020-11-17 19:47:56 +03:00
Alex Plate
dcc647ba3c [VIM-1491] Support unmap 2020-11-17 19:38:22 +03:00
Alex Plate
fe44f59239 Refactor map handler 2020-11-17 19:36:41 +03:00
Alex Plate
80dba0babf Move MapHandler into the separate package 2020-11-17 19:36:17 +03:00
Yaohui Wang
34acf9a91e Add CJK characterType for delimiting caret movement
- Add unicode CJK Unified Ideographs type
- Stop caret movement for CJK chars (as VIM does). Similar to VIM-58
2020-11-17 10:21:49 +03:00
Alex Plate
cb859dbb7b Add Grzegorz Antoniak to the contributors list 2020-11-17 10:16:13 +03:00
Alex Plate
20c04b1e62 Add Brandon Conway to the contributors list 2020-11-17 10:09:21 +03:00
Alex Plate
69eaf8ed0c Jan Palus was already on the list 2020-11-17 10:09:21 +03:00
Grzegorz Antoniak
62c828d722 VIM-1475: Respect the "use block caret" when in insert mode
The "use block caret" IDEA option controls the style of the cursor: when
it's enabled, the cursor is drawn as a block, and when it's disabled,
it's drawn as a bar. However, after installing IdeaVIM, this option
isn't respected; the plugin always uses a block cursor when in command
mode, and always uses a bar cursor when in insert mode.

This commit changes the behavior so that when the "use block caret"
option is enabled, IdeaVIM's insert mode uses a block cursor instead of
a bar cursor. The cursor in normal mode is always drawn as a block
cursor. If the "use block caret" option is disabled, the behavior is the
same as in previous versions of IdeaVIM (block cursor in normal mode,
bar cursor in insert mode).

Fixes VIM-1475 (on YouTrack)
2020-11-17 10:06:32 +03:00
Brandon Conway
251e8e8ff4 Fix typo 2020-11-16 11:20:07 +03:00
Alex Plate
acc41ec72e Add warning to the info about ideavimrc file 2020-11-13 15:15:28 +03:00
Alex Plate
f9ebcf2ee4 Update readme section 2020-11-13 15:13:01 +03:00
Alex Plate
f3df231dc2 Update changes 2020-11-13 12:35:21 +03:00
Jan Palus
75a1bb7cc5 VIM-2114 Do not override registers when deleting empty range 2020-11-13 12:34:04 +03:00
Alex Plate
7d6a64315a Add Jan Palus to contributors list 2020-11-13 11:58:10 +03:00
Jan Palus
2758071d31 VIM-2113 Increase tag range only in visual mode 2020-11-13 11:54:08 +03:00
Alex Plate
3881b905be Update CHANGES.md 2020-11-12 10:51:57 +03:00
Alex Plate
073c62f868 Update version on TeamCity 2020-11-12 10:50:25 +03:00
Alex Plate
d8e0f26bea Revert "Unmute falling tests"
This reverts commit 0296cae7
2020-11-12 10:48:54 +03:00
Alex Plate
04c24ab5d0 Run manual tests 2020-11-12 10:38:02 +03:00
Alex Plate
bfb0ba1ab9 Update emulated plugins 2020-11-12 10:31:11 +03:00
Alex Plate
fb7d48af1f Update IDE actions section in README 2020-11-12 10:11:33 +03:00
Alex Plate
559989ce4b Remove all To Be Released labels 2020-11-12 10:03:56 +03:00
Alex Plate
81f59e3c18 Update plugin.xml 2020-11-12 10:03:04 +03:00
Alex Plate
b6adf9f7a9 Rename ideaenabledbufs to ideavimsupport 2020-11-12 09:45:29 +03:00
Alex Plate
b972a01cf0 Add merged PR to changes 2020-11-12 09:41:57 +03:00
Alex Plate
0296cae712 Unmute falling tests 2020-11-12 09:39:09 +03:00
Matt Ellis
c38b18e16b Prevent inlays causing scrolling to stick 2020-11-12 09:37:55 +03:00
Matt Ellis
8d65c3ed26 Limit how much of an inlay is shown when scrolling 2020-11-12 09:37:55 +03:00
Matt Ellis
995bb966ad Reposition cursor when scrolloff changes 2020-11-12 09:37:55 +03:00
Matt Ellis
dbda1a76ca [VIM-2158] Fix scrolling when scrolloff is greater than half screen height, but less than full screen height 2020-11-12 09:37:55 +03:00
Alex Plate
ed6f990d9a Remove some qodana inspections 2020-11-06 21:39:37 +03:00
Alex Plate
4f86d9cc77 Correct visual mode exiting when after line end 2020-11-06 20:26:26 +03:00
Alex Plate
d55774abab Use vimForEachCaret 2020-11-06 20:21:05 +03:00
Alex Plate
d5591ba08d Update qodana profile 2020-11-06 20:00:21 +03:00
Alex Plate
f67d483c4e Exclude next method from property based testing 2020-11-06 19:48:33 +03:00
Alex Plate
f26ddd4a27 Fix exception in aW 2020-11-06 19:12:40 +03:00
Alex Plate
dbbea642bc Add inspection profiles to the repository 2020-11-06 18:40:02 +03:00
Alex Plate
0539e39977 Fix <C-\><C-N> 2020-11-06 11:16:13 +03:00
Alex Plate
65235d32a1 Fix exception for ]b command 2020-11-06 10:36:03 +03:00
Alex Plate
ecfcdf5a8c Update intellij gradle plugin 2020-11-06 10:06:25 +03:00
Alex Plate
cf127ba7f9 Update plugin description 2020-11-06 09:37:01 +03:00
Alex Plate
1fba77d925 Update getName description 2020-11-05 11:31:41 +03:00
Alex Plate
5752b116f6 Fix plugin.xml 2020-11-04 13:04:36 +03:00
Alex Plate
cdf7fd8ce6 Update markdown to slack version 2020-11-03 12:14:58 +03:00
Alex Plate
8fe07e7b20 Verify plugin only against last major versions of IJ 2020-11-03 11:26:32 +03:00
Alex Plate
b800237606 Refactor common extension test 2020-11-03 11:24:34 +03:00
Alex Plate
fed02e5b8a Update plugin.xml 2020-11-03 11:20:22 +03:00
Alex Plate
2d4d3e9410 Update markdown to slack parser version 2020-11-03 11:20:21 +03:00
Alex Pláte
880d4c6888 Update CONTRIBUTING.md 2020-11-02 14:16:44 +03:00
Alex Plate
6a3d606032 New extension registration process
The new process gives as lazy loading of extension classes
2020-11-01 03:30:00 +03:00
Alex Plate
612a86c4d9 Add new option to enable extensions 2020-11-01 00:51:22 +03:00
Alex Plate
14abc25c01 Update detekt config 2020-11-01 00:47:05 +03:00
Alex Plate
52673d1a02 Remove unnecessary semicolon 2020-10-31 22:04:20 +03:00
Alex Plate
b7caee119e Rename detekt folder 2020-10-31 21:44:53 +03:00
Alex Plate
a148446912 Change order of checks 2020-10-31 19:43:19 +03:00
Alex Plate
1ee9075976 Inline findParentByCondition 2020-10-31 19:40:48 +03:00
Alex Plate
b03627a110 Add info about prepared configurations to contributing guide 2020-10-31 19:27:06 +03:00
Alex Plate
04ac0ab743 [TC] Extract plugin verification into the separate build 2020-10-31 19:21:12 +03:00
Alex Plate
e7aa985ad5 Add run configurations 2020-10-31 18:49:37 +03:00
Alex Plate
4177f4e4f3 Rename ideavim.neovim.test to ideavim.nvim.test 2020-10-31 18:44:53 +03:00
Alex Plate
c1e415b76a [TC] Update nvim config 2020-10-31 18:44:16 +03:00
Alex Plate
8ae656dee3 Remove unused export 2020-10-31 18:42:35 +03:00
aleksei.plate
d48576f48a TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: parameters of 'NVIM' build configuration were updated 2020-10-31 15:42:17 +00:00
Alex Plate
c0c5075072 [TC] Use -P to set env var 2020-10-31 18:16:41 +03:00
Alex Plate
59d106b8c4 [TC] Update nvim config 2020-10-31 17:42:58 +03:00
Alex Plate
d96c313ecb [TC] Add execution privilege to nvim 2020-10-31 17:12:22 +03:00
Alex Plate
212c708150 [TC] Use env variable to set nvim path 2020-10-31 17:00:16 +03:00
Alex Plate
3739eb173e Remove nvim branch 2020-10-31 16:54:56 +03:00
Alex Plate
0d3ecce8a2 Read env variable to get nvim path 2020-10-31 16:53:09 +03:00
Alex Plate
164d7a4200 [TC] Update nvim config 2020-10-31 16:45:18 +03:00
Alex Plate
1258e602e6 [TC] Reformat code 2020-10-31 16:38:06 +03:00
Alex Plate
8a5ad713ea Trying to setup neovim tests 2020-10-31 16:29:34 +03:00
Alex Plate
12be65fa09 Update teamcity config: refactoring 2020-10-31 16:00:35 +03:00
Alex Plate
0720431c91 More cleanup 2020-10-31 14:29:26 +03:00
Alex Plate
6f1ac1de97 Add more time checks for is db cell 2020-10-31 14:03:11 +03:00
Alex Plate
99d2d4b594 Update the color of yank highlighting after laf changing 2020-10-31 13:46:08 +03:00
Alex Plate
2bf9b97e49 Continuation of qodana cleanup 2020-10-31 13:11:13 +03:00
Alex Plate
c6600f3348 Fixes base of qodana run 2020-10-30 19:54:26 +03:00
Alex Plate
e29ab54b0e Make default register in RegisterGroup non static field 2020-10-30 19:18:46 +03:00
Alex Plate
197565d4cb Get rid of info logs 2020-10-30 16:47:44 +03:00
Alex Plate
3d570d2020 Make property private 2020-10-30 15:59:56 +03:00
Alex Plate
fe364dc6dc Reduce the depth of "parentByCondition" function 2020-10-30 11:56:50 +03:00
Alex Plate
5d0e82781f Enable teamcity output format for plugin verifier 2020-10-30 11:37:36 +03:00
Alex Plate
24f005a340 Integrate plugin verifier to the project 2020-10-30 11:08:49 +03:00
Alex Plate
1743c08091 Update isIdeaVimdisableHere logging 2020-10-29 12:40:30 +03:00
Alex Plate
81b095c899 Update detekt configuration 2020-10-29 11:43:47 +03:00
Alex Plate
965e8f71a0 Update detekt configuration 2020-10-29 11:01:41 +03:00
Alex Plate
efc789fbf4 Update plugin.xml 2020-10-29 10:58:35 +03:00
Alex Plate
f9cf49a9dd Update CHANGES.md 2020-10-29 10:53:02 +03:00
Alex Plate
0b41bd30cd Rename dialogescape and oneline to ideaenabledbufs 2020-10-29 10:44:34 +03:00
Alex Plate
7c79615c6a [VIM-2144] Correct caret position after block insert with inlays 2020-10-29 10:19:51 +03:00
Alex Plate
10be7354cd [VIM-2156] Fix up/down motions with inlays 2020-10-29 09:46:21 +03:00
Alex Plate
1e9925f092 [VIM-2157] Fix tab for active templates 2020-10-28 11:37:28 +03:00
Alex Plate
838079b249 Apply teamcity dsl patch (update vsc labbeling) 2020-10-27 19:47:47 +03:00
aleksei.plate
a9bf5c93df TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: build features of 'Publish EAP Build' build configuration were updated 2020-10-27 16:41:49 +00:00
Alex Plate
d4ec7e1f69 Remove some detekt warnings 2020-10-27 10:01:57 +03:00
Alex Plate
12e9774d4c Use markdown to slack converter to send EAP notification 2020-10-27 09:38:38 +03:00
Alex Plate
7bccaa8717 Remove deprecated methods and options 2020-10-23 11:18:46 +03:00
Alex Plate
319874b973 Update message 2020-10-22 12:11:14 +03:00
Alex Plate
daf8799c39 Update isIdeavimDisabled here report 2020-10-22 12:02:03 +03:00
Alex Plate
f45d4e1451 [VIM-2150] Shift-D should not delete an empty line 2020-10-21 10:26:50 +03:00
Alex Plate
7458d126bc Remove build dependencies for EAP release 2020-10-20 11:59:37 +03:00
Alex Plate
a90ffb7a48 Update plugin.xml 2020-10-20 11:38:20 +03:00
Alex Plate
d1e39903dd Use gradle-changelog-plugin for pushing slack notifications 2020-10-20 11:34:52 +03:00
Alex Plate
f23793f3f3 Test <Action> for insert mode mapping 2020-10-20 11:09:51 +03:00
Alex Plate
800390921c Update branch specification for PRs 2020-10-20 00:59:33 +03:00
Alex Plate
9650450426 Do not run tests on pull requests merging 2020-10-20 00:52:12 +03:00
Alex Plate
7225ab1f1b Use check instead of test for testing 2020-10-20 00:45:24 +03:00
Alex Plate
72dbc45457 Join active test 2020-10-20 00:13:47 +03:00
Alex Plate
3d14f916ef Update TestsForIntelliJ20202 configuration 2020-10-20 00:05:18 +03:00
Alex Plate
5598de70f1 Trying to extract common code for active tests building 2020-10-19 23:59:27 +03:00
Alex Plate
bfccdd6b35 Cleanup builds 2020-10-19 23:54:01 +03:00
Alex Plate
35f36070a4 Update gitignore 2020-10-19 23:42:47 +03:00
Alex Plate
8f0c50a010 Update pull requests vcs root id 2020-10-19 23:40:24 +03:00
Alex Plate
25d6d3694b Update gitignore 2020-10-19 23:39:57 +03:00
Alex Plate
6c784ec01e Exclude NVim builds 2020-10-19 12:26:59 +03:00
Alex Plate
ebc81c55c2 Update GitHub Pull Requests build 2020-10-19 12:16:59 +03:00
aleksei.plate
d08d9fce99 TeamCity change in 'IntelliJ IDEA plugins / IdeaVim' project: Synchronization with own VCS root is enabled 2020-10-19 08:48:07 +00:00
Alex Plate
d1bfce1974 Create a baseline for the detekt 2020-10-19 11:07:53 +03:00
Alex Plate
0d0f326c26 Catch exception instead of NumberFormatException 2020-10-18 21:21:37 +03:00
Alex Plate
2072fa1e13 Add detekt to the project 2020-10-18 21:06:51 +03:00
Alex Plate
fd98274e78 EditorDataContext can now accept a delegate data context 2020-10-16 11:03:05 +03:00
Alex Plate
e72c7d6cb7 Convert EditorDataContext to kotlin 2020-10-16 10:53:49 +03:00
Alex Plate
5860c0031b Rename .java to .kt 2020-10-16 10:53:49 +03:00
Alex Plate
a43232ba6c Move execution of mapping to MappingInfo 2020-10-16 10:27:12 +03:00
Alex Plate
b20bec610a Move converting to presentable string to MappingInfo classes 2020-10-16 10:08:42 +03:00
Alex Plate
3a9f5ea33a Add ability to map actions via <Action> keyword 2020-10-16 10:00:46 +03:00
Alex Plate
5d1caa21d8 Remove java annotation 2020-10-15 19:50:15 +03:00
Alex Plate
70b3156375 Update git for the track action id 2020-10-15 12:08:01 +03:00
Alex Plate
d388a75f98 Add an information about "Track action ids" to readme 2020-10-15 11:44:07 +03:00
Alex Plate
b2a6d0e687 Do now show "Copy action id" action in the notification if there is no id 2020-10-15 10:40:48 +03:00
Alex Plate
462f5bab54 Update intellij gradle plugin version 2020-10-12 11:03:34 +03:00
Alex Plate
e89e0466eb Prepare for 0.60 release 2020-10-09 11:24:48 +02:00
Alex Plate
c9d0d7aef6 [VIM-2140] Downgrade java version to 1.8 2020-10-09 11:06:38 +02:00
Alex Plate
90c7d5a74a Update gradle to 6.6.1 2020-10-09 10:30:41 +02:00
Alex Plate
b19e11b5b6 Use proper access syntax 2020-10-09 10:16:30 +02:00
Alex Plate
2d002c044d Report if time for calculation of isIdeaVimDisabledHere take more than 10ms 2020-10-08 11:39:49 +02:00
Alex Plate
9a7b2bd158 Update the implementation of disabled IdeaVim editors 2020-10-08 11:25:47 +02:00
Alex Plate
461c874de6 Reformat some code 2020-10-08 10:31:21 +02:00
Alex Plate
992ff97877 Use setUp function for VimOptionTestCase 2020-09-24 11:15:48 +03:00
Alex Plate
96689eab23 Update changes 2020-09-24 09:52:07 +03:00
Alex Pláte
0dd47c192b Merge pull request #252 from citizenmatt/VIM-2104
Fixes for scrolling
2020-09-24 09:45:32 +03:00
Alex Plate
5875ce58fb Update notification about missing action id 2020-09-23 10:46:21 +03:00
Alex Pláte
1c21968259 Merge branch 'master' into VIM-2104 2020-09-23 09:51:10 +03:00
Alex Plate
1d8ac4fc02 Move scroll data objects up to avoid conflicts 2020-09-23 09:50:00 +03:00
Alex Plate
0a863f32b2 Small formatting 2020-09-22 10:48:15 +03:00
Alex Plate
cd0d503402 Convert test to option test 2020-09-22 10:41:03 +03:00
Alex Plate
0bac6bf8b6 Rename tracking id action 2020-09-18 10:48:41 +03:00
Alex Plate
6436a59528 Rename "ideawaonw" to "ideawrite" 2020-09-18 10:11:01 +03:00
Matt Ellis
2dc54ea882 Use deterministic width for inlays 2020-09-17 16:15:27 +01:00
Matt Ellis
63db148aae Merge branch 'master' into VIM-2104 2020-09-17 15:29:05 +01:00
Matt Ellis
78f1c8499a Use test inlay renderer for consistent width 2020-09-17 14:55:41 +01:00
Matt Ellis
26dae9b4e0 Add zH scroll half screen width action 2020-09-17 14:35:43 +01:00
Alex Plate
10f1d75f2e Add Iain Ballard to contributors list 2020-09-17 11:22:53 +03:00
Alex Plate
5b3984ce7a Refactor test 2020-09-17 11:18:27 +03:00
Alex Plate
43810ba730 Rename moveCaretHorizontal to getOffsetOfHorizontalMotion 2020-09-17 11:18:27 +03:00
Alex Pláte
5bf2818b2a Merge pull request #242 from i-e-b/master
Partial implementation of virtualedit config
2020-09-17 11:15:14 +03:00
Alex Plate
76587d672f Refactor tests according to IdeaVim practices 2020-09-17 11:13:02 +03:00
Alex Plate
890d48769f Get rid of unused variables 2020-09-17 10:30:56 +03:00
Alex Plate
fffe8e2499 Add static import of EditorHelper 2020-09-17 10:15:09 +03:00
Alex Plate
fffc2d3b11 Use amountOfInlaysBeforeCaret function 2020-09-17 10:13:53 +03:00
Matt Ellis
007f33be0b Add zL scroll half screen width action 2020-09-17 00:01:24 +01:00
Matt Ellis
fa17af8d33 Fix keeping caret on screen with preceding inlay 2020-09-16 18:58:21 +01:00
Matt Ellis
eabe43061c Add tests and fixes for ScrollColumnLeftAction 2020-09-16 16:59:14 +01:00
Matt Ellis
64502fb31b Reformat comments 2020-09-16 12:11:48 +01:00
Matt Ellis
d693906905 Add tests and fixes for ScrollColumnRightAction 2020-09-16 11:47:28 +01:00
Alex Plate
cf25f7e201 Refactor processing of vimLastColumn 2020-09-16 12:42:43 +03:00
Matt Ellis
df3a533515 Fix arithmetic for scrolling columns 2020-09-16 09:29:43 +01:00
Matt Ellis
53a687fd53 Fix issues with side scrolling and inline inlays
Fixes VIM-1556, fixes VIM-1770, fixes VIM-2110
2020-09-15 17:07:42 +01:00
Matt Ellis
2091bbc025 Improve cursor position handling with inlay hints
E.g. navigation around Kotlin type annotations, replacing a character with a preceding parameter hint
2020-09-08 17:45:44 +01:00
Alex Plate
eb46ed8f00 Small refactorings based on inspections 2020-09-08 10:18:44 +03:00
Alex Plate
3096c2e7ad Update changelog 2020-09-08 09:58:57 +03:00
Alex Plate
f8d66f354a Fix typos in file 2020-09-08 09:56:28 +03:00
Alex Pláte
67c5601fdc Merge pull request #248 from yaohui-wyh/master
Check if project is disposed when editorDeinit
2020-09-08 09:55:58 +03:00
Matt Ellis
62601686aa Add internal action to show inline inlays 2020-09-08 00:20:54 +01:00
Alex Plate
e92c0d5098 [VIM-1968] Create and enable option to execute :wa command on :w 2020-09-07 10:55:47 +03:00
Matt Ellis
5ca0298497 Add tests for ScrollHalfPage actions
<C-D> and <C-U>
2020-09-03 17:46:30 +01:00
Matt Ellis
7321099a0f Add tests for ScrollMiddleScreenLine actions
z. and zz
2020-09-03 10:10:57 +01:00
Matt Ellis
63d9a33d80 Add tests for ScrollLastScreenLine actions
z- and zb
2020-09-03 09:57:32 +01:00
Matt Ellis
a7ba6d6004 Add tests for ScrollFirstScreenLine actions
z<CR> and zt
2020-09-03 09:55:53 +01:00
Alex Plate
5008d5c8c4 Make better notifications about tracked action id 2020-09-03 11:35:40 +03:00
Alex Plate
33f8a00679 VIM-2099 Fix operations with backward inclusive motions 2020-09-03 10:16:16 +03:00
Matt Ellis
be0adb833f Add tests for ScrollLastScreenLinePageStartAction 2020-09-03 01:10:58 +01:00
Matt Ellis
8f90ff8a65 Add tests for ScrollFirstScreenLinePageStartAction 2020-09-03 00:05:01 +01:00
Matt Ellis
c8a1938155 Add tests for ScrollPageUpAction 2020-09-02 23:27:16 +01:00
Matt Ellis
3cf42c86f3 Add tests for ScrollPageDownAction 2020-09-02 23:11:53 +01:00
Matt Ellis
632e9fad2e Remove incorrect mappings for page up/down
i_<C-Down> and i_<C-Up> are not standard Vim mappings, but can be set up in .ideavimrc if required
2020-09-02 17:18:03 +01:00
Matt Ellis
a5de935192 Add tests for ScrollLineDownAction 2020-09-02 17:05:01 +01:00
Matt Ellis
111c1ebe32 Add tests for ScrollLineUpAction 2020-09-02 15:09:11 +01:00
Matt Ellis
8a42bff6ad Add tests for scrolloff and scrolljump
Behaviour matches Vim, apart from soft wraps
2020-09-02 14:11:04 +01:00
Matt Ellis
d878c3e05d Improve handling of scrolljump
Now very closely follows Vim's somewhat unintuitive handling. Doesn't work properly with soft wraps (like a lot of other parts of IdeaVim)
2020-09-01 17:46:18 +01:00
Matt Ellis
d08da77b2f Split scrollPositionIntoView method into two 2020-09-01 17:44:24 +01:00
Alex Pláte
86d6876db4 Update README.md 2020-09-01 17:17:43 +03:00
Alex Plate
a7985e1e9b VIM-2080 Fix S command with count 2020-09-01 12:08:24 +03:00
Alex Plate
879ca456f7 Do not apply mappings in REGISTER_PENDING submode 2020-09-01 12:08:23 +03:00
Alex Plate
1863cbdef0 Add functionality to track action ids 2020-08-31 10:30:10 +03:00
Alex Plate
ac4755a6ff VIM-2071 Fix unexpected moving of caret
#VIM-2071 Request State {Ready To Release}
2020-08-28 10:17:08 +03:00
Alex Plate
61600b07a4 VIM-2084 Fix execution of plugins with existing mappings
#VIM-2084 State {Ready To Release}
2020-08-27 12:26:50 +03:00
Iain Ballard
6be6e7f173 Partial implementation of virtualedit config
This does not support all config settings,
but does add the 'onemore' option.

This partly addresses https://youtrack.jetbrains.com/issue/VIM-844
2020-08-26 08:35:00 +01:00
Alex Plate
e597e06324 Preparation for the 0.59 release 2020-08-25 10:25:32 +03:00
Matt Ellis
4cebaa865b Fix scrolljump 2020-08-20 14:21:53 +01:00
Matt Ellis
589e43f825 [VIM-2104] Use side scroll offset for horizontal scrolling 2020-08-20 11:45:39 +01:00
Yaohui Wang
61a70704c5 Check if project is disposed when editorDeinit 2020-08-03 07:21:19 +08:00
Alex Plate
174f86f91e Add gif with highlight_yank 2020-07-30 10:34:44 +03:00
Alex Plate
77a462702e Add a note about property based tests 2020-07-29 11:34:58 +03:00
Alex Plate
d20955900d Prepare to 0.58.1 EAP 2020-07-28 09:38:16 +03:00
Alex Plate
b952d2b96a Note the PR from KostkaBrukowa 2020-07-27 20:59:38 +03:00
Alex Plate
428d1d6699 Add KostkaBrukowa to contributors list 2020-07-27 20:39:16 +03:00
Alex Pláte
35863581e9 Merge pull request #245 from KostkaBrukowa/VIM-1970
VIM-1970 | Working solution of plugin vim-highlightedyank
2020-07-27 20:34:18 +03:00
Alex Plate
041f6af607 Add insert listener; small refactorings 2020-07-27 20:25:03 +03:00
Alex Plate
0e8a1bfc87 Refactor neovim tests 2020-07-27 10:07:19 +03:00
Alex Plate
442e739447 Fix propertyBased test 2020-07-27 09:57:53 +03:00
Alex Plate
47bb155989 Replace IJ pair with kotlin Pair 2020-07-26 19:09:35 +03:00
Alex Plate
bd733b72a7 Write property based test for inc/dec 2020-07-26 19:04:58 +03:00
Alex Plate
e01327ab29 Update implementation for inc/dec 2020-07-26 19:04:46 +03:00
Alex Plate
2a10247653 Update implementation for inc/dec actions 2020-07-24 21:50:04 +03:00
kostkabrukowa
e3b7ed7657 VIM-1970 | Adds yank listeners, updates tests 2020-07-24 13:36:23 +02:00
Alex Plate
d4357ce801 Start implementing property based test for increment/decrement 2020-07-24 13:54:52 +03:00
Alex Plate
5bdeaed416 Fix number change for an incorrect oct number 2020-07-24 13:53:16 +03:00
Alex Plate
a44d93283f Refactor ChangeNumberIncAction.kt 2020-07-24 10:17:36 +03:00
Alex Plate
804f69e9c8 Fix Ctrl-A for selections 2020-07-23 21:12:28 +03:00
kostkabrukowa
086c2f201b VIM-1970 | Adds feature to change highlight background color 2020-07-22 17:29:54 +02:00
Alex Plate
0b22360891 Add a couple of tests for macros 2020-07-22 11:14:49 +03:00
Alex Plate
808fb24bbc Remove unused methods 2020-07-22 10:40:35 +03:00
Alex Plate
febd8eccf0 Update changelog 2020-07-22 10:25:45 +03:00
Alex Plate
22b1209eb5 Revert the behaviour of :reg command 2020-07-22 10:21:57 +03:00
Alex Plate
485c5501b3 [VIM-2075] Fix zR command 2020-07-22 10:20:54 +03:00
Alex Plate
81ceba8926 Optimize imports 2020-07-22 10:20:54 +03:00
Alex Pláte
3edd95da4e Merge pull request #240 from rieonke/VIM-2059
add support for putting & editing macros
2020-07-22 10:20:23 +03:00
kostkabrukowa
c1bb364cbe VIM-1970 | Removes box around yank highlight 2020-07-21 15:18:00 +02:00
Alex Pláte
db8fa31503 Merge pull request #246 from gaganis/add_resources_to_contributors_md
Add resource links helpful to contributors
2020-07-21 13:09:01 +03:00
Giorgos Gaganis
1a5a65dcb1 Add resource links helpful to contributors 2020-07-20 14:40:10 +03:00
Alex Plate
1c96f4491e Comment out failing tests 2020-07-20 12:45:56 +03:00
Alex Plate
30ddb4071f Add information about neovim integration 2020-07-20 11:19:35 +03:00
kostkabrukowa
dccc793fc7 VIM-1970 | Tries to remove thread related test failure 2020-07-19 16:54:05 +02:00
kostkabrukowa
f070a57148 VIM-1970 | Tries to remove thread related test failure 2020-07-19 16:08:21 +02:00
kostkabrukowa
2dde2cfb3b VIM-1970 | Refactores some tests 2020-07-19 15:34:28 +02:00
kostkabrukowa
e0fef4f017 VIM-1970 | Adds some tests and updates plugins docs 2020-07-19 13:30:49 +02:00
kostkabrukowa
3a40b9689c VIM-1970 | Fixes register bug 2020-07-18 19:12:08 +02:00
kostkabrukowa
3937a395b7 VIM-1970 | Moves functionality to extension class, adds possibility to dynamically set highlight duration 2020-07-18 18:51:07 +02:00
kostkabrukowa
7e3d532075 VIM-1970 | Clears highlighters after its removal 2020-07-18 11:30:52 +02:00
kostkabrukowa
4f658c4734 VIM-1970 | Draft of working solution to plugin vim-highlightedyank 2020-07-18 10:14:45 +02:00
Alex Plate
26aa753d9e Update syntax of TabCloseHandler.kt 2020-07-16 11:13:20 +03:00
Alex Plate
bd9c40aabc Add Rieon Ke to contributions list 2020-07-16 11:02:45 +03:00
Alex Pláte
008edc7e33 Merge pull request #244 from rieonke/VIM-2068
Implement tabc[lose] ex command
2020-07-16 10:57:59 +03:00
Alex Plate
2901bf45b7 Update the contributing doc 2020-07-15 10:11:51 +03:00
Alex Plate
24e7f655fc Add linewise motion type 2020-07-14 11:31:29 +03:00
Alex Plate
ab8de509d9 Create visual type for the text objects 2020-07-14 02:37:54 +03:00
Alex Plate
4fc4ed7675 Remove FLAG_MOT_CHARACTERWISE flag 2020-07-14 02:10:20 +03:00
Alex Plate
b35ad2bb9d Remove FLAG_MOT_BLOCKWISE 2020-07-14 02:03:08 +03:00
Alex Plate
895c7f1af1 Remove deprecated class 2020-07-14 01:37:08 +03:00
Alex Plate
fbca5712e3 Run some tests with neovim 2020-07-14 01:24:05 +03:00
Alex Pláte
58850960b8 Merge pull request #243 from strogiyotec/master
Fix alternative XDG path in README
2020-07-13 11:37:38 +03:00
Alex Plate
1c874d3957 Assert mode in neovim testing 2020-07-13 11:23:28 +03:00
Alex Plate
a42a19a174 Add converting mode to vim notation 2020-07-13 11:21:53 +03:00
Alex Plate
bbe39d5942 Convert command state to kt 2020-07-13 10:42:43 +03:00
Alex Plate
f5fb844442 Rename .java to .kt 2020-07-13 10:42:42 +03:00
Alex Plate
cb186a686e Fix typo in readme 2020-07-13 10:21:37 +03:00
Alex Plate
0c22bb2f4f Add logging for used ideavimrc file 2020-07-13 10:05:16 +03:00
Alex Plate
49756c5c2f Split editor setup and command typing 2020-07-12 21:35:54 +03:00
Alex Plate
7efc2e1631 Enable neovim testing only for testWithNeovim task 2020-07-12 16:41:13 +03:00
Alex Plate
ed23f5958c Rename doTestWithNeovim to doTest 2020-07-12 13:14:42 +03:00
Alex Plate
0ea53f3445 Remove unused doTest method 2020-07-12 13:09:27 +03:00
Alex Plate
4531b38c89 Annotate tests with TestWithoutNeovim 2020-07-12 12:58:51 +03:00
Alex Plate
2114725dab DotToTab is now extension function 2020-07-11 21:30:21 +03:00
Alex Plate
6877ffcb47 Use neovim for tests with VimBehaviourDiffers 2020-07-11 17:55:51 +03:00
Alex Plate
c4a3cc6718 Disable neovim test for tests that are marked with VimBehaviourDiffers 2020-07-11 17:32:00 +03:00
Alex Plate
a53ed1705a Extract NeovimTesting to the separate class 2020-07-11 16:58:27 +03:00
Alex Plate
ae13eed152 Move all tests to use neovim or describe the reason why it cant 2020-07-11 16:14:48 +03:00
Alex Plate
2c2c023200 Move some tests to neovim or describe the reason 2020-07-10 12:03:54 +03:00
Alex Plate
1dbe7735df Rename api to neovimApi 2020-07-10 10:49:12 +03:00
Alex Plate
a321e77e2e Support setreg for neovim 2020-07-10 10:48:46 +03:00
Alex Plate
9b52b496b2 Convert some tests to testing with neovim 2020-07-09 22:47:41 +03:00
Alex Plate
deeddc22be More methods use neovim 2020-07-09 21:55:21 +03:00
Alex Plate
680693448f Two more tests to work with neovim 2020-07-09 19:28:44 +03:00
Alex Plate
b4b5c0c77e Convert VimTestCase to kt 2020-07-09 18:01:02 +03:00
Alex Plate
3f3305706d Rename .java to .kt 2020-07-09 18:01:01 +03:00
Alex Plate
bd942e2ea1 Add initial implementation of neovim integration for tests 2020-07-09 17:36:57 +03:00
Alex Plate
a4c3fd8f0b Removed redundant class name 2020-07-09 17:35:20 +03:00
Alex Plate
f54fc09a37 Make modes the same as in vanilla vim 2020-07-09 12:45:34 +03:00
Alex Plate
fd6bdde5b0 Add merged commits to changeslog 2020-07-09 11:17:36 +03:00
Alex Plate
85c8007084 Update authors and changes 2020-07-09 11:14:03 +03:00
Alex Pláte
8a82d60172 Merge pull request #241 from patrick-elmquist/fix/reset-operator
Properly reset when pressing Esc in the middle of command
2020-07-09 11:10:02 +03:00
Alex Pláte
8b3f5d5e81 Merge branch 'master' into fix/reset-operator 2020-07-09 11:09:41 +03:00
Alex Pláte
e222294c6e Merge pull request #237 from adriafarres/master
Reset operator-pending commands on escape
2020-07-09 11:01:03 +03:00
Alex Plate
a04b536df8 Mark codeblocks as vim script 2020-07-08 12:05:13 +03:00
Alex Plate
2a0bd8722e Check is project is disposed in isTemplateActive 2020-07-07 17:56:52 +03:00
Patrick Elmquist
742187919f Properly reset with Esc in the middle of command 2020-07-07 11:09:56 +02:00
Alex Plate
aece559400 Remove unused deprecated methods 2020-07-07 12:07:11 +03:00
Alex Plate
8b6e41afb8 Remove [To Be Released] mark 2020-07-07 09:55:08 +03:00
Alex Plate
9eed5802d6 Prepare for the 0.58 release 2020-07-07 09:28:17 +03:00
Alex Plate
437932d023 Revert and move neovim to fork 2020-07-06 19:49:27 +03:00
Alex Plate
e8dd4f2e59 Default execution amount for property based tests 2020-07-06 19:06:33 +03:00
Alex Plate
93cdf3828b Add initial implementation of neovim integration for tests 2020-07-06 19:03:07 +03:00
Alex Plate
99a91404ce Revert "Add initial implementation of neovim integration for tests"
This reverts commit 15ebcb5b
2020-07-06 16:06:09 +03:00
Alex Plate
28ae3a104a Revert "Create neovim helper"
This reverts commit bc08839b
2020-07-06 16:05:55 +03:00
Alex Plate
bc08839b16 Create neovim helper 2020-07-06 15:47:15 +03:00
Alex Plate
15ebcb5b6a Add initial implementation of neovim integration for tests 2020-07-06 12:20:02 +03:00
Alex Plate
93fd8b0ff7 More complicated texts for property based tests 2020-07-03 21:49:24 +03:00
Alex Plate
6d0f280f19 Different initial position for caret 2020-07-03 21:36:09 +03:00
Alex Plate
3b26a4c26d Unignore property based test 2020-07-03 12:37:34 +03:00
Alex Plate
60315744d1 Fix exceptions in word under caret search 2020-07-03 12:35:43 +03:00
Alex Plate
40a6617816 Reset last search during property based tests 2020-07-03 12:11:23 +03:00
Alex Plate
a6964a37ac Fix exception during sentence start search 2020-07-03 11:54:25 +03:00
Alex Plate
9249ae073c Fix bug in anyNonWhitespace 2020-07-03 11:21:03 +03:00
Alex Plate
2a216728f1 Add KtDock for property based test 2020-07-02 14:00:27 +03:00
Alex Plate
b186cb585e Rename property based test 2020-07-02 13:59:39 +03:00
Alex Plate
4e26f62391 Cleanup property based test 2020-07-02 13:58:29 +03:00
Alex Plate
ddb502acb3 Fix exception for d]] command 2020-07-02 13:48:36 +03:00
Alex Plate
89cb6867d4 Tests for exiting insert mode 2020-07-02 13:27:27 +03:00
Alex Plate
f7892b33c8 Add method doTest that accepts string instead of list of KeyStrokes 2020-07-02 12:17:22 +03:00
Alex Plate
e04e0e69f3 Enable strict mode for tests 2020-07-02 12:15:57 +03:00
Alex Plate
7172faf7b5 Revert strict mode for all normalization methods
This should be done in a more smooth way
2020-07-02 12:09:56 +03:00
Rieon Ke
6e1761a1f5 impl tabc[lose] ex command 2020-07-02 15:21:19 +08:00
Alex Plate
baa7d4f098 Fix big word motion for last word 2020-07-01 20:49:34 +03:00
Alex Plate
baa5557010 Fix bug in dollar motion at the end 2020-07-01 20:47:16 +03:00
Alex Plate
5ce25ebc23 Fix deleting from the start of document 2020-07-01 20:47:14 +03:00
Alex Plate
1f4d5b0140 Really ignore property based test 2020-07-01 19:01:51 +03:00
Alex Plate
ddd1a0a5f0 Reset digraph during propertyBased tests 2020-07-01 19:01:08 +03:00
Alex Plate
802c887b60 Well, JetCheck is accessible from IJ sources 2020-07-01 15:55:01 +03:00
Alex Plate
e15fd8fa24 Add initial implementation of property based tests 2020-07-01 15:46:52 +03:00
Alex Plate
034cc3a725 Fix sentence motion with two new lines at start 2020-07-01 15:43:24 +03:00
Alex Plate
f34dcc0386 Add test for block selection on empty file 2020-07-01 15:02:39 +03:00
Alex Plate
a7b278553f Make typeText accessible from non vim test cases 2020-07-01 14:11:14 +03:00
Alex Plate
bd52eb12bd Fix star search on the last dot 2020-06-30 23:08:09 +03:00
Alex Plate
2d9a0a7559 Fix case yk for first line 2020-06-30 22:47:19 +03:00
strogiyotec
67d3698a40 Fix alternative XDG path in README 2020-06-30 11:30:10 -07:00
Alex Plate
7b40281875 Use strict mode in normalize methods 2020-06-30 20:27:41 +03:00
Alex Plate
dc1d01c91d Use ifEmpty method 2020-06-30 19:48:53 +03:00
Alex Plate
1e2618fddc Fix missing set command in docs 2020-06-30 10:22:26 +03:00
Alex Plate
85194b772b Vim.showMessage should show localized string 2020-06-30 10:22:12 +03:00
Alex Plate
5a048139d6 Extract action names and descriptions to message bundle 2020-06-30 10:07:37 +03:00
Alex Plate
7809842348 Remove unused command flags 2020-06-30 09:55:52 +03:00
Alex Plate
c7948374fd Cleanup 2020-06-29 13:30:23 +03:00
Alex Plate
f8afdf304b Use @TestFor instead of custom annotation 2020-06-29 12:21:06 +03:00
Alex Plate
29d617f7bb Fix missing mapping to FileHandler 2020-06-29 11:00:17 +03:00
Alex Plate
0e7b05e360 Continue cleanup 2020-06-29 10:57:53 +03:00
Alex Plate
5f18e99128 Action is not nullable for Command 2020-06-29 10:49:46 +03:00
Alex Plate
b2e0af587f Continue code cleanup 2020-06-29 10:42:02 +03:00
Alex Plate
b0b0817668 Code cleanup 2020-06-29 10:29:52 +03:00
Alex Plate
a6ef654c05 Add tests for exchange plugin with unnamed register in clipboard 2020-06-26 10:43:42 +03:00
Alex Plate
e428b9fa0a IdeaVim should save to unnamed register, not default one 2020-06-26 10:34:06 +03:00
Alex Plate
7008185735 Prepare to the 0.57.1 EAP release 2020-06-26 09:32:57 +03:00
Alex Plate
e4bbc7b962 Change type of string 2020-06-26 09:27:25 +03:00
Alex Plate
68704a2e3d Oh, we have an issue for vim-exchange 2020-06-25 19:44:24 +03:00
Alex Plate
6f0222c55e IntelliJ IDEA wants this properties in this order 2020-06-25 19:43:14 +03:00
Alex Plate
e0646541e8 Revert incompatible changes 2020-06-24 18:57:25 +03:00
Alex Plate
2d1fee0516 Add [version update] marks 2020-06-24 18:17:42 +03:00
Alex Plate
149899c34e Fix fold tests 2020-06-24 18:05:54 +03:00
Alex Plate
c6573b48c2 Convert test to kt 2020-06-24 18:01:34 +03:00
Alex Plate
476ba265d2 Rename .java to .kt 2020-06-24 17:59:42 +03:00
Alex Plate
9904de1946 Use fold action names from platform 2020-06-24 17:54:04 +03:00
Alex Plate
e73aec2e9e Update gradle wrapper 2020-06-23 23:53:59 +03:00
Alex Plate
d6658a1771 Update test 2020-06-23 11:09:25 +03:00
Alex Plate
583988034b Fix incompatibility for 202 eap 2020-06-23 09:55:06 +03:00
Rieon Ke
e57d6f3d97 fix test failure after changing to key notations from printable chars 2020-06-22 22:56:47 +08:00
Rieon Ke
55e553c2a0 add support for putting & editing macros 2020-06-22 22:47:35 +08:00
Alex Plate
44a3263a86 Update CHANGES.md 2020-06-22 11:23:04 +03:00
Alex Plate
80723a6cad Use latest-eap for local builds 2020-06-22 11:16:51 +03:00
Alex Plate
ca15c60d52 Remove the ability to download EAP from notification (access to plugin download mechanism was restricted) 2020-06-22 11:16:43 +03:00
Alex Pláte
8be075b36a Merge pull request #239
Use new API for relative line numbers
2020-06-22 11:16:30 +03:00
Alex Plate
ca203f8297 Add compatibility section 2020-06-21 21:58:59 +03:00
Alex Plate
934c3065b9 Add contributions welcome badge 2020-06-21 21:56:13 +03:00
Matt Ellis
5d95917727 Do not add line numbers when caret moves
Fixes VIM-2021
2020-06-20 19:00:59 +01:00
Alex Plate
a53b67f0ef Add option to disable IdeaVim in dialogs 2020-06-20 18:20:27 +03:00
Matt Ellis
eff13180b3 Update to new line number API
Fixes VIM-1934, fixes VIM-1852
2020-06-19 23:51:46 +01:00
Alex Plate
354aec4713 Disable IdeaVim in database table cells 2020-06-19 18:55:49 +03:00
Alex Plate
d2acb88dd4 Add experimental options to disable IdeaVim in one-line editors and enable escape in dialogs 2020-06-19 16:46:37 +03:00
Alex Plate
e96ece23b8 Add strictMode to enable additional checks in dev mode 2020-06-19 09:45:46 +03:00
Alex Plate
a3a3db9bc8 Extract ListenerSuppressor from ListenerManager 2020-06-19 09:29:49 +03:00
Alex Plate
ede0737261 Update changelog 2020-06-19 07:11:54 +03:00
Alex Plate
dc7efad420 Fix links in CONTRIBUTING.md 2020-06-16 15:34:43 +03:00
Alex Plate
423d51a6f9 Update documentation and contribution section 2020-06-16 15:28:43 +03:00
Alex Plate
c350650f9c Commands work on the last line 2020-06-09 03:41:38 +03:00
Alex Plate
8c3cbc49b3 Add tests for G command 2020-06-09 03:15:16 +03:00
Alex Plate
786b7193d0 getLineCount does now respect last new line character 2020-06-09 03:04:48 +03:00
Alex Plate
2a6acba07f S is now a synonym of cc and doesn't have a separate logic 2020-06-09 03:01:45 +03:00
Alex Plate
e5a5d112ca Deprecate getFileSize method 2020-06-07 20:47:15 +03:00
Alex Plate
9e2cfe548b [WIP] Removing usages of deprecated getFileSize 2020-06-07 19:50:32 +03:00
Alex Plate
f4d595f5c2 [WIP] Removing usages of deprecated getFileSize for SearchHelper 2020-06-07 19:42:01 +03:00
Alex Plate
c1e5b7d111 Remove deprecated usage in different files 2020-06-07 19:35:25 +03:00
Alex Plate
1eccc60cb3 Remove deprecated usage in moveTextHandler 2020-06-07 19:19:29 +03:00
Alex Plate
9f8095ae52 Formatting for MoveTextHandler.kt 2020-06-07 19:17:19 +03:00
Alex Plate
3674cf4aad [WIP] Removing usages of deprecated getFileSize for MotionGroup 2020-06-07 19:17:05 +03:00
Alex Plate
6b0d2157c8 [WIP] Removing usages of deprecated getFileSize for go command 2020-06-07 19:06:04 +03:00
Alex Plate
5a629d6256 [WIP] Removing usages of deprecated getFileSize in getting file info 2020-06-07 18:37:15 +03:00
Alex Plate
b8909f97aa [WIP] Removing usages of depracated getFileSize 2020-06-07 14:13:07 +03:00
Alex Plate
8c83ed6b55 Remove usage of deprecated getFileSize 2020-06-06 18:24:24 +03:00
Alex Plate
b161346171 Trying to get rid of getFileSize with allowEnd 2020-06-06 18:07:15 +03:00
Alex Plate
330e717518 Fix offset bounds 2020-06-04 10:24:18 +03:00
Alex Plate
dafc031ef6 Add checks for selectWord 2020-06-04 10:03:43 +03:00
Alex Plate
b00a2d3b79 Do not get findManager for nullable project
Fixes EA-231806
2020-06-04 09:36:53 +03:00
Alex Plate
c64ec34a1f Fix let mapleader="\<SPACE>" 2020-06-03 11:42:39 +03:00
Alex Plate
8ed709c7bb Use different file for storing local configs 2020-06-03 11:14:37 +03:00
Alex Plate
8e8e52c6f9 Create configuration migrators for IdeaVim 2020-06-03 11:05:48 +03:00
Alex Plate
f3e806c4a6 Create config package 2020-05-28 11:14:53 +03:00
Alex Plate
3bae95ae5b Fix typo 2020-05-28 11:07:10 +03:00
Alex Plate
0adde753f4 Preparation for 0.57.1 EAP release 2020-05-28 10:39:43 +03:00
Alex Plate
5f28a22666 Notes about unsupported features of exchange plugin 2020-05-22 15:06:20 +03:00
Alex Plate
a975b53894 Fix bug in test 2020-05-22 10:27:53 +03:00
Alex Plate
98aee5d0ab Fixes and more tests for vim exchange 2020-05-22 09:59:53 +03:00
Alex Plate
f57af8bf9e new badges 2020-05-20 23:53:06 +03:00
Alex Plate
c6c3b6643e Add linewise visual test for vim exchange plugin 2020-05-20 23:44:45 +03:00
Alex Pláte
af94079b92 Merge pull request #238 from citizenmatt/bug/prioritise-startup-activity
Prioritise startup activity to initialise IdeaVim early
2020-05-15 10:27:33 +03:00
Alex Plate
7203cc5cb3 Revert "Remove dynamic loader stopper"
This reverts commit 03493e23
2020-05-15 09:48:41 +03:00
Alex Plate
028423cf58 Make exchange extension repeatable 2020-05-14 10:37:37 +03:00
Alex Plate
2ead6af96a Fix visual operator with dot command 2020-05-14 10:37:16 +03:00
Matt Ellis
bf853e3c0c Initialise as soon as possible during startup 2020-05-13 17:38:09 +01:00
Adrià Farrés
660b243056 Reset operator-pending commands on escape
Suppose we have the text "|Hello, world", with | being the position of
the cursor. Pressing `d<Esc>dw` simply moves the cursor on top of the
comma instead of leaving the text as ", world".

This fixes issue VIM-1421.
2020-05-13 05:03:49 +02:00
Alex Plate
c85f41e65b Fix tests 2020-05-12 10:43:04 +03:00
Alex Plate
2759bed1b2 Update changelog 2020-05-12 10:15:55 +03:00
Alex Pláte
89c2a8ec9b Merge pull request #229 from fan-tom/VIM-921_exchange
VIM-921 vim-exchange plugin emulation
2020-05-12 10:08:53 +03:00
Alexey Gerasimov
aa2c1257ac Use ${c} instead of <caret> 2020-05-10 17:55:55 +05:00
Alexey Gerasimov
f9fa15b7ac Parenthesize command names 2020-05-10 14:51:16 +05:00
Alex Plate
93a9be41bc Update changes image 2020-05-09 23:16:02 +03:00
Alex Plate
ecd2f2032c Update changes 2020-05-09 23:08:15 +03:00
Alex Plate
de5ce5f635 Update ideavimrc reload implementation 2020-05-09 22:56:10 +03:00
Alex Plate
2eb6fd6819 Convert VimParser to kt 2020-05-09 22:56:10 +03:00
Alex Plate
22ea4e7ffa Rename .java to .kt 2020-05-09 22:56:10 +03:00
Alex Plate
3d98f3035f Reload vimrc 2020-05-09 22:56:10 +03:00
Alex Plate
ec1d6ac477 Update changelog 2020-05-08 11:51:29 +03:00
Alex Pláte
0dc236cb5b Merge pull request #231 from citizenmatt/feature/smooth-scrolling
Support smooth scrolling
2020-05-08 11:44:18 +03:00
Alex Plate
98349a49fd Temporally remove changelog 2020-05-08 11:40:27 +03:00
Alex Plate
ab8be2cada Update changes 2020-05-08 10:35:28 +03:00
Alex Pláte
b8c22d0928 Merge pull request #230 from fan-tom/VIM-1924_select_next_occurrence
VIM-1924
2020-05-08 10:30:34 +03:00
Alex Plate
c6cf77e4b8 Remove some deprecations 2020-05-06 09:53:04 +03:00
Alex Plate
6c0511a898 Update IdeaVim icons class 2020-05-06 09:38:47 +03:00
Alex Plate
366c862bcf Add loading/unloading to manual tests 2020-05-06 09:38:11 +03:00
Alex Plate
03493e2390 Remove dynamic loader stopper 2020-05-06 09:36:41 +03:00
Alex Plate
8f9c71dd55 Correct ex command and update changes 2020-05-06 08:49:07 +03:00
Alex Plate
11beb1e331 Add Piotr Mikulski to contributors list 2020-05-06 08:47:10 +03:00
Alex Pláte
01b4dc233a Merge pull request #227 from angelbot/buffer_command
Add support for buffer command
2020-05-06 08:46:41 +03:00
Alex Pláte
9f1e80e969 Merge pull request #224 from pmnoxx/master
Populate intelij navigation history together with ideavim jumplist
2020-05-06 08:30:06 +03:00
Alex Plate
7e319e11c6 Add valis to contributors list 2020-05-06 08:20:48 +03:00
Alex Plate
d11bf1c4d2 Update api 2020-05-06 08:14:34 +03:00
Alex Plate
3e2f18b757 Take back dynamic loader stopper 2020-05-06 08:14:33 +03:00
Alex Pláte
61677aa811 Merge pull request #233
Fix #VIM-1994
2020-05-06 08:13:40 +03:00
Alex Plate
fb04e835ef Update vimBehaviourDiffers annotation description 2020-05-02 13:13:51 +03:00
Alex Plate
bb133922d6 Update scheduledForRemoval because of quickfix release 2020-05-01 11:30:26 +03:00
Alex Plate
44dd5ef872 Convert VimExtensionRegistrar to kt 2020-05-01 11:16:28 +03:00
Alex Plate
bcc8e1c055 Rename .java to .kt 2020-05-01 11:13:54 +03:00
Alex Plate
71117ed335 Update registration of extension pointers 2020-05-01 11:06:29 +03:00
Alex Plate
de07fb3b74 Well, the status bar icon should be configurable 2020-05-01 10:38:23 +03:00
Alex Plate
e31d5a4dcf Initial cleanup after IJ requirements update 2020-04-30 11:43:24 +03:00
Alex Plate
e14aae761d Java plugin is always required 2020-04-30 11:33:11 +03:00
Alex Plate
47db2a247c Remove unused labels 2020-04-30 11:20:24 +03:00
Alex Plate
e449bb9692 Refactor ChangeGroup listeners 2020-04-30 10:41:29 +03:00
Alex Plate
b8fc72b6a7 Do not create project manager if it doesn't exist yet 2020-04-30 10:28:03 +03:00
Alex Plate
64c01c1bd1 Cleanup timer for java tests 2020-04-30 10:23:14 +03:00
Alex Plate
0a0e3df42b Extract statistic reporter into the separate file 2020-04-28 11:41:33 +03:00
Alex Plate
949c69a7e9 Refactor EditorGroup listeners 2020-04-28 11:41:33 +03:00
Alex Plate
69caf7a604 Refactor MotionGroup listeners 2020-04-28 11:41:32 +03:00
Alex Plate
23860ad5f9 Use project-level service as parent disposable 2020-04-28 11:41:32 +03:00
Alex Plate
ace5234d8d Update showcmd widget 2020-04-28 11:41:32 +03:00
Alex Plate
4654f821a9 Fix issue with listener removing 2020-04-28 11:41:32 +03:00
Alex Plate
927e0e7865 Update status bar widget to the new API 2020-04-28 11:41:32 +03:00
Alex Plate
d47c9735b5 Use concurrent list to store listeners 2020-04-28 11:41:31 +03:00
Alex Plate
6100433636 Move StatusBar.kt to a different package 2020-04-28 11:41:31 +03:00
Alex Plate
43f79e8183 Update minimal required version of IJ 2020-04-28 11:41:31 +03:00
Alex Plate
f58fda0c87 Add .DS_Store to gitignore 2020-04-28 11:41:31 +03:00
Alex Plate
64b49e37d7 Add link to gitter chat 2020-04-28 11:41:31 +03:00
Alex Plate
e44418d410 Add icon in .idea 2020-04-28 11:41:30 +03:00
Alex Plate
ca8d05ff13 Clear keymap on reset 2020-04-28 11:41:30 +03:00
Alex Plate
626871e34d Register topics via xml file 2020-04-28 11:41:29 +03:00
Alex Plate
4b659fe643 Prepare for 0.57 release 2020-04-28 11:18:56 +03:00
Alex Plate
d5055506b0 Fix regex for slack notification 2020-04-22 09:56:39 +03:00
Alex Plate
55f54b2e82 Prepare for 0.56.1 release 2020-04-22 09:31:38 +03:00
Alex Plate
1b18065e68 Small refactoring of handlers 2020-04-18 17:43:50 +03:00
Alex Plate
053dc02152 EditorActionHandlerBase doesn't take null as caret 2020-04-18 16:40:07 +03:00
Alex Plate
b8cb4a1295 Move IdeaVim icon in the README 2020-04-17 11:34:28 +03:00
Alex Plate
cd2cbf68a1 Update README 2020-04-17 11:31:17 +03:00
Alex Plate
73f3be8af0 Include copyright into repository 2020-04-17 11:17:34 +03:00
Alex Plate
8cce059fb4 Write tests for yanking and pasting with number register 2020-04-17 10:48:09 +03:00
Alex Plate
db641ec6f6 Add runforprogram to contributors list 2020-04-17 10:27:11 +03:00
Alex Plate
9d8239b68d Update changelog 2020-04-17 10:19:56 +03:00
Alex Pláte
4ec0bac275 Merge pull request #234 from runforprogram/master
[VIM-1991] fix >0 number register not work
2020-04-17 10:19:49 +03:00
Alex Plate
613c234cfb Fix related tests 2020-04-16 11:31:22 +03:00
Alex Plate
83dca71f69 [VIM-1992] Fix shift-letter mappings 2020-04-16 11:20:26 +03:00
Alex Plate
f7ea9cdb6e Convert mapping tests to kotlin 2020-04-16 11:03:40 +03:00
Alex Plate
762cb1804f Rename .java to .kt 2020-04-16 11:02:38 +03:00
run
962cfb7ae2 [VIM-1991] fix >0 number register not work 2020-04-16 15:45:57 +08:00
Valery Isaev
9bc2ec7d8a Fix #VIM-1994 2020-04-13 15:02:49 +03:00
Alex Plate
8415d104e9 Clear registers before test 2020-04-10 11:03:14 +03:00
Alex Plate
abd0f9b961 Update dependencies 2020-04-10 11:00:47 +03:00
Alex Plate
0a4683d908 Clean up repository for the release 2020-04-09 11:06:21 +03:00
Alex Plate
4c280b0193 Run manual tests 2020-04-09 10:51:32 +03:00
Alex Plate
e88a3deafd Fix replace with clipboard register 2020-04-09 10:25:42 +03:00
Matt Ellis
7de08e08d0 Support smooth scrolling 2020-04-07 17:30:18 +01:00
Alex Plate
bd172b3300 Run manual tests 2020-04-07 11:35:58 +03:00
Alex Plate
95c7a13cb5 Turning plugin on should be performed after commands registration 2020-04-07 11:27:24 +03:00
Alex Plate
b1ddf03385 Add notes to changelog about Keep a Changelog and Semantic Versioning. 2020-04-06 10:25:50 +03:00
Alex Plate
a83c326736 Add logging for activating ex panel 2020-04-03 08:23:55 +03:00
Alex Plate
b1acb56247 Fix exception for ciw on last char in file 2020-03-28 15:57:54 +03:00
Alex Plate
caa4731a13 Fix exception when using text objects on empty files 2020-03-28 15:39:06 +03:00
Alex Plate
5b0ece7a91 ReplaceWithRegister for clipboard registers 2020-03-23 10:34:53 +03:00
Alexey Gerasimov
a4cd94847e Return VISUAL_BLOCK submode from autodetect only if 'Add Selection for NextOccurrence' was not performed previously 2020-03-22 16:45:45 +05:00
Alexey Gerasimov
a0a7386b51 Remove highlight after command is executed or canceled 2020-03-21 20:08:57 +05:00
Alexey Gerasimov
535a72000f Cleanup 2020-03-21 20:08:37 +05:00
Alexey Gerasimov
60531b9cd2 Add methods in RegisterGroup and VimExtensionFacade to setRegister with specified selection type 2020-03-21 20:04:30 +05:00
Alexey Gerasimov
8f86ad696d Register VimExchange extension 2020-03-21 20:04:30 +05:00
Alexey Gerasimov
c9bda98a6a Add VimExchange extension tests 2020-03-21 20:04:30 +05:00
Alexey Gerasimov
9ea08da133 Add VimExchange extension 2020-03-21 17:09:02 +05:00
Alexey Gerasimov
5762ec0518 Add marks last changed end position test 2020-03-21 17:09:02 +05:00
Alexey Gerasimov
7db74460fa Fix marks range end position handling, as excluded 2020-03-21 17:09:02 +05:00
Alex Plate
c8d64e0a06 Update changelog 2020-03-20 11:44:27 +03:00
Alex Plate
1a3dea0de6 Update slack notification format 2020-03-20 11:42:40 +03:00
Alex Plate
17b642280e Update gradle wrapper properties 2020-03-20 11:42:14 +03:00
Alex Plate
1c1717b78b Add kk to the contributions list 2020-03-20 10:38:30 +03:00
Alex Plate
4bbbdf8108 Fix ReplaceWithRegister to the empty line 2020-03-20 10:35:08 +03:00
Alex Pláte
04a193309d Merge pull request #228 from kevin70/master
fixed #VIM-570
2020-03-20 10:34:58 +03:00
Alex Plate
f106ffa176 Support ReplaceWithRegister plugin emulation 2020-03-19 11:25:30 +03:00
Alex Plate
8d5d099542 Update icon on ideastatusicon option change 2020-03-19 09:13:49 +03:00
kk
4849992ca9 fixed #VIM-570 2020-03-18 18:49:55 +08:00
Alex Plate
623105650e PutTextAction refactor 2020-03-17 09:43:40 +03:00
Alex Plate
5e2c01daa6 Rename PutTextAction.kt 2020-03-17 09:32:46 +03:00
Alex Plate
58bf3a4d30 Merge Put actions into one file 2020-03-17 09:28:49 +03:00
Alex Plate
2d434c38b9 Move test to correct directory 2020-03-15 16:53:57 +03:00
Alex Plate
246f5cd8cf VIM-1911 Lookup keys respect IDE handler 2020-03-14 23:03:42 +03:00
Alex Plate
5a174d21f1 Update CHANGES 2020-03-14 18:06:58 +03:00
Alex Plate
e632c653f6 Add showcmd text to widget label 2020-03-14 18:05:38 +03:00
Alex Plate
174d17b088 VIM-1958 Fix X command for linewise selection 2020-03-14 18:00:45 +03:00
Alex Plate
3a35c931e4 Unignore some tests 2020-03-14 17:42:33 +03:00
Alex Plate
b768b26c85 Remove some warnings 2020-03-14 17:28:14 +03:00
Alex Plate
123ce6ebaf Get rid of deprecated KeyEvents 2020-03-14 15:55:01 +03:00
Alex Plate
276c8db512 Fix some tests 2020-03-12 11:48:24 +03:00
Alex Plate
f898b8d181 Fix mappings to <S-Space> 2020-03-12 11:25:14 +03:00
Alex Plate
e9f9e531e4 Convert vim typed action to kt 2020-03-12 11:04:35 +03:00
Alex Plate
a7d813cb86 Rename .java to .kt 2020-03-12 11:04:35 +03:00
Alex Plate
75b6eedb12 Remove unused class 2020-03-12 10:33:52 +03:00
Alex Plate
ec6860aa90 Change the label of showcmd widget 2020-03-12 10:03:39 +03:00
Alex Plate
5cf661c6ae Fix exception during command typing 2020-03-10 14:58:35 +03:00
Alex Plate
8c62caae7c Fix compilation errors 2020-03-10 11:30:10 +03:00
Alex Plate
cc6fe21af6 Update CHANGES.md 2020-03-10 10:28:17 +03:00
Alex Pláte
1902151efa Merge pull request #220 from citizenmatt/feature/showcmd
Implement showcmd
2020-03-10 10:24:36 +03:00
Alex Pláte
b7af1e6289 Merge branch 'master' into feature/showcmd 2020-03-10 10:24:06 +03:00
Alex Plate
0c77b320db VIM-570 Print non-ascii characters in ex panel 2020-03-06 13:03:28 +03:00
Alex Plate
ee41adc4e9 Update kotlin version 2020-03-06 09:54:57 +03:00
Alex Pláte
93462d7505 Merge pull request #221 from igrekster/master
argtextobj: support bracket pairs configuration via let g:argtextobj_pairs="..."
2020-03-06 09:54:33 +03:00
Alex Plate
2f5946640e Update changelog 2020-03-04 10:44:28 +03:00
Alex Plate
7cdb7dc308 Fix some tests for older versions of IDE 2020-03-04 10:32:05 +03:00
John Weigel
2f148255f7 Cleanup 2020-03-03 23:14:11 -06:00
John Weigel
cb00b8b335 Merge remote-tracking branch 'upstream/master' into buffer_command 2020-03-03 23:10:00 -06:00
John Weigel
559b56c8a2 Minor updates 2020-03-03 23:05:32 -06:00
Alex Plate
c0038d0373 Add John Weigel to contributors list 2020-03-03 11:11:09 +03:00
Alex Plate
2820decb5e Rename variable 2020-03-03 11:07:07 +03:00
Alex Pláte
c64f368e6a Merge pull request #217 from angelbot/master
Add support for buffer list (buffers, files, ls)
2020-03-03 11:05:43 +03:00
Alex Plate
b7c8e84f5e Minor cleanup 2020-03-03 11:03:36 +03:00
Alex Plate
5acf6c9158 Convert VimPlugin to service 2020-02-28 21:11:12 +03:00
Alex Plate
a8197b0c84 Convert runnableHelper to kt 2020-02-28 18:15:40 +03:00
Alex Plate
2e03062c24 Rename .java to .kt 2020-02-28 18:15:39 +03:00
Alex Plate
7fb60a185b Update gradle version 2020-02-28 17:35:46 +03:00
Alex Plate
0327ea972b Make Open ideavimrc dumb aware 2020-02-28 10:29:38 +03:00
Alex Plate
561cc77ecc Move related methods closer to each other 2020-02-28 09:42:22 +03:00
Alex Plate
a1ab4acd14 Add comment for EPs 2020-02-28 09:39:33 +03:00
Alex Plate
d4939803da Update changelist 2020-02-27 14:27:13 +03:00
Alex Pláte
730ce3aca9 Merge pull request #226 from agrison/master
Implement the vim-textobj-entire plugin emulation.
2020-02-27 14:23:31 +03:00
Alexandre Grison
1893dc6afd Fixes from feedback.
Renamed `entiretextobj` to `textobj-entire` including packages and class name.
Renamed `<Plug>IncludingLeadingTrailing` to `<Plug>textobj-entire-a`.
Renamed `<Plug>IgnoringLeadingTrailing` to `<Plug>textobj-entire-i`.
Avoid iterating too much the buffer content.
2020-02-27 11:46:23 +01:00
igrekster
6ec39314ee argtextobj: support bracket pairs configuration via let g:argtextobj_pairs="..."
argtextobj by default only handles arguments inside parenthesis. This is
very limiting when editing C++ source files. This change allows the list
of bracket pairs to be configurable via a global IdeaVim variable. The
variable takes effect immediately.
2020-02-26 10:32:21 +11:00
John Weigel
158cea51db Add override test 2020-02-23 22:02:06 -06:00
John Weigel
33d34f35e9 Merge branch 'master' into buffer_command 2020-02-23 21:49:22 -06:00
John Weigel
1f4f40fd7c Merge remote-tracking branch 'upstream/master' 2020-02-23 21:48:30 -06:00
John Weigel
7c908b247e Merge branch 'master' into buffer_command 2020-02-23 21:14:21 -06:00
John Weigel
c87528939b Fix buffer numbering bug with filters.
Update test to cover fix.
2020-02-23 21:11:36 -06:00
John Weigel
41c822fde1 Add support for buffer command. 2020-02-23 20:45:06 -06:00
Alex Plate
e56646105d Add test bages 2020-02-21 12:05:05 +03:00
Alex Plate
b8a40d93f7 Now every service handles it's state separately. VimLocalConfig is a service 2020-02-21 12:03:02 +03:00
Alexandre Grison
4bfc025248 Fixes typo 2020-02-20 12:24:38 +01:00
Alexandre Grison
36f6027b0e Implement the vim-textobj-entire plugin emulation. 2020-02-20 12:13:55 +01:00
Alex Plate
e032377e68 Update annotations 2020-02-20 10:35:09 +03:00
Alex Plate
929eee4a12 Add comments for NotificationService.kt 2020-02-20 10:13:47 +03:00
Alex Plate
61ce50264a Add Alexey Gerasimov to contributors list 2020-02-19 12:02:10 +03:00
Alex Plate
48927b1207 Small corrections after merge 2020-02-19 11:58:37 +03:00
Alex Plate
0820893dc6 Update annotations to java 8 style 2020-02-19 11:58:27 +03:00
Alex Pláte
dd6079cfa6 Merge pull request #219 from fan-tom/bugifx/1008
Fix block actions (i.e ci{) in presence of quotes (VIM-1008)
2020-02-19 11:53:19 +03:00
Piotr Mikulski
2a6569742d populate intelij navigation history together with ideavim jumplist 2020-02-17 17:55:45 -08:00
John Weigel
3d7d75bae4 Merge remote-tracking branch 'upstream/master' 2020-02-16 21:11:02 -06:00
John Weigel
6da4d0ce5e Rework buffer list to more closely mimic vim. 2020-02-16 20:40:17 -06:00
Alex Plate
4994d70b1a Update changelog 2020-02-14 12:42:22 +03:00
Alex Plate
c873081dc3 Merge pull request #133 from igrekster/master
Add argtextobj.vim plugin emulation
2020-02-14 12:30:13 +03:00
Alex Plate
070237f77f Add [To Be Released] label 2020-02-14 12:24:34 +03:00
Alex Plate
eb01b25f35 Fix some cases by disabling [, { and < support (what is not supported in the original plugin) 2020-02-14 12:23:32 +03:00
Alex Plate
c0c9cfaf86 Get rid of several getText methods 2020-02-14 10:54:22 +03:00
Alex Plate
304f860eb2 Use java 8 JetBrains annotations 2020-02-14 10:32:18 +03:00
Alex Plate
2f18b25593 Update gradle dependencies 2020-02-14 10:17:00 +03:00
Matt Ellis
14c8b6a248 Fix nullability compile error on 2019.2 2020-02-11 10:29:02 +00:00
Alex Plate
adaa683e58 Use 2020.1 build for README label 2020-02-11 10:11:52 +03:00
Matt Ellis
9b71215cde Merge branch 'master' into feature/showcmd 2020-02-11 00:24:29 +00:00
Matt Ellis
8be572f976 Update set-commands and changes 2020-02-11 00:22:29 +00:00
Matt Ellis
4f43bcffb9 Replace SelectRegisterAction with direct parsing
It's not a command, but part of a command
2020-02-11 00:08:08 +00:00
Matt Ellis
29e4dc5fb5 Show digraph entry in showcmd 2020-02-10 23:38:02 +00:00
Matt Ellis
0dc95cb13c [VIM-434] Display showcmd in status bar
IdeaVim has showcmd enabled by default. Vim has it enabled by default, but disabled for Unix, with concerns about slow terminals. It is enabled by defaults.vim
2020-02-10 11:35:52 +00:00
igrekster
5ee0a93675 Add argtextobj.vim plugin emulation 2020-02-09 11:57:54 +11:00
Alex Plate
767b3c4a39 Add some scheduled for removal annotations 2020-02-08 20:57:44 +03:00
Alex Plate
bb948a463c Add option to make status bar icon gray 2020-02-08 20:56:13 +03:00
Alex Plate
e4e9a03d0a Add information about why EPs are used to register actions and ex handlers. 2020-02-08 18:14:04 +03:00
Alex Plate
50ba386f59 Write tests for dynamic extensions 2020-02-08 18:07:20 +03:00
Alex Plate
79d0565c2d Update some tests 2020-02-08 16:09:39 +03:00
Alex Plate
bcc9b0a7b1 Remove plugin owner after extension removal 2020-02-08 15:38:54 +03:00
Alex Plate
2c8f4940b9 Support EasyMotion extension 2020-02-08 15:25:24 +03:00
Alex Plate
41876cf8fd Make vimExtension dynamic 2020-02-08 14:56:39 +03:00
Alex Plate
f6fd0b52f0 Rename RequiredShortcutOwner to MappingOwner 2020-02-08 14:36:35 +03:00
Alex Plate
843faa7cc6 Make plugins disposable 2020-02-08 14:36:01 +03:00
Alexey Gerasimov
a8af2c3242 Fix Set creation 2020-02-07 22:24:46 +05:00
Alexey Gerasimov
e5bfad974e Copyright and comment 2020-02-07 21:50:06 +05:00
Alexey Gerasimov
59d87e0c94 More tests 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
50c2d04503 Migrate to new checkInString 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
480de62686 Improve existing checkInString 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
955b501058 Make Direction enum public 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
d985527624 Rewrite checkInString in Kotlin 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
afbe7f0e69 Add findPositionOfFirstCharacter function 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
94e65ddce6 Use isQuoteWithoutEscape when findCharacterPosition to detect escaped char 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
cb9f144255 isQuoteWithoutEscape small improvement 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
ac84624faa Use Direction enum instead of int 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
c2196785e7 Add tests 2020-02-07 19:48:40 +05:00
Alexey Gerasimov
30097fbae6 Assume that caret is in string/char only if there is closing char 2020-02-07 19:48:40 +05:00
Alex Plate
c295dd5c62 Use special class for storing requiredShortcuts 2020-02-07 16:07:14 +03:00
Alex Plate
373fef2824 Refactor MappingInfo 2020-02-07 12:42:36 +03:00
Alex Plate
cfc255bf2b Rename .java to .kt 2020-02-07 12:41:57 +03:00
Alex Plate
ea7e58535b Fix tests 2020-02-07 12:41:47 +03:00
Alex Plate
ea342a8e4f Preparation for 0.55.1 EAP release 2020-02-04 18:55:31 +03:00
Alex Plate
0b67dd1d05 Merge pull request #218 from citizenmatt/feature/registers
Macros record input keystrokes, not mapped keystrokes

This PR fixes VIM-1835 by recording input keystrokes for macros instead of the mapped keystrokes.

This PR is also required as a stepping stone for showcmd support (VIM-434), as both issues require refactoring KeyHandler#handleKey, and I thought it best to separate the issues.

A few other things were fixed as part of this PR:

VIM-1899 - support an argument to the :registers command
VIM-1900 - improve output of :registers, :marks, :jumps and :ascii
2020-02-04 18:46:15 +03:00
Alex Plate
1519faef81 Fix compatibility with the IdeaVim-EasyMotion 2020-02-04 11:13:38 +03:00
Matt Ellis
9fad4a74ed Remove keys from Command
Also refactors PutVisualTextAction
2020-02-04 00:36:59 +00:00
Matt Ellis
24f023c8b3 Update changes 2020-02-03 23:35:53 +00:00
Matt Ellis
3eb46114f8 Remove Shortcut class 2020-02-03 23:35:04 +00:00
Matt Ellis
6a5fd30531 Remove unnecessary empty shortcut registration 2020-02-03 23:31:18 +00:00
Matt Ellis
96e83150e5 Ensure :jumps formats non-printable characters correctly
Also ensures long output lines are truncated
2020-02-03 22:50:39 +00:00
Matt Ellis
b2b65c65b9 Ensure :ascii formats non-printable characters correctly 2020-02-03 22:50:38 +00:00
Matt Ellis
5b028b4fa3 Ensure :marks formats non-printable characters correctly
Also adds a bunch of tests, and fixes offset for ^ and ] registers
2020-02-03 22:50:38 +00:00
Matt Ellis
8f4e1b3409 [VIM-1900] Ensure :reg formats non-printable characters correctly 2020-02-03 22:50:38 +00:00
John Weigel
ff209d0120 Merge remote-tracking branch 'origin/master' 2020-02-01 22:38:18 -06:00
John Weigel
ea2fe618b5 Add support for buffer list (buffers, files, ls). 2020-02-01 22:33:12 -06:00
Matt Ellis
3403cdf84b [VIM-1835] Macros record actual keystrokes not mapped 2020-02-01 11:36:40 +00:00
Alex Plate
4f9a6f3a7b Make vimExCommand EP dynamic 2020-01-31 19:14:11 +03:00
Alex Plate
c8d6d233e5 Revert [Make vimExCommand EP dynamic] 2020-01-31 18:15:55 +03:00
Alex Plate
0cfb65a19a Make vimExCommand EP dynamic 2020-01-31 17:59:07 +03:00
Alex Plate
384d917021 Make vimAction EP dynamic 2020-01-31 12:05:46 +03:00
Alex Plate
f1c8c67789 Use enumMap to store key roots 2020-01-31 10:17:56 +03:00
Alex Plate
75e8f4ec6d Deny vimAction extension point contributions from other plugins 2020-01-30 21:23:23 +03:00
Matt Ellis
d1d0323112 [VIM-1899] Add argument to :registers command
Also introduce testable clipboard handling
2020-01-27 10:47:37 +00:00
Alex Plate
ab31dae582 Add todo for VimLocalConfig 2020-01-27 12:25:45 +03:00
Alex Plate
64f176cedb Control dynamic loading of plugin via the application component 2020-01-27 11:45:26 +03:00
Alex Plate
9e921d6621 Move plugin.xml includes into separate folder 2020-01-27 11:40:42 +03:00
Alex Plate
a4b98f2848 Update CHANGES.md 2020-01-27 11:36:30 +03:00
Alex Plate
0d190e4a63 Update copyright 2020-01-27 11:35:00 +03:00
Alex Plate
13cdb7cc35 Merge pull request #215 from citizenmatt/refactor/command-state
Refactor key handler state
2020-01-27 11:34:48 +03:00
Alex Plate
ca60c467f3 Capability for tests in 2020.1 2020-01-27 11:11:05 +03:00
Alex Plate
01abba7d2c Use 201-EAP version for build 2020-01-27 11:11:05 +03:00
Alex Plate
80074177fc Make ascii doc a bit clearer 2020-01-27 11:11:05 +03:00
Alex Plate
bf67f8984a Add info about easymotion plugin 2020-01-25 16:32:43 +03:00
Alex Plate
b2267c4b6c Add information about non-released actions 2020-01-24 13:41:47 +03:00
Alex Plate
c80d69a31c Add note about VIM-987 into changelog 2020-01-24 13:41:47 +03:00
Alex Plate
1b7c3f0da3 Merge pull request #214 from sumoooru2/master
Implement c_CTRL-N/P
2020-01-22 10:56:37 +03:00
Alex Plate
c1ff6e1498 Prepare to the 0.55 release 2020-01-20 20:15:36 +03:00
Alex Plate
50c04ce71c Change LookupKeys implementation 2020-01-20 15:29:40 +03:00
Alex Plate
bc6ff6bc8e Convert characterHelper to kt 2020-01-19 17:55:15 +03:00
Alex Plate
93bcf2a7e8 Rename .java to .kt 2020-01-19 17:55:14 +03:00
Alex Plate
c3b503adff Set up a mechanism to define the KeyStrokes that should work with active lookup 2020-01-19 17:34:12 +03:00
Alex Plate
ecdcbdda10 Put all range files into the ranges directory 2020-01-16 15:13:56 +03:00
Alex Plate
b97c9a5ed0 Rename .java to .kt 2020-01-16 15:13:55 +03:00
Alex Plate
84a6843a7b Convert ExOutputModel to kt 2020-01-16 12:26:39 +03:00
Alex Plate
17eed7467c Rename .java to .kt 2020-01-16 12:26:39 +03:00
Alex Plate
310ffc849c Convert ExCommand to kt 2020-01-16 12:23:43 +03:00
Alex Plate
3e6756160a Rename .java to .kt 2020-01-16 12:23:43 +03:00
Alex Plate
563e809a2d Put all exceptions to single kt file 2020-01-16 12:18:20 +03:00
Alex Plate
86ec3f3bcd Rename .java to .kt 2020-01-16 12:17:54 +03:00
Matt Ellis
7b225cb824 Remove CHAR_OR_DIGRAPH state 2020-01-07 20:14:56 +00:00
Matt Ellis
562e0b06df Refactor expected argument type 2020-01-07 19:54:20 +00:00
Matt Ellis
51ce064507 Simplify and document handling of EX_STRING 2020-01-07 19:09:58 +00:00
Matt Ellis
ebaeff9b4d Merge branch 'master' into refactor/command-state 2019-12-30 16:31:24 +00:00
Matt Ellis
8889e799ca Refactor setting command argument 2019-12-30 16:26:32 +00:00
Matt Ellis
668705e475 Refactor handling of duplicate operator chars 2019-12-30 16:08:04 +00:00
Matt Ellis
e428e909bf Simplify handling of count editing characters 2019-12-30 16:08:00 +00:00
Matt Ellis
d755c751c2 Move fix up of command/motion count 2019-12-30 15:36:52 +00:00
Matt Ellis
312c547412 Rearrange methods 2019-12-30 15:30:33 +00:00
Matt Ellis
48d30f2a3c Extract CommandBuilder 2019-12-30 15:28:15 +00:00
Matt Ellis
d8ed30df14 Encapsulate command node state 2019-12-27 18:09:50 +00:00
Matt Ellis
50176cb267 Move mapping mode to mapping state 2019-12-27 16:19:57 +00:00
Matt Ellis
5898d21857 Remove unnecessary annotations 2019-12-27 12:44:13 +00:00
Matt Ellis
e3839bc0b2 Remove unused command flags override 2019-12-27 12:42:00 +00:00
Matt Ellis
f97555d4a8 Rename executing command 2019-12-27 12:34:13 +00:00
Matt Ellis
79bdca9769 Move command stack to per-editor state 2019-12-27 12:26:10 +00:00
sumoooru2
138c2956ac Implement c_CTRL-N/P 2019-12-27 19:37:01 +09:00
Matt Ellis
ced457dd94 Move command state to per editor state 2019-12-27 10:33:22 +00:00
Matt Ellis
784fc6c6fa Rename mode state class and make immutable 2019-12-27 10:10:39 +00:00
Alex Plate
b4e0ec282f Convert vim surround plugin to kt 2019-12-26 16:45:42 +03:00
Alex Plate
cbf7dfabcb Rename .java to .kt 2019-12-26 16:45:42 +03:00
Alex Plate
b8eb55d965 Update changes 2019-12-24 11:00:17 +03:00
Alex Plate
30662a8110 Comment out incompatible test 2019-12-24 10:48:55 +03:00
Alex Plate
69a273982f Fix 183 capability 2019-12-24 10:34:57 +03:00
Matt Ellis
f817e6cb7f Extract mapping state 2019-12-23 16:49:27 +00:00
Alex Plate
eef1b25e9f Convert common package to kt 2019-12-23 17:20:15 +03:00
Alex Plate
622de851fe Rename .java to .kt 2019-12-23 17:20:15 +03:00
Alex Plate
8cecb61d28 Convert selection type to kt 2019-12-23 16:21:39 +03:00
Alex Plate
77d8d27dfa Rename .java to .kt 2019-12-23 16:21:39 +03:00
Alex Plate
340f259b17 [VIM-1884] Add CTRL-J to the list of keys working with lookup 2019-12-23 15:54:52 +03:00
Alex Plate
5cf68a7f06 [VIM-1878] Update submode in case of active template 2019-12-23 12:54:57 +03:00
Matt Ellis
6a622565ca Move mapping availability check 2019-12-19 17:00:38 +00:00
Alex Plate
0ae5abcd0c [VIM-1874] Add possibility to execute option listener after adding 2019-12-19 18:54:51 +03:00
Alex Plate
b6cecb2125 Refactor options change listener 2019-12-19 18:54:50 +03:00
Alex Plate
3aa3a9c9a8 Get rid of unused name sorter 2019-12-19 18:13:51 +03:00
Alex Plate
2c11ed43e4 [VIM-1875] Fix isk loading on startup 2019-12-19 17:12:29 +03:00
Matt Ellis
23126aeb6d Extract abandoned mapping sequence handling 2019-12-19 11:49:53 +00:00
Matt Ellis
61fd67472b Extract completed mapping sequence handling 2019-12-19 11:39:34 +00:00
Alex Plate
be0bee672e Merge pull request #213 from hajdamak/VIM-664-fix
VIM-664 Fix usage of invalid path separator
2019-12-19 11:26:53 +03:00
Matt Ellis
105c073e1f Extract unfinished mapping sequence handling 2019-12-19 01:11:24 +00:00
Rafał Hajdacki
b695e3c646 Fix usage of invalid path separator 2019-12-18 14:09:40 +01:00
Alex Plate
33840dc5cd Add info about [Version Update] YouTrack tag 2019-12-18 10:58:31 +03:00
Matt Ellis
200f3484b6 Move current arg type state to per-editor 2019-12-10 20:20:13 +00:00
Matt Ellis
6a40eb48fe Remove forward search state 2019-12-10 20:14:32 +00:00
Matt Ellis
fb3e9ce9f3 Move captured keys to per-editor state 2019-12-10 20:11:08 +00:00
Matt Ellis
91865460a2 Move DigraphResult to top level class 2019-12-10 20:05:12 +00:00
Matt Ellis
644afe541e Move <BS> digraph state to DigraphSequence 2019-12-10 20:01:42 +00:00
Matt Ellis
232303f06a Refactor to maintain digraph state at all times
Also allows <C-K> and <C-V>/<C-Q> to be remapped
2019-12-10 19:59:11 +00:00
Matt Ellis
280845610b Move digraph sequence state to per-editor 2019-12-10 19:32:25 +00:00
Matt Ellis
6108c9d6d2 [VIM-1284] Allow mapping numbers
Includes special case for 0 while entering counts. See :help :map-modes.
Also fixes issues when both operator and motion have a count - value should be multiplied, not appended (e.g. 3d2w is the same as 6dw, no 32dw!). See :help operator
2019-12-10 19:31:38 +00:00
Matt Ellis
ce04e995ee Move command count state per editor 2019-12-10 19:31:23 +00:00
1458 changed files with 123208 additions and 53931 deletions

14
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "weekly"
day: "wednesday"
- package-ecosystem: "maven"
directory: "/.teamcity/"
schedule:
interval: "weekly"
day: "wednesday"

67
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@@ -0,0 +1,67 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '44 12 * * 4'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'java' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

42
.github/workflows/mergePr.yml vendored Normal file
View File

@@ -0,0 +1,42 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
name: Update Changelog On PR
on:
pull_request:
types: [ closed ]
jobs:
build:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Update authors
id: update_authors
run: ./gradlew updateMergedPr -PprId=${{ github.event.number }}
env:
GITHUB_OAUTH: ${{ secrets.AUTOMATION_TOKEN }}
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: master
commit_message: Update changelog after merging PR
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
file_pattern: CHANGES.md

77
.github/workflows/runUiTests.yml vendored Normal file
View File

@@ -0,0 +1,77 @@
name: Run UI Tests
on:
workflow_dispatch:
schedule:
- cron: '0 12 * * *'
jobs:
build-for-ui-test-mac-os:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Setup Java
uses: actions/setup-java@v2.1.0
with:
distribution: zulu
java-version: 11
- name: Setup FFmpeg
uses: FedericoCarboni/setup-ffmpeg@v1
with:
# Not strictly necessary, but it may prevent rate limit
# errors especially on GitHub-hosted macos machines.
token: ${{ secrets.GITHUB_TOKEN }}
- name: Build Plugin
run: gradle :buildPlugin
- name: Run Idea
run: |
mkdir -p build/reports
gradle :runIdeForUiTests > build/reports/idea.log &
- name: Wait for Idea started
uses: jtalk/url-health-check-action@1.5
with:
url: http://127.0.0.1:8082
max-attempts: 20
retry-delay: 10s
- name: Tests
run: gradle :testUi
- name: Move video
if: ${{ failure() }}
run: mv video build/reports
- name: Save fails report
if: ${{ failure() }}
uses: actions/upload-artifact@v2
with:
name: ui-test-fails-report-mac
path: |
build/reports
# build-for-ui-test-linux:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v2
# - name: Setup Java
# uses: actions/setup-java@v2.1.0
# with:
# distribution: zulu
# java-version: 11
# - name: Build Plugin
# run: gradle :buildPlugin
# - name: Run Idea
# run: |
# export DISPLAY=:99.0
# Xvfb -ac :99 -screen 0 1920x1080x16 &
# mkdir -p build/reports
# gradle :runIdeForUiTests #> build/reports/idea.log
# - name: Wait for Idea started
# uses: jtalk/url-health-check-action@1.5
# with:
# url: http://127.0.0.1:8082
# max-attempts: 15
# retry-delay: 30s
# - name: Tests
# run: gradle :testUi
# - name: Save fails report
# if: ${{ failure() }}
# uses: actions/upload-artifact@v2
# with:
# name: ui-test-fails-report-linux
# path: |
# ui-test-example/build/reports

49
.github/workflows/updateAuthors.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
name: Update Authors
on:
workflow_dispatch:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 300
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: nrwl/last-successful-commit-action@v1
id: last_successful_commit
with:
branch: 'master'
workflow_id: 'updateAuthors.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Update authors
id: update_authors
run: ./gradlew updateAuthors --stacktrace
env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
GITHUB_OAUTH: ${{ secrets.AUTOMATION_TOKEN }}
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
file_pattern: AUTHORS.md

47
.github/workflows/updateChangelog.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
name: Update Changelog
on:
workflow_dispatch:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 300
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- uses: nrwl/last-successful-commit-action@v1
id: last_successful_commit
with:
branch: 'master'
workflow_id: 'updateChangelog.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Update changelog
run: ./gradlew updateChangelog
env:
SUCCESS_COMMIT: ${{ steps.last_successful_commit.outputs.commit_hash }}
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Update changelog
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>
file_pattern: CHANGES.md

37
.github/workflows/updateFormatting.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
name: Update Formatting
on:
schedule:
- cron: '0 0 * * 0'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Format files
run: ./gradlew ktlintFormat
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Update formatting
commit_user_name: Alex Plate
commit_user_email: aleksei.plate@jetbrains.com
commit_author: Alex Plate <aleksei.plate@jetbrains.com>

27
.gitignore vendored
View File

@@ -1,6 +1,27 @@
*.swp *.swp
/.gradle/ /.gradle/
/.idea/ /.idea/
/build/ !/.idea/scopes
/out/ !/.idea/copyright
/tmp/ !/.idea/icon.png
!/.idea/inspectionProfiles
!/.idea/fileTemplates
!/.idea/runConfigurations
!/.idea/codeStyles
**/build/
**/out/
**/tmp/
*.DS_Store
.teamcity/.idea
.teamcity/target
.teamcity/*.iml
# Generated by gradle task "generateGrammarSource"
src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated
# Created by github automation
settings.xml

196
.idea/codeStyles/Project.xml generated Normal file
View File

@@ -0,0 +1,196 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="AUTODETECT_INDENTS" value="false" />
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</value>
</option>
<JavaCodeStyleSettings>
<option name="FIELD_NAME_PREFIX" value="my" />
<option name="STATIC_FIELD_NAME_PREFIX" value="our" />
</JavaCodeStyleSettings>
<JetCodeStyleSettings>
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
<option name="ALLOW_TRAILING_COMMA" value="true" />
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<ScalaCodeStyleSettings>
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
</ScalaCodeStyleSettings>
<ADDITIONAL_INDENT_OPTIONS fileType="rb">
<option name="INDENT_SIZE" value="2" />
</ADDITIONAL_INDENT_OPTIONS>
<codeStyleSettings language="CFML">
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="WHILE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="5" />
<option name="BINARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="5" />
<option name="ASSIGNMENT_WRAP" value="1" />
</codeStyleSettings>
<codeStyleSettings language="ECMA Script Level 4">
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="WHILE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="5" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="5" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="ASSIGNMENT_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="1" />
<option name="DOWHILE_BRACE_FORCE" value="1" />
<option name="WHILE_BRACE_FORCE" value="1" />
<option name="FOR_BRACE_FORCE" value="1" />
</codeStyleSettings>
<codeStyleSettings language="GSP">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="Groovy">
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="5" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_LIST_WRAP" value="5" />
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_WRAP" value="5" />
<option name="FOR_STATEMENT_WRAP" value="5" />
<option name="ASSIGNMENT_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="1" />
<option name="WHILE_BRACE_FORCE" value="1" />
<option name="FOR_BRACE_FORCE" value="1" />
<option name="FIELD_ANNOTATION_WRAP" value="0" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="HTML">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="8" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JAVA">
<option name="LINE_COMMENT_AT_FIRST_COLUMN" value="false" />
<option name="BLOCK_COMMENT_AT_FIRST_COLUMN" value="false" />
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="WHILE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
<option name="ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION" value="true" />
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="5" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_LIST_WRAP" value="5" />
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="5" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="ASSIGNMENT_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="1" />
<option name="DOWHILE_BRACE_FORCE" value="1" />
<option name="WHILE_BRACE_FORCE" value="1" />
<option name="FOR_BRACE_FORCE" value="1" />
<option name="FIELD_ANNOTATION_WRAP" value="0" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="8" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JSON">
<option name="KEEP_LINE_BREAKS" value="false" />
</codeStyleSettings>
<codeStyleSettings language="JSP">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="8" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JavaScript">
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="WHILE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="5" />
<option name="BINARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_WRAP" value="5" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="5" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="ASSIGNMENT_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="1" />
<option name="DOWHILE_BRACE_FORCE" value="1" />
<option name="WHILE_BRACE_FORCE" value="1" />
<option name="FOR_BRACE_FORCE" value="1" />
</codeStyleSettings>
<codeStyleSettings language="Python">
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
</codeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="8" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

6
.idea/copyright/IdeaVim.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<component name="CopyrightManager">
<copyright>
<option name="notice" value="IdeaVim - Vim emulator for IDEs based on the IntelliJ platform&#10;Copyright (C) 2003-&amp;#36;today.year The IdeaVim authors&#10;&#10;This program is free software: you can redistribute it and/or modify&#10;it under the terms of the GNU General Public License as published by&#10;the Free Software Foundation, either version 2 of the License, or&#10;(at your option) any later version.&#10;&#10;This program is distributed in the hope that it will be useful,&#10;but WITHOUT ANY WARRANTY; without even the implied warranty of&#10;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&#10;GNU General Public License for more details.&#10;&#10;You should have received a copy of the GNU General Public License&#10;along with this program. If not, see &lt;https://www.gnu.org/licenses/&gt;." />
<option name="myName" value="IdeaVim" />
</copyright>
</component>

7
.idea/copyright/profiles_settings.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<component name="CopyrightManager">
<settings>
<module2copyright>
<element module="Copyright" copyright="IdeaVim" />
</module2copyright>
</settings>
</component>

View File

@@ -0,0 +1 @@
com.maddyhome.idea.vim.helper.MessageHelper.message("${PROPERTY_KEY}", ${PARAMETERS})

View File

@@ -0,0 +1 @@
com.maddyhome.idea.vim.helper.MessageHelper.message("${PROPERTY_KEY}")

BIN
.idea/icon.png generated Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@@ -0,0 +1,69 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="BooleanMethodIsAlwaysInverted" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="HardCodedStringLiteral" enabled="false" level="WARNING" enabled_by_default="false">
<scope name="Production" level="WARNING" enabled="false">
<option name="ignoreForAssertStatements" value="true" />
<option name="ignoreForExceptionConstructors" value="true" />
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
<option name="ignoreForJUnitAsserts" value="true" />
<option name="ignoreForClassReferences" value="true" />
<option name="ignoreForPropertyKeyReferences" value="true" />
<option name="ignoreForNonAlpha" value="true" />
<option name="ignoreAssignedToConstants" value="false" />
<option name="ignoreToString" value="true" />
<option name="nonNlsCommentPattern" value="NON-NLS" />
</scope>
<option name="ignoreForAssertStatements" value="true" />
<option name="ignoreForExceptionConstructors" value="true" />
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
<option name="ignoreForJUnitAsserts" value="true" />
<option name="ignoreForClassReferences" value="true" />
<option name="ignoreForPropertyKeyReferences" value="true" />
<option name="ignoreForNonAlpha" value="true" />
<option name="ignoreAssignedToConstants" value="false" />
<option name="ignoreToString" value="false" />
<option name="nonNlsCommentPattern" value="NON-NLS" />
</inspection_tool>
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
<option name="m_requireAnnotationsFirst" value="true" />
</inspection_tool>
<inspection_tool class="MoveVariableDeclarationIntoWhen" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="PluginXmlI18n" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="SSBasedInspection" enabled="true" level="WARNING" enabled_by_default="true">
<replaceConfiguration name="IdeaVim run for each caret" description="Please use IdeaVim version of `runForEachCaret` function" suppressId="ideavimRunForEachCaret" problemDescriptor="Replace with IdeaVim version" text="$editor$.caretModel.runForEachCaret { $expr$ }" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="$editor$.vimForEachCaret { $expr$ }">
<constraint name="__context__" within="" contains="" />
<constraint name="editor" within="" contains="" />
<constraint name="expr" minCount="0" maxCount="2147483647" within="" contains="" />
</replaceConfiguration>
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" description="Use assertState and other functions instead of myFixture.checkResult.&#10;This function also preformes assertion in neovim" suppressId="IdeaVimAssertState" problemDescriptor="Use IdeaVim testing methods" text="$fixture$.$check$($data$)" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="assertState($data$)">
<constraint name="__context__" within="" contains="" />
<constraint name="fixture" regexp="myFixture" nameOfExprType="CodeInsightTestFixture" within="" contains="" />
<constraint name="check" regexp="checkResult" within="" contains="" />
<constraint name="data" within="" contains="" />
</replaceConfiguration>
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$check$($fileName$, $text$)" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="configureByText($text$)">
<constraint name="__context__" within="" contains="" />
<constraint name="fixture" regexp="myFixture" nameOfExprType="CodeInsightTestFixture" within="" contains="" />
<constraint name="check" regexp="configureByText" within="" contains="" />
<constraint name="text" within="" contains="" />
<constraint name="fileName" within="" contains="" />
</replaceConfiguration>
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$check$($data$)" recursive="false" caseInsensitive="false" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="assertState($data$)">
<constraint name="__context__" within="" contains="" />
<constraint name="fixture" regexp="myFixture" within="" contains="" />
<constraint name="check" regexp="checkResult" within="" contains="" />
<constraint name="data" within="" contains="" />
</replaceConfiguration>
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$configure$($first$, $second$)" recursive="false" caseInsensitive="false" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="configureByText($second$)">
<constraint name="__context__" within="" contains="" />
<constraint name="fixture" regexp="myFixture" within="" contains="" />
<constraint name="configure" regexp="configureByText" within="" contains="" />
<constraint name="first" within="" contains="" />
<constraint name="second" within="" contains="" />
</replaceConfiguration>
</inspection_tool>
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>

48
.idea/inspectionProfiles/Qodana.xml generated Normal file
View File

@@ -0,0 +1,48 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<description>Inspections profile for Qodana</description>
<option name="myName" value="Qodana" />
<inspection_tool class="BooleanMethodIsAlwaysInverted" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="CanBeFinal" enabled="false" level="WARNING" enabled_by_default="false">
<option name="REPORT_CLASSES" value="false" />
<option name="REPORT_METHODS" value="false" />
<option name="REPORT_FIELDS" value="true" />
</inspection_tool>
<inspection_tool class="GrUnresolvedAccess" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="HardCodedStringLiteral" enabled="false" level="WARNING" enabled_by_default="false">
<scope name="Production" level="WARNING" enabled="false">
<option name="ignoreForAssertStatements" value="true" />
<option name="ignoreForExceptionConstructors" value="true" />
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
<option name="ignoreForJUnitAsserts" value="true" />
<option name="ignoreForClassReferences" value="true" />
<option name="ignoreForPropertyKeyReferences" value="true" />
<option name="ignoreForNonAlpha" value="true" />
<option name="ignoreAssignedToConstants" value="false" />
<option name="ignoreToString" value="true" />
<option name="nonNlsCommentPattern" value="NON-NLS" />
</scope>
<option name="ignoreForAssertStatements" value="true" />
<option name="ignoreForExceptionConstructors" value="true" />
<option name="ignoreForSpecifiedExceptionConstructors" value="" />
<option name="ignoreForJUnitAsserts" value="true" />
<option name="ignoreForClassReferences" value="true" />
<option name="ignoreForPropertyKeyReferences" value="true" />
<option name="ignoreForNonAlpha" value="true" />
<option name="ignoreAssignedToConstants" value="false" />
<option name="ignoreToString" value="false" />
<option name="nonNlsCommentPattern" value="NON-NLS" />
</inspection_tool>
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
<option name="m_requireAnnotationsFirst" value="true" />
</inspection_tool>
<inspection_tool class="SameReturnValue" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
<option name="processLiterals" value="true" />
<option name="processComments" value="true" />
</inspection_tool>
<inspection_tool class="SuperTearDownInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>

View File

@@ -0,0 +1,25 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="IdeaVim full verification" type="GradleRunConfiguration" factoryName="Gradle">
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="check" />
<option value="runPluginVerifier" />
</list>
</option>
<option name="vmOptions" value="" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="IdeaVim tests" type="GradleRunConfiguration" factoryName="Gradle">
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="test" />
</list>
</option>
<option name="vmOptions" value="" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Start IJ with IdeaVim" type="GradleRunConfiguration" factoryName="Gradle">
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
<ExternalSystemSettings>
<option name="executionName" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="externalSystemIdString" value="GRADLE" />
<option name="scriptParameters" value="" />
<option name="taskDescriptions">
<list />
</option>
<option name="taskNames">
<list>
<option value="runIde" />
</list>
</option>
<option name="vmOptions" value="" />
</ExternalSystemSettings>
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
<DebugAllEnabled>false</DebugAllEnabled>
<method v="2" />
</configuration>
</component>

3
.idea/scopes/Copyright.xml generated Normal file
View File

@@ -0,0 +1,3 @@
<component name="DependencyValidationManager">
<scope name="Copyright" pattern="(file[IdeaVIM.main]:*/||file[IdeaVIM.test]:*/)&amp;&amp;!file[IdeaVIM.main]:resources//*" />
</component>

19
.teamcity/_Self/Constants.kt vendored Normal file
View File

@@ -0,0 +1,19 @@
package _Self
object Constants {
const val DEFAULT_CHANNEL = "default"
const val EAP_CHANNEL = "eap"
const val DEV_CHANNEL = "Dev"
const val VERSION = "1.10.3"
const val DEV_VERSION = "1.11.0"
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"
const val PROPERTY_TESTS = "LATEST-EAP-SNAPSHOT"
const val LONG_RUNNING_TESTS = "LATEST-EAP-SNAPSHOT"
const val QODANA_TESTS = "LATEST-EAP-SNAPSHOT"
const val RELEASE = "2021.3"
const val RELEASE_DEV = "LATEST-EAP-SNAPSHOT"
const val RELEASE_EAP = "LATEST-EAP-SNAPSHOT"
}

91
.teamcity/_Self/Project.kt vendored Normal file
View File

@@ -0,0 +1,91 @@
package _Self
import _Self.buildTypes.*
import _Self.subprojects.GitHub
import _Self.subprojects.OldTests
import _Self.subprojects.Releases
import _Self.vcsRoots.Branch_181
import _Self.vcsRoots.Branch_183
import _Self.vcsRoots.Branch_191_193
import _Self.vcsRoots.Branch_201
import _Self.vcsRoots.Branch_202
import _Self.vcsRoots.Branch_203_212
import _Self.vcsRoots.Branch_Release
import _Self.vcsRoots.GitHubPullRequest
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object Project : Project({
description = "Vim emulation plugin for the IntelliJ platform products"
subProjects(Releases, OldTests, GitHub)
// VCS roots
vcsRoot(Branch_183)
vcsRoot(Branch_181)
vcsRoot(Branch_191_193)
vcsRoot(Branch_201)
vcsRoot(Branch_202)
vcsRoot(Branch_203_212)
vcsRoot(Branch_Release)
vcsRoot(GitHubPullRequest)
// Builds
buildType(TestsForIntelliJ20213)
buildType(TestsForIntelliJEAP)
buildType(PropertyBased)
buildType(LongRunning)
buildType(Nvim)
buildType(PluginVerifier)
buildType(Qodana)
// Unknown staff generated by TeamCity
features {
feature {
type = "CloudImage"
id = "PROJECT_EXT_768"
param("agent_pool_id", "41")
param("amazon-id", "ami-0d1a6a32faa92923e")
param("ebs-optimized", "false")
param("image-instances-limit", "")
param("image-name-prefix", "BuildAgentsIdeaVim")
param("instance-type", "c5d.xlarge")
param("key-pair-name", "teamcity-prod-pub")
param("profileId", "amazon-48")
param("security-group-ids", "sg-eda08696,sg-7332cf0f,")
param("source-id", "BuildAgentsIdeaVim")
param("spot-instance-price", "0.12")
param("subnet-id", "subnet-58839511")
param("use-spot-instances", "true")
param("user-tags", "project=idea-vim")
param("key-pair-name", "")
param("spot-instance-price", "")
}
feature {
type = "CloudProfile"
id = "amazon-48"
param("agentPushPreset", "")
param("cloud-code", "amazon")
param("description", "")
param("enabled", "true")
param("max-running-instances", "10")
param("name", "Cloud Agents")
param("next-hour", "")
param("not-checked", "")
param("profileId", "amazon-48")
param("profileServerUrl", "")
param("region", "eu-west-1")
param("secure:access-id", "credentialsJSON:dbcdb2a2-de5f-4bc9-9421-292b19e83947")
param("secure:secret-key", "credentialsJSON:65a87fe7-0977-4af9-96f1-344f2b82d269")
param("system.cloud.profile_id", "amazon-48")
param("terminate-idle-time", "15")
param("total-work-time", "")
param("user-script", "")
param("spot-fleet-config", "")
param("terminate-after-build", "true")
param("name", "Cloud Agents - Single Build")
}
}
})

View File

@@ -0,0 +1,58 @@
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
name = buildName
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", ijVersion)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean check -x ktlintMainSourceSetCheck -x ktlintTestSourceSetCheck"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
object TestsForIntelliJ20213 : ActiveTests("Tests for IntelliJ 2021.3", "2021.3.2")

View File

@@ -0,0 +1,77 @@
package _Self.buildTypes
import _Self.Constants.GITHUB_TESTS
import _Self.vcsRoots.GitHubPullRequest
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object GithubTests : Github("clean test", "Tests")
sealed class Github(command: String, desc: String) : BuildType({
name = "GitHub Pull Requests $desc"
description = "Test GitHub pull requests $desc"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", GITHUB_TESTS)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(GitHubPullRequest)
checkoutMode = CheckoutMode.AUTO
branchFilter = """
+:*
-:<default>
""".trimIndent()
}
steps {
gradle {
tasks = command
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
branchFilter = ""
}
}
features {
pullRequests {
provider = github {
authType = token {
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
}
filterTargetBranch = "refs/heads/master"
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
}
}
commitStatusPublisher {
vcsRootExtId = "${GitHubPullRequest.id}"
publisher = github {
githubUrl = "https://api.github.com"
authType = personalToken {
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
}
}
param("github_oauth_user", "AlexPl292")
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

View File

@@ -0,0 +1,42 @@
package _Self.buildTypes
import _Self.Constants.LONG_RUNNING_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object LongRunning : BuildType({
name = "Long running tests"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", LONG_RUNNING_TESTS)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean testLongRunning"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

69
.teamcity/_Self/buildTypes/Nvim.kt vendored Normal file
View File

@@ -0,0 +1,69 @@
package _Self.buildTypes
import _Self.Constants.NVIM_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object Nvim : BuildType({
name = "Tests with nvim"
description = "Running tests with nvim integration"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", NVIM_TESTS)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ideavim.nvim.path", "./nvim-linux64/bin/nvim")
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
script {
name = "Set up NeoVim"
scriptContent = """
wget https://github.com/neovim/neovim/releases/download/v0.4.4/nvim-linux64.tar.gz
tar xzf nvim-linux64.tar.gz
cd nvim-linux64/bin
chmod +x nvim
""".trimIndent()
}
gradle {
tasks = "clean testWithNeovim"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -0,0 +1,40 @@
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object PluginVerifier : BuildType({
name = "Plugin verification"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean runPluginVerifier"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

View File

@@ -0,0 +1,42 @@
package _Self.buildTypes
import _Self.Constants.PROPERTY_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object PropertyBased : BuildType({
name = "Property based tests"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", PROPERTY_TESTS)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean testPropertyBased"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

80
.teamcity/_Self/buildTypes/Qodana.kt vendored Normal file
View File

@@ -0,0 +1,80 @@
package _Self.buildTypes
import _Self.Constants.QODANA_TESTS
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object Qodana : BuildType({
name = "Qodana checks"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", QODANA_TESTS)
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
qodana {
name = "Qodana"
/*
reportAsTestsEnable = ""
failBuildOnErrors = ""
codeInspectionXmlConfig = "Custom"
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
reportAsTestsEnable = "true"
*/
clearConditions()
param("licenseaudit-enable", "true")
param("clonefinder-languages", "Java")
param("clonefinder-mode", "")
param("report-version", "")
param("clonefinder-languages-container", "Java Kotlin")
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
param("clonefinder-queried-project", "src")
param("clonefinder-enable", "true")
param("clonefinder-reference-projects", "src")
param("yaml-configuration", "")
}
}
triggers {
vcs {
enabled = false
branchFilter = ""
}
schedule {
schedulingPolicy = weekly {
dayOfWeek = ScheduleTrigger.DAY.Tuesday
}
branchFilter = ""
triggerBuild = always()
}
}
failureConditions {
failOnMetricChange {
threshold = 0
units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT
comparison = BuildFailureOnMetric.MetricComparison.MORE
compareTo = value()
metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT
param("metricKey", "QodanaProblemsTotal")
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
})

76
.teamcity/_Self/buildTypes/Release.kt vendored Normal file
View File

@@ -0,0 +1,76 @@
package _Self.buildTypes
import _Self.Constants.DEFAULT_CHANNEL
import _Self.Constants.DEV_CHANNEL
import _Self.Constants.EAP_CHANNEL
import _Self.Constants.RELEASE
import _Self.Constants.VERSION
import _Self.vcsRoots.Branch_Release
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
object Release : BuildType({
name = "Publish Release"
description = "Build and publish IdeaVim plugin"
artifactRules = "build/distributions/*"
buildNumberPattern = VERSION
params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE)
password(
"env.ORG_GRADLE_PROJECT_publishToken",
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password"
)
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL")
password(
"env.ORG_GRADLE_PROJECT_slackUrl",
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
label = "Slack Token"
)
}
vcs {
root(Branch_Release)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean publishPlugin slackNotification"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
features {
vcsLabeling {
vcsRootId = "${DslContext.settingsRoot.id}"
labelingPattern = "%system.build.number%"
successfulOnly = true
branchFilter = ""
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
threshold = 5
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.DIFF
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -0,0 +1,69 @@
package _Self.buildTypes
import _Self.Constants.DEV_CHANNEL
import _Self.Constants.DEV_VERSION
import _Self.Constants.RELEASE_DEV
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
object ReleaseDev : BuildType({
name = "Publish Dev Build"
description = "Build and publish Dev of IdeaVim plugin"
artifactRules = "build/distributions/*"
buildNumberPattern = "$DEV_VERSION-dev.%build.counter%"
params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV)
password(
"env.ORG_GRADLE_PROJECT_publishToken",
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password"
)
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_publishChannels", DEV_CHANNEL)
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean publishPlugin"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
schedule {
enabled = true
schedulingPolicy = daily {
hour = 2
}
branchFilter = ""
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
threshold = 5
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.DIFF
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -0,0 +1,73 @@
package _Self.buildTypes
import _Self.Constants.DEV_VERSION
import _Self.Constants.EAP_CHANNEL
import _Self.Constants.RELEASE_EAP
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
object ReleaseEap : BuildType({
name = "Publish EAP Build"
description = "Build and publish EAP of IdeaVim plugin"
artifactRules = "build/distributions/*"
buildNumberPattern = "$DEV_VERSION-eap.%build.counter%"
params {
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP)
password(
"env.ORG_GRADLE_PROJECT_publishToken",
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
label = "Password"
)
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL)
password(
"env.ORG_GRADLE_PROJECT_slackUrl",
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
label = "Slack Token"
)
}
vcs {
root(DslContext.settingsRoot)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean publishPlugin"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
features {
vcsLabeling {
vcsRootId = "${DslContext.settingsRoot.id}"
labelingPattern = "%system.build.number%"
successfulOnly = true
branchFilter = ""
}
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
threshold = 5
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.DIFF
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -0,0 +1,58 @@
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
object TestsForIntelliJ20183 : BuildType({
name = "Tests for IntelliJ 2018.3"
description = "branch 183"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-2018.3")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_183)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})

View File

@@ -0,0 +1,61 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_181_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_181)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20181 : TestsForIntelliJ_181_branch("2018.1")
object TestsForIntelliJ20182 : TestsForIntelliJ_181_branch("2018.2")

View File

@@ -0,0 +1,63 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_191_193_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_191_193)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20191 : TestsForIntelliJ_191_193_branch("2019.1")
object TestsForIntelliJ20192 : TestsForIntelliJ_191_193_branch("2019.2")
object TestsForIntelliJ20193 : TestsForIntelliJ_191_193_branch("2019.3")

View File

@@ -0,0 +1,60 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_201_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_201)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20201 : TestsForIntelliJ_201_branch("2020.1")

View File

@@ -0,0 +1,60 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_202_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_202)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20202 : TestsForIntelliJ_202_branch("2020.2")

View File

@@ -0,0 +1,64 @@
@file:Suppress("ClassName")
package _Self.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
sealed class TestsForIntelliJ_203_212_branch(private val version: String) : BuildType({
name = "Tests for IntelliJ $version"
params {
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
}
vcs {
root(_Self.vcsRoots.Branch_203_212)
checkoutMode = CheckoutMode.AUTO
}
steps {
gradle {
tasks = "clean test"
buildFile = ""
enableStacktrace = true
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
}
}
triggers {
vcs {
branchFilter = ""
}
}
requirements {
noLessThanVer("teamcity.agent.jvm.version", "1.8")
}
failureConditions {
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 20
units = BuildFailureOnMetric.MetricUnit.PERCENTS
comparison = BuildFailureOnMetric.MetricComparison.LESS
compareTo = build {
buildRule = lastSuccessful()
}
}
}
})
object TestsForIntelliJ20212 : TestsForIntelliJ_203_212_branch("2021.2.2")
object TestsForIntelliJ20211 : TestsForIntelliJ_203_212_branch("2021.1")
object TestsForIntelliJ20203 : TestsForIntelliJ_203_212_branch("2020.3")

11
.teamcity/_Self/subprojects/GitHub.kt vendored Normal file
View File

@@ -0,0 +1,11 @@
package _Self.subprojects
import _Self.buildTypes.GithubTests
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object GitHub : Project({
name = "Pull Requests checks"
description = "Automatic checking of GitHub Pull Requests"
buildType(GithubTests)
})

31
.teamcity/_Self/subprojects/OldTests.kt vendored Normal file
View File

@@ -0,0 +1,31 @@
package _Self.subprojects
import _Self.buildTypes.TestsForIntelliJ20181
import _Self.buildTypes.TestsForIntelliJ20182
import _Self.buildTypes.TestsForIntelliJ20183
import _Self.buildTypes.TestsForIntelliJ20191
import _Self.buildTypes.TestsForIntelliJ20192
import _Self.buildTypes.TestsForIntelliJ20193
import _Self.buildTypes.TestsForIntelliJ20201
import _Self.buildTypes.TestsForIntelliJ20202
import _Self.buildTypes.TestsForIntelliJ20203
import _Self.buildTypes.TestsForIntelliJ20211
import _Self.buildTypes.TestsForIntelliJ20212
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object OldTests : Project({
name = "Old IdeaVim tests"
description = "Tests for older versions of IJ"
buildType(TestsForIntelliJ20181)
buildType(TestsForIntelliJ20182)
buildType(TestsForIntelliJ20183)
buildType(TestsForIntelliJ20191)
buildType(TestsForIntelliJ20192)
buildType(TestsForIntelliJ20193)
buildType(TestsForIntelliJ20201)
buildType(TestsForIntelliJ20202)
buildType(TestsForIntelliJ20203)
buildType(TestsForIntelliJ20211)
buildType(TestsForIntelliJ20212)
})

15
.teamcity/_Self/subprojects/Releases.kt vendored Normal file
View File

@@ -0,0 +1,15 @@
package _Self.subprojects
import _Self.buildTypes.Release
import _Self.buildTypes.ReleaseDev
import _Self.buildTypes.ReleaseEap
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
object Releases : Project({
name = "IdeaVim releases"
description = "Stable and EAP releases for IdeaVim"
buildType(Release)
buildType(ReleaseEap)
buildType(ReleaseDev)
})

12
.teamcity/_Self/vcsRoots/Branch_181.kt vendored Normal file
View File

@@ -0,0 +1,12 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_181 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 181)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "181"
useMirrors = false
})

12
.teamcity/_Self/vcsRoots/Branch_183.kt vendored Normal file
View File

@@ -0,0 +1,12 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_183 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 183)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "183"
useMirrors = false
})

View File

@@ -0,0 +1,12 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_191_193 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 191-193)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "191-193"
useMirrors = false
})

12
.teamcity/_Self/vcsRoots/Branch_201.kt vendored Normal file
View File

@@ -0,0 +1,12 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_201 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 201)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "201"
useMirrors = false
})

12
.teamcity/_Self/vcsRoots/Branch_202.kt vendored Normal file
View File

@@ -0,0 +1,12 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_202 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 202)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "202"
useMirrors = false
})

View File

@@ -0,0 +1,12 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_203_212 : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch 203-212)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "203-212"
useMirrors = false
})

View File

@@ -0,0 +1,11 @@
@file:Suppress("ClassName")
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object Branch_Release : GitVcsRoot({
name = "https://github.com/JetBrains/ideavim (branch release)"
url = "https://github.com/JetBrains/ideavim.git"
branch = "release"
})

View File

@@ -0,0 +1,12 @@
package _Self.vcsRoots
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
object GitHubPullRequest : GitVcsRoot({
name = "IdeaVim Pull Requests"
url = "git@github.com:JetBrains/ideavim.git"
branchSpec = "+:refs/(pull/*)/head"
authMethod = uploadedKey {
uploadedKey = "Alex Plate TeamCity key"
}
})

25
.teamcity/patches/buildTypes/Nvim.kts vendored Normal file
View File

@@ -0,0 +1,25 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
/*
This patch script was generated by TeamCity on settings change in UI.
To apply the patch, change the buildType with id = 'Nvim'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("Nvim")) {
triggers {
val trigger1 = find<VcsTrigger> {
vcs {
branchFilter = ""
}
}
trigger1.apply {
enabled = false
}
}
}

View File

@@ -0,0 +1,25 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
/*
This patch script was generated by TeamCity on settings change in UI.
To apply the patch, change the buildType with id = 'PluginVerifier'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("PluginVerifier")) {
triggers {
val trigger1 = find<VcsTrigger> {
vcs {
branchFilter = ""
}
}
trigger1.apply {
enabled = false
}
}
}

60
.teamcity/patches/buildTypes/Qodana.kts vendored Normal file
View File

@@ -0,0 +1,60 @@
package patches.buildTypes
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
/*
This patch script was generated by TeamCity on settings change in UI.
To apply the patch, change the buildType with id = 'Qodana'
accordingly, and delete the patch script.
*/
changeBuildType(RelativeId("Qodana")) {
expectSteps {
qodana {
name = "Qodana"
reportAsTests = true
inspectionProfile = customProfile {
path = ".idea/inspectionProfiles/Qodana.xml"
}
param("clonefinder-enable", "true")
param("clonefinder-languages", "Java")
param("clonefinder-languages-container", "Java Kotlin")
param("clonefinder-mode", "")
param("clonefinder-queried-project", "src")
param("clonefinder-reference-projects", "src")
param("fail-build-on-errors", "")
param("licenseaudit-enable", "true")
param("namesAndTagsCustom", "repo.labs.intellij.net/static-analyser/qodana")
param("report-version", "")
param("yaml-configuration", "")
}
}
steps {
update<Qodana>(0) {
clearConditions()
linter = jvm {
version = Qodana.JVMVersion.LATEST
}
}
}
triggers {
val trigger1 = find<ScheduleTrigger> {
schedule {
schedulingPolicy = weekly {
dayOfWeek = ScheduleTrigger.DAY.Tuesday
}
branchFilter = ""
triggerBuild = always()
}
}
trigger1.apply {
enabled = false
}
}
}

104
.teamcity/pom.xml vendored Normal file
View File

@@ -0,0 +1,104 @@
<?xml version="1.0"?>
<project>
<modelVersion>4.0.0</modelVersion>
<name>IdeaVim Config DSL Script</name>
<groupId>IdeaVim</groupId>
<artifactId>IdeaVim_dsl</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.jetbrains.teamcity</groupId>
<artifactId>configs-dsl-kotlin-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<repositories>
<repository>
<id>jetbrains-all</id>
<url>https://download.jetbrains.com/teamcity-repository</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>teamcity-server</id>
<url>https://teamcity.jetbrains.com/app/dsl-plugins-repository</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>JetBrains</id>
<url>https://download.jetbrains.com/teamcity-repository</url>
</pluginRepository>
</pluginRepositories>
<build>
<sourceDirectory>${basedir}</sourceDirectory>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration/>
<executions>
<execution>
<id>compile</id>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jetbrains.teamcity</groupId>
<artifactId>teamcity-configs-maven-plugin</artifactId>
<version>${teamcity.dsl.version}</version>
<configuration>
<format>kotlin</format>
<dstDir>target/generated-configs</dstDir>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.jetbrains.teamcity</groupId>
<artifactId>configs-dsl-kotlin</artifactId>
<version>${teamcity.dsl.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.teamcity</groupId>
<artifactId>configs-dsl-kotlin-plugins</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-script-runtime</artifactId>
<version>${kotlin.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

33
.teamcity/settings.kts vendored Normal file
View File

@@ -0,0 +1,33 @@
import jetbrains.buildServer.configs.kotlin.v2019_2.*
/*
The settings script is an entry point for defining a single
TeamCity project. TeamCity looks for the 'settings.kts' file in a
project directory and runs it if it's found, so the script name
shouldn't be changed and its package should be the same as the
project's id.
The script should contain a single call to the project() function
with a Project instance or an init function as an argument.
VcsRoots, BuildTypes, and Templates of this project must be
registered inside project using the vcsRoot(), buildType(), and
template() methods respectively.
Subprojects can be defined either in their own settings.kts or by
calling the subProjects() method in this project.
To debug settings scripts in command-line, run the
mvnDebug org.jetbrains.teamcity:teamcity-configs-maven-plugin:generate
command and attach your debugger to the port 8000.
To debug in IntelliJ Idea, open the 'Maven Projects' tool window (View ->
Tool Windows -> Maven Projects), find the generate task
node (Plugins -> teamcity-configs -> teamcity-configs:generate),
the 'Debug' option is available in the context menu for the task.
*/
version = "2020.2"
project(_Self.Project)

View File

@@ -10,10 +10,6 @@ The original author:
The current maintainers: The current maintainers:
* [![icon][mail]](mailto:andrey.vlasovskikh@gmail.com)
[![icon][github]](https://github.com/vlasovskikh)
&nbsp;
Andrey Vlasovskikh
* [![icon][mail]](mailto:alexpl292@gmail.com) * [![icon][mail]](mailto:alexpl292@gmail.com)
[![icon][github]](https://github.com/AlexPl292) [![icon][github]](https://github.com/AlexPl292)
&nbsp; &nbsp;
@@ -25,8 +21,13 @@ Previous maintainers:
[![icon][github]](https://github.com/olegs) [![icon][github]](https://github.com/olegs)
&nbsp; &nbsp;
Oleg Shpynov Oleg Shpynov
* [![icon][mail]](mailto:andrey.vlasovskikh@gmail.com)
[![icon][github]](https://github.com/vlasovskikh)
&nbsp;
Andrey Vlasovskikh
Contributors: Contributors:
* [![icon][mail]](mailto:yole@jetbrains.com) * [![icon][mail]](mailto:yole@jetbrains.com)
[![icon][github]](https://github.com/yole) [![icon][github]](https://github.com/yole)
&nbsp; &nbsp;
@@ -271,13 +272,157 @@ Contributors:
[![icon][github]](https://github.com/igrekster) [![icon][github]](https://github.com/igrekster)
&nbsp; &nbsp;
igrekster igrekster
* [![icon][mail]](mailto:lokomot476@gmail.com)
[![icon][github]](https://github.com/fan-tom)
&nbsp;
Alexey Gerasimov
* [![icon][mail]](mailto:a.grison+github@gmail.com)
[![icon][github]](https://github.com/agrison)
&nbsp;
Alexandre Grison
* [![icon][mail]](mailto:angel@knight-industries.com)
[![icon][github]](https://github.com/angelbot)
&nbsp;
John Weigel
* [![icon][mail]](mailto:kevinz@weghst.com)
[![icon][github]](https://github.com/kevin70)
&nbsp;
kk
* [![icon][mail]](mailto:runforprogram@163.com)
[![icon][github]](https://github.com/runforprogram)
&nbsp;
runforprogram
* [![icon][mail]](mailto:valery.isaev@jetbrains.com)
[![icon][github]](https://github.com/valis)
&nbsp;
valis
* [![icon][mail]](mailto:pmikulski@voleon.com)
[![icon][github]](https://github.com/pmnoxx)
&nbsp;
Piotr Mikulski
* [![icon][mail]](mailto:14farresa@gmail.com)
[![icon][github]](https://github.com/adriafarres)
&nbsp;
Adrià Farrés
* [![icon][mail]](mailto:patrick.j.elmquist@gmail.com)
[![icon][github]](https://github.com/patrick-elmquist)
&nbsp;
Patrick Elmquist
* [![icon][mail]](mailto:rieon@rieon.cn)
[![icon][github]](https://github.com/rieonke)
&nbsp;
Rieon Ke
* [![icon][mail]](mailto:jiirra@gmail.com)
[![icon][github]](https://github.com/KostkaBrukowa)
&nbsp;
KostkaBrukowa
* [![icon][mail]](mailto:wangyaohuicn@gmail.com)
[![icon][github]](https://github.com/yaohui-wyh)
&nbsp;
Yaohui Wang
* [![icon][mail]](mailto:iain.ballard@bjss.com)
[![icon][github]](https://github.com/i-e-b)
&nbsp;
Iain Ballard
* [![icon][mail]](mailto:brandoncc@gmail.com)
[![icon][github]](https://github.com/brandoncc)
&nbsp;
Brandon Conway
* [![icon][mail]](mailto:ga@anadoxin.org)
[![icon][github]](https://github.com/antekone)
&nbsp;
Grzegorz Antoniak
* [![icon][mail]](mailto:shaunpatterson@gmail.com)
[![icon][github]](https://github.com/shaunpatterson)
&nbsp;
Shaun Patterson
* [![icon][mail]](mailto:vladimir.petrenko@jetbrains.com)
[![icon][github]](https://github.com/vladimir-petrenko)
&nbsp;
Vladimir Petrenko
* [![icon][mail]](mailto:sergey.vorobyov@jetbrains.com)
[![icon][github]](https://github.com/DeveloperHacker)
&nbsp;
Sergei Vorobyov
* [![icon][mail]](mailto:daya0576@gmail.com)
[![icon][github]](https://github.com/daya0576)
&nbsp;
大牙(Henry Zhu)
* [![icon][mail]](mailto:mplacek@skilltech.pl)
[![icon][github]](https://github.com/MichalPlacek)
&nbsp;
MichalPlacek
* [![icon][mail]](mailto:shrikantsharat.k@gmail.com)
[![icon][github]](https://github.com/sharat87)
&nbsp;
Shrikant Sharat Kandula
* [![icon][mail]](mailto:michal.placek@yandex.com)
[![icon][github]](https://github.com/MichalPlacek)
&nbsp;
Michal Placek
* [![icon][mail]](mailto:eugene.nizienko@jetbrains.com)
[![icon][github]](https://github.com/nizienko)
&nbsp;
eugene nizienko
* [![icon][mail]](mailto:x@lipp.fi)
[![icon][github]](https://github.com/lippfi)
&nbsp;
Filipp Vakhitov
* [![icon][mail]](mailto:yzeiri.1@osu.edu)
[![icon][github]](https://github.com/myzeiri)
&nbsp;
Martin Yzeiri
* [![icon][mail]](mailto:jeyko1@gmail.com)
[![icon][github]](https://github.com/wrightwriter)
&nbsp;
Petar Guglev
* [![icon][mail]](mailto:contact@chylex.com)
[![icon][github]](https://github.com/chylex)
&nbsp;
chylex
* [![icon][mail]](mailto:daniel.egger@gmail.com)
[![icon][github]](https://github.com/DanEEStar)
&nbsp;
DanEEStar
* [![icon][mail]](mailto:ksrbkevinsuen@gmail.com)
[![icon][github]](https://github.com/ksrb)
&nbsp;
Kevin Suen
* [![icon][mail]](mailto:michael.schertenleib@inftec.ch)
[![icon][github]](https://github.com/cravay)
&nbsp;
Michael Schertenleib
* [![icon][mail]](mailto:piotr@near.org)
[![icon][github]](https://github.com/pmnoxx)
&nbsp;
Piotr Mikulski
* [![icon][mail]](mailto:lonrevip@gmail.com)
[![icon][github]](https://github.com/lonre)
&nbsp;
Lonre Wang
* [![icon][mail]](mailto:AlexPl292@gmail.com)
[![icon][github]](https://github.com/AlexPl292)
&nbsp;
Alex Pláte
* [![icon][mail]](mailto:david@dadon.fr)
[![icon][github]](https://github.com/ddadon10)
&nbsp;
David Dadon
* [![icon][mail]](mailto:hollandpirates@gmail.com)
[![icon][github]](https://github.com/PHPirates)
&nbsp;
Thomas Schouten
* [![icon][mail]](mailto:sr@mail25.de)
[![icon][github]](https://github.com/Vvalter)
&nbsp;
Simon Rainer
If you are a contributor and your name is not listed here, feel free to If you are a contributor and your name is not listed here, feel free to
contact the maintainers. contact the maintainers.
<a href="https://icons8.com">Icons by Icons8</a> <a href="https://icons8.com">Icons by Icons8</a>
[mail]: resources/icons/mail.png [mail]: assets/icons/mail.png
[github]: resources/icons/github.png [github]: assets/icons/github.png
[github-off]: resources/icons/github-off.png [github-off]: assets/icons/github-off.png

View File

@@ -3,12 +3,19 @@ The Changelog
History of changes in IdeaVim for the IntelliJ platform. History of changes in IdeaVim for the IntelliJ platform.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
Before version 1.7.0:
Stable versions use X.Y format.
EAP ([Early Access Program](https://jb.gg/ideavim-eap)) versions use X.Y.Z format.
Get an Early Access Get an Early Access
------------------- -------------------
Would you like to try new features and fixes? Join the Early Access Program and Would you like to try new features and fixes? Join the Early Access Program and
receive EAP builds as updates! Use the `EAP` option in the status bar or receive EAP builds as updates! Use the `Early Access Program` option in the status bar or
add this URL to "Settings | Plugins | Manage Plugin Repositories": add this URL to "Settings | Plugins | Manage Plugin Repositories":
`https://plugins.jetbrains.com/plugins/eap/ideavim` `https://plugins.jetbrains.com/plugins/eap/ideavim`
@@ -16,17 +23,475 @@ It is important to distinguish EAP from traditional pre-release software.
Please note that the quality of EAP versions may at times be way below even Please note that the quality of EAP versions may at times be way below even
usual beta standards. usual beta standards.
[To Be Released] ## To Be Released
--------------
_Available since 0.54.1 EAP:_ ### Features:
* Add `gcu` command for Commentary plugin
* Add `:Commentary` command, which works great for commands such as `:%g/fun/Commentary`
* Support `gc` commentary text objects. E.g. `dgc`: delete commented text.
* Support `redo-register feature` | [VIM-2643](https://youtrack.jetbrains.com/issue/VIM-2643/Dot-operator-doesn-t-increment-number-register-after-pasting-fro) | [viminfo](http://vimdoc.sourceforge.net/htmldoc/undo.html#redo-register)
**Features:** ### Changes:
* Surround and Commentary extensions can be repeated with a dot command ([VIM-1118](https://youtrack.jetbrains.com/issue/VIM-1118)) * Uses the same mappings as Commentary, so custom bindings for the Vim plugin will work with IdeaVim, too.
E.g. `<Plug>Commentary` instead of `<Plug>(CommentMotion)`. Old mappings are maintained for compatibility.
* If you open `~/.ideavimrc` in IDE, remove a mapping, and reload the config using the reload button,
the mapping will actually be unmapped.
### Fixes:
* [VIM-2587](https://youtrack.jetbrains.com/issue/VIM-2587) Use ctrl-6 as ctrl-^
* [VIM-2590](https://youtrack.jetbrains.com/issue/VIM-2590) Fix caret shape in PyCharm
* [VIM-2553](https://youtrack.jetbrains.com/issue/VIM-2553) Substitute consecutive matches
* [VIM-1687](https://youtrack.jetbrains.com/issue/VIM-1687) Support count for `gcc`
* [VIM-2381](https://youtrack.jetbrains.com/issue/VIM-2381) Fall back to line comment if block comment is not available
* [VIM-2589](https://youtrack.jetbrains.com/issue/VIM-2589) Add `gc` text object
* [VIM-2604](https://youtrack.jetbrains.com/issue/VIM-2604) Update action execution rules
* [VIM-2654](https://youtrack.jetbrains.com/issue/VIM-2654) Add support for `return` without expression
* [VIM-2630](https://youtrack.jetbrains.com/issue/VIM-2630/Please-fix-warning-Shall-not-be-called-on-a-template-presentatio) Fix IDE freeze
* [VIM-2661](https://youtrack.jetbrains.com/issue/VIM-2661/Spamming-does-not-work) Fix repeating the `@@` command
* [VIM-2668](https://youtrack.jetbrains.com/issue/VIM-2668/tabm-or-tabm-with-no-number-does-not-match-vim-behavior) Fix omitted numbers in `tabm` command
* [VIM-2595](https://youtrack.jetbrains.com/issue/VIM-2595) Support plugins in macro execution
* [VIM-2671](https://youtrack.jetbrains.com/issue/VIM-2671) Fix using plugins from mappings
* [VIM-2675](https://youtrack.jetbrains.com/issue/VIM-2675) Fix numbering register in visual mode
* [VIM-696](https://youtrack.jetbrains.com/issue/VIM-696/vim-selection-issue-after-undo) Fix selection after undo
* [VIM-744](https://youtrack.jetbrains.com/issue/VIM-744/Use-undoredo-with-count-modifier) Add count to undo/redo
* [VIM-1862](https://youtrack.jetbrains.com/issue/VIM-1862/Ex-commands-executed-in-keymaps-and-macros-are-added-to-the-command-history) Fix command history
### Merged PRs:
* [468](https://github.com/JetBrains/ideavim/pull/468) by [Thomas Schouten](https://github.com/PHPirates): Implement UserDataHolder for EditorDataContext
* [483](https://github.com/JetBrains/ideavim/pull/483) by [Simon Rainer](https://github.com/Vvalter): Fix(VIM-2553): Substitute consecutive matches
* [488](https://github.com/JetBrains/ideavim/pull/488) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for the C family of languages
* [493](https://github.com/JetBrains/ideavim/pull/493) by [Matt Ellis](https://github.com/citizenmatt): Improvements to Commentary extension
* [494](https://github.com/JetBrains/ideavim/pull/494) by [Matt Ellis](https://github.com/citizenmatt): Cleanup pre-212 CaretVisualAttributes compatibility code
* [504](https://github.com/JetBrains/ideavim/pull/504) by [Matt Ellis](https://github.com/citizenmatt): Minor bug fixes
## 1.10.0, 2022-02-17
### Features:
* Add register support to let command | [VIM-749](https://youtrack.jetbrains.com/issue/VIM-749), [VIM-1783](https://youtrack.jetbrains.com/issue/VIM-1783)
* Add tabmove command | [VIM-1164](https://youtrack.jetbrains.com/issue/VIM-1164)
### Fixes:
* [VIM-2502](https://youtrack.jetbrains.com/issue/VIM-2502) Fix the shape of new carets
* [VIM-2499](https://youtrack.jetbrains.com/issue/VIM-2499) Fix mapping to esc
* [VIM-2500](https://youtrack.jetbrains.com/issue/VIM-2500) Fix esc for normal mode
* [VIM-2523](https://youtrack.jetbrains.com/issue/VIM-2523) `i` command for the folder in the project tree
* [VIM-2471](https://youtrack.jetbrains.com/issue/VIM-2471) Multiple [{ and ]} actions
* [VIM-2504](https://youtrack.jetbrains.com/issue/VIM-2504) Fix esc with using python notebooks
* [VIM-2540](https://youtrack.jetbrains.com/issue/VIM-2540) Fix option listeners
* [VIM-2548](https://youtrack.jetbrains.com/issue/VIM-2548) Fix paste
* [VIM-2470](https://youtrack.jetbrains.com/issue/VIM-2470) Fix incorrect reset of cursor shape
* [VIM-2223](https://youtrack.jetbrains.com/issue/VIM-2223), [VIM-1684](https://youtrack.jetbrains.com/issue/VIM-1684), [VIM-2491](https://youtrack.jetbrains.com/issue/VIM-2491) Fix `gv`
### Merged PRs:
* [441](https://github.com/JetBrains/ideavim/pull/441) by [DanEEStar](https://github.com/DanEEStar): Add Matchit support for Vue.js files
* [440](https://github.com/JetBrains/ideavim/pull/440) by [Kevin Suen](https://github.com/ksrb): Add matchit support for handlebars
* [448](https://github.com/JetBrains/ideavim/pull/448) by [Michael Schertenleib](https://github.com/cravay): Support custom element names in vim-surround
* [435](https://github.com/JetBrains/ideavim/pull/435) by [Piotr Mikulski](https://github.com/pmnoxx): Print stderr when running a command just like vim does
* [449](https://github.com/JetBrains/ideavim/pull/449) by [Lonre Wang](https://github.com/lonre): Typo fix
* [453](https://github.com/JetBrains/ideavim/pull/453) by [Matt Ellis](https://github.com/citizenmatt): fix(VIM-2470): Fix incorrect reset of cursor shape
* [461](https://github.com/JetBrains/ideavim/pull/461) by [David Dadon](https://github.com/ddadon10): Add shortcut to ideajoin example
## 1.9.0, 2021-12-10
### Features:
* Make IdeaVim compatible with CodeWithMe | [VIM-2332](https://youtrack.jetbrains.com/issue/VIM-2332)
* expression register `<C-R>=` | [VIM-521](https://youtrack.jetbrains.com/issue/VIM-521)
### Fixes:
* [VIM-2442](https://youtrack.jetbrains.com/issue/VIM-2442) Fix `!` command
* [VIM-2255](https://youtrack.jetbrains.com/issue/VIM-2255) Fix reload icon on windows
* [VIM-2199](https://youtrack.jetbrains.com/issue/VIM-2199) Fix autocompletion for AppCode
* [VIM-2445](https://youtrack.jetbrains.com/issue/VIM-2445) Fix spaces in range
* [VIM-2450](https://youtrack.jetbrains.com/issue/VIM-2450) Fix set command
* [VIM-2451](https://youtrack.jetbrains.com/issue/VIM-2451) Fix comments
* [VIM-2452](https://youtrack.jetbrains.com/issue/VIM-2452) Fix augroup
* [VIM-2453](https://youtrack.jetbrains.com/issue/VIM-2453) Fix split command
* [VIM-2397](https://youtrack.jetbrains.com/issue/VIM-2397) Fix dollar motion as an operator
* [VIM-2432](https://youtrack.jetbrains.com/issue/VIM-2432) Fix ctrl-d and ctrl-u motions with scrolloff
* [VIM-2462](https://youtrack.jetbrains.com/issue/VIM-2462) Reset caret shape when disabling plugin
* [VIM-2449](https://youtrack.jetbrains.com/issue/VIM-2449) Fix `I` for one-line block selection
* [VIM-2213](https://youtrack.jetbrains.com/issue/VIM-2213) Close VCS change popup on esc
* [VIM-2435](https://youtrack.jetbrains.com/issue/VIM-2435) Close diff window on esc
* [VIM-2461](https://youtrack.jetbrains.com/issue/VIM-2461) Show action id before action execution
* [VIM-2026](https://youtrack.jetbrains.com/issue/VIM-2026) Keep global marks after restart
* [VIM-1691](https://youtrack.jetbrains.com/issue/VIM-1691) Fix default path for `!` command
* [VIM-2487](https://youtrack.jetbrains.com/issue/VIM-2487)
[VIM-2434](https://youtrack.jetbrains.com/issue/VIM-2434)
Fix IdeaVim in PyCharm notebooks
### Merged PRs:
* [390](https://github.com/JetBrains/ideavim/pull/390) by [chylex](https://github.com/chylex): [VIM-2255] Missing reload icon in .ideavimrc on Windows
* [391](https://github.com/JetBrains/ideavim/pull/391) by [Matt Ellis](https://github.com/citizenmatt): fix(VIM-2432): handle scrolloff with <C-D> and <C-U>
* [401](https://github.com/JetBrains/ideavim/pull/401) by [Matt Ellis](https://github.com/citizenmatt): Reset caret shape when disabling plugin
* [407](https://github.com/JetBrains/ideavim/pull/407) by [eugene nizienko](https://github.com/nizienko): Video recording for ui tests
* [418](https://github.com/JetBrains/ideavim/pull/418) by [chylex](https://github.com/chylex): Fix compile errors in unit tests on Windows
## 1.8.0, 2021-10-27
### Features:
* Support `matchit.vim` extension for Ruby and XML/HTML [VIM-539](https://youtrack.jetbrains.com/issue/VIM-539) | [matchit.vim](https://github.com/chrisbra/matchit)
* IDE-specific configuration [VIM-1573](https://youtrack.jetbrains.com/issue/VIM-1573)
* Call command [VIM-2416](https://youtrack.jetbrains.com/issue/VIM-2416)
### Fixes:
* [VIM-2417](https://youtrack.jetbrains.com/issue/VIM-2417) Fix bars in substitute command
* [VIM-2425](https://youtrack.jetbrains.com/issue/VIM-2425) Fix reload button
* [VIM-2422](https://youtrack.jetbrains.com/issue/VIM-2422) Fix freeze
* [VIM-2420](https://youtrack.jetbrains.com/issue/VIM-2420) Fix freeze
* [VIM-2359](https://youtrack.jetbrains.com/issue/VIM-2359) Fix selection with VimExchange
* [VIM-2426](https://youtrack.jetbrains.com/issue/VIM-2426) Fix marks in commands
* [VIM-2438](https://youtrack.jetbrains.com/issue/VIM-2438) Fix marks in commands
* [DISCUSSION-386](https://github.com/JetBrains/ideavim/discussions/386) Fixed command with no spaces before argument
### Merged PRs:
* [337](https://github.com/JetBrains/ideavim/pull/337) by [Matt Ellis](https://github.com/citizenmatt): guicursor!
* [343](https://github.com/JetBrains/ideavim/pull/343) by [Martin Yzeiri](https://github.com/myzeiri): Emulate matchit.vim
* [387](https://github.com/JetBrains/ideavim/pull/387) by [Petar Guglev](https://github.com/wrightwriter): Update README.md link
## 1.7.2, 2021-09-30
### Fixes:
* [VIM-2405](https://youtrack.jetbrains.com/issue/VIM-2405) ExExceptions during `map <expr>` execution are now displayed in status bar
* [VIM-2406](https://youtrack.jetbrains.com/issue/VIM-2406) Fix go to line command
* [VIM-2408](https://youtrack.jetbrains.com/issue/VIM-2408) Fix vim script parser
* [VIM-2409](https://youtrack.jetbrains.com/issue/VIM-2409) Fix substitute command
* [VIM-2411](https://youtrack.jetbrains.com/issue/VIM-2411) Fix vim script parser
## 1.7.1, 2021-09-20
### Fixes:
* [VIM-2400](https://youtrack.jetbrains.com/issue/VIM-2400) Fix vim script parser
* [VIM-2401](https://youtrack.jetbrains.com/issue/VIM-2401) Exceptions occurred during execution of `map<expr>` are now shown in status bar
* [VIM-2404](https://youtrack.jetbrains.com/issue/VIM-2404) Fix multiple pastes from unnamed clipboard
## 1.7.0, 2021-09-16
### Features:
* New engine for Vim Script execution. Check out the [GitHub Discussion](https://jb.gg/vim-script-discussion).
* Mapping keys to expressions (map \<expr>). See `:h map-expression`.
### Fixes:
* [VIM-2368](https://youtrack.jetbrains.com/issue/VIM-2368) Do not remove selection on right click
* [VIM-2392](https://youtrack.jetbrains.com/issue/VIM-2392) Fix possible out of bounds exception
* [VIM-2387](https://youtrack.jetbrains.com/issue/VIM-2387) Fix coping with unnamed and ideaput
### Changes:
* New versioning scheme. Current version is `1.7.0` instead of `0.70`.
### Merged PRs:
* [349](https://github.com/JetBrains/ideavim/pull/349) by [eugene nizienko](https://github.com/nizienko): Run UI test ci
## 0.69, 2021-07-20
### Features:
* Support several buffer management commands [VIM-1062](https://youtrack.jetbrains.com/issue/VIM-1062), [VIM-2335](https://youtrack.jetbrains.com/issue/VIM-2335)
### Fixes:
* [VIM-2317](https://youtrack.jetbrains.com/issue/VIM-2317) Fix memory leak
* [VIM-1357](https://youtrack.jetbrains.com/issue/VIM-1357)
[VIM-1566](https://youtrack.jetbrains.com/issue/VIM-1566) Fix external filters
* [VIM-2336](https://youtrack.jetbrains.com/issue/VIM-2336) Fix repeat for the `T` movement
* [VIM-1192](https://youtrack.jetbrains.com/issue/VIM-1192) Fix dollar motion from single command
* [VIM-1672](https://youtrack.jetbrains.com/issue/VIM-1672) IdeaVim correctly populates clipboard history
* [VIM-2351](https://youtrack.jetbrains.com/issue/VIM-2351) Correctly select last character when selecting with mouse
### Merged PRs:
* [332](https://github.com/JetBrains/ideavim/pull/332) by [Matt Ellis](https://github.com/citizenmatt): VIM-1357+VIM-1566: Use OS shell to run filter command
* [333](https://github.com/JetBrains/ideavim/pull/333) by [Michal Placek](https://github.com/MichalPlacek): VIM-1062
* [334](https://github.com/JetBrains/ideavim/pull/334) by [Michal Placek](https://github.com/MichalPlacek): vim-2335 Support for navigation to previous buffer with :b#
## 0.68, 2021-06-22
### Features:
* Support `:global` and `:vglobal` commands [VIM-831](https://youtrack.jetbrains.com/issue/VIM-831), [VIM-832](https://youtrack.jetbrains.com/issue/VIM-832)
* Support `vim-indent-object` extension [VIM-1151](https://youtrack.jetbrains.com/issue/VIM-1151) | [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object)
* Support `:print` command
### Fixes:
* [VIM-2308](https://youtrack.jetbrains.com/issue/VIM-2308) Go to next tab doesn't move scrolling
### Merged PRs:
* [261](https://github.com/JetBrains/ideavim/pull/261) by [Shrikant Sharat Kandula](https://github.com/sharat87): New extension: Indentation based text objects
* [308](https://github.com/JetBrains/ideavim/pull/308) by [Matt Ellis](https://github.com/citizenmatt): Fix unnecessary caret movement when switching tabs
## 0.67, 2021-05-20
### Features:
* Support `sethandler` command to configure shortcuts conflicts via `~/.ideavimrc` file. See [docs](https://jb.gg/vim-sethandler).
* Support `vim-paragraph-motion` extension [VIM-2290](https://youtrack.jetbrains.com/issue/VIM-2290) | [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion)
* Add "Reset Handlers" button for "Conflicting Shortcuts" setting table
### Changes:
* Rename "Vim Emulation" in settings to "Vim"
### Fixes:
* [VIM-2230](https://youtrack.jetbrains.com/issue/VIM-2230) Tweak caret position with inline rename options inlay
* [VIM-2177](https://youtrack.jetbrains.com/issue/VIM-2177) Fix scrolling issues near bottom of file
* [VIM-2276](https://youtrack.jetbrains.com/issue/VIM-2276) `:ls` returns correct path for files on Microsoft Windows.
* [VIM-1953](https://youtrack.jetbrains.com/issue/VIM-1953) Execute live testing for `:w` command
* [VIM-2284](https://youtrack.jetbrains.com/issue/VIM-2284) Values are not duplicated in set command
* [VIM-2289](https://youtrack.jetbrains.com/issue/VIM-2289) Fix `<End>` command behaviour
* [VIM-1476](https://youtrack.jetbrains.com/issue/VIM-1476) Last inserted text is stored in `.` register
* [VIM-2295](https://youtrack.jetbrains.com/issue/VIM-2295) Fix `<S-Space>` in insert mode with an existing mapping
* [VIM-1401](https://youtrack.jetbrains.com/issue/VIM-1401) IdeaVim triggers readonly handler
* [VIM-1856](https://youtrack.jetbrains.com/issue/VIM-1856) Support defining shortcuts in .ideavimrc
* [VIM-1523](https://youtrack.jetbrains.com/issue/VIM-1523) Allow different shortcut handlers in different modes
### Merged PRs:
* [280](https://github.com/JetBrains/ideavim/pull/280) by [Matt Ellis](https://github.com/citizenmatt): Caret position and view scrolling fixes
* [289](https://github.com/JetBrains/ideavim/pull/289) by [MichalPlacek](https://github.com/MichalPlacek): VIM-2276 ls returns "absolute path" for files on Microsoft Windows.
* [295](https://github.com/JetBrains/ideavim/pull/295) by [MichalPlacek](https://github.com/MichalPlacek): VIM-1476
## 0.66, 2021-04-09
Not a lot of changes for this release. Focused on internal improvements.
### Features:
* Support `startofline` option
### Fixes:
* [VIM-2238](https://youtrack.jetbrains.com/issue/VIM-2238) Fix `M` command for small files
### Merged PRs:
* [275](https://github.com/JetBrains/ideavim/pull/275) by [Matt Ellis](https://github.com/citizenmatt): Fix edge cases for H, L and M and introduce 'startofline' option
* [276](https://github.com/JetBrains/ideavim/pull/276) by [Matt Ellis](https://github.com/citizenmatt): More refactoring of SearchGroup
## 0.65, 2021-02-17
### Features:
* Support `NERDTree` extension [VIM-1042](https://youtrack.jetbrains.com/issue/VIM-1042) | [NERDTree](https://github.com/preservim/nerdtree)
* <details>
<summary><strong>Click to see details</strong></summary>
<img src="assets/changes/0.65/nerdtree.gif" alt="NERDTree example"/>
</details>
* Support `maxmapdepth` option to define the maximum depth of mappings
### Fixes:
* [VIM-2202](https://youtrack.jetbrains.com/issue/VIM-2202) Fix macro recording for ex command and search
* [VIM-1799](https://youtrack.jetbrains.com/issue/VIM-1799)
[VIM-1794](https://youtrack.jetbrains.com/issue/VIM-1794)
Special characters are not interpreted on yanking
* [VIM-2218](https://youtrack.jetbrains.com/issue/VIM-2218) Fix some shortcuts for 2021.+
* [VIM-2217](https://youtrack.jetbrains.com/issue/VIM-2217) Fix adding new line at the end of the file for the AppCode
* [VIM-2220](https://youtrack.jetbrains.com/issue/VIM-2220) Do not try to get a commandState for null editor
* [VIM-2153](https://youtrack.jetbrains.com/issue/VIM-2153) Fix storing special characters after IDE closing
### Merged PRs:
* [269](https://github.com/JetBrains/ideavim/pull/269) by [大牙(Henry Zhu)](https://github.com/daya0576): fix invalid link of submodule docs
## 0.64, 2020-12-23
### Merged PRs:
* [260](https://github.com/JetBrains/ideavim/pull/260) by [Matt Ellis](https://github.com/citizenmatt): Refactor SearchGroup
### Fixes:
* [VIM-2194](https://youtrack.jetbrains.com/issue/VIM-2194) Fix caret shape during editing a new file
## 0.63, 2020-12-16
### Changes:
* Update the minimal required IJ version: 2020.2+
### Fixes:
* [CWM-927](https://youtrack.jetbrains.com/issue/CWM-927) Fix typing for CodeWithMe and IdeaVim
### Merged PRs:
* [259](https://github.com/JetBrains/ideavim/pull/259) by [Vladimir Petrenko](https://github.com/vladimir-petrenko): CWM-927 disable vim for client's hidden editor on host
## 0.62, 2020-12-15
### Features:
* Support `unmap` and `mapclear` commands [VIM-1491](https://youtrack.jetbrains.com/issue/VIM-1491)
* Support mappings in ex panel (`cmap`) [VIM-1227](https://youtrack.jetbrains.com/issue/VIM-1227)
### Changes:
* `octal` is now disabled by default for `nrformats`. [VIM-2181](https://youtrack.jetbrains.com/issue/VIM-2181)
### Fixes:
* [VIM-2113](https://youtrack.jetbrains.com/issue/VIM-2113) Fix `cit` for empty tags
* [VIM-2114](https://youtrack.jetbrains.com/issue/VIM-2114) Unnamed register isn't changed after deleting empty tag
* [VIM-1475](https://youtrack.jetbrains.com/issue/VIM-1475) Enable block caret to be used in insert mode.
* [VIM-2170](https://youtrack.jetbrains.com/issue/VIM-2170) Fix an alternative range format for `s` command
* [VIM-1913](https://youtrack.jetbrains.com/issue/VIM-1913)
[VIM-2154](https://youtrack.jetbrains.com/issue/VIM-2154) Several fixes for AppCode templates
* [VIM-1756](https://youtrack.jetbrains.com/issue/VIM-1756) Fix startsel from insert mode
### Merged PRs:
* [249](https://github.com/JetBrains/ideavim/pull/249) by [Jan Palus](https://github.com/jpalus): VIM-2113 Increase tag range only in visual mode
* [250](https://github.com/JetBrains/ideavim/pull/250) by [Jan Palus](https://github.com/jpalus): VIM-2114 Do not override registers when deleting empty range
* [256](https://github.com/JetBrains/ideavim/pull/256) by [Brandon Conway](https://github.com/brandoncc): Fix typo
* [254](https://github.com/JetBrains/ideavim/pull/254) by [Grzegorz Antoniak](https://github.com/antekone): VIM-1475: Add an option to use block caret in insert mode
* [225](https://github.com/JetBrains/ideavim/pull/225) by [sumoooru2](https://github.com/sumoooru2): Implement cmap
* [258](https://github.com/JetBrains/ideavim/pull/258) by [Matt Ellis](https://github.com/citizenmatt): Show the correct handler class in :map
* [257](https://github.com/JetBrains/ideavim/pull/257) by [Matt Ellis](https://github.com/citizenmatt): Extract SearchHighlightsHelper from SearchGroup
* [251](https://github.com/JetBrains/ideavim/pull/251) by [Shaun Patterson](https://github.com/shaunpatterson): VIM-1756: startSel works in insert mode
## 0.61, 2020-11-12
### Features:
* Ability to map IDE actions via the `<Action>` keyword. E.g. `map <C-K> <Action>(CommentByLineComment)`.
Check out `README.md` for the details.
* `IdeaVim: track action Ids` command to find action ids for the `:action` command.
Enable this option in "Search everywhere" (double shift).
* Ability to enable extensions using `vim-plug` or `vundle` syntax.
E.g. to enable commentary extension you can use one of the following commands:
```vim
set commentary
Plug 'tpope/vim-commentary'
Plug 'https://github.com/tpope/vim-commentary'
Plugin 'tpope/vim-commentary'
...
```
This approach is especially handy if you have `.vimrc` with plugins registered via `vim-plug` or `vundle`.
### Changes:
* Fix `<Esc>` for dialogs. Now `<Esc>` will exit insert / visual mode and close the dialog from normal mode.
* Add option to disable IdeaVim in dialogs / single line editors. [VIM-765](https://youtrack.jetbrains.com/issue/VIM-765)
Use `set ideavimsupport=` to disable IdeaVim in dialog editors.
* Reposition cursor when `scrolloff` changes
### Fixes:
* [VIM-2150](https://youtrack.jetbrains.com/issue/VIM-2150) `Shift-D` should not delete an empty line
* [VIM-2157](https://youtrack.jetbrains.com/issue/VIM-2157) Fix tab with an active template
* [VIM-2156](https://youtrack.jetbrains.com/issue/VIM-2156) Correct up/down motions with inlays
* [VIM-2144](https://youtrack.jetbrains.com/issue/VIM-2144) Correct text position after block insert with inlays
* [VIM-2158](https://youtrack.jetbrains.com/issue/VIM-2158) Fix scrolling when `scrolloff` is over half screen height, but less than full height
### Merged PRs:
* [255](https://github.com/JetBrains/ideavim/pull/255) by [Matt Ellis](https://github.com/citizenmatt): Fix various scrolling issues
## 0.60, 2020-10-09
### Features:
* Support of `virtualedit=onemore` ([VIM-844](https://youtrack.jetbrains.com/issue/VIM-844))
### Fixes:
* [VIM-2097](https://youtrack.jetbrains.com/issue/VIM-2097) Do not apply mappings for register selecting
* [VIM-2080](https://youtrack.jetbrains.com/issue/VIM-2080) Fix S command with count
* [VIM-2099](https://youtrack.jetbrains.com/issue/VIM-2099) Fix operations with backward inclusive motions
* [VIM-2104](https://youtrack.jetbrains.com/issue/VIM-2104) Use `sidescrolloff` for horizontal offset
* [VIM-1080](https://youtrack.jetbrains.com/issue/VIM-1080) Fix `zt` for virtual space enabled
* [VIM-1556](https://youtrack.jetbrains.com/issue/VIM-1556) Fix horizontal scrolling
* [VIM-1770](https://youtrack.jetbrains.com/issue/VIM-1770) Fix goto end with large inline hints
* [VIM-2110](https://youtrack.jetbrains.com/issue/VIM-2110) Fix scrolling for non-monospaced fonts
### Changes:
* `:w` works as `:wa` by default. This can be disabled with `ideawrite` option.
Now features like `Prettier on save` or `Run on save for files` would work with `:w` command as well.
See [VIM-1968](https://youtrack.jetbrains.com/issue/VIM-1968).
### Merged PRs:
* [248](https://github.com/JetBrains/ideavim/pull/248) by [Yaohui Wang](https://github.com/yaohui-wyh): Check if project is disposed when editorDeinit
* [242](https://github.com/JetBrains/ideavim/pull/242) by [Iain Ballard](https://github.com/i-e-b): Partial implementation of virtualedit config
* [252](https://github.com/JetBrains/ideavim/pull/252) by [Matt Ellis](https://github.com/citizenmatt): Fixes for scrolling
## 0.59, 2020-08-25
### Features:
* `vim-highlightedyank` plugin emulation ([VIM-1970](https://youtrack.jetbrains.com/issue/VIM-1970) | [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank)).
* <details>
<summary><strong>Click to see details</strong></summary>
<img src="assets/changes/0.59/highlight_yank.gif" alt="highlight yank"/>
</details>
* [VIM-2068](https://youtrack.jetbrains.com/issue/VIM-2068) `:tabclose` command
### Fixes:
* [VIM-1421](https://youtrack.jetbrains.com/issue/VIM-1421) Escape key finishes `t` and `f` motions
* [VIM-2075](https://youtrack.jetbrains.com/issue/VIM-2075) Fix zR command
* [VIM-2059](https://youtrack.jetbrains.com/issue/VIM-2059) Fixed macro editing
### Merged PRs:
* [237](https://github.com/JetBrains/ideavim/pull/237) by [Adrià Farrés](https://github.com/adriafarres): Reset operator-pending commands on escape
* [241](https://github.com/JetBrains/ideavim/pull/241) by [Patrick Elmquist](https://github.com/patrick-elmquist): Properly reset when pressing Esc in the middle of command
* [244](https://github.com/JetBrains/ideavim/pull/244) by [Rieon Ke](https://github.com/rieonke): Implement tabc[lose] ex command
* [240](https://github.com/JetBrains/ideavim/pull/240) by [Rieon Ke](https://github.com/rieonke): add support for putting & editing macros
* [245](https://github.com/JetBrains/ideavim/pull/245) by [KostkaBrukowa](https://github.com/KostkaBrukowa): VIM-1970 | Working solution of plugin vim-highlightedyank
## 0.58, 2020-07-07
### Features:
* `exchange` plugin emulation ([VIM-921](https://youtrack.jetbrains.com/issue/VIM-921) | [vim-exchange](https://github.com/tommcdo/vim-exchange)).
* `~/.ideavimrc` file can be reloaded using the new floating action.
* <details>
<summary><strong>Click to see details</strong></summary>
<img src="assets/changes/0.58/reload_ideavimrc.png" alt="IdeaVimRc reload"/>
</details>
* Add `:buffer` command.
### Changes:
* Support IntelliJ's smooth scrolling. Use "Enable smooth scrolling" checkbox in _Preferences | Editor | General_ to disable.
### Fixes:
* [VIM-1994](https://youtrack.jetbrains.com/issue/VIM-1994) Correct paste after `y}P` command.
* [VIM-1924](https://youtrack.jetbrains.com/issue/VIM-1924) Select next occurrence doesn't become block selection.
* [VIM-2038](https://youtrack.jetbrains.com/issue/VIM-2038) Last line is now accessible in normal mode
* [VIM-1934](https://youtrack.jetbrains.com/issue/VIM-1934) Line number is not clipped for relative line numbers
* [VIM-1852](https://youtrack.jetbrains.com/issue/VIM-1852) Line number doesn't flickers for relative line numbers
* [VIM-2021](https://youtrack.jetbrains.com/issue/VIM-2021) Line numbers don't reactivating
* Fix mappings to `"\<SPACE>"` including `let mapleader="\<SPACE>"`
### Merged PRs:
* [233](https://github.com/JetBrains/ideavim/pull/233) by [valis](https://github.com/valis): [VIM-1994] Correct paste after `y}P` command.
* [224](https://github.com/JetBrains/ideavim/pull/224) by [pmnoxx](https://github.com/pmnoxx): Populate intelij navigation history together with ideavim jumplist.
* [227](https://github.com/JetBrains/ideavim/pull/227) by [angelbot](https://github.com/angelbot): Add support for buffer command.
* [230](https://github.com/JetBrains/ideavim/pull/230) by [fan-tom](https://github.com/fan-tom): VIM-1924.
* [231](https://github.com/JetBrains/ideavim/pull/231) by [citizenmatt](https://github.com/citizenmatt): Support smooth scrolling.
* [239](https://github.com/JetBrains/ideavim/pull/239) by [citizenmatt](https://github.com/citizenmatt): Use new API for relative line numbers
## 0.57, 2020-04-28
### Fixes:
* [VIM-1992](https://youtrack.jetbrains.com/issue/VIM-1992) Fix mappings to `<S-Letter>`
* [VIM-1991](https://youtrack.jetbrains.com/issue/VIM-1991) Fix working with number registers
### Merged PRs:
* [234](https://github.com/JetBrains/ideavim/pull/234) by [runforprogram](https://github.com/runforprogram): [VIM-1991] fix >0 number register not work
## 0.56, 2020-04-09
### Features:
* `ReplaceWithRegister` plugin emulation ([ReplaceWithRegister](https://www.vim.org/scripts/script.php?script_id=2703)).
* `argtextobj.vim` plugin emulation ([argtextobj.vim](https://vim.sourceforge.io/scripts/script.php?script_id=2699)).
* `vim-textobj-entire` plugin emulation ([vim-textobj-entire](https://github.com/kana/vim-textobj-entire)).
* [VIM-434](https://youtrack.jetbrains.com/issue/VIM-434) Add `'showcmd'` support, on by default.
* Support `ls/buffers/files` commands.
### Changes:
* Replace `ideastatusbar` option with `ideastatusicon`. Now you can make the icon gray.
### Deprecations:
* `ideastatusbar` option is deprecated now. See `ideastatusicon`.
### Fixes:
* [VIM-1284](https://youtrack.jetbrains.com/issue/VIM-1284) Fix mapping of digits.
* Fix handling of counts on both operator and motion, e.g. `3d2w` deletes 6 words, instead of 32.
* Allow mapping of `<C-K>` and `<C-V>`/`<C-Q>`.
* [VIM-1899](https://youtrack.jetbrains.com/issue/VIM-1899) Add argument to `:registers` command.
* [VIM-1835](https://youtrack.jetbrains.com/issue/VIM-1835) Macros record input keystrokes instead of mapped keystrokes.
* [VIM-1900](https://youtrack.jetbrains.com/issue/VIM-1900) Ensure non-printable output for `:registers`, `:marks` and `:jumps` is encoded correctly.
* [VIM-570](https://youtrack.jetbrains.com/issue/VIM-570) Print non-ascii characters in ex panel.
* [VIM-926](https://youtrack.jetbrains.com/issue/VIM-926) Fix `<S-Space>` mapping.
* [VIM-1958](https://youtrack.jetbrains.com/issue/VIM-1958) Fix `X` command for linewise selection.
* [VIM-1911](https://youtrack.jetbrains.com/issue/VIM-1911) Lookup keys respect `IDE` handler.
* [VIM-1008](https://youtrack.jetbrains.com/issue/VIM-1008) Correct `ci{` behavior.
## 0.55, 2020-01-20
### Features:
* Surround and Commentary extensions support repeating with a dot command ([VIM-1118](https://youtrack.jetbrains.com/issue/VIM-1118))
* Support XDG settings standard ([VIM-664](https://youtrack.jetbrains.com/issue/VIM-664)) * Support XDG settings standard ([VIM-664](https://youtrack.jetbrains.com/issue/VIM-664))
* Add option to remove the status bar icon ([VIM-1847](https://youtrack.jetbrains.com/issue/VIM-1847)) * Add option to remove the status bar icon ([VIM-1847](https://youtrack.jetbrains.com/issue/VIM-1847))
**Fixes:** ### Fixes:
* [VIM-1823](https://youtrack.jetbrains.com/issue/VIM-1823) Fix multiple carets with ignorecase * [VIM-1823](https://youtrack.jetbrains.com/issue/VIM-1823) Fix multiple carets with ignorecase
* [VIM-1053](https://youtrack.jetbrains.com/issue/VIM-1053) * [VIM-1053](https://youtrack.jetbrains.com/issue/VIM-1053)
[VIM-1038](https://youtrack.jetbrains.com/issue/VIM-1038) [VIM-1038](https://youtrack.jetbrains.com/issue/VIM-1038)
@@ -43,23 +508,26 @@ _Available since 0.54.1 EAP:_
* [VIM-1853](https://youtrack.jetbrains.com/issue/VIM-1853) Fix marks for disposed projects * [VIM-1853](https://youtrack.jetbrains.com/issue/VIM-1853) Fix marks for disposed projects
* [VIM-1858](https://youtrack.jetbrains.com/issue/VIM-1858) Fix imap for autocomplete * [VIM-1858](https://youtrack.jetbrains.com/issue/VIM-1858) Fix imap for autocomplete
* [VIM-1362](https://youtrack.jetbrains.com/issue/VIM-1362) Search with confirm doesn't scroll down far enough * [VIM-1362](https://youtrack.jetbrains.com/issue/VIM-1362) Search with confirm doesn't scroll down far enough
* [VIM-1875](https://youtrack.jetbrains.com/issue/VIM-1875) Fix `isk` in `~/.ideaivmrc`
* [VIM-1874](https://youtrack.jetbrains.com/issue/VIM-1874) Fix `set clipboard=unnamed` execution from `~/.ideavimrc`
* [VIM-1878](https://youtrack.jetbrains.com/issue/VIM-1878) Fix `c` command after extract method action
* [VIM-1884](https://youtrack.jetbrains.com/issue/VIM-1884) Show quickDoc during popup with `CTRL-J`
* [VIM-987](https://youtrack.jetbrains.com/issue/VIM-987) Fix arrow keys for the NEO keyboard
## 0.54, 2019-11-20
0.54, 2019-11-20 ### Features:
--------------
**Features:**
* EasyMotion plugin emulation ([VIM-820](https://youtrack.jetbrains.com/issue/VIM-820) | [Instructions](https://github.com/JetBrains/ideavim#emulated-vim-plugins)) * EasyMotion plugin emulation ([VIM-820](https://youtrack.jetbrains.com/issue/VIM-820) | [Instructions](https://github.com/JetBrains/ideavim#emulated-vim-plugins))
* Support surrounding with a function name ([link](https://github.com/tpope/vim-surround/blob/master/doc/surround.txt#L138)) * Support surrounding with a function name ([link](https://github.com/tpope/vim-surround/blob/master/doc/surround.txt#L138))
* Add `:delmarks` command ([VIM-1720](https://youtrack.jetbrains.com/issue/VIM-1720)) * Add `:delmarks` command ([VIM-1720](https://youtrack.jetbrains.com/issue/VIM-1720))
* Add IdeaVim icon to the status bar ([VIM-943](https://youtrack.jetbrains.com/issue/VIM-943)) * Add IdeaVim icon to the status bar ([VIM-943](https://youtrack.jetbrains.com/issue/VIM-943))
**Changes:** ### Changes:
* Remove the default IdeaVim toggle shortcut (<kbd>CTRL</kbd><kbd>ALT</kbd><kbd>V</kbd>) * Remove the default IdeaVim toggle shortcut (<kbd>CTRL</kbd><kbd>ALT</kbd><kbd>V</kbd>)
* Rename `refactoring` value of `selectmode` option to `ideaselection` * Rename `refactoring` value of `selectmode` option to `ideaselection`
* Remove `template` value of `selectmode` option and replace it with `idearefactormode` option. * Remove `template` value of `selectmode` option and replace it with `idearefactormode` option.
**Fixes:** ### Fixes:
* [VIM-1766](https://youtrack.jetbrains.com/issue/VIM-1766) Fix disappearing caret in ex entry on Linux * [VIM-1766](https://youtrack.jetbrains.com/issue/VIM-1766) Fix disappearing caret in ex entry on Linux
* [VIM-1032](https://youtrack.jetbrains.com/issue/VIM-1032) Annotations work well with relative line numbers enabled * [VIM-1032](https://youtrack.jetbrains.com/issue/VIM-1032) Annotations work well with relative line numbers enabled
* [VIM-1762](https://youtrack.jetbrains.com/issue/VIM-1762) Relative line numbers respect line number theme * [VIM-1762](https://youtrack.jetbrains.com/issue/VIM-1762) Relative line numbers respect line number theme
@@ -86,8 +554,7 @@ _Available since 0.54.1 EAP:_
* [VIM-1604](https://youtrack.jetbrains.com/issue/VIM-1604) Add IdeaVim logo * [VIM-1604](https://youtrack.jetbrains.com/issue/VIM-1604) Add IdeaVim logo
0.53, 2019-08-07 ## 0.53, 2019-08-07
--------------
* [VIM-1711](https://youtrack.jetbrains.com/issue/VIM-1711) Search is not triggered during surround action * [VIM-1711](https://youtrack.jetbrains.com/issue/VIM-1711) Search is not triggered during surround action
* [VIM-1712](https://youtrack.jetbrains.com/issue/VIM-1712) Fix `Y` command for visual mode * [VIM-1712](https://youtrack.jetbrains.com/issue/VIM-1712) Fix `Y` command for visual mode
* [VIM-1713](https://youtrack.jetbrains.com/issue/VIM-1713) Surround in visual mode put caret in correct position * [VIM-1713](https://youtrack.jetbrains.com/issue/VIM-1713) Surround in visual mode put caret in correct position
@@ -98,8 +565,7 @@ _Available since 0.54.1 EAP:_
* [VIM-1736](https://youtrack.jetbrains.com/issue/VIM-1736) Fix `` for ex panel * [VIM-1736](https://youtrack.jetbrains.com/issue/VIM-1736) Fix `` for ex panel
* [VIM-1739](https://youtrack.jetbrains.com/issue/VIM-1739) Fix full-width characters for ex pane * [VIM-1739](https://youtrack.jetbrains.com/issue/VIM-1739) Fix full-width characters for ex pane
0.52, 2019-07-23 ## 0.52, 2019-07-23
--------------
* Introduce [Select Mode](https://github.com/JetBrains/ideavim/wiki/Select-mode). * Introduce [Select Mode](https://github.com/JetBrains/ideavim/wiki/Select-mode).
@@ -192,8 +658,7 @@ _Available since 0.54.1 EAP:_
* [VIM-1698](https://youtrack.jetbrains.com/issue/VIM-1698) Paste doesn't clear clipboard * [VIM-1698](https://youtrack.jetbrains.com/issue/VIM-1698) Paste doesn't clear clipboard
* [VIM-1359](https://youtrack.jetbrains.com/issue/VIM-1359) Fix behavior of i_CTRL-W action * [VIM-1359](https://youtrack.jetbrains.com/issue/VIM-1359) Fix behavior of i_CTRL-W action
0.51, 2019-02-12 ## 0.51, 2019-02-12
----------------
* [VIM-1558](https://youtrack.jetbrains.com/issue/VIM-1558) Fixed scrolling for code with block inlays in Rider 2018.3 * [VIM-1558](https://youtrack.jetbrains.com/issue/VIM-1558) Fixed scrolling for code with block inlays in Rider 2018.3
* [VIM-1187](https://youtrack.jetbrains.com/issue/VIM-1187) Improved performance of `set relativelinenumber` on large files * [VIM-1187](https://youtrack.jetbrains.com/issue/VIM-1187) Improved performance of `set relativelinenumber` on large files
@@ -201,8 +666,7 @@ _Available since 0.54.1 EAP:_
* [VIM-798](https://youtrack.jetbrains.com/issue/VIM-798) Allow arrow keys for window navigation commands * [VIM-798](https://youtrack.jetbrains.com/issue/VIM-798) Allow arrow keys for window navigation commands
0.50, 2018-10-18 ## 0.50, 2018-10-18
----------------
Moved "Vim Emulation" settings into "File | Settings | Vim Emulation". Support Moved "Vim Emulation" settings into "File | Settings | Vim Emulation". Support
for vim-multiple-cursors commands `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>` (put `set for vim-multiple-cursors commands `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>` (put `set
@@ -228,8 +692,7 @@ Vim commands for multiple cursors. Various bug fixes.
* [VIM-1274](https://youtrack.jetbrains.com/issue/VIM-1274) Correctly process escaping when `smartcase` is on * [VIM-1274](https://youtrack.jetbrains.com/issue/VIM-1274) Correctly process escaping when `smartcase` is on
0.49, 2017-12-12 ## 0.49, 2017-12-12
----------------
Enabled zero-latency typing for Vim emulation. Added support for `iskeyword` option. Various bug fixes. Enabled zero-latency typing for Vim emulation. Added support for `iskeyword` option. Various bug fixes.
@@ -237,8 +700,7 @@ Enabled zero-latency typing for Vim emulation. Added support for `iskeyword` opt
* [VIM-1367](https://youtrack.jetbrains.com/issue/VIM-1367) Support `iskeyword` option * [VIM-1367](https://youtrack.jetbrains.com/issue/VIM-1367) Support `iskeyword` option
* [VIM-523](https://youtrack.jetbrains.com/issue/VIM-523) Fixed global mark remembering only the line number * [VIM-523](https://youtrack.jetbrains.com/issue/VIM-523) Fixed global mark remembering only the line number
0.48, 2017-01-15 ## 0.48, 2017-01-15
----------------
A bugfix release. A bugfix release.
@@ -252,8 +714,7 @@ Features:
* Support for zero-latency rendering * Support for zero-latency rendering
0.47, 2016-10-19 ## 0.47, 2016-10-19
----------------
A bugfix release. A bugfix release.
@@ -263,8 +724,7 @@ Bug fixes:
* VIM-1190 Fixed exception "Write access is allowed from write-safe contexts only" * VIM-1190 Fixed exception "Write access is allowed from write-safe contexts only"
0.46, 2016-07-07 ## 0.46, 2016-07-07
----------------
Added `incsearch` option for incremental search. Added support for `it` and Added `incsearch` option for incremental search. Added support for `it` and
`at` tag block selection. Added `vim-surround` commands `ys`, `cs`, `ds`, `at` tag block selection. Added `vim-surround` commands `ys`, `cs`, `ds`,
@@ -292,8 +752,7 @@ Bug fixes:
* VIM-1126 Fixed warning about modifying shortcuts of global actions for 2016.2 * VIM-1126 Fixed warning about modifying shortcuts of global actions for 2016.2
0.44, 2015-11-02 ## 0.44, 2015-11-02
----------------
A bugfix release. A bugfix release.
@@ -302,16 +761,14 @@ A bugfix release.
plugin disabled plugin disabled
0.43, 2015-11-02 ## 0.43, 2015-11-02
----------------
A bugfix release. A bugfix release.
* VIM-1039 Fixed running the plugin with Java 6 * VIM-1039 Fixed running the plugin with Java 6
0.42, 2015-11-01 ## 0.42, 2015-11-01
----------------
This release is compatible with IntelliJ 15+ and other IDEs based on the This release is compatible with IntelliJ 15+ and other IDEs based on the
IntelliJ platform branch 143+. IntelliJ platform branch 143+.
@@ -319,8 +776,7 @@ IntelliJ platform branch 143+.
* VIM-970 Fixed move commands in read-only files * VIM-970 Fixed move commands in read-only files
0.41, 2015-06-10 ## 0.41, 2015-06-10
----------------
A bugfix release. A bugfix release.
@@ -328,8 +784,7 @@ A bugfix release.
IntelliJ IntelliJ
0.40, 2015-06-09 ## 0.40, 2015-06-09
----------------
Added support for `mapleader`. Support comments in `%` brace matching. Various Added support for `mapleader`. Support comments in `%` brace matching. Various
bug fixes. bug fixes.
@@ -356,8 +811,7 @@ Bug fixes:
* VIM-930 Fixed editor focus issues after closing Ex entry box on Oracle Java 6 * VIM-930 Fixed editor focus issues after closing Ex entry box on Oracle Java 6
0.39, 2014-12-03 ## 0.39, 2014-12-03
----------------
A bugfix release. A bugfix release.
@@ -369,8 +823,7 @@ Bug fixes:
* EA-63022 Don't update line numbers in the caret movement event listener * EA-63022 Don't update line numbers in the caret movement event listener
0.38, 2014-12-01 ## 0.38, 2014-12-01
----------------
Added support for `number` and `relativenumber` options, `clipboard=unnamed` Added support for `number` and `relativenumber` options, `clipboard=unnamed`
option. Added `:action` and `:actionlist` commands for executing arbitrary option. Added `:action` and `:actionlist` commands for executing arbitrary
@@ -402,8 +855,7 @@ Bug fixes:
* VIM-723 Fix pasting to an empty line * VIM-723 Fix pasting to an empty line
0.37, 2014-10-15 ## 0.37, 2014-10-15
----------------
A bugfix release. A bugfix release.
@@ -414,8 +866,7 @@ Bug fixes:
* VIM-407 Fixed `>>` to work if a line contains only one character * VIM-407 Fixed `>>` to work if a line contains only one character
0.36, 2014-10-14 ## 0.36, 2014-10-14
----------------
Added support for common window splitting and navigation commands. Various bug Added support for common window splitting and navigation commands. Various bug
fixes. fixes.
@@ -434,8 +885,7 @@ Bug fixes:
* VIM-569 Fixed `<C-W>` when the caret is at the end of a line * VIM-569 Fixed `<C-W>` when the caret is at the end of a line
0.35, 2014-05-15 ## 0.35, 2014-05-15
----------------
The `~/.vimrc` initialization file is no longer read by default, use The `~/.vimrc` initialization file is no longer read by default, use
`~/.ideavimrc` instead. `~/.ideavimrc` instead.
@@ -456,8 +906,7 @@ Bug fixes:
selection selection
0.34, 2014-04-29 ## 0.34, 2014-04-29
----------------
A bugfix release. A bugfix release.
@@ -471,8 +920,7 @@ Bug fixes:
* VIM-667 Ignore potentially nested lines of .vimrc based on leading whitespace * VIM-667 Ignore potentially nested lines of .vimrc based on leading whitespace
0.33, 2014-04-28 ## 0.33, 2014-04-28
----------------
Added support for `:map` key mapping commands. New keyboard shortcuts handler Added support for `:map` key mapping commands. New keyboard shortcuts handler
that doesn't require a separate keymap for Vim emulation. Added support for that doesn't require a separate keymap for Vim emulation. Added support for
@@ -491,14 +939,12 @@ Bug fixes:
* VIM-281 Don't disable global reformat code action for Vim emulation * VIM-281 Don't disable global reformat code action for Vim emulation
0.32, 2013-11-15 ## 0.32, 2013-11-15
----------------
Fixed API compatibility with IntelliJ platform builds 132.1052+. Fixed API compatibility with IntelliJ platform builds 132.1052+.
0.31, 2013-11-12 ## 0.31, 2013-11-12
----------------
A bugfix release. A bugfix release.
@@ -507,8 +953,7 @@ Bug fixes:
* VIM-582 Fixed line comment and reformat commands with no visual selection * VIM-582 Fixed line comment and reformat commands with no visual selection
0.30, 2013-11-11 ## 0.30, 2013-11-11
----------------
Added support for a separate `.ideavimrc` config file. Fixed long-standing Added support for a separate `.ideavimrc` config file. Fixed long-standing
issues with merged undo/redo commands and `<Esc>` during code completion. issues with merged undo/redo commands and `<Esc>` during code completion.
@@ -528,8 +973,7 @@ Bug fixes:
* Fixed several reported exceptions * Fixed several reported exceptions
0.29, 2013-05-15 ## 0.29, 2013-05-15
----------------
A bugfix release. A bugfix release.
@@ -540,8 +984,7 @@ Bug fixes:
* VIM-121 Don't move cursor while scrolling * VIM-121 Don't move cursor while scrolling
0.28, 2013-04-06 ## 0.28, 2013-04-06
----------------
A bugfix release. A bugfix release.
@@ -551,8 +994,7 @@ Bug fixes:
* VIM-479 Don't try to activate insert mode for diff view * VIM-479 Don't try to activate insert mode for diff view
0.27, 2013-04-03 ## 0.27, 2013-04-03
----------------
New Vim keymap generator creates better keymaps, especially for Mac OS X. New Vim keymap generator creates better keymaps, especially for Mac OS X.
Restart after reconfiguring the keymap is no longer required. Restart after reconfiguring the keymap is no longer required.
@@ -573,8 +1015,7 @@ Bug fixes:
* Fixed command window font size to match editor font size * Fixed command window font size to match editor font size
0.26, 2012-12-26 ## 0.26, 2012-12-26
----------------
Added support for paste in the command mode: from a register using `<C-R>`, Added support for paste in the command mode: from a register using `<C-R>`,
from the clipboard using `<S-Insert>` or `<M-V>`. Added support for the last from the clipboard using `<S-Insert>` or `<M-V>`. Added support for the last
@@ -593,8 +1034,7 @@ Bug fixes:
* VIM-302 Fixed tab switching order for `gt` and `gT` * VIM-302 Fixed tab switching order for `gt` and `gT`
0.25, 2012-12-19 ## 0.25, 2012-12-19
----------------
A bugfix release. A bugfix release.
@@ -603,8 +1043,7 @@ A bugfix release.
character character
0.24, 2012-12-03 ## 0.24, 2012-12-03
----------------
Added Vim string object selection motions (see help topics `v_i"`, `v_a"`). Added Vim string object selection motions (see help topics `v_i"`, `v_a"`).
Various bug fixes. Various bug fixes.
@@ -643,8 +1082,7 @@ Bug fixes:
* VIM-157 Fixed regression in moving the cursor after `~` * VIM-157 Fixed regression in moving the cursor after `~`
0.23.115, 2012-11-14 ## 0.23.115, 2012-11-14
--------------------
A bugfix release. A bugfix release.
@@ -653,8 +1091,7 @@ A bugfix release.
* VIM-112 Delete a single previous word with <C-W> in insert mode, not all inserted words * VIM-112 Delete a single previous word with <C-W> in insert mode, not all inserted words
0.23.111, 2012-11-12 ## 0.23.111, 2012-11-12
--------------------
A bugfix release. A bugfix release.
@@ -673,8 +1110,7 @@ A bugfix release.
found found
0.23.93, 2012-03-21 ## 0.23.93, 2012-03-21
-------------------
A bugfix release. Vim.xml was fixed to use Command+C, Command+V on Mac OS. A bugfix release. Vim.xml was fixed to use Command+C, Command+V on Mac OS.
Unfortunately you need to update Vim.xml manually this time. Unfortunately you need to update Vim.xml manually this time.

View File

@@ -1,112 +1,150 @@
<div> [![TeamCity Build][teamcity-build-status-svg]][teamcity-build-status]
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20183&guest=1">
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20183)/statusIcon.svg?guest=1"/>
</a>
<span>2018.3 Tests</span>
</div>
<div>
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20191&guest=1">
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20191)/statusIcon.svg?guest=1"/>
</a>
<span>2019.1 Tests</span>
</div>
<div>
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20192&guest=1">
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20192)/statusIcon.svg?guest=1"/>
</a>
<span>2019.2 Tests</span>
</div>
IdeaVim is an open source project created by 80+ contributors. Would you like to make it even better? Thats wonderful!
### Where to Start This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever!
In order to contribute to IdeaVim, you should have some understanding of [Kotlin](https://kotlinlang.org/) or Java. :warning: The plugin is currently under a huge refactoring aiming to split into vim-engine and IdeaVim in order to
support the new [Fleet IDE](https://www.jetbrains.com/fleet/).
See also these docs on the IntelliJ API: ## Before you begin
- The project is written in Kotlin and Java. Choose whichever language you feel more comfortable with,
or maybe one that youd like to get to know better (why not start [learning Kotlin](https://kotlinlang.org/docs/tutorials/) right now?).
- If you come across some IntelliJ Platform code, these links may prove helpful:
* [IntelliJ architectural overview](https://www.jetbrains.org/intellij/sdk/docs/platform/fundamentals.html) * [IntelliJ architectural overview](https://www.jetbrains.org/intellij/sdk/docs/platform/fundamentals.html)
* [IntelliJ plugin development resources](https://www.jetbrains.org/intellij/sdk/docs/welcome.html) * [IntelliJ plugin development resources](https://www.jetbrains.org/intellij/sdk/docs/welcome.html)
You can start by: - Having any difficulties?
Join the brand new
[![Join the chat at https://gitter.im/JetBrains/ideavim](https://badges.gitter.im/JetBrains/ideavim.svg)](https://gitter.im/JetBrains/ideavim?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
for IdeaVim developers and contributors!
- Picking relatively simple tasks that are tagged with OK, ready to do some coding?
## Yes, I'm ready for some coding
* Fork the repository and clone it to the local machine.
* Open the project with IntelliJ IDEA.
Yoo hoo! Youre all set to begin contributing.
We've prepared some useful configurations for you:
![Prepared configurations](assets/contributing/configurations.png)
And here are useful gradle commands:
* `./gradlew runIde` — start the dev version of IntelliJ IDEA with IdeaVim installed.
* `./gradlew test` — run tests.
* `./gradlew buildPlugin` — build the plugin. The result will be located in `build/distributions`. This file can be
installed by using `Settings | Plugin | >Gear Icon< | Install Plugin from Disk...`. You can stay with your personal build
for a few days or send it to a friend for testing.
## Warmup
- Pick a few relatively simple tasks that are tagged with
[#patch_welcome](https://youtrack.jetbrains.com/issues/VIM?q=%23patch_welcome%20%23Unresolved%20sort%20by:%20votes%20) [#patch_welcome](https://youtrack.jetbrains.com/issues/VIM?q=%23patch_welcome%20%23Unresolved%20sort%20by:%20votes%20)
in the issue tracker. in the issue tracker.
- Read about the `@VimBehaviorDiffers` annotation and fix the corresponding functionality. - Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code and fix the corresponding functionality.
- Implement one of the requested [#vim plugin](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved%20tag:%20%7Bvim%20plugin%7D%20sort%20by:%20votes%20)s.
> :small_orange_diamond: Selected an issue to work on? Leave a comment in a YouTrack ticket or create a draft PR
> to indicate that you've started working on it so that you might get additional guidance and feedback from the maintainers.
## Where to start in the codebase
If you are looking for:
- Vim commands (`w`, `<C-O>`, `p`, etc.):
- Any particular command: `package-info.java`.
- How commands are executed in common: `EditorActionHandlerBase`.
- Key mapping: `KeyHandler.handleKey()`.
- Ex commands (`:set`, `:s`, `:nohlsearch`):
- Any particular ex command: package `com.maddyhome.idea.vim.ex.handler`.
- Vim script grammar: `Vimscript.g4`.
- Vim script parsing: package `com.maddyhome.idea.vim.vimscript.parser`.
- Vim script executor: `Executor`.
- Extensions:
- Extensions handler: `VimExtensionHandler`.
- Available extensions: package `com/maddyhome/idea/vim/extension`.
- Common features:
- State machine. How every particular keystroke is parsed in IdeaVim: `KeyHandler.handleKey()`.
- Options (`incsearch`, `iskeyword`, `relativenumber`): `OptionServiceImpl`.
- Plugin startup: `PluginStartup`.
- Notifications: `NotificationService`.
- Status bar icon: `StatusBar.kt`.
- On/off switch: `VimPlugin.setEnabled()`.
### Development Environment ## Testing
1. Fork IdeaVim on GitHub and clone the repository on your local machine. Here are some guides for testing:
2. Import the project from the existing sources in IntelliJ IDEA 2018.1 or newer (Community or 1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code.
Ultimate), by selecting "File | New | Project from Existing Sources..." or selecting "Import
Project" from the Welcome screen.
* In the project wizard, select "Import project from external model | Gradle". 2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Try to choose an example
text that is easy to read and understand what is wrong if the test fails. For example, take a few lines from your
favorite poem, or use Vladimir Nabokovs “A Discovery" if you don't have one.
* Select your Java 8+ JDK as the Gradle JVM; leave other parameters unchanged. 3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
carets, dollar motion, etc.
3. Run your IdeaVim plugin within IntelliJ via a Gradle task: ##### Neovim
IdeaVim has an experimental integration with neovim in tests. Tests that are performed with `doTest` also executed in
neovim instance, and the state of IdeaVim is asserted to be the same as the state of neovim.
- Only tests that use `doTest` are checked with neovim.
- Tests with `@VimBehaviorDiffers` or `@TestWithoutNeovim` annotations don't use neovim.
* Select the "View | Tool Windows | Gradle" tool window. #### Property-based tests
Property-based tests are located under `propertybased` package. These tests a flaky by nature
although in most cases they are stable. If the test fails on your TeamCity run, try to check the test output and understand
if the fail is caused by your changes. If it's not, just ignore the test.
* Launch "ideavim | intellij | runIde" from the tool window.
4. Run IdeaVim tests via a Gradle task: ## A common direction
* Select the "View | Tool Windows | Gradle" tool window. Were trying to make IdeaVim close to the original Vim both in terms of functionality and architecture.
* Launch "ideavim | verification | test" from the tool window. - Vim motions can be [either inclusive, exclusive, or linewise](http://vimdoc.sourceforge.net/htmldoc/motion.html#inclusive).
In IdeaVim, you can use `MotionType` for that.
- Have you read the [interesting things](https://github.com/JetBrains/ideavim#some-facts-about-vim) about IdeaVim?
Do you remember how `dd`, `yy`, and other similar commands work? `DuplicableOperatorAction` will help you with that.
And we also translate it to `d_` and `y_`: `KeyHandler.mapOpCommand()`.
- All IdeaVim extensions use the same command names as the originals (e.g. `<Plug>(CommentMotion)`, `<Plug>ReplaceWithRegisterLine`),
so you can reuse your `.vimrc` settings.
We also support proper command mappings (functions are mapped to `<Plug>...`), the operator function (`OperatorFunction`), and so on.
- Magic is supported as well. See `Magic`.
5. Build the plugin distribution by running `./gradlew clean buildPlugin` in the -----
terminal in your project root.
* The resulting distribution file will be located at build/distributions/IdeaVim-VERSION.zip ### I read the whole page but something is still unclear.
* You can install this file by selecting "Settings | Plugins | Install plugin Oh no! No cookies for the maintainers today! Please [tell us](https://github.com/JetBrains/ideavim#contact-maintainers) about it so we can help.
from disk...".
### Copyright
1. Go to `Preferences | Appearance & Behavior | Scopes`, press "+" button, `Shared`. ### Ive found a bug in this documentation.
Name: Copyright scope
Pattern: `file[IdeaVIM.main]:com//*||file[IdeaVIM.test]:*/`
2. Go to `Preferences | Editor | Copyright | Copyright Profiles` and click the "+" button. No beer in the bar for us unless it's fixed. [Let us know](https://github.com/JetBrains/ideavim#contact-maintainers) situation so we might be able to fix it.
Name: IdeaVim
Text:
IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
Copyright (C) 2003-$today.year The IdeaVim authors
This program is free software: you can redistribute it and/or modify ### The lack of documentation or a javadoc/ktdoc makes it difficult to start contributing.
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, This is just terrible. [You know what to do](https://github.com/JetBrains/ideavim#contact-maintainers).
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License ### Resources:
along with this program. If not, see <https://www.gnu.org/licenses/>.
3. Go to `Preferences | Editor | Copyright`, click the "+" button. * [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
Scope: Copyright scope * [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
Copyright: IdeaVim * [Chat on gitter](https://gitter.im/JetBrains/ideavim)
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
* [Changelog](CHANGES.md)
* [Contributors listing](AUTHORS.md)
### Testing [teamcity-build-status]: https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJEAP&guest=1
[teamcity-build-status-svg]: https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJEAP)/statusIcon.svg?guest=1
1. Read about the `@VimBehaviorDiffers` annotation.
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd",
"123 123 123 123", etc. Try to choose an example text that is easy to
read and understand what is wrong if the test fails.
For example, take a few lines from your favorite poem, or use
"Vladimir Nabokov A Discovery" if you don't have one.
3. Test your functionality properly.
Especially check whether your command works with:
line start, line end, file start, file end, empty line, multiple carets, dollar motion, etc.

410
README.md
View File

@@ -1,47 +1,49 @@
<img src="resources/META-INF/pluginIcon.svg" width="80" height="80" alt="icon" align="left"/> <img src="src/main/resources/META-INF/pluginIcon.svg" width="80" height="80" alt="icon" align="left"/>
IdeaVim IdeaVim
=== ===
<div> [![Official JetBrains Project][jb-official-svg]][jb-official]
<a href="https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub"> [![Contributions welcome][contributions-welcome-svg]][contributions-welcome]
<img src="https://jb.gg/badges/official.svg" alt="official JetBrains project"/> [![Downloads][plugin-downloads-svg]][plugin-repo]
</a> [![Rating][plugin-rating-svg]][plugin-repo]
<a href="https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJ20191&guest=1"> [![Version][plugin-version-svg]][plugin-repo]
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJ20191)/statusIcon.svg?guest=1"/> [![Gitter][gitter-svg]][gitter]
</a> [![Twitter][twitter-svg]][twitter]
</div>
IdeaVim is a Vim emulation plugin for IDEs based on the IntelliJ Platform. IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs.
IdeaVim can be used with IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm,
RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive, and Android Studio.
Resources: ##### Contact maintainers:
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
* [@IdeaVim](https://twitter.com/ideavim) on Twitter
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
##### Resources:
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim) * [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
* [Changelog](CHANGES.md) * [Changelog](CHANGES.md)
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1) * [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
* [@IdeaVim](https://twitter.com/ideavim) in Twitter
#### Compatibility
Installation IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive,
Android Studio and other IntelliJ platform based IDEs.
Setup
------------ ------------
Use the IDE's plugin manager to install the latest version of the plugin. - IdeaVim can be installed via `Settings | Plugins`.
Start the IDE normally and enable the Vim emulation using "Tools | Vim See the [detailed instructions](https://www.jetbrains.com/help/idea/managing-plugins.html#).
Emulator" menu item. At this point you must use Vim keystrokes in all editors.
If you wish to disable the plugin, select the "Tools | Vim Emulator" menu so - Use `Tools | Vim Emulator` in the menu to enable or disable emulation.
it is unchecked. At this point your IDE will work with its regular keyboard
shortcuts.
Keyboard shortcut conflicts between the Vim emulation and the IDE can be - Use the `~/.ideavimrc` file as an analog of `~/.vimrc` ([learn more](#Files)). The XDG standard is supported, as well.
resolved via "File | Settings | Editor | Vim Emulation", "File | Settings |
Keymap" on Linux & Windows, and via "Preferences | Editor | Vim Emulation",
"Preferences | Keymap" on macOS. They can also be resolved by key-mapping
commands in your ~/.ideavimrc file.
- Shortcut conflicts can be resolved by using:
- On Linux & Windows: `File | Settings | Editor | Vim` & `File | Settings | Keymap`,
- On macOS: `Preferences | Editor | Vim` & `Preferences | Keymap`,
- Regular Vim mappings in the `~/.ideavimrc` file.
Get Early Access Get Early Access
------------------- -------------------
@@ -49,15 +51,19 @@ Get Early Access
Would you like to try new features and fixes? Join the Early Access Program and Would you like to try new features and fixes? Join the Early Access Program and
receive EAP builds as updates! receive EAP builds as updates!
1. Click the IdeaVim icon in the status bar | `EAP` | `Get Early Access...` 1. Click the IdeaVim icon <img src="src/main/resources/META-INF/pluginIcon_noBorders.svg" width="16" height="16" alt="icon"/>
in the status bar | `Early Access Program` | `Subscibe to EAP`
Or subscribe to EAP updates manually: Or subscribe to EAP updates manually:
1. Open `Settings | Plugins` 1. Open `Settings | Plugins`
2. Click the gear icon :gear:, select `Manage Plugin Repositories`, and add the following url: 2. Click the gear icon :gear:, select `Manage Plugin Repositories`, and add the following url:
`https://plugins.jetbrains.com/plugins/eap/ideavim` ```
https://plugins.jetbrains.com/plugins/eap/ideavim
```
See [the changelog](CHANGES.md) for the list of hot unreleased features. See [the changelog](CHANGES.md) for the list of unreleased features.
It is important to distinguish EAP builds from traditional pre-release software. It is important to distinguish EAP builds from traditional pre-release software.
Please note that the quality of EAP versions may at times be way below even Please note that the quality of EAP versions may at times be way below even
@@ -71,140 +77,235 @@ You can always leave your feedback with:
Summary of Supported Vim Features Summary of Supported Vim Features
--------------------------------- ---------------------------------
Supported: Here are some examples of supported vim features and commands:
* Motion keys * Normal / insert / visual / select / etc. modes
* Deletion/changing * Motion / deletion / change / window / etc. commands
* Insert mode commands
* Marks
* Registers
* Undo/redo
* Visual mode commands
* Some Ex commands
* Some [:set options](doc/set-commands.md)
* Full Vim regexps for search and search/replace
* Key mappings * Key mappings
* Macros * Marks / Macros / Digraphs / Registers
* Digraphs * Some [set commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands)
* Command line and search history * Full Vim regexps for search and search/replace
* Window commands
* Vim web help * Vim web help
* Select mode * `~/.ideavimrc` configuration file
Emulated Vim plugins: [Emulated Vim plugins](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins):
* vim-easymotion
* NERDTree
* vim-surround * vim-surround
* vim-multiple-cursors * vim-multiple-cursors
* vim-commentary * vim-commentary
* argtextobj.vim
Not supported (yet): * vim-textobj-entire
* ReplaceWithRegister
* Jump lists * vim-exchange
* Various less-used commands * vim-highlightedyank
* vim-paragraph-motion
* vim-indent-object
* match.it
See also: See also:
* [The list of all supported commands](src/com/maddyhome/idea/vim/package-info.java) * [The list of all supported commands](src/main/java/com/maddyhome/idea/vim/package-info.java)
* [Top features and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes) * [Top feature requests and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes)
* [Vimscript support roadmap](vimscript-info/VIMSCRIPT_ROADMAP.md)
* [List of supported in-build functions](vimscript-info/FUNCTIONS_INFO.MD)
Files Files
----- -----
* ~/.ideavimrc * `~/.ideavimrc`
* Your IdeaVim-specific Vim initialization commands * Your IdeaVim-specific Vim initialization commands
You can read your ~/.vimrc file from ~/.ideavimrc with this command: <details>
<summary><strong>Example</strong> (click to see)</summary>
```vim
""" 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)
```
</details>
<details>
<summary><strong>Suggested options</strong> (click to see)</summary>
Here is also a list of the suggested options from [defaults.vim](https://github.com/vim/vim/blob/master/runtime/defaults.vim)
```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
```
</details>
You can read your `~/.vimrc` file from `~/.ideavimrc` with this command:
source ~/.vimrc source ~/.vimrc
Note, that IdeaVim currently parses ~/.ideavimrc file via simple pattern matching.
See [VIM-669](https://youtrack.jetbrains.com/issue/VIM-669) for proper parsing
of VimL files.
Also note that if you have overridden the `user.home` JVM option, this Also note that if you have overridden the `user.home` JVM option, this
will affect where IdeaVim looks for your .ideavimrc file. For example, if you will affect where IdeaVim looks for your `.ideavimrc` file. For example, if you
have `-Duser.home=/my/alternate/home` then IdeaVim will source have `-Duser.home=/my/alternate/home` then IdeaVim will source
`/my/alternate/home/.ideavimrc` instead of `~/.ideavimrc`. `/my/alternate/home/.ideavimrc` instead of `~/.ideavimrc`.
Alternatively, you can set up initialization commands using [XDG](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) standard. Alternatively, you can set up initialization commands using [XDG](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) standard.
Put your settings to `$XDG_CONFIG_HOME$/ideavim/ideavimrc` file. [To Be Released] Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
Emulated Vim Plugins Emulated Vim Plugins
-------------------- --------------------
IdeaVim extensions emulate some plugins of the original Vim. In order to use See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins)
IdeaVim extensions, you have to enable them via this command in your `~/.ideavimrc`:
set <extension-name> Executing IDE Actions
---------------------
Available extensions: IdeaVim adds various commands for listing and executing arbitrary IDE actions as
* easymotion
* Setup:
* Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/)
and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins.
* `set easymotion`
* Emulates [vim-easymotion](https://github.com/easymotion/vim-easymotion)
* Commands: All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands).
* surround
* Setup: `set surround`
* Emulates [vim-surround](https://github.com/tpope/vim-surround)
* Commands: `ys`, `cs`, `ds`, `S`
* multiple-cursors
* Setup: `set multiple-cursors`
* Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)
* Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>`
* commentary
* Setup: `set commentary`
* Emulates [commentary.vim](https://github.com/tpope/vim-commentary)
* Commands: `gcc`, `gc + motion`, `v_gc`
Changes to the IDE
------------------
### Undo/Redo
The IdeaVim plugin uses the undo/redo functionality of the IntelliJ Platform,
so the behavior of the `u` and `<C-R>` commands may differ from the original
Vim. Vim compatibility of undo/redo may be improved in future releases.
See also [unresolved undo issues](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+Help+topic%3A+u).
### Escape
Using `<Esc>` in dialog windows remains problematic. For most dialog windows,
the Vim emulator is put into insert mode with `<Esc>` not working. You
should use `<C-c>` or `<C-[>` instead. In some dialog windows, the normal mode is
switched by default. The usage of the Vim emulator in dialog windows is an area for
improvement.
See also [unresolved escape issues](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+Help+topic%3A+i_Esc).
### Executing IDE Actions
IdeaVim adds two commands for listing and executing arbitrary IDE actions as
Ex commands or via `:map` command mappings: 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.
* `<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 on `gh`.
* :warning: Mappings to `<Action>` don't work with `noremap`.
If you know the case when it's needed, please [let us know](https://github.com/JetBrains/ideavim#contact-maintainers).
### Finding action ids:
* IJ provides `IdeaVim: track action Ids` command to show the id of the executed actions.
This command can be found in "Search everywhere" (double `shift`).
<details>
<summary><strong>"Track action Ids" Details</strong> (click to see)</summary>
<img src="assets/readme/track_action_id.gif" alt="track action ids"/>
</details>
* `:actionlist [pattern]` * `:actionlist [pattern]`
* Find IDE actions by name or keymap pattern (E.g. `:actionlist extract`, `:actionlist <C-D`) * Find IDE actions by id or keymap pattern (E.g. `:actionlist extract`, `:actionlist <C-D`)
* `:action {name}`
* Execute an action named `NAME`
For example, here `\r` is mapped to the Reformat Code action: ##### Examples:
:map \r :action ReformatCode<CR> ```vim
" Map \r to the Reformat Code action
:map \r <Action>(ReformatCode)
" Map <leader>d to start debug
:map <leader>d <Action>(Debug)
Contributing " 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
------------ ------------
See [CONTRIBUTING.md](CONTRIBUTING.md) IdeaVim 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](https://github.com/JetBrains/ideavim/discussions/357) or
[Vim Script Roadmap](https://github.com/JetBrains/ideavim/blob/master/vimscript-info/VIMSCRIPT_ROADMAP.md).
### 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:**
```vim
" 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
```
:gem: Contributing
------------
The power of contributing drives IdeaVim :muscle:. Even small contributions matter!
See [CONTRIBUTING.md](CONTRIBUTING.md) to start bringing your value to the project.
Authors Authors
------- -------
@@ -212,9 +313,72 @@ Authors
See [AUTHORS.md](AUTHORS.md) See [AUTHORS.md](AUTHORS.md)
for a list of authors and contributors. for a list of authors and contributors.
IdeaVim tips and tricks
-------
- Use the power of IJ and Vim:
- `set ideajoin` to enable join via the IDE. See the [examples](https://jb.gg/f9zji9).
- Make sure `ideaput` is enabled for `clipboard` to enable native IJ insertion in Vim.
- Sync IJ bookmarks and Vim marks: `set ideamarks`
- Check out more [ex commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
- Use your vim settings with IdeaVim. Put `source ~/.vimrc` in `~/.ideavimrc`.
- Control the status bar icon via the [`ideastatusicon` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
- Not familiar with the default behaviour during a refactoring? See the [`idearefactormode` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
Some facts about Vim
-------
Lets 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`, or `cc`. For example, `dd` is not a separate command for deleting the line,
but a `d` command with a `d` motion.
Wait, but there isn't a `d` motion in Vim! Thats right, and thats why Vim has a dedicated set of commands
for which it checks whether the
[command equals to motion](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L6468)
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 like `dd`, `yy`, and similar ones are simply translated to `d_`, `y_`, etc.
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L6502)
is the source of this knowledge.
- `x`, `D`, and `&` are not separate commands either. They are synonyms of `dl`, `d$`, and `:s\r`, respectively.
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
is the full list of synonyms.
- Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874).
- A lot of variables that refers to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) 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 License
------- -------
IdeaVim is licensed under the terms of the GNU Public License version 2 IdeaVim is licensed under the terms of the GNU Public License version 2
or any later version. or any later version.
<!-- Badges -->
[jb-official]: https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub
[jb-official-svg]: https://jb.gg/badges/official.svg
[plugin-repo]: https://plugins.jetbrains.com/plugin/164-ideavim
[plugin-downloads-svg]: http://img.shields.io/jetbrains/plugin/d/IdeaVIM
[plugin-rating-svg]: http://img.shields.io/jetbrains/plugin/r/rating/IdeaVIM
[plugin-version-svg]: https://img.shields.io/jetbrains/plugin/v/ideavim?label=version
[gitter-svg]: https://badges.gitter.im/JetBrains/ideavim.svg
[gitter]: https://gitter.im/JetBrains/ideavim?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[twitter]: https://twitter.com/ideavim
[twitter-svg]: https://img.shields.io/twitter/follow/ideavim?label=twitter%20%40ideavim
[contributions-welcome-svg]: http://img.shields.io/badge/contributions-welcome-brightgreen
[contributions-welcome]: https://github.com/JetBrains/ideavim/blob/master/CONTRIBUTING.md

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 638 B

After

Width:  |  Height:  |  Size: 638 B

View File

Before

Width:  |  Height:  |  Size: 364 B

After

Width:  |  Height:  |  Size: 364 B

View File

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

View File

@@ -1,88 +0,0 @@
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
}
}
plugins {
id 'org.jetbrains.intellij' version '0.4.9'
}
apply plugin: 'java'
apply plugin: 'kotlin'
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }
sourceSets {
main {
java.srcDir 'src'
resources.srcDir 'resources'
}
test {
java.srcDir 'test'
}
}
intellij {
version ideaVersion
pluginName 'IdeaVim'
updateSinceUntilBuild false
downloadSources Boolean.valueOf(downloadIdeaSources)
instrumentCode Boolean.valueOf(instrumentPluginCode)
intellijRepo = "https://www.jetbrains.com/intellij-repository"
if (!Boolean.valueOf(legacyNoJavaPlugin)) {
// Since 192 version of IJ java plugin should be defined separately
// Set `legacyNoJavaPlugin` to true if you are going to run tests under idea version < 192
plugins = ['java']
}
publishPlugin {
channels publishChannels.split(',')
username publishUsername
token publishToken
}
}
repositories {
mavenCentral()
}
dependencies {
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
compileOnly "org.jetbrains:annotations:17.0.0"
}
compileKotlin {
kotlinOptions {
jvmTarget = javaVersion
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = javaVersion
}
}
tasks.register("slackEapNotification") {
doLast {
if (!slackUrl) return
def post = new URL(slackUrl).openConnection()
def message = "{\"text\":\"New EAP released: $version\"}"
post.setRequestMethod("POST")
post.setDoOutput(true)
post.setRequestProperty("Content-Type", "application/json")
post.getOutputStream().write(message.getBytes("UTF-8"))
def postRC = post.getResponseCode()
println(postRC)
if(postRC.equals(200)) {
println(post.getInputStream().getText())
}
}
}

575
build.gradle.kts Normal file
View File

@@ -0,0 +1,575 @@
import dev.feedforward.markdownto.DownParser
import org.intellij.markdown.ast.getTextInNode
import java.net.HttpURLConnection
import java.net.URL
buildscript {
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21")
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
classpath("org.eclipse.jgit:org.eclipse.jgit:6.1.0.202203080745-r")
classpath("org.kohsuke:github-api:1.305")
classpath("org.jetbrains:markdown:0.3.1")
}
}
plugins {
antlr
java
kotlin("jvm") version "1.6.21"
id("org.jetbrains.intellij") version "1.6.0"
id("org.jetbrains.changelog") version "1.3.1"
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
id("org.jlleitschuh.gradle.ktlint") version "10.2.1"
}
// Import variables from gradle.properties file
val javaVersion: String by project
val kotlinVersion: String by project
val ideaVersion: String by project
val downloadIdeaSources: String by project
val instrumentPluginCode: String by project
val remoteRobotVersion: String by project
val antlrVersion: String by project
val publishChannels: String by project
val publishToken: String by project
val slackUrl: String by project
repositories {
mavenCentral()
maven { url = uri("https://cache-redirector.jetbrains.com/intellij-dependencies") }
}
dependencies {
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
compileOnly("org.jetbrains:annotations:23.0.0")
// https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
testImplementation("com.ensarsarajcic.neovim.java:core-rpc:0.2.3")
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-test
testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
// https://mvnrepository.com/artifact/org.mockito.kotlin/mockito-kotlin
testImplementation("org.mockito.kotlin:mockito-kotlin:4.0.0")
testImplementation("com.intellij.remoterobot:remote-robot:$remoteRobotVersion")
testImplementation("com.intellij.remoterobot:remote-fixtures:$remoteRobotVersion")
testImplementation("com.automation-remarks:video-recorder-junit:2.0")
runtimeOnly("org.antlr:antlr4-runtime:$antlrVersion")
antlr("org.antlr:antlr4:$antlrVersion")
implementation(project(":vim-engine"))
}
configurations {
runtimeClasspath {
exclude(group = "org.antlr", module = "antlr4")
}
}
// --- Compilation
// This can be moved to other test registration when issue with tests in gradle will be fixed
tasks.register<Test>("testWithNeovim") {
group = "verification"
systemProperty("ideavim.nvim.test", "true")
exclude("/ui/**")
}
tasks.register<Test>("testPropertyBased") {
group = "verification"
// include("**/propertybased/**")
}
tasks.register<Test>("testLongRunning") {
group = "verification"
// include("**/longrunning/**")
}
tasks {
// Issue in gradle 7.3
val test by getting(Test::class) {
isScanForTestClasses = false
// Only run tests from classes that end with "Test"
include("**/*Test.class")
include("**/*test.class")
include("**/*Tests.class")
exclude("**/ParserTest.class")
}
val testWithNeovim by getting(Test::class) {
isScanForTestClasses = false
// Only run tests from classes that end with "Test"
include("**/*Test.class")
include("**/*test.class")
include("**/*Tests.class")
exclude("**/ParserTest.class")
}
val testPropertyBased by getting(Test::class) {
isScanForTestClasses = false
// Only run tests from classes that end with "Test"
include("**/propertybased/*Test.class")
include("**/propertybased/*test.class")
include("**/propertybased/*Tests.class")
}
val testLongRunning by getting(Test::class) {
isScanForTestClasses = false
// Only run tests from classes that end with "Test"
include("**/longrunning/**/*Test.class")
include("**/longrunning/**/*test.class")
include("**/longrunning/**/*Tests.class")
exclude("**/longrunning/**/ParserTest.class")
}
compileJava {
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
options.encoding = "UTF-8"
}
compileKotlin {
kotlinOptions {
jvmTarget = javaVersion
apiVersion = "1.5"
// allWarningsAsErrors = true
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = javaVersion
apiVersion = "1.5"
// allWarningsAsErrors = true
}
}
}
gradle.projectsEvaluated {
tasks.compileJava {
// options.compilerArgs.add("-Werror")
options.compilerArgs.add("-Xlint:deprecation")
}
}
// --- Intellij plugin
intellij {
version.set(ideaVersion)
pluginName.set("IdeaVim")
updateSinceUntilBuild.set(false)
downloadSources.set(downloadIdeaSources.toBoolean())
instrumentCode.set(instrumentPluginCode.toBoolean())
intellijRepository.set("https://www.jetbrains.com/intellij-repository")
// Yaml is only used for testing. It's part of the IdeaIC distribution, but needs to be included as a reference
plugins.set(listOf("java", "AceJump:3.8.4", "yaml"))
}
tasks {
downloadRobotServerPlugin {
version.set(remoteRobotVersion)
}
publishPlugin {
channels.set(publishChannels.split(","))
token.set(publishToken)
}
runIdeForUiTests {
systemProperty("robot-server.port", "8082")
systemProperty("ide.mac.message.dialogs.as.sheets", "false")
systemProperty("jb.privacy.policy.text", "<!--999.999-->")
systemProperty("jb.consents.confirmation.enabled", "false")
}
runPluginVerifier {
downloadDir.set("${project.buildDir}/pluginVerifier/ides")
teamCityOutputFormat.set(true)
ideVersions.set(listOf("IC-2021.3.4"))
}
generateGrammarSource {
maxHeapSize = "128m"
arguments.addAll(listOf("-package", "com.maddyhome.idea.vim.vimscript.parser.generated", "-visitor"))
outputDirectory = file("src/main/java/com/maddyhome/idea/vim/vimscript/parser/generated")
}
named("compileKotlin") {
dependsOn("generateGrammarSource")
}
}
// --- Linting
ktlint {
disabledRules.add("no-wildcard-imports")
}
// --- Tests
tasks {
test {
exclude("**/propertybased/**")
exclude("**/longrunning/**")
exclude("/ui/**")
}
}
tasks.register<Test>("testUi") {
group = "verification"
include("/ui/**")
}
// --- Changelog
changelog {
groups.set(listOf("Features:", "Changes:", "Deprecations:", "Fixes:", "Merged PRs:"))
itemPrefix.set("*")
path.set("${project.projectDir}/CHANGES.md")
unreleasedTerm.set("To Be Released")
headerParserRegex.set("\\d\\.\\d+(.\\d+)?".toRegex())
// header = { "${project.version}" }
// version = "0.60"
}
tasks.register("getUnreleasedChangelog") {
group = "changelog"
doLast {
val log = changelog.getUnreleased().toHTML()
println(log)
}
}
// --- Slack notification
tasks.register("slackNotification") {
doLast {
if (slackUrl.isBlank()) {
println("Slack Url is not defined")
return@doLast
}
val changeLog = changelog.getLatest().toText()
val slackDown = DownParser(changeLog, true).toSlack().toString()
//language=JSON
val message = """
{
"text": "New version of IdeaVim",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "IdeaVim $version has been released\n$slackDown"
}
}
]
}
""".trimIndent()
println("Parsed data: $slackDown")
val post = URL(slackUrl)
with(post.openConnection() as HttpURLConnection) {
requestMethod = "POST"
doOutput = true
setRequestProperty("Content-Type", "application/json")
outputStream.write(message.toByteArray())
val postRc = responseCode
println("Response code: $postRc")
if (postRc == 200) {
println(inputStream.bufferedReader().use { it.readText() })
}
}
}
}
// --- Update authors
tasks.register("updateAuthors") {
doLast {
val uncheckedEmails = setOf(
"aleksei.plate@jetbrains.com",
"aleksei.plate@teamcity",
"aleksei.plate@TeamCity",
"alex.plate@192.168.0.109"
)
updateAuthors(uncheckedEmails)
}
}
val prId: String by project
tasks.register("updateMergedPr") {
doLast {
if (project.hasProperty("prId")) {
updateMergedPr(prId.toInt())
} else {
error("Cannot get prId")
}
}
}
tasks.register("updateChangelog") {
doLast {
updateChangelog()
}
}
tasks.register("testUpdateChangelog") {
group = "verification"
description = "This is a task to manually assert the correctness of the update tasks"
doLast {
val changesFile = File("$projectDir/CHANGES.md")
val changes = changesFile.readText()
val changesBuilder = StringBuilder(changes)
val insertOffset = setupSection(changes, changesBuilder, "### Changes:")
changesBuilder.insert(insertOffset, "--Hello--\n")
changesFile.writeText(changesBuilder.toString())
}
}
fun updateChangelog() {
println("Start update authors")
println(projectDir)
val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
val git = org.eclipse.jgit.api.Git(repository)
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
val messages = git.log().call()
.takeWhile {
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
}
.map { it.shortMessage }
// Collect fixes
val newFixes = mutableListOf<Change>()
println("Last successful commit: $lastSuccessfulCommit")
println("Amount of commits: ${messages.size}")
println("Start emails processing")
for (message in messages) {
println("Processing '$message'...")
val lowercaseMessage = message.toLowerCase()
val regex = "^fix\\((vim-\\d+)\\):".toRegex()
val findResult = regex.find(lowercaseMessage)
if (findResult != null) {
println("Message matches")
val value = findResult.groups[1]!!.value.toUpperCase()
val shortMessage = message.drop(findResult.range.last + 1).trim()
newFixes += Change(value, shortMessage)
} else {
println("Message doesn't match")
}
}
// Update changes file
val changesFile = File("$projectDir/CHANGES.md")
val changes = changesFile.readText()
val changesBuilder = StringBuilder(changes)
val insertOffset = setupSection(changes, changesBuilder, "### Fixes:")
if (insertOffset < 50) error("Incorrect offset: $insertOffset")
val firstPartOfChanges = changes.take(insertOffset)
val actualFixes = newFixes
.filterNot { it.id in firstPartOfChanges }
val newUpdates = actualFixes
.joinToString("") { "* [${it.id}](https://youtrack.jetbrains.com/issue/${it.id}) ${it.text}\n" }
changesBuilder.insert(insertOffset, newUpdates)
if (actualFixes.isNotEmpty()) {
changesFile.writeText(changesBuilder.toString())
}
}
fun updateAuthors(uncheckedEmails: Set<String>) {
println("Start update authors")
println(projectDir)
val repository = org.eclipse.jgit.lib.RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
val git = org.eclipse.jgit.api.Git(repository)
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
val hashesAndEmailes = git.log().call()
.takeWhile {
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
}
.associate { it.authorIdent.emailAddress to it.name }
println("Last successful commit: $lastSuccessfulCommit")
println("Amount of commits: ${hashesAndEmailes.size}")
println("Emails: ${hashesAndEmailes.keys}")
val gitHub = org.kohsuke.github.GitHub.connect()
val ghRepository = gitHub.getRepository("JetBrains/ideavim")
val users = mutableSetOf<Author>()
println("Start emails processing")
for ((email, hash) in hashesAndEmailes) {
println("Processing '$email'...")
if (email in uncheckedEmails) {
println("Email '$email' is in unchecked emails. Skip it")
continue
}
if ("dependabot[bot]@users.noreply.github.com" in email) {
println("Email '$email' is from dependabot. Skip it")
continue
}
val user = ghRepository.getCommit(hash).author
val htmlUrl = user.htmlUrl.toString()
val name = user.name ?: user.login
users.add(Author(name, htmlUrl, email))
}
println("Emails processed")
val authorsFile = File("$projectDir/AUTHORS.md")
val authors = authorsFile.readText()
val parser =
org.intellij.markdown.parser.MarkdownParser(org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor())
val tree = parser.buildMarkdownTreeFromString(authors)
val contributorsSection = tree.children[24]
val existingEmails = mutableSetOf<String>()
for (child in contributorsSection.children) {
if (child.children.size > 1) {
existingEmails.add(
child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString()
)
}
}
val newAuthors = users.filterNot { it.mail in existingEmails }
if (newAuthors.isEmpty()) return
val authorNames = newAuthors.joinToString(", ") { it.name }
println("::set-output name=authors::$authorNames")
val insertionString = newAuthors.toMdString()
val resultingString = StringBuffer(authors).insert(contributorsSection.endOffset, insertionString).toString()
authorsFile.writeText(resultingString)
}
fun List<Author>.toMdString(): String {
return this.joinToString {
"""
|
|* [![icon][mail]](mailto:${it.mail})
| [![icon][github]](${it.url})
| &nbsp;
| ${it.name}
""".trimMargin()
}
}
data class Author(val name: String, val url: String, val mail: String)
data class Change(val id: String, val text: String)
fun updateMergedPr(number: Int) {
val gitHub = org.kohsuke.github.GitHub.connect()
val repository = gitHub.getRepository("JetBrains/ideavim")
val pullRequest = repository.getPullRequest(number)
if (pullRequest.user.login == "dependabot[bot]") return
val changesFile = File("$projectDir/CHANGES.md")
val changes = changesFile.readText()
val changesBuilder = StringBuilder(changes)
val insertOffset = setupSection(changes, changesBuilder, "### Merged PRs:")
if (insertOffset < 50) error("Incorrect offset: $insertOffset")
if (pullRequest.user.login == "dependabot[bot]") return
val prNumber = pullRequest.number
val userName = pullRequest.user.name
val login = pullRequest.user.login
val title = pullRequest.title
val section =
"* [$prNumber](https://github.com/JetBrains/ideavim/pull/$prNumber) by [$userName](https://github.com/$login): $title\n"
changesBuilder.insert(insertOffset, section)
changesFile.writeText(changesBuilder.toString())
}
fun setupSection(
changes: String,
authorsBuilder: StringBuilder,
sectionName: String,
): Int {
val parser =
org.intellij.markdown.parser.MarkdownParser(org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor())
val tree = parser.buildMarkdownTreeFromString(changes)
var idx = -1
for (index in tree.children.indices) {
if (tree.children[index].getTextInNode(changes).startsWith("## ")) {
idx = index
break
}
}
val hasToBeReleased = tree.children[idx].getTextInNode(changes).contains("To Be Released")
return if (hasToBeReleased) {
var mrgIdx = -1
for (index in (idx + 1) until tree.children.lastIndex) {
val textInNode = tree.children[index].getTextInNode(changes)
val foundIndex = textInNode.startsWith(sectionName)
if (foundIndex) {
var filledPr = index + 2
while (tree.children[filledPr].getTextInNode(changes).startsWith("*")) {
filledPr++
}
mrgIdx = tree.children[filledPr].startOffset + 1
break
} else {
val currentSectionIndex = sections.indexOf(sectionName)
val insertHere = textInNode.startsWith("## ") ||
textInNode.startsWith("### ") &&
sections.indexOfFirst { textInNode.startsWith(it) }
.let { if (it < 0) false else it > currentSectionIndex }
if (insertHere) {
val section = """
$sectionName
""".trimIndent()
authorsBuilder.insert(tree.children[index].startOffset, section)
mrgIdx = tree.children[index].startOffset + (section.length - 1)
break
}
}
}
mrgIdx
} else {
val section = """
## To Be Released
$sectionName
""".trimIndent()
authorsBuilder.insert(tree.children[idx].startOffset, section)
tree.children[idx].startOffset + (section.length - 1)
}
}
val sections = listOf(
"### Features:",
"### Changes:",
"### Fixes:",
"### Merged PRs:",
)

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<baseline version="1.0">
<file name="src/main/java/com/maddyhome/idea/vim/listener/RiderSpecifics.kt">
<error line="1" column="1" source="filename" />
</file>
</baseline>

248
doc/Emulated-plugins.md Normal file
View File

@@ -0,0 +1,248 @@
Emulated Vim Plugins
--------------------
IdeaVim extensions emulate plugins of the original Vim. In order to use
IdeaVim extensions, you have to enable them via this command in your `~/.ideavimrc`:
```
Plug '<extension-github-reference>'
```
If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined
using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim).
No additional set commands in `~/.ideavimrc` are required.
If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>`
in `~/.ideavimrc`. E.g. `set nosurround`.
Available extensions:
## easymotion
* Setup:
* Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/)
and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins.
* `Plug 'easymotion/vim-easymotion'`
* <details>
<summary>Alternative syntax</summary>
<code>Plug 'https://github.com/easymotion/vim-easymotion'</code>
<br/>
<code>Plug 'vim-easymotion'</code>
<br/>
<code>set easymotion</code>
</details>
* Emulates [vim-easymotion](https://github.com/easymotion/vim-easymotion)
* Commands: All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands).
## NERDTree
* Setup: `Plug 'preservim/nerdtree'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/preservim/nerdtree'</code>
<br/>
<code>Plug 'nerdtree'</code>
<br/>
<code>set NERDTree</code>
</details>
* Emulates [NERDTree](https://github.com/preservim/nerdtree)
* Commands: [[see here|NERDTree-support]]
## surround
* Setup: `Plug 'tpope/vim-surround'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/tpope/vim-surround'</code>
<br/>
<code>Plug 'vim-surround'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code>
<br/>
<code>set surround</code>
</details>
* Emulates [vim-surround](https://github.com/tpope/vim-surround)
* Commands: `ys`, `cs`, `ds`, `S`
## multiple-cursors
* Setup: `Plug 'terryma/vim-multiple-cursors'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code>
<br/>
<code>Plug 'vim-multiple-cursors'</code>
<br/>
<code>set multiple-cursors</code>
</details>
* Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)
* Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>`
## commentary
* Setup: `Plug 'tpope/vim-commentary'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/tpope/vim-commentary'</code>
<br/>
<code>Plug 'vim-commentary'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=3695'</code>
<br/>
<code>Plug 'tomtom/tcomment_vim'</code>
<br/>
<code>Plug 'tcomment_vim'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1173'</code>
<br/>
<code>set commentary</code>
</details>
* Emulates [commentary.vim](https://github.com/tpope/vim-commentary)
* Commands: `gcc`, `gc + motion`, `v_gc`
* By [Daniel Leong](https://github.com/dhleong)
## ReplaceWithRegister
* Setup: `Plug 'vim-scripts/ReplaceWithRegister'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/vim-scripts/ReplaceWithRegister'</code>
<br/>
<code>Plug 'ReplaceWithRegister'</code>
<br/>
<code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'inkarkat/vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'vim-ReplaceWithRegister'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code>
<br/>
<code>set ReplaceWithRegister</code>
</details>
* Emulates [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister)
* Commands: `gr`, `grr`
* By [igrekster](https://github.com/igrekster)
## argtextobj
* Setup:
* `Plug 'vim-scripts/argtextobj.vim'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code>
<br/>
<code>Plug 'argtextobj.vim'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code>
<br/>
<code>set argtextobj</code>
</details>
* By default, only the arguments inside parenthesis are considered. To extend the functionality
to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated
list of colon-separated pairs (same as VIM's `matchpairs` option), like
`let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when
handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle
this syntax parenthesis, must come before angle brackets in the list.
* Emulates [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699)
* Additional text objects: `aa`, `ia`
## exchange
* Setup: `Plug 'tommcdo/vim-exchange'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/tommcdo/vim-exchange'</code>
<br/>
<code>Plug 'vim-exchange'</code>
<br/>
<code>set exchange</code>
</details>
* Emulates [vim-exchange](https://github.com/tommcdo/vim-exchange)
* Commands: `cx`, `cxx`, `X`, `cxc`
* By [fan-tom](https://github.com/fan-tom)
## textobj-entire
* Setup: `Plug 'kana/vim-textobj-entire'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/kana/vim-textobj-entire'</code>
<br/>
<code>Plug 'vim-textobj-entire'</code>
<br/>
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code>
<br/>
<code>set textobj-entire</code>
</details>
* Emulates [vim-textobj-entire](https://github.com/kana/vim-textobj-entire)
* Additional text objects: `ae`, `ie`
* By [Alexandre Grison](https://github.com/agrison)
## highlightedyank
* Setup:
* `Plug 'machakann/vim-highlightedyank'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/machakann/vim-highlightedyank'</code>
<br/>
<code>Plug 'vim-highlightedyank'</code>
<br/>
<code>set highlightedyank</code>
</details>
* if you want to optimize highlight duration, assign a time in milliseconds:
`let g:highlightedyank_highlight_duration = "1000"`
A negative number makes the highlight persistent.
`let g:highlightedyank_highlight_duration = "-1"`
* if you want to change background color of highlight you can provide the rgba of the color you want e.g.
`let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"`
* Emulates [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank)
* By [KostkaBrukowa](https://github.com/KostkaBrukowa)
## vim-paragraph-motion
* Setup: `Plug 'dbakker/vim-paragraph-motion'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code>
<br/>
<code>Plug 'vim-paragraph-motion'</code>
<br/>
<code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code>
<br/>
<code>Plug 'vim-scripts/Improved-paragraph-motion'</code>
<br/>
<code>Plug 'Improved-paragraph-motion'</code>
<br/>
<code>set vim-paragraph-motion</code>
</details>
* Emulates [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion)
## vim-indent-object
* Setup: `Plug 'michaeljsmith/vim-indent-object'`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code>
<br/>
<code>Plug 'vim-indent-object'</code>
<br/>
<code>set textobj-indent</code>
</details>
* Emulates [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object)
* Additional text objects: `ai`, `ii`, `aI`
* By [Shrikant Sharat Kandula](https://github.com/sharat87)
## matchit.vim
* Setup: `packadd matchit`
* <details>
<summary>Alternative vim-plug / vundle syntax</summary>
<code>Plug 'vim-matchit'</code>
<br/>
<code>Plug 'chrisbra/matchit'</code>
<br/>
<code>set matchit</code>
</details>
* Emulates [matchit.vim](https://github.com/chrisbra/matchit)
* Currently works for HTML/XML and ruby
* By [Martin Yzeiri](https://github.com/myzeiri)

6
doc/Home.md Normal file
View File

@@ -0,0 +1,6 @@
Welcome to the IdeaVim wiki!
- List of emulated plugins: [[plugins|Emulated-plugins]]
- Examples of `ideajoin` option (also known as "smart join"): [["ideajoin" examples|"ideajoin"-examples]]
- List of "set" commands: [["set" commands|"set"-commands]]
- Docs about "select" mode in vim: [[select mode|Select-mode]]

73
doc/NERDTree-support.md Normal file
View File

@@ -0,0 +1,73 @@
# NERDTree
IdeaVim supports emulation of the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
```vim
Plug 'preservim/nerdtree`
```
or
```vim
set NERDTree
```
Use `set noNERDTree` to disable this extension.
<details>
<summary>Full list of aliases</summary>
```vim
set NERDTree
Plug 'preservim/nerdtree`
Plug 'https://github.com/preservim/nerdtree'
Plug 'https://github.com/scrooloose/nerdtree'
Plug 'scrooloose/nerdtree'
Plug 'nerdtree'
```
</details>
### Preview
<details>
<summary>Click to the the preview</summary>
<img src="images/nerdtree.gif" alt="NERDTree example"/>
</details>
### Supported commands
- `:NERDTree`
- `:NERDTreeFocus`
- `:NERDTreeToggle`
- `:NERDTreeClose`
- `:NERDTreeFind`
- `:NERDTreeRefreshRoot`
| Key | Description | Map Setting |
|---------|---------------------------------------------------------|--------------------------------|
| `o` | Open files, directories and bookmarks | `g:NERDTreeMapActivateNode` |
| `go` | Open selected file, but leave cursor in the NERDTree | `g:NERDTreeMapPreview` |
| `t` | Open selected node/bookmark in a new tab | `g:NERDTreeMapOpenInTab` |
| `T` | Same as 't' but keep the focus on the current tab | `g:NERDTreeMapOpenInTabSilent` |
| `i` | Open selected file in a split window | `g:NERDTreeMapOpenSplit` |
| `gi` | Same as i, but leave the cursor on the NERDTree | `g:NERDTreeMapPreviewSplit` |
| `s` | Open selected file in a new vsplit | `g:NERDTreeMapOpenVSplit` |
| `gs` | Same as s, but leave the cursor on the NERDTree | `g:NERDTreeMapPreviewVSplit` |
| `O` | Recursively open the selected directory | `g:NERDTreeMapOpenRecursively` |
| `x` | Close the current nodes parent | `g:NERDTreeMapCloseDir` |
| `X` | Recursively close all children of the current node | `g:NERDTreeMapCloseChildren` |
| `P` | Jump to the root node | `g:NERDTreeMapJumpRoot` |
| `p` | Jump to current nodes parent | `g:NERDTreeMapJumpParent` |
| `K` | Jump up inside directories at the current tree depth | `g:NERDTreeMapJumpFirstChild` |
| `J` | Jump down inside directories at the current tree depth | `g:NERDTreeMapJumpLastChild` |
| `<C-J>` | Jump down to next sibling of the current directory | `g:NERDTreeMapJumpNextSibling` |
| `<C-K>` | Jump up to previous sibling of the current directory | `g:NERDTreeMapJumpPrevSibling` |
| `r` | Recursively refresh the current directory | `g:NERDTreeMapRefresh` |
| `R` | Recursively refresh the current root | `g:NERDTreeMapRefreshRoot` |
| `m` | Display the NERDTree menu | `g:NERDTreeMapMenu` |
| `q` | Close the NERDTree window | `g:NERDTreeMapQuit` |
| `A` | Zoom (maximize/minimize) the NERDTree window | `g:NERDTreeMapToggleZoom` |
### Troubleshooting
If you see the the file is opened automatically on every movement in the Project View (`j`, `k`, etc.)
please make sure that you have "Open Files with Single click" disabled.
<img src="images/disable-one-click.png" alt="Disable one click"/>

24
doc/Select-mode.md Normal file
View File

@@ -0,0 +1,24 @@
# FAQ
## What is select mode?
This mode is where the selection works the same as system selection. When you start typing, the text in the selected area is removed and replaced by the new characters that are being typed in.
## Why is select mode enabled during refactoring?
With the help of the select mode, you can immediately enter the variable name during refactoring. You can go to the beginning or the end of a variable using the arrow keys. If you need to make more complex changes, you can always go back to normal mode with `<ESC>`.
## What if I want to use visual mode during refactoring?
Select mode is controlled by the `keymodel`, `selectmode` and `idearefactormode` options. Set `idearefactormode` to `visual` to adjust this behavior.
`set idearefactormode=visual`
## What if I don't want to change the mode during refactoring?
`set idearefactormode=keep`
# See Also
* IdeaVim options: https://github.com/JetBrains/ideavim/blob/master/doc/set-commands.md
* Vim documentation about select mode: https://vimhelp.org/visual.txt.html#Select-mode
* Stackoverflow explanation: https://vi.stackexchange.com/questions/4891/what-is-the-select-mode-and-when-is-it-relevant-to-use-it

View File

@@ -1,14 +1,16 @@
Some examples of join command with `ideajoin` option enabled. Some examples of join command with `ideajoin` option enabled.
Put `set ideajoin` to your `~/.ideavimrc` to enable this functionality. Put `set ideajoin` to your `~/.ideavimrc` to enable this functionality.
1) Automatic join concatenated lines: Now, you can press `J` (`shift+j`) on a line or a selected block of text to join the lines together.
* Automatic join concatenated lines:
``` ```
"Hello" + -> "Hello world" "Hello" + -> "Hello world"
" world!" " world!"
``` ```
2) Nested if's: * Nested if's:
``` ```
if (a) { -> if (a && b) { if (a) { -> if (a && b) {
@@ -18,7 +20,14 @@ if (a) { -> if (a && b) {
} }
``` ```
3) Remove braces from one line for / if / while: * Comments:
```
// Hello -> // Hello world
// world
```
* Remove braces from one line for / if / while:
``` ```
if (fail) { -> if (fail) return; if (fail) { -> if (fail) return;
@@ -26,7 +35,7 @@ if (fail) { -> if (fail) return;
} }
``` ```
4) Kotlin one line method: * Kotlin one line method:
``` ```
fun myNumber(): Int { -> fun myNumber(): Int = 42 fun myNumber(): Int { -> fun myNumber(): Int = 42
@@ -34,18 +43,18 @@ fun myNumber(): Int { -> fun myNumber(): Int = 42
} }
``` ```
5) Join declaration and initialization: * Join declaration and initialization:
``` ```
int a; -> int a = 5; int a; -> int a = 5;
a = 5; a = 5;
``` ```
6) Chain call: * Chain call:
``` ```
sb.append("a"); -> sb.append("a").append("b"); sb.append("a"); -> sb.append("a").append("b");
sb.append("b"); sb.append("b");
``` ```
And other functions provided by the plugins. And other features provided by the plugins.

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

BIN
doc/images/nerdtree.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 MiB

View File

@@ -38,6 +38,8 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
acts like startsel is enabled acts like startsel is enabled
'matchpairs' 'mps' pairs of characters that "%" can match 'matchpairs' 'mps' pairs of characters that "%" can match
'maxmapdepth' 'mmd' Maximum depth of mappings
'more' 'more' When on, listings pause when the whole screen is filled.
'nrformats' 'nf' number formats recognized for CTRL-A command 'nrformats' 'nf' number formats recognized for CTRL-A command
'number' 'nu' print the line number in front of each line 'number' 'nu' print the line number in front of each line
'relativenumber' 'rnu' show the line number relative to the line with 'relativenumber' 'rnu' show the line number relative to the line with
@@ -58,13 +60,11 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
ideaselection when IDE sets a selection - IdeaVim ONLY ideaselection when IDE sets a selection - IdeaVim ONLY
(examples: extend selection, wrap with while, etc.) (examples: extend selection, wrap with while, etc.)
Deprecated values: `startofline` `sol` When "on" some commands move the cursor to the first non-blank of the line.
template ~~please use `idearefactormode` option~~ When off the cursor is kept in the same column (if possible).
when starting a template - IdeaVim ONLY
refactoring ~~please use ideaselection~~
same as ideaselection - IdeaVim ONLY
'showmode' 'smd' message on the status line to show current mode 'showmode' 'smd' message on the status line to show current mode
'showcmd' 'sc' show (partial) command in the status bar
'sidescroll' 'ss' minimum number of columns to scroll horizontally 'sidescroll' 'ss' minimum number of columns to scroll horizontally
'sidescrolloff' 'siso' min. number of columns to left and right of cursor 'sidescrolloff' 'siso' min. number of columns to left and right of cursor
'smartcase' 'scs' no ignore case when pattern is uppercase 'smartcase' 'scs' no ignore case when pattern is uppercase
@@ -103,10 +103,38 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
If true, join command will be performed via IDE If true, join command will be performed via IDE
See wiki/`ideajoin` examples See wiki/`ideajoin` examples
`ideastatusbar` `ideastatusbar` Boolean (default true) [To Be Released] `ideastatusicon` `ideastatusicon` String(default "enabled")
If false, IdeaVim icon won't be shown in the status bar. Define the behavior of IdeaVim icon in the status bar.
Works only from `~/.ideavimrc` after the IDE restart.
Use one of the following values:
- enabled - icon is shown in the status bar
- gray - use the gray version of the icon
- disabled - hide the icon
`ideawrite` `ideawrite` String (default "all")
"file" or "all". Defines the behaviour of ":w" command.
Value "all" enables execution of ":wa" (save all) command on ":w" (save).
This feature exists because some IJ options like "Prettier on save" or "ESlint on save"
work only with "save all" action. If this option is set to "all", these actions work
also with ":w" command.
`lookupkeys` `lookupkeys` List of strings
List of keys that should be processed by the IDE during the active lookup (autocompletion).
For example, <Tab> and <Enter> are used by the IDE to finish the lookup,
but <C-W> should be passed to IdeaVim.
Default value:
"<Tab>", "<Down>", "<Up>", "<Enter>", "<Left>", "<Right>",
"<C-Down>", "<C-Up>", "<PageUp>", "<PageDown>",
"<C-J>", "<C-Q>"
`ideavimsupport` `ideavimsupport` List of strings (default "dialog")
Define the list of additional buffers where IdeaVim is enabled.
- dialog - enable IdeaVim in dialogs
- singleline - enable IdeaVim in single line editors (not suggested)
---------- ----------
[1] - cursor keys, <End>, <Home>, <PageUp> and <PageDown> [1] - cursor keys, <End>, <Home>, <PageUp> and <PageDown>

34
doc/sethandler.md Normal file
View File

@@ -0,0 +1,34 @@
# Configuring conflicting keys via .ideavimrc
IdeaVim allows defining handlers for the shortcuts that exist for both IDE and Vim (e.g. `<C-C>`).
```vim
" Use ctrl-c as an ide shortcut in normal and visual modes
sethandler <C-C> n-v:ide i:vim
```
This option consist of an optional shortcut and a list of space separated list of handlers:
`mode-list:handler mode-list:handler ...`
The `mode-list` is a dash separated list of modes that is similar to `guicursor` notation
and defines the following modes:
- n - normal mode
- i - insert mode
- x - visual mode
- v - visual and select modes
- a - all modes
The `handler` is an argument that may accept the following values:
- ide - use IDE handler
- vim - use Vim handler
Examples:
- `n:ide` - use IDE handler in normal mode
- `i-v:vim` - use Vim handler in normal, visual, and select modes
- `a:ide` - use IDE handler in all modes
By using `sethandler` you can define handlers:
- For a single shortcut: `sethandler <C-A> n:vim i-x:ide` - use Vim handler in normal mode and IDE handler in insert and visual modes,
- For all shortcuts: `sethandler n:vim i:ide` - use Vim handlers in normal mode and IDE handlers in insert mode.
If the definition of the handler is missing for some mode, it defaults to `vim`:
`sethandler <C-X> i:ide` - use IDE handler in insert mode and Vim handler in all other modes.

View File

@@ -1,16 +1,19 @@
# suppress inspection "UnusedProperty" for whole file # suppress inspection "UnusedProperty" for whole file
ideaVersion=2019.3 ideaVersion=LATEST-EAP-SNAPSHOT
downloadIdeaSources=true downloadIdeaSources=true
instrumentPluginCode=true instrumentPluginCode=true
version=SNAPSHOT version=SNAPSHOT
javaVersion=1.8 javaVersion=11
kotlinVersion=1.3.61 remoteRobotVersion=0.11.10
publishUsername=username antlrVersion=4.10.1
# Please don't forget to update kotlin version in buildscript section
kotlinVersion=1.6.21
publishToken=token publishToken=token
publishChannels=eap publishChannels=eap
# Since 192 version of IJ java plugin should be defined separately
# Set this value to true if you are going to run tests under idea version < 192
legacyNoJavaPlugin=false
slackUrl= slackUrl=
# Gradle settings
org.gradle.jvmargs='-Dfile.encoding=UTF-8'

Binary file not shown.

View File

@@ -1,6 +1,5 @@
#Fri Nov 22 14:42:01 MSK 2019
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

286
gradlew vendored
View File

@@ -1,78 +1,129 @@
#!/usr/bin/env sh #!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
############################################################################## ##############################################################################
## #
## Gradle start up script for UN*X # Gradle start up script for POSIX generated by Gradle.
## #
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
############################################################################## ##############################################################################
# Attempt to set APP_HOME # Attempt to set APP_HOME
# Resolve links: $0 may be a link # Resolve links: $0 may be a link
PRG="$0" app_path=$0
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do # Need this for daisy-chained symlinks.
ls=`ls -ld "$PRG"` while
link=`expr "$ls" : '.*-> \(.*\)$'` APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
if expr "$link" : '/.*' > /dev/null; then [ -h "$app_path" ]
PRG="$link" do
else ls=$( ls -ld "$app_path" )
PRG=`dirname "$PRG"`"/$link" link=${ls#*' -> '}
fi case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle" APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"` APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum" MAX_FD=maximum
warn () { warn () {
echo "$*" echo "$*"
} } >&2
die () { die () {
echo echo
echo "$*" echo "$*"
echo echo
exit 1 exit 1
} } >&2
# OS specific support (must be 'true' or 'false'). # OS specific support (must be 'true' or 'false').
cygwin=false cygwin=false
msys=false msys=false
darwin=false darwin=false
nonstop=false nonstop=false
case "`uname`" in case "$( uname )" in #(
CYGWIN* ) CYGWIN* ) cygwin=true ;; #(
cygwin=true Darwin* ) darwin=true ;; #(
;; MSYS* | MINGW* ) msys=true ;; #(
Darwin* ) NONSTOP* ) nonstop=true ;;
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables # IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java" JAVACMD=$JAVA_HOME/jre/sh/java
else else
JAVACMD="$JAVA_HOME/bin/java" JAVACMD=$JAVA_HOME/bin/java
fi fi
if [ ! -x "$JAVACMD" ] ; then if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi fi
else else
JAVACMD="java" JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
@@ -89,84 +140,95 @@ location of your Java installation."
fi fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
MAX_FD_LIMIT=`ulimit -H -n` case $MAX_FD in #(
if [ $? -eq 0 ] ; then max*)
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD=$( ulimit -H -n ) ||
MAX_FD="$MAX_FD_LIMIT" warn "Could not query maximum file descriptor limit"
fi esac
ulimit -n $MAX_FD case $MAX_FD in #(
if [ $? -ne 0 ] ; then '' | soft) :;; #(
warn "Could not set maximum file descriptor limit: $MAX_FD" *)
fi ulimit -n "$MAX_FD" ||
else warn "Could not set maximum file descriptor limit to $MAX_FD"
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac esac
fi fi
# Escape application args # Collect all arguments for the java command, stacking in reverse order:
save () { # * args from the command line
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done # * the main class name
echo " " # * -classpath
} # * -D...appname settings
APP_ARGS=$(save "$@") # * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# Collect all arguments for the java command, following the shell quoting and substitution rules # For Cygwin or MSYS, switch paths to Windows format before running java
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong JAVACMD=$( cygpath --unix "$JAVACMD" )
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")" # Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@" exec "$JAVACMD" "$@"

43
gradlew.bat vendored
View File

@@ -1,3 +1,19 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%" == "" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe @rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init if "%ERRORLEVEL%" == "0" goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -35,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -45,28 +64,14 @@ echo location of your Java installation.
goto fail goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell

20
qodana.yaml Normal file
View File

@@ -0,0 +1,20 @@
version: 1.0
profile:
name: Qodana
exclude:
- name: MoveVariableDeclarationIntoWhen
- name: PluginXmlValidity
- name: RedundantThrows
- name: SuperTearDownInFinally
- name: UnusedReturnValue
- name: All
paths:
- build.gradle
- gradle/wrapper/gradle-wrapper.properties
- resources/icons/youtrack.svg
- src/com/maddyhome/idea/vim/ex/vimscript/VimScriptCommandHandler.java
- src/com/maddyhome/idea/vim/helper/SearchHelper.java
- src/com/maddyhome/idea/vim/regexp/RegExp.java
- test/org/jetbrains/plugins/ideavim/propertybased/samples/JavaText.kt
- test/org/jetbrains/plugins/ideavim/propertybased/samples/LoremText.kt
- test/org/jetbrains/plugins/ideavim/propertybased/samples/SimpleText.kt

View File

@@ -1,23 +0,0 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.MotionGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.ChangeGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.CommandGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.MarkGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.RegisterGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.FileGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.SearchGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.ProcessGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.MacroGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.DigraphGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.HistoryGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.KeyGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.WindowGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.EditorGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.visual.VisualMotionGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.copy.YankGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.copy.PutGroup"/>
<applicationService serviceImplementation="com.maddyhome.idea.vim.group.NotificationService"/>
</extensions>
</idea-plugin>

View File

@@ -1,64 +0,0 @@
<idea-plugin>
<extensions defaultExtensionNs="IdeaVIM">
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ActionListHandler" names="actionlist"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.AsciiHandler" names="as[cii]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CmdFilterHandler" names="!"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CmdHandler" names="com[mand]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CmdClearHandler" names="comc[lear]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.CopyTextHandler" names="co[py],t"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DelCmdHandler" names="delc[ommand]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DeleteLinesHandler" names="d[elete]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DeleteMarksHandler" names="delm[arks]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DigraphHandler" names="dig[raphs]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.DumpLineHandler" names="dump[line]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.EditFileHandler" names="bro[wse],e[dit]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ActionHandler" names="action"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.EchoHandler" names="ec[ho]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ExitHandler" names="qa[ll],quita[ll],wqa[ll],xa[ll]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.FindClassHandler" names="cla[ss]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.FindFileHandler" names="fin[d]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.FindSymbolHandler" names="sym[bol]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.GotoCharacterHandler" names="go[to]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.HelpHandler" names="h[elp]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.HistoryHandler" names="his[tory]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.JoinLinesHandler" names="j[oin]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.JumpsHandler" names="ju[mps]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.LetHandler" names="let"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MapHandler"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MarkHandler" names="ma[rk],k"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MarksHandler" names="marks"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.MoveTextHandler" names="m[ove]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.NextFileHandler" names="n[ext]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.NoHLSearchHandler" names="noh[lsearch]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.OnlyHandler" names="on[ly]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PreviousFileHandler" names="N[ext],prev[ious]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PromptFindHandler" names="pro[mptfind]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PromptReplaceHandler" names="promptr[epl]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PutLinesHandler" names="pu[t]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.QuitHandler" names="q[uit],clo[se],hid[e]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.RedoHandler" names="red[o]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.RegistersHandler" names="di[splay],reg[isters]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.RepeatHandler" names="@"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SelectFileHandler" names="argu[ment]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SelectFirstFileHandler" names="fir[st],rew[ind]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SelectLastFileHandler" names="la[st]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SetHandler" names="se[t]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ShiftLeftHandler"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ShiftRightHandler"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SourceHandler" names="so[urce]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SortHandler" names="sor[t]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SplitHandler" names="vs[plit],sp[lit]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.SubstituteHandler" names="s[ubstitute],&amp;,~"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.UndoHandler" names="u[ndo]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteAllHandler" names="wa[ll]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteHandler" names="w[rite]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteNextFileHandler" names="wn[ext]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WritePreviousFileHandler" names="wN[ext],wp[revious]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.WriteQuitHandler" names="wq,exi[t],x[it]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.YankLinesHandler" names="y[ank]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.ShellHandler" names="sh[ell]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.NextTabHandler" names="tabn[ext]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.PreviousTabHandler" names="tabp[revious],tabN[ext]"/>
<vimExCommand implementation="com.maddyhome.idea.vim.ex.handler.TabOnlyHandler" names="tabo[nly]"/>
</extensions>
</idea-plugin>

View File

@@ -1,7 +0,0 @@
<idea-plugin>
<extensions defaultExtensionNs="IdeaVIM">
<vimExtension implementation="com.maddyhome.idea.vim.extension.surround.VimSurroundExtension"/>
<vimExtension implementation="com.maddyhome.idea.vim.extension.multiplecursors.VimMultipleCursorsExtension"/>
<vimExtension implementation="com.maddyhome.idea.vim.extension.commentary.CommentaryExtension"/>
</extensions>
</idea-plugin>

View File

@@ -1,78 +0,0 @@
<idea-plugin url="https://plugins.jetbrains.com/plugin/164" xmlns:xi="http://www.w3.org/2001/XInclude">
<name>IdeaVim</name>
<id>IdeaVIM</id>
<change-notes><![CDATA[
<ul>
<li>Fix `imap jk <ESC>` for the active autocompletion lookup</li>
<li>Surround and Commentary extensions can be repeated with a dot command</li>
</ul>
<p>See also the complete <a href="https://github.com/JetBrains/ideavim/blob/master/CHANGES.md">changelog</a>.</p>
]]></change-notes>
<description><![CDATA[
<p>Vim emulation plug-in for IDEs based on the IntelliJ platform.</p>
<p>IdeaVim supports many Vim features including normal/insert/visual modes, motion keys, deletion/changing, marks, registers, some Ex commands, Vim regexps, configuration via ~/.ideavimrc, macros, window commands, etc.</p>
<p>See also:</p>
<ul>
<li><a href="https://github.com/JetBrains/ideavim">GitHub repository</a>: documentation and contributing</li>
<li><a href="https://youtrack.jetbrains.com/issues/VIM">Issue tracker</a>: feature requests and bug reports</li>
</ul>
]]></description>
<version>SNAPSHOT</version>
<vendor>JetBrains</vendor>
<!-- Please search for "[VERSION UPDATE]" in project in case you update the since-build version -->
<idea-version since-build="183.4284.148"/>
<!-- Mark the plugin as compatible with RubyMine and other products based on the IntelliJ platform -->
<depends>com.intellij.modules.lang</depends>
<resource-bundle xmlns="">messages</resource-bundle>
<application-components>
<component>
<implementation-class>com.maddyhome.idea.vim.VimPlugin</implementation-class>
</component>
<component>
<implementation-class>com.maddyhome.idea.vim.VimLocalConfig</implementation-class>
</component>
</application-components>
<project-components>
<component>
<implementation-class>com.maddyhome.idea.vim.VimProjectComponent</implementation-class>
</component>
</project-components>
<extensionPoints>
<extensionPoint name="vimExtension" interface="com.maddyhome.idea.vim.extension.VimExtension"/>
<extensionPoint name="vimExCommand" beanClass="com.maddyhome.idea.vim.ex.ExBeanClass">
<with attribute="implementation" implements="com.maddyhome.idea.vim.ex.CommandHandler"/>
</extensionPoint>
<extensionPoint name="vimAction" beanClass="com.maddyhome.idea.vim.handler.ActionBeanClass">
<with attribute="implementation" implements="com.maddyhome.idea.vim.handler.EditorActionHandlerBase"/>
</extensionPoint>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<applicationConfigurable groupId="editor" instance="com.maddyhome.idea.vim.ui.VimEmulationConfigurable"/>
<projectService serviceImplementation="com.maddyhome.idea.vim.group.NotificationService"/>
<statusBarWidgetProvider implementation="com.maddyhome.idea.vim.StatusBarIconProvider"/>
</extensions>
<xi:include href="/META-INF/ApplicationServices.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/VimActions.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/VimExCommands.xml" xpointer="xpointer(/idea-plugin/*)"/>
<xi:include href="/META-INF/VimExtensions.xml" xpointer="xpointer(/idea-plugin/*)"/>
<actions>
<action id="VimPluginToggle" class="com.maddyhome.idea.vim.action.VimPluginToggleAction" text="Vim Emulator" description="Toggle the vim plugin On/off">
<add-to-group group-id="ToolsMenu" anchor="last"/>
</action>
<!-- Internal -->
<action id="VimInternalAddInlays" class="com.maddyhome.idea.vim.action.internal.AddInlaysAction" text="Add Test Inlays | IdeaVim Internal" internal="true"/>
<action id="VimShortcutKeyAction" class="com.maddyhome.idea.vim.action.VimShortcutKeyAction" text="Shortcuts"/>
<action id="VimActions" class="com.maddyhome.idea.vim.VimActions" text="Vim Actions"/>
</actions>
</idea-plugin>

View File

@@ -1,4 +0,0 @@
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="16" height="16">
<path
d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
</svg>

Before

Width:  |  Height:  |  Size: 824 B

View File

@@ -1,72 +0,0 @@
#
# IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
# Copyright (C) 2003-2019 The IdeaVim authors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
notexcmd=Not an editor command: {0}
intbadcmd=Internal error - invalid command: {0}
e_backslash=E10: \\ should be followed by /, ? or &
e_badrange=Unexpected character ''{0}'' in range
e_norange=No range allowed
e_rangereq=Range required
e_argreq=Argument required
e_argforb=Argument forbidden
e_noprev=E34: No previous command
e_nopresub=E33: No previous substitute regular expression
E191=E191: Argument must be a letter or forward/backward quote
e_backrange=Backwards range given
E146=E146: Regular expressions can''t be delimited by letters
e_zerocount=Zero count
e_trailing=Trailing characters
e_invcmd=Invalid command
e_null=Null argument
E50=E50: Too many \\z(
E51=E51: Too many {0}(
E52=E52: Unmatched \\z(
E53=E53: Unmatched {0}%(
E54=E54: Unmatched {0}(
E55=E55: Unmatched {0})
E56=E56: {0}* operand could be empty
E57=E57: {0}+ operand could be empty
E58=E58: {0}{ operand could be empty
E59=E59: invalid character after {0}@
E60=E60: Too many complex {0}{...}s
E61=E61: Nested {0}*
E62=E62: Nested {0}{1}
E63=E63: invalid use of \\_
E64=E64: {0}{1} follows nothing
E65=E65: Illegal back reference
E66=E66: \\z( not allowed here
E67=E67: \\z1 et al. not allowed here
E68=E68: Invalid character after \\z
E69=E69: Missing ] after {0}%[
E70=E70: Empty {0}%[]
E71=E71: Invalid character after {0}%
e_invrange=E16: Invalid range
e_toomsbra=E76: Too many [
e_internal=Internal error
synerror=Syntax error in {0}{...}
E363=E363: pattern caused out-of-stack error
e_re_corr=E44: Currupted regexp program
e_re_damg=E43: Damaged match string
E369=E369: invalid item in {0}%[]
E384=E384: search hit TOP without match for: {0}
E385=E385: search hit BOTTOM without match for: {0}
e_patnotf2=Pattern not found: {0}
unkopt=Unknown option: {0}
e_invarg=Invalid argument: {0}
E475=E475: Invalid argument: {0}
E774=E774: 'operatorfunc' is empty

View File

@@ -1,19 +1,3 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2019 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
rootProject.name = 'IdeaVIM' rootProject.name = 'IdeaVIM'
include 'vim-engine'

View File

@@ -1,938 +0,0 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2019 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.maddyhome.idea.vim;
import com.intellij.ide.DataManager;
import com.intellij.ide.IdeEventQueue;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.UndoConfirmationPolicy;
import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.actionSystem.ActionPlan;
import com.intellij.openapi.editor.actionSystem.DocCommandGroupId;
import com.intellij.openapi.editor.actionSystem.TypedActionHandler;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.maddyhome.idea.vim.action.DuplicableOperatorAction;
import com.maddyhome.idea.vim.action.change.VimRepeater;
import com.maddyhome.idea.vim.action.macro.ToggleRecordingAction;
import com.maddyhome.idea.vim.action.motion.search.SearchEntryFwdAction;
import com.maddyhome.idea.vim.action.motion.search.SearchEntryRevAction;
import com.maddyhome.idea.vim.command.*;
import com.maddyhome.idea.vim.extension.VimExtensionHandler;
import com.maddyhome.idea.vim.group.ChangeGroup;
import com.maddyhome.idea.vim.group.RegisterGroup;
import com.maddyhome.idea.vim.group.visual.VimSelection;
import com.maddyhome.idea.vim.group.visual.VisualGroupKt;
import com.maddyhome.idea.vim.handler.EditorActionHandlerBase;
import com.maddyhome.idea.vim.helper.*;
import com.maddyhome.idea.vim.key.*;
import com.maddyhome.idea.vim.listener.SelectionVimListenerSuppressor;
import com.maddyhome.idea.vim.listener.VimListenerSuppressor;
import com.maddyhome.idea.vim.option.OptionsManager;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.intellij.openapi.actionSystem.CommonDataKeys.*;
import static com.intellij.openapi.actionSystem.PlatformDataKeys.PROJECT_FILE_DIRECTORY;
import static com.maddyhome.idea.vim.helper.StringHelper.parseKeys;
/**
* This handlers every keystroke that the user can argType except those that are still valid hotkeys for various Idea
* actions. This is a singleton.
*/
public class KeyHandler {
/**
* Returns a reference to the singleton instance of this class
*
* @return A reference to the singleton
*/
@NotNull
public static KeyHandler getInstance() {
if (instance == null) {
instance = new KeyHandler();
}
return instance;
}
/**
* Creates an instance
*/
private KeyHandler() {
}
/**
* Sets the original key handler
*
* @param origHandler The original key handler
*/
public void setOriginalHandler(TypedActionHandler origHandler) {
this.origHandler = origHandler;
}
/**
* Gets the original key handler
*
* @return The original key handler
*/
public TypedActionHandler getOriginalHandler() {
return origHandler;
}
public static void executeVimAction(@NotNull Editor editor,
@NotNull EditorActionHandlerBase cmd,
DataContext context) {
CommandProcessor.getInstance()
.executeCommand(editor.getProject(), () -> cmd.execute(editor, getProjectAwareDataContext(editor, context)),
cmd.getId(), DocCommandGroupId.noneGroupId(editor.getDocument()), UndoConfirmationPolicy.DEFAULT,
editor.getDocument());
}
/**
* Execute an action
*
* @param action The action to execute
* @param context The context to run it in
*/
public static boolean executeAction(@NotNull AnAction action, @NotNull DataContext context) {
final AnActionEvent event =
new AnActionEvent(null, context, ActionPlaces.ACTION_SEARCH, action.getTemplatePresentation(),
ActionManager.getInstance(), 0);
if (action instanceof ActionGroup && !((ActionGroup)action).canBePerformed(context)) {
// Some of the AcitonGroups should not be performed, but shown as a popup
ListPopup popup = JBPopupFactory.getInstance()
.createActionGroupPopup(event.getPresentation().getText(), (ActionGroup)action, context, false, null, -1);
Component component = context.getData(PlatformDataKeys.CONTEXT_COMPONENT);
if (component != null) {
Window window = SwingUtilities.getWindowAncestor(component);
if (window != null) {
popup.showInCenterOf(window);
}
return true;
}
popup.showInFocusCenter();
return true;
}
else {
// beforeActionPerformedUpdate should be called to update the action. It fixes some rider-specific problems
// because rider use async update method. See VIM-1819
action.beforeActionPerformedUpdate(event);
if (event.getPresentation().isEnabled()) {
action.actionPerformed(event);
return true;
}
}
return false;
}
/**
* This is the main key handler for the Vim plugin. Every keystroke not handled directly by Idea is sent here for
* processing.
*
* @param editor The editor the key was typed into
* @param key The keystroke typed by the user
* @param context The data context
*/
public void handleKey(@NotNull Editor editor, @NotNull KeyStroke key, @NotNull DataContext context) {
handleKey(editor, key, context, true);
}
/**
* Invoked before acquiring a write lock and actually handling the keystroke.
* <p>
* Drafts an optional {@link ActionPlan} that will be used as a base for zero-latency rendering in editor.
*
* @param editor The editor the key was typed into
* @param key The keystroke typed by the user
* @param context The data context
* @param plan The current action plan
*/
public void beforeHandleKey(@NotNull Editor editor,
@NotNull KeyStroke key,
@NotNull DataContext context,
@NotNull ActionPlan plan) {
final CommandState.Mode mode = CommandState.getInstance(editor).getMode();
if (mode == CommandState.Mode.INSERT || mode == CommandState.Mode.REPLACE) {
VimPlugin.getChange().beforeProcessKey(editor, context, key, plan);
}
}
public void handleKey(@NotNull Editor editor,
@NotNull KeyStroke key,
@NotNull DataContext context,
boolean allowKeyMappings) {
VimPlugin.clearError();
// All the editor actions should be performed with top level editor!!!
// Be careful: all the EditorActionHandler implementation should correctly process InjectedEditors
editor = HelperKt.getTopLevelEditor(editor);
final CommandState editorState = CommandState.getInstance(editor);
// If this is a "regular" character keystroke, get the character
char chKey = key.getKeyChar() == KeyEvent.CHAR_UNDEFINED ? 0 : key.getKeyChar();
final boolean isRecording = editorState.isRecording();
boolean shouldRecord = true;
// Check for command count before key mappings - otherwise e.g. ':map 0 ^' breaks command counts that contain a zero
if (isCommandCount(editorState, chKey)) {
// Update the count
count = count * 10 + (chKey - '0');
}
else if (!waitCommandFinish(editor) && allowKeyMappings && handleKeyMapping(editor, key, context)) {
if (editorState.getMappingMode() != MappingMode.OP_PENDING ||
currentCmd.isEmpty() ||
currentCmd.peek().getArgument() == null ||
Objects.requireNonNull(currentCmd.peek().getArgument()).getType() != Argument.Type.OFFSETS) {
return;
}
}
// Pressing delete while entering a count "removes" the last digit entered
// Unlike the digits, this must be checked *after* checking for key mappings
else if (isDeleteCommandCount(key, editorState)) {
// "Remove" the last digit sent to us
count /= 10;
}
else if (isEditorReset(key, editorState)) {
handleEditorReset(editor, key, context);
}
// If we got this far the user is entering a command or supplying an argument to an entered command.
// First let's check to see if we are at the point of expecting a single character argument to a command.
else if (currentArg == Argument.Type.CHARACTER) {
handleCharArgument(key, chKey);
}
// If we are this far, then the user must be entering a command or a non-single-character argument
// to an entered command. Let's figure out which it is
else {
// For debugging purposes we track the keys entered for this command
keys.add(key);
// Ask the key/action tree if this is an appropriate key at this point in the command and if so,
// return the node matching this keystroke
Node node = editorState.getCurrentNode().get(key);
if (handleDigraph(editor, key, context, node)) return;
node = mapOpCommand(key, node, editorState);
if (node instanceof CommandNode) {
handleCommandNode(editor, context, key, (CommandNode)node, editorState);
}
else if (node instanceof CommandPartNode) {
editorState.setCurrentNode((CommandPartNode)node);
}
else {
if (lastWasBS && lastChar != 0 && OptionsManager.INSTANCE.getDigraph().isSet()) {
char dig = VimPlugin.getDigraph().getDigraph(lastChar, key.getKeyChar());
key = KeyStroke.getKeyStroke(dig);
}
// If we are in insert/replace mode send this key in for processing
if (editorState.getMode() == CommandState.Mode.INSERT || editorState.getMode() == CommandState.Mode.REPLACE) {
if (!VimPlugin.getChange().processKey(editor, context, key)) {
shouldRecord = false;
}
}
else if (editorState.getMode() == CommandState.Mode.SELECT) {
if (!VimPlugin.getChange().processKeyInSelectMode(editor, context, key)) {
shouldRecord = false;
}
}
else if (editorState.getMappingMode() == MappingMode.CMD_LINE) {
if (!VimPlugin.getProcess().processExKey(editor, key)) {
shouldRecord = false;
}
}
// If we get here then the user has entered an unrecognized series of keystrokes
else {
state = State.BAD_COMMAND;
}
lastChar = lastWasBS && lastChar != 0 ? 0 : key.getKeyChar();
lastWasBS = false;
partialReset(editor);
}
}
// Do we have a fully entered command at this point? If so, lets execute it
if (state == State.READY) {
executeCommand(editor, key, context, editorState);
}
else if (state == State.BAD_COMMAND) {
if (editorState.getMappingMode() == MappingMode.OP_PENDING) {
editorState.popState();
}
VimPlugin.indicateError();
reset(editor);
}
else if (isRecording && shouldRecord) {
VimPlugin.getRegister().recordKeyStroke(key);
}
}
private boolean waitCommandFinish(@NotNull Editor editor) {
return !(CommandState.getInstance(editor).getCurrentNode() instanceof RootNode);
}
/**
* See the description for {@link com.maddyhome.idea.vim.action.DuplicableOperatorAction}
*/
private Node mapOpCommand(KeyStroke key, Node node, @NotNull CommandState editorState) {
if (editorState.getMappingMode() == MappingMode.OP_PENDING && !currentCmd.empty()) {
EditorActionHandlerBase action = currentCmd.peek().getAction();
if (action instanceof DuplicableOperatorAction &&
((DuplicableOperatorAction)action).getDuplicateWith() == key.getKeyChar()) {
return editorState.getCurrentNode().get(KeyStroke.getKeyStroke('_'));
}
}
return node;
}
private static <T> boolean isPrefix(@NotNull List<T> list1, @NotNull List<T> list2) {
if (list1.size() > list2.size()) {
return false;
}
for (int i = 0; i < list1.size(); i++) {
if (!list1.get(i).equals(list2.get(i))) {
return false;
}
}
return true;
}
private void handleEditorReset(@NotNull Editor editor, @NotNull KeyStroke key, @NotNull final DataContext context) {
if (count == 0 && currentArg == null && currentCmd.size() == 0) {
RegisterGroup register = VimPlugin.getRegister();
if (register.getCurrentRegister() == register.getDefaultRegister()) {
if (key.getKeyCode() == KeyEvent.VK_ESCAPE) {
CommandProcessor.getInstance()
.executeCommand(editor.getProject(), () -> KeyHandler.executeAction("EditorEscape", context), "", null);
}
VimPlugin.indicateError();
}
}
reset(editor);
ChangeGroup.resetCaret(editor, false);
}
private boolean handleKeyMapping(@NotNull final Editor editor,
@NotNull final KeyStroke key,
@NotNull final DataContext context) {
if (state == State.CHAR_OR_DIGRAPH) return false;
final CommandState commandState = CommandState.getInstance(editor);
commandState.stopMappingTimer();
final MappingMode mappingMode = commandState.getMappingMode();
final List<KeyStroke> mappingKeys = commandState.getMappingKeys();
final List<KeyStroke> fromKeys = new ArrayList<>(mappingKeys);
fromKeys.add(key);
final KeyMapping mapping = VimPlugin.getKey().getKeyMapping(mappingMode);
final MappingInfo currentMappingInfo = mapping.get(fromKeys);
final MappingInfo prevMappingInfo = mapping.get(mappingKeys);
final MappingInfo mappingInfo = currentMappingInfo != null ? currentMappingInfo : prevMappingInfo;
final Application application = ApplicationManager.getApplication();
if (mapping.isPrefix(fromKeys)) {
// Okay, there is some mapping that starts with inserted key sequence. So,
// either the user will continue to enter the mapping, or (if timeout option is set)
// the entered command should be executed. Here we set up the times that will execute
// typed keys after some delay.
// E.g. there is a map for "dweri". If the user types "d", "w" they mean either "dweri" or "dw" command.
// If the user will continue typing "e", "r" and "i", the timer will be cancelled. If the user will
// not type anything, the "dw" command will be executed.
mappingKeys.add(key);
if (!application.isUnitTestMode() && OptionsManager.INSTANCE.getTimeout().isSet()) {
commandState.startMappingTimer(actionEvent -> application.invokeLater(() -> {
final KeyStroke firstKey = mappingKeys.get(0);
mappingKeys.clear();
if (editor.isDisposed() || firstKey.equals(parseKeys("<Plug>").get(0))) {
return;
}
for (KeyStroke keyStroke : fromKeys) {
handleKey(editor, keyStroke, new EditorDataContext(editor), false);
}
}, ModalityState.stateForComponent(editor.getComponent())));
}
return true;
}
else if (mappingInfo != null) {
// Okay, there is a mapping for the entered key sequence
// now the another key sequence should be executed, or the handler that attached to this command
mappingKeys.clear();
final List<KeyStroke> toKeys = mappingInfo.getToKeys();
final VimExtensionHandler extensionHandler = mappingInfo.getExtensionHandler();
final EditorDataContext currentContext = new EditorDataContext(editor);
if (toKeys != null) {
// Here is a mapping to another key sequence
final boolean fromIsPrefix = isPrefix(mappingInfo.getFromKeys(), toKeys);
boolean first = true;
for (KeyStroke keyStroke : toKeys) {
final boolean recursive = mappingInfo.isRecursive() && !(first && fromIsPrefix);
handleKey(editor, keyStroke, currentContext, recursive);
first = false;
}
}
else if (extensionHandler != null) {
// Here is a mapping to some vim handler
final CommandProcessor processor = CommandProcessor.getInstance();
final boolean isPendingMode = CommandState.getInstance(editor).getMappingMode() == MappingMode.OP_PENDING;
Map<Caret, Integer> startOffsets =
editor.getCaretModel().getAllCarets().stream().collect(Collectors.toMap(Function.identity(), Caret::getOffset));
if (extensionHandler.isRepeatable()) {
VimRepeater.Extension.INSTANCE.clean();
}
processor.executeCommand(editor.getProject(), () -> extensionHandler.execute(editor, context),
"Vim " + extensionHandler.getClass().getSimpleName(), null);
if (extensionHandler.isRepeatable()) {
VimRepeater.Extension.INSTANCE.setLastExtensionHandler(extensionHandler);
VimRepeater.Extension.INSTANCE.setArgumentCaptured(null);
VimRepeater.INSTANCE.setRepeatHandler(true);
}
if (isPendingMode &&
!currentCmd.isEmpty() &&
currentCmd.peek().getArgument() == null) {
Map<Caret, VimSelection> offsets = new HashMap<>();
for (Caret caret : editor.getCaretModel().getAllCarets()) {
@Nullable Integer startOffset = startOffsets.get(caret);
if (caret.hasSelection()) {
final VimSelection vimSelection = VimSelection.Companion
.create(UserDataManager.getVimSelectionStart(caret), caret.getOffset(),
SelectionType.fromSubMode(CommandStateHelper.getSubMode(editor)), editor);
offsets.put(caret, vimSelection);
commandState.popState();
}
else if (startOffset != null && startOffset != caret.getOffset()) {
// Command line motions are always characterwise exclusive
int endOffset = caret.getOffset();
if (startOffset < endOffset) {
endOffset -= 1;
} else {
startOffset -= 1;
}
final VimSelection vimSelection = VimSelection.Companion
.create(startOffset, endOffset, SelectionType.CHARACTER_WISE, editor);
offsets.put(caret, vimSelection);
try (VimListenerSuppressor.Locked ignored = SelectionVimListenerSuppressor.INSTANCE.lock()) {
// Move caret to the initial offset for better undo action
// This is not a necessary thing, but without it undo action look less convenient
editor.getCaretModel().moveToOffset(startOffset);
}
}
}
if (!offsets.isEmpty()) {
currentCmd.peek().setArgument(new Argument(offsets));
state = State.READY;
}
}
}
// NB: mappingInfo MUST be non-null here, so if equal
// then prevMappingInfo is also non-null; this also
// means that the prev mapping was a prefix, but the
// next key typed (`key`) was not part of that
if (prevMappingInfo == mappingInfo) {
handleKey(editor, key, currentContext);
}
return true;
}
else {
// If the user enters a command that starts with known mapping, but it is not exactly this mapping,
// mapping handler prevents further processing of there keys.
// E.g. if there is a mapping for "hello" and user enters command "help"
// the processing of "h", "e" and "l" will be prevented by this handler.
// However, these keys should be processed as usual when user enters "p"
// and the following for loop does exactly that.
//
// Okay, look at the code below. Why is the first key handled separately?
// Let's assume the next mappings:
// - map ds j
// - map I 2l
// If user enters `dI`, the first `d` will be caught be this handler because it's a prefix for `ds` command.
// After the user enters `I`, the caught `d` should be processed without mapping and the rest of keys
// should be processed with mappings (to make I work)
//
// Additionally, the <Plug>mappings are not executed if the are failed to map to somethings.
// E.g.
// - map <Plug>iA someAction
// - map I <Plug>i
// For `IA` someAction should be executed.
// But if the user types `Ib`, `<Plug>i` won't be executed again. Only `b` will be passed to keyHandler.
if (mappingKeys.isEmpty()) return false;
// Well, this will always be false, but just for protection
if (fromKeys.isEmpty()) return false;
final List<KeyStroke> unhandledKeys = new ArrayList<>(fromKeys);
mappingKeys.clear();
if (unhandledKeys.get(0).equals(parseKeys("<Plug>").get(0))) {
handleKey(editor, unhandledKeys.get(unhandledKeys.size() - 1), context);
} else {
handleKey(editor, unhandledKeys.get(0), context, false);
for (KeyStroke keyStroke : unhandledKeys.subList(1, unhandledKeys.size())) {
handleKey(editor, keyStroke, context, true);
}
}
return true;
}
}
private boolean isDeleteCommandCount(@NotNull KeyStroke key, @NotNull CommandState editorState) {
return (editorState.getMode() == CommandState.Mode.COMMAND || editorState.getMode() == CommandState.Mode.VISUAL) &&
state == State.NEW_COMMAND &&
currentArg != Argument.Type.CHARACTER &&
currentArg != Argument.Type.DIGRAPH &&
key.getKeyCode() == KeyEvent.VK_DELETE &&
count != 0;
}
private boolean isEditorReset(@NotNull KeyStroke key, @NotNull CommandState editorState) {
return (editorState.getMode() == CommandState.Mode.COMMAND) && StringHelper.isCloseKeyStroke(key);
}
private void handleCharArgument(@NotNull KeyStroke key, char chKey) {
// We are expecting a character argument - is this a regular character the user typed?
// Some special keys can be handled as character arguments - let's check for them here.
if (chKey == 0) {
switch (key.getKeyCode()) {
case KeyEvent.VK_TAB:
chKey = '\t';
break;
case KeyEvent.VK_ENTER:
chKey = '\n';
break;
}
}
if (chKey != 0) {
// Create the character argument, add it to the current command, and signal we are ready to process
// the command
Argument arg = new Argument(chKey);
Command cmd = currentCmd.peek();
cmd.setArgument(arg);
state = State.READY;
}
else {
// Oops - this isn't a valid character argument
state = State.BAD_COMMAND;
}
}
private boolean isCommandCount(@NotNull CommandState editorState, char chKey) {
return (editorState.getMode() == CommandState.Mode.COMMAND || editorState.getMode() == CommandState.Mode.VISUAL) &&
state == State.NEW_COMMAND &&
currentArg != Argument.Type.CHARACTER &&
currentArg != Argument.Type.DIGRAPH &&
Character.isDigit(chKey) &&
(count != 0 || chKey != '0');
}
private boolean handleDigraph(@NotNull Editor editor,
@NotNull KeyStroke key,
@NotNull DataContext context,
@Nullable Node node) {
if (digraph == null && !(node instanceof CommandNode) && DigraphSequence.isDigraphStart(key)) {
digraph = new DigraphSequence();
}
if (digraph != null) {
DigraphSequence.DigraphResult res = digraph.processKey(key, editor);
switch (res.getResult()) {
case DigraphSequence.DigraphResult.RES_OK:
return true;
case DigraphSequence.DigraphResult.RES_BAD:
digraph = null;
return true;
case DigraphSequence.DigraphResult.RES_DONE:
if (currentArg == Argument.Type.DIGRAPH) {
currentArg = Argument.Type.CHARACTER;
}
digraph = null;
final KeyStroke stroke = res.getStroke();
if (stroke == null) {
return false;
}
handleKey(editor, stroke, context);
return true;
}
}
return false;
}
private void executeCommand(@NotNull Editor editor,
@NotNull KeyStroke key,
@NotNull DataContext context,
@NotNull CommandState editorState) {
// Let's go through the command stack and merge it all into one command. At this time there should never
// be more than two commands on the stack - one is the actual command and the other would be a motion
// command argument needed by the first command
Command cmd = currentCmd.pop();
while (currentCmd.size() > 0) {
Command top = currentCmd.pop();
top.setArgument(new Argument(cmd));
cmd = top;
}
// If we have a command and a motion command argument, both could possibly have their own counts. We
// need to adjust the counts so the motion gets the product of both counts and the count associated with
// the command gets reset. Example 3c2w (change 2 words, three times) becomes c6w (change 6 words)
final Argument arg = cmd.getArgument();
if (arg != null && arg.getType() == Argument.Type.MOTION) {
final Command mot = arg.getMotion();
// If no count was entered for either command then nothing changes. If either had a count then
// the motion gets the product of both.
int cnt = cmd.getRawCount() == 0 && mot.getRawCount() == 0 ? 0 : cmd.getCount() * mot.getCount();
mot.setCount(cnt);
cmd.setCount(0);
}
// If we were in "operator pending" mode, reset back to normal mode.
if (editorState.getMappingMode() == MappingMode.OP_PENDING) {
editorState.popState();
}
// Save off the command we are about to execute
editorState.setCommand(cmd);
if (lastChar != 0 && !lastWasBS) {
lastWasBS = key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0));
}
else {
lastChar = 0;
}
Project project = editor.getProject();
final Command.Type type = cmd.getType();
if (type.isWrite() && !editor.getDocument().isWritable()) {
VimPlugin.indicateError();
reset(editor);
}
if (!cmd.getFlags().contains(CommandFlags.FLAG_TYPEAHEAD_SELF_MANAGE)) {
IdeEventQueue.getInstance().flushDelayedKeyEvents();
}
if (ApplicationManager.getApplication().isDispatchThread()) {
Runnable action = new ActionRunner(editor, context, cmd, key);
EditorActionHandlerBase cmdAction = cmd.getAction();
String name = cmdAction.getId();
if (type.isWrite()) {
RunnableHelper.runWriteCommand(project, action, name, action);
}
else if (type.isRead()) {
RunnableHelper.runReadCommand(project, action, name, action);
}
else {
CommandProcessor.getInstance().executeCommand(project, action, name, action);
}
}
}
private void handleCommandNode(Editor editor,
DataContext context,
KeyStroke key,
@NotNull CommandNode node,
CommandState editorState) {
// The user entered a valid command. Create the command and add it to the stack
final EditorActionHandlerBase myAction = node.getActionHolder().getAction();
Command cmd = new Command(count, myAction, myAction.getType(), myAction.getFlags(), keys);
currentCmd.push(cmd);
if (currentArg != null && !checkArgumentCompatibility(node)) return;
if (myAction.getArgumentType() == null || stopMacroRecord(node, editorState)) {
state = State.READY;
}
else {
currentArg = myAction.getArgumentType();
startWaitingForArgument(editor, context, key.getKeyChar(), currentArg, editorState, myAction);
partialReset(editor);
}
// TODO In the name of God, get rid of EX_STRING, FLAG_COMPLETE_EX and all the related staff
if (currentArg == Argument.Type.EX_STRING && myAction.getFlags().contains(CommandFlags.FLAG_COMPLETE_EX)) {
EditorActionHandlerBase action;
if (forwardSearch) {
action = new SearchEntryFwdAction();
}
else {
action = new SearchEntryRevAction();
}
String text = VimPlugin.getProcess().endSearchCommand(editor);
currentCmd.pop();
Argument arg = new Argument(text);
cmd = new Command(count, action, action.getType(), action.getFlags(), keys);
cmd.setArgument(arg);
currentCmd.push(cmd);
CommandState.getInstance(editor).popState();
}
}
private boolean stopMacroRecord(CommandNode node, @NotNull CommandState editorState) {
return editorState.isRecording() && node.getActionHolder().getAction() instanceof ToggleRecordingAction;
}
private void startWaitingForArgument(Editor editor,
DataContext context,
char key,
@NotNull Argument.Type argument,
CommandState editorState,
EditorActionHandlerBase action) {
switch (argument) {
case CHARACTER:
case DIGRAPH:
digraph = new DigraphSequence();
state = State.CHAR_OR_DIGRAPH;
break;
case MOTION:
if (CommandState.getInstance(editor).isDotRepeatInProgress() && VimRepeater.Extension.INSTANCE.getArgumentCaptured() != null) {
currentCmd.peek().setArgument(VimRepeater.Extension.INSTANCE.getArgumentCaptured());
state = State.READY;
}
editorState.pushState(editorState.getMode(), editorState.getSubMode(), MappingMode.OP_PENDING);
break;
case EX_STRING:
forwardSearch = !(action instanceof SearchEntryRevAction);
VimPlugin.getProcess().startSearchCommand(editor, context, count, key);
state = State.NEW_COMMAND;
editorState.pushState(CommandState.Mode.CMD_LINE, CommandState.SubMode.NONE, MappingMode.CMD_LINE);
currentCmd.pop();
}
}
private boolean checkArgumentCompatibility(@NotNull CommandNode node) {
if (currentArg == Argument.Type.MOTION &&
node.getActionHolder().getAction().getType() != Command.Type.MOTION) {
state = State.BAD_COMMAND;
return false;
}
return true;
}
/**
* Execute an action by name
*
* @param name The name of the action to execute
* @param context The context to run it in
*/
public static boolean executeAction(@NotNull String name, @NotNull DataContext context) {
ActionManager aMgr = ActionManager.getInstance();
AnAction action = aMgr.getAction(name);
return action != null && executeAction(action, context);
}
/**
* Partially resets the state of this handler. Resets the command count, clears the key list, resets the key tree
* node to the root for the current mode we are in.
*
* @param editor The editor to reset.
*/
public void partialReset(@Nullable Editor editor) {
count = 0;
keys = new ArrayList<>();
CommandState editorState = CommandState.getInstance(editor);
editorState.stopMappingTimer();
editorState.getMappingKeys().clear();
editorState.setCurrentNode(VimPlugin.getKey().getKeyRoot(editorState.getMappingMode()));
}
/**
* Resets the state of this handler. Does a partial reset then resets the mode, the command, and the argument
*
* @param editor The editor to reset.
*/
public void reset(@Nullable Editor editor) {
partialReset(editor);
state = State.NEW_COMMAND;
currentCmd.clear();
currentArg = null;
digraph = null;
}
/**
* Completely resets the state of this handler. Resets the command mode to normal, resets, and clears the selected
* register.
*
* @param editor The editor to reset.
*/
public void fullReset(@Nullable Editor editor) {
VimPlugin.clearError();
CommandState.getInstance(editor).reset();
reset(editor);
lastChar = 0;
lastWasBS = false;
VimPlugin.getRegister().resetRegister();
if (editor != null) {
VisualGroupKt.updateCaretState(editor);
editor.getSelectionModel().removeSelection();
}
}
// This method is copied from com.intellij.openapi.editor.actionSystem.EditorAction.getProjectAwareDataContext
@NotNull
private static DataContext getProjectAwareDataContext(@NotNull final Editor editor,
@NotNull final DataContext original) {
if (PROJECT.getData(original) == editor.getProject()) {
return new DialogAwareDataContext(original);
}
return dataId -> {
if (PROJECT.is(dataId)) {
final Project project = editor.getProject();
if (project != null) {
return project;
}
}
return original.getData(dataId);
};
}
// This class is copied from com.intellij.openapi.editor.actionSystem.DialogAwareDataContext.DialogAwareDataContext
private final static class DialogAwareDataContext implements DataContext {
private static final DataKey[] keys = {PROJECT, PROJECT_FILE_DIRECTORY, EDITOR, VIRTUAL_FILE, PSI_FILE};
private final Map<String, Object> values = new HashMap<>();
DialogAwareDataContext(DataContext context) {
for (DataKey key : keys) {
values.put(key.getName(), key.getData(context));
}
}
@Nullable
@Override
public Object getData(@NotNull @NonNls String dataId) {
if (values.containsKey(dataId)) {
return values.get(dataId);
}
final Editor editor = (Editor)values.get(EDITOR.getName());
if (editor != null) {
return DataManager.getInstance().getDataContext(editor.getContentComponent()).getData(dataId);
}
return null;
}
}
/**
* This was used as an experiment to execute actions as a runnable.
*/
static class ActionRunner implements Runnable {
@Contract(pure = true)
ActionRunner(Editor editor, DataContext context, Command cmd, KeyStroke key) {
this.editor = editor;
this.context = context;
this.cmd = cmd;
this.key = key;
}
@Override
public void run() {
CommandState editorState = CommandState.getInstance(editor);
boolean wasRecording = editorState.isRecording();
KeyHandler.getInstance().state = State.NEW_COMMAND;
executeVimAction(editor, cmd.getAction(), context);
if (editorState.getMode() == CommandState.Mode.INSERT || editorState.getMode() == CommandState.Mode.REPLACE) {
VimPlugin.getChange().processCommand(editor, cmd);
}
// Now that the command has been executed let's clean up a few things.
// By default the "empty" register is used by all commands so we want to reset whatever the last register
// selected by the user was to the empty register - unless we just executed the "select register" command.
if (cmd.getType() != Command.Type.SELECT_REGISTER) {
VimPlugin.getRegister().resetRegister();
}
// If, at this point, we are not in insert, replace, or visual modes, we need to restore the previous
// mode we were in. This handles commands in those modes that temporarily allow us to execute normal
// mode commands. An exception is if this command should leave us in the temporary mode such as
// "select register"
if (editorState.getSubMode() == CommandState.SubMode.SINGLE_COMMAND &&
(!cmd.getFlags().contains(CommandFlags.FLAG_EXPECT_MORE))) {
editorState.popState();
}
KeyHandler.getInstance().reset(editor);
if (wasRecording && editorState.isRecording()) {
VimPlugin.getRegister().recordKeyStroke(key);
}
}
private final Editor editor;
private final DataContext context;
private final Command cmd;
private final KeyStroke key;
}
private enum State {
/** Awaiting a new command */
NEW_COMMAND,
// TODO This should be probably processed in some better way
/** Awaiting for char or digraph input. In this mode mappings doesn't work (even for <C-K>) */
CHAR_OR_DIGRAPH,
READY,
BAD_COMMAND
}
private int count;
private List<KeyStroke> keys = new ArrayList<>();
private State state = State.NEW_COMMAND;
@NotNull private final Stack<Command> currentCmd = new Stack<>();
@Nullable private Argument.Type currentArg;
private TypedActionHandler origHandler;
@Nullable private DigraphSequence digraph = null;
private char lastChar;
private boolean lastWasBS;
private boolean forwardSearch = true;
private static KeyHandler instance;
}

View File

@@ -1,260 +0,0 @@
package com.maddyhome.idea.vim
import com.intellij.ide.BrowserUtil
import com.intellij.ide.DataManager
import com.intellij.ide.plugins.InstalledPluginsState
import com.intellij.ide.plugins.PluginManager
import com.intellij.ide.plugins.PluginManagerMain
import com.intellij.ide.plugins.RepositoryHelper
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.DefaultActionGroup
import com.intellij.openapi.application.ApplicationInfo
import com.intellij.openapi.options.ShowSettingsUtil
import com.intellij.openapi.progress.PerformInBackgroundOption
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.Task
import com.intellij.openapi.project.DumbAwareAction
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.Messages
import com.intellij.openapi.ui.popup.JBPopupFactory
import com.intellij.openapi.ui.popup.ListPopup
import com.intellij.openapi.updateSettings.impl.PluginDownloader
import com.intellij.openapi.updateSettings.impl.UpdateChecker
import com.intellij.openapi.updateSettings.impl.UpdateInstaller
import com.intellij.openapi.updateSettings.impl.UpdateSettings
import com.intellij.openapi.util.Ref
import com.intellij.openapi.wm.StatusBar
import com.intellij.openapi.wm.StatusBarWidget
import com.intellij.openapi.wm.StatusBarWidgetProvider
import com.intellij.ui.awt.RelativePoint
import com.intellij.util.Consumer
import com.intellij.util.text.VersionComparatorUtil
import com.maddyhome.idea.vim.group.NotificationService
import com.maddyhome.idea.vim.option.OptionsManager
import com.maddyhome.idea.vim.ui.VimEmulationConfigurable
import icons.VimIcons
import java.awt.Point
import java.awt.event.MouseEvent
import javax.swing.Icon
import javax.swing.SwingConstants
private class StatusBarIconProvider : StatusBarWidgetProvider {
override fun getWidget(project: Project): VimStatusBar? = if (OptionsManager.ideastatusbar.isSet) VimStatusBar else null
}
object VimStatusBar : StatusBarWidget, StatusBarWidget.IconPresentation {
private var statusBar: StatusBar? = null
override fun ID(): String = "IdeaVim-Icon"
override fun install(statusBar: StatusBar) {
this.statusBar = statusBar
}
override fun dispose() {}
override fun getTooltipText() = "IdeaVim"
override fun getIcon(): Icon = if (VimPlugin.isEnabled()) VimIcons.IDEAVIM else VimIcons.IDEAVIM_DISABLED
override fun getClickConsumer() = Consumer<MouseEvent> { event ->
val component = event.component
val popup = VimActionsPopup.getPopup(DataManager.getInstance().getDataContext(component))
val dimension = popup.content.preferredSize
val at = Point(0, -dimension.height)
popup.show(RelativePoint(component, at))
}
// TODO [VERSION UPDATE] After 193 use `getPresentation()`
@Suppress("DEPRECATION", "UnstableApiUsage")
override fun getPresentation(type: StatusBarWidget.PlatformType): StatusBarWidget.WidgetPresentation? = this
fun update() {
statusBar?.updateWidget(this.ID())
}
}
class VimActions : DumbAwareAction() {
companion object {
const val actionPlace = "VimActionsPopup"
}
override fun actionPerformed(e: AnActionEvent) {
val project = e.project ?: return
VimActionsPopup.getPopup(e.dataContext).showCenteredInCurrentWindow(project)
}
override fun update(e: AnActionEvent) {
val project = e.project
e.presentation.isEnabledAndVisible = project != null && !project.isDisposed
}
}
private object VimActionsPopup {
fun getPopup(dataContext: DataContext): ListPopup {
val actions = getActions()
val popup = JBPopupFactory.getInstance()
.createActionGroupPopup("IdeaVim", actions,
dataContext, JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, false,
VimActions.actionPlace)
popup.setAdText("Version ${VimPlugin.getVersion()}", SwingConstants.CENTER)
return popup
}
private fun getActions(): DefaultActionGroup {
val actionGroup = DefaultActionGroup()
actionGroup.isPopup = true
actionGroup.add(ActionManager.getInstance().getAction("VimPluginToggle"))
actionGroup.addSeparator()
actionGroup.add(NotificationService.OpenIdeaVimRcAction(null))
actionGroup.add(ShortcutConflictsSettings)
actionGroup.addSeparator()
val eapGroup = DefaultActionGroup("EAP" + if (JoinEap.eapActive()) " (Active)" else "", true)
eapGroup.add(JoinEap)
eapGroup.add(HelpLink("About EAP...", "https://github.com/JetBrains/ideavim#get-early-access", null))
actionGroup.add(eapGroup)
val helpGroup = DefaultActionGroup("Contacts && Help", true)
helpGroup.add(HelpLink("Contact on Twitter", "https://twitter.com/ideavim", VimIcons.TWITTER))
helpGroup.add(HelpLink("Create an Issue", "https://youtrack.jetbrains.com/issues/VIM", VimIcons.YOUTRACK))
helpGroup.add(HelpLink("Contribute on GitHub", "https://github.com/JetBrains/ideavim", VimIcons.GITHUB))
actionGroup.add(helpGroup)
return actionGroup
}
}
private class HelpLink(
name: String,
val link: String,
icon: Icon?
) : DumbAwareAction(name, null, icon) {
override fun actionPerformed(e: AnActionEvent) {
BrowserUtil.browse(link)
}
}
private object ShortcutConflictsSettings : DumbAwareAction("Settings...") {
override fun actionPerformed(e: AnActionEvent) {
ShowSettingsUtil.getInstance().editConfigurable(e.project, VimEmulationConfigurable())
}
}
private object JoinEap : DumbAwareAction() {
private const val EAP_LINK = "https://plugins.jetbrains.com/plugins/eap/ideavim"
fun eapActive() = EAP_LINK in UpdateSettings.getInstance().storedPluginHosts
override fun actionPerformed(e: AnActionEvent) {
if (eapActive()) {
UpdateSettings.getInstance().storedPluginHosts -= EAP_LINK
VimPlugin.getNotifications(e.project).notifyEapFinished()
} else {
UpdateSettings.getInstance().storedPluginHosts += EAP_LINK
checkForUpdates(e.project)
}
}
override fun update(e: AnActionEvent) {
if (eapActive()) {
e.presentation.text = "Finish EAP"
} else {
e.presentation.text = "Get Early Access..."
}
}
private fun checkForUpdates(project: Project?) {
val notificator = VimPlugin.getNotifications(project)
val pluginRef = Ref.create<PluginDownloader>()
// [VERSION UPDATE] 193+ remove suppressing
@Suppress("UnstableApiUsage")
object : Task.Backgroundable(null, "Checking for IdeaVim EAP version", true) {
override fun run(indicator: ProgressIndicator) {
val downloaders = mutableListOf<PluginDownloader>()
val build = ApplicationInfo.getInstance().build
for (host in RepositoryHelper.getPluginHosts()) {
val newPluginDescriptor = RepositoryHelper
.loadPlugins(host, null, indicator)
.filter { it.pluginId == VimPlugin.getPluginId() }
.maxWith(java.util.Comparator { o1, o2 -> VersionComparatorUtil.compare(o1.version, o2.version) })
?: continue
downloaders += PluginDownloader.createDownloader(newPluginDescriptor, host, build)
}
val plugin = downloaders.maxWith(java.util.Comparator { o1, o2 -> VersionComparatorUtil.compare(o1.pluginVersion, o2.pluginVersion) })
pluginRef.set(plugin)
}
// [VERSION UPDATE] 193+ remove suppressing
@Suppress("MissingRecentApi", "UnstableApiUsage")
override fun onSuccess() {
val downloader: PluginDownloader = pluginRef.get() ?: run {
notificator.notifySubscribedToEap()
return
}
val currentVersion = PluginManager.getPlugin(VimPlugin.getPluginId())?.version ?: ""
if (VersionComparatorUtil.compare(downloader.pluginVersion, currentVersion) <= 0) {
notificator.notifySubscribedToEap()
return
}
val version = downloader.pluginVersion
val message = "Do you want to install the EAP version of IdeaVim?"
@Suppress("MoveVariableDeclarationIntoWhen")
val res = Messages.showYesNoCancelDialog(project, message, "IdeaVim $version", null)
when (res) {
Messages.YES -> updatePlugin(project, downloader)
Messages.NO -> notificator.notifySubscribedToEap()
Messages.CANCEL -> if (eapActive()) UpdateSettings.getInstance().storedPluginHosts -= EAP_LINK
}
}
override fun onCancel() {
notificator.notifySubscribedToEap()
}
override fun onThrowable(error: Throwable) {
notificator.notifySubscribedToEap()
}
}.queue()
}
private fun updatePlugin(project: Project?, downloader: PluginDownloader) {
val notificator = VimPlugin.getNotifications(project)
return object : Task.Backgroundable(null, "Plugin Updates", true, PerformInBackgroundOption.DEAF) {
private var updated = false
override fun run(indicator: ProgressIndicator) {
val state = InstalledPluginsState.getInstance()
state.onDescriptorDownload(downloader.descriptor)
UpdateChecker.checkAndPrepareToInstall(downloader, state, mutableMapOf(VimPlugin.getPluginId() to downloader), mutableListOf(), indicator)
updated = UpdateInstaller.installPluginUpdates(listOf(downloader), indicator)
}
override fun onSuccess() {
if (updated) {
PluginManagerMain.notifyPluginsUpdated(null)
} else {
notificator.notifyFailedToDownloadEap()
}
}
override fun onCancel() {
notificator.notifyFailedToDownloadEap()
}
override fun onThrowable(error: Throwable) {
notificator.notifyFailedToDownloadEap()
}
}.queue()
}
}

View File

@@ -1,57 +0,0 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2019 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.maddyhome.idea.vim
import com.intellij.openapi.components.PersistentStateComponent
import com.intellij.openapi.components.RoamingType
import com.intellij.openapi.components.State
import com.intellij.openapi.components.Storage
import com.maddyhome.idea.vim.VimPlugin.STATE_VERSION
import org.jdom.Element
/**
* @author Alex Plate
*/
@State(name = "VimLocalSettings", storages = [
Storage("\$APP_CONFIG$$/vim_local_settings.xml", roamingType = RoamingType.DISABLED, deprecated = true),
Storage("\$APP_CONFIG$/vim_local_settings.xml", roamingType = RoamingType.DISABLED)
])
class VimLocalConfig : PersistentStateComponent<Element> {
override fun getState(): Element {
val element = Element("ideavim-local")
val state = Element("state")
state.setAttribute("version", STATE_VERSION.toString())
element.addContent(state)
VimPlugin.getMark().saveData(element)
VimPlugin.getRegister().saveData(element)
VimPlugin.getSearch().saveData(element)
VimPlugin.getHistory().saveData(element)
return element
}
override fun loadState(state: Element) {
VimPlugin.getMark().readData(state)
VimPlugin.getRegister().readData(state)
VimPlugin.getSearch().readData(state)
VimPlugin.getHistory().readData(state)
}
}

View File

@@ -1,498 +0,0 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2019 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.maddyhome.idea.vim;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationInfo;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.PermanentInstallationID;
import com.intellij.openapi.components.*;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.keymap.Keymap;
import com.intellij.openapi.keymap.ex.KeymapManagerEx;
import com.intellij.openapi.keymap.impl.DefaultKeymap;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.openapi.wm.StatusBar;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.util.io.HttpRequests;
import com.maddyhome.idea.vim.ex.CommandParser;
import com.maddyhome.idea.vim.ex.vimscript.VimScriptParser;
import com.maddyhome.idea.vim.extension.VimExtensionRegistrar;
import com.maddyhome.idea.vim.group.*;
import com.maddyhome.idea.vim.group.copy.PutGroup;
import com.maddyhome.idea.vim.group.copy.YankGroup;
import com.maddyhome.idea.vim.group.visual.VisualMotionGroup;
import com.maddyhome.idea.vim.helper.MacKeyRepeat;
import com.maddyhome.idea.vim.listener.VimListenerManager;
import com.maddyhome.idea.vim.option.OptionsManager;
import com.maddyhome.idea.vim.ui.ExEntryPanel;
import com.maddyhome.idea.vim.ui.VimEmulationConfigurable;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.event.HyperlinkEvent;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.concurrent.TimeUnit;
/**
* This plugin attempts to emulate the key binding and general functionality of Vim and gVim. See the supplied
* documentation for a complete list of supported and unsupported Vim emulation. The code base contains some debugging
* output that can be enabled in necessary.
* <p/>
* This is an application level plugin meaning that all open projects will share a common instance of the plugin.
* Registers and marks are shared across open projects so you can copy and paste between files of different projects.
*/
@State(name = "VimSettings", storages = {@Storage("$APP_CONFIG$/vim_settings.xml")})
public class VimPlugin implements BaseComponent, PersistentStateComponent<Element>, Disposable {
private static final String IDEAVIM_COMPONENT_NAME = "VimPlugin";
private static final String IDEAVIM_PLUGIN_ID = "IdeaVIM";
private static final String IDEAVIM_STATISTICS_TIMESTAMP_KEY = "ideavim.statistics.timestamp";
public static final int STATE_VERSION = 5;
private static long lastBeepTimeMillis;
private boolean error = false;
private int previousStateVersion = 0;
private String previousKeyMap = "";
// It is enabled by default to avoid any special configuration after plugin installation
private boolean enabled = true;
private static final Logger LOG = Logger.getInstance(VimPlugin.class);
@NotNull
@Override
public String getComponentName() {
return IDEAVIM_COMPONENT_NAME;
}
@NotNull private final VimState state = new VimState();
// [VERSION UPDATE] 193+ replace with com.intellij.openapi.components.PersistentStateComponent.initializeComponent
@Override
public void initComponent() {
LOG.debug("initComponent");
if (enabled) turnOnPlugin();
LOG.debug("done");
}
@Override
public void dispose() {
LOG.debug("disposeComponent");
turnOffPlugin();
LOG.debug("done");
}
/**
* @return NotificationService as applicationService if project is null and projectService otherwise
*/
@NotNull
public static NotificationService getNotifications(@Nullable Project project) {
if (project == null) {
return ServiceManager.getService(NotificationService.class);
} else {
return ServiceManager.getService(project, NotificationService.class);
}
}
@NotNull
public static VimState getVimState() {
return getInstance().state;
}
@NotNull
public static MotionGroup getMotion() {
return ServiceManager.getService(MotionGroup.class);
}
/**
* Reports statistics about installed IdeaVim and enabled Vim emulation.
* <p>
* See https://github.com/go-lang-plugin-org/go-lang-idea-plugin/commit/5182ab4a1d01ad37f6786268a2fe5e908575a217
*/
public static void statisticReport() {
final PropertiesComponent propertiesComponent = PropertiesComponent.getInstance();
final long lastUpdate = propertiesComponent.getOrInitLong(IDEAVIM_STATISTICS_TIMESTAMP_KEY, 0);
final boolean outOfDate =
lastUpdate == 0 || System.currentTimeMillis() - lastUpdate > TimeUnit.DAYS.toMillis(1);
if (outOfDate && isEnabled()) {
ApplicationManager.getApplication().executeOnPooledThread(() -> {
try {
final String buildNumber = ApplicationInfo.getInstance().getBuild().asString();
final String version = URLEncoder.encode(getVersion(), CharsetToolkit.UTF8);
final String os =
URLEncoder.encode(SystemInfo.OS_NAME + " " + SystemInfo.OS_VERSION, CharsetToolkit.UTF8);
final String uid = PermanentInstallationID.get();
final String url = "https://plugins.jetbrains.com/plugins/list" +
"?pluginId=" + IDEAVIM_PLUGIN_ID +
"&build=" +
buildNumber +
"&pluginVersion=" +
version +
"&os=" +
os +
"&uuid=" +
uid;
PropertiesComponent.getInstance()
.setValue(IDEAVIM_STATISTICS_TIMESTAMP_KEY, String.valueOf(System.currentTimeMillis()));
HttpRequests.request(url).connect(request -> {
LOG.info("Sending statistics: " + url);
try {
JDOMUtil.load(request.getInputStream());
}
catch (JDOMException e) {
LOG.warn(e);
}
return null;
});
}
catch (IOException e) {
LOG.warn(e);
}
});
}
}
@NotNull
public static ChangeGroup getChange() {
return ServiceManager.getService(ChangeGroup.class);
}
@NotNull
public static CommandGroup getCommand() {
return ServiceManager.getService(CommandGroup.class);
}
@NotNull
public static MarkGroup getMark() {
return ServiceManager.getService(MarkGroup.class);
}
@NotNull
public static RegisterGroup getRegister() {
return ServiceManager.getService(RegisterGroup.class);
}
@NotNull
public static FileGroup getFile() {
return ServiceManager.getService(FileGroup.class);
}
@NotNull
public static SearchGroup getSearch() {
return ServiceManager.getService(SearchGroup.class);
}
@NotNull
public static ProcessGroup getProcess() {
return ServiceManager.getService(ProcessGroup.class);
}
@NotNull
public static MacroGroup getMacro() {
return ServiceManager.getService(MacroGroup.class);
}
@NotNull
public static DigraphGroup getDigraph() {
return ServiceManager.getService(DigraphGroup.class);
}
@NotNull
public static HistoryGroup getHistory() {
return ServiceManager.getService(HistoryGroup.class);
}
@NotNull
public static KeyGroup getKey() {
return ServiceManager.getService(KeyGroup.class);
}
@NotNull
public static WindowGroup getWindow() {
return ServiceManager.getService(WindowGroup.class);
}
@NotNull
public static EditorGroup getEditor() {
return ServiceManager.getService(EditorGroup.class);
}
@NotNull
public static VisualMotionGroup getVisualMotion() {
return ServiceManager.getService(VisualMotionGroup.class);
}
@NotNull
public static YankGroup getYank() {
return ServiceManager.getService(YankGroup.class);
}
@NotNull
public static PutGroup getPut() {
return ServiceManager.getService(PutGroup.class);
}
@Override
public Element getState() {
LOG.debug("Saving state");
final Element element = new Element("ideavim");
// Save whether the plugin is enabled or not
final Element state = new Element("state");
state.setAttribute("version", Integer.toString(STATE_VERSION));
state.setAttribute("enabled", Boolean.toString(enabled));
element.addContent(state);
getKey().saveData(element);
getEditor().saveData(element);
this.state.saveData(element);
return element;
}
@NotNull
private static NotificationService getNotifications() {
return getNotifications(null);
}
private boolean ideavimrcRegistered = false;
private void registerIdeavimrc() {
if (ideavimrcRegistered) return;
ideavimrcRegistered = true;
if (!ApplicationManager.getApplication().isUnitTestMode()) {
final File ideaVimRc = VimScriptParser.findIdeaVimRc();
if (ideaVimRc != null) {
VimScriptParser.executeFile(ideaVimRc);
}
}
}
@NotNull
public static PluginId getPluginId() {
return PluginId.getId(IDEAVIM_PLUGIN_ID);
}
// [VERSION UPDATE] 193+ remove suppress
@SuppressWarnings({"MissingRecentApi", "UnstableApiUsage"})
@NotNull
public static String getVersion() {
final IdeaPluginDescriptor plugin = PluginManager.getPlugin(getPluginId());
if (!ApplicationManager.getApplication().isInternal()) {
return plugin != null ? plugin.getVersion() : "SNAPSHOT";
}
else {
return "INTERNAL" + (plugin != null ? " - " + plugin.getVersion() : "");
}
}
public static boolean isEnabled() {
return getInstance().enabled;
}
public static void setEnabled(final boolean enabled) {
if (!enabled) {
getInstance().turnOffPlugin();
}
getInstance().enabled = enabled;
if (enabled) {
getInstance().turnOnPlugin();
}
VimStatusBar.INSTANCE.update();
}
public static boolean isError() {
return getInstance().error;
}
/**
* Indicate to the user that an error has occurred. Just beep.
*/
public static void indicateError() {
if (ApplicationManager.getApplication().isUnitTestMode()) {
getInstance().error = true;
}
else if (!OptionsManager.INSTANCE.getVisualbell().isSet()) {
// Vim only allows a beep once every half second - :help 'visualbell'
final long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis - lastBeepTimeMillis > 500) {
Toolkit.getDefaultToolkit().beep();
lastBeepTimeMillis = currentTimeMillis;
}
}
}
public static void clearError() {
if (ApplicationManager.getApplication().isUnitTestMode()) {
getInstance().error = false;
}
}
public static void showMode(String msg) {
showMessage(msg);
}
public static void showMessage(@Nullable String msg) {
ProjectManager pm = ProjectManager.getInstance();
Project[] projects = pm.getOpenProjects();
for (Project project : projects) {
StatusBar bar = WindowManager.getInstance().getStatusBar(project);
if (bar != null) {
if (msg == null || msg.length() == 0) {
bar.setInfo("");
}
else {
bar.setInfo("VIM - " + msg);
}
}
}
}
@NotNull
private static VimPlugin getInstance() {
return ApplicationManager.getApplication().getComponent(VimPlugin.class);
}
private void turnOnPlugin() {
ApplicationManager.getApplication().invokeLater(this::updateState);
getEditor().turnOn();
getSearch().turnOn();
VimListenerManager.INSTANCE.turnOn();
// Register vim actions in command mode
RegisterActions.registerActions();
// Register ex handlers
CommandParser.getInstance().registerHandlers();
// Register extensions
VimExtensionRegistrar.registerExtensions();
// Execute ~/.ideavimrc
registerIdeavimrc();
}
private void turnOffPlugin() {
KeyHandler.getInstance().fullReset(null);
getEditor().turnOff();
getSearch().turnOff();
VimListenerManager.INSTANCE.turnOff();
ExEntryPanel.fullReset();
}
private boolean stateUpdated = false;
private void updateState() {
if (stateUpdated) return;
if (isEnabled() && !ApplicationManager.getApplication().isUnitTestMode()) {
stateUpdated = true;
if (SystemInfo.isMac) {
final MacKeyRepeat keyRepeat = MacKeyRepeat.getInstance();
final Boolean enabled = keyRepeat.isEnabled();
final Boolean isKeyRepeat = getEditor().isKeyRepeat();
if ((enabled == null || !enabled) && (isKeyRepeat == null || isKeyRepeat)) {
if (VimPlugin.getNotifications().enableRepeatingMode() == Messages.YES) {
getEditor().setKeyRepeat(true);
keyRepeat.setEnabled(true);
}
else {
getEditor().setKeyRepeat(false);
}
}
}
if (previousStateVersion > 0 && previousStateVersion < 3) {
final KeymapManagerEx manager = KeymapManagerEx.getInstanceEx();
Keymap keymap = null;
if (previousKeyMap != null) {
keymap = manager.getKeymap(previousKeyMap);
}
if (keymap == null) {
keymap = manager.getKeymap(DefaultKeymap.getInstance().getDefaultKeymapName());
}
assert keymap != null : "Default keymap not found";
VimPlugin.getNotifications().specialKeymap(keymap, new NotificationListener.Adapter() {
@Override
protected void hyperlinkActivated(@NotNull Notification notification, @NotNull HyperlinkEvent e) {
ShowSettingsUtil.getInstance().editConfigurable((Project)null, new VimEmulationConfigurable());
}
});
manager.setActiveKeymap(keymap);
}
if (previousStateVersion > 0 && previousStateVersion < 4) {
VimPlugin.getNotifications().noVimrcAsDefault();
}
}
}
@Override
public void loadState(@NotNull final Element element) {
LOG.debug("Loading state");
// Restore whether the plugin is enabled or not
Element state = element.getChild("state");
if (state != null) {
try {
previousStateVersion = Integer.parseInt(state.getAttributeValue("version"));
}
catch (NumberFormatException ignored) {
}
enabled = Boolean.parseBoolean(state.getAttributeValue("enabled"));
previousKeyMap = state.getAttributeValue("keymap");
}
if (previousStateVersion > 0 && previousStateVersion < 5) {
// Migrate settings from 4 to 5 version
getMark().readData(element);
getRegister().readData(element);
getSearch().readData(element);
getHistory().readData(element);
}
getKey().readData(element);
getEditor().readData(element);
this.state.readData(element);
}
}

View File

@@ -1,61 +0,0 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2019 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.maddyhome.idea.vim;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.actionSystem.ActionPlan;
import com.intellij.openapi.editor.actionSystem.TypedActionHandler;
import com.intellij.openapi.editor.actionSystem.TypedActionHandlerEx;
import com.maddyhome.idea.vim.helper.EditorDataContext;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
/**
* Accepts all regular keystrokes and passes them on to the Vim key handler.
*
* IDE shortcut keys used by Vim commands are handled by {@link com.maddyhome.idea.vim.action.VimShortcutKeyAction}.
*/
public class VimTypedActionHandler implements TypedActionHandlerEx {
private static final Logger logger = Logger.getInstance(VimTypedActionHandler.class.getName());
@NotNull private final KeyHandler handler;
public VimTypedActionHandler(TypedActionHandler origHandler) {
handler = KeyHandler.getInstance();
handler.setOriginalHandler(origHandler);
}
@Override
public void beforeExecute(@NotNull Editor editor, char charTyped, @NotNull DataContext context, @NotNull ActionPlan plan) {
handler.beforeHandleKey(editor, KeyStroke.getKeyStroke(charTyped), context, plan);
}
@Override
public void execute(@NotNull final Editor editor, final char charTyped, @NotNull final DataContext context) {
try {
handler.handleKey(editor, KeyStroke.getKeyStroke(charTyped), new EditorDataContext(editor));
}
catch (Throwable e) {
logger.error(e);
}
}
}

View File

@@ -1,7 +0,0 @@
package com.maddyhome.idea.vim.action
import javax.swing.KeyStroke
interface ComplicatedKeysAction {
val keyStrokesSet: Set<List<KeyStroke>>
}

View File

@@ -1,16 +0,0 @@
package com.maddyhome.idea.vim.action
/**
* There are some double-character commands like `cc`, `dd`, `yy`.
* During the execution these commands are replaced with `c_`, `d_`, `y_`, etc.
*
* This is not any kind of workaround, this is exactly how the original vim works.
* The `dd` command (and others) should not be processed as a monolith command, or it will lead to problems
* like this: https://youtrack.jetbrains.com/issue/VIM-1189
*
* If some command implements this interface, and the user enters motion operator that is the same as the command itself, the
* motion operator will be replaced with `_`.
*/
interface DuplicableOperatorAction {
val duplicateWith: Char
}

View File

@@ -1,222 +0,0 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2019 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.maddyhome.idea.vim.action
import com.google.common.collect.ImmutableSet
import com.intellij.codeInsight.lookup.LookupManager
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.EmptyAction
import com.intellij.openapi.actionSystem.PlatformDataKeys
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.ex.util.EditorUtil
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.util.Key
import com.intellij.ui.KeyStrokeAdapter
import com.maddyhome.idea.vim.KeyHandler
import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.handler.EditorActionHandlerBase.Companion.parseKeysSet
import com.maddyhome.idea.vim.helper.EditorDataContext
import com.maddyhome.idea.vim.helper.EditorHelper
import com.maddyhome.idea.vim.helper.StringHelper
import com.maddyhome.idea.vim.helper.inInsertMode
import com.maddyhome.idea.vim.helper.inNormalMode
import com.maddyhome.idea.vim.key.ShortcutOwner
import com.maddyhome.idea.vim.listener.IdeaSpecifics.aceJumpActive
import com.maddyhome.idea.vim.option.OptionsManager.lookupKeys
import java.awt.event.InputEvent
import java.awt.event.KeyEvent
import javax.swing.KeyStroke
/**
* Handles Vim keys that are treated as action shortcuts by the IDE.
*
*
* These keys are not passed to [com.maddyhome.idea.vim.VimTypedActionHandler] and should be handled by actions.
*/
class VimShortcutKeyAction : AnAction(), DumbAware {
override fun actionPerformed(e: AnActionEvent) {
val editor = getEditor(e)
val keyStroke = getKeyStroke(e)
if (editor != null && keyStroke != null) {
val owner = VimPlugin.getKey().savedShortcutConflicts[keyStroke]
if (owner == ShortcutOwner.UNDEFINED) {
VimPlugin.getNotifications(editor.project).notifyAboutShortcutConflict(keyStroke)
}
// Should we use HelperKt.getTopLevelEditor(editor) here, as we did in former EditorKeyHandler?
try {
KeyHandler.getInstance().handleKey(editor, keyStroke, EditorDataContext(editor))
} catch (ignored: ProcessCanceledException) {
// Control-flow exceptions (like ProcessCanceledException) should never be logged
// See {@link com.intellij.openapi.diagnostic.Logger.checkException}
} catch (throwable: Throwable) {
ourLogger.error(throwable)
}
}
}
override fun update(e: AnActionEvent) {
e.presentation.isEnabled = isEnabled(e)
}
private fun isEnabled(e: AnActionEvent): Boolean {
if (!VimPlugin.isEnabled()) return false
val editor = getEditor(e)
val keyStroke = getKeyStroke(e)
if (editor != null && keyStroke != null) {
// Workaround for smart step into
@Suppress("DEPRECATION")
val SMART_STEP_INPLACE_DATA = Key.findKeyByName("SMART_STEP_INPLACE_DATA")
if (SMART_STEP_INPLACE_DATA != null && editor.getUserData(SMART_STEP_INPLACE_DATA) != null) return false
if (aceJumpActive()) return false
val keyCode = keyStroke.keyCode
if (LookupManager.getActiveLookup(editor) != null) {
return isEnabledForLookup(keyStroke)
}
if (keyCode == KeyEvent.VK_ESCAPE) {
return isEnabledForEscape(editor)
}
if (editor.inInsertMode) { // XXX: <Tab> won't be recorded in macros
if (keyCode == KeyEvent.VK_TAB) {
VimPlugin.getChange().tabAction = true
return false
}
// Debug watch, Python console, etc.
if (NON_FILE_EDITOR_KEYS.contains(keyStroke) && !EditorHelper.isFileEditor(editor)) {
return false
}
}
if (VIM_ONLY_EDITOR_KEYS.contains(keyStroke)) {
return true
}
val savedShortcutConflicts = VimPlugin.getKey().savedShortcutConflicts
return when (savedShortcutConflicts[keyStroke]) {
ShortcutOwner.VIM -> true
ShortcutOwner.IDE -> !isShortcutConflict(keyStroke)
else -> {
if (isShortcutConflict(keyStroke)) {
savedShortcutConflicts[keyStroke] = ShortcutOwner.UNDEFINED
}
true
}
}
}
return false
}
private fun isEnabledForEscape(editor: Editor): Boolean {
return isPrimaryEditor(editor) || EditorHelper.isFileEditor(editor) && !editor.inNormalMode
}
/**
* Checks if the editor is a primary editor in the main editing area.
*/
private fun isPrimaryEditor(editor: Editor): Boolean {
val project = editor.project ?: return false
val fileEditorManager = FileEditorManagerEx.getInstanceEx(project) ?: return false
return fileEditorManager.allEditors.any { fileEditor -> editor == EditorUtil.getEditorEx(fileEditor) }
}
private fun isEnabledForLookup(keyStroke: KeyStroke): Boolean {
val notAllowedKeys = parseKeysSet(
"<Tab>", "<Down>", "<Up>", "<Enter>", "<Left>", "<Right>"
)
for (keys in notAllowedKeys) {
if (keyStroke == keys[0]) {
return false
}
}
// We allow users to set custom keys that will work with lookup in case devs forgot something
val popupActions = lookupKeys
val values = popupActions.values()
for (value in values) {
val keys = StringHelper.parseKeys(value)
if (keys.size >= 1 && keyStroke == keys[0]) {
return false
}
}
return true
}
private fun isShortcutConflict(keyStroke: KeyStroke): Boolean {
return VimPlugin.getKey().getKeymapConflicts(keyStroke).isNotEmpty()
}
/**
* getDefaultKeyStroke is needed for NEO layout keyboard VIM-987
* but we should cache the value because on the second call (isEnabled -> actionPerformed)
* the event is already consumed
*/
private var keyStrokeCache: Pair<KeyEvent?, KeyStroke?> = null to null
private fun getKeyStroke(e: AnActionEvent): KeyStroke? {
val inputEvent = e.inputEvent
if (inputEvent is KeyEvent) {
val defaultKeyStroke = KeyStrokeAdapter.getDefaultKeyStroke(inputEvent)
val strokeCache = keyStrokeCache
if (defaultKeyStroke != null) {
keyStrokeCache = inputEvent to defaultKeyStroke
return defaultKeyStroke
} else if (strokeCache.first === inputEvent) {
keyStrokeCache = null to null
return strokeCache.second
}
return KeyStroke.getKeyStrokeForEvent(inputEvent)
}
return null
}
private fun getEditor(e: AnActionEvent): Editor? = e.getData(PlatformDataKeys.EDITOR)
companion object {
@JvmField
val VIM_ONLY_EDITOR_KEYS: Set<KeyStroke> = ImmutableSet.builder<KeyStroke>().addAll(getKeyStrokes(KeyEvent.VK_ENTER, 0)).addAll(getKeyStrokes(KeyEvent.VK_ESCAPE, 0))
.addAll(getKeyStrokes(KeyEvent.VK_TAB, 0)).addAll(getKeyStrokes(KeyEvent.VK_BACK_SPACE, 0, InputEvent.CTRL_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_INSERT, 0)).addAll(getKeyStrokes(KeyEvent.VK_DELETE, 0, InputEvent.CTRL_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_UP, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK)).addAll(getKeyStrokes(KeyEvent.VK_DOWN, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_LEFT, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_RIGHT, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_HOME, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_END, 0, InputEvent.CTRL_MASK, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_PAGE_UP, 0, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK))
.addAll(getKeyStrokes(KeyEvent.VK_PAGE_DOWN, 0, InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK or InputEvent.SHIFT_MASK)).build()
private const val ACTION_ID = "VimShortcutKeyAction"
private val NON_FILE_EDITOR_KEYS: Set<KeyStroke> = ImmutableSet.builder<KeyStroke>()
.addAll(getKeyStrokes(KeyEvent.VK_ENTER, 0))
.addAll(getKeyStrokes(KeyEvent.VK_ESCAPE, 0))
.addAll(getKeyStrokes(KeyEvent.VK_TAB, 0))
.addAll(getKeyStrokes(KeyEvent.VK_UP, 0))
.addAll(getKeyStrokes(KeyEvent.VK_DOWN, 0))
.build()
private val ourLogger = Logger.getInstance(VimShortcutKeyAction::class.java.name)
@JvmStatic
val instance: AnAction by lazy {
EmptyAction.wrap(ActionManager.getInstance().getAction(ACTION_ID))
}
private fun getKeyStrokes(keyCode: Int, vararg modifiers: Int) = modifiers.map { KeyStroke.getKeyStroke(keyCode, it) }
}
}

Some files were not shown because too many files have changed in this diff Show More