AeroSpace窗口管理Skill aerospace

这个技能用于管理macOS上的窗口,使用AeroSpace平铺窗口管理器。它支持虚拟工作空间、树形窗口平铺、可脚本化的CLI命令和TOML配置文件,适用于窗口移动、平铺布局、工作空间切换等任务,并可用于自动化脚本。关键词:AeroSpace, macOS窗口管理, 平铺窗口管理器, 工作空间, 脚本自动化。

操作系统 0 次安装 0 次浏览 更新于 3/20/2026

名称:aerospace 描述:此技能应用于当用户想要使用AeroSpace管理macOS上的窗口时,AeroSpace是一个类似i3的平铺窗口管理器。用于临时窗口管理请求(“移动此窗口到工作空间2”,“平铺这些窗口”)和脚本任务(编写shell脚本、自动化或配置修改)。当用户提及“aerospace”、“窗口管理”、“平铺”、“工作空间”或询问在macOS上管理窗口时使用。

AeroSpace窗口管理

版本检查

此技能基于AeroSpace版本0.20.2-Beta创建。在执行命令或编写脚本之前,验证安装的版本:

aerospace --version

如果版本差异显著,查阅aerospace --help和个别命令帮助以验证语法是否更改。

概述

AeroSpace是macOS上的一个类似i3的平铺窗口管理器。它提供:

  • 虚拟工作空间(独立于macOS Spaces)
  • 基于树的窗口平铺(平铺和手风琴布局)
  • 可脚本化的CLI用于自动化
  • 基于TOML的配置

aerospace CLI是交互式使用和脚本化的主要接口。

核心概念

树模型

AeroSpace以受i3启发的树结构组织窗口:

  • 每个工作空间有一个根容器
  • 容器持有子节点(窗口或其他容器)
  • 窗口是叶节点
  • 每个容器具有:
    • 布局tilesaccordion
    • 方向horizontalvertical

组合布局:h_tilesv_tilesh_accordionv_accordion

工作空间

  • 虚拟工作空间模拟i3行为,无macOS Spaces限制
  • 工作空间名称可以是任何字符串(常用:1-9、A-Z或描述性名称)
  • 每个显示器一次显示一个工作空间
  • 非活动工作空间窗口隐藏于屏幕外
  • 所有显示器共享工作空间池

显示器

  • 工作空间可以分配到特定显示器
  • 使用mainsecondary、显示器索引(基于1)或正则表达式模式
  • 焦点跟随工作空间分配

获取命令帮助

重要:始终使用帮助命令获取确切语法。此技能教授概念;CLI教授确切用法。

# 列出所有命令
aerospace --help

# 获取任何命令的帮助
aerospace <命令> --help

# 示例
aerospace focus --help
aerospace list-windows --help
aerospace workspace --help

按类别常见命令

导航(焦点)

# 按方向聚焦窗口
aerospace focus left|down|up|right

# 按窗口ID聚焦
aerospace focus --window-id <id>

# 按深度优先顺序聚焦下一个/上一个
aerospace focus dfs-next|dfs-prev

窗口移动

# 按方向移动聚焦窗口
aerospace move left|down|up|right

# 移动窗口到工作空间
aerospace move-node-to-workspace <工作空间>
aerospace move-node-to-workspace next|prev

# 移动窗口到显示器
aerospace move-node-to-monitor left|right|next|prev

工作空间管理

# 切换到工作空间
aerospace workspace <名称>
aerospace workspace next|prev

# 将工作空间移动到不同显示器
aerospace move-workspace-to-monitor next|prev

布局控制

# 更改布局(多个参数=找到第一个非当前并应用)
aerospace layout tiles|accordion
aerospace layout horizontal|vertical
aerospace layout h_tiles|v_tiles|h_accordion|v_accordion
aerospace layout floating|tiling

# 切换全屏
aerospace fullscreen
aerospace fullscreen on|off

树操作

# 将聚焦窗口与相邻窗口在共同父节点下合并
aerospace join-with left|down|up|right

# 调整窗口大小
aerospace resize smart|width|height +|-<像素>

# 平衡所有窗口大小
aerospace balance-sizes

# 展平工作空间树(重置分割)
aerospace flatten-workspace-tree

查询命令(用于脚本)

# 列出窗口
aerospace list-windows --workspace focused
aerospace list-windows --all
aerospace list-windows --monitor focused
aerospace list-windows --format '%{window-id} %{app-name}'

# 列出工作空间
aerospace list-workspaces --all
aerospace list-workspaces --monitor focused --empty no

# 列出显示器
aerospace list-monitors

