mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-08-19 04:24:56 +02:00
Compare commits
15 Commits
0.53.2-EAP
...
0.54
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a4be636f9d | ||
![]() |
a2bae6795f | ||
![]() |
8e12c9bef0 | ||
![]() |
88926c3eef | ||
![]() |
8dd774446b | ||
![]() |
46cf112378 | ||
![]() |
5d2520d057 | ||
![]() |
a6ea89162a | ||
![]() |
1039cf661d | ||
![]() |
eaf9f0bbfa | ||
![]() |
9e036176ef | ||
![]() |
31e1edcc72 | ||
![]() |
7d9d8d4a02 | ||
![]() |
71cb43e751 | ||
![]() |
f27e00500e |
35
CHANGES.md
35
CHANGES.md
@@ -8,21 +8,27 @@ 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! Add this URL to "Settings | Plugins |
|
receive EAP builds as updates! Use the `Join EAP` option in the status bar or
|
||||||
Browse Repositories | Manage Repositories":
|
add this URL to "Settings | Plugins | Manage Plugin Repositories":
|
||||||
[https://plugins.jetbrains.com/plugins/eap/ideavim](https://plugins.jetbrains.com/plugins/eap/ideavim)
|
`https://plugins.jetbrains.com/plugins/eap/ideavim`
|
||||||
|
|
||||||
It is important to distinguish EAP from traditional pre-release software.
|
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
|
0.54, 2019-11-20
|
||||||
--------------
|
--------------
|
||||||
_Available since 0.53.1 EAP:_
|
|
||||||
|
|
||||||
**Features:**
|
**Features:**
|
||||||
|
* 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))
|
||||||
* [VIM-1720](https://youtrack.jetbrains.com/issue/VIM-1720) Add `:delmarks` command
|
* 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))
|
||||||
|
|
||||||
|
**Changes:**
|
||||||
|
* Remove the default IdeaVim toggle shortcut (<kbd>CTRL</kbd><kbd>ALT</kbd><kbd>V</kbd>)
|
||||||
|
* Rename `refactoring` value of `selectmode` option to `ideaselection`
|
||||||
|
* 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
|
||||||
@@ -40,19 +46,9 @@ _Available since 0.53.1 EAP:_
|
|||||||
* [VIM-1772](https://youtrack.jetbrains.com/issue/VIM-1772) Fix yanking with `:y` command
|
* [VIM-1772](https://youtrack.jetbrains.com/issue/VIM-1772) Fix yanking with `:y` command
|
||||||
* [VIM-1685](https://youtrack.jetbrains.com/issue/VIM-1685) Fix `ESC` for insert mode
|
* [VIM-1685](https://youtrack.jetbrains.com/issue/VIM-1685) Fix `ESC` for insert mode
|
||||||
* [VIM-1752](https://youtrack.jetbrains.com/issue/VIM-1752) Fix `ESC` for insert mode
|
* [VIM-1752](https://youtrack.jetbrains.com/issue/VIM-1752) Fix `ESC` for insert mode
|
||||||
|
* [VIM-1189](https://youtrack.jetbrains.com/issue/VIM-1189)
|
||||||
_Available since 0.53.2 EAP:_
|
[VIM-927](https://youtrack.jetbrains.com/issue/VIM-927)
|
||||||
|
Fix mappings to black hole register
|
||||||
**Features:**
|
|
||||||
* Add IdeaVim icon to the status bar ([VIM-943](https://youtrack.jetbrains.com/issue/VIM-943))
|
|
||||||
* EasyMotion plugin emulation ([VIM-820](https://youtrack.jetbrains.com/issue/VIM-820))
|
|
||||||
|
|
||||||
**Changes:**
|
|
||||||
* Remove the default IdeaVim toggle shortcut (<kbd>CTRL</kbd><kbd>ALT</kbd><kbd>V</kbd>)
|
|
||||||
* Rename `refactoring` value of `selectmode` option to `ideaselection`
|
|
||||||
* Remove `template` value of `selectmode` option and replace it with `idearefactormode` option.
|
|
||||||
|
|
||||||
**Fixes:**
|
|
||||||
* [VIM-1804](https://youtrack.jetbrains.com/issue/VIM-1804) Exit insert move after toggling IdeaVim
|
* [VIM-1804](https://youtrack.jetbrains.com/issue/VIM-1804) Exit insert move after toggling IdeaVim
|
||||||
* [VIM-1749](https://youtrack.jetbrains.com/issue/VIM-1749) Tag surround is finished on `>`
|
* [VIM-1749](https://youtrack.jetbrains.com/issue/VIM-1749) Tag surround is finished on `>`
|
||||||
* [VIM-1801](https://youtrack.jetbrains.com/issue/VIM-1801) Fix j/k motions with inline hints
|
* [VIM-1801](https://youtrack.jetbrains.com/issue/VIM-1801) Fix j/k motions with inline hints
|
||||||
@@ -60,6 +56,7 @@ _Available since 0.53.2 EAP:_
|
|||||||
* [VIM-1819](https://youtrack.jetbrains.com/issue/VIM-1819) Fix execution of some rider actions
|
* [VIM-1819](https://youtrack.jetbrains.com/issue/VIM-1819) Fix execution of some rider actions
|
||||||
* [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
|
||||||
|
23
README.md
23
README.md
@@ -49,6 +49,10 @@ 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` | `Join EAP`
|
||||||
|
|
||||||
|
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`
|
||||||
@@ -128,24 +132,32 @@ Emulated Vim Plugins
|
|||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
IdeaVim extensions emulate some plugins of the original Vim. In order to use
|
IdeaVim extensions emulate some plugins of the original Vim. In order to use
|
||||||
IdeaVim extensions, you have to enable them via this command in your ~/.ideavimrc:
|
IdeaVim extensions, you have to enable them via this command in your `~/.ideavimrc`:
|
||||||
|
|
||||||
set <extension-name>
|
set <extension-name>
|
||||||
|
|
||||||
Available extensions:
|
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.
|
||||||
|
* `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
|
* surround
|
||||||
* `set surround`
|
* Setup: `set surround`
|
||||||
* Emulates [vim-surround](https://github.com/tpope/vim-surround)
|
* Emulates [vim-surround](https://github.com/tpope/vim-surround)
|
||||||
* Commands: `ys`, `cs`, `ds`, `S`
|
* Commands: `ys`, `cs`, `ds`, `S`
|
||||||
|
|
||||||
* multiple-cursors
|
* multiple-cursors
|
||||||
* `set multiple-cursors`
|
* Setup: `set multiple-cursors`
|
||||||
* Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)
|
* Emulates [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors)
|
||||||
* Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>`
|
* Commands: `<A-n>`, `<A-x>`, `<A-p>`, `g<A-n>`
|
||||||
|
|
||||||
* commentary
|
* commentary
|
||||||
* `set commentary`
|
* Setup: `set commentary`
|
||||||
* Emulates [commentary.vim](https://github.com/tpope/vim-commentary)
|
* Emulates [commentary.vim](https://github.com/tpope/vim-commentary)
|
||||||
* Commands: `gcc`, `gc + motion`, `v_gc`
|
* Commands: `gcc`, `gc + motion`, `v_gc`
|
||||||
|
|
||||||
@@ -201,4 +213,5 @@ for a list of authors and contributors.
|
|||||||
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.
|
||||||
|
@@ -19,7 +19,7 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
|
|||||||
If true, creation of global mark will trigger creation of IDE's bookmark
|
If true, creation of global mark will trigger creation of IDE's bookmark
|
||||||
and vice versa.
|
and vice versa.
|
||||||
|
|
||||||
`idearefactormode` `idearefactormode` String(default "select") - IdeaVim ONLY [To Be Released]
|
`idearefactormode` `idearefactormode` String(default "select") - IdeaVim ONLY
|
||||||
|
|
||||||
Define the mode that would be enabled during
|
Define the mode that would be enabled during
|
||||||
the refactoring (renaming, live template, introduce variable, etc)
|
the refactoring (renaming, live template, introduce variable, etc)
|
||||||
@@ -80,10 +80,10 @@ The following `:set` commands can appear in `~/.ideavimrc` or be set manually in
|
|||||||
mouse when using the mouse
|
mouse when using the mouse
|
||||||
key when using shifted special[1] keys
|
key when using shifted special[1] keys
|
||||||
cmd when using "v", "V", or <C-V>
|
cmd when using "v", "V", or <C-V>
|
||||||
ideaselection when IDE sets a selection - IdeaVim ONLY [To Be Released]
|
ideaselection when IDE sets a selection - IdeaVim ONLY
|
||||||
(examples: extend selection, wrap with while, etc.)
|
(examples: extend selection, wrap with while, etc.)
|
||||||
|
|
||||||
Deprecated values: [To Be Released]
|
Deprecated values:
|
||||||
template ~~please use `idearefactormode` option~~
|
template ~~please use `idearefactormode` option~~
|
||||||
when starting a template - IdeaVim ONLY
|
when starting a template - IdeaVim ONLY
|
||||||
refactoring ~~please use ideaselection~~
|
refactoring ~~please use ideaselection~~
|
||||||
|
@@ -3,9 +3,9 @@
|
|||||||
<id>IdeaVIM</id>
|
<id>IdeaVIM</id>
|
||||||
<change-notes><![CDATA[
|
<change-notes><![CDATA[
|
||||||
<ul>
|
<ul>
|
||||||
<li>EasyMotion plugin emulation</li>
|
<li>EasyMotion plugin emulation (<a href="https://github.com/JetBrains/ideavim#emulated-vim-plugins">link</a>)</li>
|
||||||
<li>Support surrounding with a function name</li>
|
<li>Support surrounding with a function name</li>
|
||||||
<li>Add IdeaVim logo to status bar</li>
|
<li>Add IdeaVim logo to the status bar</li>
|
||||||
<li>Various bug fixes</li>
|
<li>Various bug fixes</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>See also the complete <a href="https://github.com/JetBrains/ideavim/blob/master/CHANGES.md">changelog</a>.</p>
|
<p>See also the complete <a href="https://github.com/JetBrains/ideavim/blob/master/CHANGES.md">changelog</a>.</p>
|
||||||
|
@@ -421,9 +421,12 @@ public class KeyHandler {
|
|||||||
commandState.popState();
|
commandState.popState();
|
||||||
}
|
}
|
||||||
else if (startOffset != null && startOffset != caret.getOffset()) {
|
else if (startOffset != null && startOffset != caret.getOffset()) {
|
||||||
|
// Command line motions are always characterwise exclusive
|
||||||
int endOffset = caret.getOffset();
|
int endOffset = caret.getOffset();
|
||||||
if (startOffset < endOffset) {
|
if (startOffset < endOffset) {
|
||||||
endOffset -= 1;
|
endOffset -= 1;
|
||||||
|
} else {
|
||||||
|
startOffset -= 1;
|
||||||
}
|
}
|
||||||
final VimSelection vimSelection = VimSelection.Companion
|
final VimSelection vimSelection = VimSelection.Companion
|
||||||
.create(startOffset, endOffset, SelectionType.CHARACTER_WISE, editor);
|
.create(startOffset, endOffset, SelectionType.CHARACTER_WISE, editor);
|
||||||
|
@@ -52,20 +52,4 @@ object DocumentManager {
|
|||||||
EventFacade.getInstance().removeDocumentListener(doc, docListener)
|
EventFacade.getInstance().removeDocumentListener(doc, docListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun xyz() {
|
|
||||||
abc(true)
|
|
||||||
abd(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun abc(xx: Boolean) {}
|
|
||||||
fun abd(xx: Boolean) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun xyz() {
|
|
||||||
abc(true)
|
|
||||||
abd(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun abc(xx: Boolean) {}
|
|
||||||
fun abd(xx: Boolean) {}
|
|
||||||
|
@@ -23,7 +23,9 @@ import com.intellij.ide.ui.LafManagerListener;
|
|||||||
import com.intellij.openapi.actionSystem.DataContext;
|
import com.intellij.openapi.actionSystem.DataContext;
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.diagnostic.Logger;
|
import com.intellij.openapi.diagnostic.Logger;
|
||||||
|
import com.intellij.openapi.editor.Caret;
|
||||||
import com.intellij.openapi.editor.Editor;
|
import com.intellij.openapi.editor.Editor;
|
||||||
|
import com.intellij.openapi.editor.ScrollingModel;
|
||||||
import com.intellij.ui.DocumentAdapter;
|
import com.intellij.ui.DocumentAdapter;
|
||||||
import com.intellij.util.IJSwingUtilities;
|
import com.intellij.util.IJSwingUtilities;
|
||||||
import com.maddyhome.idea.vim.VimPlugin;
|
import com.maddyhome.idea.vim.VimPlugin;
|
||||||
@@ -221,8 +223,15 @@ public class ExEntryPanel extends JPanel implements LafManagerListener {
|
|||||||
|
|
||||||
private void resetCaretOffset(@NotNull Editor editor) {
|
private void resetCaretOffset(@NotNull Editor editor) {
|
||||||
// Reset the original caret, with original scroll offsets
|
// Reset the original caret, with original scroll offsets
|
||||||
MotionGroup.moveCaret(editor, editor.getCaretModel().getPrimaryCaret(), caretOffset);
|
final Caret primaryCaret = editor.getCaretModel().getPrimaryCaret();
|
||||||
editor.getScrollingModel().scroll(horizontalOffset, verticalOffset);
|
if (primaryCaret.getOffset() != caretOffset) {
|
||||||
|
MotionGroup.moveCaret(editor, primaryCaret, caretOffset);
|
||||||
|
}
|
||||||
|
final ScrollingModel scrollingModel = editor.getScrollingModel();
|
||||||
|
if (scrollingModel.getHorizontalScrollOffset() != horizontalOffset ||
|
||||||
|
scrollingModel.getVerticalScrollOffset() != verticalOffset) {
|
||||||
|
scrollingModel.scroll(horizontalOffset, verticalOffset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull private final DocumentListener incSearchDocumentListener = new DocumentAdapter() {
|
@NotNull private final DocumentListener incSearchDocumentListener = new DocumentAdapter() {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
# Manual Tests
|
# Manual Tests
|
||||||
|
|
||||||
## #1 [Last run: 31-10-2019]
|
## #1 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Initial mode:_ NORMAL
|
_Initial mode:_ NORMAL
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ Word is selected, block-caret is placed on the word end (offset = `word end - 1`
|
|||||||

|

|
||||||
|
|
||||||
|
|
||||||
## #2 [Last run: 31-10-2019]
|
## #2 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Initial mode:_ NORMAL
|
_Initial mode:_ NORMAL
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Last word is selected, block caret is placed on the word end without bouncing
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## #3 [Last run: 31-10-2019]
|
## #3 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Initial mode:_ NORMAL
|
_Initial mode:_ NORMAL
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ Line is selected. Caret is placed on the line end
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## #4 [Last run: 31-10-2019]
|
## #4 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Initial mode:_ NORMAL
|
_Initial mode:_ NORMAL
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ After mouse release, caret moves one character back and becomes block shape
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## #5 [Last run: 31-10-2019]
|
## #5 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Initial mode:_ NORMAL
|
_Initial mode:_ NORMAL
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ After mouse release, caret moves one character back and becomes block shape
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## #6 [Last run: 31-10-2019]
|
## #6 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Initial mode:_ NORMAL
|
_Initial mode:_ NORMAL
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ Line is selected, caret is on the first position
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## #6 [Last run: 31-10-2019]
|
## #6 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Initial mode:_ NORMAL
|
_Initial mode:_ NORMAL
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ Caret stays in _block_ shape with a normal mode
|
|||||||

|

|
||||||
|
|
||||||
|
|
||||||
## #7 [Last run: 31-10-2019]
|
## #7 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Action:_
|
_Action:_
|
||||||
Turn emulation off and on
|
Turn emulation off and on
|
||||||
@@ -102,7 +102,7 @@ Turn emulation off and on
|
|||||||
_Result:_
|
_Result:_
|
||||||
Vim emulator works as expected
|
Vim emulator works as expected
|
||||||
|
|
||||||
## #8 [Last run: 31-10-2019]
|
## #8 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Action:_
|
_Action:_
|
||||||
Start up IJ with disabled emulator, turn it on
|
Start up IJ with disabled emulator, turn it on
|
||||||
@@ -110,7 +110,7 @@ Start up IJ with disabled emulator, turn it on
|
|||||||
_Result:_
|
_Result:_
|
||||||
Vim emulator works as expected
|
Vim emulator works as expected
|
||||||
|
|
||||||
## #9 [Last run: 05-11-2019]
|
## #9 [Last run: 20-11-2019]
|
||||||
|
|
||||||
_Action:_
|
_Action:_
|
||||||
Wrap with if
|
Wrap with if
|
||||||
|
@@ -2,6 +2,7 @@ package org.jetbrains.plugins.ideavim.ex.handler
|
|||||||
|
|
||||||
import com.maddyhome.idea.vim.command.CommandState
|
import com.maddyhome.idea.vim.command.CommandState
|
||||||
import com.maddyhome.idea.vim.helper.StringHelper.parseKeys
|
import com.maddyhome.idea.vim.helper.StringHelper.parseKeys
|
||||||
|
import com.maddyhome.idea.vim.option.OptionsManager
|
||||||
import org.jetbrains.plugins.ideavim.VimTestCase
|
import org.jetbrains.plugins.ideavim.VimTestCase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,6 +33,23 @@ class ActionHandlerTest : VimTestCase() {
|
|||||||
"-----")
|
"-----")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/JetBrains/ideavim/commit/fe714a90032d0cb5ef0a0e0d8783980b6f1c7d20#r35647600
|
||||||
|
fun testExCommandInVisualCharacterModeWithIncSearch() {
|
||||||
|
OptionsManager.incsearch.set()
|
||||||
|
configureByJavaText("-----\n" +
|
||||||
|
"1<caret>2345\n" +
|
||||||
|
"abcde\n" +
|
||||||
|
"-----")
|
||||||
|
typeText(parseKeys("vjl"))
|
||||||
|
typeText(commandToKeys("'<,'>action CommentByBlockComment"))
|
||||||
|
assertMode(CommandState.Mode.VISUAL)
|
||||||
|
myFixture.checkResult("-----\n" +
|
||||||
|
"1/*2345\n" +
|
||||||
|
"abc*/de\n" +
|
||||||
|
"-----")
|
||||||
|
OptionsManager.incsearch.reset()
|
||||||
|
}
|
||||||
|
|
||||||
// VIM-862 |:action|
|
// VIM-862 |:action|
|
||||||
fun testExCommandInVisualCharacterModeSameLine() {
|
fun testExCommandInVisualCharacterModeSameLine() {
|
||||||
configureByJavaText("1<caret>2345\n" + "abcde\n")
|
configureByJavaText("1<caret>2345\n" + "abcde\n")
|
||||||
@@ -41,6 +59,16 @@ class ActionHandlerTest : VimTestCase() {
|
|||||||
myFixture.checkResult("1/*23*/45\n" + "abcde\n")
|
myFixture.checkResult("1/*23*/45\n" + "abcde\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testExCommandInVisualCharacterModeSameLineWithIncsearch() {
|
||||||
|
OptionsManager.incsearch.set()
|
||||||
|
configureByJavaText("1<caret>2345\n" + "abcde\n")
|
||||||
|
typeText(parseKeys("vl"))
|
||||||
|
typeText(commandToKeys("'<,'>action CommentByBlockComment"))
|
||||||
|
assertMode(CommandState.Mode.VISUAL)
|
||||||
|
myFixture.checkResult("1/*23*/45\n" + "abcde\n")
|
||||||
|
OptionsManager.incsearch.reset()
|
||||||
|
}
|
||||||
|
|
||||||
// VIM-862 |:action| in visual line mode
|
// VIM-862 |:action| in visual line mode
|
||||||
fun testExCommandInVisualLineMode() {
|
fun testExCommandInVisualLineMode() {
|
||||||
configureByJavaText("-----\n" +
|
configureByJavaText("-----\n" +
|
||||||
@@ -58,6 +86,24 @@ class ActionHandlerTest : VimTestCase() {
|
|||||||
"-----")
|
"-----")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testExCommandInVisualLineModeWithIncsearch() {
|
||||||
|
OptionsManager.incsearch.set()
|
||||||
|
configureByJavaText("-----\n" +
|
||||||
|
"1<caret>2345\n" +
|
||||||
|
"abcde\n" +
|
||||||
|
"-----")
|
||||||
|
typeText(parseKeys("Vj"))
|
||||||
|
typeText(commandToKeys("'<,'>action CommentByBlockComment"))
|
||||||
|
assertMode(CommandState.Mode.VISUAL)
|
||||||
|
myFixture.checkResult("-----\n" +
|
||||||
|
"/*\n" +
|
||||||
|
"12345\n" +
|
||||||
|
"abcde\n" +
|
||||||
|
"*/\n" +
|
||||||
|
"-----")
|
||||||
|
OptionsManager.incsearch.reset()
|
||||||
|
}
|
||||||
|
|
||||||
// VIM-862 |:action| in visual block mode
|
// VIM-862 |:action| in visual block mode
|
||||||
fun testExCommandInVisualBlockMode() {
|
fun testExCommandInVisualBlockMode() {
|
||||||
configureByJavaText("-----\n" +
|
configureByJavaText("-----\n" +
|
||||||
@@ -72,4 +118,20 @@ class ActionHandlerTest : VimTestCase() {
|
|||||||
"a/*bc*/de\n" +
|
"a/*bc*/de\n" +
|
||||||
"-----")
|
"-----")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testExCommandInVisualBlockModeWithIncsearch() {
|
||||||
|
OptionsManager.incsearch.set()
|
||||||
|
configureByJavaText("-----\n" +
|
||||||
|
"1<caret>2345\n" +
|
||||||
|
"abcde\n" +
|
||||||
|
"-----")
|
||||||
|
typeText(parseKeys("<C-V>lj"))
|
||||||
|
typeText(commandToKeys("'<,'>action CommentByBlockComment"))
|
||||||
|
assertMode(CommandState.Mode.VISUAL)
|
||||||
|
myFixture.checkResult("-----\n" +
|
||||||
|
"1/*23*/45\n" +
|
||||||
|
"a/*bc*/de\n" +
|
||||||
|
"-----")
|
||||||
|
OptionsManager.incsearch.reset()
|
||||||
|
}
|
||||||
}
|
}
|
@@ -2,9 +2,7 @@ package org.jetbrains.plugins.ideavim.extension
|
|||||||
|
|
||||||
import com.intellij.openapi.actionSystem.DataContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.editor.LogicalPosition
|
|
||||||
import com.maddyhome.idea.vim.VimPlugin
|
import com.maddyhome.idea.vim.VimPlugin
|
||||||
import com.maddyhome.idea.vim.action.motion.updown.MotionDownAction
|
|
||||||
import com.maddyhome.idea.vim.command.CommandState
|
import com.maddyhome.idea.vim.command.CommandState
|
||||||
import com.maddyhome.idea.vim.command.MappingMode
|
import com.maddyhome.idea.vim.command.MappingMode
|
||||||
import com.maddyhome.idea.vim.extension.VimExtensionFacade.putExtensionHandlerMapping
|
import com.maddyhome.idea.vim.extension.VimExtensionFacade.putExtensionHandlerMapping
|
||||||
@@ -12,8 +10,9 @@ import com.maddyhome.idea.vim.extension.VimExtensionFacade.putKeyMapping
|
|||||||
import com.maddyhome.idea.vim.extension.VimExtensionHandler
|
import com.maddyhome.idea.vim.extension.VimExtensionHandler
|
||||||
import com.maddyhome.idea.vim.extension.VimNonDisposableExtension
|
import com.maddyhome.idea.vim.extension.VimNonDisposableExtension
|
||||||
import com.maddyhome.idea.vim.group.MotionGroup
|
import com.maddyhome.idea.vim.group.MotionGroup
|
||||||
import com.maddyhome.idea.vim.group.visual.vimSetSelection
|
|
||||||
import com.maddyhome.idea.vim.helper.StringHelper.parseKeys
|
import com.maddyhome.idea.vim.helper.StringHelper.parseKeys
|
||||||
|
import com.maddyhome.idea.vim.helper.isEndAllowed
|
||||||
|
import com.maddyhome.idea.vim.helper.mode
|
||||||
import org.jetbrains.plugins.ideavim.VimTestCase
|
import org.jetbrains.plugins.ideavim.VimTestCase
|
||||||
|
|
||||||
class OpMappingTest : VimTestCase() {
|
class OpMappingTest : VimTestCase() {
|
||||||
@@ -35,6 +34,22 @@ class OpMappingTest : VimTestCase() {
|
|||||||
CommandState.SubMode.NONE)
|
CommandState.SubMode.NONE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun `test simple delete backwards`() {
|
||||||
|
doTest(parseKeys("dP"),
|
||||||
|
"I found ${c}it in a legendary land",
|
||||||
|
"I f${c}it in a legendary land",
|
||||||
|
CommandState.Mode.COMMAND,
|
||||||
|
CommandState.SubMode.NONE)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun `test delete emulate inclusive`() {
|
||||||
|
doTest(parseKeys("dU"),
|
||||||
|
"${c}I found it in a legendary land",
|
||||||
|
"${c}d it in a legendary land",
|
||||||
|
CommandState.Mode.COMMAND,
|
||||||
|
CommandState.SubMode.NONE)
|
||||||
|
}
|
||||||
|
|
||||||
fun `test linewise delete`() {
|
fun `test linewise delete`() {
|
||||||
doTest(parseKeys("dO"),
|
doTest(parseKeys("dO"),
|
||||||
"""
|
"""
|
||||||
@@ -60,13 +75,32 @@ class TestExtension : VimNonDisposableExtension() {
|
|||||||
override fun getName(): String = "TestExtension"
|
override fun getName(): String = "TestExtension"
|
||||||
|
|
||||||
override fun initOnce() {
|
override fun initOnce() {
|
||||||
|
putExtensionHandlerMapping(MappingMode.O, parseKeys("<Plug>TestExtensionEmulateInclusive"), MoveEmulateInclusive(), false)
|
||||||
|
putExtensionHandlerMapping(MappingMode.O, parseKeys("<Plug>TestExtensionBackwardsCharacter"), MoveBackwards(), false)
|
||||||
putExtensionHandlerMapping(MappingMode.O, parseKeys("<Plug>TestExtensionCharacter"), Move(), false)
|
putExtensionHandlerMapping(MappingMode.O, parseKeys("<Plug>TestExtensionCharacter"), Move(), false)
|
||||||
putExtensionHandlerMapping(MappingMode.O, parseKeys("<Plug>TestExtensionLinewise"), MoveLinewise(), false)
|
putExtensionHandlerMapping(MappingMode.O, parseKeys("<Plug>TestExtensionLinewise"), MoveLinewise(), false)
|
||||||
|
|
||||||
|
putKeyMapping(MappingMode.O, parseKeys("U"), parseKeys("<Plug>TestExtensionEmulateInclusive"), true)
|
||||||
|
putKeyMapping(MappingMode.O, parseKeys("P"), parseKeys("<Plug>TestExtensionBackwardsCharacter"), true)
|
||||||
putKeyMapping(MappingMode.O, parseKeys("I"), parseKeys("<Plug>TestExtensionCharacter"), true)
|
putKeyMapping(MappingMode.O, parseKeys("I"), parseKeys("<Plug>TestExtensionCharacter"), true)
|
||||||
putKeyMapping(MappingMode.O, parseKeys("O"), parseKeys("<Plug>TestExtensionLinewise"), true)
|
putKeyMapping(MappingMode.O, parseKeys("O"), parseKeys("<Plug>TestExtensionLinewise"), true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class MoveEmulateInclusive : VimExtensionHandler {
|
||||||
|
override fun execute(editor: Editor, context: DataContext) {
|
||||||
|
VimPlugin.getVisualMotion().enterVisualMode(editor, CommandState.SubMode.VISUAL_CHARACTER)
|
||||||
|
val caret = editor.caretModel.currentCaret
|
||||||
|
val newOffset = VimPlugin.getMotion().moveCaretHorizontal(editor, caret, 5, editor.mode.isEndAllowed)
|
||||||
|
MotionGroup.moveCaret(editor, caret, newOffset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MoveBackwards : VimExtensionHandler {
|
||||||
|
override fun execute(editor: Editor, context: DataContext) {
|
||||||
|
editor.caretModel.allCarets.forEach { it.moveToOffset(it.offset - 5) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class Move : VimExtensionHandler {
|
private class Move : VimExtensionHandler {
|
||||||
override fun execute(editor: Editor, context: DataContext) {
|
override fun execute(editor: Editor, context: DataContext) {
|
||||||
editor.caretModel.allCarets.forEach { it.moveToOffset(it.offset + 5) }
|
editor.caretModel.allCarets.forEach { it.moveToOffset(it.offset + 5) }
|
||||||
@@ -78,6 +112,7 @@ class TestExtension : VimNonDisposableExtension() {
|
|||||||
VimPlugin.getVisualMotion().enterVisualMode(editor, CommandState.SubMode.VISUAL_LINE)
|
VimPlugin.getVisualMotion().enterVisualMode(editor, CommandState.SubMode.VISUAL_LINE)
|
||||||
val caret = editor.caretModel.currentCaret
|
val caret = editor.caretModel.currentCaret
|
||||||
val newOffset = VimPlugin.getMotion().moveCaretVertical(editor, caret, 1)
|
val newOffset = VimPlugin.getMotion().moveCaretVertical(editor, caret, 1)
|
||||||
MotionGroup.moveCaret(editor, caret, newOffset) }
|
MotionGroup.moveCaret(editor, caret, newOffset)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user