diff --git a/src/main/java/com/maddyhome/idea/vim/action/VimRunLastMacroInOpenFiles.kt b/src/main/java/com/maddyhome/idea/vim/action/VimRunLastMacroInOpenFiles.kt
new file mode 100644
index 000000000..411243874
--- /dev/null
+++ b/src/main/java/com/maddyhome/idea/vim/action/VimRunLastMacroInOpenFiles.kt
@@ -0,0 +1,52 @@
+package com.maddyhome.idea.vim.action
+
+import com.intellij.openapi.actionSystem.ActionUpdateThread
+import com.intellij.openapi.actionSystem.AnActionEvent
+import com.intellij.openapi.command.UndoConfirmationPolicy
+import com.intellij.openapi.command.WriteCommandAction
+import com.intellij.openapi.fileEditor.TextEditor
+import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
+import com.intellij.openapi.project.DumbAwareAction
+import com.maddyhome.idea.vim.KeyHandler
+import com.maddyhome.idea.vim.api.injector
+import com.maddyhome.idea.vim.newapi.IjEditorExecutionContext
+import com.maddyhome.idea.vim.newapi.vim
+import com.maddyhome.idea.vim.state.mode.Mode
+
+class VimRunLastMacroInOpenFiles : DumbAwareAction() {
+  override fun update(e: AnActionEvent) {
+    val lastRegister = injector.macro.lastRegister
+    val isEnabled = lastRegister != 0.toChar()
+
+    e.presentation.isEnabled = isEnabled
+    e.presentation.text = if (isEnabled) "Run Macro '${lastRegister}' in Open Files" else "Run Last Macro in Open Files"
+  }
+
+  override fun getActionUpdateThread(): ActionUpdateThread {
+    return ActionUpdateThread.EDT
+  }
+
+  override fun actionPerformed(e: AnActionEvent) {
+    val project = e.project ?: return
+    val fileEditorManager = FileEditorManagerEx.getInstanceExIfCreated(project) ?: return
+    val editors = fileEditorManager.allEditors.filterIsInstance<TextEditor>()
+    
+    WriteCommandAction.writeCommandAction(project)
+      .withName(e.presentation.text)
+      .withGlobalUndo()
+      .withUndoConfirmationPolicy(UndoConfirmationPolicy.REQUEST_CONFIRMATION)
+      .run<RuntimeException> {
+        val reg = injector.macro.lastRegister
+        
+        for (editor in editors) {
+          fileEditorManager.openFile(editor.file, true)
+          
+          val vimEditor = editor.editor.vim
+          vimEditor.mode = Mode.NORMAL()
+          KeyHandler.getInstance().reset(vimEditor)
+          
+          injector.macro.playbackRegister(vimEditor, IjEditorExecutionContext(e.dataContext), reg, 1)
+        }
+      }
+  }
+}
diff --git a/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEntryPanel.java b/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEntryPanel.java
index ec0324877..f90c9c077 100644
--- a/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEntryPanel.java
+++ b/src/main/java/com/maddyhome/idea/vim/ui/ex/ExEntryPanel.java
@@ -353,7 +353,7 @@ public class ExEntryPanel extends JPanel implements VimCommandLine {
         int count1 = Math.max(1, KeyHandler.getInstance().getKeyHandlerState().getEditorCommandBuilder()
           .calculateCount0Snapshot());
 
-        if (labelText.equals("/") || labelText.equals("?") || searchCommand) {
+        if ((labelText.equals("/") || labelText.equals("?") || searchCommand) && !injector.getMacro().isExecutingMacro()) {
           final boolean forwards = !labelText.equals("?");  // :s, :g, :v are treated as forwards
           int patternEnd = injector.getSearchGroup().findEndOfPattern(searchText, separator, 0);
           final String pattern = searchText.substring(0, patternEnd);
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index c717673cd..c041f3b59 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -139,10 +139,12 @@
   <xi:include href="/META-INF/includes/VimListeners.xml" xpointer="xpointer(/idea-plugin/*)"/>
 
   <actions resource-bundle="messages.IdeaVimBundle">
-    <action id="VimPluginToggle" class="com.maddyhome.idea.vim.action.VimPluginToggleAction">
+    <group id="com.chylex.intellij.vim" text="Vim" popup="true">
       <add-to-group group-id="ToolsMenu" anchor="last"/>
-    </action>
-
+      <action id="VimPluginToggle" class="com.maddyhome.idea.vim.action.VimPluginToggleAction"/>
+      <action id="VimRunLastMacroInOpenFiles" class="com.maddyhome.idea.vim.action.VimRunLastMacroInOpenFiles"/>
+    </group>
+    
     <!-- Internal -->
     <!--suppress PluginXmlI18n -->
     <action id="VimInternalAddBlockInlays" class="com.maddyhome.idea.vim.action.internal.AddBlockInlaysAction" text="Add Test Block Inlays | IdeaVim Internal" internal="true"/>