sublime text的custom layouts需手动编写json并绑定快捷键实现,其核心是cols、rows和cells三字段定义网格结构,其中cols和rows为归一化边界数组,cells按索引顺序指定各group占据区域,绑定set_layout命令后需配合move_to_group命令或拖拽将文件移入对应group。

Sublime Text 的 Custom Layouts 不是“一键保存预设”功能,而是靠手动编辑 JSON 布局结构 + 快捷键绑定实现的可复用视图配置。它真正生效的前提是你理解 layout 字段的语义,且不依赖 UI 菜单自动记录——菜单里的 Columns / Grid 只是固定模板,无法保存你拖拽调整后的非对称比例或嵌套结构。
怎么写出能用的 custom layout JSON
Sublime 的布局本质是行列嵌套的网格系统,cols 和 rows 定义边界坐标(归一化值,0.0 到 1.0),cells 描述每个 group 占据的矩形区域。写错一个数字,窗口就可能空白或重叠。
-
cols必须至少含 2 个值(如[0.0, 0.5, 1.0]表示两列),rows同理([0.0, 1.0]是单行) -
cells每个元素是[left_col_index, top_row_index, right_col_index, bottom_row_index],索引从 0 开始,例如[0, 0, 1, 1]占左上角第一个格子 - 常见错误:把
cols写成[0, 0.6, 1]却只定义 2 个cells,导致第三列无 group 显示 —— 实际需要 3 个 cells 才能填满 - 示例(三列不等宽 + 底部横跨全宽的 group):
{ "cols": [0.0, 0.35, 0.7, 1.0], "rows": [0.0, 0.7, 1.0], "cells": [ [0, 0, 1, 1], // 左列 [1, 0, 2, 1], // 中列 [2, 0, 3, 1], // 右列 [0, 1, 3, 2] // 底部横条 ] }
如何把 layout 绑定到快捷键快速调用
Sublime 不提供“保存当前布局”按钮,但可通过命令 set_layout 注入 JSON。直接改 key bindings 是最稳定的方式,避免插件冲突或命令面板延迟。
- 打开
Preferences → Key Bindings(用户侧) - 添加一条绑定,例如:
[ { "keys": ["ctrl+alt+shift+3"], "command": "set_layout", "args": { "cols": [0.0, 0.35, 0.7, 1.0], "rows": [0.0, 0.7, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1], [0, 1, 3, 2]] } } ] - 注意:
set_layout命令不会自动移动已有文件到新 group —— 它只重绘窗格,文件仍留在原 group。需后续用move_to_group或拖拽补位 - Mac 用户记得把
ctrl换成super(即cmd),否则快捷键无效
拖拽文件进自定义 group 时为什么没反应
不是 Sublime 卡了,而是焦点和目标区域识别有隐含规则:只有当鼠标悬停在 group 顶部 10px 区域并出现蓝色插入线时,拖拽才被接受。松手位置偏差哪怕 2px,文件就会回退到原 group 或关闭。
- 更可靠的方式是用命令:
Ctrl+Shift+P→ 输入Move File to Group→ 选目标 group 编号(从 0 开始) - group 编号顺序 =
cells数组索引顺序,不是视觉从左到右。比如上面 JSON 中[0, 0, 1, 1]是 group 0,[0, 1, 3, 2]是 group 3 - 如果拖入后发现两个 group 里同时开着同一文件,那是正常行为 —— Sublime 允许同一文件在多个 group 中独立编辑,但保存时以最后聚焦的 tab 为准
- 状态栏左下角显示
Group: X才代表当前焦点在该 group;没显示说明焦点还在别的 group,此时快捷键操作(如Ctrl+S)会作用于隐藏的 tab
Custom Layouts 的复杂点不在语法,而在布局与文件归属的解耦:JSON 控制“窗格怎么画”,而文件在哪由焦点和显式移动决定。忽略这点,就会陷入“布局变了但文件没过去”的困惑。











