Sublime Text 无法支持 Kotlin 跨平台开发,因其不解析 Gradle 多平台 DSL、不加载 android()/jvm()/js() 块,也无法触发 ./gradlew desktop:run 等复合任务,仅能作为带语法高亮的终端前置编辑器。

Sublime Text 无法直接支持 Kotlin 跨平台开发——它不解析 Gradle 多平台 DSL、不加载 build.gradle.kts 中的 android()/jvm()/js() 块,更不会触发 ./gradlew desktop:run 这类复合任务。所谓“强化集成”,本质是把 Sublime 当作一个带语法高亮和快捷键绑定的终端前置编辑器,核心逻辑必须交给 Gradle 和命令行。
为什么不能靠 Build System 跑 KMP 项目
Sublime 的 Build System 是单文件级执行器,而 Kotlin Multiplatform(KMP)项目依赖:
• 全局 settings.gradle.kts 声明模块与插件仓库
• 每个模块的 build.gradle.kts 中定义多目标源集(commonMain, androidMain, jsMain 等)
• Gradle 守护进程管理依赖下载、编译缓存、增量构建
• ./gradlew 脚本封装 JVM 参数、版本校验和环境隔离
你用 Build System 直接调 kotlinc 只能编译单个 .kt 文件,对 expect/actual、@Composable 或 actual fun platformName(): String 这类跨平台结构完全无感知,报错信息也只会停留在语法层,不涉及平台兼容性或源集可见性问题。
真正可用的 Gradle 集成方式:终端 + 快捷键绑定
放弃在 Sublime 内部“模拟 IDE 构建”,转而用快捷键快速唤起终端并执行预设 Gradle 任务:
- 安装
Terminus插件(通过 Package Control),它支持在 Sublime 内嵌终端,且可绑定到任意快捷键 - 在
Preferences → Package Settings → Terminus → Settings中添加常用任务 alias:
{
"shell_configs": [
{
"name": "Gradle Desktop Run",
"cmd": ["./gradlew", "desktop:run"],
"working_dir": "${project_path:${folder}}"
},
{
"name": "Kotlin JS Dev Server",
"cmd": ["./gradlew", "jsBrowserDevelopmentRun"],
"working_dir": "${project_path:${folder}}"
}
]
}
然后按 Ctrl+Shift+P → 输入 Terminus: Open Default Shell in Panel,再用快捷键切换不同配置。关键点:
• ${project_path:${folder}} 确保命令在项目根目录执行,否则 ./gradlew 找不到脚本
• 不要写死绝对路径,KMP 项目常需在不同机器 clone 后直接运行
• desktop:run 依赖 compose-jb 插件已声明,Sublime 不验证该前提,失败时只显示 Gradle 报错
语法检查只能靠 ktlint CLI + LSP,不是插件自动扫描
社区 Kotlin 插件(如 Kotlin 或 LanguageKotlin)只做语法着色,不提供语义检查。要获得类似 Android Studio 的实时 lint 提示,必须走标准链路:
- 确保本地装有
ktlintCLI(推荐用 SDKMAN! 安装:sdk install ktlint) - 安装
LSP插件,再手动配置ktlint作为 Kotlin 语言服务器(非 jdtls) - 在
LSP.sublime-settings的clients下添加:
"ktlint": {
"command": ["ktlint"],
"enabled": true,
"languageId": "kotlin",
"scopes": ["source.kotlin"],
"syntaxes": ["Packages/Kotlin/Kotlin.sublime-syntax"],
"initializationOptions": {
"ruleset": ["standard"]
}
}
注意:
• ktlint 默认不检查 .kts 脚本文件,若需支持,得加参数 --editorconfig 并配 .editorconfig
• LSP 不会自动识别 buildSrc 或 gradle/plugins 下的 Kotlin 代码,那些文件需单独打开并确认右下角语言模式为 Kotlin
• 错误定位依赖 file_regex 匹配,ktlint 输出格式变动时(如 v12+ 改用 JSON),此处需同步更新正则表达式
别碰 Compose Preview 和 multiplatform 依赖跳转
所有声称“Sublime 支持 Compose Preview”的方案,最终都只是渲染一个空白窗口或抛出 java.lang.NoClassDefFoundError: androidx/compose/runtime/Composer。原因很直接:
• Preview 渲染需要完整的 Compose Runtime + Skia 后端 + JVM 图形栈,Sublime 没有启动 JVM 进程的能力
• 依赖跳转(如 Ctrl+Click 进入 androidx.compose.ui:ui 源码)依赖 Gradle 解析出的 .jar 路径和 sources.jar 映射,LSP 客户端无法从 build.gradle.kts 动态提取这些信息
• 即使你手动把 ~/.gradle/caches/modules-2/files-2.1/... 路径加进 LSP 的 initializationOptions.classpath,也无法解决符号解析所需的 AST 构建阶段
这类功能不是配置缺失,而是架构不可行。如果你频繁需要看 Preview 或跳转 Android/iOS 平台实现,Sublime 就不该是主力编辑器——它连 android() 块里的 minSdk 参数变更都检测不到,更别说联动 AAPT2 或 Xcode 工具链。

















