sublime中ctrl+shift+↑/↓仅移动物理行,不识别缩进层级;安全移动代码块需先折叠再拖动;列选择(alt+拖拽)可精准对齐缩进;ctrl+d默认全词匹配易误选字符串和注释;禁用drag_text才能启用ctrl+click加光标。

Ctrl+Shift+↑/↓ 是移动行,不是移动代码块
Sublime 没有原生“移动 if 块”或“拖函数体”的能力,move_line_up 和 move_line_down 命令只操作物理行。你看到的“块移动”效果,本质是多行插入 + 折叠配合的结果。
常见误操作:选中 5 行后按 Ctrl+Shift+↓,结果整段被插到下一段中间,缩进错乱、逻辑断裂——因为命令不识别缩进层级,也不自动调整空格。
- 想安全移动一个缩进对齐的代码块(如 Python 的
if分支、JS 的for循环体),必须先折叠:光标放在首行 →Ctrl+Shift+[→ 拖动折叠标题行 →Ctrl+Shift+]展开 - 折叠失败?检查
View → Syntax是否匹配当前语言;自定义语法或未加载高亮时,fold_rules可能不生效 - 快捷键无反应?大概率是输入法(如搜狗、微软拼音)劫持了
Ctrl+Shift+↑,切英文输入法再试
列选择(Alt+拖拽)才是对齐缩进的关键
多光标本身不处理缩进对齐,但列选择可以精准控制每行的起始编辑位置。比如要把 8 行代码统一右移 4 个空格,用 Ctrl+Shift+L 拆光标后直接按 Tab,结果可能有的行缩进变 2 格、有的变 6 格——因为光标落在了不同缩进层级上。
正确做法是用列选择把所有行的缩进起点对齐:
- 按住
Alt(Windows/Linux)或Option(macOS),从第一行缩进开头垂直拖到最后一行对应列 - 松手后直接输入 4 个空格(或按一次
Tab),所有行在相同列位置同步添加 - 若鼠标拖不动,可能是远程桌面拦截了
Alt键,改用命令面板:Ctrl+Shift+P→ 输入Column Selection手动启用
Ctrl+D 重命名变量时,缩进和注释会连带污染
想批量修改 user_id 变量名,双击选中后狂按 Ctrl+D,结果字符串 "user_id" 和注释 # user_id is required 全被选中——这不是 bug,是默认「完整单词匹配」规则在起作用。
它不区分上下文,只认字面一致 + 边界(\b)。一旦误选,回车或退格就会破坏字符串完整性。
- 安全做法:先用
Ctrl+F搜索\buser_id\b(勾选正则模式),确认只有目标变量被高亮 - 跳过某处匹配:按
Ctrl+K,再按Ctrl+D,当前项被忽略,光标保留在原位 - 大小写敏感?按
Ctrl+Alt+R切换开关,避免USER_ID和user_id混在一起
drag_text = false 是 Ctrl+Click 加光标的前提
按住 Ctrl 点击没反应,甚至拖动了文本——不是快捷键失效,而是 Sublime 默认开启了 drag_text,系统优先执行拖动而非加光标。
这个设置极其隐蔽,且不会在默认设置里显示,必须手动关掉:
- 打开
Preferences → Settings - 在右侧用户设置中添加一行:
"drag_text": false - 保存后,
Ctrl+Click才真正变成“加光标”,而不是“拖文本”
点位置也有讲究:避免点在单词中间、缩进空格边缘或空行末尾;优先点行首空白区或行尾换行符前——那里最稳定。











