使用Vim进行Lisp开发

95

我已经有一段时间断断续续地使用Lisp了,但现在开始更加认真地在Lisp上做一些"真正的"工作。我是一个巨大的Vim爱好者,想知道如何在使用Vim作为编辑器时最有效率地进行Lisp开发。欢迎提供插件、工作流建议等。

请不要建议我使用emacs,因为我已经熟悉了Vim,并且非常喜欢它作为编辑器。


哪种Lisp,通用Lisp? - pupeno
在这种情况下,是的,使用Common Lisp。我也会在Scheme中做一些尝试探索性编程,但那更多是为了休闲娱乐。 - Drew Olson
3
请参考Lisp in Vim with Slimv or Vlime,其中我提供了有关在Vim中使用Slimv或Vlime进行Common Lisp编程的详细介绍。这两个流行的Vim插件可为Common Lisp提供类似于SLIME的交互式编程环境。 - Susam Pal
1
@SusamPal,看起来你评论中的链接到你出色文章的地方已经失效。也许你把它移到这里了(或者在TOC中的某个地方):在Vim中使用Lisp - mm2001
11个回答

50

Limp旨在成为Vim的全功能Common Lisp IDE。它默认使用SBCL,但可以通过替换"/usr/local/limp/latest/bin/lisp.sh"文件中的"sbcl"来支持大多数其他实现。

当今讨论Lisp时,通常指的是Common Lisp,这是由ANSI X3J13标准化的语言(请参见HyperSpecPractical Common Lisp以获取良好的教材),具有GNU Clisp、SBCL、CMUCL、AllegroCL等实现。

回到Limp。还有其他一些更轻量级或尝试做其他事情的解决方案,但我相信提供一个环境,使您获得像括号匹配、高亮、文档查找等功能,使其尽可能成为一个即插即用的解决方案。

Limp存储库中,您将找到SlimVim项目的一些先前工作,即ECL(Embeddable Common Lisp)接口,与后续发布(7.1)合并;Simon还提供了7.2的补丁,尚未合并。 ECL接口在if_ecl.txt中有记录。

短期内的工作是将其与7.2合并,并提交一个补丁到vim_dev,以使其合并到官方的Vim树中。

这引领我们进入了长期计划:在Vim中直接使用Lisp将方便开始开发SWANK前端(SLIME的运行在Lisp中的部分,slime.el是运行在编辑器中的部分-前端)。

在此之间的某个位置,很可能会将整个Limp重写为使用ECL接口的Common Lisp,从而使Limp更易于维护(VimScript不是我的最爱),并且更容易为用户定制。

官方Limp网站 有时会掉线,但是可以通过 Vim.org下载 ,并且支持组limp-devellimp-user 托管在Google Groups上。如果您需要解答问题,甚至想参与开发,不要犹豫加入。大部分讨论都在limp-devel列表中进行。如果您使用IRC,请加入 irc.freenode.net 上的 #limp,我的昵称是'tic'。祝您好运!


3
这项工作的进展如何?你是否仍然对继续完成它感兴趣? - Erik Garrison
5
我感到困惑。 "答案"似乎只是给出了一些选项的建议,比如使用Limp,但并没有解释如何实现这一点。 我原本以为问题是如何在SBCL /其他环境中使用Vim。 这并没有真正回答问题,所以我对所有赞成票感到有点困惑。您能否详细说明如何设置此环境并开始使用? - jpswain
1
看起来 Limp 已经不再维护了:网站已经关闭,最后一次更改是在2008年。 - kynan
2
正如其他人所指出的那样,上面大部分链接(以及vim.org上的limp页面)都已经失效。然而,你可以在https://github.com/mikaelj/limp找到几乎所有东西(.vim文件和相关文档)。 - George Hawkins

27
你可以给 slimv 一个休息时间。

刚开始接触slimv,对它几乎一无所知,但似乎它可以作为emacs中slime的真正替代品,开箱即用,表现完美。此外,它最近有发布更新(v0.9.2 07-nov-2011),而limp自2008年以来就没有更新了。 - jmsu
2
使用Slimv已经有一段时间了,它非常出色。在这个领域没有任何其他东西可以与之相比。 - tempire

