必须安装fsharp-sublime插件并配置dotnet fsi构建系统:先用Package Control安装作者为fsharp-sublime的FSharp包,设置文件语法为F#;再新建.sublime-build文件,Windows用"cmd"字段调用dotnet fsi "$file",macOS/Linux用"shell_cmd"字段,且仅支持.fsx后缀。

Sublime Text 默认不识别 .fs 和 .fsx 文件,装完插件却还是纯文本、高亮错乱、Ctrl+B 报 dotnet not found——不是你写错了,是环境根本没对上。
怎么让 .fs 和 .fsx 一打开就有正确高亮
关键不是“装了 FSharp 插件”,而是装对了谁、配对了后缀、没被其他插件劫持。
- 用
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS)调出命令面板,输入Install Package回车 - 搜
FSharp,只认准作者是fsharp-sublime的那个包——别选FSharpSyntax或任何带OCaml字样的,它们会把.fs当 OCaml 处理,导致关键字变色错乱、缩进崩溃 - 安装后打开任意
.fs文件,右下角点语法名 → 选F#;或直接Ctrl+Shift+P输入Set Syntax: F# - 如果仍不生效,进
Preferences → Package Settings → FSharp → Settings,确认"extensions"数组里有"fs"和"fsx"(注意是复数extensions,不是extension)
为什么 Ctrl+B 运行 .fsx 总报 dotnet not found
Sublime 的构建系统不继承 shell 的 PATH,哪怕你在终端里能跑 dotnet fsi --version,它也看不到。
- 先在终端执行
dotnet --version,必须 ≥ 6.0;fsharpi已彻底废弃,任何含它的构建配置都会失败 - Windows 用户:若从开始菜单启动 Sublime,它大概率读不到 PowerShell 的 PATH,建议直接在终端里运行
subl启动编辑器 - 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)
构建系统怎么写才能双击跳转错误行
file_regex 不匹配 F# 实际报错格式,就等于白配——点击错误信息不会跳到对应位置。
- F# 错误典型格式是
test.fsx(5,12–5,18),即文件名 + 括号内“起始行,起始列–结束行,结束列” - Windows 构建系统用
"cmd"字段:{"cmd": ["dotnet","fsi","$file"],"selector":"source.fsharp","file_regex":"^(.*?):([0-9]+):([0-9]+)-([0-9]+):([0-9]+)","working_dir":"$file_path"} - macOS/Linux 必须用
"shell_cmd",否则含空格路径会崩:{"shell_cmd":"dotnet fsi "$file"","selector":"source.fsharp","file_regex":"^(.*?):([0-9]+):([0-9]+)-([0-9]+):([0-9]+)","working_dir":"$file_path"} -
selector必须是source.fsharp(不是source.fs或留空),否则打开.fsx时构建系统不会自动激活
能不能用 Sublime 直接编译 .fs 成可执行文件
不能。硬配 fsc 是条死路——它不解析 NuGet 引用、不处理项目结构、不自动生成入口点,改一个依赖就得重写整个构建命令。
-
.fs文件应放在标准dotnet项目中:用dotnet new console -lang F# -o myapp初始化,Sublime 只负责编辑源码 - 想一键编译运行,靠的是
dotnet build和dotnet run,不是 Sublime 构建系统 - 如果你真需要在 Sublime 里触发完整构建,得另写一个调用
dotnet build的构建系统,但错误定位支持远不如dotnet fsi稳定
最易被忽略的点:语法包和构建系统的 selector 必须一致,都是 source.fsharp;而 .fs 文件默认不走 dotnet fsi,它只是源码,不是脚本——别指望 Ctrl+B 能跑通 .fs,那是设计使然,不是配置漏了。


















