Notepad++原生Run菜单无法捕获Lua错误信息,必须使用NppExec插件:安装后执行cd "$(CURRENT_DIRECTORY)" lua "$(FILE_NAME)" $1 $2 $3,保存为Run Lua并勾选Follow console output with caret,才能实现错误行点击跳转。

Notepad++ 原生 Run 菜单根本捕获不到 Lua 错误信息
按 F5 执行 lua "$(FULL_CURRENT_PATH)" 后窗口一闪而过,或者只看到黑窗闪退,错误堆栈根本来不及看——这不是你的脚本问题,是 Notepad++ 的「运行」功能压根不接管 stderr。它只把命令丢给 cmd,然后不管输出去哪。Lua 的语法错误、error() 抛出的异常、attempt to index a nil value 这类运行时错误,全被扔进独立黑窗里,且默认不保留历史。
NppExec 是唯一能真正捕获并跳转 Lua 错误的方案
必须装 NppExec 插件(插件管理 → 安装 NppExec),它能把 stderr 拦截进输出面板,并识别标准 Lua 错误格式(如 test.lua:23: attempt to index a nil value)实现点击跳转。
- 打开「插件 → NppExec → Execute…」,输入:
cd "$(CURRENT_DIRECTORY)" lua "$(FILE_NAME)" $1 $2 $3
其中 $1、$2 是运行时可填的参数占位符;cd 确保相对路径读写正常
- 点 Save 为
Run Lua,再进 Advanced Options → Add to Menu - 务必勾选
Follow console output with caret—— 这是跳转的关键开关 - 错误行必须是 Lua 默认格式(含文件名+冒号+行号+冒号+空格+消息),不能自定义 print 包裹,否则不识别
中文乱码导致错误信息显示为 ▒ 或问号?先解决编码链
即使捕获了错误,若显示 lua: unexpected symbol near '▒',大概率不是语法错,而是 UTF-8 BOM 或控制台编码不匹配:
- Notepad++ 中:菜单 Encoding → Convert to UTF-8(**不是 UTF-8-BOM**),再保存
- 运行命令前加
chcp 65001 &&,即完整写成:chcp 65001 && lua "$(FILE_NAME)" - 确保系统 PATH 中的
lua.exe是官方二进制版(如 luabinaries.org 提供),MinGW 编译版常缺标准库或编码支持
为什么 error("xxx") 在 NppExec 里不显示完整堆栈?
Lua 默认只打印错误消息本身,不带堆栈。想看到调用链,得手动加 debug.traceback():
error(debug.traceback("my custom error"))
但注意:NppExec 输出面板有长度限制,超长堆栈会被截断;如果脚本里用了 pcall 或 xpcall 捕获错误却没重新抛出,错误就真的静默了——NppExec 只能捕获未被捕获的顶层错误。
最易忽略的一点:NppExec 的控制台输出是单次会话绑定的,改完脚本后若没点「Execute」重跑,面板里还是旧输出;它不会自动刷新,也不能回溯历史执行记录。

















