mac新窗口默认跳主屏需先拖动白色菜单栏横条设主屏,再开启“显示器具有单独的空间”,最后用hammerspoon脚本或option+右键指定屏幕实现鼠标所在屏自动打开。

Mac默认会把新打开的软件窗口放在主屏幕,当你用双显示器甚至三显示器工作时,鼠标明明在副屏,新启动的App却总跳回主屏,打断操作流。这个问题不是系统bug,而是macOS对“新窗口归属”的默认策略未适配多屏主动工作场景。
确认主屏幕与副屏幕布局
点击苹果菜单 → “系统设置…” → 左侧边栏选择“显示器”。
你会看到两个(或多个)屏幕缩略图,每个角落有白色小条——那是主屏幕标识。只有带白条的屏幕才是系统认定的“主屏幕”,所有未指定位置的新窗口都会优先落在这里。
【必须先确认主屏幕是否是你常用操作的那块屏】 如果不是,直接拖动白条到你希望新窗口默认出现的屏幕上,松手即生效。这一步不做,后面所有设置都无效。
启用“显示器具有单独的空间”
回到“系统设置…” → 左侧边栏点“桌面与 Dock” → 向下滚动到“调度中心”区域 → 点击“调度中心…”按钮。
在弹出窗口中,勾选“显示器具有单独的空间”。
这个选项开启后,每块显示器都拥有独立的桌面空间栈(Space Stack),系统才能区分“鼠标此刻在哪块屏”,进而把新窗口锚定到对应屏幕的当前空间里。不勾选它,多显示器只是画面延伸,系统仍视作单一大桌面。
强制新窗口跟随鼠标位置的两种方法
方法一:用Hammerspoon脚本实时劫持窗口创建事件(推荐给长期多屏用户)
下载安装Hammerspoon(官网最新.dmg),首次运行时按提示授予“辅助功能”和“自动化”权限。
打开Hammerspoon菜单栏图标 → “Open Config” → 在打开的init.lua文件末尾粘贴以下代码:
hs.window.filter.new{override={allowMove=true,allowResize=true}}:subscribe(hs.window.filter.windowCreated,function(w) local mouse=hs.mouse.getAbsolutePosition() local screen=hs.screen.findMouse() if screen and w:isStandard() then w:moveToScreen(screen,true) end end)
保存后,在Hammerspoon菜单中点击“Reload Config”。此后所有新创建的标准窗口(非模态对话框、非全屏App)都会自动跳转至鼠标所在屏幕。
方法二:临时绕过系统限制(无需安装工具)
按住Option键 → 右键点击程序坞中任意App图标 → 选择“在[屏幕名]上打开”。该App下次启动时,只要没被其他规则覆盖,就会优先出现在上次指定的屏幕上。
注意:此方法仅对支持“在特定屏幕打开”的App有效(如Safari、Notes、Preview),终端类或Electron框架应用(如VS Code、Slack)通常不响应。











