tab/shift+tab直接缩进多行,不依赖语言模式;ctrl+i/ctrl+shift+i按语言规则智能缩进,需正确语言模式;自动缩进关闭后仍缩进,多因语言识别错误或第三方插件;ctrl+shift+f仅格式化json,xml需插件。

Tab 和 Shift+Tab 是最直接的缩进控制方式
选中多行代码后按 Tab,整块内容向右缩进一级;按 Shift+Tab 则向左退格一级。这个行为不依赖语言模式,也不受“自动缩进”开关影响,是编辑器底层基础操作。
常见错误现象:按了 Tab 没反应——大概率是没选中任何文本,或光标在行首但未触发多行选择;也可能是键盘被系统级快捷键劫持(比如某些输入法或远程桌面工具会拦截 Tab)。
- 只对已选中文本生效,单行无选中时按
Tab仅插入制表符 - 缩进宽度由当前语言设置决定(如 Python 默认 4 空格,XML 可能用 Tab 字符)
- 若启用了“将制表符替换为空格”,
Tab实际插入的是空格,但视觉效果一致
Ctrl+I 和 Ctrl+Shift+I 按语言规则智能缩进
Ctrl+I 对当前光标所在行执行语言感知缩进(比如 Python 下补全冒号后的 4 空格,JS 中匹配大括号层级);Ctrl+Shift+I 是反向操作,尝试还原到逻辑上一层缩进。
这个功能和“自动缩进”开关无关,但严重依赖右下角状态栏显示的语言模式。写 JSON 却被识别为 Text,Ctrl+I 就不会按 JSON 规则处理。
- 必须确保文件有正确扩展名(如
.py、.js),或手动在“语言”菜单中指定 - 对非结构化文本(如纯日志、配置片段)效果有限,可能不做任何改动
- 在 YAML 或 Python 中频繁误缩进,先检查是否启用了“显示空白字符”(
View → Show Symbol → Show White Space and TAB)来确认实际缩进类型
为什么关了“自动缩进”还缩进?排查两个关键点
关闭“设置→首选项→其他→自动缩进”后仍出现意外缩进,基本逃不出这两个原因:
- 右下角语言模式错误:比如写 Python 脚本但状态栏显示
Normal text,部分插件或旧版语法高亮模块会绕过主开关自行触发缩进 - 装了
NppAutoIndent或NppAStyle类插件:它们完全独立运行,开关位置在“插件→NppAutoIndent→Settings”之类路径,和内置选项互不影响
验证方法:新建空白文件 → 确认状态栏是 Normal text → 输入 if (x) { 回车。如果此时仍缩进,说明插件在起作用;没缩进,则主开关已生效。
别指望自动缩进处理 XML/JSON 格式化
Ctrl+Shift+F 是 JSON 格式化专用快捷键,它调用的是内部 JSON 解析器,和“自动缩进”开关毫无关系。但它对 XML 完全无效——不是 bug,是设计如此。
想格式化 XML,得用插件(如 XML Tools)或外部工具(如 xmllint)。很多人误以为关掉自动缩进会影响这个快捷键,其实只是混淆了“实时输入补缩进”和“全文档结构重排”两种完全不同机制。
真正容易被忽略的是:所有缩进类快捷键(包括 Tab、Ctrl+I)都只处理可见字符位置,不校验语法合法性。缩进再整齐,括号不匹配照样报错。











