*version7.txt*  For Vim version 7.1.  Last change: 2007 May 12


		  VIM REFERENCE MANUAL    by Bram Moolenaar

									*vim7*
Welcome to Vim 7!  A large number of features has been added.  This file
mentions all the new items, changes to existing features and bug fixes
since Vim 6.x.  Use this command to see the version you are using: >
	:version

See |vi_diff.txt| for an overview of differences between Vi and Vim 7.0.
See |version4.txt| for differences between Vim 3.x and Vim 4.x.
See |version5.txt| for differences between Vim 4.x and Vim 5.x.
See |version6.txt| for differences between Vim 5.x and Vim 6.x.

INCOMPATIBLE CHANGES			|incompatible-7|

NEW FEATURES				|new-7|

Vim script enhancements			|new-vim-script|
Spell checking				|new-spell|
Omni completion				|new-omni-completion|
MzScheme interface			|new-MzScheme|
Printing multi-byte text		|new-print-multi-byte|
Tab pages				|new-tab-pages|
Undo branches				|new-undo-branches|
Extended Unicode support		|new-more-unicode|
More highlighting			|new-more-highlighting|
Translated manual pages			|new-manpage-trans|
Internal grep				|new-vimgrep|
Scroll back in messages			|new-scroll-back|
Cursor past end of the line		|new-onemore|
POSIX compatibility			|new-posix|
Debugger support			|new-debug-support|
Remote file explorer			|new-netrw-explore|
Define an operator			|new-define-operator|
Mapping to an expression		|new-map-expression|
Visual and Select mode mappings		|new-map-select|
Location list				|new-location-list|
Various new items			|new-items-7|

IMPROVEMENTS				|improvements-7|

COMPILE TIME CHANGES			|compile-changes-7|

BUG FIXES				|bug-fixes-7|

VERSION 7.1			|version-7.1|
Changed					|changed-7.1|
Added					|added-7.1|
Fixed					|fixed-7.1|

==============================================================================
INCOMPATIBLE CHANGES				*incompatible-7*

These changes are incompatible with previous releases.  Check this list if you
run into a problem when upgrading from Vim 6.x to 7.0.

A ":write file" command no longer resets the 'modified' flag of the buffer,
unless the '+' flag is in 'cpoptions' |cpo-+|.  This was illogical, since the
buffer is still modified compared to the original file.  And when undoing
all changes the file would actually be marked modified.  It does mean that
":quit" fails now.

":helpgrep" now uses a help window to display a match.

In an argument list double quotes could be used to include spaces in a file
name.  This caused a difference between ":edit" and ":next" for escaping
double quotes and it is incompatible with some versions of Vi.
	Command			Vim 6.x	file name	Vim 7.x file name ~
	:edit foo\"888		foo"888			foo"888
	:next foo\"888		foo888			foo"888
	:next a\"b c\"d		ab cd			a"b  and  c"d

In a |literal-string| a single quote can be doubled to get one.
":echo 'a''b'" would result in "a b", but now that two quotes stand for one it
results in "a'b".

When overwriting a file with ":w! fname" there was no warning for when "fname"
was being edited by another Vim.  Vim now gives an error message |E768|.

The support for Mac OS 9 has been removed.

Files ending in .tex now have 'filetype' set to "context", "plaintex", or
"tex".  |ft-tex-plugin|


Minor incompatibilities:

For filetype detection: For many types, use */.dir/filename instead of
~/.dir/filename, so that it also works for other user's files.

For quite a few filetypes the indent settings have been moved from the
filetype plugin to the indent plugin.  If you used: >
	:filetype plugin on
Then some indent settings may be missing.  You need to use: >
	:filetype plugin indent on

":0verbose" now sets 'verbose' to zero instead of one.

Removed the old and incomplete "VimBuddy" code.

Buffers without a name report "No Name" instead of "No File".  It was
confusing for buffers with a name and 'buftype' set to "nofile".

When ":file xxx" is used in a buffer without a name, the alternate file name
isn't set.  This avoids creating buffers without a name, they are not useful.

The "2html.vim" script now converts closed folds to HTML.  This means the HTML
looks like it's displayed, with the same folds open and closed.  Use "zR", or
"let html_ignore_folding=1", if no folds should appear in the HTML. (partly by
Carl Osterwisch)
Diff mode is now also converted to HTML as it is displayed.

Win32: The effect of the <F10> key depended on 'winaltkeys'.  Now it depends
on whether <F10> has been mapped or not.  This allows mapping <F10> without
changing 'winaltkeys'.

When 'octal' is in 'nrformats' and using CTRL-A on "08" it became "018", which
is illogical.  Now it becomes "9".  The leading zero(s) is(are) removed to
avoid the number becoming octal after incrementing "009" to "010".

When 'encoding' is set to a Unicode encoding, the value for 'fileencodings'
now includes "default" before "latin1".  This means that for files with 8-bit
encodings the default is to use the encoding specified by the environment, if
possible.  Previously latin1 would always be used, which is wrong in a
non-latin1 environment, such as Russian.

Previously Vim would exit when there are two windows, both of them displaying
a help file, and using ":quit".  Now only the window is closed.

"-w {scriptout}" only works when {scriptout} doesn't start with a digit.
Otherwise it's used to set the 'window' option.

Previously <Home> and <xHome> could be mapped separately.  This had the
disadvantage that all mappings (with modifiers) had to be duplicated, since
you can't be sure what the keyboard generates.  Now all <xHome> are internally
translated to <Home>, both for the keys and for mappings.  Also for <xEnd>,
<xF1>, etc.

":put" now leaves the cursor on the last inserted line.

When a .gvimrc file exists then 'compatible' is off, just like when a ".vimrc"
file exists.

When making a string upper-case with "vlllU" or similar then the German sharp
s is replaced with "SS".  This does not happen with "~" to avoid backwards
compatibility problems and because "SS" can't be changed back to a sharp s.

"gd" previously found the very first occurrence of a variable in a function,
that could be the function argument without type.  Now it finds the position
where the type is given.

The line continuation in functions was not taken into account, line numbers in
errors were logical lines, not lines in the sourced file.  That made it
difficult to locate errors.  Now the line number in the sourced file is
reported, relative to the function start.  This also means that line numbers
for ":breakadd func" are different.

When defining a user command with |:command| the special items could be
abbreviated.  This caused unexpected behavior, such as <li> being recognized
as <line1>.  The items can no longer be abbreviated.

When executing a FileChangedRO autocommand it is no longer allowed to switch
to another buffer or edit another file.  This is to prevent crashes (the event
is triggered deep down in the code where changing buffers is not anticipated).
It is still possible to reload the buffer.

At the |more-prompt| and the |hit-enter-prompt|, when the 'more' option is
set, the 'k', 'u', 'g' and 'b' keys are now used to scroll back to previous
messages.  Thus they are no longer used as typeahead.

==============================================================================
NEW FEATURES						*new-7*

Vim script enhancements					*new-vim-script*
-----------------------

In Vim scripts the following types have been added:

	|List|		ordered list of items
	|Dictionary|	associative array of items
	|Funcref|	reference to a function

Many functions and commands have been added to support the new types.

The |string()| function can be used to get a string representation of a
variable.  Works for Numbers, Strings and composites of them.  Then |eval()|
can be used to turn the string back into the variable value.

The |:let| command can now use "+=", "-=" and ".=": >
	:let var += expr	" works like :let var = var + expr
	:let var -= expr	" works like :let var = var - expr
	:let var .= string	" works like :let var = var . string

With the |:profile| command you can find out where your function or script
is wasting time.

In the Python interface vim.eval() also handles Dictionaries and Lists.
|python-eval| (G. Sumner Hayes)

The |getscript| plugin was added as a convenient way to update scripts from
www.vim.org automatically. (Charles Campbell)

The |vimball| plugin was added as a convenient way to distribute a set of
files for a plugin (plugin file, autoload script, documentation). (Charles
Campbell)


Spell checking						*new-spell*
--------------

Spell checking has been integrated in Vim.  There were a few implementations
with scripts, but they were slow and/or required an external program.

The 'spell'	   option is used to switch spell checking on or off
The 'spelllang'    option is used to specify the accepted language(s)
The 'spellfile'    option specifies where new words are added
The 'spellsuggest' option specifies the methods used for making suggestions

The |[s| and |]s| commands can be used to move to the next or previous error
The |zg| and |zw| commands can be used to add good and wrong words
The |z=|	  command can be used to list suggestions and correct the word
The |:mkspell|    command is used to generate a Vim spell file from word lists

The "undercurl" highlighting attribute was added to nicely point out spelling
mistakes in the GUI (based on patch from Marcin Dalecki).
The "guisp" color can be used to give it a color different from foreground and
background.
The number of possible different highlight attributes was raised from about
220 to over 30000.  This allows for the attributes of spelling to be combined
with syntax highlighting attributes.  This is also used for syntax
highlighting and marking the Visual area.

Much more info here: |spell|.


Omni completion					*new-omni-completion*
---------------

This could also be called "intellisense", but that is a trademark.  It is a
smart kind of completion.  The text in front of the cursor is inspected to
figure out what could be following.  This may suggest struct and class
members, system functions, etc.

Use CTRL-X CTRL-O in Insert mode to start the completion.  |i_CTRL-X_CTRL-O|

The 'omnifunc' option is set by filetype plugins to define the function that
figures out the completion.

Currently supported languages:
	C					|ft-c-omni|
	(X)HTML with CSS			|ft-html-omni|
	JavaScript				|ft-javascript-omni|
	PHP					|ft-php-omni|
	Python
	Ruby					|ft-ruby-omni|
	SQL					|ft-sql-omni|
	XML					|ft-xml-omni|
	any language wih syntax highligting	|ft-syntax-omni|

You can add your own omni completion scripts.

When the 'completeopt' option contains "menu" then matches for Insert mode
completion are displayed in a (rather primitive) popup menu.


MzScheme interface					*new-MzScheme*
------------------

The MzScheme interpreter is supported. |MzScheme|

The |:mzscheme| command can be used to execute MzScheme commands
The |:mzfile|   command can be used to execute an MzScheme script file

This depends on Vim being compiled with the |+mzscheme| feature.


Printing multi-byte text				*new-print-multi-byte*
------------------------

The |:hardcopy| command now supports printing multi-byte characters when using
PostScript.

The 'printmbcharset' and 'printmbfont' options are used for this.
Also see |postscript-cjk-printing|.  (Mike Williams)


Tab pages						*new-tab-pages*
---------

A tab page is page with one or more windows with a label (aka tab) at the top.
By clicking on the label you can quickly switch between the tab pages.  And
with the keyboard, using the |gt| (Goto Tab) command.  This is a convenient
way to work with many windows.

To start Vim with each file argument in a separate tab page use the |-p|
argument.  The maximum number of pages can be set with 'tabpagemax'.

The line with tab labels is either made with plain text and highlighting or
with a GUI mechanism.  The GUI labels look better but are only available on a
few systems.  The line can be customized with 'tabline', 'guitablabel' and
'guitabtooltip'.  Whether it is displayed is set with 'showtabline'.  Whether
to use the GUI labels is set with the "e" flag in 'guioptions'.

The |:tab| command modifier can be used to have most commands that open a new
window open a new tab page instead.

The |--remote-tab| argument can be used to edit a file in a new tab page in an
already running Vim server.

Variables starting with "t:" are local to a tab page.

More info here: |tabpage|
Most of the GUI stuff was implemented by Yegappan Lakshmanan.


Undo branches						*new-undo-branches*
-------------

Previously there was only one line of undo-redo.  If, after undoing a number
of changes, a new change was made all the undone changes were lost.  This
could lead to accidentally losing work.

Vim now makes an undo branch in this situation.  Thus you can go back to the
text after any change, even if they were undone.  So long as you do not run
into 'undolevels', when undo information is freed up to limit the memory used.

To be able to navigate the undo branches each change is numbered sequentially.
The commands |g-| and |:earlier| go back in time, to older changes.  The
commands |g+| and |:later| go forward in time, to newer changes.

The changes are also timestamped.  Use ":earlier 10m" to go to the text as it
was about ten minutes earlier.

The |:undolist| command can be used to get an idea of which undo branches
exist.  The |:undo| command now takes an argument to directly jump to a
specific position in this list.  The |changenr()| function can be used to
obtain the change number.

There is no graphical display of the tree with changes, navigation can be
quite confusing.


Extended Unicode support				*new-more-unicode*
------------------------

Previously only two combining characters were displayed.  The limit is now
raised to 6.  This can be set with the 'maxcombine' option.  The default is
still 2.

|ga| now shows all combining characters, not just the first two.

Previously only 16 bit Unicode characters were supported for displaying.  Now
the full 32 bit character set can be used.  Unless manually disabled at
compile time to save a bit of memory.

For pattern matching it is now possible to search for individual composing
characters. |patterns-composing|

The |8g8| command searches for an illegal UTF-8 byte sequence.


More highlighting				*new-more-highlighting*
-----------------

Highlighting matching parens:

When moving the cursor through the text and it is on a paren, then the
matching paren can be highlighted.  This uses the new |CursorMoved|
autocommand event.

This means some commands are executed every time you move the cursor.  If this
slows you down too much switch it off with: >
	:NoMatchParen

See |matchparen| for more information.

The plugin uses the |:match| command.  It now supports three match patterns.
The plugin uses the third one.  The first one is for the user and the second
one can be used by another plugin.

Highlighting the cursor line and column:

The 'cursorline' and 'cursorcolumn' options have been added.  These highlight
the screen line and screen column of the cursor.  This makes the cursor
position easier to spot.  'cursorcolumn' is also useful to align text.  This
may make screen updating quite slow.  The CursorColumn and CursorLine
highlight groups allow changing the colors used.  |hl-CursorColumn|
|hl-CursorLine|

The number of possible different highlight attributes was raised from about
220 to over 30000.  This allows for the attributes of spelling to be combined
with syntax highlighting attributes.  This is also used for syntax
highlighting, marking the Visual area, CursorColumn, etc.


Translated manual pages					*new-manpage-trans*
-----------------------

The manual page of Vim and associated programs is now also available in
several other languages.

French  - translated by David Blanchet
Italian - translated by Antonio Colombo
Russian - translated by Vassily Ragosin
Polish  - translated by Mikolaj Machowski

The Unix Makefile installs the Italian manual pages in .../man/it/man1/,
.../man/it.ISO8859-1/man1/ and .../man/it.UTF-8/man1/.  There appears to be no
standard for what encoding goes in the "it" directory, the 8-bit encoded file
is used there as a best guess.
Other languages are installed in similar places.
The translated pages are not automatically installed when Vim was configured
with "--disable-nls", but "make install-languages install-tool-languages" will
do it anyway.


Internal grep						*new-vimgrep*
-------------

The ":vimgrep" command can be used to search for a pattern in a list of files.
This is like the ":grep" command, but no external program is used.  Besides
better portability, handling of different file encodings and using multi-line
patterns, this also allows grepping in compressed and remote files.
|:vimgrep|.

If you want to use the search results in a script you can use the
|getqflist()| function.

To grep files in various directories the "**" pattern can be used.  It expands
into an arbitrary depth of directories.  "**" can be used in all places where
file names are expanded, thus also with |:next| and |:args|.


Scroll back in messages					*new-scroll-back*
-----------------------

When displaying messages, at the |more-prompt| and the |hit-enter-prompt|, The
'k', 'u', 'g' and 'b' keys can be used to scroll back to previous messages.
This is especially useful for commands such as ":syntax", ":autocommand" and
":highlight".  This is implemented in a generic way thus it works for all
commands and highlighting is kept.  Only works when the 'more' option is set.
Previously it only partly worked for ":clist".

The |g<| command can be used to see the last page of messages after you have
hit <Enter> at the |hit-enter-prompt|.  Then you can scroll further back.


Cursor past end of the line				*new-onemore*
---------------------------

When the 'virtualedit' option contains "onemore" the cursor can move just past
the end of the line.  As if it's on top of the line break.

This makes some commands more consistent.  Previously the cursor was always
past the end of the line if the line was empty.  But it is far from Vi
compatible.  It may also break some plugins or Vim scripts.  Use with care!

The patch was provided by Mattias Flodin.


POSIX compatibility					*new-posix*
-------------------

The POSIX test suite was used to verify POSIX compatibility.  A number of
problems have been fixed to make Vim more POSIX compatible.  Some of them
conflict with traditional Vi or expected behavior.  The $VIM_POSIX environment
variable can be set to get POSIX compatibility.  See |posix|.

Items that were fixed for both Vi and POSIX compatibility:
- repeating "R" with a count only overwrites text once; added the 'X' flag to
  'cpoptions' |cpo-X|
- a vertical movement command that moves to a non-existing line fails; added
  the '-' flag to 'cpoptions' |cpo--|
- when preserving a file and doing ":q!" the file can be recovered; added the
  '&' flag to 'cpoptions' |cpo-&|
- The 'window' option is partly implemented.  It specifies how much CTRL-F and
  CTRL-B scroll when there is one window.  The "-w {number}" argument is now
  accepted.  "-w {scriptout}" only works when {scriptout} doesn't start with a
  digit.
- Allow "-c{command}" argument, no space between "-c" and {command}.
- When writing a file with ":w!" don't reset 'readonly' when 'Z' is present in
  'cpoptions'.
- Allow 'l' and '#' flags for ":list", ":print" and ":number".
- Added the '.' flag to 'cpoptions': ":cd" fails when the buffer is modified.
- In Ex mode with an empty buffer ":read file" doesn't keep an empty line
  above or below the new lines.
- Remove a backslash before a NL for the ":global" command.
- When ":append", ":insert" or ":change" is used with ":global", get the
  inserted lines from the command.  Can use backslash-NL to separate lines.
- Can use ":global /pat/ visual" to execute Normal mode commands at each
  matched line.  Use "Q" to continue and go to the next line.
- The |:open| command has been partially implemented.  It stops Ex mode, but
  redraws the whole screen, not just one line as open mode is supposed to do.
- Support using a pipe to read the output from and write input to an external
  command.  Added the 'shelltemp' option and has("filterpipe").
- In ex silent mode the ":set" command output is displayed.
- The ":@@" and ":**" give an error message when no register was used before.
- The search pattern "[]-`]" matches ']', '^', '_' and '`'.
- Autoindent for ":insert" is using the line below the insert.
- Autoindent for ":change" is using the first changed line.
- Editing Ex command lines is not done in cooked mode, because CTRL-D and
  CTRL-T cannot be handled then.
- In Ex mode, "1,3" prints three lines.  "%" prints all lines.
- In Ex mode "undo" would undo all changes since Ex mode was started.
- Implemented the 'prompt' option.


Debugger support					*new-debug-support*
----------------

The 'balloonexpr' option has been added.  This is a generic way to implement
balloon functionality.  You can use it to show info for the word under the
mouse pointer.


Remote file explorer					*new-netrw-explore*
--------------------

The netrw plugin now also supports viewing a directory, when "scp://" is used.
Deleting and renaming files is possible.

To avoid duplicating a lot of code, the previous file explorer plugin has been
integrated in the netrw plugin.  This means browsing local and remote files
works the same way.

":browse edit" and ":browse split" use the netrw plugin when it's available
and a GUI dialog is not possible.

The netrw plugin is maintained by Charles Campbell.


Define an operator					*new-define-operator*
------------------

Previously it was not possible to define your own operator; a command that is
followed by a {motion}.  Vim 7 introduces the 'operatorfunc' option and the
|g@| operator.  This makes it possible to define a mapping that works like an
operator.  The actual work is then done by a function, which is invoked
through the |g@| operator.

See |:map-operator| for the explanation and an example.


Mapping to an expression				*new-map-expression*
------------------------

The {rhs} argument of a mapping can be an expression.  That means the
resulting characters can depend on the context.  Example: >
	:inoremap <expr> . InsertDot()
Here the dot will be mapped to whatever InsertDot() returns.

This also works for abbreviations.  See |:map-<expr>| for the details.


Visual and Select mode mappings				*new-map-select*
-------------------------------

Previously Visual mode mappings applied both to Visual and Select mode.  With
a trick to have the mappings work in Select mode like they would in Visual
mode.

Commands have been added to define mappings for Visual and Select mode
separately: |:xmap| and |:smap|.  With the associated "noremap" and "unmap"
commands.

The same is done for menus: |:xmenu|, |:smenu|, etc.


Location list						*new-location-list*
-------------

The support for a per-window quickfix list (location list) is added. The
location list can be displayed in a location window (similar to the quickfix
window).  You can open more than one location list window.  A set of commands
similar to the quickfix commands are added to browse the location list.
(Yegappan Lakshmanan)


Various new items					*new-items-7*
-----------------

Normal mode commands: ~

a", a' and a`		New text objects to select quoted strings. |a'|
i", i' and i`		(Taro Muraoka)

CTRL-W <Enter>		In the quickfix window: opens a new window to show the
			location of the error under the cursor.

|at| and |it| text objects select a block of text between HTML or XML tags.

<A-LeftMouse> ('mousemodel' "popup" or "popup-setpos")
<A-RightMouse> ('mousemodel' "extend")
			Make a blockwise selection. |<A-LeftMouse>|

gF			Start editing the filename under the cursor and jump
			to the line number following the file name.
			(Yegappan Lakshmanan)

CTRL-W F		Start editing the filename under the cursor in a new
			window and jump to the line number following the file
			name.  (Yegappan Lakshmanan)

Insert mode commands: ~

CTRL-\ CTRL-O		Execute a Normal mode command.  Like CTRL-O but
			without moving the cursor. |i_CTRL-\_CTRL-O|

Options: ~

'balloonexpr'		expression for text to show in evaluation balloon
'completefunc'		The name of the function used for user-specified
			Insert mode completion.  CTRL-X CTRL-U can be used in
			Insert mode to do any kind of completion.  (Taro
			Muraoka)
'completeopt'		Enable popup menu and other settings for Insert mode
			completion.
'cursorcolumn'		highlight column of the cursor
'cursorline'		highlight line of the cursor
'formatexpr'		expression for formatting text with |gq| and when text
			goes over 'textwidth' in Insert mode.
'formatlistpat'		pattern to recognize a numbered list for formatting.
			(idea by Hugo Haas)
