The Vim text editor can run scripts written in several programming languages: Python, Ruby, and Lua, to name just three, and MzScheme, to name one more. I got curious about this last one. I assumed from the name that MzScheme is a dialect of Lisp, but I’ve never seen evidence of anyone actually writing a Vim script in this language. I popped open LaunchBar (whose ability to search Wikipedia I’ve mentioned before), selected Wikipedia, and typed in “mzscheme,” which gave me these results:
That wasn’t what I expected. Okay, apparently “MzScheme” is an older name for the programming language and environment that are now called Racket. But Abraham M. Schermerhorn was… the mayor of Rochester, New York? The city I used to live in? And he died in 1855, preceding even ancient Lisp by over a century. What the hell was he doing in the search results for “mzscheme”? It took me a lot of squinting to realize that “M. Schermerhorn” does sort of, a little bit, look like “mzscheme.”1
One mystery still remains: why are Vim users so uninterested in writing scripts in Lisp? Snarky Emacs-related answers aside, I think the answer at this point may just be that many distributions ship a Vim that’s been compiled without support for Racket.2 This issue thread suggests that you can’t build a Racket-enabled Vim under Ubuntu unless you compile Racket yourself. Homebrew doesn’t include Racket support in its formula for Vim, and even the flexibility-obsessed Nix doesn’t offer Racket support in its vim_configurable derivation. This leads to a chicken-and-egg problem where people don’t script Vim with Racket because their copy of Vim doesn’t support that, and packagers don’t build in Racket support because no one is asking for it.
Wikipedia has an article called “A. M. Schemerhorn”—note the missing “r”—that redirects to “Abraham M. Schermerhorn.” I don’t think the search algorithm would have even identified a match had this redirect not existed.↩︎
If only Vim had supported the GNU flavor of Scheme instead, we could call these builds guileless.↩︎