1. 准备开始 vms-started
Vim (Vi IMproved) 是一个 Vi-兼容的文本编辑器,它能在人类已知的差不多所有操作系
统上运行。现在在 OpenVMS 上也可以了,无论是文本方式或者 X/Motif 图形方式都可以
支持。它拥有完整的功能,和其他操作系统上的 Vim 也完全兼容。
2. 下载文件 vms-download
可从官方 Vim 站点下载 Vim 源代码:
https://github.com/vim/vim/archive/refs/heads/master.zip
或者使用 git:
git clone https://github.com/vim/vim.git
旧版的发布归档也可在这里找到:
https://ftp.nluug.nl/pub/vim/
或者使用某个镜像站点:
https://ftp.nluug.nl/pub/vim/MIRRORS
备注: ftp 服务器已经退休,不再更新。
可以从这里获取编译好的二进制文件:
http://www.polarhome.com/vim/
要使用预编译的二进制版本,需要如下档案之一:
vim-XX-exe-x86-gui.zip X86_64 GUI/Motif 可执行文件
vim-XX-exe-x86-term.zip X86_64 console 可执行文件
vim-XX-exe-ia64-gui.zip IA64 GUI/Motif 可执行文件
vim-XX-exe-ia64-gtk.zip IA64 GUI/GTK 可执行文件
vim-XX-exe-ia64-term.zip IA64 console 可执行文件
vim-XX-exe-axp-gui.zip Alpha GUI/Motif 可执行文件
vim-XX-exe-axp-gtk.zip Alpha GUI/GTK 可执行文件
vim-XX-exe-axp-term.zip Alpha console 可执行文件
vim-XX-exe-vax-gui.zip VAX GUI 可执行文件
vim-XX-exe-vax-term.zip VAX console 可执行文件
当然还包括 (可选)
vim-XX-runtime.zip 运行时文件
二进制档案包括: vim.exe、ctags.exe、xxd.exe 等文件。
对于 GTK 可执行文件,还需提供在 Alpha 和 IA64 平台上可以获取的 GTKLIB。
代码已在 Open VMS 6.2 - 8.2 版本上进行过测试,并覆盖 Alpha、VAX、IA64 和
X86_64 平台以及 DEC C 编译器环境。应该不会有大问题。如果系统缺少某些必需的库,
可以调整 OS_VMS_CONF.H 文件。
如果决定编译 Vim 时加上 +perl,+python 等选项,首先需要下载 OpenVMS 的 Perl 和
Python 等的发布版本。编译并布署需要的库,并修改 MAKE_VMS.MMS 文件的若干行。在
Vim 这边,应该不需要其他调整。
GTK、XPM 库的路径也应该在 MAKE_VMS.MMS 里配置。
注意: 在 VAX 上,用 DEC C 编译器是没有问题的。VAX C 编译器在预处理指令方面和
ANSI C 不完全兼容,因而需要使用转换程序来完成这项麻烦的工作。详细的指令请阅读
INSTALLvms.txt 文件。
要编译 XXD.EXE,切换到该子目录,并单独编译。
CTAGS 不再是 Vim 源程序发布的一部分,但是 OpenVMS 特定的源代码包中,可能仍然如
上所述那样包含 CTAGS 的源代码。关于 VMS 上的 CTAGS 的更多信息可以参考
http://www.polarhome.com/ctags/
高级用户可能想试试修改 FEATURE.H。
也可以编译时加上 +xfontset +xim 选项,但需要准备好 GUI 字体等设置。参见 Vim 命
令行提示下的 `:help xim`。
还可以使用带有 GTK 图标的 GUI。为此,需要下载和安装 OpenVMS 版本的 GTK,或至少
获取运行时共享包: polarhome.com 里有提供 LIBGTK。
从 7.2 版本开始,Vim 使用 GTK2+,而 OpenVMS 最后的 GTK 版本是 1.2.10,所以 GTK
版本已不再可用。
如果有更复杂的问题,请将问题发送到 Vim on VMS 邮件列表 <vim-vms@polarhome.com>
关于 vim-vms 列表的更多情况可以在这里找到:
http://www.polarhome.com/mailman/listinfo/vim-vms
5. 布署 vms-deploy
Vim 使用一个特定的目录结构来保存文档和运行时文件:
vim (或者随便什么名字)
|- tmp
|- vim57
|----- doc
|----- syntax
|- vim62
|----- doc
|----- syntax
|- vim64
|----- doc
|----- syntax
vimrc (系统 rc 文件)
gvimrc
使用:
define/nolog VIM device:[path.vim]
define/nolog VIMRUNTIME device:[path.vim.vim60]
define/nolog TMP device:[path.tmp]
可使 vim.exe 指定相关文档,文件类型插件,语法文件的所在位置,并指定用于存放临
时文件的目录。请将 Vim 发布版本的 "runtime" 子目录复制到 vimruntime 指定目录
里。
逻辑名 $VIMRUNTIME 和 $TMP 可选。
如果 $VIMRUNTIME 未设置,Vim 会尝试进行猜测并自动设置。更多情况可以查阅
`:help runtime`。
如果 $TMP 未设置,就无法使用如 CTAGS、XXD、打印等部分功能,因为它们需要临时目
录才能正常操作。$TMP 目录应该对用户可读写。设置 $TMP 最简单的方法是定义逻辑
名:
define/nolog TMP SYS$SCRATCH
或:
define/nolog TMP SYS$LOGIN
6. 实际使用方法 vms-usage
通常,只需运行一个 Vim 版本,因而为 Vim 提供一个专用的目录就够了。将完整的 Vim
运行时目录结构复制到要布署的位置。在用户 LOGIN.COM (在 SYS$LOGIN 目录下) 里加
入如下几行。
把逻辑名 $VIM 设置为:
$ define VIM device:<path>
再设置一些符号:
$ ! vi 文本方式启动 Vim。
$ vi*m :== mcr VIM:VIM.EXE
$ !gvi GUI 方式启动 Vim。
$ gv*im :== spawn/nowait mcr VIM:VIM.EXE -g
请查阅如何定制和配置符号的相关内容。
还可以在用户主目录 (SYS$LOGIN) 下创建 .vimrc 和 .gvimrc 文件,以覆盖缺省设置。
最简单的方法是使用示例文件并将其重命名。需要把菜单文件 (MENU.VIM) 和 vimrc
和 gvimrc 文件保留在原来的 $VIM 目录里。这些文件作为所有用户的缺省设置,个人用
户只需要把自己新增或者修改的设置值保存到其主目录下的 .vimrc 和 .gvimrc 文件里
即可。这样就不会有问题。
注意: 记住,系统 rc 文件 (所有用户的缺省) 名开头没有 "."。所以,系统文件名是:
$VIM:vimrc
$VIM:gvimrc
$VIM:menu.vim
而用户定制的 rc 文件名是:
sys$login:.vimrc
sys$login:.gvimrc
可用 :version 命令查看是否所有文件都在正确位置。
LOGIN.COM 示例:
$ define/nolog VIM DKA0:[UTIL.VIM81]
$ vi*m :== mcr VIM:VIM.EXE
$ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40
$ set term/inq/ins ! 查询终端能力
$ set disp/create/node=192.168.10.202/trans=tcpip
注意: 如果在独立服务器或者集群环境下工作,上述设置已经足够;如果希望在 DECNET
环境下把 Vim 作为跨节点的编辑器,同样的设置也基本够用,只需要再定义 "完整" 路
径就可以了:
$ define VIM "<服务器名>[""用户名 密码""]::设备:<路径>"
$ vi*m :== "mcr VIM:VIM.EXE"
例如:
$ define VIM "PLUTO::RF10:[UTIL.VIM]"
$ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! 如果需要密码的话
如果同时安装了多个版本,可用 $VIMRUNTIME 逻辑名指向所需的 Vim 版本。如果
$VIMRUNTIME 未定义,Vim 会借用 $VIM 逻辑名。可以执行 Vim 命令 `:help runtime`
来了解关于 $VIMRUNTIME 逻辑名的更多信息。
系统管理员可能希望设立一个系统范围的 Vim 安装版本。然后将以下内容加到
SYS$STARTUP:SYLOGICALS.COM
$ define/nolog/sys VIM 设备:<路径>
$ define/nolog/sys TMP SYS$SCRATCH
并将以下内容加到 SYS$STARTUP:SYLOGIN.COM
$ vi*m :== mcr VIM:VIM.EXE
$ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40
这样就能为系统中的每个用户设立正常的 Vim 工作环境了。
重 要: OpenVMS 上的 Vim (和其它大小写不敏感的系统一样) 缺省假定命令行参数使用
小写。要指示使用大写的命令行参数,必须使用 "/" 符号。
示例:
vim -R filename ! 代表: -r 列出交换文件并退出
vim -/r filename ! 代表: -R 只读模式 (类似于 "view")
vim -u <vimrc> ! 代表: -u 使用 <vimrc> 代替其它的 .vimrc
vim -/u <gvimrc> ! 代表: -U 使用 <gvimrc> 代替其它的 .gvimrc
7. GUI 模式的问题 vms-gui
OpenVMS 是一种真正的大型机操作系统。因此,即使它提供了 GUI 控制台,大多数用户
在日常操作中也不会使用本地的 X/Window 环境。从而无法像其他系统一样 "直接" 以
GUI 模式启动 Vim。不过,这个问题也不难解决。
首先: 需要一个内建提供 GUI 支持的 Vim 可执行版本。
其次: 需要在 VMS 服务器上安装 DECW/Motif,不然会得到错误报告,提示一些共享库缺
失。
其三: 如果选择执行带有如 GUI/GTK 等附加功能的 Vim,还需要安装 GTK 或至少提供
GTK 运行时环境 (LIBGTK 可从 http://www.polarhome.com/vim/ 下载)。
1) 如果使用 VMS X/Motif 控制台:
可如此启动 Vim:
$ mc device:<path>VIM.EXE -g
或者在 Vim 命令行提示下,输入 :gui 命令。详见 `:help gui`。
2) 如果使用其他 X/Window 环境,比如 Unix 或者远程的 X VMS 控制台,可设置显示,
连接到 X 终端:
$ set disp/create/node=<终端 IP 地址>/trans=<传输层-协议名>
然后像 1) 那样,正常启动 Vim。更多的帮助可参见 VMS 文档,或者在 VMS 提示符
下,输入 "help set disp"。
示例:
$ set disp/create/node=192.168.5.159 ! 缺省传输层是 DECnet
$ set disp/create/node=192.168.5.159/trans=tcpip ! TCP/IP 网络
$ set disp/create/node=192.168.5.159/trans=local ! 在同一台机器上显示
注意: 只能使用上面示例中提供的其中一种定义。
更多的信息可以通过在 VMS 提示符下输入 "$help set disp" 得到。
3) 另外一种优雅的解决方案是使用 XDM,前提是已在 OpenVMS 机器上安装。通过 XDM
客户端,可以像和 GUI 控制台一样使用 Vim。
4) 如果在 MS-Windows 或者其它非 X/Window 环境上工作,需要设置 X 服务器,并像
2) 那样,启动 Vim。MS-Windows 上有免费的 X 服务器,如 MIX,Omni X 等。也有
优秀的商业软件,如 eXcursion 或者 ReflectionX,它们都提供内建的 DEC 支持。
请 注意,不带 GUI 支持的可执行程序在文本模式下启动时,比带 GUI 支持的版本的启
动速度稍快。因此,如果不打算使用 GUI 特性,建议考虑非 GUI 版本的可执行程序。
8. 有用的提示 vms-notes
8.1 退格/删除键
8.2 过滤程序
8.3 VMS 文件版本号
8.4 目录名转换
8.5 远程宿主调用
8.6 终端问题
8.7 十六进制编辑和其他外部工具
8.8 执行 vimrc 和 gvimrc 脚本
8.9 从 Vim 里打印
8.10 设置符号
8.11 diff 和其他 GNU 程序
8.12 diff-模式
8.13 允许 C 关键字里出现 '$'
8.14 为初学者提供的 VIMTUTOR (VIM 教程)
8.15 控制台模式启动太慢的问题
8.16 公用 VIM 目录 - 不同的体系结构
8.1 退格/删除键
VMS 存在退格/删除键的不一致问题。:fixdel 无法解决这个问题,应该用以下方法 (假
定 'cpo' 里不包含 "<"):
:inoremap <C-?> <C-H> " 在终端模式下
:inoremap <Del> <C-H> " 在 gui 模式下
详见第 8.6 章 (终端问题)。
(Bruce Hunsaker <BNHunsaker@chq.byu.edu> Vim 5.3 版本)
8.2 过滤程序
Vim 支持过滤程序;例如,如果系统提供了像 Unix 那样支持输入/输出重定向 (<输入文
件 >输出文件) 的 sort 程序,可用
:map \s 0!'aqsort<CR>
(Charles E. Campbell,Jr,<cec@gryphon.gsfc.nasa.gov> Vim 5.4 版本)
8.3 VMS 文件版本号
如果希望 Vim 在保存文件时,会保存到带有更高文件版本号的新文件。试试以下设
置。
:set nobackup " 不要创建 *.*_ 备份文件
:set nowritebackup " 在 VMS 中没有任何意义。这已经是缺省行为。
从缺省的交换文件恢复文件没有任何问题。详见 `:help swapfile`。
(Claude Marinier <ClaudeMarinier@xwavesolutions.com> Vim 5.5 版本,Zoltan
Arpadffy Vim 5.6 版本)
8.4 目录名转换
Vim 会在内部将 unix 风格的路径名、甚至包括混合 unix/VMS 的路径名,转换为 VMS
风格的路径名。典型的转换类似于:
/abc/def/ghi -> abc:[def]ghi.
/abc/def/ghi.j -> abc:[def]ghi.j
/abc/def/ghi.j;2 -> abc:[def]ghi.j;2
/abc/def/ghi/jkl/mno -> abc:[def.ghi.jkl]mno.
abc:[def.ghi]jkl/mno -> abc:[def.ghi.jkl]mno.
./ -> 当前目录
../ -> 相对上级目录
[.def.ghi] -> 相对下级目录
./def/ghi -> 相对下级目录
注意: 可能需要使用 <、> 尖括号 (设备:<路径>文件名.扩展名;版本)。比如,
rf10:<user.zay.work>test.c;1
(David Elins <delins@foliage.com>
Jerome Lauret <JLAURET@mail.chem.sunysb.edu> Vim 5.6 版本)
8.5 远程宿主调用
可以使用 Vim 作为跨节点的编辑器。
1. 编辑远端的文件:
vi "<服务器>""用户名 密码""::<设备>:<路径><文件名>;<版本>"
例如:
vi "pluto""zay passwd""::RF10:<USER.ZAY.WORK>TEST.C;1"
注意: 正确语法非常重要,不然 VMS 会识别为多个参数而非单个 (结果是: 文件找不
到)。
2. 设置 Vim 成为跨节点的编辑器。如果 Vim 没有在本地上安装,只要设置其所在的
IP 地址以及包含服务器名字的完整 Vim 路径,并运行如下的程序:
$ if (p1 .eqs. "") .OR. (p2 .eqs. "") then goto usage
$ set disp/create/node=<IP 地址>/trans=tcpip
$ define "VIM "<vim_服务器>""''p1' ''p2'""::<设备>:<vim 路径>"
$ vi*m :== "mcr VIM:VIM.EXE"
$ gv*im :== "spawn/nowait mcr VIM:VIM.EXE -g"
$ goto end
$ usage:
$ write sys$output " 请输入用户名和密码作为参数。"
$ write sys$output " 示例: @SETVIM.COM username passwd"
$ end:
注意: 不要在集群环境下使用 (也不需要),不然速度会非常非常慢,不过也许比本地的
Emacs 还要快些。:-)
(Zoltan Arpadffy,Vim 5.6 版本)
8.6 终端问题
如果 Vim 不能识别当前使用的终端名,Vim 会尝试缺省名,而启动时会得到如下提示:
在 termcap 中找不到终端项
'unknown-terminal' 未知。可用的内建终端有:
builtin_gui
builtin_riscos
builtin_amiga
builtin_ansi
builtin_vt320
builtin_vt52
builtin_pcansi
builtin_win32
builtin_xterm
builtin_iris-ansi
builtin_debug
builtin_dumb
默认值为: 'vt320'
要强制查询终端的可用能力:
$ set term/inquire
如果查询没用,解决方法是定义合适的缺省终端名:
$ ! 未知的终端名字。让我们使用 vt320 或者 ansi 代替。
$ ! 注意: 终端名大小写敏感。
$ define term "vt320"
从 VT100 到 VT320 (如 V300,VT220,VT200) 等终端不需要特别的键盘映射。它们应该
能够正常工作,包括光标移动,插入,删除等键。但 GUI 模式下的退格键除外。要解决
这个问题,可在 .gvimrc 里加入:
inoremap <Del> <BS>
Vim 一般会将所有终端识别为快速终端。如果通过远程或者慢速连接访问 Vim,可以关闭
快速终端选项:
set nottyfast " 设置慢速终端
8.7 十六进制编辑和其他外部工具
OpenVMS 和其他系统一个很重要的区别是,VMS 使用特殊的命令来执行可执行文件:
RUN <路径>文件名
MCR <路径>文件名 <参数>
OpenVMS 用户经常会不得不注意到,Vim 命令 :! 只会让用户进入 DCL 提示符。如果
想以此执行 DCL 的命令,那没有问题。但如果我们想执行诸如 XXD,CTAGS,JTAGS 等程
序,我们就会发现依照 Vim 文档进行操作会出现问题 (比如,`:help xxd`)。
解决方法: 执行 MC 命令,并加上可执行文件的全路径。例如,要执行 :%!xxd 命令,
可以改用:
:%!mc vim:xxd
更一般地:
:!mc <路径>文件 <参数>
注意: GUI 菜单下的 XXD 和 CTAGS 可以正常使用。
要定制 ctags,可以使用标准的参数来定义逻辑名 $CTAGS。如:
define/nolog CTAGS "--totals -o sys$login:tags"
详见 `:help tagsearch` 和 http://ctags.sourceforge.net/ctags.html 提供的 CTAGS
文档。
(Zoltan Arpadffy,Vim 5.6-70 版本)
8.8 执行 vimrc 和 gvimrc 脚本
如果想使用从别的平台 (如 Windows) 通过 ftp 等方式获取的 .vimrc 和 .gvimrc,可
能会出现问题。因为 VMS 使用的行尾表示方式与其他平台不同。
具体症状就是,Vim 无法执行该 .vimrc/.gvimrc,即使试图直接运行:
:so sys$login:.vimrc
一个技巧就是在其他平台上,压缩 (例如,使用 zip) 文件,然后在 VMS 上对其解压;
如果还有同样的问题,可以尝试在一个系统上创建文件,然后跨系统进行复制-粘贴 (为
此,需要能够在两个系统间互相访问。例如,Windows 上的 Xterm 窗口,或者从 VMS
telnet 到 Windows 上)。
(Sandor Kopanyi,<sandor.kopanyi@mailbox.hu> Vim 6.0a 版本)
8.9 从 Vim 里打印
要使 VMS 环境下的 Vim (GUI 模式版本) 能够支持打印,需要将 $TMP 逻辑名指向一个
临时目录,并将 SYS$PRINT 逻辑名指向缺省打印队列。
示例:
$define SYS$PRINT HP5ANSI
可以打印整个缓冲区或标记的局部区域。详见 `:help hardcopy`。
(Zoltan Arpadffy,Vim 6.0c 版本)
8.10 设置符号
如果如此设置 gvim,在运行 gvim 的终端上按 CTRL-Y 时,会关闭 gvim。通过设置不同
的符号,看来就能解决这个问题。建议如下:
$ GV*IM:==SPAWN/NOWAIT/INPUT=NLA0: MCR VIM:VIM.EXE -G -GEOMETRY 80X40
其中,/INPUT=NLA0: 会将 gvim 的标准输入与其运行终端隔离,从而阻断来自父窗口的
信号。
如果没有 -GEOMETRY 参数,gvim 窗口会很小,调整窗口大小后,菜单可能很容易会引起
混乱。
(Carlo Mekenkamp,Coen Engelbarts,Vim 6.0ac 版本)
8.11 diff 和其他 GNU 程序
Vim 6.0 版本开始实现了 diff 功能。但是 OpenVMS 并不使用 GNU/Unix 兼容的 diff,
而内建的 diff 不支持 Vim。
以下是一个简单的解决此问题的方法。安装 Unix 兼容的 diff,Vim 就能正常使用比较
模式了。此时,重定义 diff 程序如下:
define /nolog diff <GNU_PATH>diff.exe
另外一个更复杂的方法见下 (8.12 diff-模式)。此外,还有其他像 patch、make 等程序
都会有相同的问题。www.polarhome.com 提供了 Alpha 和 VAX 机器上的 GNU 程序包,
可以用来解决 OpenVMS 上的 GNU 问题。
(Zoltan Arpadffy,Vim 6.1 版本)
8.12 diff-模式
Vim 6.0 及更高版本提供 Vim 的 diff-模式 (见 new-diff-mode 、 diff-mode 和
08.7 )。它们使用外部程序 'diff' 并期待看到 Unix 兼容的 diff 输出结果。不过,
VMS 标准 diff 程序输出的格式与之并不兼容。要在 VMS 上使用 Vim 的 diff-模式,需
要:
1 安装 Unix 兼容的 diff 程序,例如 GNU diff
2 告诉 Vim 在 diff-模式下使用 Unix 兼容的 diff。
可以从 VIM-VMS 网站下载 GNU diff,它是 GNU 工具的一部分。链接是:
http://www.polarhome.com/vim/files/gnu_tools.zip。建议解压到一个单独的 "GNU"
目录下,并建立一个逻辑名 GNU: 来指向该目录,例如:
DEFINE GNU <DISK>:[<DIRECTORY>.BIN.GNU]
还可以定义 GDIFF 符号,以便在 DCL 提示下使用 GNU diff:
GDIFF :== $GNU:DIFF.EXE
现在可以告诉 Vim 使用新的 diff 程序了。以下示例程序取自 diff-diffexpr ,但把
外部 diff 程序的调用指向 VMS 上新的 diff。可将其加入 .vimrc 文件:
" 设置 vimdiff 选项
if v:version >= 600
" 在 VMS 上使用 GNU diff
set diffexpr=MyDiff()
function MyDiff()
let opt = ""
if &diffopt =~ "icase"
let opt = opt .. "-i "
endif
if &diffopt =~ "iwhite"
let opt = opt .. "-b "
endif
silent execute "!mc GNU:diff.exe -a " .. opt .. v:fname_in .. " " .. v:fname_new ..
\ " > " .. v:fname_out
endfunction
endif
现在就可以使用 Vim 的 diff-模式了,比如,用于在只读方式下比较两个文件:
$ VIM -D/R <FILE1> <FILE2>
也可以定义新符号来执行 vimdiff,例如:
$ VIMDIFF :== 'VIM' -D/R
$ GVIMDIFF :== 'GVIM' -D/R
现在可以用四种方式比较文件:
1. VMS diff: $ DIFF <FILE1> <FILE2>
2. GNU diff: $ GDIFF <FILE1> <FILE2>
3. VIM diff: $ VIMDIFF <FILE1> <FILE2>
4. GVIM diff: $ GVIMDIFF <FILE1> <FILE2>
(Coen Engelbarts,Vim 6.1 版本)
8.13 允许 C 关键字里出现 '$'
DEC C 使用很多带有 '$' 的标识符。因为 ANSI C 不允许如此,Vim 因而会把 '$' 当作
结束标识符的标记。可以通过修改 'iskeyword' 选项改变此行为。
在 .vimrc 文件里加入:
autocmd FileType c,cpp,cs set iskeyword+=$
也可创建文件 $VIM/FTPLUGIN/C.VIM (和/或 CPP.VIM 和 CS.VIM),并在其中加入以下命
令:
set iskeyword+=$
这样,基于单词的命令,如 '*'-搜索命令和 CTRL-] 标签搜索等,都能正确地作用于整
个标识符。(VMS 上的 Ctags 从 5.1 版本开始,也支持带 '$' 的 C 关键字)。
(Coen Engelbarts,Vim 6.1 版本)
8.14 为初学者提供的 VIMTUTOR (VIM 教程)
VIMTUTOR.COM DCL 脚本可以帮助 Vim 初学者学习/掌握在 OpenVMS 上运行 Vim 的基本
步骤。取决于所用的二进制发布版本,可能可以通过以下方式启动:
@vim:vimtutor
(Thomas.R.Wyant III,Vim 6.1 版本)
8.15 控制台模式启动太慢的问题
因为 GUI/GTK Vim 在控制台模式中也能很好地工作,很多管理员会为整个系统安装了这
些版本的 Vim 可执行程序。
不幸的是,在远端慢速连接上,对只想使用控制台的用户,GUI/GTK 版本会相当慢,这是
因为这些版本会试图检测 X 环境并引起超时。
幸运的是,有个简单的解决方法。管理员需要同时安装 GUI/GTK 版本和纯控制台版本,
如下:
|- vim73
|----- doc
|----- syntax
vimrc (系统 rc 文件)
gvimrc
gvim.exe (换名的 GUI 或 GTK 版本的 vim.exe)
vim.exe (纯控制台版本)
在系统脚本 (如 LOGIN.COM 或 SYSLOGIN.COM) 里,定义系统符号:
$ define/nolog VIM RF10:[UTIL.VIM73] ! VIM 所在的目录
$ vi*m :== mcr VIM:VIM.EXE
$ gvi*m :== mcr VIM:GVIM.EXE
$ ! 或者用以下方式启动
$ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40
这样,对没有 X 环境而只想使用纯控制台模式的用户,就可以避免效率低的问题了。
(Zoltan Arpadffy,Vim 7.2)
8.16 公用 VIM 目录 - 不同的体系结构
在下面这样包含不同体系结构结点的集群里:
$show cluster
View of Cluster from system ID 11655 node: TOR 18-AUG-2008 11:58:31
+---------------------------------+
| SYSTEMS | MEMBERS |
+-----------------------+---------|
| NODE | SOFTWARE | STATUS |
+--------+--------------+---------|
| TOR | VMS V7.3-2 | MEMBER |
| TITAN2 | VMS V8.3 | MEMBER |
| ODIN | VMS V7.3-2 | MEMBER |
+---------------------------------+
如果能够有一个公共的 VIM 目录,但分别执行不同的可执行程序,会很方便。
有若干实现方案:
方法 1。所有可执行程序在相同目录,但使用不同的名字。
在 login.com 或 sylogin.com 里,使用以下的脚本,就可以很容易做到:
$ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"
$ then
$ say "VAX 平台"
$ vi*m:== mcr vim:VIM.EXE_VAX
$ endif
$ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"
$ then
$ say "ALPHA 平台"
$ vi*m :== mcr vim:VIM.EXE_AXP
$ endif
$ if f$getsyi("ARCH_NAME") .eqs. "IA64"
$ then
$ say "IA64 平台"
$ vi*m :== mcr vim:VIM.EXE_IA64
$ endif
方法 2。放在不同目录:
$ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"
$ then
$ say "VAX 平台"
$ define/nolog VIM RF10:[UTIL.VAX_EXE] ! VAX 可执行程序
$ endif
$ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"
$ then
$ say "ALPHA 平台"
$ define/nolog VIM RF10:[UTIL.AXP_EXE] ! AXP 可执行程序
$ endif
$ if f$getsyi("ARCH_NAME") .eqs. "IA64"
$ then
$ say "IA64 平台"
$ define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 可执行程序
$ endif
$! 必须先定义 VIMRUNTIME,才能找到运行时文件
$ define/nolog VIMRUNTIME RF10:[UTIL.VIM73]
使用这种方法一个很好示例,可以参考来自 GNU_TOOLS.ZIP 包里的 [GNU]gnu_tools.com
脚本。可以从这里下载 http://www.polarhome.com/vim/
(Zoltan Arpadffy,Vim 7.2)
9. VMS 相关修改记录 (英文) vms-changes
Version 9.0 (2023 Nov 27)
- Vim is ported to the X86_64 architecture
- IMPORTANT: because of the getline function name used in structs like
in ex_cmds.h on X86_64 the CRTL_VER is kept under 80500000 level. The
proper solution would be to rename the getline function to something
else in the struct (and in all places it is used) - and avoiding to
use POSIX functions in structs, but this change would impact on all
other operating systems. (added to the VMS TODO list)
Read more about at:
https://forum.vmssoftware.com/viewtopic.php?f=38&t=8914&p=20049
- os_vms_conf.h includes have been reviewed for all architectures
- added support for the MODIFIED_BY define
Version 8.2 (2020 Feb 6)
- make all changes needed for clean compile build of v8.2 on VMS on all
platforms
- fix the call mkdir bug (vicente_polo@yahoo.es)
- test on VSI OpenVMS Alpha and Itanium platforms
- added LUA support
- added XPM support - Motif GUI with toolbar on all platforms
- XPM v3.4.11 libraries for IA64, AXP and VAX are added
- start integrating the new test scripts
Version 8.1 (2019 Jan 9)
- make necessary changes to build v8.1 on VMS
- GTK1.2.10 on VAX
Version 8.0 (2016 Nov 21)
- correct the VMS warnings and errors around handling the INFINITY (used in
json.c)
- minor VMS port related changes
- correct the make_vms.mms file for 8.0
- fix [.TESTDIR]make_vms.mms for 8.0
Version 7.4 (2013 Aug 10)
- Undo: VMS can not handle more than one dot in the filenames use
"dir/name" -> "dir/_un_name"
add _un_ at the beginning to keep the extension
- correct swap file name wildcard handling
- handle iconv usage correctly
- do not optimize on vax - otherwise it hangs compiling crypto files
- fileio.c fix the comment
- correct RealWaitForChar
- after 7.4-119 use different functions lib$cvtf_to_internal_time because
Alpha and VAX have G_FLOAT but IA64 uses IEEE float otherwise Vim crashes
- guard against crashes that are caused by mixed filenames
- [TESTDIR]make_vms.mms changed to see the output files
- Improve tests, update known issues
- minor compiler warnings fixed
- CTAGS 5.8 +regex included
Version 7.3 (2010 Aug 15)
- CTAGS 5.8 included
- VMS compile warnings fixed - floating-point overflow warning corrected on
VAX
- filepath completion corrected - too many chars were escaped in filename
and shell commands
- the following plugins are included into VMS runtime:
genutils 2.4, multiselect 2.2, multvals 3.1, selectbuf 4.3,
bufexplorer 7.1.7, taglist 4.5
- minor changes in vimrc (just in VMS runtime)
- make_vms.mms - HUGE model is the default
- [TESTDIR]make_vms.mms include as many tests possible
- modify test30 and test54 for VMS
- enable FLOAT feature in VMS port
- os_vms.txt updated
Version 7.2 (2008 Aug 9)
- VCF files write corrected
- CTAGS 5.7 included
- corrected make_vms.mms (on VAX gave syntax error)
Version 7.1 (2007 Jun 15)
- create TAGS file from menu
Version 7 (2006 May 8)
- Improved low level char input (affects just console mode)
- Fixed plugin bug
- CTAGS 5.6 included
Version 6.4 (2005 Oct 15)
- GTKLIB and Vim build on IA64
- colors in terminal mode
- syntax highlighting in terminal mode
- write problem fixed (extra CR)
- ESC and ESC sequence recognition in terminal mode
- make file changed to support new MMS version
- env variable expansion in path corrected
- printing problems corrected
- help text added for case insensitive arguments
Version 6.3 (2004 May 10)
- Improved vms_read function
- CTAGS v5.5.4 included
- Documentation corrected and updated
Version 6.2 (2003 May 7)
- Corrected VMS system call results
- Low level character input is rewritten
- Correction in tag and quickfix handling
- First GTK build
- Make file changes
- GTK feature added
- Define for OLD_VMS
- OpenVMS version 6.2 or older
- Documentation updated with GTK features
- CTAGS v5.5 included
- VMS VIM tutor created
Version 6.1 (2002 Mar 25)
- TCL init_tcl() problem fixed
- CTAGS v5.4 included
- GNU tools binaries for OpenVMS
- Make file changes
- PERL, PYTHON and TCL support improved
- InstallVMS.txt has a detailed description HOWTO build
- VMS/Unix file handling rewritten
- Minor casting and bug fixes
Version 6.0 (2001 Sep 28)
- Unix and VMS code has been merged
- separated "really" VMS related code
- included all possible Unix functionality
- simplified or deleted the configuration files
- makefile MAKE_VMS.MMS reviewed
- menu changes (fixed printing, CTAGS and XXD usage)
- fixed variable RMS record format handling anomaly
- corrected syntax, ftplugin etc files load
- changed expand_wildcards and expandpath functions to work more general
- created OS_VMS_FILTER.COM - DECC->VAXC pre-processor directive convert
script.
- Improved code's VAXC and new DECC compilers compatibility
- changed quickfix parameters:
- errormessage format to suite DECC
- search, make and other commands to suite VMS system
- updated and renamed MMS make files for Vim and CTAGS.
- CTAGS has been removed from source distribution of Vim but it will remain
in OpenVMS binary distributions.
- simplified build/configuration procedure
- created INSTALLvms.txt - detailed compiling instructions under VMS.
- updated test scripts.
Version 5.8 (2001 Jun 1)
- OS_VMS.TXT updated with new features.
- other minor fixes.
- documentation updated
- this version had been tested much more than any other OpenVMS version
earlier
Version 5.7 (2000 Jun 24)
- New CTAGS v5.0 in distribution
- Documentation updated
Version 5.6 (2000 Jan 17)
- VMS filename related changes:
- version handling (open everything, save to new version)
- correct file extension matching for syntax (version problem)
- handle <,> characters and passwords in directory definition
- handle internode/remote invocation and editing with passwords
- OpenVMS files will be treated case insensitive from now
- corrected response of expand("%:.") etc path related functions
(in one word: VMS directory handling internally)
- version command
- corrected (+,-) information data
- added compiler and OS version
- added user and host information
- resolving $VIM and $VIMRUNTIME logicals
- VMS port is in MAX_FEAT (maximum features) club with Unix, Win32 and OS/2.
- enabled farsi, rightleft etc. features
- undo level raised up to 1000
- Updated OS_VMS.MMS file.
- maximum features ON is default
- Vim is compilable with +perl, +python and +tcl features.
- improved MMK compatibility
- Created MAKEFILE_VMS.MMS, makefile for testing Vim during development.
- Defined DEC terminal VT320
- compatibility for VT3*0, VT2*0 and VT1*0 - ANSI terminals
backwards, but not VT340 and newer with colour capability.
- VT320 is default terminal for OpenVMS
- these new terminals are also fast ttys (default for OpenVMS).
- allowed dec_mouse ttym
- Updated files vimrc and gvimrc with VMS specific suggestions.
- OS_VMS.TXT updated with new features.
Version 5.5 (1999 Dec 3)
- Popup menu line crash corrected.
- Handle full file names with version numbers.
- Directory handling (CD command etc.)
- Corrected file name conversion VMS to Unix and v.v.
- Correct response of expand wildcards
- Recovery is working from this version under VMS as well.
- Improved terminal and signal handing.
- Improved OS_VMS.TXT
Version 5.4 (1999 Sep 9)
- Cut and paste mismatch corrected.
- Motif directories during open and save are corrected.
Version 5.3 (1998 Oct 12)
- Minor changes in the code
- Standard distribution with +GUI option
Version 5.1 (1998 Apr 21)
- Syntax and DEC C changes in the code
- Fixing problems with the /doc subdirectory
- Improve OS_VMS.MMS
Version 4.5 (1996 Dec 16)
- First VMS port by Henk Elbers <henk@xs4all.nl>
10. 作者 vms-authors
OpenVMS 文档和可执行程序的维护者是:
Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
OpenVMS Vim 网页: http://www.polarhome.com/vim/
本文档采用了由早期 OS_VMS.TXT 版本的作者及贡献者提供的部分内容和备注。他们是:
Charles E. Campbell, Jr. <cec@gryphon.gsfc.nasa.gov>
Bruce Hunsaker <BNHunsaker@chq.byu.edu>
Sandor Kopanyi <sandor.kopanyi@mailbox.hu>
vim:tw=78:ts=8:noet:ft=help:norl: