开发者生态
morning
Vim 中的 Lisp (2019)
2026-05-23
1 阅读
whent
Vim 中的 Lisp 作者:Susam Pal,2019 年 12 月 7 日 简介 十五年前,在 Vim 中编写 Lisp 代码是一次奇怪的冒险。 Vim 没有好的插件可以帮助对 Lisp s 表达式进行结构化编辑,或者通过在编辑器中嵌入 Lisp Read-Eval-Print-Loop (REPL) 或调试器来允许进行交互式编程。从那时起,情况已经有了很大改善。在过去的十年中,我们看到了两个名为 Slimv 和 Vlime 的 Vim 插件的积极开发。 Slimv现在已经10多岁了。 Vlime 是较新的版本,目前还不到 3 年。两者都支持 Lisp 中的交互式编程。我将在本文中讨论和比较 Slimv 和 Vlime。我将展示如何开始使用这两个插件并介绍它们的一些基本功能。但我不会涵盖所有内容。这不是教程。有关教程,请参阅参考资料部分。如果您只是寻找两个插件的比较或快速推荐,请直接跳至 Slimv 和 Vlime 的比较部分或快速推荐部分。目录 介绍 背景 Lisp Emacs: SLIME Vim: Slimv/Vlime Vim 插件管理软件版本 入门 开始使用 Slimv 和 SBCL 开始使用 Vlime 和 SBCL 开始使用 Paredit 使用调试器和检查器 使用调试器和检查器与 Slimv 使用调试器和检查器与 Vlime 跟踪功能 Slimv 中的跟踪功能 Vlime 中的跟踪功能 Nifty 功能评估顶级形式 彩虹括号 参数列表 全方位完成 描述符号 扩展宏交叉引用 其他常见 Lisp 实现 将 Slimv 与 CLISP 一起使用 将 Slimv 与 ECL 一起使用 将 Vlime 与 CLISP 一起使用 Vlime 与 ECL 其他 Lisp 方言 将 Slimv 与 MIT/GNU 方案一起使用 将 Slimv 与 Clojure 一起使用 Slimv 和 Vlime 的比较 快速推荐披露参考资料 背景 在我们开始使用 Slimv 和 Vlime 之前,最好先了解一下简要介绍一下这些插件背后的传统。这些插件为 Vim 提供了 Lisp 开发环境,所以它们的故事就从 Lisp 开始。 Lisp Lisp 是一个编程语言家族,具有独特的、全括号的前缀表示法。它与当今大多数其他流行的编程语言(如 C、Python、Ruby 等)完全不同。它的同像性质和可以转换任意 Lisp 表达式的强大宏系统使其成为一种灵活、通用、可扩展和内省的语言,以至于描述 Lisp 的文章中经常带有“启蒙”一词。例如,请参阅以下文章: Beating the Averages(作者:Paul Graham) Lisp 的本质(作者:Slava Akhmechet) Lisp 如何成为上帝自己的编程语言(作者:Sinclair Target) 计算史上的各种杰出人物以各种方式描述了 Lisp。 Alan Kay 曾将 Lisp 描述为:有史以来最伟大的单一编程语言。 John Foderaro 写过这样一篇关于 Lisp 的文章:Lisp 是一种可编程编程语言。 Eric S. Raymond 在他的著名文章《如何成为一名黑客》中表达了学习 Lisp 的经历:Lisp 值得学习,当你最终得到它时,你将获得深刻的启蒙体验。即使你实际上从未经常使用 Lisp 本身,这种经历也会让你在余下的日子里成为一名更好的程序员。 XKCD 网络漫画的创作者 Randall Munroe 专门为 Lisp 创作了两幅漫画: Randall Munroe 的 Lisp(来源:https://xkcd.com/224/) Randall Munroe 的 Lisp Cycles(来源:https://xkcd.com/297/) Lisp 由 John McCarthy 于 1958 年开发,是当今使用的第二古老的编程语言。只有 Fortran 更老,足足一年。当今一些流行的 Lisp 方言包括 Common Lisp、Scheme 和 Clojure。本文的大部分内容将重点关注 Common Lisp。本文最后将简要讨论 Scheme 和 Clojure。 Emacs:SLIME 许多 Lisp 程序员一想到编写 Lisp 代码就立即想到 Emacs。 Emacs 是一个文本编辑器家族。 Emacs 编辑器本身通常是用 Lisp 方言实现的。有一个名为 SLIME 的 Emacs 模式为 Lisp 编程提供了出色的支持。 SLIME 代表 Emacs 的高级 Lisp 交互模式。 SLIME 于 2003 年 8 月首次发布,由 Eric Marsden 创建,后来由 Luke Gorrie 和 Helmut Eller 进一步开发。它提供了读取-评估-打印循环 (REPL)、集成调试和表达式的交互式评估,所有这些都可以在编辑器中使用。有几个漂亮的键绑定可用于编译和评估当前缓冲区中的部分或全部代码。 SLIME 通过启动 Swank TCP 服务器来工作。 Swank 是一个用 Common Lisp 编写的后端服务器程序,它监听套接字以接收来自 Emacs 的 SLIME 命令并执行它们。 SLIME 非常有用,以至于许多在 Emacs 中编写 Lisp 代码的 Lisp 程序员认为它是不可或缺的。 Vim:Slimv/Vlime 有没有类似于 V 的 SLIME 的东西