diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/ResetModeAction.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/ResetModeAction.kt index 835b7bc57..dd6a4bfae 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/ResetModeAction.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/ResetModeAction.kt @@ -19,6 +19,7 @@ package com.maddyhome.idea.vim.action import com.maddyhome.idea.vim.KeyHandler import com.maddyhome.idea.vim.api.ExecutionContext +import com.maddyhome.idea.vim.api.VimCaret import com.maddyhome.idea.vim.api.VimEditor import com.maddyhome.idea.vim.api.injector import com.maddyhome.idea.vim.command.Command @@ -27,8 +28,33 @@ import com.maddyhome.idea.vim.command.VimStateMachine import com.maddyhome.idea.vim.handler.VimActionHandler import com.maddyhome.idea.vim.helper.mode -class ResetModeAction : VimActionHandler.SingleExecution() { +class ResetModeAction : VimActionHandler.ConditionalMulticaret() { + private lateinit var modeBeforeReset: VimStateMachine.Mode override val type: Command.Type = Command.Type.OTHER_WRITABLE + override fun runAsMulticaret( + editor: VimEditor, + context: ExecutionContext, + cmd: Command, + operatorArguments: OperatorArguments, + ): Boolean { + modeBeforeReset = editor.mode + KeyHandler.getInstance().fullReset(editor) + return true + } + + override fun execute( + editor: VimEditor, + caret: VimCaret, + context: ExecutionContext, + cmd: Command, + operatorArguments: OperatorArguments, + ): Boolean { + if (modeBeforeReset == VimStateMachine.Mode.INSERT) { + val position = injector.motion.getOffsetOfHorizontalMotion(editor, caret, -1, false) + caret.moveToOffset(position) + } + return true + } override fun execute( editor: VimEditor, @@ -36,16 +62,6 @@ class ResetModeAction : VimActionHandler.SingleExecution() { cmd: Command, operatorArguments: OperatorArguments, ): Boolean { - val modeBeforeReset = editor.mode - KeyHandler.getInstance().fullReset(editor) - - if (modeBeforeReset == VimStateMachine.Mode.INSERT) { - editor.forEachCaret { caret -> - val position = injector.motion.getOffsetOfHorizontalMotion(editor, caret, -1, false) - caret.moveToOffset(position) - } - } - - return true + error("This method should not be used") } }