summaryrefslogtreecommitdiffstats
path: root/runtime/doc/os_vms.txt
blob: ff435482d363f619b1f3066078d89c757784a2ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
*os_vms.txt*    For Vim version 9.1.  Last change: 2023 Dec 14


		  VIM REFERENCE MANUAL


							*VMS* *vms*
This file contains the particularities for the VMS version of Vim.
You can reach this information file by typing :help VMS in Vim command
prompt.

 1. Getting started	|vms-started|
 2. Download files	|vms-download|
 3. Compiling		|vms-compiling|
 4. Problems		|vms-problems|
 5. Deploy		|vms-deploy|
 6. Practical usage	|vms-usage|
 7. GUI mode questions	|vms-gui|
 8. Useful notes	|vms-notes|
 9. VMS related changes	|vms-changes|
10. Authors		|vms-authors|

==============================================================================

1. Getting started					*vms-started*

Vim (Vi IMproved) is a Vi-compatible text editor that runs on nearly every
operating system known to humanity.  Now use Vim on OpenVMS too, in character
or X/Motif environment.  It is fully featured and absolutely compatible with
Vim on other operating systems.

==============================================================================

2. Download files					*vms-download*

You can download the Vim source code by ftp from the official Vim site:
	ftp://ftp.vim.org/pub/vim/
Or use one of the mirrors:
	ftp://ftp.vim.org/pub/vim/MIRRORS

You can download precompiled executables from:
	http://www.polarhome.com/vim/
	ftp://ftp.polarhome.com/pub/vim/

To use the precompiled binary version, you need one of these archives:

  vim-XX-exe-x86-gui.zip	X86_64 GUI/Motif executables
  vim-XX-exe-x86-term.zip	X86_64 console executables
  vim-XX-exe-ia64-gui.zip	IA64 GUI/Motif executables
  vim-XX-exe-ia64-gtk.zip	IA64 GUI/GTK executables
  vim-XX-exe-ia64-term.zip	IA64 console executables
  vim-XX-exe-axp-gui.zip	Alpha GUI/Motif executables
  vim-XX-exe-axp-gtk.zip	Alpha GUI/GTK executables
  vim-XX-exe-axp-term.zip	Alpha console executables
  vim-XX-exe-vax-gui.zip	VAX GUI executables
  vim-XX-exe-vax-term.zip	VAX console executables

and of course (optional)
  vim-XX-runtime.zip		runtime files

The binary archives contain: vim.exe, ctags.exe, xxd.exe files.

For GTK executables you will need GTKLIB that is available for
Alpha and IA64 platforms.

==============================================================================

3. Compiling						*vms-compiling*

See the file [.SRC]INSTALLVMS.TXT.

==============================================================================

4. Problems						*vms-problems*

The code has been tested under Open VMS 6.2 - 9.2 on Alpha, VAX, IA64 and
X86_64 platforms with the DEC C compiler. It should work without major problems.
If your system does not have some include libraries you can tune in the
OS_VMS_CONF.H file.

If you decided to build Vim with +perl, +python, etc. options, first you need
to download OpenVMS distributions of Perl and Python.  Build and deploy the
libraries and change adequate lines in MAKE_VMS.MMS file.  There should not be
a problem from Vim side.

Also GTK, XPM library paths should be configured in MAKE_VMS.MMS

Note: Under VAX it should work with the DEC C compiler without problems.  The
VAX C compiler is not fully ANSI C compatible in pre-processor directives
semantics, therefore you have to use a converter program that will do the lion
part of the job.  For detailed instructions read file INSTALLvms.txt

To build XXD.EXE, you should change to the subdirectory and build it separately.

CTAGS is not part of the Vim source distribution anymore, however the OpenVMS
specific source might contain CTAGS source files as described above.
You can find more information about CTAGS on VMS at
http://www.polarhome.com/ctags/

Advanced users may try some acrobatics in FEATURE.H file as well.

It is possible to compile with +xfontset +xim options too, but then you have
to set up GUI fonts etc. correctly.  See :help xim from Vim command prompt.

