Vim 9.2 for VAX OpenVMS 7.3

Vim 9.2 for VAX OpenVMS 7.3

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:

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).

  1. Put the saveset and the .COM files into one directory. .BCK in binary, .COM in ASCII.
  2. $ @VIM_INSTALL restores the tree into SYS$COMMON:[SYSLIB.VIM], verifies it, writes a manifest and smoke-tests it with a non-interactive edit. @VIM_INSTALL "" REPLACE replaces an installed copy. Nothing is changed outside that directory.
  3. Each user: @SYS$COMMON:[SYSLIB.VIM]VIM_SETUP. It defines VIM, VIMRUNTIME and the commands VI, VIM, VIEW, XXD and EXCTAGS.
  4. $ @VIM_UNINSTALL removes 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:

WhatResult
vim file.c, interactive, defaults on: coloured highlightingworks
vim file.txt (the same defaults)crashes at once: Vim: Caught deadly signal SEGV, exit status %X1000000C
:help help.txt with syntax oncrashes
:syntax on for .TXT, .LOG, .H, .DAT, a file called README., or an unnamed buffercrashes; 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" fileworks

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); UNZIP refuses them, and they are not in the kit, which is listed in README.TXT with 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 first VIM_SETUP defined VIM on it and the image activator said -RMS-F-DEV.
  • Vim cannot use a rooted name as VIMRUNTIME. It appends syntax/syntax.vim to the translation and the result is not a file name. What works: a rooted VIMROOT, and ordinary names pointing into it, VIM = VIMROOT:[000000] and VIMRUNTIME = 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_SETUP creates the empty .VIMINFO once.
  • A text file made with DCL OPEN/WRITE has record format VFC, and Vim reads such a file as one long line with control characters in it. CREATE, EDIT, COPY and FTP make files Vim reads properly.
  • The test. VIM_TEST.COM makes 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_TEST as a fresh, unprivileged USER1: 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.EXE and CTAGS.EXE come 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.
  • :help needs a window: run from a batch job (no terminal) Vim sees a screen of 2 lines by 12 columns and says E36: Not enough room. Interactively it works.
  • The plugins matchit and netrw are found on the runtime path, but in non-interactive mode :packadd did not source them (g:loaded_netrw stays 0): I did not look into that.
  • No GUI (the Motif gvim in 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.