notepad++ 中 python 缩进需严格设为 4 空格且禁用 tab:勾选语言专属“replace by space”、取消 default 下同名选项;xml/json 格式化须装专用插件;缩进功能依赖右下角语言模式识别,否则退化为机械空格操作。

Python 必须手动设空格缩进,否则运行报错
Notepad++ 默认按 Tab 插入 \t 字符,而 Python 要求用空格缩进——混用会直接触发 IndentationError: unindent does not match any outer indentation level。这不是提示,是运行时崩溃。
- 路径:设置 → 首选项 → 语言 → 找到
Python→ 勾选Replace by space,并把Tab size设为4 - 关键点:
Default项下的Replace by space必须取消勾选,否则所有语言(如 Makefile)都会被强制转空格,破坏语法 - 改完后,已打开的
.py文件不会自动生效,需右键状态栏语言名 → 选Python切换一次,或重新打开文件
XML/JSON 格式化不能靠“Reindent”,得装插件
Reindent 插件只重算每行缩进量,对 XML/JSON 完全无效:不拆单行标签、不换行、不校验语法。Ctrl+Shift+F 对 JSON 有基础效果,但对 XML 静默失败。
- XML:装
XML Tools插件 → 重启 → 使用Pretty Print (with indentation) - JSON:Ctrl+Shift+F 可用,但前提是代码合法——含注释或尾随逗号会静默失败;不报错,也不格式化
- 缩进宽度由
XML Tools → Set indentation width单独控制,和编辑器全局制表符宽度无关
多行缩进只认选区,不认语法结构
选中几行按 Tab 或 Shift+Tab 是纯机械操作:加/删前导空白,不分析 if 块或 def 函数体。它甚至不管你是写 Python 还是写 Markdown。
- 没反应?大概率没真正选中——光标在单行时按
Tab只动当前行 - 缩进错位?先执行
Edit → Blank Operations → Trim Trailing Space清掉行尾空格和混合换行符 - 单位不对?去
设置 → 首选项 → 编辑器 → 制表符设置,确保Replace by space勾选,且Tab size和Indent size数值一致(推荐都设4)
语言模式不匹配,所有缩进功能集体失效
右下角状态栏显示 Normal text 时,自动缩进、Ctrl+I、Reindent 全部退化为“空格搬运工”——只数空格数,不识别语义。这是最常被忽略的根源。
- 新建无后缀文件或自定义扩展名(如
.env),必须右键状态栏 → 手动选对语言 - 确认
Python模式已启用:不是只靠文件后缀,而是看状态栏实时显示 - 插件如
Python Indent或NppAutoIndent的Smart Indent模式,也完全依赖这个识别结果
Replace by space 和 Tab size、编辑器页的全局制表符设置。改错一个,整段代码就“看起来不对”。