18

这是一张很酷的图表,由Xach制作,概括了当前的情况。

解释图表显示几乎没有VIM用户也是Lisp程序员,并且可以将其改造成一个良好的Lisp IDE...糟糕的alt文本 :)


68
这很荒谬。你不需要用C来自定义Vim。Vim可以使用自己的语言进行脚本编写,大多数版本还支持Ruby和Python脚本编写。 - Sam Stokes
8
那么,想要在VIM中使用Common Lisp的用户是所有VIM用户的核心吗?也许我有些不理解... - Will Hartung
1
@Luis:实际上,蓝点位于中心的事实使得绿点不与其相交是不可能的。我会说图表的作者没有理解几何学的工作原理。 - intuited
9
绿色和蓝色应该相交。 - Luís Oliveira

9

现在我们已经迎来了9年,现在我们有了Vim 8和Neovim,两者都提供了异步交互插件的能力。

vlime是一个非常出色且功能丰富的插件,它利用新的异步接口为Common Lisp提供类似SLIME的开发环境。


6

6

:set lisp

Vim有一个模式可以帮助您按照Lisp标准对代码进行缩进。

此外,我修改了lispwords以改变vim如何缩进我的代码。

:setl lw-=if(在~/.vim/ftplugin/lisp.vim中)


1
缩进很容易。提供一个好的 IDE 更加重要。实际上,VIM 甚至不能像 Emacs/SLIME 那样做到这一点(缩进)。 - Luís Oliveira

6

EMACS的SLIME是LISP编程的一个很好的工具。 最好的部分是将编辑器中编写的代码直接发送到实时的LISP会话中。 您可以使用此处的技巧在Vim中获得类似的行为:

http://technotales.wordpress.com/2007/10/03/like-slime-for-vim/

我调整了自己的脚本,以便可以将其发送到SBCLClojure会话。 它使您更加高效,并利用了REPL。

“:set lisp”启动Vim的lisp缩进模式。 但是,它无法与一些方言(如Clojure)一起使用。 对于Clojure,请使用VimClojure

有些人也喜欢LIMP


4
你可以尝试使用带有Vim仿真功能的Emacs,虽然不是完美的,但可能会比较熟悉。我认为如果你使用类似于Slime或DrScheme这样的工具进行迭代开发,Lisp就能够大放异彩,而其他所有编辑器都感觉不对劲。

4
  • Vim插件:彩虹括号,Lisp语法
  • SBCL插件:rlwrap,sb-aclrepl
  • 工作流程:使用Ion3(或其他平铺式窗口管理器)并打开多个终端窗口。

    • 在Vim中编辑Lisp代码
    • 使用键盘切换到Lisp窗口
    • 使用C-r命令重新加载ASDF系统,以使你的更改生效。
    • 对于小片段/更改,请使用X Window剪贴板复制/粘贴功能。
    • 大量使用DESCRIBE、TRACE和APROPOS命令。
    • 重复这个过程。

1

我知道你说过不要告诉你使用Emacs。

使用Emacs。

说真的,SLIME在Emacs上的设置几乎是Lisp的标准开发平台,而且有非常好的原因。


5
尽管到2011年4月人们仍在投票反对,但我仍然坚持这个答案。我喜欢Vim并且每天都使用它,但是没有什么可以比在用Lisp编写的环境中编程更好。"我希望我能让我的编辑器根据Lisp服务器中发生的情况做出反应。哦,等等!我可以做到!"这种感觉很棒。再次强调:我喜欢Vim,但我的观点是Emacs是一个更好的编辑器,用于处理Lisp - Kirk Strauser
跟进:六年过去了,你们仍然在投票支持这个将近十年历史的答案?好吧,我们明白了,我们明白了!但我还是不会改变它。 - Kirk Strauser
我认为slimv还不错,实际上,在没有emacs干扰的情况下,它让我更好地处理lisp代码。vi作为unix/linux/ICL环境的默认设置已经使用了几十年。 - KWC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接