You may want to use GUI with GTK icons, then you have to download and install
GTK for OpenVMS or at least runtime shareable images - LIBGTK from
polarhome.com
Post 7.2 Vim uses GTK2+ while the last GTK on OpenVMS is 1.2.10, therefore
the GTK build is no longer available.

For more advanced questions, please send your problem to Vim on VMS mailing
list <vim-vms@polarhome.com>
More about the vim-vms list can be found at:
http://www.polarhome.com/mailman/listinfo/vim-vms

==============================================================================

5. Deploy						*vms-deploy*

Vim uses a special directory structure to hold the document and runtime files:

   vim (or wherever)
    |- tmp
    |- vim57
    |----- doc
    |----- syntax
    |- vim62
    |----- doc
    |----- syntax
    |- vim64
    |----- doc
    |----- syntax
    vimrc    (system rc files)
    gvimrc

Use: >

	define/nolog VIM	device:[path.vim]
	define/nolog VIMRUNTIME device:[path.vim.vim60]
	define/nolog TMP	device:[path.tmp]

To get vim.exe to find its document, filetype, and syntax files, and to
specify a directory where temporary files will be located.  Copy the "runtime"
subdirectory of the Vim distribution to vimruntime.

Logicals $VIMRUNTIME and $TMP are optional.

If $VIMRUNTIME is not set, Vim will guess and try to set up automatically.
Read more about it at :help runtime

If $TMP is not set, you will not be able to use some functions as CTAGS,
XXD, printing etc. that use temporary directory for normal operation.
The $TMP directory should be readable and writable by the user(s).
The easiest way to set up $TMP is to define a logical: >

	define/nolog TMP SYS$SCRATCH
or as: >
	define/nolog TMP SYS$LOGIN

==============================================================================

6. Practical usage					*vms-usage*

Usually, you want to run just one version of Vim on your system, therefore
it is enough to dedicate one directory for Vim.
Copy the whole Vim runtime directory structure to the deployment position.
Add the following lines to your LOGIN.COM (in SYS$LOGIN directory).
Set up the logical $VIM as: >

	$ define VIM device:<path>

Set up some symbols: >

	$ ! vi starts Vim in chr. mode.
	$ vi*m  :== mcr VIM:VIM.EXE

	$ !gvi starts Vim in GUI mode.
	$ gv*im :== spawn/nowait mcr VIM:VIM.EXE -g

Please, check the notes for customization and configuration of symbols.

You may want to create .vimrc and .gvimrc files in your home directory
(SYS$LOGIN) to overwrite default settings.

The easiest way is just rename example files.  You may leave the menu file
(MENU.VIM) and files vimrc and gvimrc in the original $VIM directory.  It will
be the default setup for all users, and for users it is enough to just have
their own additions or resetting in their home directory in files .vimrc and
.gvimrc.  It should work without problems.

Note: Remember, system rc files (default for all users) don't have a leading
".".  So, system rc files are: >

	$VIM:vimrc
	$VIM:gvimrc
	$VIM:menu.vim

and user customized rc files are: >

	sys$login:.vimrc
	sys$login:.gvimrc

You can check that everything is at the right place with the :version command.

Example 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 ! inquire the terminal capabilities
	$ set disp/create/node=192.168.10.202/trans=tcpip

Note: This set-up should be enough, if you are working on a standalone server or
clustered environment, but if you want to use Vim as an internode editor in
DECNET environment, it will satisfy as well.
You just have to define the "whole" path: >

	$ define VIM "<server_name>[""user password""]::device:<path>"
	$ vi*m :== "mcr VIM:VIM.EXE"

For example: >

	$ define VIM "PLUTO::RF10:[UTIL.VIM]"
	$ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! if passwd required

You can also use the $VIMRUNTIME logical to point to the proper version of Vim
if you have installed more versions at the same time.  If $VIMRUNTIME is not
defined Vim will borrow its value from the $VIM logical.  You can find more
information about the $VIMRUNTIME logical by typing :help runtime as a Vim
command.

System administrators might want to set up a system wide Vim installation,
then add to the SYS$STARTUP:SYLOGICALS.COM >

	$ define/nolog/sys VIM device:<path>
	$ define/nolog/sys TMP SYS$SCRATCH

