必须安装作者为fsharp-sublime的插件并手动设语法为F#,配置selector为source.fsharp的dotnet fsi构建系统;否则右下角显示Plain Text、Ctrl+B无响应、错误行号不可点击。

为什么 .fs 和 .fsx 文件打开还是 Plain Text
这不是插件没装,是语法识别链断在了第一步:Sublime 默认根本不认识 .fs 和 .fsx 后缀。右下角显示 Plain Text 就说明整个语法定义没加载进来。
- 必须用
Package Control安装作者明确为fsharp-sublime的包——搜到FSharp就装,大概率会选错;FSharpSyntax、OCaml类泛用包会劫持.fs,导致let变蓝但match不高亮,缩进全乱 - 安装后打开任意
.fs文件,手动点击右下角 → 选F#;或按Ctrl+Shift+P输入Set Syntax: F# - 若仍不生效,进
Preferences → Package Settings → FSharp → Settings,确认"extensions"数组里有"fs"和"fsx"(注意不是"extension"单数)
Ctrl+B 运行 .fsx 报 dotnet not found 怎么修
这不是 PATH 没配好,是 Sublime 构建系统压根不继承 shell 环境变量——你在终端能跑 dotnet fsi --version,不代表它能看见。
- 先在终端确认
dotnet --version≥ 6.0,且dotnet fsi --version有输出;fsharpi已彻底废弃,含它的构建配置必挂 - 新建构建系统:
Tools → Build System → New Build System…,贴入以下内容并保存为FSharp.sublime-build:
{
"shell_cmd": "dotnet fsi "$file"",
"file_regex": "^(.*?):([0-9]+):([0-9]+):? ?(.*)$",
"working_dir": "$file_path",
"selector": "source.fsharp"
}selector 必须是 source.fsharp(不是 source.fs 或空值),否则打开 .fsx 时根本不会自动激活该构建系统shell_cmd 改成 bash -c "dotnet fsi "$file"";macOS/Linux 用户若用 zsh 且无输出,检查是否启用了 NO_COLOR 干扰了 dotnet fsi 的输出格式如何让错误行号可点击跳转
file_regex 配错,等于白配——点错误信息不会跳到对应位置,调试效率直接归零。
- F# 实际报错格式是
test.fsx(5,12–5,18),即文件名(行,列–行,列),不是 GCC 风格的file:line:col - 上面给出的正则
^(.*?):([0-9]+):([0-9]+):? ?(.*)$是匹配传统编译器输出的,对dotnet fsi的默认输出无效 - 要支持
dotnet fsi的括号格式,得换成:^(.*?)(?:\((\d+),(\d+)(?:-(\d+),(\d+))?\))?:? ?(.*)$,但 Sublime 的file_regex不支持命名捕获组,所以实际只能靠dotnet fsi加参数强制输出兼容格式:"shell_cmd": "dotnet fsi --no-color --quiet "$file"" - 更稳的办法是改用
cmd字段 + 显式路径(尤其 Windows):"cmd": ["C:\Program Files\dotnet\dotnet.exe", "fsi", "$file"]
.fs 文件没法 Ctrl+B 编译?那是设计如此
.fs 是模块文件,不是脚本——dotnet fsi 只接受 .fsx,对 .fs 直接报错 error FS0193,这不是配置问题,是语言模型决定的。
-
.fs必须放在标准项目结构里:dotnet new classlib -lang F#生成.fsproj后再编辑,编译走dotnet build - 硬要在 Sublime 里触发编译,得另建一个
FSharp-Compile.sublime-build,内容为:"cmd": ["dotnet", "build"],并确保当前文件在项目根目录下(working_dir设为$project_path) - 别指望单个
.fs文件像 Python 那样一键运行;F# 的模块系统依赖项目上下文,脱离.fsproj的.fs就是没“户口”的代码片段
真正卡住人的从来不是语法,而是 Sublime 对 source.fsharp 的 selector 绑定、dotnet fsi 的输出格式与 file_regex 的隐式耦合,还有 .fs 和 .fsx 在工具链里的角色分野——这些细节不调准,写再漂亮的函数也没法跑起来。



















