必须安装作者为fsharp-sublime的fsharp包并手动设置语法为f#,确认extensions含"fs""fsx";构建系统selector须为source.fsharp,shell_cmd调用dotnet fsi "$file";.fs文件不可直接运行,仅支持.fsx脚本。

为什么打开 .fs 或 .fsx 文件还是 Plain Text
这是最直接的信号:Sublime 根本没加载 F# 语法定义。不是插件没装,而是装错了包或后缀没绑定。
- 必须用
Package Control安装作者为fsharp-sublime的FSharp包——别选FSharpSyntax、OCaml或任何泛用 ML 类插件,它们会把.fs当 OCaml 处理,导致let不着色、缩进全乱 - 安装后打开任意
.fs文件,右下角点语法名 → 手动选F#;或按Ctrl+Shift+P输入Set Syntax: F# - 若仍无效,进
Preferences → Package Settings → FSharp → Settings,确认"extensions"数组里有"fs"和"fsx"(注意是复数,不是extension)
为什么 Ctrl+B 运行 .fsx 报 dotnet not found 或空白输出
这不是插件问题,是 Sublime 构建系统不继承 shell 的 PATH。终端能跑 dotnet fsi --version,不代表 Sublime 能找到它。
- 先在终端确认:
dotnet --version输出 ≥ 6.0(fsharpi已彻底移除,别试) - Windows 用户建议从终端启动 Sublime(比如运行
subl),否则开始菜单启动时可能读不到 PowerShell 的 PATH - macOS/Linux 用户检查
which dotnet;若无输出,把export PATH="$HOME/.dotnet:$PATH"加到~/.zshrc或~/.bash_profile并source一下 - 实在不行,在构建系统里硬写绝对路径:
"cmd": ["C:\Program Files\dotnet\dotnet.exe", "fsi", "$file"](Windows)或"shell_cmd": "/usr/local/share/dotnet/dotnet fsi "$file""(macOS)
怎么写一个能双击跳转错误行的 .sublime-build 文件
file_regex 写错,报错就只能看文字,没法双击定位。F# 错误格式是 test.fsx(5,12–5,18),正则必须匹配这个结构。
- Windows 用户用
"cmd"字段:"file_regex": "^(.*?):([0-9]+):([0-9]+)-([0-9]+):([0-9]+)"(四个数字分组:文件名、起始行、起始列、结束行、结束列) - macOS/Linux 用户用
"shell_cmd"字段:"file_regex": "^(.*?):([0-9]+):([0-9]+):? ?(.*)$"(前三个分组足够定位) -
"selector"必须是"source.fsharp"(不是source.fs或空值),否则 Sublime 不会在你打开.fsx时自动激活该构建系统 - 完整示例(Windows):
{ "cmd": ["dotnet","fsi","$file"], "selector":"source.fsharp", "file_regex":"^(.*?):([0-9]+):([0-9]+)-([0-9]+):([0-9]+)", "working_dir":"$file_path"}
能不能在 Sublime 里直接跑 .fs 文件(非脚本)
不能。Sublime 的构建系统只适合执行 .fsx 脚本,.fs 是编译单元,需要项目上下文和 NuGet 引用解析。
-
fsc在构建系统里硬配参数编译.fs是条死路:你得手动写一长串--reference、--entrypoint,改一个包就得重写整个命令 - 正确做法:
dotnet new console -lang F# -o myapp初始化标准项目,在 Sublime 里只编辑源码;构建和运行交给终端:dotnet build和dotnet run - 如果非要一键触发,可另建一个
Build.sublime-build,"cmd"设为["dotnet", "build", "$project_path"],但需确保当前文件属于已初始化的项目(即存在.sln或.fsproj)
F# 的交互式体验依赖 dotnet fsi 的实时反馈能力,而 Sublime 的构建系统本质是单次执行——它不维持 REPL 会话,也不支持多行输入或 it 值引用。真要交互式调试,还是得切到终端跑 dotnet fsi,或者换用 VS Code + Ionide。











