notepad++ 中 coffee 命令失败主因是 path 缺失 %appdata%\npm;应添加该路径至系统环境变量或用绝对路径调用;推荐先编译再 node 执行,并启用 nppexec 的 follow $(current_directory) 以确保路径正确。

Notepad++ 里直接运行 coffee 命令失败的常见原因
不是 CoffeeScript 本身的问题,而是 Notepad++ 启动的 cmd 进程找不到 coffee 可执行文件。Node.js 安装后,coffee 通常以全局 npm 包形式存在,路径不在系统 PATH 中(尤其 Windows 下常被忽略)。你手动在终端里能跑 coffee --version,不代表 Notepad++ 能——它继承的是启动时的环境变量,不是你当前终端的。
验证方法:在 Notepad++ 的 NppExec → Execute…(F6)里输入:
cmd /k echo %PATH% & pause对比你命令行里输出的
PATH,大概率缺了 %APPDATA%\npm 或 %USERPROFILE%\AppData\Roaming\npm。
- 临时解决:在 NppExec 脚本开头加
set PATH=%PATH%;%APPDATA%\npm - 永久解决:把
%APPDATA%\npm加进系统或用户级环境变量PATH,重启 Notepad++ - 更稳妥的做法:不依赖
PATH,直接写绝对路径调用coffee,比如:"C:\Users\Alice\AppData\Roaming\npm\coffee.cmd"
用 NppExec 实现 .coffee 文件一键编译+运行(非解释执行)
CoffeeScript 默认不支持像 Python 那样直接 coffee script.coffee 运行带 I/O 的脚本(尤其含 console.log),容易卡住或窗口一闪而过。推荐先编译成 JS,再用 node 执行——可控、可调试、报错清晰。
在 NppExec 控制台(F6)粘贴以下脚本:
npp_save cd "$(CURRENT_DIRECTORY)" "C:\Users\Alice\AppData\Roaming\npm\coffee.cmd" -c -o "$(CURRENT_DIRECTORY)" "$(FULL_CURRENT_PATH)" npp_console off node "$(NAME_PART).js" pause
-
-c表示编译(compile),-o指定输出目录,避免生成在奇怪位置 -
npp_console off是关键:默认 NppExec 会打开控制台并阻塞,但 Coffee 编译本身不输出到控制台,这句让控制台只在最后node执行时弹出 -
pause留住窗口看输出;若要静默运行,删掉这行即可 - 注意
"$(NAME_PART).js"依赖 Coffee 默认命名规则(foo.coffee→foo.js),别手动改过输出名
快捷键绑定后按下去没反应?检查这三点
绑定完快捷键(比如 Ctrl+F5),按下却无任何反馈,不是插件坏了,而是底层被拦截或条件不满足:
- 当前文件未保存:NppExec 的
$(FULL_CURRENT_PATH)在未保存时为空字符串,命令变成coffee -c -o ... "",直接报错退出且不提示 - 文件后缀不是
.coffee:Notepad++ 不校验后缀,但你的脚本硬写了$(NAME_PART).js,如果当前是test.txt,就会尝试运行test.js——不存在,node报错后窗口立即关闭 - 杀毒软件/Windows Defender 拦截:某些安全软件会静默阻止 Notepad++ 启动
cmd.exe或node.exe,表现为“完全没反应”。临时禁用测试,或把notepad++.exe加入白名单
想边写边看编译结果?别用 F5,用 NppExec 的 “Follow $(CURRENT_DIRECTORY)”
原生 F5 绑定的命令无法感知当前文件类型,也不自动切工作目录。即使你存了 RunCoffee 命令,每次还得手动确认路径。而 NppExec 提供一个隐藏开关:Plugins → NppExec → Follow $(CURRENT_DIRECTORY)。
勾选后,所有后续执行的 NppExec 脚本都自动以当前文件所在目录为工作目录,不用每条脚本都写 cd "$(CURRENT_DIRECTORY)"。这对 CoffeeScript 很重要——因为 coffee -r 加载模块、require('./xxx') 都依赖相对路径正确。
顺带一提:这个选项不影响已保存的脚本内容,只改变执行上下文。所以你之前写的脚本,勾选后就能少两行命令,也更不容易因路径错误导致 Cannot find module。











