My VAXstations now have Vim 9.2 (patch level 491, February 2026 source): the character-cell build for OpenVMS VAX that Zoltan Arpadffy’s Polarhome service still builds, installed for all users with a DCL installer and a DCL uninstaller.
Be clear about what this is. I did not build it. The program is the prebuilt
vim.exe that Polarhome supplies, and the kit puts it on the machine exactly as
supplied; the work was the installation, which is more interesting than it sounds on
a file system with 39-character names and an eight-level directory limit. And it has
a defect that is in the supplied program, not in my kit: with syntax highlighting or
file-type detection on, it ends with “Caught deadly signal SEGV” on some files
(.TXT among them). Below is exactly which, and the four-line .VIMRC that avoids it.
Nothing here is a rebuild; that is a later piece of work.
Claude Code did much of the hard work.
Downloads, with SHA-256 sums in SHA256SUMS.TXT:
- VIM_VAX_92_491B.BCK
(48 MB, SHA-256
0bd490e7883394e83d1465a1cc39a8d11d3db2b4aea0927b77d371a396bbf5dd): the kit to install, and its file list VIM_VAX_92_491B_LIST.LIS. - VIM_INSTALL.COM and VIM_UNINSTALL.COM; the saveset also holds VIM_SETUP.COM, which each user runs.
- README.TXT (read the first section: the defect) and SOURCES.TXT (the provenance, and the hash of every archive the kit was made from).
- VIM_TEST.COM, the test a user runs.
- The licence: LICENSE.TXT (the Vim licence).
What the package is
Polarhome’s vim-92-exe-vax-term.zip and vim-92-runtime.zip: the version string
says VIM - Vi IMproved 9.2 (2026 Feb 14, compiled May 17 2026), “Huge version”, patches
1-491, compiled with Compaq C V6.4-005 on OpenVMS VAX V7.3 on Polarhome’s own VAX. It is
a terminal-only build (+syntax, +acl; no GUI, no Python, no job or channel). The
archives, with their hashes, are listed in SOURCES.TXT; the matching source (vim92-491,
with src/INSTALLvms.txt and os_vms.txt) is Polarhome’s too.
Installing
You need OpenVMS VAX 7.3, SYSTEM (or SYSPRV) and about 180,000 free blocks while
installing (the 94,500-block saveset and the 80,000 blocks of the installed tree), and patience: the restore of the
about 4,770 files takes about 12 minutes on a VAXstation 4000/90 (about 7 for the uninstall).
- Put the saveset and the
.COMfiles into one directory..BCKin binary,.COMin ASCII. $ @VIM_INSTALLrestores the tree intoSYS$COMMON:[SYSLIB.VIM], verifies it, writes a manifest and smoke-tests it with a non-interactive edit.@VIM_INSTALL "" REPLACEreplaces an installed copy. Nothing is changed outside that directory.- Each user:
@SYS$COMMON:[SYSLIB.VIM]VIM_SETUP. It definesVIM,VIMRUNTIMEand the commandsVI,VIM,VIEW,XXDandEXCTAGS. $ @VIM_UNINSTALLremoves exactly what the manifest recorded, and keeps any file that was changed.
Options are quoted, because the VMS C run-time makes unquoted command lines lower case:
-R is written -/r (that is how Vim’s own os_vms.txt spells it).
Using it safely: the defect
(M) Measured on VAX90, with the commands and the exit status in README.TXT:
| What | Result |
|---|---|
vim file.c, interactive, defaults on: coloured highlighting | works |
vim file.txt (the same defaults) | crashes at once: Vim: Caught deadly signal SEGV, exit status %X1000000C |
:help help.txt with syntax on | crashes |
:syntax on for .TXT, .LOG, .H, .DAT, a file called README., or an unnamed buffer | crashes; for .C, .COM, .VIM, .PY it works |
the same with -u NONE (nothing loaded) | works, and so does :help |
non-interactive editing: vim -es -c "%s/old/new/g" -c "wq" file | works |
It is the file-type detection that falls back to the Vim 9 scripts dist/ft.vim and
dist/script.vim; Vim 9 script functions themselves work. The cause is in the program.
The kit therefore installs no system-wide vimrc that would turn highlighting on for
everyone (the supplied one does). A user who wants to edit text puts this in
SYS$LOGIN:.VIMRC:
set nocompatible
filetype off
syntax off
or starts with vim -u NONE FILE.TXT. With those, vim file.txt and :help work.
A rebuild from Polarhome’s source with our own Compaq C might fix it; I have not tried.
The interesting parts
- ODS-2. Names are at most 39 characters. Eight of the 4,766 files in the runtime
archive have longer names (Vim’s own syntax-test inputs and expected screens);
UNZIPrefuses them, and they are not in the kit, which is listed inREADME.TXTwith sizes and hashes. Vim’s own syntax regression tests cannot be run from this install. - Eight directory levels. Seven files lie deeper than that below
SYS$COMMON:[SYSLIB](pack/dist/opt/netrw/autoload/netrw/...), and RMS refuses such names. They are only reachable through a rooted logical name (DEFINE/TRANSLATION=CONCEALED). The installer restores through one, and: my first installer, which searched through the ordinary name, recorded 4,763 files in the manifest and left seven behind at uninstall. - A rooted name cannot be built on another rooted name.
SYS$COMMON:is rooted; my firstVIM_SETUPdefinedVIMon it and the image activator said-RMS-F-DEV. - Vim cannot use a rooted name as
VIMRUNTIME. It appendssyntax/syntax.vimto the translation and the result is not a file name. What works: a rootedVIMROOT, and ordinary names pointing into it,VIM = VIMROOT:[000000]andVIMRUNTIME = VIMROOT:[VIM92]. - E138 on first use. Leaving Vim the first time printed “E138: Can’t write viminfo
file sys$login:.viminfo!”. The cause (M): Vim 9.2 on VMS cannot create the viminfo file.
For a file that does not exist it makes an empty one and fails; writing into an existing
file, even an empty one, works.
VIM_SETUPcreates the empty.VIMINFOonce. - A text file made with DCL
OPEN/WRITEhas record format VFC, and Vim reads such a file as one long line with control characters in it.CREATE,EDIT,COPYand FTP make files Vim reads properly. - The test.
VIM_TEST.COMmakes 12 checks as an unprivileged user (banner, a non-interactive edit that keeps the record format and makes a new version, syntax highlighting of a C file,:help, the optional packages including the one nine levels deep,XXD,CTAGS, the viminfo write) and reports the known crash without counting it.
Results (M = measured on the real VAXstation 4000/90)
- (M)
VIM_TESTas a fresh, unprivilegedUSER1: 12 of 12, under a minute. - (M) The lifecycle test (install, refuse a second install,
CHECK, a changed file and a user file survive the uninstall, uninstall, a second uninstall says “not installed”, reinstall,REPLACE): 21 of 21, 1 hour 2 minutes on VAX90, nearly all of it three restores of the 4,768 files (about 12 minutes each) and two uninstalls (about 7 minutes each). - (M) The supplied
VIM.EXE,XXD.EXEandCTAGS.EXEcome out of the installed copy byte for byte (SHA-256 checked after an RCP download):ca19080f...e87960d08,b2286c83...21873c10,8037d6ca...cc6ab6f.
Things this does not do
- It does not fix the crash. A rebuild from the matching source with our own Compaq C might; that would be a separate kit.
:helpneeds a window: run from a batch job (no terminal) Vim sees a screen of 2 lines by 12 columns and saysE36: Not enough room. Interactively it works.- The plugins
matchitandnetrware found on the runtime path, but in non-interactive mode:packadddid not source them (g:loaded_netrwstays 0): I did not look into that. - No GUI (the Motif
gvimin Polarhome’s full distribution is not installed; the VAXen are headless), no Python/Perl/Lua, no clipboard.
Licence
Vim is distributed under the Vim licence, which is charityware: unmodified copies
and executables made from unmodified sources may be distributed if the licence text goes
with them, and if you like it you are asked to think of the children in Uganda
(:help uganda). LICENSE.TXT is that text, unmodified. The installer, uninstaller,
setup procedure and test are mine.
