Notepad++原生F5不支持传参,需用NppExec插件实现:输入chcp 65001 >nul && cd "$(CURRENT_DIRECTORY)" && lua "$(FILE_NAME)" $1 $2 $3,保存为Run Lua并勾选Follow console output with caret。

Notepad++ 本身不支持 F5 直接传参给 Lua 脚本
按下 F5 调用 Run → Run… 时,$(FULL_CURRENT_PATH) 是唯一可用的内置变量,没有预留参数占位符。你写 lua "$(FULL_CURRENT_PATH)" --debug,--debug 会被 cmd 当作字面字符串传给 lua.exe,但 lua.exe 只认第一个参数为脚本路径,其余全被丢弃——除非你手动改写命令逻辑,否则参数根本进不到 Lua 里。
常见错误现象:
- 控制台一闪而过,没报错也没输出
-
print(arg)打印出空表或只有[0](即脚本名) - 脚本里用
arg[1]拿不到任何值
NppExec 是唯一靠谱的带参执行方案
它提供 $1、$2、$3 这类运行时弹窗输入的参数占位符,且能原样拼接到命令行中,Lua 解释器能正常接收。
实操步骤:
- 插件 → 插件管理 → 安装
NppExec(确保版本 ≥1.0,旧版不支持 UTF-8 输出) - 插件 →
NppExec→Execute…,输入以下内容:
chcp 65001 >nul && cd "$(CURRENT_DIRECTORY)" && lua "$(FILE_NAME)" $1 $2 $3
- 点击
Save…,命名为Run Lua - 进
Advanced Options → Add to Menu,勾选Follow console output with caret
这样每次运行都会弹窗让你填 、、,比如输入 --verbose data.json,最终执行的就是 lua test.lua --verbose data.json。
为什么不能直接用绝对路径写死 lua.exe?
硬编码路径如 "C:\tools\lua\lua.exe" 看似稳妥,但会带来三个实际问题:
- 升级 Lua 版本(比如从 5.4.6 换到 5.4.7)后,必须手动改所有配置,容易遗漏
- 团队协作时路径不一致,别人 clone 项目后无法直接运行
- 若路径含中文或空格,又没加双引号包裹,
NppExec会解析失败,报The system cannot find the file specified
正确做法是:只装好 lua.exe 并加入系统 PATH,然后在 NppExec 命令里直接写 lua——靠环境变量解耦,才是长期可维护的方式。
中文参数和文件名仍可能崩溃?检查这三处
即使用了 NppExec,带中文的参数或相对路径读写仍可能失败,不是 Lua 的锅,而是 Windows API 层级限制:
-
io.open("配置.txt", "r")失败?确认系统区域设置里已启用Beta: 使用 Unicode UTF-8 提供全球语言支持(Win10/11 设置 → 时间和语言 → 区域 → 管理 → 更改系统区域设置) - 参数里有中文却显示乱码或截断?确保 Notepad++ 文件本身是
UTF-8(非UTF-8-BOM),右下角状态栏应显示「UTF-8」且无 BOM 标识 - 弹窗填入的中文参数在控制台变成方块?在 NppExec 命令开头加
chcp 65001 >nul &&,强制控制台切到 UTF-8 编码
真正卡住人的,从来不是“怎么传参”,而是传进去之后,Lua 脚本里 arg 拿到的是乱码字节、相对路径打不开同目录文件、或者错误堆栈点不了跳转——这些细节不逐个对齐,带参运行就只是看起来能跑而已。

















