Notepad++原生不支持Ada一键运行,必须用NppExec插件配合GNAT环境;F5仅弹窗且无效,需先验证gnat --version是否输出版本号,再配置含cd、gnatmake及PAUSE的脚本,并确保路径全英文无空格。

Notepad++ 本身不支持 Ada 一键运行,必须通过 NppExec 插件 + 正确配置 GNAT 环境才能实现;原生 F5 会弹窗、不保存、不识别文件类型,直接按 F5 是无效的。
如何确认 GNAT 已正确安装并可用
GNAT 是 Ada 的标准编译器,Notepad++ 不自带也不感知它。必须先在系统级验证其可用性,否则后续所有脚本都会静默失败。
- 打开命令行(cmd 或 PowerShell),执行
gnat --version—— 应输出类似GNAT 12.2.0的版本信息 - 若提示“不是内部或外部命令”,说明 GNAT 未装或未加入
PATH:Linux 用户需安装gcc-ada,Windows 用户推荐安装libregeode(含完整 GNAT 工具链) - 验证
gnatmake和gnatbind是否可调用,Ada 构建常依赖这两个命令,仅靠gnat --version不足以保证编译流程通路
NppExec 中配置 Ada 编译运行脚本的关键点
不能复用 C/C++ 的 gcc 脚本模板,Ada 的编译模型(spec/body 分离、依赖自动解析)决定了命令结构完全不同。
- 基础编译命令应为:
cd "$(CURRENT_DIRECTORY)" & gnatmake -P "$NAME_PART"(适用于带 .gpr 项目文件的工程) - 若为单文件(如
hello.adb),用:cd "$(CURRENT_DIRECTORY)" & gnatmake "$NAME_PART"—— 注意不加扩展名,gnatmake会自动找.adb和对应.ads - 必须加
& PAUSE结尾,否则控制台一闪而过,看不到错误(如missing body for package XYZ) - 不要用
gnat make(空格分隔),GNAT 12+ 默认不认这个写法;gnatmake是稳定入口
working_dir 含中文或空格会导致静默失败
这是最常被忽略的坑:NppExec 的 $(CURRENT_DIRECTORY) 变量会原样代入路径,而 GNAT 对非 ASCII 字符和空格极其敏感,不报错、不提示、直接跳过编译。
- 测试方法:把
hello.adb放进C:\ada\test\运行成功,再挪到C:\我的Ada项目\就失败 - 临时规避:在脚本开头加一行
echo $(CURRENT_DIRECTORY),确认输出路径是否干净 - 长期解法:所有 Ada 项目路径只用英文、下划线、短横线,避免空格、括号、中文
为什么无法像 GNAT Studio 那样跳转 spec/body 或补全
NppExec 只是调用外部命令,Notepad++ 本身没有 Ada 语法索引能力,也无 AST 解析支持。
- 补全、跳转、hover 提示等功能完全缺失,
Ctrl+Click在with Text_IO;上无效 - 错误定位靠
file_regex匹配输出,但 GNAT 默认错误格式(如hello.adb:5:07: missing "end loop;")与 NppExec 内置正则不完全兼容,需手动调整脚本中的file_regex规则才能双击跳转 - 真需要语义功能,请用
gnatstudio;Notepad++ 定位就是轻量编辑+快速触发编译,别对它要求 IDE 级能力
路径里有中文、空格、括号,或者没装 gnatmake 而只装了 gnat 命令本身,这两点踩中任意一个,F5 就等于白按。


