And to the SYS$STARTUP:SYLOGIN.COM >

	$ vi*m :== mcr VIM:VIM.EXE
	$ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40


It will set up a normal Vim work environment for every user on the system.

IMPORTANT: Vim on OpenVMS (and on other case insensitive system) command line
parameters are assumed to be lowercase. In order to indicate that a command
line parameter is uppercase "/" sign must be used.

Examples:
  >
	vim -R  filename  ! means: -r List swap files and exit
	vim -/r filename  ! means: -R Readonly mode (like "view")
	vim -u	<vimrc>   ! means: -u Use <vimrc> instead of any .vimrc
	vim -/u <gvimrc>  ! means: -U Use <gvimrc> instead of any .gvimrc

==============================================================================

7. GUI mode questions					*vms-gui*

OpenVMS is a real mainframe OS, therefore even if it has a GUI console, most
of the users do not use a native X/Window environment during normal operation.
It is not possible to start Vim in GUI mode "just like that".  But anyhow it
is not too complicated either.

First of all: you will need an executable that is built with the GUI enabled.

Second: you need to have installed DECW/Motif on your VMS server, otherwise
you will get errors that some shareable libraries are missing.

Third: If you choose to run Vim with extra features such as GUI/GTK then you
need a GTK installation too or at least a GTK runtime environment (LIBGTK
can be downloaded from http://www.polarhome.com/vim/).

1) If you are working on the VMS X/Motif console:
   Start Vim with the command: >

	$ mc device:<path>VIM.EXE -g
<
   or type :gui as a command to the Vim command prompt.  For more info :help
   gui

2) If you are working on some other X/Window environment like Unix or a remote
   X VMS console.  Set up display to your host with: >

	$ set disp/create/node=<your IP address>/trans=<transport-name>
<
   and start Vim as in point 1.  You can find more help in VMS documentation or
   type: help set disp in VMS prompt.
   Examples: >

	$ set disp/create/node=192.168.5.159		 ! default trans is DECnet
	$ set disp/create/node=192.168.5.159/trans=tcpip ! TCP/IP network
	$ set disp/create/node=192.168.5.159/trans=local ! display on the same node

Note: you should define just one of these.
For more information type $help set disp in VMS prompt.

3) Another elegant solution is XDM if you have installed on OpenVMS box.
   It is possible to work from XDM client as from GUI console.

4) If you are working on MS-Windows or some other non X/Window environment
   you need to set up one X server and run Vim as in point 2.
   For MS-Windows there are available free X servers as MIX, Omni X etc.,
   as well as excellent commercial products as eXcursion or ReflectionX with
   built-in DEC support.

Please note, that executables without GUI are slightly faster during startup
than with enabled GUI in character mode. Therefore, if you do not use GUI
features, it is worth to choose non GUI executables.

==============================================================================

8. Useful notes						*vms-notes*

8.1 Backspace/delete
8.2 Filters
8.3 VMS file version numbers
8.4 Directory conversion
8.5 Remote host invocation
8.6 Terminal problems
8.7 Hex-editing and other external tools
8.8 Sourcing vimrc and gvimrc
8.9 Printing from Vim
8.10 Setting up the symbols
8.11 diff and other GNU programs
8.12 diff-mode
8.13 Allow '$' in C keywords
8.14 VIMTUTOR for beginners
8.15 Slow start in console mode issue
8.16 Common VIM directory - different architectures

8.1 Backspace/delete

There are backspace/delete key inconsistencies with VMS.
:fixdel doesn't do the trick, but the solution is (without "<" in 'cpo'): >

	:inoremap <C-?> <C-H>	" for terminal mode
	:inoremap <Del> <C-H>	" for gui mode

Read more in ch: 8.6 (Terminal problems).
(Bruce Hunsaker <BNHunsaker@chq.byu.edu> Vim 5.3)


8.2 Filters

Vim supports filters, i.e., if you have a sort program that can handle
input/output redirection like Unix (<infile >outfile), you could use >

	:map \s 0!'aqsort<CR>

(Charles E. Campbell, Jr. <cec@gryphon.gsfc.nasa.gov> Vim 5.4)


8.3 VMS file version numbers

