使用VIM编程Scheme(Racket) - 如何入门

31

最近,我开始在DrRacket中编写Racket(曾经的Scheme)程序。

然而,我很快就想念了VIM在DrRacket中的所有功能,因此我想在scheme(racket)编程时使用VIM。

我知道Emacs可能是强大的lisp编程工具,但我只想编写一个scheme(racket)文件、检查语法和运行它。

不幸的是,我无法找到如何在命令行上调用"racket"来运行文件并做到像DrRacket一样。

我正在运行Ubuntu 10.10 Maverick Meerkat,使用VIM 7.3,并从官方网站下载并安装了Racket。

非常感谢您提供帮助以便能够开始编写。

3个回答

24

如果你只想在命令行中将文件加载到Racket并运行它,我认为这应该可以:

$ racket -f file.scm -i

使用-i选项会让您留在REPL中,在file.scm中测试代码。

但是,您可能想看看这篇博客文章:

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

您可以设置一个运行命令行Racket的GNU screen会话,并从Vim发送s表达式。有一个链接指向一个Vimscript位,它将使此过程自动化。我曾经在mit-scheme上使用过这个方法,效果还不错。它并不像SLIME或DrRacket那么强大。我刚在OS X上测试了描述的步骤,并且它适用于命令行racket,应该也适用于Ubuntu,当我第一次使用这种方法时就使用了Ubuntu。

您还可能想看看这个:

http://evalwhen.com/scmindent/index.html

...其中提供了有关Lisp和Scheme代码在Vim中更好缩进的一些信息。

最终我转到了Emacs,但不要被Vim的批评者打倒。Paul Graham据说使用vi,他必定是最著名的五位Lisp程序员之一。

http://paul.graham.usesthis.com/


谢谢你的建议,但是在vim中使用racket -f file -i命令运行时,我遇到了以下问题: 未定义标识符引用:check-expect check-expect只存在于DrRacket中吗? - Markus1189
好的,谢谢。我已经想到了如何添加 #lang scheme (require htdp/testing) (check-expect 1 2) (generate-report) - Markus1189
抱歉,我没有考虑到那个 #lang 指定符号,我通常在 R5RS 模式下使用 Racket。不过很高兴你已经解决了问题! - okonomichiyaki
evalwhen链接显示了一个日本垃圾邮件页面。 - Flux

17

有几个插件可用于使在Vim中编写Racket更加愉悦。

  • Vim的lisp模式(set lisp)- 改善缩进和单词跳转(w/e/b)等基本功能。
  • vim-racket - 一套较大型的 Vim 语法识别插件,支持函数和语法
  • syntastic - 在保存时检测错误(vim-racket 为此设置了makeprg
  • Rainbow Parentheses - 设置自己的括号颜色以获得最大对比度!
  • vim-slime - 与Tmux一起使用,将 Vim 连接到 Racket REPL
  • surround - 在表格和元素周围包装圆括号
  • vim-sexp for normal people
  • Molokai color scheme - 高对比度
  • VROD* - 基于K的 Vim 文档,和 Racket 函数的自动补全
  • REPTL* - 极其简单的连续 rackunit 测试运行器

我更喜欢slime而不是slimv,因为它更简单。

如果您正在使用Vundle,以下是安装大多数插件的方法:

Plugin 'tpope/vim-surround.git'
Plugin 'kien/rainbow_parentheses.vim'
Plugin 'scrooloose/syntastic.git'
Plugin 'MicahElliott/vrod'
Plugin 'guns/vim-sexp'
Plugin 'tpope/vim-sexp-mappings-for-regular-people'
Plugin 'wlangstroth/vim-racket'
Plugin 'tomasr/molokai.git'
将这些内容放入你的~/.vimrc文件中,然后调用以进行安装。
% vim +PluginInstall +qall

这里是一个截图,展示了大部分的内容:

输入图像描述

(*声明:我编写了VROD和REPTL,它们还不够成熟)

此外,这里有一篇相关博客文章,描述了一个Vim/SICP的设置方法。


Paredit对于结构化编辑和确保没有不平衡的括号也非常有用。Slimv包含了paredit;这是独立版本。 - Flux

2

大约一周前,SLIMV(Vim下的SLIME)开始支持Racket。目前,SLIMV通常被认为是Vim下最成熟的Lisp环境。


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