Subject: And now for something completely different: Vim 6.0aa
From: Bram Moolenaar <[email-masked]>
To: [email-masked]
Date: Wed, 04 Apr 2001 21:20:47 +0200

It's....  vimdiff!

This is a nice way to edit two or three different versions of a file.
Changed lines are highlighted.  A change within a line is highlighted
differently, so that you can spot an inserted word, for example.  Deleted
lines are highlighted in one window and filled up in the other window, so that
scroll-binding makes it possible to put the windows side-by-side and compare
the text.  Folding is used to hide the text that has no changes.

It's still new, there could be a few problems.  The colors are ugly...
To get started, try this command:

	vim -d file.orig file

See ":help diff.txt".  Note that this requires the "diff" program.  It's
standard on Unix, for other systems you will have to find it somewhere.
Likewise, the "patch" program is required for ":diffpatch".

Major changes
-------------

Added diff mode:
- Added the vimdiff command to start diff mode on a few files.
- Added the vimdiff manpage.
- Added the ":diffsplit" command to start diff mode with the current file and
  another file.
- Added the ":diffpatch" command to start diff mode with the current file and
  a patch file.
- The 'diff' option switches diff mode on in a window.
- The ":diffupdate" refreshes the diffs.
- The 'scrollbind' option recognizes windows that have 'diff' set and binds
  them based on the changes in the files.
- The 'diffopt' option changes how diffs are displayed.
- The 'diffexpr' option can be set to create a diff with an expression.
- The 'patchexpr' option can be set to patch a file with an expression.
- Added the "diff" folding method.
- Added the DiffAdd, DiffChange, DiffDelete and DiffText highlight groups to
  specify the highlighting for differences.  The defaults are ugly...
- Unix: make a vimdiff symbolic link for "make install".

Included the QNX port.  Supports the Photon GUI, mouse, etc. (Julian Kinraid)

Unix: Included support for the "SJIS" locale, with "shift-jis" and "cp932" as
aliases.

GUI: Added a Toolbar for Athena. (David Harrison)

Unix: Use the X clipboard in any terminal, not just in an xterm.

The source archive was over the 1.4M floppy limit.  Now also provide bzip2
compressed versions of the sources and runtime archives.

Other changes
-------------

Renamed the variables used for the 'charconvert' option from
"v:charconvert_in" to "v:fname_in" and "v:charconvert_out" to "v:fname_out".

When typing CTRL-D in Insert mode, just after an autoindent, then hitting CR
kept the remaining white space.  Now made it work like BS: delete the
autoindent to avoid a blank non-empty line results.

Moved a few more common items from gui_w32.c and gui_w16.c to gui_w48.c.
(Vince Negri)

language mapping:
- Use a different mouse cursor for when ":lmap" mappings are active.  Can
  specify two highlight groups for an item in 'guicursor'.  By default
  "lCursor" and "Cursor" are equal, the user must set a color he likes.
- Show "(lang)" for 'showmode' when language mapping is enabled.
- When starting to edit a new buffer, copy the langmap state.  Avoids that
  language mappings suddenly stop working.
- UTF-8: Made "r" work with a ":lmap" that includes a composing character.
  Also works for "f", which now works to find a character that includes a
  composing character.
- Moved the 'keymap' code from mbyte.c to digraph.c.  It doesn't depend on the
  multibyte code, it's more like inputting characters in a special way.

Added a few messages for when 'verbose' is non-zero to show what happens when
trying to connect to the X server.  Should help when trying to find out why
startup is slow.

Added the 'cscopepathcomp' option. (Scott Hauck)

Made CTRL-X CTRL-L in Insert mode use the 'complete' option.  It now also
scans other loaded buffers for matching lines.

Made ":syntax keyword" work with multi-byte characters.

When available, call bind_textdomain_codeset() to have gettext() translate
messages to 'encoding'.  This requires GNU gettext 0.10.36.  But it doesn't
work...

Fixes
-----

Win32: Cygwin doesn't have the ACL items.  Don't use the "advapi" items
when HAVE_ACL isn't defined.

When resetting 'previewwindow' a bogus error message would appear.

Motif GUI:
- When changing the menu font to a different height the Vim window needed
  resizing. (David Harrison)
- ":hi menu font=name" crashed Vim in some situations.  Was freeing a font
  twice.  (David Harrison)
