swift语法高亮需安装官方swift-sublime-syntax插件并手动设置语法;脚本执行须用#!/usr/bin/env swift、chmod +x赋权,并自定义swift-script构建系统;gui代码需编译为app或用swiftc生成二进制。

Swift 语法高亮在 Sublime Text 中不生效?先确认是否装对了插件
Sublime Text 默认不带 Swift 支持,必须手动安装语法定义包。很多人装了 Swift 插件但高亮仍无效,常见原因是装成了旧版(如 Swift Package Manager 或 SwiftX 这类非语法包),或者没重启 Sublime。
- 推荐安装官方维护的
Swift语法包:通过 Package Control 搜索并安装Swift(作者是sublimelsp团队,GitHub 仓库名是swift-sublime-syntax) - 安装后需手动设置语法:打开一个
.swift文件 → 右下角点击当前语法名(如Plain Text)→ 选择Swift - 若仍不生效,检查
Preferences > Settings – Syntax Specific是否误加了"syntax": "Packages/Text/Plain text.tmLanguage"这类覆盖项
写 macOS 应用脚本时,#!/usr/bin/swift 不执行?路径和权限是关键
Sublime 能高亮 Swift 脚本,但直接运行失败很常见。根本原因不是编辑器问题,而是系统级配置没到位。
-
#!/usr/bin/swift在 macOS 上已弃用 —— 自 Xcode 12 起,系统不再预装/usr/bin/swift,实际路径通常是/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift - 脚本首行建议改用
#!/usr/bin/env swift,它会按$PATH查找(确保swift在 PATH 中:运行which swift验证) - 必须给脚本加可执行权限:
chmod +x script.swift,否则双击或终端执行都会报Permission denied - 如果用 Sublime 的
Build System运行,需自定义 build 文件,不能依赖默认Swift构建系统(它只支持编译工程,不支持脚本解释执行)
想在 Sublime 里一键运行 Swift 脚本?自己配个 swift-script Build System
Sublime 自带的 Swift Build System 是为编译 Xcode 工程设计的,对单文件脚本完全不适用。你需要一个轻量、直调 swift 解释器的配置。
- 菜单栏 →
Tools > Build System > New Build System...,粘贴以下内容:
{
"cmd": ["swift", "$file"],
"selector": "source.swift",
"file_regex": "^(.*?):([0-9]+):([0-9]+):(?: ([a-z]+):)? (.*)$",
"working_dir": "$file_path"
}
- 保存为
swift-script.sublime-build(放在~/Library/Application Support/Sublime Text/Packages/User/) - 之后打开
.swift文件 →Tools > Build System > swift-script→Cmd+B即可运行脚本输出 - 注意:该 build 不捕获交互输入(比如
readLine()会立即返回nil),如需交互,请在终端中运行
为什么 Swift 脚本里调用 NSApp 或 NSWindow 会崩溃?这不是编辑器问题
你可能在 Sublime 里写了个含 AppKit 调用的脚本,build 成功但一运行就 EXC_BAD_INSTRUCTION。这不是语法或配置错误,而是 macOS 对 GUI 脚本的硬性限制。
- 纯 Swift 脚本由
swift解释器直接加载,没有 AppKit 运行环境(缺少NSApplicationMain入口、Run Loop、Bundle 初始化) - 要运行含 GUI 的代码,必须打包为 macOS App(用
xcodebuild编译)或使用swiftc编译成二进制再启动:swiftc -o MyApp MyApp.swift && ./MyApp - 临时调试可用
swiftREPL:swift命令进入交互模式,再逐行粘贴 AppKit 代码(部分 API 可用,但窗口不会显示)
真正写 macOS 应用脚本,Sublime 只适合写逻辑和 CLI 部分;GUI 层绕不开 Xcode 或至少得走编译流程。这点容易被忽略,直到第一次 NSApp.shared 返回 nil 才发现。