Vim is saving files into a new file with the next higher file version
number, try these settings. >

	:set nobackup	     " does not create *.*_ backup files
	:set nowritebackup   " does not have any purpose on VMS.  It's the
			     " default.

Recovery is working perfectly as well from the default swap file.
Read more with :help swapfile

(Claude Marinier <ClaudeMarinier@xwavesolutions.com> Vim 5.5, Zoltan Arpadffy
Vim 5.6)


8.4 Directory conversion

Vim will internally convert any unix-style paths and even mixed unix/VMS
paths into VMS style paths.  Some typical conversions resemble:

	/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.
	  ./			-> current directory
	  ../			-> relative parent directory
	  [.def.ghi]		-> relative child directory
	   ./def/ghi		-> relative child directory

Note: You may use <,> brackets as well (device:<path>file.ext;version) as
rf10:<user.zay.work>test.c;1

(David Elins <delins@foliage.com>, Jerome Lauret
<JLAURET@mail.chem.sunysb.edu> Vim 5.6)


8.5 Remote host invocation

It is possible to use Vim as an internode editor.
1. Edit some file from remote node: >

	vi "<server>""username passwd""::<device>:<path><filename>;<version>"

Example: >
	vi "pluto""zay passwd""::RF10:<USER.ZAY.WORK>TEST.C;1"

Note: syntax is very important, otherwise VMS will recognize more parameters
instead of one (resulting with: file not found)

2.  Set up Vim as your internode editor.  If Vim is not installed on your
host, just set up your IP address, the full Vim path including the server name
and run the command procedure below: >

	$ if (p1 .eqs. "") .OR. (p2 .eqs. "") then goto usage
	$ set disp/create/node=<your_IP_here>/trans=tcpip
	$ define "VIM "<vim_server>""''p1' ''p2'""::<device>:<vim_path>"
	$  vi*m :== "mcr VIM:VIM.EXE"
	$ gv*im :== "spawn/nowait mcr VIM:VIM.EXE -g"
	$ goto end
	$ usage:
	$ write sys$output " Please enter username and password as a parameter."
	$ write sys$output " Example: @SETVIM.COM username passwd"
	$ end:

Note: Never use it in a clustered environment (you do not need it), loading
could be very-very slow, but even faster than a local Emacs. :-)

(Zoltan Arpadffy, Vim 5.6)


8.6 Terminal problems

If your terminal name is not known to Vim and it is trying to find the default
one you will get the following message during start-up:
---
Terminal entry not found in termcap
'unknown-terminal' not known.  Available built-in terminals are:
    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
defaulting to 'vt320'
---

Try to force to inquire the terminal capabilities with: >

	$ set term/inquire

If the inquire did not help, the solutions is to define the default terminal name: >

	$ ! unknown terminal name.  Let us use vt320 or ansi instead.
	$ ! Note: it's case sensitive
	$ define term "vt320"

Terminals from VT100 to VT320 (as V300, VT220, VT200) do not need any extra
keyboard mappings.  They should work perfectly as they are, including arrows,
Ins, Del buttons etc., except Backspace in GUI mode.  To solve it, add to
.gvimrc: >

	inoremap <Del> <BS>

Vim will also recognize that they are fast terminals.

If you're using Vim on remote host or through a very slow connection, you
might want to reset fast terminal option with: >

	set nottyfast   " set terminal to slow mode


8.7 Hex-editing and other external tools

A very important difference between OpenVMS and other systems is that VMS uses
special commands to execute executables: >

	RUN <path>filename
	MCR <path>filename <parameters>

OpenVMS users always have to be aware that the Vim command :! "just" drop them
to DCL prompt.  This feature is possible to use without any problem with all
DCL commands, but if we want to execute some programs such as XXD, CTAGS, JTAGS,
etc.  we're running into trouble if we follow the Vim documentation (see: help
xxd).

Solution: Execute with the MC command and add the full path to the executable.
Example: Instead of :%!xxd command use: >

	:%!mc vim:xxd

... or in general: >
	:!mc <path>filename <parameters>

Note: You can use XXD and CTAGS from GUI menu.

To customize ctags it is possible to define the logical $CTAGS with standard
parameters as: >

	define/nolog CTAGS "--totals -o sys$login:tags"

