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]