kotlinc -script 是唯一靠谱的脚本运行方式,因其专为 .kts 文件设计,跳过编译与类加载,直接解析执行顶层代码和 fun main(),且官方仅此支持;其他方式如普通 kotlinc 编译会失败。

Sublime Text 不能直接运行 Kotlin 脚本,必须靠 kotlinc -script 命令驱动,且仅适用于无依赖的单文件 .kts 场景——它不走编译+jar流程,也不加载 Gradle 或 classpath。
为什么 kotlinc -script 是唯一靠谱的脚本运行方式
Sublime 的 Build System 本质是命令行封装,而 Kotlin 官方对脚本的支持只通过 kotlinc -script 提供。它跳过 JVM 类加载和 jar 打包环节,直接解析执行顶层表达式和 fun main()(Kotlin 1.6+ 允许无参形式)。用 kotlinc 编译 .kts 文件会失败,因为 .kts 不是标准 Kotlin 源码,语法和解析器都不同。
-
kotlinc -script只接受.kts后缀,对.kt文件静默忽略或报错 - 不生成任何中间文件(
.class或.jar),适合快速验证逻辑 - 无法导入本地模块、Maven 依赖或
build.gradle.kts中定义的配置 - Windows 下若
kotlinc.bat路径含空格,必须用双引号包裹整个命令,否则截断
kotlinc -script 构建系统怎么写才不报错
网上很多示例把 cmd 和 shell_cmd 混用,导致变量不展开、空格崩坏、Windows 下静默失败。正确做法是统一用 shell_cmd,并显式处理路径和引号。
- macOS/Linux 示例:
"shell_cmd": "kotlinc -script "$file""——$file必须加双引号,否则含空格路径直接中断 - Windows 示例:
"shell_cmd": "kotlinc -script "${file}""——${file}更稳定,避免 CMD 对$的误解析 -
file_regex推荐用"^.*:(\d+):(?:\d+:)?\s*(.*)$",匹配kotlinc -script报错格式(如hello.kts:3:1: Unresolved reference: println) -
selector必须设为"source.kotlin",但注意:Sublime 默认不把.kts关联到 Kotlin 语法 —— 需手动点右下角语言名 →Open all with current extension as → Kotlin
常见失败现象和对应解法
即使构建系统写对了,kotlinc -script 仍可能卡在环境或语法细节上,错误信息通常只在 Sublime 底部面板里显示一行,得点开看全。
-
command not found: kotlinc:不是 Sublime 配置问题,是终端里也跑不通kotlinc -version—— 检查 PATH 是否包含kotlinc/bin,Windows 用户改完 PATH 后必须重启 Sublime -
error: script file not found:多半因$file展开为空,确认文件已保存(未命名的临时标签不会触发$file) -
Unresolved reference: ...:脚本里用了import但没配-classpath,kotlinc -script默认不扫描当前目录,需手动加-classpath . -
Script failed to compile:脚本里写了class或package——.kts文件只支持顶层声明,所有代码必须平铺在文件根部
真正麻烦的从来不是 JSON 怎么写,而是 kotlinc -script 的行为边界:它不读 gradle.properties,不认 expect/actual,连 @JvmStatic 都会报错。想跑复杂逻辑,不如直接切到终端敲 ./gradlew run。

















