Editing iSeries source members with the Vim text editor
Why Vim
Because I like it
Back when I used Windows I used the excellent
TextPad editor, but it didn't work very well under
Wine, and is GUI based. I wanted an editor equally at home in a console and on the desktop. Vim seemed easier to understand than Emacs, and I've stuck with it since then. I used to use remote command on the AS/400 to send a text version of source members to TextPad for editing, and swapped the technique to use Vim on Linux. If you're interested in the programs & commands I use to do this, let
me know and I'll see if I can get them suitable for download. Using Vim in diff mode with two source members is far easier than SEU's split screen
And speaking of merging changes,
Meld is excellent too, btw.
Getting Vim
You can download
Vim for just about every computing platform (except native iSeries!)
Syntax checking
Although Vim comes with syntax files for dozens of languages, RPG and friends aren't among them. I started work on one for RPG, didn't get very far and asked on-line for help. I was given a template to work with from someone on the vim-users list, and got a bit further, but still not much use
I was then contacted by another Linux user and RPG programmer, Marc Mims, and (with mainly his code) we got a basic syntax file together. Once I understood the technique I expanded on that, and created files for DDS and RPGLE (RPGIV, not free-format). The REXX syntax file works very well for CL code, so I adapted that to work with common CL commands.
A little while later
Scott Klement started a
thread on the
RPG400-L mailing list over at
Midrange.com site. We swapped syntax files though in the end we stuck with our originals. I've continued to tweak the syntax files, but haven't spent much time on them in the last year or so.
Recognising iSeries code files
My download routine appends the member type as the file extension, so that's what I use to trigger the correct syntax file in Vim. I have a
~/.vim/filetype.vim
file with these lines:
" my filetype file
augroup filetypedetect
au! BufRead,BufNewFile *.rpg setfiletype rpg
au! BufRead,BufNewFile *.rpgle setfiletype rpgle
au! BufRead,BufNewFile *.clp setfiletype clp
au! BufRead,BufNewFile *.dspf setfiletype dds
au! BufRead,BufNewFile *.prtf setfiletype dds
au! BufRead,BufNewFile *.pf setfiletype dds
au! BufRead,BufNewFile *.lf setfiletype dds
augroup END
and
~/.vim/mysyntax.vim
to load those filetypes
au! Syntax rpg so ~/.vim/rpg.vim
au! Syntax rpgle so ~/.vim/rpgle.vim
au! Syntax clp so ~/.vim/clp.vim
au! Syntax dds so ~/.vim/dds.vim
and these lines in my
~/.vimrc
syntax on
set filetype=on
so ~/.vim/mysyntax.vim
See below for the syntax files.
- dds.vim: DDS (DSPF, PRTF, PF, LF) syntax file for Vim
- rpg.vim: RPG (RPG400) syntax file for Vim