sublime text 默认不支持 common lisp 语法高亮和 repl,需手动安装 lisp 插件、右下角切换为 lisp 语法、绑定 .lisp/.cl 扩展名,并配置 sbcl 构建系统或 slime+swank 实现交互式开发。

Sublime Text 默认不支持 Common Lisp 语法高亮、REPL 集成或一键编译,这不是配置遗漏,而是它压根没内置 lisp 相关语言支持——.lisp 或 .cl 文件打开即为 Plain Text,defun、let、括号不匹配、Ctrl+B 报错“no build system”全是正常现象。
如何让 .lisp 文件正确高亮并识别为 Common Lisp
Sublime 不靠 shebang 或文件内容判断语言,只认后缀 + 手动语法绑定。装插件只是第一步,关键在激活语法作用域。
- 用
Ctrl+Shift+P→Package Control: Install Package→ 搜索并安装Lisp(作者 wbond,不是 “CommonLisp” 或 “SLIME” 插件) - 重启 Sublime,打开任意
test.lisp,右下角点语言名 → 选Lisp(注意:不是 “Clojure” 或 “Scheme”) - 要永久绑定所有
.lisp和.cl文件:菜单View → Syntax → Open all with current extension as…→ 再选Lisp - 验证是否生效:写
(defun hello () (format t "hi")),defun和format应变蓝,括号点击能高亮配对,Tab缩进应自动对齐到上层括号
为什么 Ctrl+B 运行 .lisp 文件失败?构建系统必须手动指定 sbcl 或 clisp
Sublime 的 Ctrl+B 本质是执行 shell 命令,它不会自动找 sbcl 或 clisp,也不会处理交互式 REPL 流程。常见报错 'sbcl' is not recognized 或 exit code 127 都指向同一问题:解释器不可达。
- 先确认终端中能调用:
sbcl --version或clisp --version必须有输出;Windows 用户若用 Scoop 安装,路径通常为C:Users amescoopppssbclcurrentsbcl.exe - 新建构建系统:
Tools → Build System → New Build System…,粘贴以下内容(以 SBCL 为例):
{
"cmd": ["sbcl", "--script", "$file"],
"selector": "source.lisp",
"working_dir": "$file_path",
"file_regex": "^; in: (.+)\n; ([^\n]+):([0-9]+):([0-9]+)"
}
- 保存为
Lisp.sublime-build(自动落进Packages/User/) - 务必先
Ctrl+S保存文件——未保存时$file为空字符串,构建直接崩溃 - 若用
clisp,把"cmd"改为["clisp", "$file"],但注意clisp不支持--script模式,需确保脚本含可执行入口(如(ext:exit))
怎样接入 SLIME + Swank 实现真正的 REPL 交互(非简单脚本运行)
仅靠构建系统只能跑单次脚本,无法实现 eval-defun、inspect、step 等函数式开发核心能力。SLIME 是事实标准,但 Sublime 本身不集成,必须靠插件桥接。
- 必须先在终端启动 Swank 服务:
sbcl --load ~/.swank.lisp(需提前用quicklisp安装swank);Swank 启动后监听localhost:4005 - 安装插件:
Package Control: Install Package→ 搜SLIMESublime(作者 jfischoff),它是轻量级 SLIME 客户端,不依赖 Emacs - 插件设置里填 Swank 地址:
Preferences → Package Settings → SLIMESublime → Settings,右侧加:
"swank_host": "127.0.0.1", "swank_port": 4005
- 打开
.lisp文件后,按Ctrl+Alt+R连接 Swank;状态栏显示SLIME: Connected才算就绪 - 此时
Ctrl+Enter可发送当前表达式到 REPL,Ctrl+Shift+Enter发送整个 defun,Ctrl+Alt+E弹出独立 REPL 面板 - 注意:SLIME 依赖 Swank 正常运行,如果连接失败,优先检查终端里
netstat -an | grep 4005是否有 LISTEN,而不是调 Sublime 设置
容易被忽略的细节:编码、括号匹配与项目级加载
Common Lisp 对编码和符号解析敏感,Sublime 默认行为可能破坏脚本语义。
-
.lisp文件必须存为 UTF-8 无 BOM;若含中文字符(如注释; 测试),BOM 会导致 SBCL 报invalid byte sequence - 启用括号高亮与自动补全:
Preferences → Settings中添加"match_brackets": true和"auto_match_enabled": true - 构建系统无法加载多文件项目(如
(load "utils.lisp")),因为--script模式不设*default-pathname-defaults*;解决方法是改用自定义命令:"cmd": ["sbcl", "--load", "$file"],并在脚本开头加(setf *default-pathname-defaults* (pathname $file_path)) - SLIME 连接后,
Ctrl+Alt+L可加载当前文件,但仅限当前 Swank session 生效;关闭 Sublime 再开,需重新Ctrl+Alt+R,不会自动重连











