Sublime Text 不支持直接运行 Kotlin 脚本(.kts),需通过 Build System 调用官方 kotlin 命令(非 kotlinc),并确保路径无空格、JVM 指定 -J-Dfile.encoding=UTF-8、脚本使用顶层表达式而非 fun main(),且须区分 .kts 与 .kt 的独立构建配置。

Sublime Text 本身不支持直接运行 Kotlin 脚本(.kts),必须靠外部 kotlinc-jvm 或 kotlin 命令配合 Build System 实现;但要注意:新版 Kotlin(≥1.9)已弃用 kotlinc 的脚本模式,kotlin 命令才是专为 .kts 设计的解释器——很多人卡在用错命令上。
确认系统已装对命令:kotlin 而非 kotlinc
很多人误以为 kotlinc 能跑 .kts 文件,其实它只编译 .kt。真正用于脚本的是独立的 kotlin 可执行文件(随 Kotlin CLI 一起安装,不是别名或软链):
- 终端执行
kotlin -version,必须有输出(如Kotlin version 1.9.24);若报command not found,说明没装完整版 Kotlin CLI,或 PATH 没包含其bin/目录 -
kotlinc -version和kotlin -version应该都可用,但用途不同:kotlinc编译.kt→.jar,kotlin直接执行.kts - Homebrew 安装的
kotlin(brew install kotlin)常缺kotlin命令,只带kotlinc;推荐从 GitHub Releases 下载官方 ZIP 包并手动配置 PATH
Build System 必须用 shell_cmd 调 kotlin,且路径不能含空格或中文
Sublime 默认调用 CMD(Windows)或 sh(macOS/Linux),而 kotlin 脚本对路径敏感,尤其 Windows 下空格和中文会直接中断执行:
- 把
.kts文件放在纯英文、无空格路径下,例如D:kthello.kts或~/dev/kt/hello.kts - Build System 配置中必须用
shell_cmd(不是cmd),否则&&、引号等 shell 特性不生效 - Windows 用户若用 PowerShell,需显式加
pwsh -c前缀;更稳妥做法是改用cmd /c并确保双引号包裹路径:"shell_cmd": "cmd /c "kotlin \"$file\""" - macOS/Linux 用户注意 shell 类型,Sublime 默认用
sh,某些kotlin脚本依赖bash特性,可改写为bash -c "kotlin '$file'"
.kts 文件里不能写 fun main(),得用顶层表达式或 @file:JvmName
Kotlin 脚本(.kts)不是普通 Kotlin 源码,它默认执行文件内顶层代码,不走 main 入口。强行写 fun main() 不报错但不会执行:
- 正确写法是直接写可执行语句,比如:
println("Hello from .kts!") - 如果想复用
.kt里的main函数逻辑,可以用@file:JvmName("ScriptMain")+fun main(),但必须配合-J-Dkotlin.scripting.enableExperimental=true启动参数,且 Sublime Build System 中要显式加上 - 常见错误现象:Build 成功但无输出——大概率是写了
fun main()却没触发,或脚本里用了未声明的变量(.kts不自动导入kotlin.io.*等)
编码与 JVM 参数容易被忽略,尤其中文输出乱码
即使 kotlin 命令能跑通,中文字符串打印成 ??? 或抛 java.nio.charset.MalformedInputException 是高频问题,根源在 JVM 默认编码不是 UTF-8:
- Windows CMD 默认编码是 GBK,
kotlin进程会继承它,导致读取 UTF-8 编码的.kts文件失败 - 解决方法是在 Build System 的
shell_cmd中显式指定 JVM 参数:kotlin -J-Dfile.encoding=UTF-8 "$file" - macOS/Linux 用户若用 zsh/bash,还需确认终端
locale输出含UTF-8,否则kotlin可能仍按 locale 解码源文件 - 额外提示:不要在 Build System 里混用
kotlinc和kotlin命令逻辑,比如先kotlinc -script再java,新版已不支持-script参数
最易被忽略的其实是 .kts 和 .kt 的根本差异:前者是脚本,后者是编译单元;Sublime 里一个 Build System 无法同时正确处理两者,必须分开建两个文件(KotlinScript.sublime-build 和 Kotlin.sublime-build),且 selector 分别设为 source.kotlin.script 和 source.kotlin——插件识别不准时,连语法高亮都会错位。

















