notepad++无法直接运行smalltalk,只能通过nppexec调用pharo cli执行脚本;必须指定镜像路径、使用--eval或--script参数,并确保脚本为合法表达式或适配无头模式,否则会因路径、编码、缓冲或gui依赖等问题失败。

Pharo 脚本无法被 pharo.exe 直接执行?必须用 --no-quit --eval
Pharo 不像 Python 那样能直接运行 .st 文件:pharo image.st script.st 是无效命令。Pharo 启动时默认加载镜像(.image),脚本需通过 --eval 参数注入表达式,或用 --no-quit 防止立即退出。
- 正确写法(推荐):
pharo "$(CURRENT_DIRECTORY)\your.image" --no-quit --eval "$(FULL_CURRENT_PATH)"——但前提是你的 .st 文件内容是合法的 Smalltalk 表达式(如'Hello' printNl.),且不含类定义或方法编译逻辑 - 更稳妥的做法:把脚本内容封装成可执行 block,例如
[ 'Hello world' printNl ] value.,否则--eval会因语法错误中止 - 如果脚本含多行、类定义或需要访问 IDE 环境,
--eval不适用,必须改用--script模式(仅 Pharo 10+ 支持),命令为:pharo "$(CURRENT_DIRECTORY)\your.image" --script "$(FULL_CURRENT_PATH)" -
$(CURRENT_DIRECTORY)必须与 .image 文件同目录,否则 Pharo 找不到镜像;不能只写pharo your.image—— Notepad++ 不继承 CMD 的当前路径,必须显式指定完整路径
Smalltalk 脚本里 Transcript show: 没输出?终端编码和缓冲是关键
Pharo 默认将 Transcript show: 输出重定向到图形界面的 Transcript 窗口,命令行下不可见;若你期望控制台打印,得改用 Stdout print: ...; cr.,且需确保终端支持 UTF-8。
ArcGIS for Android SDK 目前最新版本为10.2.5 从此版本开始ESRI不在提供Eclipse的插件支持,官方的帮助也针对于Android Studio的支持;本文档主要讲述的内容是最新版本ArcGIS For Android Eclipse环境配置;感兴趣的朋友可以过来看看
- 在 NppExec 命令前加
cmd /c chcp 65001 >nul &&,否则中文会变成\xe4\xbd\xa0类似乱码 - Pharo 启动后可能有 1–2 秒延迟才真正 ready,直接
--eval可能报错UndefinedObject>>doesNotUnderstand:—— 加--no-quit并在脚本末尾加Delay waitForSeconds: 0.5.可缓解 - 避免在脚本中调用
World doOneCycle或 GUI 相关方法,它们依赖图形环境,在无头模式下会 crash
为什么 $(FILE_NAME) 会导致 File not found?路径变量必须匹配 Smalltalk 加载逻辑
Smalltalk 镜像启动后,当前工作目录默认是镜像所在目录,不是脚本所在目录。如果你在脚本里用 FileStream fileIn: 'config.st',它会去镜像目录下找 config.st,而不是脚本目录。
- 永远用
$(FULL_CURRENT_PATH)传给--eval或--script,它提供完整路径,避免空格/中文路径被截断 - 不要用
$(FILE_NAME)或$(NAME_PART)—— 它们不含路径,Pharo 根本不知道你在哪打开的文件 - 若脚本需读取同目录其他文件(如 JSON、CSV),应在脚本内用
FileLocator home child: 'data.csv'或显式拼接:FileLocator imageDirectory parent / 'data.csv' - Pharo 10+ 支持
FileLocator workingDirectory,但该目录由启动命令的cd决定,Notepad++ 不自动切换,所以最稳的方式仍是把所有依赖文件放在镜像同目录
Squeak 或 GemStone 能否同样配置?路径和参数差异极大
不能复用 Pharo 的命令模板。Squeak 启动命令是 Squeak.exe your.image,没有 --script 参数;GemStone 是服务型架构,根本不适合“一键运行单文件”场景。
- Squeak:只能靠修改 .image 启动脚本(MainApp class>>#startUp),或使用
--no-user-display+ 自定义startup方法,复杂度远高于 Pharo - GemStone:需先启动
gs64bitserver,再用topazclient 连接执行,Notepad++ 无法完成端到端流程 - 结论:只有 Pharo(v9+)具备较合理的 CLI 脚本支持;其他 Smalltalk 实现要么不维护 CLI,要么文档缺失,强行配置大概率卡在权限、路径或版本兼容上
pharo-launcher 管理镜像,再在 Notepad++ 中严格绑定镜像路径与脚本路径——少一步,就多一个 MessageNotUnderstood。










