diff --git a/src/test/java/org/jetbrains/plugins/ideavim/action/MacroActionTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/action/MacroActionTest.kt index 07e2b5d8c..c230534a3 100644 --- a/src/test/java/org/jetbrains/plugins/ideavim/action/MacroActionTest.kt +++ b/src/test/java/org/jetbrains/plugins/ideavim/action/MacroActionTest.kt @@ -55,6 +55,21 @@ class MacroActionTest : VimTestCase() { assertRegister('a', "ipp^[") } + @Test + fun testMacroWithIdeAction() { + configureByText("""One + |Two + |Three + |Four""".trimMargin()) + enterCommand("map j <Action>(EditorDown)") + typeText(injector.parser.parseKeys("qa" + "j" + "q")) + typeText(injector.parser.parseKeys("@a")) + assertState("""One + |Two + |${c}Three + |Four""".trimMargin()) + } + @Test fun testRecordMacroWithDigraph() { typeTextInFile(injector.parser.parseKeys("qa" + "i" + "<C-K>OK<Esc>" + "q"), "") diff --git a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/macro/PlaybackRegisterAction.kt b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/macro/PlaybackRegisterAction.kt index 4068063b4..51619266d 100644 --- a/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/macro/PlaybackRegisterAction.kt +++ b/vim-engine/src/main/kotlin/com/maddyhome/idea/vim/action/macro/PlaybackRegisterAction.kt @@ -33,10 +33,9 @@ class PlaybackRegisterAction : VimActionHandler.SingleExecution() { ): Boolean { val argument = cmd.argument as? Argument.Character ?: return false val reg = argument.character - val application = injector.application val res = arrayOf(false) when { - reg == LAST_COMMAND_REGISTER || (reg == '@' && injector.macro.lastRegister == LAST_COMMAND_REGISTER) -> { // No write action + reg == LAST_COMMAND_REGISTER || (reg == '@' && injector.macro.lastRegister == LAST_COMMAND_REGISTER) -> { try { var i = 0 while (i < cmd.count) { @@ -55,15 +54,11 @@ class PlaybackRegisterAction : VimActionHandler.SingleExecution() { } reg == '@' -> { - application.runWriteAction { - res[0] = injector.macro.playbackLastRegister(editor, context, cmd.count) - } + res[0] = injector.macro.playbackLastRegister(editor, context, cmd.count) } else -> { - application.runWriteAction { - res[0] = injector.macro.playbackRegister(editor, context, reg, cmd.count) - } + res[0] = injector.macro.playbackRegister(editor, context, reg, cmd.count) } } return res[0]