必须用nppexec插件才能调试lua脚本:需安装v1.0+版本确保utf-8输出,执行cd "$(current_directory)" lua "$(file_name)" $1 $2 $3,并开启follow console output with caret及function completion,禁用cmd包裹以支持错误行点击跳转。

Notepad++ 用 NppExec 调试 Lua 脚本逻辑
直接用 F5 运行 lua "$(FULL_CURRENT_PATH)" 只能看输出,没法定位错误行、传参、捕获 stderr 或跳转到报错位置——真要调试逻辑,必须用 NppExec 插件。
NppExec 安装后必须验证 UTF-8 输出支持
旧版 NppExec(v0.9x)默认用系统 ANSI 编码解析 stdout/stderr,中文报错如 test.lua:12: 尝试索引 nil 值 会显示乱码或截断,导致无法点击跳转。v1.0+ 才真正支持 UTF-8 输出。
- 插件 → 插件管理 → 搜索
NppExec→ 确认版本 ≥ 1.0(截至 2026 年 9 月最新为 v1.0.4) - 安装完重启 Notepad++,否则插件不加载
- 运行一次简单命令:
echo "测试中文",看输出面板是否正常显示——乱码就说明没生效
调试命令必须带 cd "$(CURRENT_DIRECTORY)"
否则脚本里用 io.open("config.json") 或 require "utils" 会失败,因为 Lua 默认工作目录是 Notepad++ 安装路径,不是你的项目目录。
- 正确写法:
cd "$(CURRENT_DIRECTORY)" lua "$(FILE_NAME)" $1 $2 $3
-
$(FILE_NAME)是当前文件名(不含路径),配合cd才能保证相对路径有效 -
$1 $2 $3是运行时弹窗填入的参数,比如填--verbose data.csv,就会变成lua test.lua --verbose data.csv - 别用
$(FULL_CURRENT_PATH):它带盘符和反斜杠,在 cmd 下容易触发转义问题
错误行点击跳转要手动开启两个开关
NppExec 默认不启用“点击错误行跳转”功能,即使输出是 test.lua:23: attempt to index a nil value,点了也无反应。
- 执行命令后,进
Advanced Options → Add to Menu,勾选Follow console output with caret - 同时确保
Settings → Preferences → MISC. → Enable auto-completion里的 “Function completion” 已启用(影响语法高亮与跳转感知) - 如果仍不跳转,检查 Lua 报错格式是否被重定向:不要在命令末尾加
>&1或2>&1,NppExec 需要原生 stderr 流才能解析行号
最常被忽略的是:NppExec 的“控制台输出跟随光标”和“错误行可点击”是两套独立机制,只开一个没用;而且一旦用了 cmd /k 包裹命令,NppExec 就收不到原始 stderr,跳转必然失效——所以必须用裸 lua 命令,不套 shell。