For additional information, please read :help tagsearch and CTAGS
documentation at http://ctags.sourceforge.net/ctags.html.

(Zoltan Arpadffy, Vim 5.6-70)


8.8 Sourcing vimrc and gvimrc

If you want to use your .vimrc and .gvimrc from other platforms (e.g. Windows)
you can get in trouble if you ftp that file(s): VMS has different end-of-line
indication.
The symptom is that Vim is not sourcing your .vimrc/.gvimrc, even if you say:
>
	:so sys$login:.vimrc

One trick is to compress (e.g. zip) the files on the other platform and
uncompress it on VMS; if you have the same symptom, try to create the files
with copy-paste (for this you need both op. systems reachable from one
machine, e.g. an Xterm on Windows or telnet to Windows from VMS).

(Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> Vim 6.0a)


8.9 Printing from Vim

To be able to print from Vim (running in GUI mode) under VMS you have to set
up $TMP logical which should point to some temporary directory and logical
SYS$PRINT to your default print queue.
Example: >

	$define SYS$PRINT HP5ANSI

You can print out the whole buffer or just the marked area.
More info under :help hardcopy

(Zoltan Arpadffy, Vim 6.0c)


8.10 Setting up the symbols

When I use gvim this way and press CTRL-Y in the parent terminal, gvim exits.
I now use a different symbol that seems to work OK and fixes the problem.
I suggest this instead: >

	$ GV*IM:==SPAWN/NOWAIT/INPUT=NLA0: MCR VIM:VIM.EXE -G -GEOMETRY 80X40

The /INPUT=NLA0: separates the standard input of the gvim process from the
parent terminal, to block signals from the parent window.
Without the -GEOMETRY, the gvim window size will be minimal and the menu
will be confused after a window-resize.

(Carlo Mekenkamp, Coen Engelbarts, Vim 6.0ac)


8.11 diff and other GNU programs

From 6.0 diff functionality has been implemented, but OpenVMS does not use
GNU/Unix like diff therefore built in diff does not work.
There is a simple solution to solve this anomaly.  Install a Unix like diff
and Vim will work perfectly in diff mode too.  You just have to redefine your
diff program as: >

	define /nolog diff <GNU_PATH>diff.exe

Another, more sophisticated solution is described below (8.12 diff-mode)
There are other programs such as patch, make etc that may cause the same
problems.  At www.polarhome.com is possible to download an GNU package for
Alpha and VAX boxes that is meant to solve GNU problems on OpenVMS.
(Zoltan Arpadffy, Vim 6.1)


8.12 diff-mode

Vim 6.0 and higher supports Vim diff-mode (See |new-diff-mode|, |diff-mode|
and |08.7|).  This uses the external program 'diff' and expects a Unix-like
output format from diff.  The standard VMS diff has a different output
format.  To use Vim on VMS in diff-mode, you need to:
    1 Install a Unix-like diff program, e.g. GNU diff
    2 Tell Vim to use the Unix-like diff for diff-mode.

You can download GNU diff from the VIM-VMS website, it is one of the GNU
tools in http://www.polarhome.com/vim/files/gnu_tools.zip.  I suggest to
unpack it in a separate directory "GNU" and create a logical GNU: that
points to that directory, e.g: >

   DEFINE GNU    <DISK>:[<DIRECTORY>.BIN.GNU]

You may also want to define a symbol GDIFF, to use the GNU diff from the DCL
prompt: >

   GDIFF :==     $GNU:DIFF.EXE

Now you need to tell Vim to use the new diff program.  Take the example
settings from |diff-diffexpr| and change the call to the external diff
program to the new diff on VMS.  Add this to your .vimrc file: >

     " Set up vimdiff options
       if v:version >= 600
	" Use GNU diff on VMS
	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

You can now use Vim in diff-mode, e.g. to compare two files in read-only
mode: >

    $ VIM -D/R <FILE1> <FILE2>

You can also define new symbols for vimdiff, e.g.: >

    $ VIMDIFF     :== 'VIM' -D/R
    $ GVIMDIFF    :== 'GVIM' -D/R

You can now compare files in 4 ways: >

    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 Allow '$' in C keywords

DEC C uses many identifiers with '$' in them.  This is not allowed in ANSI C,
and Vim recognises the '$' as the end of the identifier.  You can change this
with the 'iskeyword' option.
Add this command to your .vimrc file: >

    autocmd FileType c,cpp,cs  set iskeyword+=$

You can also create the file(s) $VIM/FTPLUGIN/C.VIM (and/or CPP.VIM and
CS.VIM) and add this command: >

	set iskeyword+=$

Now word-based commands, e.g. the '*'-search-command and the CTRL-]
tag-lookup, work on the whole identifier.  (Ctags on VMS also supports '$' in
C keywords since ctags version 5.1.)

(Coen Engelbarts, Vim 6.1)

8.14 VIMTUTOR for beginners

The VIMTUTOR.COM DCL script can help Vim beginners to learn/make their first
steps with Vim on OpenVMS.  Depending of binary distribution you may start it
with: >

	@vim:vimtutor

(Thomas.R.Wyant III, Vim 6.1)

8.16 Slow start in console mode issue

As GUI/GTK Vim works equally well in console mode, many administrators
deploy those executables system wide.
Unfortunately, on a remote slow connections GUI/GTK executables behave rather
slow when user wants to run Vim just in the console mode - because of X
environment detection timeout.

Luckily, there is a simple solution for that. Administrators need to deploy
both GUI/GTK build and just console build executables, like below: >

    |- vim73
    |----- doc
    |----- syntax
       vimrc    (system rc files)
       gvimrc
       gvim.exe (the renamed GUI or GTK built vim.exe)
       vim.exe  (the console only executable)

Define system symbols like below in for ex in LOGIN.COM or SYLOGIN.COM: >

	$ define/nolog VIM RF10:[UTIL.VIM73] ! where you VIM directory is
	$ vi*m  :== mcr VIM:VIM.EXE
	$ gvi*m :== mcr VIM:GVIM.EXE
	$ ! or you can try to spawn with
	$ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40


Like this, users that do not have X environment and want to use Vim just in
console mode can avoid performance problems.

(Zoltan Arpadffy, Vim 7.2)

8.15 Common VIM directory - different architectures

In a cluster that contains nodes with different architectures like below:

$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  |
+---------------------------------+

It is convenient to have a common VIM directory but execute different
executables.
There are several solutions for this problem:

Solution 1.  All executables in the same directory with different names
This is easily done with the following script that can be added
to the login.com or sylogin.com: >

	$ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"
	$ then
	$       say "VAX platform"
	$       vi*m:== mcr vim:VIM.EXE_VAX
	$ endif
	$ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"
	$ then
	$       say "ALPHA platform"
	$       vi*m :== mcr vim:VIM.EXE_AXP
	$ endif
	$ if f$getsyi("ARCH_NAME") .eqs. "IA64"
	$ then
	$      say "IA64 platform"
	$      vi*m :== mcr vim:VIM.EXE_IA64
	$ endif

Solution 2.  Different directories: >

	$ if f$getsyi("NODE_HWTYPE") .eqs. "VAX"
	$ then
	$       say "VAX platform"
	$       define/nolog VIM RF10:[UTIL.VAX_EXE] ! VAX executables
	$ endif
	$ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH"
	$ then
	$       say "ALPHA platform"
	$       define/nolog VIM RF10:[UTIL.AXP_EXE] ! AXP executables
	$ endif
	$ if f$getsyi("ARCH_NAME") .eqs. "IA64"
	$ then
	$      say "IA64 platform"
	$      define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 executables
	$ endif
        $! VIMRUNTIME must be defined in order to find runtime files
	$ define/nolog VIMRUNTIME RF10:[UTIL.VIM73]

A good example for this approach is the [GNU]gnu_tools.com script from
GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/

(Zoltan Arpadffy, Vim 7.2)

==============================================================================

9. VMS related changes					*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)
- solve the 100% cpu usage issue while waiting for a keystroke
- 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. Authors						*vms-authors*

OpenVMS documentation and executables are maintained by:
Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
OpenVMS Vim page: http://www.polarhome.com/vim/

This document uses parts and remarks from earlier authors and contributors
of 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: