sublime 的“段落选择”实为语法作用域扩展,非空行分隔;ctrl+shift+j 向外扩展作用域但依赖语言模式、光标位置、换行符统一和未折叠;ctrl+shift+a 更适合函数或标签边界选择;纯文本需手动列选择对齐缩进。

Sublime 没有“按段落”概念,所谓“选中当前段落”在代码/结构化文本中,实际是指选中一个语法作用域内的逻辑块(如函数体、if 分支、标签内容、缩进块),不是靠空行或换行符机械切分。
Ctrl+Shift+J 为什么有时只选中一行?
这个快捷键(Windows/Linux)或 Cmd+Shift+J(macOS)本质是“向外扩展当前语法作用域”,不是数缩进空格。它在 Python、JS、YAML 等语言里常表现为选中缩进块,但依赖三个前提:
- 右下角语言模式必须正确(比如写 Python 却显示
Plain Text,Ctrl+Shift+J就会退化为单行) - 光标不能落在注释、字符串、正则字面量或折叠区域内部——这些位置会中断 scope 层级
- 文件不能混用
\r\n和\n,否则语法解析器可能提前终止;用Ctrl+Shift+P→ 输入Convert Line Endings: Unix统一为LF
Ctrl+Shift+A 更适合选函数或标签内容
想选中整个函数定义(含 def 行 + 函数体)或 HTML 标签内全部内容,Ctrl+Shift+A(Windows/Linux)或 Cmd+Shift+A(macOS)比 Ctrl+Shift+J 更可靠——它优先匹配括号或标签边界,再结合作用域判断。
- 光标放在函数任意代码行(别停在
func(|)的括号字符上),按一次选函数体,再按一次可扩展到整个函数(含签名)甚至外层类 - 在 HTML 中,光标落在
<p>hello</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/ai/4078" title="MemoAI"><img src="https://img.php.cn/upload/ai_manual/001/246/273/178599602466610.png" alt="MemoAI" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/ai/4078" title="MemoAI" class="overflowclass">MemoAI</a> <p class="overflowclass">MemoAI是一款AI音视频转写工具,免费的AI语音转文字工具。</p> </div> <a rel="nofollow" href="/ai/4078" title="MemoAI" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>的hello上,按一次选中hello,再按一次选中整个<p>...</p> - 对无括号的单行结构(如
if x: return y),它可能无法识别为可扩展块,此时应退回Ctrl+Shift+J
纯文本或失效时,用列选择手动对齐缩进
当语法作用域不可用(比如日志文件、未配置语法的 .env、手写 Markdown 列表),就放弃智能扩展,走物理缩进路径:
- 把光标移到目标段首行开头,按
Ctrl+L选中该行 - 再按
Ctrl+Shift+L拆成多行光标 - 按
→向右移动,直到所有光标对齐到目标缩进列(如第 4 列) - 按
Ctrl+Shift+↓向下扩展——注意:遇到缩进更浅的行(如else:)会自动停止,这是设计行为,不是 bug - 若段落含空行,
Ctrl+Shift+↓会在空行前停下;此时需先用Ctrl+Shift+P→Indentation: Detect Indentation确保缩进识别准确
最常被忽略的一点:Sublime 的“段落”不是文档意义上的段落,而是语法解析器给出的作用域边界。光标位置、语言模式、换行符类型、是否折叠——四个变量同时影响最终选中范围,改其中任一个都可能让同一快捷键表现完全不同。










