关掉 paste_indent 是最稳的第一步:在 Settings–User 中设 "paste_indent": false,使 Ctrl+V 原样粘贴不干预缩进;paste_and_indent 需手动调用且依赖语法识别、光标位置合规;缩进错乱时优先用 Reindent 补救。

关掉 paste_indent 是最稳的第一步
多行粘贴后缩进全塌、空格变 Tab、代码挤到行首——这些问题 90% 都是因为 paste_indent 在强行“按当前行缩进”对齐。它不看源代码结构,只机械套用光标所在行的缩进风格,结果就是把 2 空格的 Python 片段硬塞成 4 空格,甚至把带缩进的 JSON 直接抹平。
直接在 Preferences → Settings – User 中加这一行:
{"paste_indent": false}
注意:paste_indent 和 paste_and_indent 是两个独立开关,关前者不影响后者;关掉它之后,Ctrl+V 就变成“原样搬运”,不再做任何缩进干预。
- 别改 Default 设置,所有修改只写在 User 配置里,否则升级后丢失
- 如果之前设过
"paste_indent": true,删掉或改成false,JSON 格式要合法(末尾不能有逗号) - 关掉后,
Ctrl+Shift+V(Win/Linux)或Cmd+Shift+V(macOS)依然可用,且行为更确定——它完全跳过所有缩进逻辑,只认复制内容开头的空格和 Tab
paste_and_indent 不是默认粘贴,得手动调或绑快捷键
想让 AI 生成的函数体、if 块自动对齐到当前上下文?靠 paste_and_indent,但它不会在 Ctrl+V 时自动触发——它是独立命令,必须显式调用。
两种用法:
- 按
Ctrl+Shift+P→ 输入Paste and Indent→ 回车 - 在
Preferences → Key Bindings – User里加快捷键(推荐):[{"keys": ["ctrl+alt+v"], "command": "paste_and_indent"}]
它生效有硬性前提:
- 右下角显示的是
Python、JavaScript等具体语法,不是Plain Text(点一下手动切,或用Ctrl+Shift+P输入Set Syntax: Python) - 光标必须停在空行开头,或已有代码行的末尾(停在中间第 3 个字符处,它直接静默失败)
- 粘贴内容是纯文本——从网页、LeetCode 复制的内容常带隐藏格式,先中转到记事本再复制一次
粘贴完缩进还是乱?别重来,立刻用 Reindent
哪怕设置全对、快捷键也绑了,历史混用 \t 和空格、少括号、冒号缺失、缩进层级断裂,都会让 paste_and_indent 主动放弃治疗。这时手动补救比反复删重粘快得多。
选中错乱段落,然后:
- 按
Ctrl+Shift+P→ 输入Reindent Lines→ 回车(语义感知最强,会识别 if/def/class 结构) - 或直接选中 → 按
Tab/Shift+Tab批量增减缩进(注意:必须先选中,否则只影响当前行) - 如果菜单项灰掉,说明 Sublime 已检测到混合缩进,先删掉几行开头的
→(Tab 字符)再试
真正容易被忽略的是:Reindent 对已存在的 \t 字符完全无感;状态栏显示 Spaces: 4 只代表“接下来按 Tab 会插 4 个空格”,不代表文件本身干净。
中文乱码和编码问题,别碰状态栏右下角那个“UTF-8”
打开文件显示乱码,点右下角编码名切换没用——那只是告诉 Sublime “用什么编码去读”,不是改文件真实编码,更不会写回磁盘。
正确流程只有两步,缺一不可:
- 先
File → Reopen with Encoding → Chinese (GBK)(或 GB2312/Big5,优先试 GBK)—— 这步是“重新读对” - 确认中文正常显示后,立刻
File → Save with Encoding → UTF-8—— 这步才是“真正转码写入”
如果跳过第一步直接 Save with Encoding → UTF-8,Sublime 会把原本 GBK 编码的字节当 UTF-8 解,再以 UTF-8 写出,结果是双重乱码,基本不可逆。

















