sublime text 默认不识别 .fs 和 .fsx 文件,必须安装 fsharp-sublime 语法包并配置 dotnet fsi 构建系统;高亮错乱常因 ocaml 等插件劫持后缀,运行失败多因 path 隔离或构建系统 selector 错误设为 source.fsharp。

Sublime Text 默认不识别 .fs 和 .fsx 文件,不装包、不配构建系统,写出来的就是纯文本——高亮没有、运行报错、错误点不了行号,不是你写错了,是它根本没“认出”这是 F#。
怎么让 .fs 和 .fsx 文件一打开就有高亮
必须安装 FSharp 语法包(作者 fsharp-sublime),其他名字相似的包(比如 FSharpSyntax 或泛用型 OCaml)会劫持 .fs 后缀,导致关键字变色错乱甚至缩进崩溃。
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Install Package回车 - 搜索
FSharp,确认作者是fsharp-sublime,回车安装 - 安装后打开任意
.fs文件,右下角点当前语法名 → 选F#;或直接Ctrl+Shift+P输入Set Syntax: F# - 若仍不生效,进
Preferences → Package Settings → FSharp → Settings,检查"extensions"数组是否包含"fs"和"fsx"
为什么 Ctrl+B 运行 .fsx 脚本失败或报 dotnet not found
Sublime 的构建系统不会自动继承你的 shell PATH,即使终端里 dotnet fsi --version 能跑,Sublime 也可能找不到 dotnet。这不是插件问题,是环境隔离导致的静默失败。
- 先在终端确认
dotnet fsi --version输出正常,且 SDK 版本 ≥ 6.0 - 新建构建系统:
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或空值),否则 Sublime 不会在你打开.fsx时自动激活该构建系统 - Windows 用户若用 Git Bash 或 MSYS2,可能需把
shell_cmd改成bash -c "dotnet fsi \"$file\""避免路径空格转义问题
如何让 .fs 文件也能一键编译(而非只跑脚本)
.fs 是模块/库文件,不能像 .fsx 那样直接解释执行;强行用 dotnet fsi 会报 error FS0193: internal error: The module/namespace 'XXX' from compilation unit 'YYY' did not contain the value 'Main' —— 这不是语法错,是用错了工具链。
- 编译
.fs应走完整项目流程:dotnet new classlib -lang F#创建项目,把.fs放进src/,再用dotnet build - 如真需单文件编译测试,可临时建最小项目:
dotnet new console -lang F#,删掉 Program.fs,把你的main.fs改名为Program.fs或加到.fsproj的<compile include="main.fs"></compile> - 不要试图用
fsc.exe:它已过时,且不兼容 .NET 6+ 的 SDK 风格项目,dotnet build才是唯一推荐路径
容易被忽略的细节:语法高亮颜色不对、关键字不着色
高亮“有”不代表“对”——常见现象是 let、match 等关键字仍是灰色,注释没斜体,这不是语法包坏了,而是当前配色方案(.sublime-color-scheme)没定义 keyword.control.fsharp 或 comment.line.double-slash.fsharp 这类 scope。
- 按
Ctrl+Shift+P输入Inspect Scope,把光标停在let上,看控制台输出的完整 scope 链(例如keyword.control.fsharp) - 打开当前配色方案文件(
Preferences → Color Scheme查名称,再用PackageResourceViewer: Open Resource定位),在"rules"末尾加一条:
{"scope": "keyword.control.fsharp", "foreground": "#569CD6"}
- 改完保存,重新选择一遍当前 color scheme(Sublime 4 可实时预览,ST3 建议重启)