'fsync'			Whether fsync() is called after writing a file.
			(Ciaran McCreesh)
'guitablabel'		expression for text to display in GUI tab page label
'guitabtooltip'		expression for text to display in GUI tab page tooltip
'macatsui'		Mac: use ATSUI text display functions
'maxcombine'		maximum number of combining characters displayed
'maxmempattern'		maximum amount of memory to use for pattern matching
'mkspellmem'		parameters for |:mkspell| memory use
'mzquantum'		Time in msec to schedule MzScheme threads.
'numberwidth'		Minimal width of the space used for the 'number'
			option. (Emmanuel Renieris)
'omnifunc'		The name of the function used for omni completion.
'operatorfunc'		function to be called for |g@| operator
'printmbcharset'	CJK character set to be used for :hardcopy
'printmbfont'		font names to be used for CJK output of :hardcopy
'pumheight'		maximum number of items to show in the popup menu
'quoteescape'		Characters used to escape quotes inside a string.
			Used for the a", a' and a` text objects. |a'|
'shelltemp'		whether to use a temp file or pipes for shell commands
'showtabline'		whether to show the tab pages line
'spell'			switch spell checking on/off
'spellcapcheck'		pattern to locate the end of a sentence
'spellfile'		file where good and wrong words are added
'spelllang'		languages to check spelling for
'spellsuggest'		methods for spell suggestions
'synmaxcol'		maximum column to look for syntax items; avoids very
			slow redrawing when there are very long lines
'tabline'		expression for text to display in the tab pages line
'tabpagemax'		maximum number of tab pages to open for |-p|
'verbosefile'		Log messages in a file.
'wildoptions'		"tagfile" value enables listing the file name of
			matching tags for CTRL-D command line completion.
			(based on an idea from Yegappan Lakshmanan)
'winfixwidth'		window with fixed width, similar to 'winfixheight'


Ex commands: ~

Win32: The ":winpos" command now also works in the console. (Vipin Aravind)

|:startreplace|		Start Replace mode. (Charles Campbell)
|:startgreplace|	Start Virtual Replace mode.

|:0file|		Removes the name of the buffer. (Charles Campbell)

|:diffoff|		Switch off diff mode in the current window or in all
			windows.

|:delmarks|		Delete marks.

|:exusage|		Help for Ex commands (Nvi command).
|:viusage|		Help for Vi commands (Nvi command).

|:sort|			Sort lines in the buffer without depending on an
			external command. (partly by Bryce Wagner)

|:vimgrep|		Internal grep command, search for a pattern in files.
|:vimgrepadd|		Like |:vimgrep| but don't make a new list.

|:caddfile|		Add error messages to an existing quickfix list
			(Yegappan Lakshmanan).
|:cbuffer|		Read error lines from a buffer. (partly by Yegappan
			Lakshmanan)
|:cgetbuffer|		Create a quickfix list from a buffer but don't jump to
			the first error.
|:caddbuffer|		Add errors from the current buffer to the quickfix
			list.
|:cexpr|		Read error messages from a Vim expression (Yegappan
			Lakshmanan).
|:caddexpr|		Add error messages from a Vim expression to an
			existing quickfix list. (Yegappan Lakshmanan).
|:cgetexpr|		Create a quickfix list from a Vim expression, but
			don't jump to the first error. (Yegappan Lakshmanan).

|:lfile|		Like |:cfile| but use the location list.
|:lgetfile|		Like |:cgetfile| but use the location list.
|:laddfile|		Like |:caddfile| but use the location list.
|:lbuffer|		Like |:cbuffer| but use the location list.
|:lgetbuffer|		Like |:cgetbuffer| but use the location list.
|:laddbuffer|		Like |:caddbuffer| but use the location list.
|:lexpr|		Like |:cexpr| but use the location list.
|:lgetexpr|		Like |:cgetexpr| but use the location list.
|:laddexpr|		Like |:caddexpr| but use the location list.
|:ll|			Like |:cc| but use the location list.
|:llist|		Like |:clist| but use the location list.
|:lnext|		Like |:cnext| but use the location list.
|:lprevious|		Like |:cprevious| but use the location list.
|:lNext|		Like |:cNext| but use the location list.
|:lfirst|		Like |:cfirst| but use the location list.
|:lrewind|		Like |:crewind| but use the location list.
|:llast|		Like |:clast| but use the location list.
|:lnfile|		Like |:cnfile| but use the location list.
|:lpfile|		Like |:cpfile| but use the location list.
|:lNfile|		Like |:cNfile| but use the location list.
|:lolder|		Like |:colder| but use the location list.
|:lnewer|		Like |:cnewer| but use the location list.
|:lwindow|		Like |:cwindow| but use the location list.
|:lopen|		Like |:copen| but use the location list.
|:lclose|		Like |:cclose| but use the location list.
|:lmake|		Like |:make| but use the location list.
|:lgrep|		Like |:grep| but use the location list.
|:lgrepadd|		Like |:grepadd| but use the location list.
|:lvimgrep|		Like |:vimgrep| but use the location list.
|:lvimgrepadd|		Like |:vimgrepadd| but use the location list.
|:lhelpgrep|		Like |:helpgrep| but use the location list.
|:lcscope|		Like |:cscope| but use the location list.
|:ltag|			Jump to a tag and add matching tags to a location list.

|:undojoin|		Join a change with the previous undo block.
|:undolist|		List the leafs of the undo tree.

|:earlier|		Go back in time for changes in the text.
|:later|		Go forward in time for changes in the text.

|:for|			Loop over a |List|.
|:endfor|

|:lockvar|		Lock a variable, prevents it from being changed.
|:unlockvar|		Unlock a locked variable.

|:mkspell|		Create a Vim spell file.
|:spellgood|		Add a word to the list of good words.
|:spellwrong|		Add a word to the list of bad words
|:spelldump|		Dump list of good words.
|:spellinfo|		Show information about the spell files used.
|:spellrepall|		Repeat a spelling correction for the whole buffer.
|:spellundo|		Remove a word from list of good and bad words.

|:mzscheme|		Execute MzScheme commands.
|:mzfile|		Execute an MzScheme script file.

|:nbkey|		Pass a key to NetBeans for processing.

|:profile|		Commands for Vim script profiling.
|:profdel|		Stop profiling for specified items.

|:smap|			Select mode mapping.
|:smapclear|
|:snoremap|
|:sunmap|

|:xmap|			Visual mode mapping, not used for Select mode.
|:xmapclear|
|:xnoremap|
|:xunmap|

|:smenu|		Select mode menu.
|:snoremenu|
|:sunmenu|

|:xmenu|		Visual mode menu, not used for Select mode.
|:xnoremenu|
|:xunmenu|

|:tabclose|		Close the current tab page.
|:tabdo|		Perform a command in every tab page.
|:tabedit|		Edit a file in a new tab page.
|:tabnew|		Open a new tab page.
|:tabfind|		Search for a file and open it in a new tab page.
|:tabnext|		Go to the next tab page.
|:tabprevious|		Go to the previous tab page.
|:tabNext|		Go to the previous tab page.
|:tabfirst|		Go to the first tab page.
|:tabrewind|		Go to the first tab page.
|:tablast|		Go to the last tab page.
|:tabmove|		Move the current tab page elsewhere.
|:tabonly|		Close all other tab pages.
|:tabs|			List the tab pages and the windows they contain.

Ex command modifiers: ~

|:keepalt|		Do not change the alternate file.

|:noautocmd|		Do not trigger autocommand events.

|:sandbox|		Execute a command in the sandbox.

|:tab|			When opening a new window create a new tab page.


Ex command arguments: ~

|++bad|			Specify what happens with characters that can't be
			converted and illegal bytes. (code example by Yasuhiro
			Matsumoto)
			Also, when a conversion error occurs or illegal bytes
			are found include the line number in the error
			message.


New and extended functions: ~

|add()|			append an item to a List
|append()|		append List of lines to the buffer
|argv()|		without an argument return the whole argument list
|browsedir()|		dialog to select a directory
|bufnr()|		takes an extra argument: create buffer
|byteidx()|		index of a character (Ilya Sher)
|call()|		call a function with List as arguments
|changenr()|		number of current change
|complete()|		set matches for Insert mode completion
|complete_add()|	add match for 'completefunc'
|complete_check()|	check for key pressed, for 'completefunc'
|copy()|		make a shallow copy of a List or Dictionary
|count()|		count nr of times a value is in a List or Dictionary
|cursor()|		also accepts an offset for 'virtualedit', and
			the first argument can be a list: [lnum, col, off]
|deepcopy()|		make a full copy of a List or Dictionary
|diff_filler()|		returns number of filler lines above line {lnum}.
|diff_hlID()|		returns the highlight ID for diff mode
|empty()|		check if List or Dictionary is empty
|eval()|		evaluate {string} and return the result
|extend()|		append one List to another or add items from one
			Dictionary to another
|feedkeys()|		put characters in the typeahead buffer
|filter()|		remove selected items from a List or Dictionary
|finddir()|		find a directory in 'path'
|findfile()|		find a file in 'path' (Johannes Zellner)
|foldtextresult()|	the text displayed for a closed fold at line "lnum"
|function()|		make a Funcref out of a function name
|garbagecollect()|	cleanup unused |Lists| and |Dictionaries| with circular
			references
|get()|			get an item from a List or Dictionary
|getbufline()|		get a list of lines from a specified buffer
			(Yegappan Lakshmanan)
|getcmdtype()|		return the current command-line type
			(Yegappan Lakshmanan)
|getfontname()|		get actual font name being used
|getfperm()|		get file permission string (Nikolai Weibull)
|getftype()|		get type of file (Nikolai Weibull)
|getline()|		with second argument: get List with buffer lines
|getloclist()|		list of location list items (Yegappan Lakshmanan)
|getpos()|		return a list with the position of cursor, mark, etc.
|getqflist()|		list of quickfix errors (Yegappan Lakshmanan)
|getreg()|		get contents of a register
|gettabwinvar()|	get variable from window in specified tab page.
|has_key()|		check whether a key appears in a Dictionary
|haslocaldir()|		check if current window used |:lcd|
|hasmapto()|		check for a mapping to a string
|index()|		index of item in List
|inputlist()|		prompt the user to make a selection from a list
|insert()|		insert an item somewhere in a List
|islocked()|		check if a variable is locked
|items()|		get List of Dictionary key-value pairs
|join()|		join List items into a String
|keys()|		get List of Dictionary keys
|len()|			number of items in a List or Dictionary
|map()|			change each List or Dictionary item
|maparg()|		extra argument: use abbreviation
|mapcheck()|		extra argument: use abbreviation
|match()|		extra argument: count
|matcharg()|		return arguments of |:match| command
|matchend()|		extra argument: count
|matchlist()|		list with match and submatches of a pattern in a string
|matchstr()|		extra argument: count
|max()|			maximum value in a List or Dictionary
|min()|			minimum value in a List or Dictionary
|mkdir()|		create a directory
|pathshorten()|		reduce directory names to a single character
|printf()|		format text
|pumvisible()|		check whether the popup menu is displayed
|range()|		generate a List with numbers
|readfile()|		read a file into a list of lines
|reltime()|		get time value, possibly relative
|reltimestr()|		turn a time value into a string
|remove()|		remove one or more items from a List or Dictionary
|repeat()|		repeat "expr" "count" times (Christophe Poucet)
|reverse()|		reverse the order of a List
|search()|		extra argument:
|searchdecl()|		search for declaration of variable
|searchpair()|		extra argument: line to stop searching
|searchpairpos()|	return a List with the position of the match
|searchpos()|		return a List with the position of the match
|setloclist()|		modify a location list (Yegappan Lakshmanan)
|setpos()|		set cursor or mark to a position
|setqflist()|		modify a quickfix list (Yegappan Lakshmanan)
|settabwinvar()|	set variable in window of specified tab page
|sort()|		sort a List
|soundfold()|		get the sound-a-like equivalent of a word
|spellbadword()|	get a badly spelled word
|spellsuggest()|	get suggestions for correct spelling
|split()|		split a String into a List
|str2nr()|		convert a string to a number, base 8, 10 or 16
|stridx()|		extra argument: start position
|strridx()|		extra argument: start position
|string()|		string representation of a List or Dictionary
|system()|		extra argument: filters {input} through a shell command
|tabpagebuflist()|	List of buffers in a tab page
|tabpagenr()|		number of current or last tab page
|tabpagewinnr()|	window number in a tab page
|tagfiles()|		List with tags file names
|taglist()|		get list of matching tags (Yegappan Lakshmanan)
|tr()|			translate characters (Ron Aaron)
|values()|		get List of Dictionary values
|winnr()|		takes an argument: what window to use
|winrestview()|		restore the view of the current window
|winsaveview()|		save the view of the current window
|writefile()|		write a list of lines into a file

User defined functions can now be loaded automatically from the "autoload"
directory in 'runtimepath'.  See |autoload-functions|.


New Vim variables: ~

|v:insertmode|		used for |InsertEnter| and |InsertChange| autocommands
|v:val|			item value in a |map()| or |filter()| function
|v:key|			item key in a |map()| or |filter()| function
|v:profiling|		non-zero after a ":profile start" command
|v:fcs_reason|		the reason why |FileChangedShell| was triggered
|v:fcs_choice|		what should happen after |FileChangedShell|
|v:beval_bufnr|		buffer number for 'balloonexpr'
|v:beval_winnr|		window number for 'balloonexpr'
|v:beval_lnum|		line number for 'balloonexpr'
|v:beval_col|		column number for 'balloonexpr'
|v:beval_text|		text under the mouse pointer for 'balloonexpr'
|v:scrollstart|		what caused the screen to be scrolled up
|v:swapname|		name of the swap file for the |SwapExists| event
|v:swapchoice|		what to do for an existing swap file
|v:swapcommand|		command to be executed after handling |SwapExists|
|v:char|		argument for evaluating 'formatexpr'


New autocommand events: ~

|ColorScheme|		after loading a color scheme

|CursorHoldI|		the user doesn't press a key for a while in Insert mode
|CursorMoved|		the cursor was moved in Normal mode
|CursorMovedI|		the cursor was moved in Insert mode

|FileChangedShellPost|	after handling a file changed outside of Vim

|InsertEnter|		starting Insert or Replace mode
|InsertChange|		going from Insert to Replace mode or back
|InsertLeave|		leaving Insert or Replace mode

|MenuPopup|		just before showing popup menu

|QuickFixCmdPre|	before :make, :grep et al. (Ciaran McCreesh)
|QuickFixCmdPost|	after :make, :grep et al. (Ciaran McCreesh)

|SessionLoadPost|	after loading a session file. (Yegappan Lakshmanan)

|ShellCmdPost|		after executing a shell command
|ShellFilterPost|	after filtering with a shell command

|SourcePre|		before sourcing a Vim script

|SpellFileMissing|	when a spell file can't be found

|SwapExists|		found existing swap file when editing a file

|TabEnter|		just after entering a tab page
|TabLeave|		just before leaving a tab page

|VimResized|		after the Vim window size changed (Yakov Lerner)


New highlight groups: ~

Pmenu                   Popup menu: normal item |hl-Pmenu|
PmenuSel                Popup menu: selected item |hl-PmenuSel|
PmenuThumb              Popup menu: scrollbar |hl-PmenuThumb|
PmenuSbar               Popup menu: Thumb of the scrollbar |hl-PmenuSbar|

TabLine                 tab pages line, inactive label |hl-TabLine|
TabLineSel              tab pages line, selected label |hl-TabLineSel|
TabLineFill             tab pages line, filler |hl-TabLineFill|

SpellBad                badly spelled word |hl-SpellBad|
SpellCap                word with wrong caps |hl-SpellCap|
SpellRare               rare word |hl-SpellRare|
SpellLocal              word only exists in other region |hl-SpellLocal|

CursorColumn            'cursorcolumn' |hl-CursorColumn|
CursorLine              'cursorline' |hl-CursorLine|

MatchParen              matching parens |pi_paren.txt| |hl-MatchParen|


New items in search patterns: ~
|/\%d| \%d123		search for character with decimal number
|/\]|  [\d123]		idem, in a collection
|/\%o| \%o103		search for character with octal number
|/\]|  [\o1o3]		idem, in a collection
|/\%x| \%x1a		search for character with 2 pos. hex number
|/\]|  [\x1a]		idem, in a collection
|/\%u| \%u12ab		search for character with 4 pos. hex number
|/\]|  [\u12ab]		idem, in a collection
|/\%U| \%U1234abcd	search for character with 8 pos. hex number
|/\]|  [\U1234abcd]	idem, in a collection
			    (The above partly by Ciaran McCreesh)

|/[[=| [[=a=]]		an equivalence class (only for latin1 characters)
|/[[.| [[.a.]]		a collation element (only works with single char)

|/\%'m|  \%'m		match at mark m
|/\%<'m| \%<'m		match before mark m
|/\%>'m| \%>'m		match after mark m
|/\%V|   \%V		match in Visual area

Nesting |/multi| items no longer is an error when an empty match is possible.

It is now possible to use \{0}, it matches the preceding atom zero times.  Not
useful, just for compatibility.


New Syntax/Indent/FTplugin files: ~

Moved all the indent settings from the filetype plugin to the indent file.
Implemented b:undo_indent to undo indent settings when setting 'filetype' to a
different value.

a2ps syntax and ftplugin file. (Nikolai Weibull)
ABAB/4 syntax file. (Marius van Wyk)
alsaconf ftplugin file. (Nikolai Weibull)
AppendMatchGroup ftplugin file. (Dave Silvia)
arch ftplugin file. (Nikolai Weibull)
asterisk and asteriskvm syntax file. (Tilghman Lesher)
BDF ftplugin file. (Nikolai Weibull)
BibTeX indent file. (Dorai Sitaram)
BibTeX Bibliography Style syntax file. (Tim Pope)
BTM ftplugin file. (Bram Moolenaar)
calendar ftplugin file. (Nikolai Weibull)
Changelog indent file. (Nikolai Weibull)
ChordPro syntax file. (Niels Bo Andersen)
Cmake indent and syntax file. (Andy Cedilnik)
conf ftplugin file. (Nikolai Weibull)
context syntax and ftplugin file. (Nikolai Weibull)
CRM114 ftplugin file. (Nikolai Weibull)
cvs RC ftplugin file. (Nikolai Weibull)
D indent file. (Jason Mills)
Debian Sources.list syntax file. (Matthijs Mohlmann)
dictconf and dictdconf syntax, indent and ftplugin files. (Nikolai Weibull)
diff ftplugin file. (Bram Moolenaar)
dircolors ftplugin file. (Nikolai Weibull)
django and htmldjango syntax file. (Dave Hodder)
doxygen syntax file. (Michael Geddes)
elinks ftplugin file. (Nikolai Weibull)
eterm ftplugin file. (Nikolai Weibull)
eviews syntax file. (Vaidotas Zemlys)
fetchmail RC ftplugin file. (Nikolai Weibull)
FlexWiki syntax and ftplugin file. (George Reilly)
Generic indent file. (Dave Silvia)
gpg ftplugin file. (Nikolai Weibull)
gretl syntax file. (Vaidotas Zemlys)
groovy syntax file. (Alessio Pace)
group syntax and ftplugin file. (Nikolai Weibull)
grub ftplugin file. (Nikolai Weibull)
Haskell ftplugin file. (Nikolai Weibull)
help ftplugin file. (Nikolai Weibull)
indent ftplugin file. (Nikolai Weibull)
Javascript ftplugin file. (Bram Moolenaar)
Kconfig ftplugin and syntax file. (Nikolai Weibull)
ld syntax, indent and ftplugin file. (Nikolai Weibull)
lftp ftplugin file. (Nikolai Weibull)
libao config ftplugin file. (Nikolai Weibull)
limits syntax and ftplugin file. (Nikolai Weibull)
Lisp indent file. (Sergey Khorev)
loginaccess and logindefs syntax and ftplugin file. (Nikolai Weibull)
m4 ftplugin file. (Nikolai Weibull)
mailaliases syntax file. (Nikolai Weibull)
mailcap ftplugin file. (Nikolai Weibull)
manconf syntax and ftplugin file. (Nikolai Weibull)
matlab ftplugin file. (Jake Wasserman)
Maxima syntax file. (Robert Dodier)
MGL syntax file. (Gero Kuhlmann)
modconf ftplugin file. (Nikolai Weibull)
mplayer config ftplugin file. (Nikolai Weibull)
Mrxvtrc syntax and ftplugin file. (Gautam Iyer)
MuPAD source syntax, indent and ftplugin. (Dave Silvia)
mutt RC ftplugin file. (Nikolai Weibull)
nanorc syntax and ftplugin file. (Nikolai Weibull)
netrc ftplugin file. (Nikolai Weibull)
pamconf syntax and ftplugin file. (Nikolai Weibull)
Pascal indent file. (Neil Carter)
passwd syntax and ftplugin file. (Nikolai Weibull)
PHP compiler plugin. (Doug Kearns)
pinfo ftplugin file. (Nikolai Weibull)
plaintex syntax and ftplugin files. (Nikolai Weibull, Benji Fisher)
procmail ftplugin file. (Nikolai Weibull)
prolog ftplugin file. (Nikolai Weibull)
protocols syntax and ftplugin file. (Nikolai Weibull)
quake ftplugin file. (Nikolai Weibull)
racc syntax and ftplugin file. (Nikolai Weibull)
readline ftplugin file. (Nikolai Weibull)
rhelp syntax file. (Johannes Ranke)
rnoweb syntax file. (Johannes Ranke)
Relax NG compact ftplugin file. (Nikolai Weibull)
Scheme indent file. (Sergey Khorev)
screen ftplugin file. (Nikolai Weibull)
sensors syntax and ftplugin file. (Nikolai Weibull)
services syntax and ftplugin file. (Nikolai Weibull)
setserial syntax and ftplugin file. (Nikolai Weibull)
sieve syntax and ftplugin file. (Nikolai Weibull)
SiSU syntax file (Ralph Amissah)
Sive syntax file. (Nikolai Weibull)
slp config, reg and spi syntax and ftplugin files. (Nikolai Weibull)
SML indent file. (Saikat Guha)
SQL anywhere syntax and indent file. (David Fishburn)
SQL indent file.
SQL-Informix syntax file. (Dean L Hill)
SQL: Handling of various variants. (David Fishburn)
sshconfig ftplugin file. (Nikolai Weibull)
Stata and SMCL syntax files. (Jeff Pitblado)
sudoers ftplugin file. (Nikolai Weibull)
sysctl syntax and ftplugin file. (Nikolai Weibull)
terminfo ftplugin file. (Nikolai Weibull)
trustees syntax file. (Nima Talebi)
Vera syntax file. (David Eggum)
udev config, permissions and rules syntax and ftplugin files. (Nikolai Weibull)
updatedb syntax and ftplugin file. (Nikolai Weibull)
VHDL indent file (Gerald Lai)
WSML syntax file. (Thomas Haselwanter)
Xdefaults ftplugin file. (Nikolai Weibull)
XFree86 config ftplugin file. (Nikolai Weibull)
xinetd syntax, indent and ftplugin file. (Nikolai Weibull)
xmodmap ftplugin file. (Nikolai Weibull)
Xquery syntax file. (Jean-Marc Vanel)
xsd (XML schema) indent file.
YAML ftplugin file. (Nikolai Weibull)
Zsh ftplugin file. (Nikolai Weibull)


New Keymaps: ~

Sinhala (Sri Lanka) (Harshula Jayasuriya)
Tamil in TSCII encoding (Yegappan Lakshmanan)
Greek in cp737 (Panagiotis Louridas)
Polish-slash (HS6_06)
Ukrainian-jcuken (Anatoli Sakhnik)
Kana (Edward L. Fox)


New message translations: ~

The Ukranian messages are now also available in cp1251.
Vietnamese message translations and menu. (Phan Vinh Thinh)


Others: ~

The |:read| command has the |++edit| argument.  This means it will use the
detected 'fileformat', 'fileencoding' and other options for the buffer.  This
also fixes the problem that editing a compressed file didn't set these
options.

The Netbeans interface was updated for Sun Studio 10.  The protocol number
goes from 2.2 to 2.3. (Gordon Prieur)

Mac: When starting up Vim will load the $VIMRUNTIME/macmap.vim script to
define default command-key mappings. (mostly by Benji Fisher)

Mac: Add the selection type to the clipboard, so that Block, line and
character selections can be used between two Vims. (Eckehard Berns)
Also fixes the problem that setting 'clipboard' to "unnamed" breaks using
"yyp".

Mac: GUI font selector. (Peter Cucka)

Mac: support for multi-byte characters. (Da Woon Jung)
This doesn't always work properly.  If you see text drawing problems try
switching the 'macatsui' option off.

Mac: Support the xterm mouse in the non-GUI version.

Mac: better integration with Xcode.  Post a fake mouse-up event after the odoc
event and the drag receive handler to work around a stall after Vim loads a
file.  Fixed an off-by-one line number error. (Da Woon Jung)

Mac: When started from Finder change directory to the file being edited or the
user home directory.

Added the t_SI and t_EI escape sequences for starting and ending Insert mode.
To be used to set the cursor shape to a bar or a block.  No default values,
they are not supported by termcap/terminfo.

GUI font selector for Motif. (Marcin Dalecki)

Nicer toolbar buttons for Motif. (Marcin Dalecki)

Mnemonics for the Motif find/replace dialog. (Marcin Dalecki)

Included a few improvements for Motif from Marcin Dalecki.  Draw label
contents ourselves to make them handle fonts in a way configurable by Vim and
a bit less dependent on the X11 font management.

Autocommands can be defined local to a buffer.  This means they will also work
when the buffer does not have a name or no specific name.  See
|autocmd-buflocal|.  (Yakov Lerner)

For xterm most combinations of modifiers with function keys are recognized.
|xterm-modifier-keys|

When 'verbose' is set the output of ":highlight" will show where a highlight
item was last set.
When 'verbose' is set the output of the ":map", ":abbreviate", ":command",
":function" and ":autocmd" commands will show where it was last defined.
(Yegappan Lakshmanan)

":function /pattern" lists functions matching the pattern.

"1gd" can be used like "gd" but ignores matches in a {} block that ends before
the cursor position.  Likewise for "1gD" and "gD".

'scrolljump' can be set to a negative number to scroll a percentage of the
window height.

The |v:scrollstart| variable has been added to help finding the location in
your script that causes the hit-enter prompt.

To make it possible to handle the situation that a file is being edited that
is already being edited by another Vim instance, the |SwapExists| event has
been added.  The |v:swapname|, |v:swapchoice| and |v:swapcommand| variables
can be used, for example to use the |client-server| functionality to bring the
other Vim to the foreground.
When starting Vim with a "-t tag" argument, there is an existing swapfile and
the user selects "quit" or "abort" then exit Vim.

Undo now also restores the '< and '> marks.  "gv" selects the same area as
before the change and undo.

When editing a search pattern for a "/" or "?" command and 'incsearch' is set
CTRL-L can be used to add a character from the current match.  CTRL-R CTRL-W
will add a word, but exclude the part of the word that was already typed.

Ruby interface: add line number methods. (Ryan Paul)

The $MYVIMRC environment variable is set to the first found vimrc file.
The $MYGVIMRC environment variable is set to the first found gvimrc file.

==============================================================================
IMPROVEMENTS						*improvements-7*

":helpgrep" accepts a language specifier after the pattern: "pat@it".

Moved the help for printing to a separate help file.  It's quite a lot now.

When doing completion for ":!cmd", ":r !cmd" or ":w !cmd" executable files are
found in $PATH instead of looking for ordinary files in the current directory.

When ":silent" is used and a backwards range is given for an Ex command the
range is swapped automatically instead of asking if that is OK.

The pattern matching code was changed from a recursive function to an
iterative mechanism.  This avoids out-of-stack errors.  State is stored in
allocated memory, running out of memory can always be detected.  Allows
matching more complex things, but Vim may seem to hang while doing that.

Previously some options were always evaluated in the |sandbox|.  Now that only
happens when the option was set from a modeline or in secure mode.  Applies to
'balloonexpr', 'foldexpr', 'foldtext' and 'includeexpr'. (Sumner Hayes)

Some commands and expressions could have nasty side effects, such as using
CTRL-R = while editing a search pattern and the expression invokes a function
that jumps to another window.  The |textlock| has been added to prevent this
from happening.

":breakadd here" and ":breakdel here" can be used to set or delete a
breakpoint at the cursor.

It is now possible to define a function with: >
	:exe "func Test()\n ...\n endfunc"

The tutor was updated to make it simpler to use and text was added to explain
a few more important commands.  Used ideas from Gabriel Zachmann.

Unix: When libcall() fails obtain an error message with dlerror() and display
it. (Johannes Zellner)

Mac and Cygwin: When editing an existing file make the file name the same case
of the edited file.  Thus when typing ":e os_UNIX.c" the file name becomes
"os_unix.c".

Added "nbsp" in 'listchars'. (David Blanchet)

Added the "acwrite" value for the 'buftype' option.  This is for a buffer that
does not have a name that refers to a file and is written with BufWriteCmd
autocommands.

For lisp indenting and matching parenthesis: (Sergey Khorev)
- square brackets are recognized properly
- #\(, #\), #\[ and #\] are recognized as character literals
- Lisp line comments (delimited by semicolon) are recognized

Added the "count" argument to match(), matchend() and matchstr(). (Ilya Sher)

winnr() takes an optional "$" or "#" argument.  (Nikolai Weibull, Yegappan
Lakshmanan)

Added 's' flag to search(): set ' mark if cursor moved. (Yegappan Lakshmanan)
Added 'n' flag to search(): don't move the cursor. (Nikolai Weibull)
Added 'c' flag to search(): accept match at the cursor.
Added 'e' flag to search(): move to end of the match. (Benji Fisher)
Added 'p' flag to search(): return number of sub-pattern. (Benji Fisher)
These also apply to searchpos(), searchpair() and searchpairpos().

The search() and searchpair() functions have an extra argument to specify
where to stop searching.  Speeds up searches that should not continue too far.

When uncompressing fails in the gzip plugin, give an error message but don't
delete the raw text.  Helps if the file has a .gz extension but is not
actually compressed. (Andrew Pimlott)

When C, C++ or IDL syntax is used, may additionally load doxygen syntax.
(Michael Geddes)

Support setting 'filetype' and 'syntax' to "aaa.bbb" for "aaa" plus "bbb"
filetype or syntax.

The ":registers" command now displays multi-byte characters properly.

VMS: In the usage message mention that a slash can be used to make a flag
upper case.  Add color support to the builtin vt320 terminal codes.
(Zoltan Arpadffy)

For the '%' item in 'viminfo', allow a number to set a maximum for the number
of buffers.

For recognizing the file type: When a file looks like a shell script, check
for an "exec" command that starts the tcl interpreter. (suggested by Alexios
Zavras)

Support conversion between utf-8 and latin9 (iso-8859-15) internally, so that
digraphs still work when iconv is not available.

When a session file is loaded while editing an unnamed, empty buffer that
buffer is wiped out.  Avoids that there is an unused buffer in the buffer
list.

Win32: When libintl.dll supports bind_textdomain_codeset(), use it.
(NAKADAIRA Yukihiro)

Win32: Vim was not aware of hard links on NTFS file systems.  These are
detected now for when 'backupcopy' is "auto".  Also fixed a bogus "file has
been changed since reading it" error for links.

When foldtext() finds no text after removing the comment leader, use the
second line of the fold.  Helps for C-style /* */ comments where the first
line is just "/*".

When editing the same file from two systems (e.g., Unix and MS-Windows) there
mostly was no warning for an existing swap file, because the name of the
edited file differs (e.g., y:\dir\file vs /home/me/dir/file).  Added a flag to
the swap file to indicate it is in the same directory as the edited file.  The
used path then doesn't matter and the check for editing the same file is much
more reliable.

Unix: When editing a file through a symlink the swap file would use the name
of the symlink.  Now use the name of the actual file, so that editing the same
file twice is detected. (suggestions by Stefano Zacchiroli and James Vega)

Client-server communication now supports 'encoding'.  When setting 'encoding'
in a Vim server to "utf-8", and using "vim --remote fname" in a console,
"fname" is converted from the console encoding to utf-8.  Also allows Vims
with different 'encoding' settings to exchange messages.

Internal: Changed ga_room into ga_maxlen, so that it doesn't need to be
incremented/decremented each time.

When a register is empty it is not stored in the viminfo file.

Removed the tcltags script, it's obsolete.

":redir @*>>" and ":redir @+>>" append to the clipboard.  Better check for
invalid characters after the register name. |:redir|

":redir => variable" and ":redir =>> variable" write or append to a variable.
(Yegappan Lakshmanan) |:redir|

":redir @{a-z}>>" appends to register a to z. (Yegappan Lakshmanan)

The 'verbosefile' option can be used to log messages in a file.  Verbose
messages are not displayed then.  The "-V{filename}" argument can be used to
log startup messages.

":let g:" lists global variables.
":let b:" lists buffer-local variables.
":let w:" lists window-local variables.
":let v:" lists Vim variables.

The stridx() and strridx() functions take a third argument, where to start
searching.  (Yegappan Lakshmanan)

The getreg() function takes an extra argument to be able to get the expression
for the '=' register instead of the result of evaluating it.

The setline() function can take a List argument to set multiple lines.  When
the line number is just below the last line the line is appended.

g CTRL-G also shows the number of characters if it differs from the number of
bytes.

Completion for ":debug" and entering an expression for the '=' register.  Skip
":" between range and command name. (Peter winters)

CTRL-Q in Insert mode now works like CTRL-V by default.  Previously it was
ignored.

When "beep" is included in 'debug' a function or script that causes a beep
will result in a message with the source of the error.

When completing buffer names, match with "\(^\|[\/]\)" instead of "^", so that
":buf stor<Tab>" finds both "include/storage.h" and "storage/main.c".

To count items (pattern matches) without changing the buffer the 'n' flag has
been added to |:substitute|.  See |count-items|.

In a |:substitute| command the \u, \U, \l and \L items now also work for
multi-byte characters.

The "screen.linux" $TERM name is recognized to set the default for
'background' to "dark". (Ciaran McCreesh)  Also for "cygwin" and "putty".

The |FileChangedShell| autocommand event can now use the |v:fcs_reason|
variable that specifies what triggered the event.  |v:fcs_choice| can be used
to reload the buffer or ask the user what to do.

Not all modifiers were recognized for xterm function keys.  Added the
possibility in term codes to end in ";*X" or "O*X", where X is any character
and the * stands for the modifier code.
Added the <xUp>, <xDown>, <xLeft> and <xRight> keys, to be able to recognize
the two forms that xterm can send their codes in and still handle all possible
modifiers.

getwinvar() now also works to obtain a buffer-local option from the specified
window.

Added the "%s" item to 'errorformat'. (Yegappan Lakshmanan)
Added the "%>" item to 'errorformat'.

For 'errorformat' it was not possible to have a file name that contains the
character that follows after "%f".  For example, in "%f:%l:%m" the file name
could not contain ":".  Now include the first ":" where the rest of the
pattern matches.  In the example a ":" not followed by a line number is
included in the file name. (suggested by Emanuele Giaquinta)

GTK GUI: use the GTK file dialog when it's available.  Mix from patches by
Grahame Bowland and Evan Webb.

Added ":scriptnames" to bugreport.vim, so that we can see what plugins were
used.

Win32: If the user changes the setting for the number of lines a scroll wheel
click scrolls it is now used immediately.  Previously Vim would need to be
restarted.

When using @= in an expression the value is expression @= contains.  ":let @=
= value" can be used to set the register contents.

A ! can be added to ":popup" to have the popup menu appear at the mouse
pointer position instead of the text cursor.

The table with encodings has been expanded with many MS-Windows codepages,
such as cp1250 and cp737, so that these can also be used on Unix without
prepending "8bit-".
When an encoding name starts with "microsoft-cp" ignore the "microsoft-" part.

Added the "customlist" completion argument to a user-defined command.  The
user-defined completion function should return the completion candidates as a
Vim List and the returned results are not filtered by Vim. (Yegappan
Lakshmanan)

Win32: Balloons can have multiple lines if common controls supports it.
(Sergey Khorev)

For command-line completion the matches for various types of arguments are now
sorted: user commands, variables, syntax names, etc.

When no locale is set, thus using the "C" locale, Vim will work with latin1
characters, using its own isupper()/toupper()/etc. functions.

When using an rxvt terminal emulator guess the value of 'background' using the
COLORFGBG environment variable. (Ciaran McCreesh)

Also support t_SI and t_EI on Unix with normal features. (Ciaran McCreesh)

When 'foldcolumn' is one then put as much info in it as possible.  This allows
closing a fold with the mouse by clicking on the '-'.

input() takes an optional completion argument to specify the type of
completion supported for the input. (Yegappan Lakshmanan)

"dp" works with more than two buffers in diff mode if there is only one where
'modifiable' is set.

The 'diffopt' option has three new values: "horizontal", "vertical" and
"foldcolumn".

When the 'include' option contains \zs the file name found is what is being
matched from \zs to the end or \ze.  Useful to pass more to 'includeexpr'.

Loading plugins on startup now supports subdirectories in the plugin
directory. |load-plugins|

In the foldcolumn always show the '+' for a closed fold, so that it can be
opened easily.  It may overwrite another character, esp. if 'foldcolumn' is 1.

It is now possible to get the W10 message again by setting 'readonly'.  Useful
in the FileChangedRO autocommand when checking out the file fails.

Unix: When open() returns EFBIG give an appropriate message.

":mksession" sets the SessionLoad variable to notify plugins.  A modeline is
added to the session file to set 'filetype' to "vim".

In the ATTENTION prompt put the "Delete it" choice before "Quit" to make it
more logical.  (Robert Webb)

When appending to a file while the buffer has no name the name of the appended
file would be used for the current buffer.  But the buffer contents is
actually different from the file content.  Don't set the file name, unless the
'P' flag is present in 'cpoptions'.

When starting to edit a new file and the directory for the file doesn't exist
then Vim will report "[New DIRECTORY]" instead of "[New File] to give the user
a hint that something might be wrong.

Win32: Preserve the hidden attribute of the viminfo file.

In Insert mode CTRL-A didn't keep the last inserted text when using CTRL-O and
then a cursor key.  Now keep the previously inserted text if nothing is
inserted after the CTRL-O.  Allows using CTRL-O commands to move the cursor
without losing the last inserted text.

The exists() function now supports checking for autocmd group definition
and for supported autocommand events. (Yegappan Lakshmanan)

Allow using ":global" in the sandbox, it doesn't do anything harmful by
itself.

":saveas asdf.c" will set 'filetype' to c when it's empty.  Also for ":w
asdf.c" when it sets the filename for the buffer.

Insert mode completion for whole lines now also searches unloaded buffers.

The colortest.vim script can now be invoked directly with ":source" or
":runtime syntax/colortest.vim".

The 'statusline' option can be local to the window, so that each window can
have a different value.  (partly by Yegappan Lakshmanan)

The 'statusline' option and other options that support the same format can now
use these new features:
- When it starts with "%!" the value is first evaluated as an expression
  before parsing the value.
- "%#HLname#" can be used to start highlighting with HLname.

When 'statusline' is set to something that causes an error message then it is
made empty to avoid an endless redraw loop.  Also for other options, such at
'tabline' and 'titlestring'.  ":verbose set statusline" will mention that it
was set in an error handler.

When there are several matching tags, the ":tag <name>" and CTRL-] commands
jump to the [count] matching tag. (Yegappan Lakshmanan)

Win32: In the batch files generated by the install program, use $VIMRUNTIME or
$VIM if it's set.  Example provided by Mathias Michaelis.
Also create a vimtutor.bat batch file.

The 'balloonexpr' option is now |global-local|.

The system() function now runs in cooked mode, thus can be interrupted by
CTRL-C.

==============================================================================
COMPILE TIME CHANGES					*compile-changes-7*

Dropped the support for the BeOS and Amiga GUI.  They were not maintained and
probably didn't work.  If you want to work on this: get the Vim 6.x version
and merge it back in.

When running the tests and one of them fails to produce "test.out" the
following tests are still executed.  This helps when running out of memory.

When compiling with EXITFREE defined and the ccmalloc library it is possible
to detect memory leaks.  Some memory will always reported as leaked, such as
allocated by X11 library functions and the memory allocated in alloc_cmdbuff()
to store the ":quit" command.

Moved the code for printing to src/hardcopy.c.

Moved some code from main() to separate functions to make it easier to see
what is being done.  Using a structure to avoid a lot of arguments to the
functions.

Moved unix_expandpath() to misc1.c, so that it can also be used by os_mac.c
without copying the code.

--- Mac ---

"make" now creates the Vim.app directory and "make install" copies it to its
final destination. (Raf)

Put the runtime directory not directly in Vim.app but in
Vim.app/Contents/Resources/vim, so that it's according to Mac specs.

Made it possible to compile with Motif, Athena or GTK without tricks and still
being able to use the MacRoman conversion.  Added the os_mac_conv.c file.

When running "make install" the runtime files are installed as for Unix.
Avoids that too many files are copied.  When running "make" a link to the
runtime files is created to avoid a recursive copy that takes much time.

Configure will attempt to build Vim for both Intel and PowerPC.  The
--with-mac-arch configure argument can change it.

--- Win32 ---

The Make_mvc.mak file was adjusted to work with the latest MS compilers,
including the free version of Visual Studio 2005. (George Reilly)

INSTALLpc.txt was updated for the recent changes. (George Reilly)

The distributed executable is now produced with the free Visual C++ Toolkit
2003 and other free SDK chunks.  msvcsetup.bat was added to support this.

Also generate the .pdb file that can be used to generate a useful crash report
on MS-Windows. (George Reilly)

==============================================================================
BUG FIXES						*bug-fixes-7*

When using PostScript printing on MS-DOS the default 'printexpr' used "lpr"
instead of "copy".  When 'printdevice' was empty the copy command did not
work.  Use "LPT1" then.

The GTK font dialog uses a font size zero when the font name doesn't include a
size.  Use a default size of 10.

This example in the documentation didn't work:
    :e `=foo . ".c" `
Skip over the expression in `=expr` when looking for comments, |, % and #.

When ":helpgrep" doesn't find anything there is no error message.

"L" and "H" did not take closed folds into account.

Win32: The "-P title" argument stopped at the first title that matched, even
when it doesn't support MDI.

Mac GUI: CTRL-^ and CTRL-@ did not work.

"2daw" on "word." at the end of a line didn't include the preceding white
space.

Win32: Using FindExecutable() doesn't work to find a program.  Use
SearchPath() instead.  For executable() use $PATHEXT when the program searched
for doesn't have an extension.

When 'virtualedit' is set, moving the cursor up after appending a character
may move it to a different column.  Was caused by auto-formatting moving the
cursor and not putting it back where it was.

When indent was added automatically and then moving the cursor, the indent was
not deleted (like when pressing ESC).  The "I" flag in 'cpoptions' can be used
to make it work the old way.

When opening a command-line window, 'textwidth' gets set to 78 by the Vim
filetype plugin.  Reset 'textwidth' to 0 to avoid lines are broken.

After using cursor(line, col) moving up/down doesn't keep the same column.

Win32: Borland C before 5.5 requires using ".u." for LowPart and HighPart
fields. (Walter Briscoe)

On Sinix SYS_NMLN isn't always defined.  Define it ourselves. (Cristiano De
Michele)

Printing with PostScript may keep the printer waiting for more.  Append a
CTRL-D to the printer output. (Mike Williams)

When converting a string with a hex or octal number the leading '-' was
ignored.  ":echo '-05' + 0" resulted in 5 instead of -5.

Using "@:" to repeat a command line didn't work when it contains control
characters.  Also remove "'<,'>" when in Visual mode to avoid that it appears
twice.

When using file completion for a user command, it would not expand environment
variables like for a regular command with a file argument.

'cindent': When the argument of a #define looks like a C++ class the next line
is indented too much.

When 'comments' includes multi-byte characters inserting the middle part and
alignment may go wrong.  'cindent' also suffers from this for right-aligned
items.

Win32: when 'encoding' is set to "utf-8" getenv() still returns strings in the
active codepage.  Convert to utf-8.  Also for $HOME.

The default for 'helplang' was "zh" for both "zh_cn" and "zh_tw".  Now use
"cn" or "tw" as intended.

When 'bin' is set and 'eol' is not set then line2byte() added the line break
after the last line while it's not there.

Using foldlevel() in a WinEnter autocommand may not work.  Noticed when
resizing the GUI shell upon startup.

Python: Using buffer.append(f.readlines()) didn't work.  Allow appending a
string with a trailing newline.  The newline is ignored.

When using the ":saveas f2" command for buffer "f1", the Buffers menu would
contain "f2" twice, one of them leading to "f1".  Also trigger the BufFilePre
and BufFilePost events for the alternate buffer that gets the old name.

strridx() did not work well when the needle is empty. (Ciaran McCreesh)

GTK: Avoid a potential hang in gui_mch_wait_for_chars() when input arrives
just before it is invoked

VMS: Occasionally CR characters were inserted in the file.  Expansion of
environment variables was not correct. (Zoltan Arpadffy)

UTF-8: When 'delcombine' is set "dw" only deleted the last combining character
from the first character of the word.

When using ":sball" in an autocommand only the filetype in one buffer was
detected.  Reset did_filetype in enter_buffer().

When using ":argdo" and the window already was at the first argument index,
but not actually editing it, the current buffer would be used instead.

When ":next dir/*" includes many matches, adding the names to the argument
list may take an awful lot of time and can't be interrupted.  Allow
interrupting this.

When editing a file that was already loaded in a buffer, modelines were not
used.  Now window-local options in the modeline are set.  Buffer-local options
and global options remain unmodified.

Win32: When 'encoding' is set to "utf-8" in the vimrc file, files from the
command line with non-ASCII characters are not used correctly.  Recode the
file names when 'encoding' is set, using the Unicode command line.

Win32 console: When the default for 'encoding' ends up to be "latin1", the
default value of 'isprint' was wrong.

When an error message is given while waiting for a character (e.g., when an
xterm reports the number of colors), the hit-enter prompt overwrote the last
line.  Don't reset msg_didout in normal_cmd() for K_IGNORE.

Mac GUI: Shift-Tab didn't work.

When defining tooltip text, don't translate terminal codes, since it's not
going to be used like a command.

GTK 2: Check the tooltip text for valid utf-8 characters to avoid getting a
GTK error.  Invalid characters may appear when 'encoding' is changed.

GTK 2: Add a safety check for invalid utf-8 sequences, they can crash pango.

Win32: When 'encoding' is changed while starting up, use the Unicode command
line to convert the file arguments to 'encoding'.  Both for the GUI and the
console version.

Win32 GUI: latin9 text (iso-8859-15) was not displayed correctly, because
there is no codepage for latin9.  Do our own conversion from latin9 to UCS2.

When two versions of GTK+ 2 are installed it was possible to use the header
files from one and the library from the other.  Use GTK_LIBDIR to put the
directory for the library early in the link flags.

With the GUI find/replace dialog a replace only worked if the pattern was
literal text.  Now it works for any pattern.

When 'equalalways' is set and 'eadirection' is "hor", ":quit" would still
cause equalizing window heights in the vertical direction.

When ":emenu" is used in a startup script the command was put in the typeahead
buffer, causing a prompt for the crypt key to be messed up.

Mac OS/X: The default for 'isprint' included characters 128-160, causes
problems for Terminal.app.

When a syntax item with "containedin" is used, it may match in the start or
end of a region with a matchgroup, while this doesn't happen for a "contains"
argument.

When a transparent syntax items matches in another item where the highlighting
has already stopped (because of a he= argument), the highlighting would come
back.

When cscope is used to set the quickfix error list, it didn't get set if there
was only one match. (Sergey Khorev)

When 'confirm' is set and using ":bdel" in a modified buffer, then selecting
"cancel", would still give an error message.

The PopUp menu items that started Visual mode didn't work when not in Normal
mode.  Switching between selecting a word and a line was not possible.

Win32: The keypad decimal point always resulted in a '.', while on some
keyboards it's a ','.  Use MapVirtualKey(VK_DECIMAL, 2).

Removed unused function DisplayCompStringOpaque() from gui_w32.c

In Visual mode there is not always an indication whether the line break is
selected or not.  Highlight the character after the line when the line break
is included, e.g., after "v$o".

GTK: The <F10> key can't be mapped, it selects the menu.  Disable that with a
GTK setting and do select the menu when <F10> isn't mapped. (David Necas)

After "Y" '[ and '] were not at start/end of the yanked text.

When a telnet connection is dropped Vim preserves files and exits.  While
doing that a SIGHUP may arrive and disturb us, thus ignore it. (Scott
Anderson)  Also postpone SIGHUP, SIGQUIT and SIGTERM until it's safe to
handle.  Added handle_signal().

When completing a file name on the command line backslashes are required for
white space.  Was only done for a space, not for a Tab.

When configure could not find a terminal library, compiling continued for a
long time before reporting the problem.  Added a configure check for tgetent()
being found in a library.

When the cursor is on the first char of the last line a ":g/pat/s///" command
may cause the cursor to be displayed below the text.

Win32: Editing a file with non-ASCII characters doesn't work when 'encoding'
is "utf-8".  use _wfullpath() instead of _fullpath(). (Yu-sung Moon)

When recovering the 'fileformat' and 'fileencoding' were taken from the
original file instead of from the swapfile.  When the file didn't exist, was
empty or the option was changed (e.g., with ":e ++fenc=cp123 file") it could
be wrong.  Now store 'fileformat' and 'fileencoding' in the swapfile and use
the values when recovering.

":bufdo g/something/p" overwrites each last printed text line with the file
message for the next buffer.  Temporarily clear 'shortmess' to avoid that.

Win32: Cannot edit a file starting with # with --remote.  Do escape % and #
when building the ":drop" command.

A comment or | just after a expression-backtick argument was not recognized.
E.g. in :e `="foo"`"comment.

"(" does not stop at an empty sentence (single dot and white space) while ")"
does.  Also breaks "das" on that dot.

When doing "yy" with the cursor on a TAB the ruler could be wrong and "k"
moved the cursor to another column.

When 'commentstring' is '"%s' and there is a double quote in the line a double
quote before the fold marker isn't removed in the text displayed for a  closed
fold.

In Visual mode, when 'bin' and 'eol' set, g CTRL-G counted the last line
break, resulting in "selected 202 of 201 bytes".

Motif: fonts were not used for dialog components. (Marcin Dalecki)

Motif: After using a toolbar button the keyboard focus would be on the toolbar
(Lesstif problem). (Marcin Dalecki)

When using "y<C-V>`x" where mark x is in the first column, the last line was
not included.

Not all test scripts work properly on MS-Windows when checked out from CVS.
Use a Vim command to fix all fileformats to dos before executing the tests.

When using ":new" and the file fits in the window, lines could still be above
the window.  Now remove empty lines instead of keeping the relative position.

Cmdline completion didn't work after ":let var1 var<Tab>".

When using ":startinsert" or ":startreplace" when already in Insert mode
(possible when using CTRL-R =), pressing Esc would directly restart Insert
mode. (Peter Winters)

"2daw" didn't work at end of file if the last word is a single character.

Completion for ":next a'<Tab>" put a backslash before single quote, but it was
not removed when editing a file.  Now halve backslashes in save_patterns().
Also fix expanding a file name with the shell that contains "\'".

When doing "1,6d|put" only "fewer lines" was reported.  Now a following "more
lines" overwrites the message.

Configure could not handle "-Dfoo=long\ long" in the TCL config output.

When searching backwards, using a pattern that matches a newline and uses \zs
after that, didn't find a match.  Could also get a hang or end up in the right
column in the wrong line.

When $LANG is "sl" for slovenian, the slovak menu was used, since "slovak"
starts with "sl".

When 'paste' is set in the GUI the Paste toolbar button doesn't work.  Clear
'paste' when starting the GUI.

A message about a wrong viminfo line included the trailing NL.

When 'paste' is set in the GUI the toolbar button doesn't work in Insert mode.
Use ":exe" in menu.vim to avoid duplicating the commands, instead of using a
mapping.

Treat "mlterm" as an xterm-like terminal. (Seiichi Sato)

":z.4" and ":z=4" didn't work Vi compatible.

When sourcing a file, editing it and sourcing it again, it could appear twice
in ":scriptnames" and get a new <SID>, because the inode has changed.

When $SHELL is set but empty the 'shell' option would be empty.  Don't use an
empty $SHELL value.

A command "w! file" in .vimrc or $EXINIT didn't work.  Now it writes an empty
file.

When a CTRL-F command at the end of the file failed, the cursor was still
moved to the start of the line.  Now it remains where it is.

When using ":s" or "&" to repeat the last substitute and "$" was used to put
the cursor in the last column, put the cursor in the last column again.  This
is Vi compatible.

Vim is not fully POSIX compliant but sticks with traditional Vi behavior.
Added a few flags in 'cpoptions' to behave the POSIX way when wanted.  The
$VIM_POSIX environment variable is checked to set the default.

Appending to a register didn't insert a line break like Vi.  Added the '>'
flag to 'cpoptions' for this.

Using "I" in a line with only blanks appended to the line.  This is not Vi
compatible.  Added the 'H' flag in 'coptions' for this.

When joining multiple lines the cursor would be at the last joint, but Vi
leaves it at the position where "J" would put it.  Added the 'q' flag in
'cpoptions' for this.

Autoindent didn't work for ":insert" and ":append".

Using ":append" in an empty buffer kept the dummy line.  Now it's deleted to
be Vi compatible.

When reading commands from a file and stdout goes to a terminal, would still
request the xterm version.  Vim can't read it, thus the output went to the
shell and caused trouble there.

When redirecting to a register with an invalid name the redirection would
still be done (after an error message).  Now reset "redir_reg". (Yegappan
Lakshmanan)

It was not possible to use a NL after a backslash in Ex mode.  This is
sometimes used to feed multiple lines to a shell command.

When 'cmdheight' is set to 2 in .vimrc and the GUI uses the number of lines
from the terminal we actually get 3 lines for the cmdline in gvim.

When setting $HOME allocated memory would leak.

Win32: bold characters may sometimes write in another character cell.  Use
unicodepdy[] as for UTF-8. (Taro Muraoka)

":w fname" didn't work for files with 'buftype' set to "nofile".

The method used to locate user commands for completion differed from when they
are executed.  Ambiguous command names were not completed properly.

Incremental search may cause a crash when there is a custom statusline that
indirectly invokes ":normal".

Diff mode failed when $DIFF_OPTIONS was set in the environment.  Unset it
before invoking "diff".

Completion didn't work after ":argdo", ":windo" and ":bufdo".  Also for ":set
&l:opt" and ":set &g:opt". (Peter Winters)

When setting 'ttymouse' to "dec" in an xterm that supports the DEC mouse
locator it doesn't work.  Now switch off the mouse before selecting another
mouse model.

When the CursorHold event is triggered and the commands peek for typed
characters the typeahead buffer may be messed up, e.g., when a mouse-up event
is received.  Avoid invoking the autocommands from the function waiting for a
character, let it put K_CURSORHOLD in the input buffer.

Removed the "COUNT" flag from ":argadd", to avoid ":argadd 1*" to be used like
":1argadd *".  Same for ":argdelete" and ":argedit".

Avoid that $LANG is used for the menus when LC_MESSAGES is "en_US".

Added backslashes before dashes in the vim.1 manual page to make the appear as
real dashes. (Pierr Habouzit)

Where "gq" left the cursor depended on the value of 'formatprg'.  Now "gq"
always leaves the cursor at the last line of the formatted text.

When editing a compressed file, such as "changelog.Debian.gz" file, filetype
detection may try to check the contents of the file while it's still
compressed.  Skip setting 'filetype' for compressed files until they have been
decompressed.  Required for patterns that end in a "*".

Starting with an argument "+cmd" or "-S script" causes the cursor the be moved
to the first line.  That breaks a BufReadPost autocommand that uses g`".
Don't move the cursor if it's somewhere past the first line.

"gg=G" while 'modifiable' is off was uninterruptible.

When 'encoding' is "sjis" inserting CTRL-V u d800 a few times causes a crash.
Don't insert a DBCS character with a NUL second byte.

In Insert mode CTRL-O <Home> didn't move the cursor.  Made "ins_at_eol" global
and reset it in nv_home().

Wildcard expansion failed: ":w /tmp/$$.`echo test`".  Don't put quotes around
spaces inside backticks.

After this sequence of commands: Y V p gv: the wrong line is selected.  Now
let "gv" select the text that was put, since the original text is deleted.
This should be the most useful thing to do.

":sleep 100u" sleeps for 100 seconds, not 100 usec as one might expect.  Give
an error message when the argument isn't recognized.

In gui_mch_draw_string() in gui_w32.c "unibuflen" wasn't static, resulting in
reallocating the buffer every time. (Alexei Alexandrov)

When using a Python "atexit" function it was not invoked when Vim exits.  Now
call Py_Finalize() for that. (Ugo Di Girolamo)
This breaks the thread stuff though, fixed by Ugo.

GTK GUI: using a .vimrc with "set cmdheight=2 lines=43" and ":split" right
after startup, the window layout is messed up. (Michael Schaap)  Added
win_new_shellsize() call in gui_init() to fix the topframe size.

Trick to get ...MOUSE_NM not used when there are vertical splits.  Now pass
column -1 for the left most window and add MOUSE_COLOFF for others.  Limits
mouse column to 10000.

searchpair() may hang when the end pattern has "\zs" at the end.  Check that
we find the same position again and advance one character.

When in diff mode and making a change that causes the "changed" highlighting
to disappear or reappear, it was still highlighted in another window.

When a ":next" command fails because the user selects "Abort" at the ATTENTION
prompt the argument index was advanced anyway.

When "~" is in 'iskeyword' the "gd" doesn't work, it's used for the previous
substitute pattern.  Put "\V" in the pattern to avoid that.

Use of sprintf() sometimes didn't check properly for buffer overflow.  Also
when using smsg().  Included code for snprintf() to avoid having to do size
checks where invoking them

":help \=<Tab>" didn't find "sub-replace-\=".  Wild menu for help tags didn't
show backslashes.  ":he :s\=" didn't work.

When reading an errorfile "~/" in a file name was not expanded.

GTK GUI: When adding a scrollbar (e.g. when using ":vsplit") in a script or
removing it the window size may change.  GTK sends us resize events when we
change the window size ourselves, but they may come at an unexpected moment.
Peek for a character to get any window resize events and fix 'columns' and
'lines' to undo this.

When using the GTK plug mechanism, resizing and focus was not working
properly. (Neil Bird)

After deleting files from the argument list a session file generated with
":mksession" may contain invalid ":next" commands.

When 'shortmess' is empty and 'keymap' set to accents, in Insert mode CTRL-N
may cause the hit-enter prompt.  Typing 'a then didn't result in the accented
character.  Put the character typed at the prompt back in the typeahead buffer
so that mapping is done in the right mode.

setbufvar() and setwinvar() did not give error messages.

It was possible to set a variable with an illegal name, e.g. with setbufvar().
It was possible to define a function with illegal name, e.t. ":func F{-1}()"

CTRL-W F and "gf" didn't use the same method to get the file name.

When reporting a conversion error the line number of the last error could be
given.  Now report the first encountered error.

When using ":e ++enc=name file" and iconv() was used for conversion an error
caused a fall-back to no conversion.  Now replace a character with '?' and
continue.

When opening a new buffer the local value of 'bomb' was not initialized from
the global value.

Win32: When using the "Edit with Vim" entry the file name was limited to about
200 characters.

When using command line completion for ":e *foo" and the file "+foo" exists
the resulting command ":e +foo" doesn't work.  Now insert a backslash: ":e
\+foo".

When the translation of "-- More --" was not 10 characters long the following
message would be in the wrong position.

At the more-prompt the last character in the last line wasn't drawn.

When deleting non-existing text while 'virtualedit' is set the '[ and '] marks
were not set.

Win32: Could not use "**/" in 'path', it had to be "**\".

The search pattern "\n" did not match at the end of the last line.

Searching for a pattern backwards, starting on the NUL at the end of the line
and 'encoding' is "utf-8" would match the pattern just before it incorrectly.
Affected searchpair('/\*', '', '\*/').

For the Find/Replace dialog it was possible that not finding the text resulted
in an error message while redrawing, which cleared the syntax highlighting
while it was being used, resulting in a crash.  Now don't clear syntax
highlighting, disable it with b_syn_error.

Win32: Combining UTF-8 characters were drawn on the previous character.
Could be noticed with a Thai font.

Output of ":function" could leave some of the typed text behind. (Yegappan
Lakshmanan)

When the command line history has only a few lines the command line window
would be opened with these lines above the first window line.

When using a command line window for search strings ":qa" would result in
searching for "qa" instead of quitting all windows.

GUI: When scrolling with the scrollbar and there is a line that doesn't fit
redrawing may fail.  Make sure w_skipcol is valid before redrawing.

Limit the values of 'columns' and 'lines' to avoid an overflow in Rows *
Columns.  Fixed bad effects when running out of memory (command line would be
reversed, ":qa!" resulted in ":!aq").

Motif: "gvim -iconic" opened the window anyway.  (David Harrison)

There is a tiny chance that a symlink gets created between checking for an
existing file and creating a file.  Use the O_NOFOLLOW for open() if it's
available.

In an empty line "ix<CTRL-O>0" moved the cursor to after the line instead of
sticking to the first column.

When using ":wq" and a BufWriteCmd autocmd uses inputsecret() the text was
echoed anyway.  Set terminal to raw mode in getcmdline().

Unix: ":w a;b~c" caused an error in expanding wildcards.

When appending to a file with ":w >>fname" in a buffer without a name, causing
the buffer to use "fname", the modified flag was reset.

When appending to the current file the "not edited" flag would be reset.
":w" would overwrite the file accidentally.

Unix: When filtering text with an external command Vim would still read input,
causing text typed for the command (e.g., a password) to be eaten and echoed.
Don't read input when the terminal is in cooked mode.

The Cygwin version of xxd used CR/LF line separators. (Corinna Vinschen)

Unix: When filtering text through a shell command some resulting text may be
dropped.  Now after detecting that the child has exited try reading some more
of its output.

When inside input(), using "CTRL-R =" and the expression throws an exception
the command line was not abandoned but it wasn't used either.  Now abandon
typing the command line.

'delcombine' was also used in Visual and Select mode and for commands like
"cl".  That was illogical and has been disabled.

When recording while a CursorHold autocommand was defined special keys would
appear in the register.  Now the CursorHold event is not triggered while
recording.

Unix: the src/configure script used ${srcdir-.}, not all shells understand
that.  Use ${srcdir:-.} instead.

When editing file "a" which is a symlink to file "b" that doesn't exist,
writing file "a" to create "b" and then ":split b" resulted in two buffers on
the same file with two different swapfile names.  Now set the inode in the
buffer when creating a new file.

When 'esckeys' is not set don't send the xterm code to request the version
string, because it may cause trouble in Insert mode.

When evaluating an expression for CTRL-R = on the command line it was possible
to call a function that opens a new window, resulting in errors for
incremental search, and many other nasty things were possible.  Now use the
|textlock| to disallow changing the buffer or jumping to another window
to protect from unexpected behavior.  Same for CTRL-\ e.

"d(" deleted the character under the cursor, while the documentation specified
an exclusive motion.  Vi also doesn't delete the character under the cursor.

Shift-Insert in Insert mode could put the cursor before the last character
when it just fits in the window.  In coladvance() don't stop at the window
edge when filling with spaces and when in Insert mode.  In mswin.vim avoid
getting a beep from the "l" command.

Win32 GUI: When Alt-F4 is used to close the window and Cancel is selected in
the dialog then Vim would insert <M-F4> in the text.  Now it's ignored.

When ":silent! {cmd}" caused the swap file dialog, which isn't displayed,
there would still be a hit-enter prompt.

Requesting the termresponse (|t_RV|) early may cause problems with "-c"
arguments that invoke an external command or even "-c quit".  Postpone it
until after executing "-c" arguments.

When typing in Insert mode so that a new line is started, using CTRL-G u to
break undo and start a new change, then joining the lines with <BS> caused
undo info to be missing.  Now reset the insertion start point.

Syntax HL: When a region start match has a matchgroup and an offset that
happens to be after the end of the line then it continued in the next line and
stopped at the region end match, making the region continue after that.
Now check for the column being past the end of the line in syn_add_end_off().

When changing a file, setting 'swapfile' off and then on again, making another
change and killing Vim, then some blocks may be missing from the swapfile.
When 'swapfile' is switched back on mark all blocks in the swapfile as dirty.
Added mf_set_dirty().

Expanding wildcards in a command like ":e aap;<>!" didn't work.  Put
backslashes before characters that are special to the shell. (Adri Verhoef)

A CursorHold autocommand would cause a message to be cleared.  Don't show the
special key for the event for 'showcmd'.

When expanding a file name for a shell command, as in "!cmd foo<Tab>" or ":r
!cmd foo<Tab>" also escape characters that are special for the shell:
"!;&()<>".

When the name of the buffer was set by a ":r fname" command |cpo-f| no
autocommands were triggered to notify about the change in the buffer list.

In the quickfix buffer 'bufhidden' was set to "delete", which caused closing
the quickfix window to leave an unlisted "No Name" buffer behind every time.

Win32: when using two screens of different size, setting 'lines' to a large
value didn't fill the whole screen. (SungHyun Nam)

Win32 installer: The generated _vimrc contained an absolute path to diff.exe.
After upgrading it becomes invalid.  Now use $VIMRUNTIME instead.

The command line was cleared to often when 'showmode' was set and ":silent
normal vy" was used.  Don't clear the command line unless the mode was
actually displayed.  Added the "mode_displayed" variable.

The "load session" toolbar item could not handle a space or other special
characters in v:this_session.

":set sta ts=8 sw=4 sts=2" deleted 4 spaces halfway a line instead of 2.

In a multi-byte file the foldmarker could be recognized in the trail byte.
(Taro Muraoka)

Pasting with CTRL-V and menu didn't work properly when some commands are
mapped.  Use ":normal!" instead of ":normal". (Tony Apuzzo)

Crashed when expanding a file name argument in backticks.

In some situations the menu and scrollbar didn't work, when the value contains
a CSI byte. (Yukihiro Nakadaira)

GTK GUI: When drawing the balloon focus changes and we might get a key release
event that removed the balloon again.  Ignore the key release event.

'titleold' was included in ":mkexrc" and ":mksession" files.

":set background&" didn't use the same logic as was used when starting up.

When "umask" is set such that nothing is writable then the viminfo file would
be written without write permission. (Julian Bridle)

Motif: In diff mode dragging one scrollbar didn't update the scrollbar of the
other diff'ed window.

When editing in an xterm with a different number of colors than expected the
screen would be cleared and redrawn, causing the message about the edited file
to be cleared.  Now set "keep_msg" to redraw the last message.

For a color terminal: When the Normal HL uses bold, possibly to make the color
lighter, and another HL group specifies a color it might become light as well.
Now reset bold if a HL group doesn't specify bold itself.

When using 256 color xterm the color 255 would show up as color 0.  Use a
short instead of a char to store the color number.

ml_get errors when searching for "\n\zs" in an empty file.

When selecting a block and using "$" to select until the end of every line and
not highlighting the character under the cursor the first character of the
block could be unhighlighted.

When counting words for the Visual block area and using "$" to select until
the end of every line only up to the length of the last line was counted.

"dip" in trailing empty lines left one empty line behind.

The script ID was only remembered globally for each option. When a buffer- or
window-local option was set the same "last set" location was changed for all
buffers and windows.  Now remember the script ID for each local option
separately.

GUI: The "Replace All" button didn't handle backslashes in the replacement in
the same way as "Replace".  Escape backslashes so that they are taken
literally.

When using Select mode from Insert mode and typing a key, causing lines to be
deleted and a message displayed, delayed the effect of inserting the key.
Now overwrite the message without delay.

When 'whichwrap' includes "l" then "dl" and "yl" on a single letter line
worked differently.  Now recognize all operators when using "l" at the end of
a line.

GTK GUI: when the font selector returned a font name with a comma in it then
it would be handled like two font names.  Now put a backslash before the
comma.

MS-DOS, Win32: When 'encoding' defaults to "latin1" then the value for
'iskeyword' was still for CPxxx.  And when 'nocompatible' was set 'isprint'
would also be the wrong value.

When a command was defined not to take arguments and no '|' no warning message
would be given for using a '|'.  Also with ":loadkeymap".

Motif: When using a fontset and 'encoding' is "utf-8" and sizeof(wchar_t) !=
sizeof(XChar2b) then display was wrong. (Yukihiro Nakadaira)

":all" always set the current window to the first window, even when it
contains a buffer that is not in the argument list (can't be closed because it
is modified).  Now go to the window that has the first item of the argument
list.

GUI: To avoid left-over pixels from bold text all characters after a character
with special attributes were redrawn.  Now only do this for characters that
actually are bold.  Speeds up displaying considerably.

When only highlighting changes and the text is scrolled at the same time
everything is redraw instead of using a scroll and updating the changed text.
E.g., when using ":match" to highlight a paren that the cursor landed on.
Added SOME_VALID: Redraw the whole window but also try to scroll to minimize
redrawing.

Win32: When using Korean IME making it active didn't work properly. (Moon,
Yu-sung, 2005 March 21)

Ruby interface: when inserting/deleting lines display wasn't updated. (Ryan
Paul)

--- fixes since Vim 7.0b ---

Getting the GCC version in configure didn't work with Solaris sed.  First
strip any "darwin." and then get the version number.

The "autoload" directory was missing from the self-installing executable for
MS-Windows.

The MS-Windows install program would find "vimtutor.bat" in the install
directory.  After changing to "c:" also change to "\" to avoid looking in the
install directory.

To make the 16 bit DOS version compile exclude not used highlight
initializations and build a tiny instead of small version.

finddir() and findfile() accept a negative count and return a List then.

The Python indent file contained a few debugging statements, removed.

Expanding {} for a function name, resulting in a name starting with "s:" was
not handled correctly.

Spelling: renamed COMPOUNDMAX to COMPOUNDWORDMAX.  Added several items to be
able to handle the new Hungarian dictionary.

Mac: Default to building for the current platform only, that is much faster
than building a universal binary.  Also, using Perl/Python/etc. only works for
the current platform.

The time on undo messages disappeared for someone.  Using %T for strftime()
apparently doesn't work everywhere.  Use %H:%M:%S instead.

Typing BS at the "z=" prompt removed the prompt.

--- fixes and changes since Vim 7.0c ---

When jumping to another tab page the Vim window size was always set, even when
nothing in the layout changed.

Win32 GUI tab pages line wasn't always enabled.  Do a proper check for the
compiler version.

Win32: When switching between tab pages the Vim window was moved when part of
it was outside of the screen.  Now only do that in the direction of a size
change.

Win32: added menu to GUI tab pages line. (Yegappan Lakshmanan)

Mac: Added document icons. (Benji Fisher)

Insert mode completion: Using Enter to accept the current match causes
confusion.  Use CTRL-Y instead.  Also, use CTRL-E to go back to the typed
text.

GUI: When there are left and right scrollbars, ":tabedit" kept them instead of
using the one that isn't needed.

Using "gP" to replace al the text could leave the cursor below the last line,
causing ml_get errors.

When 'cursorline' is set don't use the highlighting when Visual mode is
active, otherwise it's difficult to see the selected area.

The matchparen plugin restricts the search to 100 lines, to avoid a long delay
when there are closed folds.

Sometimes using CTRL-X s to list spelling suggestions used text from another
line.

Win32: Set the default for 'isprint' back to the wrong default "@,~-255",
because many people use Windows-1252 while 'encoding' is "latin1".

GTK: Added a workaround for gvim crashing when used over an untrusted ssh
link, caused by GTK doing something nasty. (Ed Catmur)

Win32: The font used for the tab page labels is too big.  Use the system menu
font. (George Reilly)

Win32: Adjusting the window position and size to keep it on the screen didn't
work properly when the taskbar is on the left or top of the screen.

The installman.sh and installml.sh scripts use ${10}, that didn't work with
old shells.  And use "test -f" instead of "test -e".

Win32: When 'encoding' was set in the vimrc then a directory argument for diff
mode didn't work.

GUI: at the inputlist() prompt the cursorshape was adjusted as if the windows
were still at their old position.

The parenmatch plugin didn't remember the highlighting per window.

Using ":bd" for a buffer that's the current window in another tab page caused
a crash.

For a new tab page the 'scroll' option wasn't set to a good default.

Using an end offset for a search "/pat/e" didn't work properly for multi-byte
text. (Yukihiro Nakadaira)

":s/\n/,/" doubled the text when used on the last line.

When "search" is in 'foldopen' "[s" and "]s" now open folds.

When using a numbered function "dict" can be omitted, but "self" didn't work
then.  Always add FC_DICT to the function flags when it's part of a
dictionary.

When "--remote-tab" executes locally it left an empty tab page.

"gvim -u NONE", ":set cursorcolumn", "C" in the second line didn't update
text.  Do update further lines even though the "$" is displayed.

VMS: Support GTK better, also enable +clientserver. (Zoltan Arpadffy)

When highlighting of statusline or tabline is changed there was no redraw to
show the effect.

Mac: Added "CFBundleIdentifier" to infplist.xml.

Added tabpage-local variables t:var.

Win32: Added double-click in tab pages line creates new tab. (Yegappan
Lakshmanan)

Motif: Added GUI tab pages line. (Yegappan Lakshmanan)

Fixed crash when 'lines' was set to 1000 in a modeline.

When init_spellfile() finds a writable directory in 'runtimepath' but it
doesn't contain a "spell" directory, create one.

Win32: executable() also finds "xxd" in the directory where Vim was started,
but "!xxd" doesn't work.  Append the Vim starting directory to $PATH.

The tab page labels are shortened, directory names are reduced to a single
letter by default.  Added the pathshorten() function to allow a user to do the
same.

":saveas" now resets 'readonly' if the file was successfully written.

Set $MYVIMRC file to the first found .vimrc file.
Set $MYGVIMRC file to the first found .gvimrc file.
Added menu item "Startup Settings" that edits the $MYVIMRC file

Added matcharg().

Error message E745 appeared twice.  Renamed one to E786.

Fixed crash when using "au BufRead * Sexplore" and doing ":help".  Was wiping
out a buffer that's still in a window.

":hardcopy" resulted in an error message when 'encoding' is "utf-8" and
'printencoding' is empty.  Now it assumes latin1. (Mike Williams)

The check for the toolbar feature for Motif, depending on certain included
files, wasn't detailed enough, causing building to fail in gui_xmebw.c.

Using CTRL-E in Insert mode completion after CTRL-P inserted the first match
instead of the original text.

When displaying a UTF-8 character with a zero lower byte Vim might think the
previous character is double-wide.

The "nbsp" item of 'listchars' didn't work when 'encoding' was utf-8.

Motif: when Xm/xpm.h is missing gui_xmebw.c would not compile.
HAVE_XM_UNHIGHLIGHTT_H was missing a T.

Mac: Moved the .icns files into src/os_mac_rsrc, so that they can all be
copied at once.  Adjusted the Info.plist file for three icons.

When Visual mode is active while switching to another tabpage could get ml_get
errors.

When 'list' is set, 'nowrap' the $ in the first column caused 'cursorcolumn'
to move to the right.

When a line wraps, 'cursorcolumn' was never displayed past the end of the
line.

'autochdir' was only available when compiled with NetBeans and GUI.  Now it's
a separate feature, also available in the "big" version.

Added CTRL-W gf: open file under cursor in new tab page.

When using the menu in the tab pages line, "New Tab" opens the new tab before
where the click was.  Beyond the labels the new tab appears at the end instead
of after the current tab page.

Inside a mapping with an expression getchar() could not be used.

When vgetc is used recursively vgetc_busy protects it from being used
recursively.  But after a ":normal" command the protection was reset.

":s/a/b/n" didn't work when 'modifiable' was off.

When $VIMRUNTIME includes a multi-byte character then rgb.txt could not be
found. (Yukihiro Nakadaira)

":mkspell" didn't work correctly for non-ASCII affix flags when conversion is
needed on the spell file.

glob('/dir/\$ABC/*') didn't work.

When using several tab pages and changing 'cmdheight' the display could become
messed up.  Now store the value of 'cmdheight' separately for each tab page.

The user of the Enter key while the popup menu is visible was still confusing.
Now use Enter to select the match after using a cursor key.

Added "usetab" to 'switchbuf'.


--- fixes and changes since Vim 7.0d ---

Added CTRL-W T: move a window to a new tab page.

Using CTRL-X s in Insert mode to complete spelling suggestions and using BS
deleted characters before the bad word.

A few small fixes for the VMS makefile. (Zoltan Arpadffy)

With a window of 91 lines 45 cols, ":vsp" scrolled the window.  Copy w_wrow
when splitting a window and skip setting the height when it's already at the
right value.

Using <silent> in a mapping with a shell command and the GUI caused redraw
to use wrong attributes.

Win32: Using MSVC 4.1 for install.exe resulted in the start menu items to be
created in the administrator directory instead of "All Users".  Define the
CSIDL_ items if they are missing.

Motif: The GUI tabline did not use the space above the right scrollbar.  Work
around a bug in the Motif library. (Yegappan Lakshmanan)

The extra files for XML Omni completion are now also installed.
|xml-omni-datafile|

GTK GUI: when 'm' is missing from 'guioptions' during startup and pressing
<F10> GTK produced error messages.  Now do create the menu but disable it just
after the first gui_mch_update().

":mkspell" doesn't work well with the Hungarian dictionary from the Hunspell
project.  Back to the Myspell dictionary.

In help files hide the | used around tags.

Renamed pycomplete to pythoncomplete.

Added "tabpages" to 'sessionoptions'.

When 'guitablabel' is set the effect wasn't visible right away.

Fixed a few 'cindent' errors.

When completing menu names, e.g., after ":emenu", don't sort the entries but
keep them in the original order.

Fixed a crash when editing a directory in diff mode.  Don't trigger
autocommands when executing the diff command.

Getting a keystroke could get stuck if 'encoding' is a multi-byte encoding and
typing a special key.

When 'foldignore' is set the folds were not updated right away.

When a list is indexed with [a : b] and b was greater than the length an error
message was given.  Now silently truncate the result.

When using BS during Insert mode completion go back to the original text, so
that CTRL-N selects the first matching entry.

Added the 'M' flag to 'cinoptions'.

Win32: Make the "gvim --help" window appear in the middle of the screen
instead of at an arbitrary position. (Randall W. Morris)

Added gettabwinvar() and settabwinvar().

Command line completion: pressing <Tab> after ":e /usr/*" expands the whole
tree, because it becomes ":e /usr/**".  Don't add a star if there already is
one.

Added grey10 to grey90 to all GUIs, so that they can all be used for
initializing highlighting.  Use grey40 for CursorColumn and CursorLine when
'background' is "dark".

When reading a file and using iconv for conversion, an incomplete byte
sequence at the end caused problems. (Yukihiro Nakadaira)


--- fixes and changes since Vim 7.0e ---

Default color for MatchParen when 'background' is "dark" is now DarkCyan.

":syn off" had to be used twice in a file that sets 'syntax' in a modeline.
(Michael Geddes)

When using ":vsp" or ":sp" the available space wasn't used equally between
windows. (Servatius Brandt)

Expanding <cWORD> on a trailing blank resulted in the first word in the line
if 'encoding' is a multi-byte encoding.

Spell checking: spellbadword() didn't see a missing capital in the first word
of a line.  Popup menu now only suggest the capitalized word when appropriate.

When using whole line completion CTRL-L moves through the matches but it
didn't work when at the original text.

When completion finds the longest match, don't go to the first match but stick
at the original text, so that CTRL-N selects the first one.

Recognize "zsh-beta" like "zsh" for setting the 'shellpipe' default. (James
Vega)

When using ":map <expr>" and the expression results in something with a
special byte (NUL or CSI) then it didn't work properly.  Now escape special
bytes.

The default Visual highlighting for a color xterm with 8 colors was a magenta
background, which made magenta text disappear.  Now use reverse in this
specific situation.

After completing the longest match "." didn't insert the same text.  Repeating
also didn't work correctly for multi-byte text.

When using Insert mode completion and BS the whole word that was completed
would result in all possible matches.  Now stop completion.  Also fixes that
for spell completion the previous word was deleted.

GTK: When 'encoding' is "latin1" and using non-ASCII characters in a file name
the tab page label was wrong and an error message would be given.

The taglist() function could hang on a tags line with a non-ASCII character.

Win32: When 'encoding' differs from the system encoding tab page labels with
non-ASCII characters looked wrong. (Yegappan Lakshmanan)

Motif: building failed when Xm/Notebook.h doesn't exist.  Added a configure
check, disable GUI tabline when it's missing.

Mac: When compiled without multi-byte feature the clipboard didn't work.

It was possible to switch to another tab page when the cmdline window is open.

Completion could hang when 'lines' is 6 and a preview window was opened.

Added CTRL-W gF: open file under cursor in new tab page and jump to the line
number following the file name.
Added 'guitabtooltip'.  Implemented for Win32 (Yegappan Lakshmanan).

Added "throw" to 'debug' option: throw an exception for error messages even
whey they would otherwise be ignored.

When 'keymap' is set and a line contains an invalid entry could get a "No
mapping found" warning instead of a proper error message.

Motif: default to using XpmAttributes instead of XpmAttributes_21.

A few more changes for 64 bit MS-Windows. (George Reilly)

Got ml_get errors when doing "o" and selecting in other window where there are
less line shorter than the cursor position in the other window.  ins_mouse()
was using position in wrong window.

Win32 GUI: Crash when giving a lot of messages during startup.  Allocate twice
as much memory for the dialog template.

Fixed a few leaks and wrong pointer use reported by coverity.

When showing menus the mode character was sometimes wrong.

Added feedkeys(). (Yakov Lerner)

Made matchlist() always return all submatches.

Moved triggering QuickFixCmdPost to before jumping to the first location.

Mac: Added the 'macatsui' option as a temporary work around for text drawing
problems.

Line completion on "/**" gave error messages when scanning an unloaded buffer.

--- fixes and changes since Vim 7.0f ---

Win32: The height of the tab page labels is now adjusted to the font height.
(Yegappan Lakshmanan)

Win32: selecting the tab label was off by one. (Yegappan Lakshmanan)

Added tooltips for Motif and GTK tab page labels. (Yegappan Lakshmanan)

When 'encoding' is "utf-8" then ":help spell" would report an illegal byte and
the file was not converted from latin1 to utf-8.  Now retry with latin1 if
reading the file as utf-8 results in illegal bytes.

Escape the argument of feedkeys() before putting it in the typeahead buffer.
(Yukihiro Nakadaira)

Added the v:char variable for evaluating 'formatexpr'. (Yukihiro Nakadaira)

With 8 colors Search highlighting combined with Statement highlighted text
made the text disappear.

VMS: avoid warnings for redefining MAX and MIN. (Zoltan Arpadffy)

When 'virtualedit' includes "onemore", stopping Visual selection would still
move the cursor left.

Prevent that using CTRL-R = in Insert mode can start Visual mode.

Fixed a crash that occurred when in Insert mode with completion active and a
mapping caused edit() to be called recursively.

When using CTRL-O in Insert mode just after the last character while
'virtualedit' is "all", then typing CR moved the last character to the next
line.  Call coladvance() before starting the new line.

When using |:shell| ignore clicks on the tab page labels.  Also when using the
command line window.

When 'eventignore' is "all" then adding more to ignoring some events, e.g.,
for ":vimgrep", would actually trigger more events.

Win32: When a running Vim uses server name GVIM1 then "gvim --remote fname"
didn't find it.  When looking for a server name that doesn't end in a digit
and it is not found then use another server with that name and a number (just
like on Unix).

When using "double" in 'spellsuggest' when the language doesn't support sound
folding resulted in too many suggestions.

Win32: Dropping a shortcut on the Vim icon didn't edit the referred file like
editing it in another way would.  Use fname_expand() in buf_set_name() instead
of simply make the file name a full path.

Using feedkeys() could cause Vim to hang.

When closing another tab page from the tabline menu in Insert mode the tabline
was not updated right away.

The syntax menu didn't work in compatible mode.

After using ":tag id" twice with the same "id", ":ts" and then ":pop" a ":ts"
reported no matching tag.  Clear the cached tag name.

In Insert mode the matchparen plugin highlighted the wrong paren when there is
a string just next to a paren.

GTK: After opening a new tab page the text was sometimes not drawn correctly.
Flush output and catch up with events when updating the tab page labels.

In the GUI, using CTRL-W q to close the last window of a tab page could cause
a crash.

GTK: The tab pages line menu was not converted from 'encoding' to utf-8.

Typing a multi-byte character or a special key at the hit-enter prompt did not
work.

When 'virtualedit' contains "onemore" CTRL-O in Insert mode still moved the
cursor left when it was after the end of the line, even though it's allowed to
be there.

Added test for using tab pages.

towupper() and towlower() were not used, because of checking for
__STDC__ISO_10646__ instead of __STDC_ISO_10646__. (sertacyildiz)

For ":map <expr>" forbid changing the text, jumping to another buffer and
using ":normal" to avoid nasty side effects.

--- fixes and changes since Vim 7.0g ---

Compilation error on HP-UX, use of "dlerr" must be inside a #ifdef.
(Gary Johnson)

Report +reltime feature in ":version" output.

The tar and zip plugins detect failure to get the contents of the archive and
edit the file as-is.

When the result of 'guitablabel' is empty fall back to the default label.

Fixed crash when using ":insert" in a while loop and missing "endwhile".

"gt" and other commands could move to another window when |textlock| active
and when the command line window was open.

Spell checking a file with syntax highlighting and a bad word at the end of
the line is ignored could make "]s" hang.

Mac: inputdialog() didn't work when compiled with big features.

Interrupting ":vimgrep" while it is busy loading a file left a modified and
hidden buffer behind.  Use enter_cleanup() and leave_cleanup() around
wipe_buffer().

When making 'keymap' empty the b:keymap_name variable wasn't deleted.

Using CTRL-N that searches a long time, pressing space to interrupt the
searching and accept the first match, the popup menu was still displayed
briefly.

When setting the Vim window height with -geometry the 'window' option could be
at a value that makes CTRL-F behave differently.

When opening a quickfix window in two tabs they used different buffers,
causing redrawing problems later.  Now use the same buffer for all quickfix
windows. (Yegappan Lakshmanan)

When 'mousefocus' is set moving the mouse to the text tab pages line would
move focus to the first window.  Also, the mouse pointer would jump to the
active window.

In a session file, when an empty buffer is wiped out, do this silently.

When one window has the cursor on the last line and another window is resized
to make that window smaller, the cursor line could go below the displayed
lines.  In win_new_height() subtract one from the available space.
Also avoid that using "~" lines makes the window scroll down.

Mac: When sourcing the "macmap.vim" script and then finding a .vimrc file the
'cpo' option isn't set properly, because it was already set and restored.
Added the <special> argument to ":map", so that 'cpo' doesn't need to be
changed to be able to use <> notation.  Also do this for ":menu" for
consistency.

When using "/encoding=abc" in a spell word list, only "bc" was used.

When 'encoding' and 'printencoding' were both "utf-8" then ":hardcopy" didn't
work. (Mike Williams)

Mac: When building with "--disable-gui" the install directory would still be
"/Applications" and Vim.app would be installed.  Now install in /usr/local as
usual for a console application.

GUI: when doing completion and there is one match and still searching for
another, the cursor was displayed at the end of the line instead of after the
match.  Now show the cursor after the match while still searching for matches.

GUI: The mouse shape changed on the statusline even when 'mouse' was empty and
they can't be dragged..

GTK2: Selecting a button in the confirm() dialog with Tab or cursor keys and
hitting Enter didn't select that button.  Removed GTK 1 specific code. (Neil
Bird)

When evaluating 'balloonexpr' takes a long time it could be called
recursively, which could cause a crash.

exists() could not be used to detect whether ":2match" is supported.  Added a
check for it specifically.

GTK1: Tab page labels didn't work. (Yegappan Lakshmanan)

Insert mode completion: When finding matches use 'ignorecase', but when adding
matches to the list don't use it, so that all words with different case are
added, "word", "Word" and "WORD".

When 'cursorline' and 'hlsearch' are set and the search pattern is "x\n"
the rest of the line was highlighted as a match.

Cursor moved while evaluating 'balloonexpr' that invokes ":isearch" and
redirects the output.  Don't move the cursor to the command line if msg_silent
is set.

exists() ignored text after a function name and option name, which could
result in false positives.

exists() ignored characters after the recognized word, which can be wrong when
using a name with non-keyword characters.  Specifically, these calls no longer
allow characters after the name: exists('*funcname') exists('*funcname(...')
exists('&option') exists(':cmd') exists('g:name') exists('g:name[n]')
exists('g:name.n')

Trigger the TabEnter autocommand only after entering the current window of the
tab page, otherwise the commands are executed with an invalid current window.

Win32: When using two monitors and Vim is on the second monitor, changing the
width of the Vim window could make it jump to the first monitor.

When scrolling back at the more prompt and the quitting a line of text would
be left behind when 'cmdheight' is 2 or more.

Fixed a few things for Insert mode completion, especially when typing BS,
CTRL-N or a printable character while still searching for matches.


==============================================================================
VERSION 7.1						*version-7.1*

This section is about improvements made between version 7.0 and 7.1.

This is a bug-fix release, there are no fancy new features.


Changed							*changed-7.1*
-------

Added setting 'mouse' in vimrc_example.vim.

When building with MZscheme also look for include files in the "plt"
subdirectory.  That's where they are for FreeBSD.

The Ruby interface module is now called "Vim" instead of "VIM".  But "VIM" is
an alias, so it's backwards compatible. (Tim Pope)


Added							*added-7.1*
-----

New syntax files:
	/var/log/messages (Yakov Lerner)
	Autohotkey (Nikolai Weibull)
	AutoIt v3 (Jared Breland)
	Bazaar commit file "bzr". (Dmitry Vasiliev)
	Cdrdao TOC (Nikolai Weibull)
	Cmusrc (Nikolai Weibull)
	Conary recipe (rPath Inc)
	Framescript (Nikolai Weibull)
	FreeBasic (Mark Manning)
	Hamster (David Fishburn)
	IBasic (Mark Manning)
	Initng (Elan Ruusamae)
	Ldapconf (Nikolai Weibull)
	Litestep (Nikolai Weibull)
	Privoxy actions file (Doug Kearns)
	Streaming Descriptors "sd" (Puria Nafisi Azizi)

New tutor files:
	Czech (Lubos Turek)
	Hungarian (Arpad Horvath)
	Turkish (Serkan kkk)
	utf-8 version of Greek tutor.
	utf-8 version of Russian tutor.
	utf-8 version of Slowak tutor.

New filetype plugins:
	Bst (Tim Pope)
	Cobol (Tim Pope)
	Fvwm (Gautam Iyer)
	Hamster (David Fishburn)
	Django HTML template (Dave Hodder)

New indent files:
	Bst (Tim Pope)
	Cobol (Tim Pope)
	Hamster (David Fishburn)
	Django HTML template (Dave Hodder)
	Javascript
	JSP (David Fishburn)

New keymap files:
	Bulgarian (Boyko Bantchev)
	Mongolian (Natsagdorj Shagdar)
	Thaana (Ibrahim Fayaz)
	Vietnamese (Samuel Thibault)

Other new runtime files:
	Ada support files. (Neil Bird, Martin Krischik)
	Slovenian menu translations (Mojca Miklavec)
	Mono C# compiler plugin (Jarek Sobiecki)


Fixed							*fixed-7.1*
-----

Could not build the Win32s version.  Added a few structure definitions in
src/gui_w32.c


Patch 7.0.001
Problem:    ":set spellsuggest+=10" does not work. (Suresh Govindachar)
Solution:   Add P_COMMA to the 'spellsuggest' flags.
Files:	    src/option.c

Patch 7.0.002
Problem:    C omni completion has a problem with tags files with a path
	    containing "#" or "%".
Solution:   Escape these characters. (Sebastian Baberowski)
Files:	    runtime/autoload/ccomplete.vim

Patch 7.0.003
Problem:    GUI: clicking in the lower part of a label in the tab pages line
	    while 'mousefocus' is set may warp the mouse pointer. (Robert
	    Webb)
Solution:   Check for a negative mouse position.
Files:	    src/gui.c

Patch 7.0.004
Problem:    Compiler warning for debug_saved used before set. (Todd Blumer)
Solution:   Remove the "else" for calling save_dbg_stuff().
Files:	    src/ex_docmd.c

Patch 7.0.005 (extra)
Problem:    Win32: The installer doesn't remove the "autoload" and "spell"
	    directories. (David Fishburn)
Solution:   Add the directories to the list to be removed.
Files:	    nsis/gvim.nsi

Patch 7.0.006
Problem:    Mac: "make shadow" doesn't make a link for infplist.xml. (Axel
	    Kielhorn)
Solution:   Make the link.
Files:	    src/Makefile

Patch 7.0.007
Problem:    AIX: compiling fails for message.c. (Ruediger Hornig)
Solution:   Move the #if outside of memchr().
Files:	    src/message.c

Patch 7.0.008
Problem:    Can't call a function that uses both <SID> and {expr}. (Thomas)
Solution:   Check both the expanded and unexpanded name for <SID>.
Files:	    src/eval.c

Patch 7.0.009
Problem:    ml_get errors with both 'sidescroll' and 'spell' set.
Solution:   Use ml_get_buf() instead of ml_get(), get the line from the right
	    buffer, not the current one.
Files:	    src/spell.c

Patch 7.0.010
Problem:    The spellfile plugin required typing login name and password.
Solution:   Use "anonymous" and "vim7user" by default.  No need to setup a
	    .netrc file.
Files:	    runtime/autoload/spellfile.vim

Patch 7.0.011
Problem:    Can't compile without the folding and with the eval feature.
Solution:   Add an #ifdef. (Vallimar)
Files:	    src/option.c

Patch 7.0.012
Problem:    Using the matchparen plugin, moving the cursor in Insert mode to a
	    shorter line that ends in a brace, changes the preferred column
Solution:   Use winsaveview()/winrestview() instead of getpos()/setpos().
Files:	    runtime/plugin/matchparen.vim

Patch 7.0.013
Problem:    Insert mode completion: using CTRL-L to add an extra character
	    also deselects the current match, making it impossible to use
	    CTRL-L a second time.
Solution:   Keep the current match.  Also make CTRL-L work at the original
	    text, using the first displayed match.
Files:	    src/edit.c

Patch 7.0.014
Problem:    Compiling gui_xmebw.c fails on Dec Alpha Tru64. (Rolfe)
Solution:   Disable some code for Motif 1.2 and older.
Files:	    src/gui_xmebw.c

Patch 7.0.015
Problem:    Athena: compilation problems with modern compiler.
Solution:   Avoid type casts for lvalue. (Alexey Froloff)
Files:	    src/gui_at_fs.c

Patch 7.0.016
Problem:    Printing doesn't work for "dec-mcs" encoding.
Solution:   Add "dec-mcs", "mac-roman" and "hp-roman8" to the list of
	    recognized 8-bit encodings. (Mike Williams)
Files:	    src/mbyte.c

Patch 7.0.017 (after 7.0.014)
Problem:    Linking gui_xmebw.c fails on Dec Alpha Tru64. (Rolfe)
Solution:   Adjust defines for Motif 1.2 and older.
Files:	    src/gui_xmebw.c

Patch 7.0.018
Problem:    VMS: plugins are not loaded on startup.
Solution:   Remove "**" from the path. (Zoltan Arpadffy)
Files:	    src/main.c

Patch 7.0.019
Problem:    Repeating "VjA789" may cause a crash. (James Vega)
Solution:   Check the cursor column after moving it to another line.
Files:	    src/ops.c

Patch 7.0.020
Problem:    Crash when using 'mousefocus'. (William Fulton)
Solution:   Make buffer for mouse coordinates 2 bytes longer. (Juergen Weigert)
Files:	    src/gui.c

Patch 7.0.021
Problem:    Crash when using "\\[" and "\\]" in 'errorformat'. (Marc Weber)
Solution:   Check for valid submatches after matching the pattern.
Files:	    src/quickfix.c

Patch 7.0.022
Problem:    Using buffer.append() in Ruby may append the line to the wrong
	    buffer. (Alex Norman)
Solution:   Properly switch to the buffer to do the appending.  Also for
	    buffer.delete() and setting a buffer line.
Files:	    src/if_ruby.c

Patch 7.0.023
Problem:    Crash when doing spell completion in an empty line and pressing
	    CTRL-E.
Solution:   Check for a zero pointer. (James Vega)
	    Also handle a situation without a matching pattern better, report
	    "No matches" instead of remaining in undefined CTRL-X mode.  And
	    get out of CTRL-X mode when typing a letter.
Files:	    src/edit.c

Patch 7.0.024
Problem:    It is possible to set arbitrary "v:" variables.
Solution:   Disallow setting "v:" variables that are not predefined.
Files:	    src/eval.c

Patch 7.0.025
Problem:    Crash when removing an element of a:000.  (Nikolai Weibull)
Solution:   Mark the a:000 list with VAR_FIXED.
Files:	    src/eval.c

Patch 7.0.026
Problem:    Using libcall() may show an old error.
Solution:   Invoke dlerror() to clear a previous error. (Yukihiro Nakadaira)
Files:	    src/os_unix.c

Patch 7.0.027 (extra)
Problem:    Win32: When compiled with SNIFF gvim may hang on exit.
Solution:   Translate and dispatch the WM_USER message. (Mathias Michaelis)
Files:	    src/gui_w48.c

Patch 7.0.028 (extra)
Problem:    OS/2: Vim doesn't compile with gcc 3.2.1.
Solution:   Add argument to after_pathsep(), don't define vim_handle_signal(),
	    define HAVE_STDARG_H. (David Sanders)
Files:	    src/os_unix.c, src/vim.h, src/os_os2_cfg.h

Patch 7.0.029
Problem:    getchar() may not position the cursor after a space.
Solution:   Position the cursor explicitly.
Files:	    src/eval.c

Patch 7.0.030
Problem:    The ":compiler" command can't be used in a FileChangedRO event.
	    (Hari Krishna Dara)
Solution:   Add the CMDWIN flag to the ":compiler" command.
Files:	    src/ex_cmds.h

Patch 7.0.031
Problem:    When deleting a buffer the buffer-local mappings for Select mode
	    remain.
Solution:   Add the Select mode bit to MAP_ALL_MODES. (Edwin Steiner)
Files:	    src/vim.h

Patch 7.0.032 (extra, after 7.0.027)
Problem:    Missing semicolon.
Solution:   Add the semicolon.
Files:	    src/gui_w48.c

Patch 7.0.033
Problem:    When pasting text, with the menu or CTRL-V, autoindent is removed.
Solution:   Use "x<BS>" to avoid indent to be removed. (Benji Fisher)
Files:	    runtime/autoload/paste.vim

Patch 7.0.034
Problem:    After doing completion and typing more characters or using BS
	    repeating with "." didn't work properly. (Martin Stubenschrott)
Solution:   Don't put BS and other characters in the redo buffer right away,
	    do this when finishing completion.
Files:	    src/edit.c

Patch 7.0.035
Problem:    Insert mode completion works when typed but not when replayed from
	    a register. (Hari Krishna Dara)
	    Also: Mappings for Insert mode completion don't always work.
Solution:   When finding a non-completion key in the input don't interrupt
	    completion when it wasn't typed.
	    Do use mappings when checking for typeahead while still finding
	    completions.  Avoids that completion is interrupted too soon.
	    Use "compl_pending" in a different way.
Files:	    src/edit.c

Patch 7.0.036
Problem:    Can't compile with small features and syntax highlighting or the
	    diff feature.
Solution:   Define LINE_ATTR whenever syntax highlighting or the diff feature
	    is enabled.
Files:	    src/screen.c

Patch 7.0.037
Problem:    Crash when resizing the GUI window vertically when there is a line
	    that doesn't fit.
Solution:   Don't redraw while the screen data is invalid.
Files:	    src/screen.c

Patch 7.0.038
Problem:    When calling complete() from an Insert mode expression mapping
	    text could be inserted in an improper way.
Solution:   Make undo_allowed() global and use it in complete().
Files:	    src/undo.c, src/proto/undo.pro, src/eval.c

Patch 7.0.039
Problem:    Calling inputdialog() with a third argument in the console doesn't
	    work.
Solution:   Make a separate function for input() and inputdialog(). (Yegappan
	    Lakshmanan)
Files:	    src/eval.c

Patch 7.0.040
Problem:    When 'cmdheight' is larger than 1 using inputlist() or selecting
	    a spell suggestion with the mouse gets the wrong entry.
Solution:   Start listing the first alternative on the last line of the screen.
Files:	    src/eval.c, src/spell.c

Patch 7.0.041
Problem:    cursor([1, 1]) doesn't work. (Peter Hodge)
Solution:   Allow leaving out the third item of the list and use zero for the
	    virtual column offset.
Files:	    src/eval.c

Patch 7.0.042
Problem:    When pasting a block of text in Insert mode Vim hangs or crashes.
	    (Noam Halevy)
Solution:   Avoid that the cursor is positioned past the NUL of a line.
Files:	    src/ops.c

Patch 7.0.043
Problem:    Using "%!" at the start of 'statusline' doesn't work.
Solution:   Recognize the special item when the option is being set.
Files:	    src/option.c

Patch 7.0.044
Problem:    Perl: setting a buffer line in another buffer may result in
	    changing the current buffer.
Solution:   Properly change to the buffer to be changed.
Files:	    src/if_perl.xs

Patch 7.0.045 (extra)
Problem:    Win32: Warnings when compiling OLE version with MSVC 2005.
Solution:   Move including vim.h to before windows.h. (Ilya Bobir)
Files:	    src/if_ole.cpp

Patch 7.0.046
Problem:    The matchparen plugin ignores parens in strings, but not in single
	    quotes, often marked with "character".
Solution:   Also ignore parens in syntax items matching "character".
Files:	    runtime/plugin/matchparen.vim

Patch 7.0.047
Problem:    When running configure the exit status is wrong.
Solution:   Handle the exit status properly. (Matthew Woehlke)
Files:	    configure, src/configure

Patch 7.0.048
Problem:    Writing a compressed file fails when there are parens in the name.
	    (Wang Jian)
Solution:   Put quotes around the temp file name.
Files:	    runtime/autoload/gzip.vim

Patch 7.0.049
Problem:    Some TCL scripts are not recognized. (Steven Atkinson)
Solution:   Check for "exec wish" in the file.
Files:	    runtime/scripts.vim

Patch 7.0.050
Problem:    After using the netbeans interface close command a stale pointer
	    may be used.
Solution:   Clear the pointer to the closed buffer. (Xaview de Gaye)
Files:	    src/netbeans.c

Patch 7.0.051 (after 7.0.44)
Problem:    The Perl interface doesn't compile or doesn't work properly.
Solution:   Remove the spaces before #ifdef and avoid an empty line above it.
Files:	    src/if_perl.xs

Patch 7.0.052
Problem:    The user may not be aware that the Vim server allows others more
	    functionality than desired.
Solution:   When running Vim as root don't become a Vim server without an
	    explicit --servername argument.
Files:	    src/main.c

Patch 7.0.053
Problem:    Shortening a directory name may fail when there are multi-byte
	    characters.
Solution:   Copy the correct bytes. (Titov Anatoly)
Files:	    src/misc1.c

Patch 7.0.054
Problem:    Mac: Using a menu name that only has a mnemonic or accelerator
	    causes a crash.  (Elliot Shank)
Solution:   Check for an empty menu name.  Also delete empty submenus that
	    were created before detecting the error.
Files:	    src/menu.c

Patch 7.0.055
Problem:    ":startinsert" in a CmdwinEnter autocommand doesn't take immediate
	    effect. (Bradley White)
Solution:   Put a NOP key in the typeahead buffer.  Also avoid that using
	    CTRL-C to go back to the command line moves the cursor left.
Files:	    src/edit.c, src/ex_getln.c

Patch 7.0.056
Problem:    "#!something" gives an error message.
Solution:   Ignore this line, so that it can be used in an executable Vim
	    script.
Files:	    src/ex_docmd.c

Patch 7.0.057 (extra, after 7.0.45)
Problem:    Win32: Compilation problem with Borland C 5.5.
Solution:   Include vim.h as before. (Mark S. Williams)
Files:	    src/if_ole.cpp

Patch 7.0.058
Problem:    The gbk and and gb18030 encodings are not recognized.
Solution:   Add aliases to cp936. (Edward L. Fox)
Files:	    src/mbyte.c

Patch 7.0.059
Problem:    The Perl interface doesn't compile with ActiveState Perl 5.8.8.
Solution:   Remove the __attribute__() items. (Liu Yubao)
Files:	    src/if_perl.xs

Patch 7.0.060 (after 7.0.51)
Problem:    Code for temporarily switching to another buffer is duplicated in
	    quite a few places.
Solution:   Use aucmd_prepbuf() and aucmd_restbuf() also when FEAT_AUTOCMD is
	    not defined.
Files:	    src/buffer.c, src/eval.c, src/fileio.c, src/if_ruby.c,
	    src/if_perl.xs, src/quickfix.c, src/structs.h

Patch 7.0.061
Problem:    Insert mode completion for Vim commands may crash if there is
	    nothing to complete.
Solution:   Instead of freeing the pattern make it empty, so that a "not
	    found" error is given. (Yukihiro Nakadaira)
Files:	    src/edit.c

Patch 7.0.062
Problem:    Mac: Crash when using the popup menu for spell correction.  The
	    popup menu appears twice when letting go of the right mouse button
	    early.
Solution:   Don't show the popup menu on the release of the right mouse
	    button.  Also check that a menu pointer is actually valid.
Files:	    src/proto/menu.pro, src/menu.c, src/normal.c, src/term.c

Patch 7.0.063
Problem:    Tiny chance for a memory leak. (coverity)
Solution:   Free pointer when next memory allocation fails.
Files:	    src/eval.c

Patch 7.0.064
Problem:    Using uninitialized variable. (Tony Mechelynck)
Solution:   When not used set "temp" to zero.  Also avoid a warning for
	    "files" in ins_compl_dictionaries().
Files:	    src/edit.c

Patch 7.0.065 (extra)
Problem:    Mac: left-right movement of the scrollwheel causes up-down
	    scrolling.
Solution:   Ignore mouse wheel events that are not up-down. (Nicolas Weber)
Files:	    src/gui_mac.c

Patch 7.0.066
Problem:    After the popup menu for Insert mode completion overlaps the tab
	    pages line it is not completely removed.
Solution:   Redraw the tab pages line after removing the popup menu. (Ori
	    Avtalion)
Files:	    src/popupmnu.c

Patch 7.0.067
Problem:    Undo doesn't always work properly when using "scim" input method.
	    Undo is split up when using preediting.
Solution:   Reset xim_has_preediting also when preedit_start_col is not
	    MAXCOL.  Don't split undo when <Left> is used while preediting.
	    (Yukihiro Nakadaira)
Files:	    src/edit.c, src/mbyte.c

Patch 7.0.068
Problem:    When 'ignorecase' is set and using Insert mode completion,
	    typing characters to change the list of matches, case is not
	    ignored. (Hugo Ahlenius)
Solution:   Store the 'ignorecase' flag with the matches where needed.
Files:	    src/edit.c, src/search.c, src/spell.c

Patch 7.0.069
Problem:    Setting 'guitablabel' to %!expand(\%)  causes Vim to free an
	    invalid pointer. (Kim Schulz)
Solution:   Don't try freeing a constant string pointer.
Files:	    src/buffer.c

Patch 7.0.070
Problem:    Compiler warnings for shadowed variables and uninitialized
	    variables.
Solution:   Rename variables such as "index", "msg" and "dup".  Initialize
	    variables.
Files:	    src/edit.c, src/eval.c, src/ex_cmds.c, src/ex_cmds2.c,
	    src/ex_docmd.c, src/gui_beval.c, src/gui_gtk.c, src/gui_gtk_x11.c,
	    src/hardcopy.c, src/if_cscope.c, src/main.c, src/mbyte.c,
	    src/memline.c, src/netbeans.c, src/normal.c, src/option.c,
	    src/os_unix.c, src/quickfix.c, src/regexp.c, src/screen.c,
	    src/search.c, src/spell.c, src/ui.c, src/undo.c, src/window.c,
	    src/version.c

Patch 7.0.071
Problem:    Using an empty search pattern may cause a crash.
Solution:   Avoid using a NULL pointer.
Files:	    src/search.c

Patch 7.0.072
Problem:    When starting the GUI fails there is no way to adjust settings or
	    do something else.
Solution:   Add the GUIFailed autocommand event.
Files:	    src/fileio.c, src/gui.c, src/vim.h

Patch 7.0.073
Problem:    Insert mode completion: Typing <CR> sometimes selects the original
	    text instead of keeping what was typed.  (Justin Constantino)
Solution:   Don't let <CR> select the original text if there is no popup menu.
Files:	    src/edit.c

Patch 7.0.074 (extra)
Problem:    Win32: tooltips were not converted from 'encoding' to Unicode.
Solution:   Set the tooltip to use Unicode and do the conversion.  Also
	    cleanup the code for the tab pages tooltips. (Yukihiro Nakadaira)
Files:	    src/gui_w32.c, src/gui_w48.c

Patch 7.0.075
Problem:    winsaveview() did not store the actual value of the desired cursor
	    column.  This could move the cursor in the matchparen plugin.
Solution:   Call update_curswant() before using the value w_curswant.
Files:	    src/eval.c

Patch 7.0.076 (after 7.0.010)
Problem:    Automatic downloading of spell files only works for ftp.
Solution:   Don't add login and password for non-ftp URLs. (Alexander Patrakov)
Files:	    runtime/autoload/spellfile.vim

Patch 7.0.077
Problem:    ":unlet v:this_session" causes a crash. (Marius Roets)
Solution:   When trying to unlet a fixed variable give an error message.
Files:	    src/eval.c

Patch 7.0.078
Problem:    There are two error messages E46.
Solution:   Change the number for the sandbox message to E794.
Files:	    src/globals.h

Patch 7.0.079
Problem:    Russian tutor doesn't work when 'encoding' is "utf-8".
Solution:   Use tutor.ru.utf-8 as the master, and generate the other encodings
	    from it.  Select the right tutor depending on 'encoding'. (Alexey
	    Froloff)
Files:	    runtime/tutor/Makefile, runtime/tutor/tutor.vim,
	    runtime/tutor/tutor.ru.utf-8

Patch 7.0.080
Problem:    Generating auto/pathdef.c fails for CFLAGS with a backslash.
Solution:   Double backslashes in the string. (Alexey Froloff)
Files:	    src/Makefile

Patch 7.0.081
Problem:    Command line completion doesn't work for a shell command with an
	    absolute path.
Solution:   Don't use $PATH when there is an absolute path.
Files:	    src/ex_getln.c

Patch 7.0.082
Problem:    Calling a function that waits for input may cause List and
	    Dictionary arguments to be freed by the garbage collector.
Solution:   Keep a list of all arguments to internal functions.
Files:	    src/eval.c

Patch 7.0.083
Problem:    Clicking with the mouse on an item for inputlist() doesn't work
	    when 'compatible' is set and/or when 'cmdheight' is more than one.
	    (Christian J.  Robinson)
Solution:   Also decrement "lines_left" when 'more' isn't set.  Set
	    "cmdline_row" to zero to get all mouse events.
Files:	    src/message.c, src/misc1.c

Patch 7.0.084
Problem:    The garbage collector may do its work while some Lists or
	    Dictionaries are used internally, e.g., by ":echo" that runs into
	    the more-prompt or ":echo [garbagecollect()]".
Solution:   Only do garbage collection when waiting for a character at the
	    toplevel.  Let garbagecollect() set a flag that is handled at the
	    toplevel before waiting for a character.
Files:	    src/eval.c, src/getchar.c, src/globals.h, src/main.c

Patch 7.0.085
Problem:    When doing "make test" the viminfo file is modified.
Solution:   Use another viminfo file after setting 'compatible.
Files:	    src/testdir/test56.in

Patch 7.0.086
Problem:    getqflist() returns entries for pattern and text with the number
	    zero.  Passing these to setqflist() results in the string "0".
Solution:   Use an empty string instead of the number zero.
Files:	    src/quickfix.c

Patch 7.0.087
Problem:    After ":file fname" and ":saveas fname" the 'autochdir' option
	    does not take effect. (Yakov Lerner)
	    Commands for handling 'autochdir' are repeated many times.
Solution:   Add the DO_AUTOCHDIR macro and do_autochdir().  Use it for
	    ":file fname" and ":saveas fname".
Files:	    src/proto/buffer.pro, src/buffer.c, src/ex_cmds.c, src/macros.h,
	    src/netbeans.c, src/option.c, src/window.c

Patch 7.0.088
Problem:    When compiled with Perl the generated prototypes have "extern"
	    unnecessarily added.
Solution:   Remove the "-pipe" argument from PERL_CFLAGS.
Files:	    src/auto/configure, src/configure.in

Patch 7.0.089
Problem:    "ga" does not work properly for a non-Unicode multi-byte encoding.
Solution:   Only check for composing chars for utf-8. (Taro Muraoka)
Files:	    src/ex_cmds.c

Patch 7.0.090
Problem:    Cancelling the conform() dialog on the console with Esc requires
	    typing it twice. (Benji Fisher)
Solution:   When the start of an escape sequence is found use 'timeoutlen' or
	    'ttimeoutlen'.
Files:	    src/misc1.c

Patch 7.0.091
Problem:    Using winrestview() while 'showcmd' is set causes the cursor to be
	    displayed in the wrong position. (Yakov Lerner)
Solution:   Set the window topline properly.
Files:	    src/eval.c

Patch 7.0.092 (after 7.0.082 and 7.0.084)
Problem:    The list of internal function arguments is obsolete now that
	    garbage collection is only done at the toplevel.
Solution:   Remove the list of all arguments to internal functions.
Files:	    src/eval.c

Patch 7.0.093
Problem:    The matchparen plugin can't handle a 'matchpairs' value where a
	    colon is matched.
Solution:   Change the split() that is used to change 'matchpairs' into a
	    List.
Files:	    runtime/plugin/matchparen.vim

Patch 7.0.094
Problem:    When a hidden buffer is made the current buffer and another file
	    edited later, the file message will still be given.  Using
	    ":silent" also doesn't prevent the file message. (Marvin Renich)
Solution:   Reset the need_fileinfo flag when reading a file.  Don't set
	    need_fileinfo when msg_silent is set.
Files:	    src/buffer.c, src/fileio.c

Patch 7.0.095
Problem:    The Greek tutor is not available in utf-8.  "el" is used for the
	    language, only "gr" for the country is recognized.
Solution:   Add the utf-8 Greek tutor.  Use it for conversion to iso-8859-7
	    and cp737.  (Lefteris Dimitroulakis)
Files:	    runtime/tutor/Makefile, runtime/tutor/tutor.gr.utf-8,
	    runtime/tutor/tutor.vim

Patch 7.0.096
Problem:    taglist() returns the filename relative to the tags file, while
	    the directory of the tags file is unknown. (Hari Krishna Dara)
Solution:   Expand the file name. (Yegappan Lakshmanan)
Files:	    src/tag.c

Patch 7.0.097
Problem:    ":tabclose N" that closes another tab page does not remove the tab
	    pages line.  Same problem when using the mouse.
Solution:   Adjust the tab pages line when needed in tabpage_close_other().
Files:	    src/ex_docmd.c

Patch 7.0.098
Problem:    Redirecting command output in a cmdline completion function
	    doesn't work. (Hari Krishna Dara)
Solution:   Enable redirection when redirection is started.
Files:	    src/ex_docmd.c, src/ex_getln.c

Patch 7.0.099
Problem:    GUI: When the popup menu is visible using the scrollbar messes up
	    the display.
Solution:   Disallow scrolling the current window.  Redraw the popup menu
	    after scrolling another window.
Files:	    src/gui.c

Patch 7.0.100
Problem:    "zug" may report the wrong filename. (Lawrence Kesteloot)
Solution:   Call home_replace() to fill NameBuff[].
Files:	    src/spell.c

Patch 7.0.101
Problem:    When the "~/.vim/spell" directory does not exist "zg" may create
	    a wrong directory.  "zw" doesn't work.
Solution:   Use the directory of the file name instead of NameBuff.  For "zw"
	    not only remove a good word but also add the word with "!".
Files:	    src/spell.c

Patch 7.0.102
Problem:    Redrawing cmdline is not correct when using SCIM.
Solution:   Don't call im_get_status(). (Yukihiro Nakadaira)
Files:	    src/ex_getln.c

Patch 7.0.103 (after 7.0.101)
Problem:    Compiler warning for uninitialized variable. (Tony Mechelynck)
Solution:   Init variable.
Files:	    src/spell.c

Patch 7.0.104
Problem:    The CursorHoldI event only triggers once in Insert mode.  It also
	    triggers after CTRL-V and other two-key commands.
Solution:   Set "did_cursorhold" before getting a second key.  Reset
	    "did_cursorhold" after handling a command.
Files:	    src/edit.c, src/fileio.c

Patch 7.0.105
Problem:    When using incremental search the statusline ruler isn't updated.
	    (Christoph Koegl)
Solution:   Update the statusline when it contains the ruler.
Files:	    src/ex_getln.c

Patch 7.0.106
Problem:    The spell popup menu uses ":amenu", triggering mappings.  Other
	    PopupMenu autocommands are removed. (John Little)
Solution:   Use ":anoremenu" and use an autocmd group.
Files:	    runtime/menu.vim

Patch 7.0.107
Problem:    Incremental search doesn't redraw the text tabline. (Ilya Bobir)
	    Also happens in other situations with one window in a tab page.
Solution:   Redraw the tabline after clearing the screen.
Files:	    src/screen.c

Patch 7.0.108 (extra)
Problem:    Amiga: Compilation problem.
Solution:   Have mch_mkdir() return a failure flag. (Willy Catteau)
Files:	    src/os_amiga.c, src/proto/os_amiga.pro

Patch 7.0.109
Problem:    Lisp indenting is confused by escaped quotes in strings. (Dorai
	    Sitaram)
Solution:   Check for backslash inside strings. (Sergey Khorev)
Files:	    src/misc1.c

Patch 7.0.110
Problem:    Amiga: Compilation problems when not using libnix.
Solution:   Change a few #ifdefs. (Willy Catteau)
Files:	    src/memfile.c

Patch 7.0.111
Problem:    The gzip plugin can't handle filenames with single quotes.
Solution:   Add and use the shellescape() function. (partly by Alexey Froloff)
Files:	    runtime/autoload/gzip.vim, runtime/doc/eval.txt, src/eval.c,
	    src/mbyte.c, src/misc2.c, src/proto/misc2.pro

Patch 7.0.112
Problem:    Python interface does not work with Python 2.5.
Solution:   Change PyMem_DEL() to Py_DECREF(). (Sumner Hayes)
Files:	    src/if_python.c

Patch 7.0.113
Problem:    Using CTRL-L in Insert completion when there is no current match
	    may cause a crash. (Yukihiro Nakadaira)
Solution:   Check for compl_leader to be NULL
Files:	    src/edit.c

Patch 7.0.114
Problem:    When aborting an insert with CTRL-C an extra undo point is
	    created in the GUI. (Yukihiro Nakadaira)
Solution:   Call gotchars() only when advancing.
Files:	    src/getchar.c

Patch 7.0.115
Problem:    When 'ignorecase' is set, Insert mode completion only adds "foo"
	    and not "Foo" when both are found.
	    A found match isn't displayed right away when 'completeopt' does
	    not have "menu" or "menuone".
Solution:   Do not ignore case when checking if a completion match already
	    exists.  call ins_compl_check_keys() also when not using a popup
	    menu. (Yukihiro Nakadaira)
Files:	    src/edit.c

Patch 7.0.116
Problem:    64 bit Windows version reports "32 bit" in the ":version" output.
	    (M. Veerman)
Solution:   Change the text for Win64.
Files:	    src/version.c

Patch 7.0.117
Problem:    Using "extend" on a syntax item inside a region with "keepend", an
	    intermediate item may be truncated.
	    When applying the "keepend" and there is an offset to the end
	    pattern the highlighting of a contained item isn't adjusted.
Solution:   Use the seen_keepend flag to remember when to apply the "keepend"
	    flag.  Adjust the keepend highlighting properly. (Ilya Bobir)
Files:	    src/syntax.c

Patch 7.0.118
Problem:    printf() does not do zero padding for strings.
Solution:   Do allow zero padding for strings.
Files:	    src/message.c

Patch 7.0.119
Problem:    When going back from Insert to Normal mode the CursorHold event
	    doesn't trigger. (Yakov Lerner)
Solution:   Reset "did_cursorhold" when leaving Insert mode.
Files:	    src/edit.c

Patch 7.0.120
Problem:    Crash when using CTRL-R = at the command line and entering
	    "getreg('=')". (James Vega)
Solution:   Avoid recursiveness of evaluating the = register.
Files:	    src/ops.c

Patch 7.0.121
Problem:    GUI: Dragging the last status line doesn't work when there is a
	    text tabline.  (Markus Wolf)
Solution:   Take the text tabline into account when deciding to start modeless
	    selection.
Files:	    src/gui.c

Patch 7.0.122
Problem:    GUI: When clearing after a bold, double-wide character half a
	    character may be drawn.
Solution:   Check for double-wide character and redraw it. (Yukihiro Nakadaira)
Files:	    src/screen.c

Patch 7.0.123
Problem:    On SCO Openserver configure selects the wrong terminal library.
Solution:   Put terminfo before the other libraries. (Roger Cornelius)
	    Also fix a small problem compiling on Mac without Darwin.
Files:	    src/configure.in, src/auto/configure

Patch 7.0.124
Problem:    getwinvar() obtains a dictionary with window-local variables, but
	    it's always for the current window.
Solution:   Get the variables of the specified window. (Geoff Reedy)
Files:	    src/eval.c

Patch 7.0.125
Problem:    When "autoselect" is in the 'clipboard' option then the '< and '>
	    marks are set while Visual mode is still active.
Solution:   Don't set the '< and '> marks when yanking the selected area for
	    the clipboard.
Files:	    src/normal.c

Patch 7.0.126
Problem:    When 'formatexpr' uses setline() and later internal formatting is
	    used undo information is not correct. (Jiri Cerny, Benji Fisher)
Solution:   Set ins_need_undo after using 'formatexpr'.
Files:	    src/edit.c

Patch 7.0.127
Problem:    Crash when swap files has invalid timestamp.
Solution:   Check return value of ctime() for being NULL.
Files:	    src/memline.c

Patch 7.0.128
Problem:    GUI: when closing gvim is cancelled because there is a changed
	    buffer the screen isn't updated to show the changed buffer in the
	    current window.  (Krzysztof Kacprzak)
Solution:   Redraw when closing gvim is cancelled.
Files:	    src/gui.c

Patch 7.0.129
Problem:    GTK GUI: the GTK file dialog can't handle a relative path.
Solution:   Make the initial directory a full path before passing it to GTK.
	    (James Vega)  Also postpone adding the default file name until
	    after setting the directory.
Files:	    src/gui_gtk.c

Patch 7.0.130 (extra)
Problem:    Win32: Trying to edit or write devices may cause Vim to get stuck.
Solution:   Add the 'opendevice' option, default off.  Disallow
	    reading/writing from/to devices when it's off.
	    Also detect more devices by the full name starting with "\\.\".
Files:	    runtime/doc/options.txt, src/fileio.c, src/option.c, src/option.h,
	    src/os_win32.c

Patch 7.0.131
Problem:    Win32: "vim -r" does not list all the swap files.
Solution:   Also check for swap files starting with a dot.
Files:	    src/memline.c

Patch 7.0.132 (after 7.0.130)
Problem:    Win32: Crash when Vim reads from stdin.
Solution:   Only use mch_nodetype() when there is a file name.
Files:	    src/fileio.c

Patch 7.0.133
Problem:    When searching included files messages are added to the history.
Solution:   Set msg_hist_off for messages about scanning included files.
            Set msg_silent to avoid message about wrapping around.
Files:	    src/edit.c, src/globals.h, src/message.c, src/search.c

Patch 7.0.134
Problem:    Crash when comparing a recursively looped List or Dictionary.
Solution:   Limit recursiveness for comparing to 1000.
Files:	    src/eval.c

Patch 7.0.135
Problem:    Crash when garbage collecting list or dict with loop.
Solution:   Don't use DEL_REFCOUNT but don't recurse into Lists and
	    Dictionaries when freeing them in the garbage collector.
	    Also add allocated Dictionaries to the list of Dictionaries to
	    avoid leaking memory.
Files:	    src/eval.c, src/proto/eval.pro, src/tag.c

Patch 7.0.136
Problem:    Using "O" while matching parens are highlighted may not remove the
	    highlighting. (Ilya Bobir)
Solution:   Also trigger CursorMoved when a line is inserted under the cursor.
Files:	    src/misc1.c

Patch 7.0.137
Problem:    Configure check for big features is wrong.
Solution:   Change "==" to "=". (Martti Kuparinen)
Files:	    src/auto/configure, src/configure.in

Patch 7.0.138 (extra)
Problem:    Mac: modifiers don't work with function keys.
Solution:   Use GetEventParameter() to obtain modifiers. (Nicolas Weber)
Files:	    src/gui_mac.c

Patch 7.0.139
Problem:    Using CTRL-PageUp or CTRL-PageDown in Insert mode to go to another
	    tab page does not prepare for undo properly. (Stefano Zacchiroli)
Solution:   Call start_arrow() before switching tab page.
Files:	    src/edit.c

Patch 7.0.140 (after 7.0.134)
Problem:    Comparing recursively looped List or Dictionary doesn't work well.
Solution:   Detect comparing a List or Dictionary with itself.
Files:	    src/eval.c

Patch 7.0.141
Problem:    When pasting a while line on the command line an extra CR is added
	    literally.
Solution:   Don't add the trailing CR when pasting with the mouse.
Files:	    src/ex_getln.c, src/proto/ops.pro, src/ops.c

Patch 7.0.142
Problem:    Using the middle mouse button in Select mode to paste text results
	    in an extra "y". (Kriton Kyrimis)
Solution:   Let the middle mouse button replace the selected text with the
	    contents of the clipboard.
Files:	    src/normal.c

Patch 7.0.143
Problem:    Setting 'scroll' to its default value was not handled correctly.
Solution:   Compare the right field to PV_SCROLL.
Files:	    src/option.c

Patch 7.0.144
Problem:    May compare two unrelated pointers when matching a pattern against
	    a string.  (Dominique Pelle)
Solution:   Avoid calling reg_getline() when REG_MULTI is false.
Files:	    src/regexp.c

Patch 7.0.145 (after 7.0.142)
Problem:    Compiler warning.
Solution:   Add type cast.
Files:	    src/normal.c

Patch 7.0.146
Problem:    When 'switchbuf' is set to "usetab" and the current tab has only a
	    quickfix window, jumping to an error always opens a new window.
	    Also, when the buffer is open in another tab page it's not found.
Solution:   Check for the "split" value of 'switchbuf' properly.  Search in
	    other tab pages for the desired buffer. (Yegappan Lakshmanan)
Files:	    src/buffer.c, src/quickfix.c

Patch 7.0.147
Problem:    When creating a session file and there are several tab pages and
	    some windows have a local directory a short file name may be used
	    when it's not valid. (Marius Roets)
	    A session with multiple tab pages may result in "No Name" buffers.
	    (Bill McCarthy)
Solution:   Don't enter tab pages when going through the list, only use a
	    pointer to the first window in each tab page.
            Use "tabedit" instead of "tabnew | edit" when possible.
Files:	    src/ex_docmd.c

Patch 7.0.148
Problem:    When doing "call a.xyz()" and "xyz" does not exist in dictionary
	    "a" there is no error message. (Yegappan Lakshmanan)
Solution:   Add the error message.
Files:	    src/eval.c

Patch 7.0.149
Problem:    When resizing a window that shows "~" lines the text sometimes
	    jumps down.
Solution:   Remove code that uses "~" lines in some situations.  Fix the
            computation of the screen line of the cursor.  Also set w_skipcol
	    to handle very long lines.
Files:	    src/misc1.c, src/window.c

Patch 7.0.150
Problem:    When resizing the Vim window scrollbinding doesn't work. (Yakov
	    Lerner)
Solution:   Do scrollbinding in set_shellsize().
Files:	    src/term.c

Patch 7.0.151
Problem:    Buttons in file dialog are not according to Gnome guidelines.
Solution:   Swap Cancel and Open buttons. (Stefano Zacchiroli)
Files:	    src/gui_gtk.c

Patch 7.0.152
Problem:    Crash when using lesstif 2.
Solution:   Fill in the extension field. (Ben Hutchings)
Files:	    src/gui_xmebw.c

Patch 7.0.153
Problem:    When using cscope and opening the temp file fails Vim crashes.
	    (Kaya Bekiroglu)
Solution:   Check for NULL pointer returned from mch_open().
Files:	    src/if_cscope.c

Patch 7.0.154
Problem:    When 'foldnextmax' is negative Vim can hang. (James Vega)
Solution:   Avoid the fold level becoming negative.
Files:	    src/fold.c, src/syntax.c

Patch 7.0.155
Problem:    When getchar() returns a mouse button click there is no way to get
	    the mouse coordinates.
Solution:   Add v:mouse_win, v:mouse_lnum and v:mouse_col.
Files:	    runtime/doc/eval.txt, src/eval.c, src/vim.h

Patch 7.0.156 (extra)
Problem:    Vim doesn't compile for Amiga OS 4.
Solution:   Various changes for Amiga OS4. (Peter Bengtsson)
Files:	    src/feature.h, src/mbyte.c, src/memfile.c, src/memline.c,
	    src/os_amiga.c, src/os_amiga.h, src/pty.c

Patch 7.0.157
Problem:    When a function is used recursively the profiling information is
	    invalid. (Mikolaj Machowski)
Solution:   Put the start time on the stack instead of in the function.
Files:	    src/eval.c

Patch 7.0.158
Problem:    In a C file with ":set foldmethod=syntax", typing {<CR> on the
	    last line results in the cursor being in a closed fold. (Gautam
	    Iyer)
Solution:   Open fold after inserting a new line.
Files:	    src/edit.c

Patch 7.0.159
Problem:    When there is an I/O error in the swap file the cause of the error
	    cannot be seen.
Solution:   Use PERROR() instead of EMSG() where possible.
Files:	    src/memfile.c

Patch 7.0.160
Problem:    ":@a" echoes the command, Vi doesn't do that.
Solution:   Set the silent flag in the typeahead buffer to avoid echoing the
	    command.
Files:	    src/ex_docmd.c, src/normal.c, src/ops.c, src/proto/ops.pro

Patch 7.0.161
Problem:    Win32: Tab pages line popup menu isn't using the right encoding.
            (Yongwei Wu)
Solution:   Convert the text when necessary.  Also fixes the Find/Replace
	    dialog title. (Yegappan Lakshmanan)
Files:	    src/gui_w48.c

Patch 7.0.162
Problem:    "vim -o a b" when file "a" triggers the ATTENTION dialog,
	    selecting "Quit" exits Vim instead of editing "b" only.
	    When file "b" triggers the ATTENTION dialog selecting "Quit" or
	    "Abort" results in editing file "a" in that window.
Solution:   When selecting "Abort" exit Vim.  When selecting "Quit" close the
	    window.  Also avoid hit-enter prompt when selecting Abort.
Files:	    src/buffer.c, src/main.c

Patch 7.0.163
Problem:    Can't retrieve the position of a sign after it was set.
Solution:   Add the netbeans interface getAnno command. (Xavier de Gaye)
Files:	    runtime/doc/netbeans.txt, src/netbeans.c

Patch 7.0.164
Problem:    ":redir @+" doesn't work.
Solution:   Accept "@+" just like "@*". (Yegappan Lakshmanan)
Files:	    src/ex_docmd.c

Patch 7.0.165
Problem:    Using CTRL-L at the search prompt adds a "/" and other characters
	    without escaping, causing the pattern not to match.
Solution:   Escape special characters with a backslash.
Files:	    src/ex_getln.c

Patch 7.0.166
Problem:    Crash in cscope code when connection could not be opened.
	    (Kaya Bekiroglu)
Solution:   Check for the file descriptor to be NULL.
Files:	    src/if_cscope.c

Patch 7.0.167
Problem:    ":function" redefining a dict function doesn't work properly.
	    (Richard Emberson)
Solution:   Allow a function name to be a number when it's a function
	    reference.
Files:	    src/eval.c

Patch 7.0.168
Problem:    Using uninitialized memory and memory leak. (Dominique Pelle)
Solution:   Use alloc_clear() instead of alloc() for w_lines.  Free
	    b_ml.ml_stack after recovery.
Files:	    src/memline.c, src/window.c

Patch 7.0.169
Problem:    With a Visual block selection, with the cursor in the left upper
	    corner, pressing "I" doesn't remove the highlighting. (Guopeng
	    Wen)
Solution:   When checking if redrawing is needed also check if Visual
	    selection is still active.
Files:	    src/screen.c

Patch 7.0.170 (extra)
Problem:    Win32: Using "gvim --remote-tab foo" when gvim is minimized while
	    it previously was maximized, un-maximizing doesn't work properly.
	    And the labels are not displayed properly when 'encoding' is
	    utf-8.
Solution:   When minimized check for SW_SHOWMINIMIZED.  When updating the tab
	    pages line use TCM_SETITEMW instead of TCM_INSERTITEMW. (Liu
	    Yubao)
Files:	    src/gui_w48.c

Patch 7.0.171 (extra)
Problem:    VMS: A file name with multiple paths is written in the wrong file.
Solution:   Get the actually used file name. (Zoltan Arpadffy)
	    Also add info to the :version command about compilation.
Files:	    src/Make_vms.mms, src/buffer.c, src/os_unix.c, src/version.c

Patch 7.0.172
Problem:    Crash when recovering and quitting at the "press-enter" prompt.
Solution:   Check for "msg_list" to be NULL. (Liu Yubao)
Files:	    src/ex_eval.c

Patch 7.0.173
Problem:    ":call f().TT()" doesn't work.  (Richard Emberson)
Solution:   When a function returns a Dictionary or another composite continue
	    evaluating what follows.
Files:	    src/eval.c    

Patch 7.0.174
Problem:    ":mksession" doesn't restore window layout correctly in tab pages
	    other than the current one. (Zhibin He)
Solution:   Use the correct topframe for producing the window layout commands.
Files:	    src/ex_docmd.c

Patch 7.0.175
Problem:    The result of tr() is missing the terminating NUL. (Ingo Karkat)
Solution:   Add the NUL.
Files:	    src/eval.c

Patch 7.0.176
Problem:    ":emenu" isn't executed directly, causing the encryption key
	    prompt to fail. (Life Jazzer)
Solution:   Fix wrong #ifdef.
Files:	    src/menu.c

Patch 7.0.177
Problem:    When the press-enter prompt gets a character from a non-remappable
	    mapping, it's put back in the typeahead buffer as remappable,
	    which may cause an endless loop.
Solution:   Restore the non-remappable flag and the silent flag when putting a
	    char back in the typeahead buffer.
Files:	    src/getchar.c, src/message.c, src/normal.c

Patch 7.0.178
Problem:    When 'enc' is "utf-8" and 'ignorecase' is set the result of ":echo
	    ("\xe4" == "\xe4")" varies.
Solution:   In mb_strnicmp() avoid looking past NUL bytes.
Files:	    src/mbyte.c

Patch 7.0.179
Problem:    Using ":recover" or "vim -r" without a swapfile crashes Vim.
Solution:   Check for "buf" to be unequal NULL. (Yukihiro Nakadaira)
Files:	    src/memline.c

Patch 7.0.180 (extra, after 7.0.171)
Problem:    VMS: build failed.  Problem with swapfiles.
Solution:   Add "compiled_arch".  Always expand path and pass it to
	    buf_modname().  (Zoltan Arpadffy)
Files:	    src/globals.h, src/memline.c, src/os_unix.c, runtime/menu.vim

Patch 7.0.181
Problem:    When reloading a file that starts with an empty line, the reloaded
	    buffer has an extra empty line at the end. (Motty Lentzitzky)
Solution:   Delete all lines, don't use bufempty().
Files:	    src/fileio.c

Patch 7.0.182
Problem:    When using a mix of undo and "g-" it may no longer be possible to
	    go to every point in the undo tree.  (Andy Wokula)
Solution:   Correctly update pointers in the undo tree.
Files:	    src/undo.c

Patch 7.0.183
Problem:    Crash in ":let" when redirecting to a variable that's being
	    displayed. (Thomas Link)
Solution:   When redirecting to a variable only do the assignment when
	    stopping redirection to avoid that setting the variable causes a
	    freed string to be accessed.
Files:	    src/eval.c

Patch 7.0.184
Problem:    When the cscope program is called "mlcscope" the Cscope interface
	    doesn't work.
Solution:   Accept "\S*cscope:" instead of "cscope:". (Frodak D. Baksik)
Files:	    src/if_cscope.c

Patch 7.0.185
Problem:    Multi-byte characters in a message are displayed with attributes
	    from what comes before it.
Solution:   Don't use the attributes for a multi-byte character.  Do use
	    attributes for special characters. (Yukihiro Nakadaira)
Files:	    src/message.c

Patch 7.0.186
Problem:    Get an ml_get error when 'encoding' is "utf-8" and searching for
	    "/\_s*/e" in an empty buffer.  (Andrew Maykov)
Solution:   Don't try getting the line just below the last line.
Files:	    src/search.c

Patch 7.0.187
Problem:    Can't source a remote script properly.
Solution:   Add the SourceCmd event. (Charles Campbell)
Files:	    runtime/doc/autocmd.txt, src/ex_cmds2.c, src/fileio.c, src/vim.h

Patch 7.0.188 (after 7.0.186)
Problem:    Warning for wrong pointer type.
Solution:   Add a type cast.
Files:	    src/search.c

Patch 7.0.189
Problem:    Translated message about finding matches is truncated. (Yukihiro
	    Nakadaira)
Solution:   Enlarge the buffer.  Also use vim_snprintf().
Files:	    src/edit.c

Patch 7.0.190
Problem:    "syntax spell default" results in an error message.
Solution:   Change 4 to 7 for STRNICMP(). (Raul Nunez de Arenas Coronado)
Files:	    src/syntax.c

Patch 7.0.191
Problem:    The items used by getqflist() and setqflist() don't match.
Solution:   Support the "bufnum" item for setqflist(). (Yegappan Lakshmanan)
Files:	    runtime/doc/eval.txt, src/quickfix.c

Patch 7.0.192
Problem:    When 'swapfile' is switched off in an empty file it is possible
	    that not all blocks are loaded into memory, causing ml_get errors
	    later.
Solution:   Rename "dont_release" to "mf_dont_release" and also use it to
	    avoid using the cached line and locked block. 
Files:	    src/globals.h, src/memfile.c, src/memline.c

Patch 7.0.193
Problem:    Using --remote or --remote-tab with an argument that matches
	    'wildignore' causes a crash.
Solution:   Check the argument count before using ARGLIST[0].
Files:	    src/ex_cmds.c

Patch 7.0.194
Problem:    Once an ml_get error is given redrawing part of the screen may
	    cause it again, resulting in an endless loop.
Solution:   Don't give the error message for a recursive call.
Files:	    src/memline.c

Patch 7.0.195
Problem:    When a buffer is modified and 'autowriteall' is set, ":quit"
	    results in an endless loop when there is a conversion error while
	    writing. (Nikolai Weibull)
Solution:   Make autowrite() return FAIL if the buffer is still changed after
	    writing it.
	    /* put the cursor on the last char, for 'tw' formatting */
Files:	    src/ex_cmds2.c

Patch 7.0.196
Problem:    When using ":vert ball" the computation of the mouse pointer
	    position may be off by one column. (Stefan Karlsson)
Solution:   Recompute the frame width when moving the vertical separator from
	    one window to another.
Files:	    src/window.c

Patch 7.0.197 (extra)
Problem:    Win32: Compiling with EXITFREE doesn't work.
Solution:   Adjust a few #ifdefs. (Alexei Alexandrof)
Files:	    src/misc2.c, src/os_mswin.c

Patch 7.0.198 (extra)
Problem:    Win32: Compiler warnings.  No need to generate gvim.exe.mnf.
Solution:   Add type casts.  Use "*" for processorArchitecture. (George Reilly)
Files:	    src/Make_mvc.mak, src/eval.c, src/gvim.exe.mnf, src/misc2.c

Patch 7.0.199
Problem:    When using multi-byte characters the combination of completion and
	    formatting may result in a wrong cursor position.
Solution:   Don't decrement the cursor column, use dec_cursor(). (Yukihiro
	    Nakadaira)  Also check for the column to be zero.
Files:	    src/edit.c

Patch 7.0.200
Problem:    Memory leaks when out of memory.
Solution:   Free the memory.
Files:	    src/edit.c, src/diff.c

Patch 7.0.201
Problem:    Message for ":diffput" about buffer not being in diff mode may be
	    wrong.
Solution:   Check for buffer in diff mode but not modifiable.
Files:	    src/diff.c

Patch 7.0.202
Problem:    Problems on Tandem systems while compiling and at runtime.
Solution:   Recognize root uid is 65535.  Check select() return value for it
	    not being supported.  Avoid wrong function prototypes.  Mention
	    use of -lfloss.  (Matthew Woehlke)
Files:	    src/Makefile, src/ex_cmds.c, src/fileio.c, src/main.c,
	    src/osdef1.h.in, src/osdef2.h.in, src/os_unix.c, src/pty.c,
	    src/vim.h

Patch 7.0.203
Problem:    0x80 characters in a register are not handled correctly for the
	    "@" command.
Solution:   Escape CSI and 0x80 characters. (Yukihiro Nakadaira)
Files:	    src/ops.c

Patch 7.0.204
Problem:    Cscope: Parsing matches for listing isn't done properly.
Solution:   Check for line number being found. (Yu Zhao)
Files:	    src/if_cscope.c

Patch 7.0.205 (after 7.0.203)
Problem:    Can't compile.
Solution:   Always include the vim_strsave_escape_csi function.
Files:	    src/getchar.c

Patch 7.0.206 (after 7.0.058)
Problem:    Some characters of the "gb18030" encoding are not handled
	    properly.
Solution:   Do not use "cp936" as an alias for "gb18030" encoding.  Instead
	    initialize 'encoding' to "cp936".
Files:	    src/mbyte.c, src/option.c

Patch 7.0.207
Problem:    After patch 2.0.203 CSI and K_SPECIAL characters are escaped when
	    recorded and then again when the register is executed.
Solution:   Remove escaping before putting the recorded characters in a
	    register.  (Yukihiro Nakadaira)
Files:	    src/getchar.c, src/ops.c, src/proto/getchar.pro

Patch 7.0.208 (after 7.0.171 and 7.0.180)
Problem:    VMS: changes to path handling cause more trouble than they solve.
Solution:   Revert changes.
Files:	    src/buffer.c, src/memline.c, src/os_unix.c

Patch 7.0.209
Problem:    When replacing a line through Python the cursor may end up beyond
	    the end of the line.
Solution:   Check the cursor column after replacing the line.
Files:	    src/if_python.c

Patch 7.0.210
Problem:    ":cbuffer" and ":lbuffer" always fail when the buffer is modified.
	    (Gary Johnson)
Solution:   Support adding a !. (Yegappan Lakshmanan)
Files:	    runtime/doc/quickfix.txt, src/ex_cmds.h

Patch 7.0.211
Problem:    With ":set cindent noai bs=0" using CTRL-U in Insert mode will
	    delete auto-indent.  After ":set ai" it doesn't.
Solution:   Also check 'cindent' being set. (Ryan Lortie)
Files:	    src/edit.c

Patch 7.0.212
Problem:    The GUI can't be terminated with SIGTERM. (Mark Logan)
Solution:   Use the signal protection in the GUI as in the console, allow
	    signals when waiting for 100 msec or longer.
Files:	    src/ui.c

Patch 7.0.213
Problem:    When 'spellfile' has two regions that use the same sound folding
	    using "z=" will cause memory to be freed twice. (Mark Woodward)
Solution:   Clear the hashtable properly so that the items are only freed once.
Files:	    src/spell.c

Patch 7.0.214
Problem:    When using <f-args> in a user command it's not possible to have an
	    argument end in '\ '.
Solution:   Change the handling of backslashes. (Yakov Lerner)
Files:	    runtime/doc/map.txt, src/ex_docmd.c

Patch 7.0.215 (extra)
Problem:    Mac: Scrollbar size isn't set.  Context menu has disabled useless
	    Help entry.  Call to MoreMasterPointers() is ignored.
Solution:   Call SetControlViewSize() in gui_mch_set_scrollbar_thumb().  Use
	    kCMHelpItemRemoveHelp for ContextualMenuSelect().  Remove call to
	    MoreMasterPointers(). (Nicolas Weber)
Files:	    src/gui_mac.c

Patch 7.0.216
Problem:    ":tab wincmd ]" does not open a tab page. (Tony Mechelynck)
Solution:   Copy the cmdmod.tab value to postponed_split_tab and use it.
Files:	    src/globals.h, src/ex_docmd.c, src/if_cscope.c, src/window.c

Patch 7.0.217
Problem:    This hangs when pressing "n": ":%s/\n/,\r/gc". (Ori Avtalion)
Solution:   Set "skip_match" to advance to the next line.
Files:	    src/ex_cmds.c

Patch 7.0.218
Problem:    "%B" in 'statusline' always shows zero in Insert mode. (DervishD)
Solution:   Remove the exception for Insert mode, check the column for being
	    valid instead.
Files:	    src/buffer.c

Patch 7.0.219
Problem:    When using the 'editexisting.vim' script and a file is being
	    edited in another tab page the window is split.  The "+123"
	    argument is not used.
Solution:   Make the tab page with the file the current tab page.  Set
	    v:swapcommand when starting up to the first "+123" or "-c" command
	    line argument.
Files:	    runtime/macros/editexisting.vim, src/main.c

Patch 7.0.220
Problem:    Crash when using winnr('#') in a new tab page. (Andy Wokula)
Solution:   Check for not finding the window.
Files:	    src/eval.c

Patch 7.0.221
Problem:    finddir() uses 'path' by default, where "." means relative to the
	    current file.  But it works relative to the current directory.
	    (Tye Zdrojewski)
Solution:   Add the current buffer name to find_file_in_path_option() for the
	    relative file name.
Files:	    runtime/doc/eval.txt, src/eval.c

Patch 7.0.222
Problem:    Perl indenting using 'cindent' works almost right.
Solution:   Recognize '#' to start a comment. (Alex Manoussakis)  Added '#'
	    flag in 'cinoptions'.
Files:	    runtime/doc/indent.txt, src/misc1.c

Patch 7.0.223
Problem:    Unprintable characters in completion text mess up the popup menu.
	    (Gombault Damien)
Solution:   Use strtrans() to make the text printable.
Files:	    src/charset.c, src/popupmnu.c

Patch 7.0.224
Problem:    When expanding "##" spaces are escaped twice.  (Pavol Juhas)
Solution:   Don't escape the spaces that separate arguments.
Files:	    src/eval.c, src/ex_docmd.c, src/proto/ex_docmd.pro

Patch 7.0.225
Problem:    When using setline() in an InsertEnter autocommand and doing "A"
	    the cursor ends up on the last byte in the line. (Yukihiro
	    Nakadaira)
Solution:   Only adjust the column when using setline() for the cursor line.
	    Move it back to the head byte if necessary.
Files:	    src/eval.c, src/misc2.c

Patch 7.0.226
Problem:    Display flickering when updating signs through the netbeans
	    interface. (Xavier de Gaye)
Solution:   Remove the redraw_later(CLEAR) call.
Files:	    src/netbeans.c

Patch 7.0.227
Problem:    Crash when closing a window in the GUI. (Charles Campbell)
Solution:   Don't call out_flush() from win_free().
Files:	    src/window.c

Patch 7.0.228
Problem:    Cygwin: problem with symlink to DOS style path.
Solution:   Invoke cygwin_conv_to_posix_path(). (Luca Masini)
Files:	    src/os_unix.c

Patch 7.0.229
Problem:    When 'pastetoggle' starts with Esc then pressing Esc in Insert
	    mode will not time out. (Jeffery Small)
Solution:   Use KL_PART_KEY instead of KL_PART_MAP, so that 'ttimeout' applies
	    to the 'pastetoggle' key.
Files:	    src/getchar.c

Patch 7.0.230
Problem:    After using ":lcd" a script doesn't know how to restore the
	    current directory.
Solution:   Add the haslocaldir() function. (Bob Hiestand)
Files:	    runtime/doc/usr_41.txt, runtime/doc/eval.txt, src/eval.c

Patch 7.0.231
Problem:    When recovering from a swap file the page size is likely to be
	    different from the minimum.  The block used for the first page
	    then has a buffer of the wrong size, causing a crash when it's
	    reused later.  (Zephaniah Hull)
Solution:   Reallocate the buffer when the page size changes.  Also check that
	    the page size is at least the minimum value.
Files:	    src/memline.c

Patch 7.0.232 (extra)
Problem:    Mac: doesn't support GUI tab page labels.
Solution:   Add GUI tab page labels. (Nicolas Weber)
Files:	    src/feature.h, src/gui.c, src/gui.h, src/gui_mac.c,
	    src/proto/gui_mac.pro

Patch 7.0.233 (extra)
Problem:    Mac: code formatted badly.
Solution:   Fix code formatting
Files:	    src/gui_mac.c

Patch 7.0.234
Problem:    It's possible to use feedkeys() from a modeline.  That is a
	    security issue, can be used for a trojan horse.
Solution:   Disallow using feedkeys() in the sandbox.
Files:	    src/eval.c

Patch 7.0.235
Problem:    It is possible to use writefile() in the sandbox.
Solution:   Add a few more checks for the sandbox.
Files:	    src/eval.c

Patch 7.0.236
Problem:    Linux 2.4 uses sysinfo() with a mem_unit field, which is not
	    backwards compatible.
Solution:   Add an autoconf check for sysinfo.mem_unit.  Let mch_total_mem()
	    return Kbyte to avoid overflow.
Files:	    src/auto/configure, src/configure.in, src/config.h.in,
	    src/option.c, src/os_unix.c

Patch 7.0.237
Problem:    For root it is recommended to not use 'modeline', but in
	    not-compatible mode the default is on.
Solution:   Let 'modeline' default to off for root.
Files:	    runtime/doc/options.txt, src/option.c

Patch 7.0.238
Problem:    Crash when ":match" pattern runs into 'maxmempattern'. (Yakov
	    Lerner)
Solution:   Don't free the regexp program of match_hl.
Files:	    src/screen.c

Patch 7.0.239
Problem:    When using local directories and tab pages ":mksession" uses a
	    short file name when it shouldn't.  Window-local options from a
	    modeline may be applied to the wrong window. (Teemu Likonen)
Solution:   Add the did_lcd flag, use the full path when it's set.  Don't use
	    window-local options from the modeline when using the current
	    window for another buffer in ":doautoall".
Files:	    src/fileio.c,  src/ex_docmd.c

Patch 7.0.240
Problem:    Crash when splitting a window in the GUI. (opposite of 7.0.227)
Solution:   Don't call out_flush() from win_alloc().  Also avoid this for
	    win_delete().  Also block autocommands while the window structure
	    is invalid.
Files:	    src/window.c

Patch 7.0.241
Problem:    ":windo throw 'foo'" loops forever. (Andy Wokula)
Solution:   Detect that win_goto() doesn't work.
Files:	    src/ex_cmds2.c

Patch 7.0.242 (extra)
Problem:    Win32: Using "-register" in a Vim that does not support OLE causes
	    a crash.
Solution:   Don't use EMSG() but mch_errmsg().  Check p_go for being NULL.
	    (partly by Michael Wookey)
Files:	    src/gui_w32.c

Patch 7.0.243 (extra)
Problem:    Win32: When GvimExt is built with MSVC 2005 or later, the "Edit
	    with vim" context menu doesn't appear in the Windows Explorer.
Solution:   Embed the linker manifest file into the resources of GvimExt.dll.
	    (Mathias Michaelis)
Files:	    src/GvimExt/Makefile


Fixes after Vim 7.1a BETA:

The extra archive had CVS directories included below "farsi" and
"runtime/icons".  CVS was missing the farsi icon files.

Fix compiling with Gnome 2.18, undefine bind_textdomain_codeset. (Daniel
Drake)

Mac: "make install" didn't copy rgb.txt.

When editing a compressed file while there are folds caused "ml_get" errors
and some lines could be missing.  When decompressing failed option values were
not restored.


Patch 7.1a.001
Problem:    Crash when downloading a spell file.  (Szabolcs Horvat)
Solution:   Avoid that did_set_spelllang() is used recursively when a new
	    window is opened for the download.
	    Also avoid wiping out the wrong buffer.
Files:	    runtime/autoload/spellfile.vim, src/buffer.c, src/ex_cmds.c,
            src/spell.c

Patch 7.1a.002 (extra)
Problem:    Compilation error with MingW.
Solution:   Check for LPTOOLTIPTEXT to be defined.
Files:	    src/gui_w32.c


Fixes after Vim 7.1b BETA:

Made the Mzscheme interface build both with old and new versions of Mzscheme,
using an #ifdef. (Sergey Khorev)
Mzscheme interface didn't link, missing function.  Changed order of libraries
in the configure script.

Ruby interface didn't compile on Mac.  Changed #ifdef. (Kevin Ballard)

Patch 7.1b.001 (extra)
Problem:    Random text in a source file.  No idea how it got there.
Solution:   Delete the text.
Files:	    src/gui_w32.c

Patch 7.1b.002
Problem:    When 'maxmem' is large there can be an overflow in computations.
	    (Thomas Wiegner)
Solution:   Use the same mechanism as in mch_total_mem(): first reduce the
	    multiplier as much as possible.
Files:	    src/memfile.c



 vim:tw=78:ts=8:ft=help:norl:
