Sublime Text 需通过插件+外部 haml 命令实现 Haml 编译,前提是系统已安装 haml(via gem install haml)、PATH 可见且构建系统正确配置;Windows 用户需改用 haml-js 等替代方案。

Sublime Text 不能直接编译 Haml,必须靠插件 + 外部命令协同完成;装完插件不配置 shell 环境或不从终端启动,haml 命令大概率报 command not found。
确认系统已安装 haml 命令行工具
Sublime 本身不带 Haml 编译能力,所有“自动编译”行为都依赖系统 PATH 中的 haml 可执行文件。不是装了插件就万事大吉。
- 在终端运行
which haml或haml --version,确认能正常输出 - 如果提示未找到,需先执行
gem install haml(确保已安装 Ruby 和 gem) - 若使用
rbenv或rvm,务必确认当前 shell 的 Ruby 版本已正确加载,且haml在该环境下可用 - Windows 用户注意:官方 Haml gem 不支持 Windows 原生编译;需用
haml-js或第三方移植版(如知识库中提到的haml-js衍生插件),但兼容性有限,错误信息常为ReferenceError: require is not defined
安装 Haml 插件并启用语法高亮
语法高亮和文件识别是基础,但多数人卡在这一步就以为“支持 Haml”了——其实只是看得到颜色,不代表能编译。
- 通过
Package Control: Install Package搜索并安装Haml(官方维护,支持.haml文件识别与缩进) - 如果项目还用
.slim,得额外装Slim插件,二者不通用 - 装完后打开一个
xxx.haml文件,检查右下角状态栏是否显示Haml;若显示Plain Text或HTML,点击切换,或通过菜单View → Syntax → Open all with current extension as… → Haml - 重启 Sublime 不是必须操作,但若插件没生效,可尝试重启(尤其 ST2 旧版本)
配置构建系统实现 .haml → .html 编译
默认没有构建系统,Ctrl+B 会失败。必须手动创建 haml.sublime-build 并指定解释器路径与参数。
- 菜单
Tools → Build System → New Build System…,粘贴以下内容(适配 Unix/macOS):
{
"cmd": ["haml", "$file", "$file_base_name.html"],
"selector": "source.haml",
"file_regex": "^(...*?):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "$file_path"
}
- Windows 用户需改用
haml.cmd或完整路径(如C:\Ruby27-x64\bin\haml.bat),否则构建时提示The system cannot find the file specified - 保存为
haml.sublime-build(路径自动进入Packages/User/),再通过Tools → Build System选中它 - 关键点:
$file_base_name.html是输出文件名,别漏掉.html后缀,否则生成的是无扩展名文件 - 若需压缩输出,加参数
--ugly;若要 HTML5 格式,加--format html5
从终端启动 Sublime 才能继承 shell 环境变量
这是最常被忽略的一环:GUI 方式双击启动的 Sublime,完全看不到 rbenv、rvm 或用户自定义的 PATH,导致 haml 命令始终不可用。
- macOS:终端执行
open -a "Sublime Text" --args /path/to/project - Linux:用
subl命令(前提是已配置 symlink,如sudo ln -s /opt/sublime_text/subl /usr/local/bin/subl) - Windows:无等效方案,建议改用
haml-js类插件,或放弃自动编译,改用外部终端手动运行haml xxx.haml > xxx.html - 验证方式:在 Sublime 控制台(
Ctrl+`)中输入import os; print(os.environ.get('PATH')),对比终端里echo $PATH输出是否一致
真正难的不是装插件,而是让 Sublime “看见”你系统里那个已经装好的 haml。环境变量断层、Windows 路径硬编码、构建参数少个点号,都会让编译静默失败——它不会报错,只会生成空文件或原地不动。


