- ":hi menu font=k12,r12" causes a crash, using a fontset for the menu didn't
  work.
- UTF-8: "/a<BS>A" where a is lang mapped to a character with a composing char
  caused the composing char to appear on A.  Now NUL-terminate the command
  line to avoid a composing char beyond the end to be included.

In the console pasting with the mouse on the command line ('mouse' includes
'c' or 'a') pasted the last used register instead of the selection/clipboard.
Use the "* register when the clipboard is working.

A ":normal" command would reset the 'scrollbind' info.  Causes problems when
using a ":normal" command in an autocommand for opening a file.

When using CTRL-W = and two vertically split windows could become the same
width the current window would get two extra columns.

When the termcap query from the xterm returns a different number of colors,
reset the highlighting to be able to use "LightRed" and "LightBlue".

Windows GUI: a point size with a dot, like "7.5", wasn't recognized. (Muraoka
Taro)

When 'scrollbind' wasn't set would still remember the current position,
wasting time.

Folding:
- When a fold ends in "}}}1", deleting the "{{{" that starts it didn't remove
  the fold.
- When closing folds with a Visual selection, and 'foldminlines' prevents the
  folds from actually being closed, the Visual highlighting wasn't removed.
- Folding a line with multi-byte text caused trouble.  Redid the fold_line()
  function.
- "zC" didn't close all folds recursively, just the top one.

GTK: Crash when 'shell' doesn't exist and doing":!ls".  Use _exit() instead of
exit() when the child couldn't execute the shell.

Multi-byte:
- UTF-8: non-Visual selection could add random composing characters.
- GUI with double-byte encoding: a mouse click in left halve of double-wide
  character put the cursor in previous char.
- Using double-byte encoding and 'selection' is "exclusive": "vey" and "^Vey"
  included the character after the word.
- When using a double-byte encoding and there is a lead byte at the end of the
  line, the preceding line would be displayed.  "ga" also showed wrong info.

GUI: The cursor was sometimes not removed when scrolling.  Changed the policy
from redrawing the cursor after each call to gui_write() to only update it at
the end of update_screen() or when setting the cursor position.  Also only
update the scrollbars at the end of update_screen(), that's the only place
where the window text may have been scrolled.

When 'virtualedit' is used, "~" didn't work correctly in Visual mode.  Set
coladd to zero in inc().  May also fix other problems.  (Chase Tingley)
When 'virtualedit' is "block" ^Vey doesn't include the last char when it's
double-width.

Formatting "/*<Tab>long text", produced "* <Tab>" in the next line.  Now
remove the space before the Tab.
Formatting "/*<Tab>  long text", produced "* <Tab> long text" in the next
line.  Now keep the space after the Tab.

In some places non-ASCII alphabetical characters were accepted, which could
cause problems.  For example, ":X" (X being such a character).

When a pattern matches the end of the line, the last character in the line was
highlighted for 'hlsearch'.  That looks wrong for "/\%3c".  Now highlight the
character just after the line.

Epilogue
--------

WARNING: This is really an unstable version.  Many things have been added
without proper testing.  It does crash.  It may destroy your work.  New
features may change incompatibly in the next version.

This version is for developers, thus it comes as source code only.
If you run into something that doesn't work, please try to figure out why,
try to solve it and send me a patch.  If you can't do that, at least send me
precise information to save me time.

More info about the new 6.0 features with ":help version6".

If you don't like the syntax of a command, the name of an option or how the
new features work, let's discuss this in the vim-dev maillist.

Lots of things are not working yet.  Check ":help todo" for known items.

I NEED YOUR HELP: There is still a lot of work to be done.  If I have to do it
all by myself it will take a very long time until Vim.6.0 is ready.  Please
give a hand by implementing one of the items in the todo list.

You can find Vim 6.0 here: ftp://ftp.vim.org/pub/vim/unreleased/

unix/vim-6.0aa-rt.tar.gz	runtime files
unix/vim-6.0aa-rt.tar.bz2	same, compressed with bzip2
unix/vim-6.0aa-src.tar.gz	sources
unix/vim-6.0aa-src.tar.bz2	same, compressed with bzip2

extra/vim-6.0aa-extra.tar.gz	extra files
extra/vim-6.0aa-lang.tar.gz	multi-language files

Happy Vimming!