# 列出运行中的应用程序(对on-window-detected有用)
aerospace list-apps

# 获取配置值
aerospace config --get mode.main.binding --json
aerospace config --config-path

输出格式化

查询命令支持--format和插值:

# 常见变量
%{window-id}      # 窗口唯一ID
%{window-title}   # 窗口标题
%{app-name}       # 应用程序名称
%{app-bundle-id}  # 应用程序包ID(例如,com.apple.Safari)
%{workspace}      # 工作空间名称
%{monitor-id}     # 显示器索引

# 用于脚本的JSON输出
aerospace list-windows --workspace focused --json

脚本模式

模式:按应用程序查找并聚焦窗口

# 聚焦Safari窗口
set window_id (aerospace list-windows --all --format '%{window-id} %{app-name}' | grep Safari | head -1 | cut -d' ' -f1)
and aerospace focus --window-id $window_id

模式:移动应用程序到特定工作空间

# 将所有Chrome窗口移动到工作空间W
for id in (aerospace list-windows --all --app-bundle-id com.google.Chrome --format '%{window-id}')
    aerospace move-node-to-workspace --window-id $id W
end

模式:循环非空工作空间

aerospace list-workspaces --monitor focused --empty no | aerospace workspace next

模式:当前工作空间信息

set current_ws (aerospace list-workspaces --focused)
set window_count (aerospace list-windows --workspace focused --count)
echo "工作空间 $current_ws 有 $window_count 个窗口"

配置概述

配置位置:~/.aerospace.toml~/.config/aerospace/aerospace.toml

关键配置概念

绑定模式:类似vim模式。main是默认。使用mode <模式名称>切换模式。

[mode.main.binding]
    alt-h = 'focus left'
    alt-r = 'mode resize'

[mode.resize.binding]
    minus = 'resize smart -50'
    esc = 'mode main'

on-window-detected回调:自动分配应用程序到工作空间:

[[on-window-detected]]
    if.app-id = 'com.apple.Safari'
    run = 'move-node-to-workspace W'

工作空间到显示器分配

[workspace-to-monitor-force-assignment]
    1 = 'main'
    2 = 'secondary'

exec-on-workspace-change:用于工具栏集成(例如,Sketchybar):

exec-on-workspace-change = ['/bin/bash', '-c',
    'sketchybar --trigger aerospace_workspace_change FOCUSED=$AEROSPACE_FOCUSED_WORKSPACE'
]

获取应用程序包ID

对于on-window-detected,需要包ID:

# 列出所有运行中的应用程序及其包ID
aerospace list-apps

# 或使用mdls
mdls -name kMDItemCFBundleIdentifier -r /Applications/Safari.app

临时窗口管理任务

当用户要求窗口管理任务时,翻译为aerospace命令:

用户请求 命令
“移动此窗口向右” aerospace move right
“聚焦上方窗口” aerospace focus up
“发送到工作空间3” aerospace move-node-to-workspace 3
“转到工作空间邮件” aerospace workspace mail
“全屏此窗口” aerospace fullscreen
“浮动此窗口” aerospace layout floating
“水平平铺” aerospace layout h_tiles
“堆叠窗口” aerospace layout v_accordion
“与右侧窗口交换” aerospace move right(在平铺中移动交换)
“调整更大” aerospace resize smart +50
“我在哪个工作空间?” aerospace list-workspaces --focused
“这里有哪些窗口?” aerospace list-windows --workspace focused

调试

# 调试窗口检测问题
aerospace debug-windows

# 检查加载的配置路径
aerospace config --config-path

# 列出当前绑定模式
aerospace list-modes

# 显示执行环境变量
aerospace list-exec-env-vars

# 更改后重新加载配置
aerospace reload-config

常见问题

  1. 按键不工作:检查与其他全局热键应用程序冲突(skhd、Karabiner、Raycast)

  2. 窗口不平铺:某些窗口被检测为对话框。使用on-window-detectedrun = 'layout tiling'强制平铺

  3. 多显示器问题:在系统设置中禁用“显示器具有单独的Spaces”以获得更好稳定性

  4. 隐藏窗口可见:排列显示器使每个显示器在底部角落有空闲空间

资源

  • 官方文档:https://nikitabobko.github.io/AeroSpace/
  • 手册页:man aerospace-<命令>(如果通过Homebrew安装)
  • 默认配置:/Applications/AeroSpace.app/Contents/Resources/default-config.toml
  • 引导配置:cp /Applications/AeroSpace.app/Contents/Resources/default-config.toml ~/.aerospace.toml