Sublime配置Kotlin脚本运行环境_Sublime编写Kotlin程序设置
Sublime文本编辑器运行Kotlin脚本需借助外部Kotlin命令。脚本文件须置于纯英文路径下,通过shell命令调用,并指定Java虚拟机编码参数为UTF-8以解决中文乱码。注意点kts脚本文件使用顶层表达式而非主函数,且需区分脚本与编译环境的构建系统配置。
Sublime Text 本身不直接支持运行 Kotlin 脚本(.kts),这确实是个小遗憾。抱歉,必须借助外部工具——通过 kotlinc-jvm 或 kotlin 命令配合 Build System 来实现。不过这里有个关键点:新版 Kotlin(≥1.9)已经弃用了 kotlinc 的脚本模式,kotlin 命令才是专门为 .kts 设计的解释器。很多人卡在这个地方,就是因为用错了命令。
确认系统已装对命令:kotlin 而非 kotlinc
最常见的误区是以为 kotlinc 能跑 .kts 文件。实际上,kotlinc 只编译 .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 命令能跑通,中文字符串打印成 ??? 或者抛 ja va.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再ja va。新版已经不支持-script参数了。

最容易被忽略的,其实是 .kts 和 .kt 的根本差异:前者是脚本,后者是编译单元。在 Sublime 里,一个 Build System 无法同时正确处理两者。必须分开建两个文件(KotlinScript.sublime-build 和 Kotlin.sublime-build),并且 selector 分别设为 source.kotlin.script 和 source.kotlin。否则,插件识别不准时,连语法高亮都会错位。


































