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"
}
</ul>
<ul>
<li><code>selector</code> 必须是 <code>source.fsharp</code>(不是 <code>source.fs</code> 或空值),否则 Sublime 不会在你打开 <code>.fsx</code> 时自动激活该构建系统</li>
<li>Windows 用户若用 Git Bash 或 MSYS2,可能需把 <code>shell_cmd</code> 改成 <code>bash -c "dotnet fsi \"$file\""</code> 避免路径空格转义问题</li>
</ul>
<H3>如何让 .fs 文件也能一键编译(而非只跑脚本)</H3>
<p><code>.fs</code> 是模块/库文件,不能像 <code>.fsx</code> 那样直接解释执行;强行用 <code>dotnet fsi</code> 会报 <code>error FS0193: internal error: The module/namespace 'XXX' from compilation unit 'YYY' did not contain the value 'Main'</code> —— 这不是语法错,是用错了工具链。</p>
<ul>
<li>编译 <code>.fs</code> 应走完整项目流程:<code>dotnet new classlib -lang F#</code> 创建项目,把 <code>.fs</code> 放进 <code>src/</code>,再用 <code>dotnet build</code></li>
<li>如真需单文件编译测试,可临时建最小项目:<code>dotnet new console -lang F#</code>,删掉 Program.fs,把你的 <code>main.fs</code> 改名为 <code>Program.fs</code> 或加到 <code>.fsproj</code> 的 <code><Compile Include="main.fs" /></code></li>
<li>不要试图用 <code>fsc.exe</code>:它已过时,且不兼容 .NET 6+ 的 SDK 风格项目,<code>dotnet build</code> 才是唯一推荐路径</li>
</ul>
<H3>容易被忽略的细节:语法高亮颜色不对、关键字不着色</H3>
<p>高亮“有”不代表“对”——常见现象是 <code>let</code>、<code>match</code> 等关键字仍是灰色,注释没斜体,这不是语法包坏了,而是当前配色方案(<code>.sublime-color-scheme</code>)没定义 <code>keyword.control.fsharp</code> 或 <code>comment.line.double-slash.fsharp</code> 这类 scope。</p>
<ul>
<li>按 <code>Ctrl+Shift+P</code> 输入 <code>Inspect Scope</code>,把光标停在 <code>let</code> 上,看控制台输出的完整 scope 链(例如 <code>keyword.control.fsharp</code>)</li>
<li>打开当前配色方案文件(<code>Preferences → Color Scheme</code> 查名称,再用 <code>PackageResourceViewer: Open Resource</code> 定位),在 <code>"rules"</code> 末尾加一条:</li>
</ul>
<pre class="brush:php;toolbar:false;">
{"scope": "keyword.control.fsharp", "foreground": "#569CD6"}
- 改完保存,重新选择一遍当前 color scheme(Sublime 4 可实时预览,ST3 建议重启)


















