24.3 Vim 编辑器
许多 Vim 发行版自带对 Scheme 的支持,大部分可以用于 Racket。Vim 还自带一些对 Racket 的特殊支持。
语法高亮
Racket 形式的自定义缩进
以及其他支持,包括注释和 raco fmt
还以内置 compiler 插件的形式支持多个 raco 命令;更多信息请参见 :help compiler。
有关旧版 Vim 的信息,请参见 旧版 Vim。
24.3.1 增强的 Racket 支持
Vim 默认会将你的 Racket 文件检测为 Scheme。要获得 Racket 文件类型的额外功能,可以考虑从 benknoble/vim-racket 安装 vim-racket 插件。它在增强的缩进和语法高亮基础上启用了 Racket 文件的自动检测。Vim 的默认支持来自此插件的子集;自行安装可获得更多功能。
以 #lang racket 或 #lang racket/base 开头的文件的 filetype 为 racket。
以 #lang scribble/base 或 #lang scribble/manual 开头的文件的 filetype 为 scribble。
vim-racket 插件为 Racket 和其他一些标准 Racket 语言提供了配置。
许多 Racket 语言仍然需要语法和缩进支持。如果你为其他 Racket 语言创建了 Vim 支持,请考虑将其贡献给 benknoble/vim-racket,以便其他 Vim 用户受益。
24.3.2 缩进
如果你使用 增强的 Racket 支持 且 Vim 版本为 9 或更高,racket 文件类型的改进缩进已开箱即用。
否则,你可以通过在 Vim 中设置 lisp 和 autoindent 选项来手动启用 Racket 的缩进。你需要自定义 buffer-local 的 lispwords 选项来控制特殊形式的缩进方式。参见 :help ’lispwords’。然而,使用 lispwords 进行缩进可能有限制,可能不如 Emacs 中那么完善。你也可以使用 Dorai Sitaram 的 scmindent 来获得更好的 Racket 代码缩进。有关如何使用该缩进器的说明可在其网站上找到。
24.3.3 高亮
在许多平台上,Vim 自带 Scheme 和 Racket 的语法高亮。你会想要使用 racket 文件类型以获得最佳语法体验;有关 Racket 语言的增强语法高亮,请参见 增强的 Racket 支持。
Vim 的 Rainbow Parenthesis 脚本有助于更明显地匹配括号。
24.3.4 结构化编辑
Slimv 插件有一个类似 Emacs 中 paredit 的 paredit 模式。但该插件不识别 Racket。你可以将 Vim 设置为将 Racket 视为 Scheme 文件,或者修改 paredit 脚本使其在 ".rkt" 文件上加载。
benknoble/vim-sexp 分支是稍微更现代的 vimscript。
24.3.5 REPL
kovisoft/slimv,如果你使用 scheme 文件类型
24.3.6 Scribble 支持
Vim 编写 Scribble 文档的支持由 benknoble/scribble.vim 提供。
24.3.7 杂项
如果你要安装许多 Vim 插件(不一定是 Racket 专用的),我们建议使用一个能更方便加载其他插件的插件。有很多插件管理器可供选择。
Pathogen 就是这样一个插件;使用它,你可以通过将插件解压到个人 Vim 文件的 "bundle" 文件夹的子目录中来安装新插件(Unix 上为 "~/.vim",MS-Windows 上为 "$HOME/vimfiles")。
对于较新的 Vim 版本,你可以使用包管理系统(:help packages)。
一个关于各种管理器的较新参考是 What are the differences between the vim plugin managers?。同一网站 Vi & Vim 是向 Vim 用户寻求帮助的好地方。
24.3.8 旧版 Vim
从 Version 9.0.0336 开始,Vim 自带来自 增强的 Racket 支持 的运行时文件,但这些文件不包含 racket 文件类型的检测。如果你使用的是此版本或更新版本,你可能需要调整本文档中的建议,使用 racket 文件类型代替 scheme。你还应该考虑自行安装该插件以获取最新更改,因为 Ben 向上游 Vim 同步更改的速度较慢,且插件包含改进的文件类型检测。
从 version 7.3.518 开始,Vim 将扩展名为 .rkt 的文件检测为 scheme 文件类型。Version 8.2.3368 添加了对 .rktd 和 .rktl 的支持。
在较旧的版本中,你可以使用以下方式启用将 Racket 文件检测为 Scheme 的文件类型检测:
if has("autocmd") |
autocmd filetypedetect BufReadPost *.rkt,*.rktl,*.rktd set filetype=scheme |
endif |
如果你的 Vim 支持 ftdetect 系统(这种情况下它可能已经足够新以支持 Racket),你仍然可以将以下内容放入 "~/.vim/ftdetect/racket.vim"(MS-Windows 上为 "$HOME/vimfiles/ftdetect/racket.vim";参见 :help runtimepath)。
" :help ftdetect |
" If you want to change the filetype only if one has not been set |
autocmd BufRead,BufNewFile *.rkt,*.rktl,*.rktd setfiletype scheme |
" If you always want to set this filetype |
autocmd BufRead,BufNewFile *.rkt,*.rktl,*.rktd set filetype=scheme |