Ctrl+K Ctrl+1 折叠顶层 import 和全局变量而不影响 class/def,需确保其作用域为 source.python 直接子级(如 import 行),而 class/def 位于 meta.class/python 等嵌套层级;若 scope 层级异常,需修复语法高亮或禁用冲突插件。
折叠全部代码块,对阅读大型项目源码几乎没用——它按语法结构粗暴收起所有函数/类,反而掩盖了真正想看的模块边界和逻辑分组。
怎么让
只折顶层 import 和全局变量,不碰 class 和 def?
折的是“作用域层级 1”,不是“缩进一级”。Python 文件里,import、
all
、常量赋值这些顶层语句通常落在
直接子级,而
和
是嵌套在
或
下的第二层。
但这个层级数字不是写死的,取决于当前语法文件中
前缀的嵌套深度。
先手动把光标放在一个
行,按
→ 输入
回车,看输出是否含
且无其他
再放光标到
行,对比 scope 名,若多出一层
,说明 class 是 level 2,
就不会动它
如果发现 import 和 class 都在同一层(比如都只显示
),说明语法高亮失效或用了阉割版语法包,得换回官方 Python 包或检查插件冲突
不响应?常见原因:
文件被识别为
(右下角不是
)
当前语法定义里没给顶层语句设
(比如某些轻量 Python 插件会删掉折叠规则)
缩进混用空格和 Tab,Sublime 认为“结构不连续”,跳过层级计算
为什么
在 Python 里不折叠,但在 JS 里可以?
Sublime 不原生支持
或
,能否生效,取决于当前语法是否启用了
并正确定义了注释 scope。
JavaScript 默认语法中,
被识别为
,且语法文件里配置了
,所以
行能触发折叠
Python 默认语法中,
是
,但原生 Python.
sublime
-syntax 没把 comment 行标记为可折叠;即使你加了
到用户设置,也无效——因为该选项只对已声明
的 comment scope 生效
实操建议:
JS/TS/CSS 文件:直接写
+ 空行 + 代码 +
,确保每行独占且无多余字符
Python 文件:别硬套
,改用空行 + 4 空格缩进 + 注释标题,然后启用
,靠缩进层级收起整段
所有语言通用兜底法:选中目标代码 →
→ 输入
回车,不依赖语法,即时生效
和
参数到底控制什么?
这两个参数都在
里配,但作用完全不同,且容易互相干扰:
启用“按缩进层级折叠”,即把相同缩进深度的连续代码块视为一组来折叠(适合 YAML、INI、纯文本配置)
是关键开关:设为
才
禁用
Sublime 默认的缩进折叠逻辑,避免它和语法结构折叠打架;设为
反而会让
行也被当缩进块处理,导致重复折叠或错层
典型错误配置:
仿Sublime和notepad++编辑器效果
仿Sublime和notepad++编辑器效果
下载
结果:函数体被语法规则折一次,又被缩进逻辑再折一次,展开时层级错乱,甚至部分代码消失
正确做法(以阅读 Django settings.py 为例):
关闭缩进折叠:
开启层级折叠:
再配合注释分组:
+ 空行 + 缩进代码,这样
就能一键收起整个 middleware 列表
注意:
对 JSON/YAML 更友好,但对 Python 效果有限——因为 Python 的
和其内部缩进是同一层,无法单独折函数头
真正的卡点不在快捷键记不记得住,而在你按下
之前,有没有确认光标所在行的作用域确实是
而非
——大型项目里,模板字符串、f-string、docstring 里的嵌套语法极易污染 scope 层级,一折就崩。
Ctrl+KCtrl+0Ctrl+KCtrl+1Ctrl+KCtrl+1source.pythonclassdefmeta.class.pythonmeta.function.pythonmeta.importCtrl+Shift+Pshow_scope_namesource.pythonmeta.classmeta.classCtrl+KCtrl+1source.pythonCtrl+KCtrl+1Plain TextPythonfold: true// region#region// regionfold_comments//comment.line.double-slash.jsfoldable: true// region#comment.line.number-sign.python"fold_comments": truefoldable// region utils// endregion#region"fold_by_level": trueCtrl+Shift+PFold Selectionfold_by_levelfold_on_indentSettings – Syntax Specific"fold_by_level": true"fold_on_indent": falsefalsetruedef{
"fold_by_level": true,
"fold_on_indent": true
}"fold_on_indent": false"fold_by_level": true# === Middleware ===Ctrl+KCtrl+2fold_by_leveldefCtrl+KCtrl+1source.pythonsource.python meta.embedded.block.html