名称: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启发的树结构组织窗口:
- 每个工作空间有一个根容器
- 容器持有子节点(窗口或其他容器)
- 窗口是叶节点
- 每个容器具有:
- 布局:
tiles或accordion - 方向:
horizontal或vertical
- 布局:
组合布局:h_tiles、v_tiles、h_accordion、v_accordion
工作空间
- 虚拟工作空间模拟i3行为,无macOS Spaces限制
- 工作空间名称可以是任何字符串(常用:1-9、A-Z或描述性名称)
- 每个显示器一次显示一个工作空间
- 非活动工作空间窗口隐藏于屏幕外
- 所有显示器共享工作空间池
显示器
- 工作空间可以分配到特定显示器
- 使用
main、secondary、显示器索引(基于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
常见问题
-
按键不工作:检查与其他全局热键应用程序冲突(skhd、Karabiner、Raycast)
-
窗口不平铺:某些窗口被检测为对话框。使用
on-window-detected和run = 'layout tiling'强制平铺 -
多显示器问题:在系统设置中禁用“显示器具有单独的Spaces”以获得更好稳定性
-
隐藏窗口可见:排列显示器使每个显示器在底部角落有空闲空间
资源
- 官方文档: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