24 命令行工具和你的编辑器选择
虽然DrRacket是大多数人用Racket开始的最简单的方法,许多Racket使用者喜欢命令行工具和其它文本编辑器。Racket分配包括几个命令行工具,流行的编辑器包括或支持包以使它们能很好地配合Racket。
作为其标准发行版的一部分,Racket提供了许多命令行工具,这些工具可以使racket使用者更加愉快。
raco(以下简称“Racket command”)程序为了编译Racket程序和维护一个Racket安装提供了一个命令行界面给许多额外的工具。
-
raco make将Racket源文件编译成字节码。
例如,如果你有一个程序"take-over-world.rkt"并且你想把它编译成字节码,连同其所有的依赖,使其加载速度更快,然后运行
raco make take-over-the-world.rkt
字节码文件在一个"compiled"子文件夹中被写为"take-over-the-world_rkt.zo"“;".zo"是一个字节码文件的文件后缀。
-
raco setup管理一个Racket安装,包括手动安装包。
例如,如果你创建了自己的名为"take-over"的库集合(collection),并且希望为集合构建所有字节码和文档,则运行
raco setup take-over
-
raco pkg管理package,它可以通过Racket包管理器被安装。
例如,要查看已安装包的列表,运行:
raco pkg show
安装一个名为<package-name>的新包,运行:
raco pkg install <package-name>
参见(part ("(lib pkg/scribblings/pkg.scrbl)" "top"))以获得关于包管理器的更多细节。
为了获得有关raco的更多细节,见(part ("(lib scribblings/raco/raco.scrbl)" "top"))。
Racket REPL提供了你从现代交互环境中所期望的一切。例如,它提供了一个,enter命令以使REPL在给定模块的上下文中运行,并提供了一个,edit命令来调用你输入的文件上的编辑器(由EDITOR环境变量指定)。,drracket命令可以很容易地使用你最喜欢的编辑器编来编写代码,同时仍有DrRacket可以尝试。
有关详细信息,请参见(part ("(lib xrepl/xrepl.scrbl)" "top"))。
bash和zsh的Shell自动完成功能分别在"share/pkgs/shell-completion/racket-completion.bash"和"share/pkgs/shell-completion/racket-completion.zsh"中提供。
要启用它,只需从.bashrc或.zshrc运行相应的文件。
"shell-completion"集合仅在Racket Full发行版中可用。完成脚本也可在联机。
Emacs一直是一个在Lisp使用者和Scheme使用者中特别受欢迎的,并且也是在Racket使用者中流行的。
-
Racket模式通过语法高亮和DrRacket风格REPL及Emacs缓冲区执行对Emacs支持。
Racket模式可以通过MELPA或安装melpa或手动从GitHub库安装。
-
Quack是一个为Racket提供更有力的支持的Emacs的scheme模式(scheme-mode)的扩展,包括高亮和Racket特定形式的缩进,以及文档一体化。
Quack是包含在Debian和Ubuntu库里作为emacs-goodies-el包的一部分。一个Gentoo端口也可获取的(在名字app-emacs/quack下)。
-
Geiser提供了一个编程环境,编辑器和Racket的REPL紧密集成。习惯用Slime或Squeak环境的程序员使用Geiser应该有宾至如归的感觉。Geiser要求GNU Emacs 23.2或更高的版本。
Quack和Geiser可以一起使用,并且相辅相成。更多信息见Geiser手册。
为Geiser提供的Debian和Ubuntu软件包在名称geiser下适可获取的。
-
Emacs用一个为Scheme的主要模式传递,Scheme模式,而不是与上面的选项一样的特性,合理地编辑Racket代码。然而,这种模式并不能为Racket特定形式提供支持。
-
没有文件,Racket项目是不完整的。Scribble支持emacs可用Neil Van Dyke的Scribble模式获取。。
此外,当编辑Scribble文件的时候,texinfo模式(包括用GNU Emacs)和纯文本模式工作会非常好。鉴于与Racket相比Scribble语法是如此不同,上边的Racket主要模式不是真正的适合这种任务。
-
Paredit是在LISP类似语言中伪结构编辑程序的一个小模式。除了提供高阶S表达式编辑命令外,它可以帮你防止意外的不平衡括号。
对Paredit的Debian和Ubuntu软件包在名字paredit-el下可以获取。
-
Smartparen对编辑S表达式是一个小模式,保持括号平衡、类似于Paredit等等。
-
Alex Shinn的scheme-complete提供了智能的、上下文敏感的代码完成。它还用Emacs的eldoc模式集成以在小缓冲区中提供现场文档。
而这种模式是专为R5RS设计,它仍能用于Racket的开发。该工具不知道Racket标准库的大部分,而且在Scheme和Racket有分歧的情况下,现场文档可能有一些出入。
-
RainbowDelimiters模式颜色括号和其它分隔符根据嵌套深度确定。通过嵌套深度着色使人们一目了然地知道哪些圆括号匹配。
-
ParenFace让你选择在哪面(字体,颜色,等等)的括号应显示。选择一个交替的面可以使“tone down(按下)”括号。
-
on-parens是对smartparens行为用evil模式的通常状态去更好工作的一个包装。
-
evil-surround提供命令去添加、删除和改变括号和其它分隔符。
-
evil-textobj-anyblock添加一个文本对象相匹配最接近的任何括号或其它分隔符序对。
带Scheme支持的Vim运送的许多分配,它们将更多地用于Racket工作。你可以像Scheme一样用以下方式激活Racket文件的文件类型检查:
if has("autocmd") |
au BufReadPost *.rkt,*.rktl set filetype=scheme |
endif |
或者,你可以使用vim-racket插件来实现自动检测、缩进和专门针对Racket文件的语法高亮显示。使用插件是最简单的方法,但是如果你想把你自己的设置或重写插件设置,添加类似于下面的内容到你的".vimrc"文件:
if has("autocmd") |
au BufReadPost *.rkt,*.rktl set filetype=racket |
au filetype racket set lisp |
au filetype racket set autoindent |
endif |
然而,如果您采取这一路径,你可能需要在安装插件时做更多的工作,因为很多与Lisp相关的插件和vim脚本都不知道Racket。你也可以在一个"scheme.vim"中或在vim文件夹的"ftplugin"子文件夹中的"racket.vim"文件中设置这些条件命令。
vim的大多数安装会自动具有有用的默认启用,但如果你的安装没有,你会希望至少在你的".vimrc"文件里去设置:
" Syntax highlighting |
syntax on |
|
" These lines make vim load various plugins |
filetype on |
filetype indent on |
filetype plugin on |
|
" No tabs! |
set expandtab |
缩格
你可以通过在Vim里设置lisp和autoindent(自动缩格)选项启用Racket的缩格。然而,缩格是有限的也不是和你在Emacs中能得到的一样完整。你也可以用Dorai Sitaram的scmindent达到Racket代码的更好缩格。有关如何使用缩格器的说明可在网站上查阅。
如果使用内置的缩格器,可以通过设置如何缩进某些关键字来定制它。上面提到的vim-racket插件为你设置了一些默认关键字。你可以在你的".vimrc"文件里添加你自己的关键字,像这样:
" By default vim will indent arguments after the function name |
" but sometimes you want to only indent by 2 spaces similar to |
" how DrRacket indents define. Set the `lispwords' variable to |
" add function names that should have this type of indenting. |
|
set lispwords+=public-method,override-method,private-method,syntax-case,syntax-rules |
set lispwords+=..more.. |
突出
用于可视化的彩虹括号(Rainbow Parenthesis})脚本可以用于更可见的括号匹配。在许多平台上,有很多功能都是通过高亮显示来实现的。为你提供了良好的默认高亮显示设置。
结构化的编辑
Slimv插件有一paredit模式,就像Emacs里的paredit工作方式。然而,插件不知道Racket。你可以设置Vim去把Racket作为Scheme文件,也可以修改paredit脚本以加载".rkt"文件。
Scribble
Vim support for writing scribble documents is provided by the scribble.vim plugin. 对书写scribble文件,Vim通过scribble.vim插件被支持。
混杂的
如果你安装了很多Vim插件(不需要特别针对Racket),我们建议使用一个插件,让其它插件更容易加载。Pathogen是一个这样做的插件;使用它,你可以通过在你Vim安装的"bundle"文件夹里提取它们到子目录来安装新插件。
Racket package支持语法高亮显示和构建 Sublime Text。