24.3 Vim 编辑器
On this page:
24.3.1 增强的 Racket 支持
24.3.2 缩进
24.3.3 高亮
24.3.4 结构化编辑
24.3.5 REPL
24.3.6 Scribble 支持
24.3.7 杂项
24.3.8 旧版 Vim

24.3 Vim 编辑器🔗

许多 Vim 发行版自带对 Scheme 的支持,大部分可以用于 Racket。Vim 还自带一些对 Racket 的特殊支持。

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 的默认支持来自此插件的子集;自行安装可获得更多功能。

vim-racket 插件根据 #lang 行检测 filetype 选项。例如:
  • #lang racket#lang racket/base 开头的文件的 filetyperacket

  • #lang scribble/base#lang scribble/manual 开头的文件的 filetypescribble

vim-racket 插件为 Racket 和其他一些标准 Racket 语言提供了配置。

许多 Racket 语言仍然需要语法和缩进支持。如果你为其他 Racket 语言创建了 Vim 支持,请考虑将其贡献给 benknoble/vim-racket,以便其他 Vim 用户受益。

24.3.2 缩进🔗

如果你使用 增强的 Racket 支持 且 Vim 版本为 9 或更高,racket 文件类型的改进缩进已开箱即用。

否则,你可以通过在 Vim 中设置 lispautoindent 选项来手动启用 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" 文件上加载。

要获得更 Vim 风格的按键映射,将以下任一项与 tpope/vim-sexp-mappings-for-regular-people 搭配使用:

benknoble/vim-sexp 分支是稍微更现代的 vimscript。

使用体验与 paredit 相当,但对手指更友好。

24.3.5 REPL🔗

有很多通用的 Vim + REPL 插件。以下是几个开箱即用支持 Racket 的插件:

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