diff --git a/runtime/autoload/rubycomplete.vim b/runtime/autoload/rubycomplete.vim
index 5b728607c23175b6ba00da1f4bc689328bf7a95e..47c77d93d702420e9c8fc985495847567e982160 100644
--- a/runtime/autoload/rubycomplete.vim
+++ b/runtime/autoload/rubycomplete.vim
@@ -36,7 +36,7 @@ if !exists("g:rubycomplete_classes_in_global")
 endif
 
 if !exists("g:rubycomplete_buffer_loading")
-    let g:rubycomplete_classes_in_global = 0
+    let g:rubycomplete_buffer_loading = 0
 endif
 
 if !exists("g:rubycomplete_include_object")
diff --git a/runtime/autoload/xml/html401f.vim b/runtime/autoload/xml/html401f.vim
index 6261265504797a023ff2b865617f0fb60df375b9..1797a5a07848ff4e914dc94f045f976dd24b9dd9 100644
--- a/runtime/autoload/xml/html401f.vim
+++ b/runtime/autoload/xml/html401f.vim
@@ -466,4 +466,3 @@ let g:xmldata_html401t = {
 \ 'param': ['/>', ''],
 \ }
 \ }
-" vim:ft=vim:ff=unix
diff --git a/runtime/autoload/xml/xhtml10f.vim b/runtime/autoload/xml/xhtml10f.vim
index 4cd894d3acbaf27aeb5bec233eae240f16b100f4..0bfa30ce9d2428813eb20b8456282067a3d206e6 100644
--- a/runtime/autoload/xml/xhtml10f.vim
+++ b/runtime/autoload/xml/xhtml10f.vim
@@ -467,4 +467,3 @@ let g:xmldata_xhtml10f = {
 \ 'param': ['/>', ''],
 \ }
 \ }
-" vim:ft=vim:ff=unix
diff --git a/runtime/colors/slate.vim b/runtime/colors/slate.vim
index 12d91bab7d89197ed92961e5937ef298b5f8c1df..f9a70b8777878c2990b12b37137b92531c9fbe96 100644
--- a/runtime/colors/slate.vim
+++ b/runtime/colors/slate.vim
@@ -9,6 +9,7 @@ if version > 580
  syntax reset
  endif
 endif
+let colors_name = "slate"
 :hi Normal guifg=White guibg=grey15
 :hi Cursor guibg=khaki guifg=slategrey
 :hi VertSplit guibg=#c2bfa5 guifg=grey40 gui=none cterm=reverse
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index ad08a87e2d541edaff12d993180eec2520f625b5..3a289d7b04226c860401bdf76952586c089ca0ca 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -14,13 +14,12 @@ VIMEXE = vim
 include ../../src/auto/config.mk
 
 DOCS = \
-	ada.txt \
 	arabic.txt \
 	autocmd.txt \
 	change.txt \
 	cmdline.txt \
-	debugger.txt \
 	debug.txt \
+	debugger.txt \
 	develop.txt \
 	diff.txt \
 	digraph.txt \
@@ -29,6 +28,8 @@ DOCS = \
 	farsi.txt \
 	filetype.txt \
 	fold.txt \
+	ft_ada.txt \
+	ft_sql.txt \
 	gui.txt \
 	gui_w16.txt \
 	gui_w32.txt \
@@ -50,10 +51,10 @@ DOCS = \
 	insert.txt \
 	intro.txt \
 	map.txt \
-	message.txt \
-	motion.txt \
 	mbyte.txt \
+	message.txt \
 	mlang.txt \
+	motion.txt \
 	netbeans.txt \
 	options.txt \
 	os_390.txt \
@@ -89,10 +90,9 @@ DOCS = \
 	russian.txt \
 	scroll.txt \
 	sign.txt \
+	spell.txt \
 	sponsor.txt \
 	starting.txt \
-	spell.txt \
-	sql.txt \
 	syntax.txt \
 	tabpage.txt \
 	tagsrch.txt \
@@ -145,7 +145,6 @@ DOCS = \
 	workshop.txt
 
 HTMLS = \
-	ada.html \
 	arabic.html \
 	autocmd.html \
 	change.html \
@@ -160,6 +159,8 @@ HTMLS = \
 	farsi.html \
 	filetype.html \
 	fold.html \
+	ft_ada.html \
+	ft_sql.html \
 	gui.html \
 	gui_w16.html \
 	gui_w32.html \
@@ -177,14 +178,13 @@ HTMLS = \
 	if_tcl.html \
 	indent.html \
 	index.html \
-	vimindex.html \
 	insert.html \
 	intro.html \
 	map.html \
-	message.html \
-	motion.html \
 	mbyte.html \
+	message.html \
 	mlang.html \
+	motion.html \
 	netbeans.html \
 	options.html \
 	os_390.html \
@@ -220,10 +220,9 @@ HTMLS = \
 	russian.html \
 	scroll.html \
 	sign.html \
+	spell.html \
 	sponsor.html \
 	starting.html \
-	spell.html \
-	sql.html \
 	syntax.html \
 	tabpage.html \
 	tags.html \
@@ -272,6 +271,7 @@ HTMLS = \
 	version6.html \
 	version7.html \
 	vi_diff.html \
+	vimindex.html \
 	visual.html \
 	windows.html \
 	workshop.html
@@ -291,7 +291,7 @@ CONVERTED = \
 	evim-ru.UTF-8.1 \
 	vimdiff-ru.UTF-8.1 \
 	vimtutor-ru.UTF-8.1 \
-	xxd-ru.UTF-8.1 \
+	xxd-ru.UTF-8.1
 
 .SUFFIXES:
 .SUFFIXES: .c .o .txt .html
diff --git a/runtime/doc/ft_sql.txt b/runtime/doc/ft_sql.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7946c4f7021d52465a4e3b0eb565b0176f3d93ee
--- /dev/null
+++ b/runtime/doc/ft_sql.txt
@@ -0,0 +1,763 @@
+*ft_sql.txt*	For Vim version 7.2a.  Last change: Wed Apr 26 2006 3:05:33 PM
+
+by David Fishburn
+
+This is a filetype plugin to work with SQL files.
+
+The Structured Query Language (SQL) is a standard which specifies statements
+that allow a user to interact with a relational database.  Vim includes
+features for navigation, indentation and syntax highlighting.
+
+1. Navigation					|sql-navigation|
+    1.1 Matchit					|sql-matchit|
+    1.2 Text Object Motions			|sql-object-motions|
+    1.3 Predefined Object Motions		|sql-predefined-objects|
+    1.4 Macros					|sql-macros|
+2. SQL Dialects					|sql-dialects|
+    2.1 SQLSetType				|SQLSetType|
+    2.2 SQL Dialect Default			|sql-type-default|
+3. Adding new SQL Dialects			|sql-adding-dialects|
+4. OMNI SQL Completion				|sql-completion|
+    4.1 Static mode				|sql-completion-static|
+    4.2 Dynamic mode				|sql-completion-dynamic|
+    4.3 Tutorial				|sql-completion-tutorial|
+	4.3.1 Complete Tables			|sql-completion-tables|
+	4.3.2 Complete Columns			|sql-completion-columns|
+	4.3.3 Complete Procedures		|sql-completion-procedures|
+	4.3.4 Complete Views			|sql-completion-views|
+    4.4 Completion Customization		|sql-completion-customization|
+    4.5 SQL Maps				|sql-completion-maps|
+    4.6 Using with other filetypes		|sql-completion-filetypes|
+
+==============================================================================
+1. Navigation					*sql-navigation*
+
+The SQL ftplugin provides a number of options to assist with file
+navigation.
+
+
+1.1 Matchit					*sql-matchit*
+-----------
+The matchit plugin (http://www.vim.org/scripts/script.php?script_id=39)
+provides many additional features and can be customized for different
+languages.  The matchit plugin is configured by defining a local
+buffer variable, b:match_words.  Pressing the % key while on various
+keywords will move the cursor to its match.  For example, if the cursor
+is on an "if", pressing % will cycle between the "else", "elseif" and
+"end if" keywords.
+
+The following keywords are supported: >
+    if
+    elseif | elsif
+    else [if]
+    end if
+
+    [while condition] loop
+	leave
+	break
+	continue
+	exit
+    end loop
+
+    for
+	leave
+	break
+	continue
+	exit
+    end loop
+
+    do
+	statements
+    doend
+
+    case
+    when
+    when
+    default
+    end case
+
+    merge
+    when not matched
+    when matched
+
+    create[ or replace] procedure|function|event
+    returns
+
+
+1.2 Text Object Motions				*sql-object-motions*
+-----------------------
+Vim has a number of predefined keys for working with text |object-motions|.
+This filetype plugin attempts to translate these keys to maps which make sense
+for the SQL language.
+
+The following |Normal| mode and |Visual| mode maps exist (when you edit a SQL
+file): >
+    ]]		    move forward to the next 'begin'
+    [[		    move backwards to the previous 'begin'
+    ][		    move forward to the next 'end'
+    []		    move backwards to the previous 'end'
+
+
+1.3 Predefined Object Motions			*sql-predefined-objects*
+-----------------------------
+Most relational databases support various standard features, tables, indices,
+triggers and stored procedures.  Each vendor also has a variety of proprietary
+objects.  The next set of maps have been created to help move between these
+objects.  Depends on which database vendor you are using, the list of objects
+must be configurable.  The filetype plugin attempts to define many of the
+standard objects, plus many additional ones.  In order to make this as
+flexible as possible, you can override the list of objects from within your
+|vimrc| with the following: >
+    let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' .
+		\ ',schema,service,publication,database,datatype,domain' .
+		\ ',index,subscription,synchronization,view,variable'
+
+The following |Normal| mode and |Visual| mode maps have been created which use
+the above list: >
+    ]}		    move forward to the next 'create <object name>'
+    [{		    move backward to the previous 'create <object name>'
+
+Repeatedly pressing ]} will cycle through each of these create statements: >
+    create table t1 (
+	...
+    );
+
+    create procedure p1
+    begin
+	...
+    end;
+
+    create index i1 on t1 (c1);
+
+The default setting for g:ftplugin_sql_objects is: >
+    let g:ftplugin_sql_objects = 'function,procedure,event,' .
+		\ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
+		\ 'table,trigger' .
+		\ ',schema,service,publication,database,datatype,domain' .
+		\ ',index,subscription,synchronization,view,variable'
+
+The above will also handle these cases: >
+    create table t1 (
+	...
+    );
+    create existing table t2 (
+	...
+    );
+    create global temporary table t3 (
+	...
+    );
+
+By default, the ftplugin only searches for CREATE statements.  You can also
+override this via your |vimrc| with the following: >
+    let g:ftplugin_sql_statements = 'create,alter'
+
+The filetype plugin defines three types of comments: >
+    1.  --
+    2.  //
+    3.  /*
+	 *
+	 */
+
+The following |Normal| mode and |Visual| mode maps have been created to work
+with comments: >
+    ]"		    move forward to the beginning of a comment
+    ["		    move forward to the end of a comment
+
+
+
+1.4 Macros					   *sql-macros*
+----------
+Vim's feature to find macro definitions, |'define'|, is supported using this
+regular expression: >
+    \c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>
+
+This addresses the following code: >
+    CREATE VARIABLE myVar1 INTEGER;
+
+    CREATE PROCEDURE sp_test(
+	IN myVar2 INTEGER,
+	OUT myVar3 CHAR(30),
+	INOUT myVar4 NUMERIC(20,0)
+    )
+    BEGIN
+	DECLARE myVar5 INTEGER;
+
+	SELECT c1, c2, c3
+	  INTO myVar2, myVar3, myVar4
+	  FROM T1
+	 WHERE c4 = myVar1;
+    END;
+
+Place your cursor on "myVar1" on this line: >
+	 WHERE c4 = myVar1;
+		     ^
+
+Press any of the following keys: >
+    [d
+    [D
+    [CTRL-D
+
+
+==============================================================================
+2. SQL Dialects					*sql-dialects* *sql-types*
+						*sybase* *TSQL* *Transact-SQL*
+						*sqlanywhere*
+						*oracle* *plsql* *sqlj*
+						*sqlserver*
+						*mysql* *postgres* *psql*
+						*informix*
+
+All relational databases support SQL.  There is a portion of SQL that is
+portable across vendors (ex. CREATE TABLE, CREATE INDEX), but there is a
+great deal of vendor specific extensions to SQL.  Oracle supports the
+"CREATE OR REPLACE" syntax, column defaults specified in the CREATE TABLE
+statement and the procedural language (for stored procedures and triggers).
+
+The default Vim distribution ships with syntax highlighting based on Oracle's
+PL/SQL.  The default SQL indent script works for Oracle and SQL Anywhere.
+The default filetype plugin works for all vendors and should remain vendor
+neutral, but extendable.
+
+Vim currently has support for a variety of different vendors, currently this
+is via syntax scripts. Unfortunately, to flip between different syntax rules
+you must either create:
+    1.  New filetypes
+    2.  Custom autocmds
+    3.  Manual steps / commands
+
+The majority of people work with only one vendor's database product, it would
+be nice to specify a default in your |vimrc|.
+
+
+2.1 SQLSetType					*sqlsettype* *SQLSetType*
+--------------
+For the people that work with many different databases, it would be nice to be
+able to flip between the various vendors rules (indent, syntax) on a per
+buffer basis, at any time.  The ftplugin/sql.vim file defines this function: >
+    SQLSetType
+
+Executing this function without any parameters will set the indent and syntax
+scripts back to their defaults, see |sql-type-default|.  If you have turned
+off Vi's compatibility mode, |'compatible'|, you can use the <Tab> key to
+complete the optional parameter.
+
+After typing the function name and a space, you can use the completion to
+supply a parameter.  The function takes the name of the Vim script you want to
+source.  Using the |cmdline-completion| feature, the SQLSetType function will
+search the |'runtimepath'| for all Vim scripts with a name containing 'sql'.
+This takes the guess work out of the spelling of the names.  The following are
+examples: >
+    :SQLSetType
+    :SQLSetType sqloracle
+    :SQLSetType sqlanywhere
+    :SQLSetType sqlinformix
+    :SQLSetType mysql
+
+The easiest approach is to the use <Tab> character which will first complete
+the command name (SQLSetType), after a space and another <Tab>, display a list
+of available Vim script names: >
+    :SQL<Tab><space><Tab>
+
+
+2.2 SQL Dialect Default				*sql-type-default*
+-----------------------
+As mentioned earlier, the default syntax rules for Vim is based on Oracle
+(PL/SQL).  You can override this default by placing one of the following in
+your |vimrc|: >
+    let g:sql_type_default = 'sqlanywhere'
+    let g:sql_type_default = 'sqlinformix'
+    let g:sql_type_default = 'mysql'
+
+If you added the following to your |vimrc|: >
+    let g:sql_type_default = 'sqlinformix'
+
+The next time edit a SQL file the following scripts will be automatically
+loaded by Vim: >
+    ftplugin/sql.vim
+    syntax/sqlinformix.vim
+    indent/sql.vim
+>
+Notice indent/sqlinformix.sql was not loaded.  There is no indent file
+for Informix, Vim loads the default files if the specified files does not
+exist.
+
+
+==============================================================================
+3. Adding new SQL Dialects			*sql-adding-dialects*
+
+If you begin working with a SQL dialect which does not have any customizations
+available with the default Vim distribution you can check http://www.vim.org
+to see if any customization currently exist.  If not, you can begin by cloning
+an existing script.  Read |filetype-plugins| for more details.
+
+To help identify these scripts, try to create the files with a "sql" prefix.
+If you decide you wish to create customizations for the SQLite database, you
+can create any of the following: >
+    Unix
+	~/.vim/syntax/sqlite.vim
+	~/.vim/indent/sqlite.vim
+    Windows
+	$VIM/vimfiles/syntax/sqlite.vim
+	$VIM/vimfiles/indent/sqlite.vim
+
+No changes are necessary to the SQLSetType function.  It will automatically
+pickup the new SQL files and load them when you issue the SQLSetType command.
+
+
+==============================================================================
+4. OMNI SQL Completion				*sql-completion*
+						*omni-sql-completion*
+
+Vim 7 includes a code completion interface and functions which allows plugin
+developers to build in code completion for any language.  Vim 7 includes
+code completion for the SQL language.
+
+There are two modes to the SQL completion plugin, static and dynamic.  The
+static mode populates the popups with the data generated from current syntax
+highlight rules.  The dynamic mode populates the popups with data retrieved
+directly from a database.  This includes, table lists, column lists,
+procedures names and more.
+
+4.1 Static Mode					*sql-completion-static*
+---------------
+The static popups created contain items defined by the active syntax rules
+while editing a file with a filetype of SQL.  The plugin defines (by default)
+various maps to help the user refine the list of items to be displayed.
+The defaults static maps are: >
+    imap <buffer> <C-C>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O>
+    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
+    imap <buffer> <C-C>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O>
+    imap <buffer> <C-C>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O>
+    imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O>
+    imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O>
+
+The static maps (which are based on the syntax highlight groups) follow this
+format: >
+    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
+
+This command breaks down as: >
+    imap		   - Create an insert map
+    <buffer>		   - Only for this buffer
+    <C-C>k		   - Your choice of key map
+    <C-\><C-O>		   - Execute one command, return to Insert mode
+    :call sqlcomplete#Map( - Allows the SQL completion plugin to perform some
+			     housekeeping functions to allow it to be used in
+			     conjunction with other completion plugins.
+			     Indicate which item you want the SQL completion
+			     plugin to complete.
+			     In this case we are asking the plugin to display
+			     items from the syntax highlight group
+			     'sqlKeyword'.
+			     You can view a list of highlight group names to
+			     choose from by executing the
+				 :syntax list
+			     command while editing a SQL file.
+    'sqlKeyword'	   - Display the items for the sqlKeyword highlight
+			     group
+    )<CR>		   - Execute the :let command
+    <C-X><C-O>		   - Trigger the standard omni completion key stroke.
+			     Passing in 'sqlKeyword' instructs the SQL
+			     completion plugin to populate the popup with
+			     items from the sqlKeyword highlight group.  The
+			     plugin will also cache this result until Vim is
+			     restarted.  The syntax list is retrieved using
+			     the syntaxcomplete plugin.
+
+Using the 'syntax' keyword is a special case.  This instructs the
+syntaxcomplete plugin to retrieve all syntax items.  So this will effectively
+work for any of Vim's SQL syntax files.  At the time of writing this includes
+10 different syntax files for the different dialects of SQL (see section 3
+above, |sql-dialects|).
+
+Here are some examples of the entries which are pulled from the syntax files: >
+     All
+	 - Contains the contents of all syntax highlight groups
+     Statements
+	 - Select, Insert, Update, Delete, Create, Alter, ...
+     Functions
+	 - Min, Max, Trim, Round, Date, ...
+     Keywords
+	 - Index, Database, Having, Group, With
+     Options
+	 - Isolation_level, On_error, Qualify_owners, Fire_triggers, ...
+     Types
+	 - Integer, Char, Varchar, Date, DateTime, Timestamp, ...
+
+
+4.2 Dynamic Mode				*sql-completion-dynamic*
+----------------
+Dynamic mode populates the popups with data directly from a database.  In
+order for the dynamic feature to be enabled you must have the dbext.vim
+plugin installed, (http://vim.sourceforge.net/script.php?script_id=356).
+
+Dynamic mode is used by several features of the SQL completion plugin.
+After installing the dbext plugin see the dbext-tutorial for additional
+configuration and usage.  The dbext plugin allows the SQL completion plugin
+to display a list of tables, procedures, views and columns. >
+     Table List
+	 - All tables for all schema owners
+     Procedure List
+	 - All stored procedures for all schema owners
+     View List
+	 - All stored procedures for all schema owners
+     Column List
+	 - For the selected table, the columns that are part of the table
+
+To enable the popup, while in INSERT mode, use the following key combinations
+for each group (where <C-C> means hold the CTRL key down while pressing
+the space bar):
+     Table List		    - <C-C>t
+			    - <C-X><C-O> (the default map assumes tables)
+     Stored Procedure List  - <C-C>p
+     View List		    - <C-C>v
+     Column List	    - <C-C>c
+
+     Windows platform only  - When viewing a popup window displaying the list
+			      of tables, you can press <C-Right>, this will
+			      replace the table currently highlighted with
+			      the column list for that table.
+			    - When viewing a popup window displaying the list
+			      of columns, you can press <C-Left>, this will
+			      replace the column list with the list of tables.
+			    - This allows you to quickly drill down into a
+			      table to view it's columns and back again.
+
+The SQL completion plugin caches various lists that are displayed in
+the popup window.  This makes the re-displaying of these lists very
+fast.  If new tables or columns are added to the database it may become
+necessary to clear the plugins cache.  The default map for this is: >
+    imap <buffer> <C-C>R <C-\><C-O>:call sqlcomplete#Map('ResetCache')<CR><C-X><C-O>
+
+
+4.3 SQL Tutorial				*sql-completion-tutorial*
+----------------
+
+This tutorial is designed to take you through the common features of the SQL
+completion plugin so that: >
+     a) You gain familiarity with the plugin
+     b) You are introduced to some of the more common features
+     c) Show how to customize it to your preferences
+     d) Demonstrate "Best of Use" of the plugin (easiest way to configure).
+
+First, create a new buffer: >
+     :e tutorial.sql
+
+
+Static features
+---------------
+To take you through the various lists, simply enter insert mode, hit:
+    <C-C>s   (show SQL statements)
+At this point, you can page down through the list until you find "select".
+If you are familiar with the item you are looking for, for example you know
+the statement begins with the letter "s".  You can type ahead (without the
+quotes) "se" then press:
+    <C-Space>t
+Assuming "select" is highlighted in the popup list press <Enter> to choose
+the entry.  Now type:
+    * fr<C-C>a (show all syntax items)
+choose "from" from the popup list.
+
+When writing stored procedures using the "type" list is useful.  It contains
+a list of all the database supported types.  This may or may not be true
+depending on the syntax file you are using.  The SQL Anywhere syntax file
+(sqlanywhere.vim) has support for this: >
+     BEGIN
+	DECLARE customer_id <C-C>T <-- Choose a type from the list
+
+
+Dynamic features
+----------------
+To take advantage of the dynamic features you must first install the
+dbext.vim plugin (http://vim.sourceforge.net/script.php?script_id=356).  It
+also comes with a tutorial.  From the SQL completion plugin's perspective,
+the main feature dbext provides is a connection to a database.  dbext
+connection profiles are the most efficient mechanism to define connection
+information.  Once connections have been setup, the SQL completion plugin
+uses the features of dbext in the background to populate the popups.
+
+What follows assumes dbext.vim has been correctly configured, a simple test
+is to run the command, :DBListTable.  If a list of tables is shown, you know
+dbext.vim is working as expected.  If not, please consult the dbext.txt
+documentation.
+
+Assuming you have followed the dbext-tutorial you can press <C-C>t to
+display a list of tables.  There is a delay while dbext is creating the table
+list.  After the list is displayed press <C-W>.  This will remove both the
+popup window and the table name already chosen when the list became active. >
+
+ 4.3.1 Table Completion:			*sql-completion-tables*
+
+Press <C-C>t to display a list of tables from within the database you
+have connected via the dbext plugin.
+NOTE: All of the SQL completion popups support typing a prefix before pressing
+the key map.  This will limit the contents of the popup window to just items
+beginning with those characters.  >
+
+ 4.3.2 Column Completion:			*sql-completion-columns*
+
+The SQL completion plugin can also display a list of columns for particular
+tables.  The column completion is trigger via <C-C>c.
+
+NOTE: The following example uses <C-Right> to trigger a column list while
+the popup window is active.  This map is only available on the Windows
+platforms since *nix does not recognize CTRL and the right arrow held down
+together.  If you wish to enable this functionality on a *nix platform choose
+a key and create one of these mappings (see |sql-completion-maps| for further
+details on where to create this imap): >
+    imap <buffer> <your_keystroke> <C-R>=sqlcomplete#DrillIntoTable()<CR>
+    imap <buffer> <your_keystroke> <C-Y><C-\><C-O>:call sqlcomplete#Map('column')<CR><C-X><C-O>
+
+Example of using column completion:
+     - Press <C-C>t again to display the list of tables.
+     - When the list is displayed in the completion window, press <C-Right>,
+       this will replace the list of tables, with a list of columns for the
+       table highlighted (after the same short delay).
+     - If you press <C-Left>, this will again replace the column list with the
+       list of tables.  This allows you to drill into tables and column lists
+       very quickly.
+     - Press <C-Right> again while the same table is highlighted.  You will
+       notice there is no delay since the column list has been cached.  If you
+       change the schema of a cached table you can press <C-C>R, which
+       clears the SQL completion cache.
+     - NOTE: <C-Right> and <C-Left> have been designed to work while the
+       completion window is active.  If the completion popup window is
+       not active, a normal <C-Right> or <C-Left> will be executed.
+
+Lets look how we can build a SQL statement dynamically.  A select statement
+requires a list of columns.  There are two ways to build a column list using
+the SQL completion plugin. >
+    One column at a time:
+<       1. After typing SELECT press <C-C>t to display a list of tables.
+	2. Choose a table from the list.
+	3. Press <C-Right> to display a list of columns.
+	4. Choose the column from the list and press enter.
+	5. Enter a "," and press <C-C>c.  Generating a column list
+	   generally requires having the cursor on a table name.  The plugin
+	   uses this name to determine what table to retrieve the column list.
+	   In this step, since we are pressing <C-C>c without the cursor
+	   on a table name the column list displayed will be for the previous
+	   table.  Choose a different column and move on.
+	6. Repeat step 5 as often as necessary. >
+    All columns for a table:
+<	1. After typing SELECT press <C-C>t to display a list of tables.
+	2. Highlight the table you need the column list for.
+	3. Press <Enter> to choose the table from the list.
+	4. Press <C-C>l to request a comma separated list of all columns
+	   for this table.
+	5. Based on the table name chosen in step 3, the plugin attempts to
+	   decide on a reasonable table alias.	You are then prompted to
+	   either accept of change the alias.  Press OK.
+	6. The table name is replaced with the column list of the table is
+	   replaced with the comma separate list of columns with the alias
+	   prepended to each of the columns.
+	7. Step 3 and 4 can be replaced by pressing <C-C>L, which has
+	   a <C-Y> embedded in the map to choose the currently highlighted
+	   table in the list.
+
+There is a special provision when writing select statements.  Consider the
+following statement: >
+     select *
+       from customer c,
+	    contact cn,
+	    department as dp,
+	    employee e,
+	    site_options so
+      where c.
+
+In INSERT mode after typing the final "c." which is an alias for the
+"customer" table, you can press either <C-C>c or <C-X><C-O>.  This will
+popup a list of columns for the customer table.  It does this by looking back
+to the beginning of the select statement and finding a list of the tables
+specified in the FROM clause.  In this case it notes that in the string
+"customer c", "c" is an alias for the customer table.  The optional "AS"
+keyword is also supported, "customer AS c". >
+
+
+ 4.3.3 Procedure Completion:			*sql-completion-procedures*
+
+Similar to the table list, <C-C>p, will display a list of stored
+procedures stored within the database. >
+
+ 4.3.4 View Completion:				*sql-completion-views*
+
+Similar to the table list, <C-C>v, will display a list of views in the
+database.
+
+
+4.4 Completion Customization			*sql-completion-customization*
+----------------------------
+
+The SQL completion plugin can be customized through various options set in
+your |vimrc|: >
+    omni_sql_no_default_maps
+<       - Default: This variable is not defined
+	- If this variable is defined, no maps are created for OMNI
+	  completion.  See |sql-completion-maps| for further discussion.
+>
+    omni_sql_use_tbl_alias
+<	- Default: a
+	- This setting is only used when generating a comma separated
+	  column list.	By default the map is <C-C>l.  When generating
+	  a column list, an alias can be prepended to the beginning of each
+	  column, for example:	e.emp_id, e.emp_name.  This option has three
+	  settings: >
+		n - do not use an alias
+		d - use the default (calculated) alias
+		a - ask to confirm the alias name
+<
+	  An alias is determined following a few rules:
+	       1.  If the table name has an '_', then use it as a separator: >
+		   MY_TABLE_NAME --> MTN
+		   my_table_name --> mtn
+		   My_table_NAME --> MtN
+<	       2.  If the table name does NOT contain an '_', but DOES use
+		   mixed case then the case is used as a separator: >
+		   MyTableName --> MTN
+<	       3.  If the table name does NOT contain an '_', and does NOT
+		   use mixed case then the first letter of the table is used: >
+		   mytablename --> m
+		   MYTABLENAME --> M
+
+    omni_sql_ignorecase
+<	- Default: Current setting for|ignorecase|
+	- Valid settings are 0 or 1.
+	- When entering a few letters before initiating completion, the list
+	  will be filtered to display only the entries which begin with the
+	  list of characters.  When this option is set to 0, the list will be
+	  filtered using case sensitivity. >
+
+    omni_sql_include_owner
+<	- Default: 0, unless dbext.vim 3.00 has been installed
+	- Valid settings are 0 or 1.
+	- When completing tables, procedure or views and using dbext.vim 3.00
+	  or higher the list of objects will also include the owner name.
+	  When completing these objects and omni_sql_include_owner is enabled
+	  the owner name will be replaced. >
+
+    omni_sql_precache_syntax_groups
+<	- Default:
+	  ['syntax','sqlKeyword','sqlFunction','sqlOption','sqlType','sqlStatement']
+	- sqlcomplete can be used in conjunction with other completion
+	  plugins.  This is outlined at |sql-completion-filetypes|.  When the
+	  filetype is changed temporarily to SQL, the sqlcompletion plugin
+	  will cache the syntax groups listed in the List specified in this
+	  option.
+>
+
+4.5 SQL Maps					*sql-completion-maps*
+------------
+
+The default SQL maps have been described in other sections of this document in
+greater detail.  Here is a list of the maps with a brief description of each.
+
+Static Maps
+-----------
+These are maps which use populate the completion list using Vim's syntax
+highlighting rules. >
+    <C-C>a
+<       - Displays all SQL syntax items. >
+    <C-C>k
+<       - Displays all SQL syntax items defined as 'sqlKeyword'. >
+    <C-C>f
+<       - Displays all SQL syntax items defined as 'sqlFunction. >
+    <C-C>o
+<       - Displays all SQL syntax items defined as 'sqlOption'. >
+    <C-C>T
+<       - Displays all SQL syntax items defined as 'sqlType'. >
+    <C-C>s
+<       - Displays all SQL syntax items defined as 'sqlStatement'. >
+
+Dynamic Maps
+------------
+These are maps which use populate the completion list using the dbext.vim
+plugin. >
+    <C-C>t
+<       - Displays a list of tables. >
+    <C-C>p
+<       - Displays a list of procedures. >
+    <C-C>v
+<       - Displays a list of views. >
+    <C-C>c
+<       - Displays a list of columns for a specific table. >
+    <C-C>l
+<       - Displays a comma separated list of columns for a specific table. >
+    <C-C>L
+<       - Displays a comma separated list of columns for a specific table.
+	  This should only be used when the completion window is active. >
+    <C-Right>
+<	- Displays a list of columns for the table currently highlighted in
+	  the completion window.  <C-Right> is not recognized on most Unix
+	  systems, so this maps is only created on the Windows platform.
+	  If you would like the same feature on Unix, choose a different key
+	  and make the same map in your vimrc. >
+    <C-Left>
+<	- Displays the list of tables.
+	  <C-Left> is not recognized on most Unix systems, so this maps is
+	  only created on the Windows platform.  If you would like the same
+	  feature on Unix, choose a different key and make the same map in
+	  your vimrc. >
+    <C-C>R
+<	- This maps removes all cached items and forces the SQL completion
+	  to regenerate the list of items.
+
+Customizing Maps
+----------------
+You can create as many additional key maps as you like.  Generally, the maps
+will be specifying different syntax highlight groups.
+
+If you do not wish the default maps created or the key choices do not work on
+your platform (often a case on *nix) you define the following variable in
+your |vimrc|: >
+    let g:omni_sql_no_default_maps = 1
+
+Do no edit ftplugin/sql.vim directly!  If you change this file your changes
+will be over written on future updates.  Vim has a special directory structure
+which allows you to make customizations without changing the files that are
+included with the Vim distribution.  If you wish to customize the maps
+create an after/ftplugin/sql.vim (see |after-directory|) and place the same
+maps from the ftplugin/sql.vim in it using your own key strokes.  <C-C> was
+chosen since it will work on both Windows and *nix platforms.  On the windows
+platform you can also use <C-Space> or ALT keys.
+
+
+4.6 Using with other filetypes			*sql-completion-filetypes*
+------------------------------
+
+Many times SQL can be used with different filetypes.  For example Perl, Java,
+PHP, Javascript can all interact with a database.  Often you need both the SQL
+completion as well as the completion capabilities for the current language you
+are editing.
+
+This can be enabled easily with the following steps (assuming a Perl file): >
+    1.  :e test.pl
+    2.  :set filetype=sql
+    3.  :set ft=perl
+
+Step 1
+------
+Begins by editing a Perl file.  Vim automatically sets the filetype to
+"perl".  By default, Vim runs the appropriate filetype file
+ftplugin/perl.vim.  If you are using the syntax completion plugin by following
+the directions at |ft-syntax-omni| then the |'omnifunc'| option has been set to
+"syntax#Complete".  Pressing <C-X><C-O> will display the omni popup containing
+the syntax items for Perl.
+
+Step 2
+------
+Manually setting the filetype to 'sql' will also fire the appropriate filetype
+files ftplugin/sql.vim.  This file will define a number of buffer specific
+maps for SQL completion, see |sql-completion-maps|.  Now these maps have
+been created and the SQL completion plugin has been initialized.  All SQL
+syntax items have been cached in preparation.  The SQL filetype script detects
+we are attempting to use two different completion plugins.  Since the SQL maps
+begin with <C-C>, the maps will toggle the |'omnifunc'| when in use.  So you
+can use <C-X><C-O> to continue using the completion for Perl (using the syntax
+completion plugin) and <C-C> to use the SQL completion features.
+
+Step 3
+------
+Setting the filetype back to Perl sets all the usual "perl" related items back
+as they were.
+
+
+vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index b5ae414d684fb564abacf49f2e308abec65a1cc8..d191bb09805a41e58b33c9f55212923a7232426d 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 7.1.  Last change: 2007 May 11
+*gui.txt*       For Vim version 7.2a.  Last change: 2008 Jun 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -325,16 +325,22 @@ A different kind of selection is used when:
 - at the |hit-enter| prompt
 - whenever the current mode is not in the 'mouse' option
 - when holding the CTRL and SHIFT keys in the GUI
+
 Since Vim continues like the selection isn't there, and there is no mode
 associated with the selection, this is called modeless selection.  Any text in
 the Vim window can be selected.  Select the text by pressing the left mouse
 button at the start, drag to the end and release.  To extend the selection,
 use the right mouse button when 'mousemodel' is "extend", or the left mouse
 button with the shift key pressed when 'mousemodel' is "popup".
-The middle mouse button pastes the text.
 The selection is removed when the selected text is scrolled or changed.
+
 On the command line CTRL-Y can be used to copy the selection into the
-clipboard.  To do this from Insert mode, use CTRL-O : CTRL-Y <CR>.
+clipboard.  To do this from Insert mode, use CTRL-O : CTRL-Y <CR>.  When
+'guioptions' contains a or A (default on X11), the selection is automatically
+copied to the "* register.
+
+The middle mouse button can then paste the text.  On non-X11 systems, you can
+use CTRL-R +.
 
 
 3.4 Using Mouse on Status Lines				*gui-mouse-status*
diff --git a/runtime/doc/hangulin.txt b/runtime/doc/hangulin.txt
index 68178ffd763498047a636d58197afe44e4d50ad8..f1fa3b3dc0011c5e1dfa8b392d43fa191abffeb2 100644
--- a/runtime/doc/hangulin.txt
+++ b/runtime/doc/hangulin.txt
@@ -1,4 +1,4 @@
-*hangulin.txt*  For Vim version 7.1.  Last change: 2006 Apr 02
+*hangulin.txt*  For Vim version 7.2a.  Last change: 2006 Apr 02
 
 
 		  VIM REFERENCE MANUAL    by Chi-Deok Hwang and Sung-Hyun Nam
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index e099491ae4a6373350dd9194a1f076d46af57656..41b96151cbf31d79bf686abc0b61c578b9003c7e 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.1.  Last change: 2007 May 11
+*map.txt*       For Vim version 7.2a.  Last change: 2008 Jun 21
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -266,12 +266,13 @@ as a special key.
 
 
 1.3 MAPPING AND MODES					*:map-modes*
+			*mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o*
 
 There are five sets of mappings
 - For Normal mode: When typing commands.
 - For Visual mode: When typing commands while the Visual area is highlighted.
 - For Operator-pending mode: When an operator is pending (after "d", "y", "c",
-  etc.).  Example: ":omap { w" makes "y{" work like "yw" and "d{" like "dw".
+  etc.).  See below: |omap-info|.
 - For Insert mode.  These are also used in Replace mode.
 - For Command-line mode: When entering a ":" or "/" command.
 
@@ -282,7 +283,6 @@ to type a count with a zero.
 						*map-overview* *map-modes*
 Overview of which map command works in which mode:
 
-			*mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o*
     commands:				      modes: ~
 				       Normal  Visual+Select  Operator-pending ~
 :map   :noremap   :unmap   :mapclear	 yes	    yes		   yes
@@ -318,6 +318,19 @@ Therefore the ":map" and ":map!" commands enter and display mappings for
 several modes.  In Vim you can use the ":nmap", ":vmap", ":omap", ":cmap" and
 ":imap" commands to enter mappings for each mode separately.
 
+							*omap-info*
+Operator-pending mappings can be used to define a movement command that can be
+used with any operator.  Simple example: ":omap { w" makes "y{" work like "yw"
+and "d{" like "dw".
+
+To ignore the starting cursor position and select different text, you can have
+the omap start Visual mode to select the text to be operated upon.  Example
+that operates on a function name in the current line: >
+	onoremap <silent> F :<C-U>normal! 0f(hviw<CR>
+The CTRL-U (<C-U>) is used to remove the range that Vim may insert.  The
+Normal mode commands find the first '(' character and select the first word
+before it.  That usually is the function name.
+
 To enter a mapping for Normal and Visual mode, but not Operator-pending mode,
 first define it for all three modes, then unmap it for Operator-pending mode:
 	:map    xx something-difficult
@@ -473,7 +486,7 @@ scenario: >
 	:imap <M-C> foo
 	:set encoding=utf-8
 The mapping for <M-C> is defined with the latin1 encoding, resulting in a 0xc3
-byte.  If you type the character á (0xea <M-a>) in UTF-8 encoding this is the
+byte.  If you type the character á (0xe1 <M-a>) in UTF-8 encoding this is the
 two bytes 0xc3 0xa1.  You don't want the 0xc3 byte to be mapped then,
 otherwise it would be impossible to type the á character.
 
@@ -494,9 +507,9 @@ defined.  Changing "mapleader" after that has no effect for already defined
 mappings.
 
 					*<LocalLeader>* *maplocalleader*
-Just like <Leader>, except that it uses "maplocalleader" instead of
-"mapleader".  <LocalLeader> is to be used for mappings which are local to a
-buffer.  Example: >
+<LocalLeader> is just like <Leader>, except that it uses "maplocalleader"
+instead of "mapleader".  <LocalLeader> is to be used for mappings which are
+local to a buffer.  Example: >
       :map <LocalLeader>q  \DoItNow
 <
 In a global plugin <Leader> should be used and in a filetype plugin
@@ -1167,7 +1180,7 @@ defined, not where it is invoked!  Example:
 	:source script1.vim
 	:let s:error = "Wrong!"
 	:Error s:error
-Executing script2.vim will result in "None" to be echoed.  Not what you
+Executing script2.vim will result in "None" being echoed.  Not what you
 intended!  Calling a function may be an alternative.
 
 Completion behavior				*:command-completion* *E179*
@@ -1203,7 +1216,7 @@ Custom completion			*:command-completion-custom*
 					*E467* *E468*
 It is possible to define customized completion schemes via the "custom,{func}"
 or the "customlist,{func}" completion argument.  The {func} part should be a
-function with the following prototype >
+function with the following signature: >
 
 	:function {func}(ArgLead, CmdLine, CursorPos)
 
@@ -1370,10 +1383,10 @@ This will invoke: >
 
    :" A more substantial example
    :function Allargs(command)
-   :	let i = 0
-   :	while i < argc()
-   :	   if filereadable(argv(i))
-   :	    execute "e " . argv(i)
+   :   let i = 0
+   :   while i < argc()
+   :	  if filereadable(argv(i))
+   :	     execute "e " . argv(i)
    :	     execute a:command
    :      endif
    :      let i = i + 1
diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt
index e0aa815f961f40d0bccf4d0fa29d3f224bc7bc6e..2e94d85d6b3c8b19ad1b65ff83c59d5c77c9fe23 100644
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -1,4 +1,4 @@
-*mlang.txt*     For Vim version 7.1.  Last change: 2006 Jul 12
+*mlang.txt*     For Vim version 7.2a.  Last change: 2008 Jun 08
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -73,6 +73,9 @@ use of "-" and "_".
 			This sets $LC_TIME.
 			Without an argument both are set, and additionally
 			$LANG is set.
+			When compiled with the |+float| feature the LC_NUMERIC
+			value will always be set to "C", so that floating
+			point numbers use '.' as the decimal point.
 			This will make a difference for items that depend on
 			the language (some messages, time and date format).
 			Not fully supported on all systems
diff --git a/runtime/doc/os_qnx.txt b/runtime/doc/os_qnx.txt
index d694e1a83457950409dbd55c1fc265ede9aaf2ae..6d15e5157ff79e1d70107c6df2dfad21a1d732d0 100644
--- a/runtime/doc/os_qnx.txt
+++ b/runtime/doc/os_qnx.txt
@@ -1,4 +1,4 @@
-*os_qnx.txt*    For Vim version 7.1.  Last change: 2005 Mar 29
+*os_qnx.txt*    For Vim version 7.2a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Julian Kinraid
diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt
index 4062c6d6cdec200fbcd895eb62aa214603bddad2..6208d636c587396a4cd44c7bd41cf55c33539d19 100644
--- a/runtime/doc/os_vms.txt
+++ b/runtime/doc/os_vms.txt
@@ -1,4 +1,4 @@
-*os_vms.txt*    For Vim version 7.1.  Last change: 2006 Nov 18
+*os_vms.txt*    For Vim version 7.2a.  Last change: 2006 Nov 18
 
 
 		  VIM REFERENCE MANUAL
diff --git a/runtime/doc/pi_gzip.txt b/runtime/doc/pi_gzip.txt
index 64d1f30e697d716bdae634be3d9dec0901fa4b96..33343791617220e0567d9d91575251d6c9e65423 100644
--- a/runtime/doc/pi_gzip.txt
+++ b/runtime/doc/pi_gzip.txt
@@ -1,4 +1,4 @@
-*pi_gzip.txt*   For Vim version 7.1.  Last change: 2002 Oct 29
+*pi_gzip.txt*   For Vim version 7.2a.  Last change: 2002 Oct 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/print.txt b/runtime/doc/print.txt
index 447151a24750be36b1d3c1132ae0109e13f59731..cb4de431843da30e3c45494a6971050b58babd11 100644
--- a/runtime/doc/print.txt
+++ b/runtime/doc/print.txt
@@ -1,4 +1,4 @@
-*print.txt*     For Vim version 7.1.  Last change: 2007 Apr 22
+*print.txt*     For Vim version 7.2a.  Last change: 2008 Apr 30
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -26,6 +26,9 @@ systems a PostScript file is produced.  This can be directly sent to a
 PostScript printer.  For other printers a program like ghostscript needs to be
 used.
 
+Note: If you have problems printing with |:hardcopy|, an alternative is to use
+|:TOhtml| and print the resulting html file from a browser.
+
 					*:ha* *:hardcopy* *E237* *E238* *E324*
 :[range]ha[rdcopy][!] [arguments]
 			Send [range] lines (default whole file) to the
@@ -193,7 +196,8 @@ the font.  When omitted, the point size is 10.
 This defines the format of the header produced in |:hardcopy| output.  The
 option is defined in the same way as the 'statusline' option.  If Vim has not
 been compiled with the |+statusline| feature, this option has no effect and a
-simple default header is used, which shows the page number.
+simple default header is used, which shows the page number.  The same simple
+header is used when this option is empty.
 
 							*pmbcs-option*
 'printmbcharset' 'pmbcs'  string (default "")
diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt
index 361f4098f52cfe69be4992141cdab1bf3adabbe4..c5f114c9cea19b8ecc670983e70db9a5da5031c9 100644
--- a/runtime/doc/usr_03.txt
+++ b/runtime/doc/usr_03.txt
@@ -1,4 +1,4 @@
-*usr_03.txt*	For Vim version 7.1.  Last change: 2006 Jun 21
+*usr_03.txt*	For Vim version 7.2a.  Last change: 2006 Jun 21
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
diff --git a/runtime/doc/usr_43.txt b/runtime/doc/usr_43.txt
index 01cc4d626dc2408b88da810c06be39b670fce289..65ac9b64b028a40cc9b60a0aeefec6b7bfb73d20 100644
--- a/runtime/doc/usr_43.txt
+++ b/runtime/doc/usr_43.txt
@@ -1,4 +1,4 @@
-*usr_43.txt*	For Vim version 7.1.  Last change: 2006 Apr 24
+*usr_43.txt*	For Vim version 7.2a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
diff --git a/runtime/doc/version5.txt b/runtime/doc/version5.txt
index af050e2e69232dece449b05dbd5cbd65478807b2..538c24572d9f679a350526a8357c0f4b4bb00a42 100644
--- a/runtime/doc/version5.txt
+++ b/runtime/doc/version5.txt
@@ -1,4 +1,4 @@
-*version5.txt*  For Vim version 7.1.  Last change: 2007 May 11
+*version5.txt*  For Vim version 7.2a.  Last change: 2007 May 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt
index e5a8e3a9bae9a40be32190887d0ffa7cea246d76..4858bb88b9e0eaa667b3dc3b149159e3cc36a777 100644
--- a/runtime/doc/visual.txt
+++ b/runtime/doc/visual.txt
@@ -1,4 +1,4 @@
-*visual.txt*    For Vim version 7.1.  Last change: 2006 Sep 26
+*visual.txt*    For Vim version 7.2a.  Last change: 2006 Sep 26
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/ftplugin/gitcommit.vim b/runtime/ftplugin/gitcommit.vim
new file mode 100644
index 0000000000000000000000000000000000000000..bfc5b33f285932a9568ece616579cbfe50da62ba
--- /dev/null
+++ b/runtime/ftplugin/gitcommit.vim
@@ -0,0 +1,68 @@
+" Vim filetype plugin
+" Language:	git config file
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
+" Last Change:	2008 Jun 04
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+  finish
+endif
+
+runtime! ftplugin/git.vim
+let b:did_ftplugin = 1
+
+if &textwidth == 0
+  " make sure that log messages play nice with git-log on standard terminals
+  setlocal textwidth=72
+  if !exists("b:undo_ftplugin")
+      let b:undo_ftplugin = ""
+  endif
+  let b:undo_ftplugin = b:undo_ftplugin . "|setl tw<"
+endif
+
+if exists("g:no_gitcommit_commands") || v:version < 700
+  finish
+endif
+
+if !exists("b:git_dir")
+    let b:git_dir = expand("%:p:h")
+endif
+
+" Automatically diffing can be done with:
+"   autocmd FileType gitcommit DiffGitCached | wincmd p
+command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+
+function! s:diffcomplete(A,L,P)
+    let args = ""
+    if a:P <= match(a:L." -- "," -- ")+3
+        let args = args . "-p\n--stat\n--shortstat\n--summary\n--patch-with-stat\n--no-renames\n-B\n-M\n-C\n"
+    end
+    if exists("b:git_dir") && a:A !~ '^-'
+        let tree = fnamemodify(b:git_dir,':h')
+        if strpart(getcwd(),0,strlen(tree)) == tree
+            let args = args."\n".system("git diff --cached --name-only")
+        endif
+    endif
+    return args
+endfunction
+
+function! s:gitdiffcached(bang,gitdir,...)
+    let tree = fnamemodify(a:gitdir,':h')
+    let name = tempname()
+    let git = "git"
+    if strpart(getcwd(),0,strlen(tree)) != tree
+        let git .= " --git-dir=".(exists("*shellescape") ? shellescape(a:gitdir) : '"'.a:gitdir.'"')
+    endif
+    if a:0
+        let extra = join(map(copy(a:000),exists("*shellescape") ? 'shellescape(v:val)' : "'\"'.v:val.'\"'"))
+    else
+        let extra = "-p --stat=".&columns
+    endif
+    call system(git." diff --cached --no-color ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
+    exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name)
+    wincmd P
+    let b:git_dir = a:gitdir
+    command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+    nnoremap <silent> q :q<CR>
+    setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git
+endfunction
diff --git a/runtime/ftplugin/html.vim b/runtime/ftplugin/html.vim
index 3d723315df8869f0750e409b15b73eb92c425a86..4797f4b4604182857911b841d6c79ba23fcbe548 100644
--- a/runtime/ftplugin/html.vim
+++ b/runtime/ftplugin/html.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	html
 " Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2006 Apr 26
+" Last Changed: 2007 Nov 20
 " URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
@@ -13,63 +13,55 @@ let s:save_cpo = &cpo
 set cpo-=C
 
 setlocal commentstring=<!--%s-->
+setlocal matchpairs+=<:>
 
 if exists('&omnifunc')
-" Distinguish between HTML versions
-" To use with other HTML versions add another
-" elseif condition to match proper DOCTYPE
-setlocal omnifunc=htmlcomplete#CompleteTags
+    " Distinguish between HTML versions
+    " To use with other HTML versions add another
+    " elseif condition to match proper DOCTYPE
+    setlocal omnifunc=htmlcomplete#CompleteTags
 
-if &filetype == 'xhtml'
-	let b:html_omni_flavor = 'xhtml10s'
-else
-	let b:html_omni_flavor = 'html401t'
-endif
-let i = 1
-while i < 10 && i < line("$")
-	let line = getline(i)
-	if line =~ '<!DOCTYPE.*\<DTD HTML 3\.2'
-		let b:html_omni_flavor = 'html32'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.0 Transitional'
-		let b:html_omni_flavor = 'html40t'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.0 Frameset'
-		let b:html_omni_flavor = 'html40f'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.0'
-		let b:html_omni_flavor = 'html40s'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.01 Transitional'
-		let b:html_omni_flavor = 'html401t'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.01 Frameset'
-		let b:html_omni_flavor = 'html401f'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.01'
-		let b:html_omni_flavor = 'html401s'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.0 Transitional'
-		let b:html_omni_flavor = 'xhtml10t'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.0 Frameset'
-		let b:html_omni_flavor = 'xhtml10f'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.0 Strict'
-		let b:html_omni_flavor = 'xhtml10s'
-		break
-	elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.1'
-		let b:html_omni_flavor = 'xhtml11'
-		break
-	endif
-	let i += 1
-endwhile
+    if &filetype == 'xhtml'
+            let b:html_omni_flavor = 'xhtml10s'
+    else
+            let b:html_omni_flavor = 'html401t'
+    endif
+    let i = 1
+    let line = ""
+    while i < 10 && i < line("$")
+        let line = getline(i)
+        if line =~ '<!DOCTYPE.*\<DTD '
+            break
+        endif
+        let i += 1
+    endwhile
+    if line =~ '<!DOCTYPE.*\<DTD '  " doctype line found above
+        if line =~ ' HTML 3\.2'
+            let b:html_omni_flavor = 'html32'
+        elseif line =~ ' XHTML 1\.1'
+            let b:html_omni_flavor = 'xhtml11'
+        else    " two-step detection with strict/frameset/transitional
+            if line =~ ' XHTML 1\.0'
+                let b:html_omni_flavor = 'xhtml10'
+            elseif line =~ ' HTML 4\.01'
+                let b:html_omni_flavor = 'html401'
+            elseif line =~ ' HTML 4.0\>'
+                let b:html_omni_flavor = 'html40'
+            endif
+            if line =~ '\<Transitional\>'
+                let b:html_omni_flavor .= 't'
+            elseif line =~ '\<Frameset\>'
+                let b:html_omni_flavor .= 'f'
+            else
+                let b:html_omni_flavor .= 's'
+            endif
+        endif
+    endif
 endif
 
 " HTML:  thanks to Johannes Zellner and Benji Fisher.
 if exists("loaded_matchit")
     let b:match_ignorecase = 1
-    let b:match_skip = 's:Comment'
     let b:match_words = '<:>,' .
     \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
     \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
@@ -85,7 +77,7 @@ if has("gui_win32")
 endif
 
 " Undo the stuff we changed.
-let b:undo_ftplugin = "setlocal commentstring<"
+let b:undo_ftplugin = "setlocal commentstring< matchpairs< omnifunc<"
     \	" | unlet! b:match_ignorecase b:match_skip b:match_words b:browsefilter"
 
 " Restore the saved compatibility options.
diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
index 8ba3b2ea19e137e6328f89981044a23ffa38a540..d73460d07dba8a797be4201d7cee39b28e90581d 100644
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -2,7 +2,7 @@
 " Language:	PHP
 " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:		http://www.2072productions.com/vim/indent/php.vim
-" Last Change:  2007 February 25th
+" Last Change:  2007 Jun 24
 " Newsletter:   http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
 " Version:	1.24
 "
@@ -310,11 +310,11 @@ function! ResetOptions()
 
 	    setlocal comments=s1:/*,mb:*,ex:*/,://,:#
 
-	    setlocal formatoptions-=t
+	    " setlocal formatoptions-=t
 	    setlocal formatoptions+=q
 	    setlocal formatoptions+=r
 	    setlocal formatoptions+=o
-	    setlocal formatoptions+=w
+	    " setlocal formatoptions+=w
 	    setlocal formatoptions+=c
 	    setlocal formatoptions+=b
 	endif
diff --git a/runtime/indent/sql.vim b/runtime/indent/sql.vim
index f7cf834700183be2ebc5032ce89012e7bf9f3d45..4f82b96a55507e8bf3ca778e4ab470dcf3ce81d4 100644
--- a/runtime/indent/sql.vim
+++ b/runtime/indent/sql.vim
@@ -36,4 +36,4 @@ endif
 exec 'runtime indent/'.filename.'.vim'
 
 
-" vim:sw=4:ff=unix:
+" vim:sw=4:
diff --git a/runtime/indent/sqlanywhere.vim b/runtime/indent/sqlanywhere.vim
index c2f527ebc6f0efed8060bb68abd364aafc9d41f3..fdafb622e55deb449567eba167934528fb14b9b5 100644
--- a/runtime/indent/sqlanywhere.vim
+++ b/runtime/indent/sqlanywhere.vim
@@ -1,8 +1,8 @@
 " Vim indent file
 " Language:    SQL
 " Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Wed Sep 14 2005 10:21:15 PM
-" Version:     1.4
+" Last Change: Mon Apr 02 2007 9:13:47 AM
+" Version:     1.5
 " Download:    http://vim.sourceforge.net/script.php?script_id=495
 
 " Notes:
@@ -106,7 +106,7 @@ function s:CheckToIgnoreRightParan( prev_lnum, num_levels )
 
         " if getline(".") =~ '^)'
         let matching_paran = searchpair('(', '', ')', 'bW',
-                    \ 'IsColComment(line("."), col("."))')
+                    \ 's:IsColComment(line("."), col("."))')
 
         if matching_paran < 1
             " No match found
@@ -165,7 +165,7 @@ function s:GetStmtStarterIndent( keyword, curr_lnum )
                     \ '\%(\%(\<end\s\+\)\@<!\<if\>\)'.
                     \ '\)'
         let matching_lnum = searchpair(stmts, '', '\<end\>\zs', 'bW',
-                    \ 'IsColComment(line("."), col(".")) == 1')
+                    \ 's:IsColComment(line("."), col(".")) == 1')
         exec 'normal! $'
         if matching_lnum > 0 && matching_lnum < a:curr_lnum
             let ind = indent(matching_lnum)
@@ -177,7 +177,7 @@ function s:GetStmtStarterIndent( keyword, curr_lnum )
                     \ '',
                     \ '\%(\%(\<when\s\+others\>\)\|\%(\<end\s\+case\>\)\)',
                     \ 'bW',
-                    \ 'IsColComment(line("."), col(".")) == 1')
+                    \ 's:IsColComment(line("."), col(".")) == 1')
         exec 'normal! $'
         if matching_lnum > 0 && matching_lnum < a:curr_lnum
             let ind = indent(matching_lnum)
@@ -191,7 +191,7 @@ endfunction
 
 
 " Check if the line is a comment
-function IsLineComment(lnum)
+function s:IsLineComment(lnum)
     let rc = synIDattr(
                 \ synID(a:lnum,
                 \     match(getline(a:lnum), '\S')+1, 0)
@@ -203,7 +203,7 @@ endfunction
 
 
 " Check if the column is a comment
-function IsColComment(lnum, cnum)
+function s:IsColComment(lnum, cnum)
     let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name")
                 \           =~? "comment"
 
@@ -211,8 +211,9 @@ function IsColComment(lnum, cnum)
 endfunction
 
 
-" Check if the column is a comment
-function ModuloIndent(ind)
+" Instead of returning a column position, return
+" an appropriate value as a factor of shiftwidth.
+function s:ModuloIndent(ind)
     let ind = a:ind
 
     if ind > 0
@@ -235,7 +236,7 @@ function GetSQLIndent()
     " If the current line is a comment, leave the indent as is
     " Comment out this additional check since it affects the
     " indenting of =, and will not reindent comments as it should
-    " if IsLineComment(lnum) == 1
+    " if s:IsLineComment(lnum) == 1
     "     return ind
     " endif
 
@@ -246,9 +247,9 @@ function GetSQLIndent()
             return ind
         endif
 
-        if IsLineComment(prevlnum) == 1
+        if s:IsLineComment(prevlnum) == 1
             if getline(v:lnum) =~ '^\s*\*'
-                let ind = ModuloIndent(indent(prevlnum))
+                let ind = s:ModuloIndent(indent(prevlnum))
                 return ind + 1
             endif
             " If the previous line is a comment, then return -1
@@ -378,7 +379,7 @@ function GetSQLIndent()
     endif
 
     " echom 'final - indent ' . ind
-    return ModuloIndent(ind)
+    return s:ModuloIndent(ind)
 endfunction
 
-" vim:sw=4:ff=unix:
+" vim:sw=4:
diff --git a/runtime/indent/vhdl.vim b/runtime/indent/vhdl.vim
index d288be4ceb113e9d4415609e21e4b4c841aaf847..9940cc5b5e86270f7c03be11a24f1b841ac30ec6 100644
--- a/runtime/indent/vhdl.vim
+++ b/runtime/indent/vhdl.vim
@@ -1,8 +1,8 @@
 " VHDL indent ('93 syntax)
 " Language:    VHDL
 " Maintainer:  Gerald Lai <laigera+vim?gmail.com>
-" Version:     1.50
-" Last Change: 2007 Jan 29
+" Version:     1.54
+" Last Change: 2007 Aug 17
 " URL:         http://www.vim.org/scripts/script.php?script_id=1450
 
 " only load this indent file when no other was loaded
@@ -28,13 +28,13 @@ let s:ES = '\s*\%(--.*\)\=$'
 let s:NE = '\%(\<end\s\+\)\@<!'
 
 " option to disable alignment of generic/port mappings
-if !exists("g:vhdl_align_genportmap")
-  let g:vhdl_align_genportmap = 1
+if !exists("g:vhdl_indent_genportmap")
+  let g:vhdl_indent_genportmap = 1
 endif
 
 " option to disable alignment of right-hand side assignment "<=" statements
-if !exists("g:vhdl_align_rhsassign")
-  let g:vhdl_align_rhsassign = 1
+if !exists("g:vhdl_indent_rhsassign")
+  let g:vhdl_indent_rhsassign = 1
 endif
 
 " only define indent function once
@@ -54,6 +54,7 @@ function GetVHDLindent()
     let prevn = prevnonblank(prevn - 1)
     let prevs = getline(prevn)
   endwhile
+  let prevs_noi = substitute(prevs, '^\s*', '', '')
 
   " default indent starts as previous non-comment line's indent
   let ind = prevn > 0 ? indent(prevn) : 0
@@ -77,8 +78,8 @@ function GetVHDLindent()
   if curs =~ '^\s*--'
     let pn = curn - 1
     let ps = getline(pn)
-    if ps =~ '--'
-      return stridx(ps, '--')
+    if curs =~ '^\s*--\s' && ps =~ '--'
+      return indent(pn) + stridx(substitute(ps, '^\s*', '', ''), '--')
     else
       " find nextnonblank line that is not a comment
       let nn = nextnonblank(curn + 1)
@@ -106,14 +107,14 @@ function GetVHDLindent()
   if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
     " align closing ")" with opening "("
     if curs =~ '^\s*)'
-      return stridx(prevs, '(')
+      return ind2 + stridx(prevs_noi, '(')
     endif
-    let m = matchend(prevs, '(\s*\ze\w')
+    let m = matchend(prevs_noi, '(\s*\ze\w')
     if m != -1
-      return m
+      return ind2 + m
     else
-      if g:vhdl_align_genportmap
-        return stridx(prevs, '(') + &sw
+      if g:vhdl_indent_genportmap
+        return ind2 + stridx(prevs_noi, '(') + &sw
       else
         return ind2 + &sw
       endif
@@ -124,8 +125,8 @@ function GetVHDLindent()
   " keywords: variable + "<=" without ";" ending
   " where:    start of previous line
   if prevs =~? '^\s*\S\+\s*<=[^;]*'.s:ES
-    if g:vhdl_align_rhsassign
-      return matchend(prevs, '<=\s*\ze.')
+    if g:vhdl_indent_rhsassign
+      return ind2 + matchend(prevs_noi, '<=\s*\ze.')
     else
       return ind2 + &sw
     endif
diff --git a/runtime/keymap/sinhala-phonetic_utf-8.vim b/runtime/keymap/sinhala-phonetic_utf-8.vim
index cd8b2e8e9f9d1feae8b9d37f447dfbb2495b8e5e..adedc3f7cb32acf530e2361d2606e31c4346b32b 100644
--- a/runtime/keymap/sinhala-phonetic_utf-8.vim
+++ b/runtime/keymap/sinhala-phonetic_utf-8.vim
@@ -1,7 +1,7 @@
 " Vim Keymap file for Sinhala (Sri Lanka) (2003-11-02)
 " Maintainer  : Harshula Jayasuriya <harshula@gmail.com>
-" Last Updated: 2006-06-08
-" This is a static phonetic mapping for a standard US-English keyboard
+" Last Updated: 2007-06-30
+" This is a phonetic static mapping for a standard US-English keyboard
 " (qwerty)
 " http://www.nongnu.org/sinhala/doc/keymaps/sinhala-keyboard_3.html
 
@@ -48,18 +48,18 @@ J	<char-0x0da3>	" ඣ - mahaapraana jayanna (jha)
 z	<char-0x0da4>	" ඤ - taaluja naasikyaya (nya)
 Z	<char-0x0da5>	" ඥ - taaluja sanyooga naasikyaya (jnya)
 <A-j>	<char-0x0da6>	" ඦ - sanyaka jayanna (nyja)
-t	<char-0x0da7>	" ට - alpapraana ttayanna (tta)
-T	<char-0x0da8>	" ඨ - mahaapraana ttayanna (ttha)
-d	<char-0x0da9>	" ඩ - alpapraana ddayanna (dda)
-D	<char-0x0daa>	" ඪ - mahaapraana ddayanna (ddha)
+<A-t>	<char-0x0da7>	" ට - alpapraana ttayanna (tta)
+<A-T>	<char-0x0da8>	" ඨ - mahaapraana ttayanna (ttha)
+<A-d>	<char-0x0da9>	" ඩ - alpapraana ddayanna (dda)
+<A-D>	<char-0x0daa>	" ඪ - mahaapraana ddayanna (ddha)
 N	<char-0x0dab>	" ණ - muurdhaja nayanna (nna)
-x	<char-0x0dac>	" ඬ - sanyaka ddayanna (nndda)
-<A-t>	<char-0x0dad>	" ත - alpapraana tayanna (ta)
-<A-T>	<char-0x0dae>	" ථ - mahaapraana tayanna (tha)
-<A-d>	<char-0x0daf>	" ද - alpapraana dayanna (da)
-<A-D>	<char-0x0db0>	" ධ - mahaapraana dayanna (dha)
+X	<char-0x0dac>	" ඬ - sanyaka ddayanna (nndda)
+t	<char-0x0dad>	" ත - alpapraana tayanna (ta)
+T	<char-0x0dae>	" ථ - mahaapraana tayanna (tha)
+d	<char-0x0daf>	" ද - alpapraana dayanna (da)
+D	<char-0x0db0>	" ධ - mahaapraana dayanna (dha)
 n	<char-0x0db1>	" න - dantaja nayanna (na)
-X	<char-0x0db3>	" ඳ - sanyaka dayanna (nda)
+x	<char-0x0db3>	" ඳ - sanyaka dayanna (nda)
 p	<char-0x0db4>	" ප - alpapraana payanna (pa)
 P	<char-0x0db5>	" ඵ - mahaapraana payanna (pha)
 b	<char-0x0db6>	" බ - alpapraana bayanna (ba)
@@ -70,13 +70,13 @@ y	<char-0x0dba>	" ය - yayanna (ya)
 r	<char-0x0dbb>	" ර - rayanna (ra)
 l	<char-0x0dbd>	" ල - dantaja layanna (la)
 v	<char-0x0dc0>	" à·€ - vayanna (va)
-<A-s>	<char-0x0dc1>	" ශ - taaluja sayanna (sha)
-S	<char-0x0dc2>	" à·‚ - muurdhaja sayanna (ssa)
+S	<char-0x0dc1>	" ශ - taaluja sayanna (sha)
+<A-s>	<char-0x0dc2>	" à·‚ - muurdhaja sayanna (ssa)
 s	<char-0x0dc3>	" à·ƒ - dantaja sayanna (sa)
 h	<char-0x0dc4>	" à·„ - hayanna (ha)
 L	<char-0x0dc5>	" à·… - muurdhaja layanna (lla)
 f	<char-0x0dc6>	" à·† - fayanna (fa)
-<A-a>	<char-0x0dca>	" à·Š - al-lakuna
+<A-a>	<char-0x0dca>	"  à·Š - al-lakuna
 <A-A>	<char-0x0dcf>	"  ා - aela-pilla (aa)
 <A-w>	<char-0x0dd0>	"  ැ - ketti aeda-pilla (ae)
 <A-W>	<char-0x0dd1>	"  à·‘ - diga aeda-pilla (aae)
@@ -96,12 +96,12 @@ f	<char-0x0dc6>	" à·† - fayanna (fa)
 <A-L>	<char-0x0df3>	"  à·³ - diga gayanukitta (ll)
 <A-.>	<char-0x0df4>	" à·´ - kunddaliya (punctuation)
 
-R	<char-0x0dca><char-0x200d><char-0x0dbb>	"  ්‍ර - rakaransaya
+R	<char-0x0dca><char-0x200d><char-0x0dbb>	"  ්‍ර - rakaaranshaya
 Y	<char-0x0dca><char-0x200d><char-0x0dba>	"  ්‍ය - yansaya
-<A-r>	<char-0x0dbb><char-0x0dca><char-0x200d>	"  ර්‍ - repaya
+<A-r>	<char-0x0dbb><char-0x0dca><char-0x200d>	" ර්‍ - repaya
 
-<A-\>	<char-0x0dca><char-0x200d>	" join - conjunct letters cons 0DCA ZWJ cons
-<A-|>	<char-0x200d><char-0x0dca>	" touch - cons ZWJ 0DCA cons
+<A-,>	<char-0x0dca><char-0x200d>	" join - conjunct letters cons 0DCA ZWJ cons
+<A-/>	<char-0x200d><char-0x0dca>	" touch - cons ZWJ 0DCA cons
 
-<S-space>	<char-0x00a0>	" - no-break space. <S-space> didn't work.
-<C-space>	<char-0x200c>	" - ZWNJ. <A-space> doesn't work!
+<C-space>	<char-0x00a0>	" - no-break space. <S-space> didn't work.
+<A-space>	<char-0x200c>	" - ZWNJ. <A-space> doesn't work!
diff --git a/runtime/keymap/ukrainian-jcuken.vim b/runtime/keymap/ukrainian-jcuken.vim
index 09e56dff8637e2b774b64071a220aa0ea10e5158..fcc1c34f8b0da419f78be71253c01f9c6b34a6ae 100644
--- a/runtime/keymap/ukrainian-jcuken.vim
+++ b/runtime/keymap/ukrainian-jcuken.vim
@@ -4,7 +4,7 @@
 " Useful mainly with utf-8 but may work with other encodings
 
 " Maintainer:   Anatoli Sakhnik <sakhnik@gmail.com>
-" Last Changed: 2006 Mar 15
+" Last Changed: 2007 Nov 11
 
 " All characters are given literally, conversion to another encoding (e.g.,
 " UTF-8) should work.
@@ -88,3 +88,5 @@ $	*
 ^	,
 &	.
 *	;
+~       ~
+~~      <char-0x301>        Stress
diff --git a/runtime/macros/less.sh b/runtime/macros/less.sh
index 256936b5e3ca0bf0f729d1b1ed34a769bf94e36f..484c714ce69121126ff40e5f6fabff9360209ab0 100755
--- a/runtime/macros/less.sh
+++ b/runtime/macros/less.sh
@@ -2,8 +2,17 @@
 # Shell script to start Vim with less.vim.
 # Read stdin if no arguments were given.
 
-if test $# = 0; then
-  vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+if test -t 1; then
+ if test $# = 0; then
+   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+  else
+   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+  fi
 else
-  vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+  # Output is not a terminal, cat arguments or stdin
+  if test $# = 0; then
+    cat
+  else
+    cat "$@"
+  fi
 fi
diff --git a/runtime/plugin/vimballPlugin.vim b/runtime/plugin/vimballPlugin.vim
index 386e58f17085dba345048f4f7695351f12d346dd..502c8216f2ced5a86b15e79b1e0af8fdfc5e228a 100644
--- a/runtime/plugin/vimballPlugin.vim
+++ b/runtime/plugin/vimballPlugin.vim
@@ -1,6 +1,6 @@
 " vimballPlugin : construct a file containing both paths and files
 " Author: Charles E. Campbell, Jr.
-" Copyright: (c) 2004-2006 by Charles E. Campbell, Jr.
+" Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
 "            No warranty, express or implied.
@@ -16,18 +16,18 @@
 if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballPlugin = 1
+let g:loaded_vimballPlugin = "v27"
 let s:keepcpo              = &cpo
 set cpo&vim
 
 " ------------------------------------------------------------------------------
 " Public Interface: {{{1
-com! -ra   -complete=dir -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
-com! -na=? -complete=dir UseVimball  call vimball#Vimball(1,<f-args>)
-com! -na=0               VimballList call vimball#Vimball(0)
-com! -na=* -complete=dir RmVimball   call vimball#RmVimball(<f-args>)
+com! -ra   -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
+com! -na=? -complete=dir  UseVimball  call vimball#Vimball(1,<f-args>)
+com! -na=0                VimballList call vimball#Vimball(0)
+com! -na=* -complete=dir  RmVimball   call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
 au BufEnter  *.vba.gz,*.vba.bz2,*.vba.zip call vimball#Decompress(expand("<amatch>"))
-au BufEnter  *.vba setlocal noma bt=nofile fmr=[[[,]]] fdm=marker|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+au BufEnter  *.vba setlocal ff=unix noma bt=nofile fmr=[[[,]]] fdm=marker|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
 
 " =====================================================================
 " Restoration And Modelines: {{{1
diff --git a/runtime/spell/cleanadd.vim b/runtime/spell/cleanadd.vim
index cb7620fbf550bc03734d089fdd7835a5dce7cb51..6dc06921863bf8e3b3ea2301f790ea0ae7f29be5 100644
--- a/runtime/spell/cleanadd.vim
+++ b/runtime/spell/cleanadd.vim
@@ -1,6 +1,6 @@
 " Vim script to clean the ll.xxxxx.add files of commented out entries
 " Author:	Antonio Colombo, Bram Moolenaar
-" Last Update:	2006 Jan 19
+" Last Update:	2008 Jun 3
 
 " Time in seconds after last time an ll.xxxxx.add file was updated
 " Default is one second.
@@ -14,12 +14,19 @@ endif
 " Delete all comment lines, except the ones starting with ##.
 for s:fname in split(globpath(&rtp, "spell/*.add"), "\n")
   if filewritable(s:fname) && localtime() - getftime(s:fname) > g:spell_clean_limit
-    silent exe "tab split " . escape(s:fname, ' \')
-    echo "Processing" s:fname
+    if exists('*fnameescape')
+      let s:f = fnameescape(s:fname)
+    else
+      let s:f = escape(s:fname, ' \|<')
+    endif
+    silent exe "tab split " . s:f
+    echo "Processing" s:f
     silent! g/^#[^#]/d
     silent update
     close
+    unlet s:f
   endif
 endfor
+unlet s:fname
 
 echo "Done"
diff --git a/runtime/syntax/cmusrc.vim b/runtime/syntax/cmusrc.vim
index 3e84751a9b9b683e25ae0fd7ba7822ae476d8ec4..e36a69c6986ad3097a79b6843bf0c2bcc1b6e30d 100644
--- a/runtime/syntax/cmusrc.vim
+++ b/runtime/syntax/cmusrc.vim
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-07-22
+" Latest Revision:  2007-06-17
 
 if exists("b:current_syntax")
   finish
@@ -9,7 +9,7 @@ endif
 let s:cpo_save = &cpo
 set cpo&vim
 
-setlocal iskeyword=@,48-57,_,-
+setlocal iskeyword+=-
 
 syn keyword cmusrcTodo          contained TODO FIXME XXX NOTE
 
diff --git a/runtime/syntax/gp.vim b/runtime/syntax/gp.vim
index 4be13440d5477e705530b2ee63e2be6520fbc05c..2793aa4ed848ed82cc80c378c815626fb1b8f41b 100644
--- a/runtime/syntax/gp.vim
+++ b/runtime/syntax/gp.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
-" Language:	gp (version 2.2)
+" Language:	gp (version 2.4)
 " Maintainer:	Karim Belabas <Karim.Belabas@math.u-bordeaux.fr>
-" Last change:	2006 Apr 12
+" Last change:	2007 Oct 1
 " URL:		http://pari.math.u-bordeaux.fr
 
 if version < 600
@@ -15,7 +15,7 @@ syntax keyword gpStatement	break return next
 syntax keyword gpConditional	if
 syntax keyword gpRepeat		until while for fordiv forprime forstep forvec
 " storage class
-syntax keyword gpScope		local global
+syntax keyword gpScope		my local global
 " defaults
 syntax keyword gpInterfaceKey	colors compatible datadir debug debugfiles
 syntax keyword gpInterfaceKey	debugmem echo factor_add_primes format help
diff --git a/runtime/syntax/manual.vim b/runtime/syntax/manual.vim
index 5ac045f603defb30932e5a787e4f5dfc6a097ecf..5ea373180a505922b9501363e87e87f4cfdc1ff5 100644
--- a/runtime/syntax/manual.vim
+++ b/runtime/syntax/manual.vim
@@ -1,6 +1,6 @@
 " Vim syntax support file
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2001 Jun 04
+" Last Change:	2008 Jan 26
 
 " This file is used for ":syntax manual".
 " It installs the Syntax autocommands, but no the FileType autocommands.
@@ -17,9 +17,12 @@ endif
 let syntax_manual = 1
 
 " Remove the connection between FileType and Syntax autocommands.
-silent! au! syntaxset FileType
+if exists('#syntaxset')
+  au! syntaxset FileType
+endif
 
 " If the GUI is already running, may still need to install the FileType menu.
-if has("gui_running") && !exists("did_install_syntax_menu")
+" Don't do it when the 'M' flag is included in 'guioptions'.
+if has("menu") && has("gui_running") && !exists("did_install_syntax_menu") && &guioptions !~# 'M'
   source $VIMRUNTIME/menu.vim
 endif
diff --git a/runtime/syntax/msmessages.vim b/runtime/syntax/msmessages.vim
new file mode 100644
index 0000000000000000000000000000000000000000..60588571c9d6e6d568a9ae6ff1f1dd5a4a03cb73
--- /dev/null
+++ b/runtime/syntax/msmessages.vim
@@ -0,0 +1,135 @@
+" Vim syntax file
+" Language:	MS Message Text files (*.mc)
+" Maintainer:	Kevin Locke <kwl7@cornell.edu>
+" Last Change:	2008 April 09
+" Location:	http://kevinlocke.name/programs/vim/syntax/msmessages.vim
+
+" See format description at <http://msdn2.microsoft.com/en-us/library/aa385646.aspx>
+" This file is based on the rc.vim and c.vim
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" Common MS Messages keywords
+syn case ignore
+syn keyword msmessagesIdentifier MessageIdTypedef
+syn keyword msmessagesIdentifier SeverityNames
+syn keyword msmessagesIdentifier FacilityNames
+syn keyword msmessagesIdentifier LanguageNames
+syn keyword msmessagesIdentifier OutputBase
+
+syn keyword msmessagesIdentifier MessageId
+syn keyword msmessagesIdentifier Severity
+syn keyword msmessagesIdentifier Facility
+syn keyword msmessagesIdentifier OutputBase
+
+syn match msmessagesIdentifier /\<SymbolicName\>/ nextgroup=msmessagesIdentEq skipwhite
+syn match msmessagesIdentEq transparent /=/ nextgroup=msmessagesIdentDef skipwhite contained
+syn match msmessagesIdentDef display /\w\+/ contained
+" Note:  The Language keyword is highlighted as part of an msmessagesLangEntry
+
+" Set value
+syn case match
+syn region msmessagesSet	start="(" end=")" transparent fold contains=msmessagesName keepend
+syn match msmessagesName /\w\+/ nextgroup=msmessagesSetEquals skipwhite contained
+syn match msmessagesSetEquals /=/ display transparent nextgroup=msmessagesNumVal skipwhite contained
+syn match msmessagesNumVal	display transparent "\<\d\|\.\d" contains=msmessagesNumber,msmessagesFloat,msmessagesOctalError,msmessagesOctal nextgroup=msmessagesValSep
+syn match msmessagesValSep /:/ display nextgroup=msmessagesNameDef contained
+syn match msmessagesNameDef /\w\+/ display contained
+
+
+" Comments are converted to C source (by removing leading ;)
+" So we highlight the comments as C
+syn include @msmessagesC syntax/c.vim
+unlet b:current_syntax
+syn region msmessagesCComment matchgroup=msmessagesComment start=/;/ end=/$/ contains=@msmessagesC keepend
+
+" String and Character constants
+" Highlight special characters (those which have a escape) differently
+syn case ignore
+syn region msmessagesLangEntry start=/\<Language\>\s*=\s*\S\+\s*$/hs=e+1 end=/^\./ contains=msmessagesFormat,msmessagesLangEntryEnd,msmessagesLanguage keepend
+syn match msmessagesLanguage /\<Language\(\s*=\)\@=/ contained
+syn match msmessagesLangEntryEnd display /^\./ contained
+syn case match
+syn match msmessagesFormat display	/%[1-9]\d\?\(![-+0 #]*\d*\(\.\d\+\)\?\(h\|l\|ll\|I\|I32\|I64\)\?[aAcCdeEfgGinopsSuxX]!\)\?/ contained
+syn match msmessagesFormat display	/%[0.%\\br]/ contained
+syn match msmessagesFormat display	/%!\(\s\)\@=/ contained
+
+" Integer number, or floating point number without a dot and with "f".
+" Copied from c.vim
+syn case ignore
+"(long) integer
+syn match msmessagesNumber	display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match msmessagesNumber	display contained "\<0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match msmessagesOctal	display contained "\<0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=msmessagesOctalZero
+syn match msmessagesOctalZero	display contained "\<0"
+" flag an octal number with wrong digits
+syn match msmessagesOctalError	display contained "\<0\o*[89]\d*"
+syn match msmessagesFloat	display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match msmessagesFloat	display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match msmessagesFloat	display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match msmessagesFloat	display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+"hexadecimal floating point number, optional leading digits, with dot, with exponent
+syn match msmessagesFloat	display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
+"hexadecimal floating point number, with leading digits, optional dot, with exponent
+syn match msmessagesFloat	display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
+
+" Types (used in MessageIdTypedef statement)
+syn case match
+syn keyword msmessagesType	int long short char
+syn keyword msmessagesType	signed unsigned
+syn keyword msmessagesType	size_t ssize_t sig_atomic_t
+syn keyword msmessagesType	int8_t int16_t int32_t int64_t
+syn keyword msmessagesType	uint8_t uint16_t uint32_t uint64_t
+syn keyword msmessagesType	int_least8_t int_least16_t int_least32_t int_least64_t
+syn keyword msmessagesType	uint_least8_t uint_least16_t uint_least32_t uint_least64_t
+syn keyword msmessagesType	int_fast8_t int_fast16_t int_fast32_t int_fast64_t
+syn keyword msmessagesType	uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
+syn keyword msmessagesType	intptr_t uintptr_t
+syn keyword msmessagesType	intmax_t uintmax_t
+" Add some Windows datatypes that will be common in msmessages files
+syn keyword msmessagesType	BYTE CHAR SHORT SIZE_T SSIZE_T TBYTE TCHAR UCHAR USHORT
+syn keyword msmessagesType	DWORD DWORDLONG DWORD32 DWORD64
+syn keyword msmessagesType	INT INT32 INT64 UINT UINT32 UINT64
+syn keyword msmessagesType	LONG LONGLONG LONG32 LONG64
+syn keyword msmessagesType	ULONG ULONGLONG ULONG32 ULONG64
+
+" Sync to language entries, since they should be most common
+syn sync match msmessagesLangSync grouphere msmessagesLangEntry "\<Language\s*="
+syn sync match msmessagesLangEndSync grouphere NONE "^\."
+
+" Define the default highlighting.
+hi def link msmessagesNumber		Number
+hi def link msmessagesOctal		Number
+hi def link msmessagesFloat		Float
+hi def link msmessagesOctalError	msmessagesError
+hi def link msmessagesSetError		msmessagesError
+hi def link msmessagesError		Error
+hi def link msmessagesLangEntry		String
+hi def link msmessagesLangEntryEnd	Special
+hi def link msmessagesComment		Comment
+hi def link msmessagesFormat		msmessagesSpecial
+hi def link msmessagesSpecial		SpecialChar
+
+hi def link msmessagesType		Type
+hi def link msmessagesIdentifier	Identifier
+hi def link msmessagesLanguage		msmessagesIdentifier
+hi def link msmessagesName		msmessagesIdentifier
+hi def link msmessagesNameDef		Macro
+hi def link msmessagesIdentDef		Macro
+hi def link msmessagesValSep		Special
+hi def link msmessagesNameErr		Error
+
+let b:current_syntax = "msmessages"
+
+" vim: ts=8
diff --git a/runtime/syntax/netrw.vim b/runtime/syntax/netrw.vim
index e2baac8887bb6ae1ff700017c079d4044d6c3df7..62dab3feb60d9406899c20240109fc0e5e1c3a3a 100644
--- a/runtime/syntax/netrw.vim
+++ b/runtime/syntax/netrw.vim
@@ -1,7 +1,7 @@
 " Language   : Netrw Remote-Directory Listing Syntax
 " Maintainer : Charles E. Campbell, Jr.
-" Last change: Nov 27, 2006
-" Version    : 9
+" Last change: Feb 06, 2008
+" Version    : 12
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -13,40 +13,59 @@ endif
 
 " ---------------------------------------------------------------------
 " Directory List Syntax Highlighting: {{{1
-syn cluster NetrwGroup contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion
+syn cluster NetrwGroup		contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion,netrwCopyTgt
+syn cluster NetrwTreeGroup	contains=netrwDir,netrwSymLink,netrwExe
 
-syn match  netrwSpecial		"\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify
-syn match  netrwDir		"\.\{1,2}/"			contains=netrwClassify
-syn match  netrwDir		"\%(\S\+ \)*\S\+/"		contains=netrwClassify
-syn match  netrwDir		"^\S*/"				contains=netrwClassify
-syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"	contains=netrwDateSep skipwhite nextgroup=netrwTime
-syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  contains=netrwClassify
-syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify,netrwTreeIgnore
-syn match  netrwTreeIgnore contained "^\%(| \)*"
+syn match  netrwSpecial		"\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)"		contains=netrwClassify
+syn match  netrwDir		"\.\{1,2}/"						contains=netrwClassify
+syn match  netrwDir		"\%(\S\+ \)*\S\+/"					contains=netrwClassify
+syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"			contains=netrwDateSep skipwhite nextgroup=netrwTime
+syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  			contains=netrwClassify
+syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" 			contains=netrwClassify
+syn match  netrwTreeBar		"^\%(| \)*"						contains=netrwTreeBarSpace	nextgroup=@netrwTreeGroup
+syn match  netrwTreeBarSpace	" "				contained
 
 syn match  netrwClassify	"[*=|@/]\ze\%(\s\{2,}\|$\)"	contained
 syn match  netrwDateSep		"/"				contained
-syn match  netrwTime		"\d\{1,2}:\d\{2}:\d\{2}"	contained contains=netrwTimeSep
+syn match  netrwTime		"\d\{1,2}:\d\{2}:\d\{2}"	contained		contains=netrwTimeSep
 syn match  netrwTimeSep		":"
 
-syn match  netrwComment		'".*\%(\t\|$\)'			contains=@NetrwGroup
+syn match  netrwComment		'".*\%(\t\|$\)'						contains=@NetrwGroup
 syn match  netrwHide		'^"\s*\(Hid\|Show\)ing:'	skipwhite nextgroup=netrwHidePat
 syn match  netrwSlash		"/"				contained
 syn match  netrwHidePat		"[^,]\+"			contained skipwhite nextgroup=netrwHideSep
 syn match  netrwHideSep		","				contained transparent skipwhite nextgroup=netrwHidePat
 syn match  netrwSortBy		"Sorted by"			contained transparent skipwhite nextgroup=netrwList
 syn match  netrwSortSeq		"Sort sequence:"		contained transparent skipwhite nextgroup=netrwList
-syn match  netrwList		".*$"				contained contains=netrwComma
+syn match  netrwCopyTgt		"Copy/Move Tgt:"		contained transparent skipwhite nextgroup=netrwList
+syn match  netrwList		".*$"				contained		contains=netrwComma
 syn match  netrwComma		","				contained
-syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$" contains=netrwHelpCmd keepend contained
+syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$"	contains=netrwHelpCmd keepend contained
 syn match  netrwHelpCmd		"\S\ze:"			contained skipwhite nextgroup=netrwCmdSep
 syn match  netrwCmdSep		":"				contained nextgroup=netrwCmdNote
 syn match  netrwCmdNote		".\{-}\ze  "			contained
 syn match  netrwVersion		"(netrw.*)"			contained
 
+" -----------------------------
+" Special filetype highlighting {{{1
+" -----------------------------
+if exists("g:netrw_special_syntax") && netrw_special_syntax
+ syn match netrwBak		"\(\S\+ \)*\S\+\.bak\>"				contains=netrwTreeBar
+ syn match netrwCompress	"\(\S\+ \)*\S\+\.\%(gz\|bz2\|Z\|zip\)\>"	contains=netrwTreeBar
+ syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar
+ syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar
+ syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar
+ syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar
+ syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar
+ syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar
+ syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar
+ syn match netrwTilde		"\(\S\+ \)*\S\+\~\>"				contains=netrwTreeBar
+ syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar
+endif
+
 " ---------------------------------------------------------------------
 " Highlighting Links: {{{1
-if !exists("did_drchip_dbg_syntax")
+if !exists("did_drchip_netrwlist_syntax")
  let did_drchip_netrwlist_syntax= 1
  hi link netrwClassify	Function
  hi link netrwCmdSep	Delimiter
@@ -56,13 +75,26 @@ if !exists("did_drchip_dbg_syntax")
  hi link netrwHidePat	Statement
  hi link netrwList	Statement
  hi link netrwVersion	Identifier
- hi link netrwSymLink	Special
+ hi link netrwSymLink	Question
  hi link netrwExe	PreProc
  hi link netrwDateSep	Delimiter
 
+ hi link netrwTreeBar	Special
  hi link netrwTimeSep	netrwDateSep
  hi link netrwComma	netrwComment
  hi link netrwHide	netrwComment
+ hi link netrwMarkFile	Identifier
+
+ " special syntax highlighting (see :he g:netrw_special_syntax)
+ hi link netrwBak	NonText
+ hi link netrwCompress	Folded
+ hi link netrwData	DiffChange
+ hi link netrwLib	DiffChange
+ hi link netrwMakefile	DiffChange
+ hi link netrwObj	Folded
+ hi link netrwTilde	Folded
+ hi link netrwTmp	Folded
+ hi link netrwTags	Folded
 endif
 
 " Current Syntax: {{{1
diff --git a/runtime/syntax/pdf.vim b/runtime/syntax/pdf.vim
new file mode 100644
index 0000000000000000000000000000000000000000..86d80daa6a6de2cdc1f4662c07f27007de990183
--- /dev/null
+++ b/runtime/syntax/pdf.vim
@@ -0,0 +1,73 @@
+" Vim syntax file
+" Language:	PDF
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
+" Last Change:	2007 Dec 16
+
+if exists("b:current_syntax")
+    finish
+endif
+
+if !exists("main_syntax")
+    let main_syntax = 'pdf'
+endif
+
+syn include @pdfXML syntax/xml.vim
+
+syn case match
+
+syn cluster pdfObjects contains=pdfBoolean,pdfConstant,pdfNumber,pdfFloat,pdfName,pdfHexString,pdfString,pdfArray,pdfHash,pdfReference,pdfComment
+syn keyword pdfBoolean  true false contained
+syn keyword pdfConstant null       contained
+syn match   pdfNumber "[+-]\=\<\d\+\>"
+syn match   pdfFloat   "[+-]\=\<\%(\d\+\.\|\d*\.\d\+\)\>" contained
+
+syn match   pdfNameError "#\X\|#\x\X\|#00" contained containedin=pdfName
+syn match   pdfSpecialChar "#\x\x" contained containedin=pdfName
+syn match   pdfName   "/[^[:space:]\[\](){}<>/]*"   contained
+syn match   pdfHexError  "[^[:space:][:xdigit:]<>]" contained
+"syn match   pdfHexString "<\s*\x[^<>]*\x\s*>"    contained contains=pdfHexError
+"syn match   pdfHexString "<\s*\x\=\s*>"          contained
+syn region  pdfHexString matchgroup=pdfDelimiter start="<<\@!" end=">" contained contains=pdfHexError
+syn match   pdfStringError "\\."      contained containedin=pdfString
+syn match   pdfSpecialChar "\\\%(\o\{1,3\}\|[nrtbf()\\]\)"  contained containedin=pdfString
+syn region  pdfString matchgroup=pdfDelimiter start="\\\@<!(" end="\\\@<!)" contains=pdfString
+
+syn region  pdfArray  matchgroup=pdfOperator start="\[" end="\]" contains=@pdfObjects contained
+syn region  pdfHash   matchgroup=pdfOperator start="<<" end=">>" contains=@pdfObjects contained
+syn match   pdfReference "\<\d\+\s\+\d\+\s\+R\>"
+"syn keyword pdfOperator R contained containedin=pdfReference
+
+syn region  pdfObject matchgroup=pdfType start="\<obj\>"     end="\<endobj\>" contains=@pdfObjects
+syn region  pdfObject matchgroup=pdfType start="\<obj\r\=\n" end="\<endobj\>" contains=@pdfObjects fold
+
+" Do these twice.  The ones with only newlines are foldable
+syn region  pdfStream matchgroup=pdfType start="\<stream\r\=\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject
+syn region  pdfXMLStream matchgroup=pdfType start="\<stream\r\=\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML
+syn region  pdfStream matchgroup=pdfType start="\<stream\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject fold
+syn region  pdfXMLStream matchgroup=pdfType start="\<stream\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML fold
+
+syn region  pdfPreProc start="\<xref\%(\r\|\n\|\r\n\)" end="^trailer\%(\r\|\n\|\r\n\)" skipwhite skipempty nextgroup=pdfHash contains=pdfNumber fold
+syn keyword pdfPreProc startxref
+syn match   pdfComment  "%.*\%(\r\|\n\)" contains=pdfPreProc
+syn match   pdfPreProc  "^%\%(%EOF\|PDF-\d\.\d\)\(\r\|\n\)"
+
+hi def link pdfOperator     Operator
+hi def link pdfNumber       Number
+hi def link pdfFloat        Float
+hi def link pdfBoolean      Boolean
+hi def link pdfConstant     Constant
+hi def link pdfName         Identifier
+hi def link pdfNameError    pdfStringError
+hi def link pdfHexString    pdfString
+hi def link pdfHexError     pdfStringError
+hi def link pdfString       String
+hi def link pdfStringError  Error
+hi def link pdfSpecialChar  SpecialChar
+hi def link pdfDelimiter    Delimiter
+hi def link pdfType         Type
+hi def link pdfReference    Tag
+hi def link pdfStream       NonText
+hi def link pdfPreProc      PreProc
+hi def link pdfComment      Comment
+
+let b:current_syntax = "pdf"
diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim
index 42a88f4758ba5e9da0b72b5832f8321734a0b805..f68d7f4dac115e70d4ba5cda0f3f291afee01903 100644
--- a/runtime/syntax/ruby.vim
+++ b/runtime/syntax/ruby.vim
@@ -321,4 +321,4 @@ hi def link rubySpaceError		rubyError
 
 let b:current_syntax = "ruby"
 
-" vim: nowrap sw=2 sts=2 ts=8 noet ff=unix:
+" vim: nowrap sw=2 sts=2 ts=8 noet :
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim
index 93d4187f3fdbc431fc9ee8f1cad2eccc895eba1f..6f6927f67b74f78e79abeea7ebe5ba6fb4704241 100644
--- a/runtime/syntax/scheme.vim
+++ b/runtime/syntax/scheme.vim
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language:	Scheme (R5RS)
-" Last Change:	Nov 28, 2004
+" Last Change:	2007 Jun 16
 " Maintainer:	Sergey Khorev <sergey.khorev@gmail.com>
 " Original author:	Dirk van Deun <dirk@igwe.vub.ac.be>
 
@@ -265,6 +265,9 @@ if exists("b:is_chicken") || exists("is_chicken")
 	syn region ChickenC matchgroup=schemeComment start=+#>%+ end=+<#+ contains=@ChickenC
     endif
 
+    " suggested by Alex Queiroz
+    syn match schemeExtSyntax oneline    "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+    syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ 
 endif
 
 " Synchronization and the wrapping up...
diff --git a/runtime/syntax/tcsh.vim b/runtime/syntax/tcsh.vim
index 83649a75158708c40f53d01d2f34f503632efe76..94c4181c3af0fdfb3d0c091b98d458475609fa44 100644
--- a/runtime/syntax/tcsh.vim
+++ b/runtime/syntax/tcsh.vim
@@ -1,7 +1,6 @@
-" Vim syntax file
-" Language:		C-shell (tcsh)
-" Maintainer:		Gautam Iyer <gi1242@users.sourceforge.net>
-" Last Modified:	Thu 16 Nov 2006 01:07:04 PM PST
+" tcsh.vim: Vim syntax file for tcsh scripts
+" Maintainer:	Gautam Iyer <gi1242@users.sourceforge.net>
+" Modified:	Sat 16 Jun 2007 04:52:12 PM PDT
 "
 " Description: We break up each statement into a "command" and an "end" part.
 " All groups are either a "command" or part of the "end" of a statement (ie
@@ -13,64 +12,118 @@
 " causes history to come up as a keyword, which we want to avoid.
 
 " Quit when a syntax file was already loaded
-if exists("b:current_syntax")
+if exists('b:current_syntax')
   finish
 endif
 
+let s:oldcpo = &cpo
+set cpo&vim " Line continuation is used
+
+setlocal iskeyword+=-
+
 syn case match
 
 " ----- Clusters -----
 syn cluster tcshModifiers	contains=tcshModifier,tcshModifierError
 syn cluster tcshQuoteList	contains=tcshDQuote,tcshSQuote,tcshBQuote
-syn cluster tcshStatementEnds	contains=@tcshQuoteList,tcshComment,tcshUsrVar,TcshArgv,tcshSubst,tcshRedir,tcshMeta,tcshHereDoc,tcshSpecial,tcshArguement
-syn cluster tcshStatements	contains=tcshBuiltins,tcshCommands,tcshSet,tcshSetEnv,tcshAlias,tcshIf,tcshWhile
+syn cluster tcshStatementEnds	contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshRedir,tcshMeta,tcshHereDoc,tcshSpecial,tcshArguement
+syn cluster tcshStatements	contains=tcshBuiltin,tcshCommands,tcshIf,tcshWhile
 syn cluster tcshVarList		contains=tcshUsrVar,tcshArgv,tcshSubst
+syn cluster tcshConditions	contains=tcshCmdSubst,tcshParenExpr,tcshOperator,tcshNumber,@tcshVarList
+
+" ----- Errors -----
+" Define first, so can be easily overridden.
+syn match tcshError contained '\v\S.+'
 
 " ----- Statements -----
 " Tcsh commands: Any filename / modifiable variable (must be first!)
 syn match tcshCommands	'\v[a-zA-Z0-9\\./_$:-]+' contains=tcshSpecial,tcshUsrVar,tcshArgv,tcshVarError nextgroup=tcshStatementEnd
 
-" Builtin commands except (un)set(env), (un)alias, if, while, else
-syn keyword tcshBuiltins nextgroup=tcshStatementEnd alloc bg bindkey break breaksw builtins bye case cd chdir complete continue default dirs echo echotc end endif endsw eval exec exit fg filetest foreach getspath getxvers glob goto hashstat history hup inlib jobs kill limit log login logout ls ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat rootnode sched setpath setspath settc setty setxvers shift source stop suspend switch telltc time umask uncomplete unhash universe unlimit ver wait warp watchlog where which
+" Builtin commands except those treated specially. Currently (un)set(env),
+" (un)alias, if, while, else, bindkey
+syn keyword tcshBuiltin nextgroup=tcshStatementEnd alloc bg break breaksw builtins bye case cd chdir complete continue default dirs echo echotc end endif endsw eval exec exit fg filetest foreach getspath getxvers glob goto hashstat history hup inlib jobs kill limit log login logout ls ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat rootnode sched setpath setspath settc setty setxvers shift source stop suspend switch telltc time umask uncomplete unhash universe unlimit ver wait warp watchlog where which
 
-" StatementEnd is anything after a builtin / command till the lexical end of a
+" StatementEnd is anything after a built-in / command till the lexical end of a
 " statement (;, |, ||, |&, && or end of line)
-syn region tcshStatementEnd	transparent contained matchgroup=tcshBuiltins start='' end='\v\\@<!(;|\|[|&]?|\&\&|$)' contains=@tcshStatementEnds
+syn region tcshStatementEnd	transparent contained matchgroup=tcshBuiltin start='' end='\v\\@<!(;|\|[|&]?|\&\&|$)' contains=@tcshStatementEnds
 
 " set expressions (Contains shell variables)
 syn keyword tcshShellVar contained afsuser ampm argv autocorrect autoexpand autolist autologout backslash_quote catalog cdpath color colorcat command complete continue continue_args correct cwd dextract dirsfile dirstack dspmbyte dunique echo echo_style edit ellipsis fignore filec gid group histchars histdup histfile histlit history home ignoreeof implicitcd inputmode killdup killring listflags listjobs listlinks listmax listmaxrows loginsh logout mail matchbeep nobeep noclobber noding noglob nokanji nonomatch nostat notify oid owd path printexitvalue prompt prompt2 prompt3 promptchars pushdtohome pushdsilent recexact recognize_only_executables rmstar rprompt savedirs savehist sched shell shlvl status symlinks tcsh term time tperiod tty uid user verbose version visiblebell watch who wordchars
-syn keyword tcshSet	nextgroup=tcshSetEnd set unset
-syn region  tcshSetEnd	contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshShellVar,@tcshStatementEnds
+syn keyword tcshBuiltin	nextgroup=tcshSetEnd set unset
+syn region  tcshSetEnd	contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=tcshShellVar,@tcshStatementEnds
 
-" setenv expressions (Contains enviorenment variables)
+" setenv expressions (Contains environment variables)
 syn keyword tcshEnvVar contained AFSUSER COLUMNS DISPLAY EDITOR GROUP HOME HOST HOSTTYPE HPATH LANG LC_CTYPE LINES LS_COLORS MACHTYPE NOREBIND OSTYPE PATH PWD REMOTEHOST SHLVL SYSTYPE TERM TERMCAP USER VENDOR VISUAL
-syn keyword tcshSetEnv	nextgroup=tcshEnvEnd setenv unsetenv
-syn region  tcshEnvEnd	contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshEnvVar,@tcshStatementEnds
+syn keyword tcshBuiltin	nextgroup=tcshEnvEnd setenv unsetenv
+syn region  tcshEnvEnd	contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=tcshEnvVar,@tcshStatementEnds
 
 " alias and unalias (contains special aliases)
 syn keyword tcshAliases contained beepcmd cwdcmd jobcmd helpcommand periodic precmd postcmd shell
-syn keyword tcshAlias	nextgroup=tcshAliCmd skipwhite alias unalias
+syn keyword tcshBuiltin	nextgroup=tcshAliCmd skipwhite alias unalias
 syn match   tcshAliCmd	contained nextgroup=tcshAliEnd skipwhite '\v[\w-]+' contains=tcshAliases
-syn region  tcshAliEnd	contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=@tcshStatementEnds
+syn region  tcshAliEnd	contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=@tcshStatementEnds
 
-" if statements (contains expressions / operators)
-syn keyword tcshIf	nextgroup=tcshIfEnd if
-syn region  tcshIfEnd	contained matchgroup=tcshBuiltins start='' skip="\\$" end="\v<then>|$" contains=tcshOperator,tcshNumber,@tcshStatementEnds
+" if statements
+syn keyword tcshIf	nextgroup=tcshIfEnd skipwhite if
+syn region  tcshIfEnd	contained start='\S' skip='\\$' matchgroup=tcshBuiltin end='\v<then>|$' contains=@tcshConditions,tcshSpecial,@tcshStatementEnds
+syn region  tcshIfEnd	contained matchgroup=tcshBuiltin contains=@tcshConditions,tcshSpecial start='(' end='\v\)%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds 
+syn region  tcshIfEnd	contained matchgroup=tcshBuiltin contains=tcshCommands,tcshSpecial start='\v\{\s+' end='\v\s+\}%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds keepend
 
-" else statements (nextgroup if)
-syn keyword tcshElse	nextgroup=tcshIf skipwhite else
+" else statements
+syn keyword tcshBuiltin	nextgroup=tcshIf skipwhite else
 
 " while statements (contains expressions / operators)
-syn keyword tcshWhile	nextgroup=tcshWhEnd while
-syn region  tcshWhEnd	contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="\v$" contains=tcshOperator,tcshNumber,@tcshStatementEnds
+syn keyword tcshBuiltin	nextgroup=@tcshConditions,tcshSpecial skipwhite while
+
+" Conditions (for if and while)
+syn region tcshParenExpr contained contains=@tcshConditions,tcshSpecial matchgroup=tcshBuiltin start='(' end=')'
+syn region tcshCmdSubst  contained contains=tcshCommands matchgroup=tcshBuiltin start='\v\{\s+' end='\v\s+\}' keepend
+
+" Bindkey. Internal editor functions
+syn keyword tcshBindkeyFuncs contained backward-char backward-delete-char
+	    \ backward-delete-word backward-kill-line backward-word
+	    \ beginning-of-line capitalize-word change-case
+	    \ change-till-end-of-line clear-screen complete-word
+	    \ complete-word-fwd complete-word-back complete-word-raw
+	    \ copy-prev-word copy-region-as-kill dabbrev-expand delete-char
+	    \ delete-char-or-eof delete-char-or-list
+	    \ delete-char-or-list-or-eof delete-word digit digit-argument
+	    \ down-history downcase-word end-of-file end-of-line
+	    \ exchange-point-and-mark expand-glob expand-history expand-line
+	    \ expand-variables forward-char forward-word
+	    \ gosmacs-transpose-chars history-search-backward
+	    \ history-search-forward insert-last-word i-search-fwd
+	    \ i-search-back keyboard-quit kill-line kill-region
+	    \ kill-whole-line list-choices list-choices-raw list-glob
+	    \ list-or-eof load-average magic-space newline normalize-path
+	    \ normalize-command overwrite-mode prefix-meta quoted-insert
+	    \ redisplay run-fg-editor run-help self-insert-command
+	    \ sequence-lead-in set-mark-command spell-word spell-line
+	    \ stuff-char toggle-literal-history transpose-chars
+	    \ transpose-gosling tty-dsusp tty-flush-output tty-sigintr
+	    \ tty-sigquit tty-sigtsusp tty-start-output tty-stop-output
+	    \ undefined-key universal-argument up-history upcase-word
+	    \ vi-beginning-of-next-word vi-add vi-add-at-eol vi-chg-case
+	    \ vi-chg-meta vi-chg-to-eol vi-cmd-mode vi-cmd-mode-complete
+	    \ vi-delprev vi-delmeta vi-endword vi-eword vi-char-back
+	    \ vi-char-fwd vi-charto-back vi-charto-fwd vi-insert
+	    \ vi-insert-at-bol vi-repeat-char-fwd vi-repeat-char-back
+	    \ vi-repeat-search-fwd vi-repeat-search-back vi-replace-char
+	    \ vi-replace-mode vi-search-back vi-search-fwd vi-substitute-char
+	    \ vi-substitute-line vi-word-back vi-word-fwd vi-undo vi-zero
+	    \ which-command yank yank-pop e_copy_to_clipboard
+	    \ e_paste_from_clipboard e_dosify_next e_dosify_prev e_page_up
+	    \ e_page_down
+syn keyword tcshBuiltin nextgroup=tcshBindkeyEnd bindkey
+syn region tcshBindkeyEnd contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$' contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshMeta,tcshSpecial,tcshArguement,tcshBindkeyFuncs
 
 " Expressions start with @.
-syn match tcshExprStart "\v\@\s+" nextgroup=tcshExprVar
-syn match tcshExprVar	contained "\v\h\w*%(\[\d+\])?" contains=tcshShellVar,tcshEnvVar nextgroup=tcshExprOp
-syn match tcshExprOp	contained "++\|--"
-syn match tcshExprOp	contained "\v\s*\=" nextgroup=tcshExprEnd
-syn match tcshExprEnd	contained "\v.*$"hs=e+1 contains=tcshOperator,tcshNumber,@tcshVarList
-syn match tcshExprEnd	contained "\v.{-};"hs=e	contains=tcshOperator,tcshNumber,@tcshVarList
+syn match tcshExprStart '\v\@\s+' nextgroup=tcshExprVar
+syn match tcshExprVar	contained '\v\h\w*%(\[\d+\])?' contains=tcshShellVar,tcshEnvVar nextgroup=tcshExprOp
+syn match tcshExprOp	contained '++\|--'
+syn match tcshExprOp	contained '\v\s*\=' nextgroup=tcshExprEnd
+syn match tcshExprEnd	contained '\v.*$'hs=e+1 contains=@tcshConditions
+syn match tcshExprEnd	contained '\v.{-};'hs=e	contains=@tcshConditions
 
 " ----- Comments: -----
 syn match tcshComment	'#\s.*' contains=tcshTodo,tcshCommentTi,@Spell
@@ -85,12 +138,12 @@ syn match tcshTodo	contained '\v\c<todo>'
 " want VIM to assume that no backslash quote constructs exist.
 
 " Backquotes are treated as commands, and are not contained in anything
-if(exists("tcsh_backslash_quote") && tcsh_backslash_quote == 0)
-    syn region tcshSQuote	keepend contained start="\v\\@<!'" end="'" contains=@Spell
+if(exists('tcsh_backslash_quote') && tcsh_backslash_quote == 0)
+    syn region tcshSQuote	keepend contained start="\v\\@<!'" end="'"
     syn region tcshDQuote	keepend contained start='\v\\@<!"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
     syn region tcshBQuote	keepend start='\v\\@<!`' end='`' contains=@tcshStatements
 else
-    syn region tcshSQuote	contained start="\v\\@<!'" skip="\v\\\\|\\'" end="'" contains=@Spell
+    syn region tcshSQuote	contained start="\v\\@<!'" skip="\v\\\\|\\'" end="'"
     syn region tcshDQuote	contained start='\v\\@<!"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
     syn region tcshBQuote	keepend matchgroup=tcshBQuoteGrp start='\v\\@<!`' skip='\v\\\\|\\`' end='`' contains=@tcshStatements
 endif
@@ -101,17 +154,17 @@ endif
 syn match tcshVarError	'\v\$\S*'	contained
 
 " Modifiable Variables without {}.
-syn match tcshUsrVar contained "\v\$\h\w*%(\[\d+%(-\d+)?\])?" nextgroup=@tcshModifiers contains=tcshShellVar,tcshEnvVar
-syn match tcshArgv   contained "\v\$%(\d+|\*)" nextgroup=@tcshModifiers
+syn match tcshUsrVar contained '\v\$\h\w*%(\[\d+%(-\d+)?\])?' nextgroup=@tcshModifiers contains=tcshShellVar,tcshEnvVar
+syn match tcshArgv   contained '\v\$%(\d+|\*)' nextgroup=@tcshModifiers
 
 " Modifiable Variables with {}.
-syn match tcshUsrVar contained "\v\$\{\h\w*%(\[\d+%(-\d+)?\])?%(:\S*)?\}" contains=@tcshModifiers,tcshShellVar,tcshEnvVar
-syn match tcshArgv   contained "\v\$\{%(\d+|\*)%(:\S*)?\}" contains=@tcshModifiers
+syn match tcshUsrVar contained '\v\$\{\h\w*%(\[\d+%(-\d+)?\])?%(:\S*)?\}' contains=@tcshModifiers,tcshShellVar,tcshEnvVar
+syn match tcshArgv   contained '\v\$\{%(\d+|\*)%(:\S*)?\}' contains=@tcshModifiers
 
-" UnModifiable Substitutions. Order is important here.
-syn match tcshSubst contained	"\v\$[?#$!_<]" nextgroup=tcshModifierError
-syn match tcshSubst contained	"\v\$[%#?]%(\h\w*|\d+)" nextgroup=tcshModifierError contains=tcshShellVar,tcshEnvVar
-syn match tcshSubst contained	"\v\$\{[%#?]%(\h\w*|\d+)%(:\S*)?\}" contains=tcshModifierError contains=tcshShellVar,tcshEnvVar
+" Un-modifiable Substitutions. Order is important here.
+syn match tcshSubst contained	'\v\$[?#$!_<]' nextgroup=tcshModifierError
+syn match tcshSubst contained	'\v\$[%#?]%(\h\w*|\d+)' nextgroup=tcshModifierError contains=tcshShellVar,tcshEnvVar
+syn match tcshSubst contained	'\v\$\{[%#?]%(\h\w*|\d+)%(:\S*)?\}' contains=tcshModifierError contains=tcshShellVar,tcshEnvVar
 
 " Variable Name Expansion Modifiers (order important)
 syn match tcshModifierError	contained '\v:\S*'
@@ -119,61 +172,60 @@ syn match tcshModifier		contained '\v:[ag]?[htreuls&qx]' nextgroup=@tcshModifier
 
 " ----- Operators / Specials -----
 " Standard redirects (except <<) [<, >, >>, >>&, >>!, >>&!]
-syn match tcshRedir contained	"\v\<|\>\>?\&?!?"
+syn match tcshRedir contained	'\v\<|\>\>?\&?!?'
 
-" Metachars
-syn match tcshMeta  contained	"\v[]{}*?[]"
+" Meta-chars
+syn match tcshMeta  contained	'\v[]{}*?[]'
 
-" Here Documents (<<)
-syn region tcshHereDoc contained matchgroup=tcshRedir start="\v\<\<\s*\z(\h\w*)" end="^\z1$" contains=@tcshVarList,tcshSpecial
-syn region tcshHereDoc contained matchgroup=tcshRedir start="\v\<\<\s*'\z(\h\w*)'" start='\v\<\<\s*"\z(\h\w*)"$' start="\v\<\<\s*\\\z(\h\w*)$" end="^\z1$"
+" Here documents (<<)
+syn region tcshHereDoc contained matchgroup=tcshShellVar start='\v\<\<\s*\z(\h\w*)' end='^\z1$' contains=@tcshVarList,tcshSpecial
+syn region tcshHereDoc contained matchgroup=tcshShellVar start="\v\<\<\s*'\z(\h\w*)'" start='\v\<\<\s*"\z(\h\w*)"$' start='\v\<\<\s*\\\z(\h\w*)$' end='^\z1$'
 
 " Operators
-syn match tcshOperator	contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||"
-syn match tcshOperator	contained "[(){}]"
+syn match tcshOperator	contained '&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||'
+"syn match tcshOperator	contained '[(){}]'
 
 " Numbers
-syn match tcshNumber	contained "\v<-?\d+>"
+syn match tcshNumber	contained '\v<-?\d+>'
 
-" Arguements
-syn match tcshArguement	contained "\v\s@<=-(\w|-)*"
+" Arguments
+syn match tcshArguement	contained '\v\s@<=-(\w|-)*'
 
-" Special charectors
-syn match tcshSpecial	contained "\v\\@<!\\(\d{3}|.)"
+" Special characters. \xxx, or backslashed characters.
+"syn match tcshSpecial	contained '\v\\@<!\\(\d{3}|.)'
+syn match tcshSpecial	contained '\v\\%([0-7]{3}|.)'
 
-" ----- Syncronising -----
-if exists("tcsh_minlines")
-    exec "syn sync minlines=" . tcsh_minlines
+" ----- Synchronising -----
+if exists('tcsh_minlines')
+    exec 'syn sync minlines=' . tcsh_minlines
 else
-    syn sync minlines=15	" Except 'here' documents, nothing is long
+    syn sync minlines=100	" Some completions can be quite long
 endif
 
 " Define highlighting of syntax groups
-hi def link tcshBuiltins	statement
-hi def link tcshShellVar	preproc
+hi def link tcshError		Error
+hi def link tcshBuiltin		Statement
+hi def link tcshShellVar	Preproc
 hi def link tcshEnvVar		tcshShellVar
 hi def link tcshAliases		tcshShellVar
-hi def link tcshAliCmd		identifier
-hi def link tcshCommands	identifier
-hi def link tcshSet		tcshBuiltins
-hi def link tcshSetEnv		tcshBuiltins
-hi def link tcshAlias		tcshBuiltins
-hi def link tcshIf		tcshBuiltins
-hi def link tcshElse		tcshBuiltins
-hi def link tcshWhile		tcshBuiltins
-hi def link tcshExprStart	tcshBuiltins
+hi def link tcshAliCmd		Identifier
+hi def link tcshCommands	Identifier
+hi def link tcshIf		tcshBuiltin
+hi def link tcshWhile		tcshBuiltin
+hi def link tcshBindkeyFuncs	Function
+hi def link tcshExprStart	tcshBuiltin
 hi def link tcshExprVar		tcshUsrVar
 hi def link tcshExprOp		tcshOperator
 hi def link tcshExprEnd		tcshOperator
-hi def link tcshComment		comment
-hi def link tcshCommentTi	preproc
+hi def link tcshComment		Comment
+hi def link tcshCommentTi	Preproc
 hi def link tcshSharpBang	tcshCommentTi
-hi def link tcshTodo		todo
-hi def link tcshSQuote		constant
+hi def link tcshTodo		Todo
+hi def link tcshSQuote		Constant
 hi def link tcshDQuote		tcshSQuote
-hi def link tcshBQuoteGrp	include
-hi def link tcshVarError	error
-hi def link tcshUsrVar		type
+hi def link tcshBQuoteGrp	Include
+hi def link tcshVarError	Error
+hi def link tcshUsrVar		Type
 hi def link tcshArgv		tcshUsrVar
 hi def link tcshSubst		tcshUsrVar
 hi def link tcshModifier	tcshArguement
@@ -181,9 +233,12 @@ hi def link tcshModifierError	tcshVarError
 hi def link tcshMeta		tcshSubst
 hi def link tcshRedir		tcshOperator
 hi def link tcshHereDoc		tcshSQuote
-hi def link tcshOperator	operator
-hi def link tcshNumber		number
-hi def link tcshArguement	special
-hi def link tcshSpecial		specialchar
+hi def link tcshOperator	Operator
+hi def link tcshNumber		Number
+hi def link tcshArguement	Special
+hi def link tcshSpecial		SpecialChar
+
+let &cpo = s:oldcpo
+unlet s:oldcpo
 
-let b:current_syntax = "tcsh"
+let b:current_syntax = 'tcsh'
diff --git a/runtime/tutor/README_ami.txt b/runtime/tutor/README_ami.txt
new file mode 100644
index 0000000000000000000000000000000000000000..13fa67d626dd2959c5bdf69d75bf35e14afc3e57
--- /dev/null
+++ b/runtime/tutor/README_ami.txt
@@ -0,0 +1,32 @@
+README_ami.txt for version 7.2a of Vim: Vi IMproved.
+
+This file explains the installation of Vim on Amiga systems.
+See README.txt for general information about Vim.
+
+
+Unpack the distributed files in the place where you want to keep them.  It is
+wise to have a "vim" directory to keep your vimrc file and any other files you
+change.  The distributed files go into a subdirectory.  This way you can
+easily upgrade to a new version.  For example:
+
+  dh0:editors/vim		contains your vimrc and modified files
+  dh0:editors/vim/vim54		contains the Vim version 5.4 distributed files
+  dh0:editors/vim/vim55		contains the Vim version 5.5 distributed files
+
+You would then unpack the archives like this:
+
+  cd dh0:editors
+  tar xf t:vim60bin.tar
+  tar xf t:vim60rt.tar
+
+Set the $VIM environment variable to point to the top directory of your Vim
+files.  For the above example:
+
+  set VIM=dh0:editors/vim
+
+Vim version 5.4 will look for your vimrc file in $VIM, and for the runtime
+files in $VIM/vim54.  See ":help $VIM" for more information.
+
+Make sure the Vim executable is in your search path.  Either copy the Vim
+executable to a directory that is in your search path, or (preferred) modify
+the search path to include the directory where the Vim executable is.
diff --git a/runtime/tutor/runtime/delmenu.vim b/runtime/tutor/runtime/delmenu.vim
new file mode 100644
index 0000000000000000000000000000000000000000..81df87d3463ac95b03dbd3563b6cb2316ef37f27
--- /dev/null
+++ b/runtime/tutor/runtime/delmenu.vim
@@ -0,0 +1,25 @@
+" This Vim script deletes all the menus, so that they can be redefined.
+" Warning: This also deletes all menus defined by the user!
+"
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2001 May 27
+
+aunmenu *
+
+silent! unlet did_install_default_menus
+silent! unlet did_install_syntax_menu
+if exists("did_menu_trans")
+  menutrans clear
+  unlet did_menu_trans
+endif
+
+silent! unlet find_help_dialog
+
+silent! unlet menutrans_help_dialog
+silent! unlet menutrans_path_dialog
+silent! unlet menutrans_tags_dialog
+silent! unlet menutrans_textwidth_dialog
+silent! unlet menutrans_fileformat_dialog
+silent! unlet menutrans_no_file
+
+" vim: set sw=2 :
diff --git a/runtime/tutor/runtime/macmap.vim b/runtime/tutor/runtime/macmap.vim
new file mode 100644
index 0000000000000000000000000000000000000000..dc76f15f96bbdafdc240ec36741d8860f5e86d6e
--- /dev/null
+++ b/runtime/tutor/runtime/macmap.vim
@@ -0,0 +1,75 @@
+" System gvimrc file for Mac OS X
+" Author:	Benji Fisher <benji@member.AMS.org>
+" Last Change: Thu Mar 09 09:00 AM 2006 EST
+"
+" Define Mac-standard keyboard shortcuts.
+
+" We don't change 'cpoptions' here, because it would not be set properly when
+" a .vimrc file is found later.  Thus don't use line continuation and use
+" <special> in mappings.
+
+nnoremap <special> <D-n> :confirm enew<CR>
+vmap <special> <D-n> <Esc><D-n>gv
+imap <special> <D-n> <C-O><D-n>
+cmap <special> <D-n> <C-C><D-n>
+omap <special> <D-n> <Esc><D-n>
+
+nnoremap <special> <D-o> :browse confirm e<CR>
+vmap <special> <D-o> <Esc><D-o>gv
+imap <special> <D-o> <C-O><D-o>
+cmap <special> <D-o> <C-C><D-o>
+omap <special> <D-o> <Esc><D-o>
+
+nnoremap <silent> <special> <D-w> :if winheight(2) < 0 <Bar> confirm enew <Bar> else <Bar> confirm close <Bar> endif<CR>
+vmap <special> <D-w> <Esc><D-w>gv
+imap <special> <D-w> <C-O><D-w>
+cmap <special> <D-w> <C-C><D-w>
+omap <special> <D-w> <Esc><D-w>
+
+nnoremap <silent> <special> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar> else<Bar>confirm w<Bar>endif<CR>
+vmap <special> <D-s> <Esc><D-s>gv
+imap <special> <D-s> <C-O><D-s>
+cmap <special> <D-s> <C-C><D-s>
+omap <special> <D-s> <Esc><D-s>
+
+nnoremap <special> <D-S-s> :browse confirm saveas<CR>
+vmap <special> <D-S-s> <Esc><D-s>gv
+imap <special> <D-S-s> <C-O><D-s>
+cmap <special> <D-S-s> <C-C><D-s>
+omap <special> <D-S-s> <Esc><D-s>
+
+" From the Edit menu of SimpleText:
+nnoremap <special> <D-z> u
+vmap <special> <D-z> <Esc><D-z>gv
+imap <special> <D-z> <C-O><D-z>
+cmap <special> <D-z> <C-C><D-z>
+omap <special> <D-z> <Esc><D-z>
+
+vnoremap <special> <D-x> "+x
+
+vnoremap <special> <D-c> "+y
+
+cnoremap <special> <D-c> <C-Y>
+
+nnoremap <special> <D-v> "+gP
+cnoremap <special> <D-v> <C-R>+
+execute 'vnoremap <script> <special> <D-v>' paste#paste_cmd['v']
+execute 'inoremap <script> <special> <D-v>' paste#paste_cmd['i']
+
+nnoremap <silent> <special> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar> else<Bar>exe ":norm ggVG"<Bar>endif<CR>
+vmap <special> <D-a> <Esc><D-a>
+imap <special> <D-a> <Esc><D-a>
+cmap <special> <D-a> <C-C><D-a>
+omap <special> <D-a> <Esc><D-a>
+
+nnoremap <special> <D-f> /
+vmap <special> <D-f> <Esc><D-f>
+imap <special> <D-f> <Esc><D-f>
+cmap <special> <D-f> <C-C><D-f>
+omap <special> <D-f> <Esc><D-f>
+
+nnoremap <special> <D-g> n
+vmap <special> <D-g> <Esc><D-g>
+imap <special> <D-g> <C-O><D-g>
+cmap <special> <D-g> <C-C><D-g>
+omap <special> <D-g> <Esc><D-g>
diff --git a/runtime/tutor/runtime/macros.info b/runtime/tutor/runtime/macros.info
new file mode 100755
index 0000000000000000000000000000000000000000..bbb0b4f16b944ccf1b417013e32ec14eef69d68e
Binary files /dev/null and b/runtime/tutor/runtime/macros.info differ
diff --git a/runtime/tutor/runtime/optwin.vim b/runtime/tutor/runtime/optwin.vim
new file mode 100644
index 0000000000000000000000000000000000000000..7392b53bdc225252c2cd7ce8ec3b18d49dbb14eb
--- /dev/null
+++ b/runtime/tutor/runtime/optwin.vim
@@ -0,0 +1,1312 @@
+" These commands create the option window.
+"
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2008 May 12
+
+" If there already is an option window, jump to that one.
+if bufwinnr("option-window") > 0
+  let s:thiswin = winnr()
+  while 1
+    if @% == "option-window"
+      finish
+    endif
+    exe "norm! \<C-W>w"
+    if s:thiswin == winnr()
+      break
+    endif
+  endwhile
+endif
+
+" Make sure the '<' flag is not included in 'cpoptions', otherwise <CR> would
+" not be recognized.  See ":help 'cpoptions'".
+let s:cpo_save = &cpo
+set cpo&vim
+
+" function to be called when <CR> is hit in the option-window
+fun! <SID>CR()
+
+  " If on a continued comment line, go back to the first comment line
+  let lnum = line(".")
+  let line = getline(lnum)
+  while line[0] == "\t"
+    let lnum = lnum - 1
+    let line = getline(lnum)
+  endwhile
+
+  " <CR> on a "set" line executes the option line
+  if match(line, "^ \tset ") >= 0
+
+    " For a local option: go to the previous window
+    " If this is a help window, go to the window below it
+    let thiswin = winnr()
+    let local = <SID>Find(lnum)
+    if local >= 0
+      exe line
+      call <SID>Update(lnum, line, local, thiswin)
+    endif
+
+  " <CR> on a "option" line shows help for that option
+  elseif match(line, "^[a-z]") >= 0
+    let name = substitute(line, '\([^\t]*\).*', '\1', "")
+    exe "help '" . name . "'"
+
+  " <CR> on an index line jumps to the group
+  elseif match(line, '^ \=[0-9]') >= 0
+    exe "norm! /" . line . "\<CR>zt"
+  endif
+endfun
+
+" function to be called when <Space> is hit in the option-window
+fun! <SID>Space()
+
+  let lnum = line(".")
+  let line = getline(lnum)
+
+  " <Space> on a "set" line refreshes the option line
+  if match(line, "^ \tset ") >= 0
+
+    " For a local option: go to the previous window
+    " If this is a help window, go to the window below it
+    let thiswin = winnr()
+    let local = <SID>Find(lnum)
+    if local >= 0
+      call <SID>Update(lnum, line, local, thiswin)
+    endif
+
+  endif
+endfun
+
+" find the window in which the option applies
+" returns 0 for global option, 1 for local option, -1 for error
+fun! <SID>Find(lnum)
+    if getline(a:lnum - 1) =~ "(local to"
+      let local = 1
+      let thiswin = winnr()
+      exe "norm! \<C-W>p"
+      if exists("b:current_syntax") && b:current_syntax == "help"
+	exe "norm! \<C-W>j"
+	if winnr() == thiswin
+	  exe "norm! \<C-W>j"
+	endif
+      endif
+    else
+      let local = 0
+    endif
+    if local && (winnr() == thiswin || (exists("b:current_syntax")
+	\ && b:current_syntax == "help"))
+      echo "Don't know in which window"
+      let local = -1
+    endif
+    return local
+endfun
+
+" Update a "set" line in the option window
+fun! <SID>Update(lnum, line, local, thiswin)
+  " get the new value of the option and update the option window line
+  if match(a:line, "=") >= 0
+    let name = substitute(a:line, '^ \tset \([^=]*\)=.*', '\1', "")
+  else
+    let name = substitute(a:line, '^ \tset \(no\)\=\([a-z]*\).*', '\2', "")
+  endif
+  if name == "pt" && &pt =~ "\x80"
+    let val = <SID>PTvalue()
+  else
+    exe "let val = substitute(&" . name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+  endif
+  if a:local
+    exe "norm! " . a:thiswin . "\<C-W>w"
+  endif
+  if match(a:line, "=") >= 0 || (val != "0" && val != "1")
+    call setline(a:lnum, " \tset " . name . "=" . val)
+  else
+    if val
+      call setline(a:lnum, " \tset " . name . "\tno" . name)
+    else
+      call setline(a:lnum, " \tset no" . name . "\t" . name)
+    endif
+  endif
+  set nomodified
+endfun
+
+" Reset 'title' and 'icon' to make it work faster.
+let s:old_title = &title
+let s:old_icon = &icon
+let s:old_sc = &sc
+let s:old_ru = &ru
+set notitle noicon nosc noru
+
+" If the current window is a help window, try finding a non-help window.
+" Relies on syntax highlighting to be switched on.
+let s:thiswin = winnr()
+while exists("b:current_syntax") && b:current_syntax == "help"
+  exe "norm! \<C-W>w"
+  if s:thiswin == winnr()
+    break
+  endif
+endwhile
+
+" Open the window
+new option-window
+setlocal ts=15 tw=0 noro
+
+" Insert help and a "set" command for each option.
+call append(0, '" Each "set" line shows the current value of an option (on the left).')
+call append(1, '" Hit <CR> on a "set" line to execute it.')
+call append(2, '"            A boolean option will be toggled.')
+call append(3, '"            For other options you can edit the value.')
+call append(4, '" Hit <CR> on a help line to open a help window on this option.')
+call append(5, '" Hit <CR> on an index line to jump there.')
+call append(6, '" Hit <Space> on a "set" line to refresh it.')
+
+" These functions are called often below.  Keep them fast!
+
+" Init a local binary option
+fun! <SID>BinOptionL(name)
+  exe "norm! \<C-W>p"
+  exe "let val = &" . a:name
+  exe "norm! \<C-W>p"
+  call append("$", substitute(substitute(" \tset " . val . a:name . "\t" .
+	\!val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" Init a global binary option
+fun! <SID>BinOptionG(name, val)
+  call append("$", substitute(substitute(" \tset " . a:val . a:name . "\t" .
+	\!a:val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" Init a local string option
+fun! <SID>OptionL(name)
+  exe "norm! \<C-W>p"
+  exe "let val = substitute(&" . a:name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+  exe "norm! \<C-W>p"
+  call append("$", " \tset " . a:name . "=" . val)
+endfun
+
+" Init a global string option
+fun! <SID>OptionG(name, val)
+  call append("$", " \tset " . a:name . "=" . substitute(a:val, '[ \t\\"|]',
+	\ '\\\0', "g"))
+endfun
+
+let s:idx = 1
+let s:lnum = line("$")
+call append("$", "")
+
+fun! <SID>Header(text)
+  let line = s:idx . " " . a:text
+  if s:idx < 10
+    let line = " " . line
+  endif
+  call append("$", "")
+  call append("$", line)
+  call append("$", "")
+  call append(s:lnum, line)
+  let s:idx = s:idx + 1
+  let s:lnum = s:lnum + 1
+endfun
+
+" Get the value of 'pastetoggle'.  It could be a special key.
+fun! <SID>PTvalue()
+  redir @a
+  silent set pt
+  redir END
+  return substitute(@a, '[^=]*=\(.*\)', '\1', "")
+endfun
+
+" Restore the previous value of 'cpoptions' here, it's used below.
+let &cpo = s:cpo_save
+
+" List of all options, organized by function.
+" The text should be sufficient to know what the option is used for.
+
+call <SID>Header("important")
+call append("$", "compatible\tbehave very Vi compatible (not advisable)")
+call <SID>BinOptionG("cp", &cp)
+call append("$", "cpoptions\tlist of flags to specify Vi compatibility")
+call <SID>OptionG("cpo", &cpo)
+call append("$", "insertmode\tuse Insert mode as the default mode")
+call <SID>BinOptionG("im", &im)
+call append("$", "paste\tpaste mode, insert typed text literally")
+call <SID>BinOptionG("paste", &paste)
+call append("$", "pastetoggle\tkey sequence to toggle paste mode")
+if &pt =~ "\x80"
+  call append("$", " \tset pt=" . <SID>PTvalue())
+else
+  call <SID>OptionG("pt", &pt)
+endif
+call append("$", "runtimepath\tlist of directories used for runtime files and plugins")
+call <SID>OptionG("rtp", &rtp)
+call append("$", "helpfile\tname of the main help file")
+call <SID>OptionG("hf", &hf)
+
+
+call <SID>Header("moving around, searching and patterns")
+call append("$", "whichwrap\tlist of flags specifying which commands wrap to another line")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ww")
+call append("$", "startofline\tmany jump commands move the cursor to the first non-blank")
+call append("$", "\tcharacter of a line")
+call <SID>BinOptionG("sol", &sol)
+call append("$", "paragraphs\tnroff macro names that separate paragraphs")
+call <SID>OptionG("para", &para)
+call append("$", "sections\tnroff macro names that separate sections")
+call <SID>OptionG("sect", &sect)
+call append("$", "path\tlist of directory names used for file searching")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("pa", &pa)
+call append("$", "cdpath\tlist of directory names used for :cd")
+call <SID>OptionG("cd", &cd)
+if has("netbeans_intg") || has("sun_workshop")
+  call append("$", "autochdir\tchange to directory of file in buffer")
+  call <SID>BinOptionG("acd", &acd)
+endif
+call append("$", "wrapscan\tsearch commands wrap around the end of the buffer")
+call <SID>BinOptionG("ws", &ws)
+call append("$", "incsearch\tshow match for partly typed search command")
+call <SID>BinOptionG("is", &is)
+call append("$", "magic\tchange the way backslashes are used in search patterns")
+call <SID>BinOptionG("magic", &magic)
+call append("$", "ignorecase\tignore case when using a search pattern")
+call <SID>BinOptionG("ic", &ic)
+call append("$", "smartcase\toverride 'ignorecase' when pattern has upper case characters")
+call <SID>BinOptionG("scs", &scs)
+call append("$", "casemap\tWhat method to use for changing case of letters")
+call <SID>OptionG("cmp", &cmp)
+call append("$", "maxmempattern\tmaximum amount of memory in Kbyte used for pattern matching")
+call append("$", " \tset mmp=" . &mmp)
+call append("$", "define\tpattern for a macro definition line")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("def", &def)
+if has("find_in_path")
+  call append("$", "include\tpattern for an include-file line")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("inc")
+  call append("$", "includeexpr\texpression used to transform an include line to a file name")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("inex")
+endif
+
+
+call <SID>Header("tags")
+call append("$", "tagbsearch\tuse binary searching in tags files")
+call <SID>BinOptionG("tbs", &tbs)
+call append("$", "taglength\tnumber of significant characters in a tag name or zero")
+call append("$", " \tset tl=" . &tl)
+call append("$", "tags\tlist of file names to search for tags")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("tag", &tag)
+call append("$", "tagrelative\tfile names in a tags file are relative to the tags file")
+call <SID>BinOptionG("tr", &tr)
+call append("$", "tagstack\ta :tag command will use the tagstack")
+call <SID>BinOptionG("tgst", &tgst)
+call append("$", "showfulltag\twhen completing tags in Insert mode show more info")
+call <SID>BinOptionG("sft", &sft)
+if has("cscope")
+  call append("$", "cscopeprg\tcommand for executing cscope")
+  call <SID>OptionG("csprg", &csprg)
+  call append("$", "cscopetag\tuse cscope for tag commands")
+  call <SID>BinOptionG("cst", &cst)
+  call append("$", "cscopetagorder\t0 or 1; the order in which \":cstag\" performs a search")
+  call append("$", " \tset csto=" . &csto)
+  call append("$", "cscopeverbose\tgive messages when adding a cscope database")
+  call <SID>BinOptionG("csverb", &csverb)
+  call append("$", "cscopepathcomp\thow many components of the path to show")
+  call append("$", " \tset cspc=" . &cspc)
+  call append("$", "cscopequickfix\tWhen to open a quickfix window for cscope")
+  call <SID>OptionG("csqf", &csqf)
+endif
+
+
+call <SID>Header("displaying text")
+call append("$", "scroll\tnumber of lines to scroll for CTRL-U and CTRL-D")
+call append("$", "\t(local to window)")
+call <SID>OptionL("scr")
+call append("$", "scrolloff\tnumber of screen lines to show around the cursor")
+call append("$", " \tset so=" . &so)
+call append("$", "wrap\tlong lines wrap")
+call <SID>BinOptionG("wrap", &wrap)
+call append("$", "linebreak\twrap long lines at a character in 'breakat'")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("lbr")
+call append("$", "breakat\twhich characters might cause a line break")
+call <SID>OptionG("brk", &brk)
+call append("$", "showbreak\tstring to put before wrapped screen lines")
+call <SID>OptionG("sbr", &sbr)
+call append("$", "sidescroll\tminimal number of columns to scroll horizontally")
+call append("$", " \tset ss=" . &ss)
+call append("$", "sidescrolloff\tminimal number of columns to keep left and right of the cursor")
+call append("$", " \tset siso=" . &siso)
+call append("$", "display\tinclude \"lastline\" to show the last line even if it doesn't fit")
+call append("$", "\tinclude \"uhex\" to show unprintable characters as a hex number")
+call <SID>OptionG("dy", &dy)
+call append("$", "fillchars\tcharacters to use for the status line, folds and filler lines")
+call <SID>OptionG("fcs", &fcs)
+call append("$", "cmdheight\tnumber of lines used for the command-line")
+call append("$", " \tset ch=" . &ch)
+call append("$", "columns\twidth of the display")
+call append("$", " \tset co=" . &co)
+call append("$", "lines\tnumber of lines in the display")
+call append("$", " \tset lines=" . &lines)
+call append("$", "lazyredraw\tdon't redraw while executing macros")
+call <SID>BinOptionG("lz", &lz)
+if has("reltime")
+  call append("$", "redrawtime\ttimeout for 'hlsearch' and :match highlighting in msec")
+  call append("$", " \tset rdt=" . &rdt)
+endif
+call append("$", "writedelay\tdelay in msec for each char written to the display")
+call append("$", "\t(for debugging)")
+call append("$", " \tset wd=" . &wd)
+call append("$", "list\tshow <Tab> as ^I and end-of-line as $")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("list")
+call append("$", "listchars\tlist of strings used for list mode")
+call <SID>OptionG("lcs", &lcs)
+call append("$", "number\tshow the line number for each line")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("nu")
+if has("linebreak")
+  call append("$", "numberwidth\tnumber of columns to use for the line number")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("nuw")
+endif
+
+
+call <SID>Header("syntax, highlighting and spelling")
+call append("$", "background\t\"dark\" or \"light\"; the background color brightness")
+call <SID>OptionG("bg", &bg)
+if has("autocmd")
+  call append("$", "filetype\ttype of file; triggers the FileType event when set")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("ft")
+endif
+if has("syntax")
+  call append("$", "syntax\tname of syntax highlighting used")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("syn")
+  call append("$", "synmaxcol\tmaximum column to look for syntax items")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("smc")
+endif
+call append("$", "highlight\twhich highlighting to use for various occasions")
+call <SID>OptionG("hl", &hl)
+call append("$", "hlsearch\thighlight all matches for the last used search pattern")
+call <SID>BinOptionG("hls", &hls)
+if has("syntax")
+  call append("$", "cursorcolumn\thighlight the screen column of the cursor")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("cuc")
+  call append("$", "cursorline\thighlight the screen line of the cursor")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("cul")
+  call append("$", "spell\thighlight spelling mistakes")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("spell")
+  call append("$", "spelllang\tlist of accepted languages")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("spl")
+  call append("$", "spellfile\tfile that \"zg\" adds good words to")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("spf")
+  call append("$", "spellcapcheck\tpattern to locate the end of a sentence")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("spc")
+  call append("$", "spellsuggest\tmethods used to suggest corrections")
+  call <SID>OptionG("sps", &sps)
+  call append("$", "mkspellmem\tamount of memory used by :mkspell before compressing")
+  call <SID>OptionG("msm", &msm)
+endif
+
+
+call <SID>Header("multiple windows")
+call append("$", "laststatus\t0, 1 or 2; when to use a status line for the last window")
+call append("$", " \tset ls=" . &ls)
+if has("statusline")
+  call append("$", "statusline\talternate format to be used for a status line")
+  call <SID>OptionG("stl", &stl)
+endif
+call append("$", "equalalways\tmake all windows the same size when adding/removing windows")
+call <SID>BinOptionG("ea", &ea)
+if has("vertsplit")
+  call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"")
+  call <SID>OptionG("ead", &ead)
+endif
+call append("$", "winheight\tminimal number of lines used for the current window")
+call append("$", " \tset wh=" . &wh)
+call append("$", "winminheight\tminimal number of lines used for any window")
+call append("$", " \tset wmh=" . &wmh)
+call append("$", "winfixheight\tkeep the height of the window")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("wfh")
+if has("vertsplit")
+call append("$", "winfixwidth\tkeep the width of the window")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("wfw")
+  call append("$", "winwidth\tminimal number of columns used for the current window")
+  call append("$", " \tset wiw=" . &wiw)
+  call append("$", "winminwidth\tminimal number of columns used for any window")
+  call append("$", " \tset wmw=" . &wmw)
+endif
+call append("$", "helpheight\tinitial height of the help window")
+call append("$", " \tset hh=" . &hh)
+if has("quickfix")
+  call append("$", "previewheight\tdefault height for the preview window")
+  call append("$", " \tset pvh=" . &pvh)
+  call append("$", "previewwindow\tidentifies the preview window")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("pvw")
+endif
+call append("$", "hidden\tdon't unload a buffer when no longer shown in a window")
+call <SID>BinOptionG("hid", &hid)
+call append("$", "switchbuf\t\"useopen\" and/or \"split\"; which window to use when jumping")
+call append("$", "\tto a buffer")
+call <SID>OptionG("swb", &swb)
+call append("$", "splitbelow\ta new window is put below the current one")
+call <SID>BinOptionG("sb", &sb)
+if has("vertsplit")
+  call append("$", "splitright\ta new window is put right of the current one")
+  call <SID>BinOptionG("spr", &spr)
+endif
+if has("scrollbind")
+  call append("$", "scrollbind\tthis window scrolls together with other bound windows")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("scb")
+  call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'")
+  call <SID>OptionG("sbo", &sbo)
+endif
+
+
+call <SID>Header("multiple tab pages")
+call append("$", "showtabline\t0, 1 or 2; when to use a tab pages line")
+call append("$", " \tset stal=" . &stal)
+call append("$", "tabpagemax\tmaximum number of tab pages to open for -p and \"tab all\"")
+call append("$", " \tset tpm=" . &tpm)
+call append("$", "tabline\tcustom tab pages line")
+call <SID>OptionG("tal", &tal)
+if has("gui")
+  call append("$", "guitablabel\tcustom tab page label for the GUI")
+  call <SID>OptionG("gtl", &gtl)
+  call append("$", "guitabtooltip\tcustom tab page tooltip for the GUI")
+  call <SID>OptionG("gtt", &gtt)
+endif
+
+
+call <SID>Header("terminal")
+call append("$", "term\tname of the used terminal")
+call <SID>OptionG("term", &term)
+call append("$", "ttytype\talias for 'term'")
+call <SID>OptionG("tty", &tty)
+call append("$", "ttybuiltin\tcheck built-in termcaps first")
+call <SID>BinOptionG("tbi", &tbi)
+call append("$", "ttyfast\tterminal connection is fast")
+call <SID>BinOptionG("tf", &tf)
+call append("$", "weirdinvert\tterminal that requires extra redrawing")
+call <SID>BinOptionG("wiv", &wiv)
+call append("$", "esckeys\trecognize keys that start with <Esc> in Insert mode")
+call <SID>BinOptionG("ek", &ek)
+call append("$", "scrolljump\tminimal number of lines to scroll at a time")
+call append("$", " \tset sj=" . &sj)
+call append("$", "ttyscroll\tmaximum number of lines to use scrolling instead of redrawing")
+call append("$", " \tset tsl=" . &tsl)
+if has("gui") || has("msdos") || has("win32")
+  call append("$", "guicursor\tspecifies what the cursor looks like in different modes")
+  call <SID>OptionG("gcr", &gcr)
+endif
+if has("title")
+  let &title = s:old_title
+  call append("$", "title\tshow info in the window title")
+  call <SID>BinOptionG("title", &title)
+  set notitle
+  call append("$", "titlelen\tpercentage of 'columns' used for the window title")
+  call append("$", " \tset titlelen=" . &titlelen)
+  call append("$", "titlestring\twhen not empty, string to be used for the window title")
+  call <SID>OptionG("titlestring", &titlestring)
+  call append("$", "titleold\tstring to restore the title to when exiting Vim")
+  call <SID>OptionG("titleold", &titleold)
+  let &icon = s:old_icon
+  call append("$", "icon\tset the text of the icon for this window")
+  call <SID>BinOptionG("icon", &icon)
+  set noicon
+  call append("$", "iconstring\twhen not empty, text for the icon of this window")
+  call <SID>OptionG("iconstring", &iconstring)
+endif
+if has("win32")
+  call append("$", "restorescreen\trestore the screen contents when exiting Vim")
+  call <SID>BinOptionG("rs", &rs)
+endif
+
+
+call <SID>Header("using the mouse")
+call append("$", "mouse\tlist of flags for using the mouse")
+call <SID>OptionG("mouse", &mouse)
+if has("gui")
+  call append("$", "mousefocus\tthe window with the mouse pointer becomes the current one")
+  call <SID>BinOptionG("mousef", &mousef)
+  call append("$", "mousehide\thide the mouse pointer while typing")
+  call <SID>BinOptionG("mh", &mh)
+endif
+call append("$", "mousemodel\t\"extend\", \"popup\" or \"popup_setpos\"; what the right")
+call append("$", "\tmouse button is used for")
+call <SID>OptionG("mousem", &mousem)
+call append("$", "mousetime\tmaximum time in msec to recognize a double-click")
+call append("$", " \tset mouset=" . &mouset)
+call append("$", "ttymouse\t\"xterm\", \"xterm2\", \"dec\" or \"netterm\"; type of mouse")
+call <SID>OptionG("ttym", &ttym)
+if has("mouseshape")
+  call append("$", "mouseshape\twhat the mouse pointer looks like in different modes")
+  call <SID>OptionG("mouses", &mouses)
+endif
+
+
+if has("gui")
+  call <SID>Header("GUI")
+  call append("$", "guifont\tlist of font names to be used in the GUI")
+  call <SID>OptionG("gfn", &gfn)
+  if has("xfontset")
+    call append("$", "guifontset\tpair of fonts to be used, for multibyte editing")
+    call <SID>OptionG("gfs", &gfs)
+  endif
+  call append("$", "guifontwide\tlist of font names to be used for double-wide characters")
+  call <SID>OptionG("gfw", &gfw)
+  if has("mac")
+    call append("$", "antialias\tuse smooth, antialiased fonts")
+    call <SID>BinOptionG("anti", &anti)
+  endif
+  call append("$", "guioptions\tlist of flags that specify how the GUI works")
+  call <SID>OptionG("go", &go)
+  if has("gui_gtk")
+    call append("$", "toolbar\t\"icons\", \"text\" and/or \"tooltips\"; how to show the toolbar")
+    call <SID>OptionG("tb", &tb)
+    if has("gui_gtk2")
+      call append("$", "toolbariconsize\tSize of toolbar icons")
+      call <SID>OptionG("tbis", &tbis)
+    endif
+    call append("$", "guiheadroom\troom (in pixels) left above/below the window")
+    call append("$", " \tset ghr=" . &ghr)
+  endif
+  call append("$", "guipty\tuse a pseudo-tty for I/O to external commands")
+  call <SID>BinOptionG("guipty", &guipty)
+  if has("browse")
+    call append("$", "browsedir\t\"last\", \"buffer\" or \"current\": which directory used for the file browser")
+    call <SID>OptionG("bsdir", &bsdir)
+  endif
+  if has("multi_lang")
+    call append("$", "langmenu\tlanguage to be used for the menus")
+    call <SID>OptionG("langmenu", &lm)
+  endif
+  call append("$", "menuitems\tmaximum number of items in one menu")
+  call append("$", " \tset mis=" . &mis)
+  if has("winaltkeys")
+    call append("$", "winaltkeys\t\"no\", \"yes\" or \"menu\"; how to use the ALT key")
+    call <SID>OptionG("wak", &wak)
+  endif
+  call append("$", "linespace\tnumber of pixel lines to use between characters")
+  call append("$", " \tset lsp=" . &lsp)
+  if has("balloon_eval")
+    call append("$", "balloondelay\tdelay in milliseconds before a balloon may pop up")
+    call append("$", " \tset bdlay=" . &bdlay)
+    call append("$", "ballooneval\twhether the balloon evaluation is to be used")
+    call <SID>BinOptionG("beval", &beval)
+    if has("eval")
+      call append("$", "balloonexpr\texpression to show in balloon eval")
+      call append("$", " \tset bexpr=" . &bexpr)
+    endif
+  endif
+  if exists("+macatsui")
+    call append("$", "macatsui\tuse ATSUI text drawing; disable to avoid display problems")
+    call <SID>OptionG("macatsui", &macatsui)
+  endif
+endif
+
+if has("printer")
+  call <SID>Header("printing")
+  call append("$", "printoptions\tlist of items that control the format of :hardcopy output")
+  call <SID>OptionG("popt", &popt)
+  call append("$", "printdevice\tname of the printer to be used for :hardcopy")
+  call <SID>OptionG("pdev", &pdev)
+  if has("postscript")
+    call append("$", "printexpr\texpression used to print the PostScript file for :hardcopy")
+    call <SID>OptionG("pexpr", &pexpr)
+  endif
+  call append("$", "printfont\tname of the font to be used for :hardcopy")
+  call <SID>OptionG("pfn", &pfn)
+  call append("$", "printheader\tformat of the header used for :hardcopy")
+  call <SID>OptionG("pheader", &pheader)
+  if has("postscript")
+    call append("$", "printencoding\tencoding used to print the PostScript file for :hardcopy")
+    call <SID>OptionG("penc", &penc)
+  endif
+  if has("multi_byte")
+    call append("$", "printmbcharset\tthe CJK character set to be used for CJK output from :hardcopy")
+    call <SID>OptionG("pmbcs", &pmbcs)
+    call append("$", "printmbfont\tlist of font names to be used for CJK output from :hardcopy")
+    call <SID>OptionG("pmbfn", &pmbfn)
+  endif
+endif
+
+call <SID>Header("messages and info")
+call append("$", "terse\tadd 's' flag in 'shortmess' (don't show search message)")
+call <SID>BinOptionG("terse", &terse)
+call append("$", "shortmess\tlist of flags to make messages shorter")
+call <SID>OptionG("shm", &shm)
+call append("$", "showcmd\tshow (partial) command keys in the status line")
+let &sc = s:old_sc
+call <SID>BinOptionG("sc", &sc)
+set nosc
+call append("$", "showmode\tdisplay the current mode in the status line")
+call <SID>BinOptionG("smd", &smd)
+call append("$", "ruler\tshow cursor position below each window")
+let &ru = s:old_ru
+call <SID>BinOptionG("ru", &ru)
+set noru
+if has("statusline")
+  call append("$", "rulerformat\talternate format to be used for the ruler")
+  call <SID>OptionG("ruf", &ruf)
+endif
+call append("$", "report\tthreshold for reporting number of changed lines")
+call append("$", " \tset report=" . &report)
+call append("$", "verbose\tthe higher the more messages are given")
+call append("$", " \tset vbs=" . &vbs)
+call append("$", "verbosefile\tfile to write messages in")
+call <SID>OptionG("vfile", &vfile)
+call append("$", "more\tpause listings when the screen is full")
+call <SID>BinOptionG("more", &more)
+if has("dialog_con") || has("dialog_gui")
+  call append("$", "confirm\tstart a dialog when a command fails")
+  call <SID>BinOptionG("cf", &cf)
+endif
+call append("$", "errorbells\tring the bell for error messages")
+call <SID>BinOptionG("eb", &eb)
+call append("$", "visualbell\tuse a visual bell instead of beeping")
+call <SID>BinOptionG("vb", &vb)
+if has("multi_lang")
+  call append("$", "helplang\tlist of preferred languages for finding help")
+  call <SID>OptionG("hlg", &hlg)
+endif
+
+
+call <SID>Header("selecting text")
+call append("$", "selection\t\"old\", \"inclusive\" or \"exclusive\"; how selecting text behaves")
+call <SID>OptionG("sel", &sel)
+call append("$", "selectmode\t\"mouse\", \"key\" and/or \"cmd\"; when to start Select mode")
+call append("$", "\tinstead of Visual mode")
+call <SID>OptionG("slm", &slm)
+if has("clipboard")
+  call append("$", "clipboard\t\"unnamed\" to use the * register like unnamed register")
+  call append("$", "\t\"autoselect\" to always put selected text on the clipboard")
+  call <SID>OptionG("cb", &cb)
+endif
+call append("$", "keymodel\t\"startsel\" and/or \"stopsel\"; what special keys can do")
+call <SID>OptionG("km", &km)
+
+
+call <SID>Header("editing text")
+call append("$", "undolevels\tmaximum number of changes that can be undone")
+call append("$", " \tset ul=" . &ul)
+call append("$", "modified\tchanges have been made and not written to a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("mod")
+call append("$", "readonly\tbuffer is not to be written")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ro")
+call append("$", "modifiable\tchanges to the text are not possible")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ma")
+call append("$", "textwidth\tline length above which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("tw")
+call append("$", "wrapmargin\tmargin from the right in which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("wm")
+call append("$", "backspace\tspecifies what <BS>, CTRL-W, etc. can do in Insert mode")
+call append("$", " \tset bs=" . &bs)
+call append("$", "comments\tdefinition of what comment lines look like")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("com")
+call append("$", "formatoptions\tlist of flags that tell how automatic formatting works")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("fo")
+call append("$", "formatlistpat\tpattern to recognize a numbered list")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("flp")
+if has("eval")
+  call append("$", "formatexpr\texpression used for \"gq\" to format lines")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("fex")
+endif
+if has("insert_expand")
+  call append("$", "complete\tspecifies how Insert mode completion works for CTRL-N and CTRL-P")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("cpt")
+  call append("$", "completeopt\twhether to use a popup menu for Insert mode completion")
+  call <SID>OptionG("cot", &cot)
+  call append("$", "pumheight\tmaximum height of the popup menu")
+  call <SID>OptionG("ph", &ph)
+  call append("$", "completefunc\tuser defined function for Insert mode completion")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("cfu")
+  call append("$", "omnifunc\tfunction for filetype-specific Insert mode completion")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("ofu")
+  call append("$", "dictionary\tlist of dictionary files for keyword completion")
+  call append("$", "\t(global or local to buffer)")
+  call <SID>OptionG("dict", &dict)
+  call append("$", "thesaurus\tlist of thesaurus files for keyword completion")
+  call append("$", "\t(global or local to buffer)")
+  call <SID>OptionG("tsr", &tsr)
+endif
+call append("$", "infercase\tadjust case of a keyword completion match")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("inf")
+if has("digraphs")
+  call append("$", "digraph\tenable entering digraps with c1 <BS> c2")
+  call <SID>BinOptionG("dg", &dg)
+endif
+call append("$", "tildeop\tthe \"~\" command behaves like an operator")
+call <SID>BinOptionG("top", &top)
+call append("$", "operatorfunc\tfunction called for the\"g@\"  operator")
+call <SID>OptionG("opfunc", &opfunc)
+call append("$", "showmatch\tWhen inserting a bracket, briefly jump to its match")
+call <SID>BinOptionG("sm", &sm)
+call append("$", "matchtime\ttenth of a second to show a match for 'showmatch'")
+call append("$", " \tset mat=" . &mat)
+call append("$", "matchpairs\tlist of pairs that match for the \"%\" command")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("mps")
+call append("$", "joinspaces\tuse two spaces after '.' when joining a line")
+call <SID>BinOptionG("js", &js)
+call append("$", "nrformats\t\"alpha\", \"octal\" and/or \"hex\"; number formats recognized for")
+call append("$", "\tCTRL-A and CTRL-X commands")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("nf")
+
+
+call <SID>Header("tabs and indenting")
+call append("$", "tabstop\tnumber of spaces a <Tab> in the text stands for")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ts")
+call append("$", "shiftwidth\tnumber of spaces used for each step of (auto)indent")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sw")
+call append("$", "smarttab\ta <Tab> in an indent inserts 'shiftwidth' spaces")
+call <SID>BinOptionG("sta", &sta)
+call append("$", "softtabstop\tif non-zero, number of spaces to insert for a <Tab>")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sts")
+call append("$", "shiftround\tround to 'shiftwidth' for \"<<\" and \">>\"")
+call <SID>BinOptionG("sr", &sr)
+call append("$", "expandtab\texpand <Tab> to spaces in Insert mode")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("et")
+call append("$", "autoindent\tautomatically set the indent of a new line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ai")
+if has("smartindent")
+  call append("$", "smartindent\tdo clever autoindenting")
+  call append("$", "\t(local to buffer)")
+  call <SID>BinOptionL("si")
+endif
+if has("cindent")
+  call append("$", "cindent\tenable specific indenting for C code")
+  call append("$", "\t(local to buffer)")
+  call <SID>BinOptionL("cin")
+  call append("$", "cinoptions\toptions for C-indenting")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("cino")
+  call append("$", "cinkeys\tkeys that trigger C-indenting in Insert mode")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("cink")
+  call append("$", "cinwords\tlist of words that cause more C-indent")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("cinw")
+  call append("$", "indentexpr\texpression used to obtain the indent of a line")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("inde")
+  call append("$", "indentkeys\tkeys that trigger indenting with 'indentexpr' in Insert mode")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("indk")
+endif
+call append("$", "copyindent\tCopy whitespace for indenting from previous line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ci")
+call append("$", "preserveindent\tPreserve kind of whitespace when changing indent")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("pi")
+if has("lispindent")
+  call append("$", "lisp\tenable lisp mode")
+  call append("$", "\t(local to buffer)")
+  call <SID>BinOptionL("lisp")
+  call append("$", "lispwords\twords that change how lisp indenting works")
+  call <SID>OptionG("lw", &lw)
+endif
+
+
+if has("folding")
+  call <SID>Header("folding")
+  call append("$", "foldenable\tset to display all folds open")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("fen")
+  call append("$", "foldlevel\tfolds with a level higher than this number will be closed")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fdl")
+  call append("$", "foldlevelstart\tvalue for 'foldlevel' when starting to edit a file")
+  call append("$", " \tset fdls=" . &fdls)
+  call append("$", "foldcolumn\twidth of the column used to indicate folds")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fdc")
+  call append("$", "foldtext\texpression used to display the text of a closed fold")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fdt")
+  call append("$", "foldclose\tset to \"all\" to close a fold when the cursor leaves it")
+  call <SID>OptionG("fcl", &fcl)
+  call append("$", "foldopen\tspecifies for which commands a fold will be opened")
+  call <SID>OptionG("fdo", &fdo)
+  call append("$", "foldminlines\tminimum number of screen lines for a fold to be closed")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fml")
+  call append("$", "commentstring\ttemplate for comments; used to put the marker in")
+  call <SID>OptionL("cms")
+  call append("$", "foldmethod\tfolding type: \"manual\", \"indent\", \"expr\", \"marker\" or \"syntax\"")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fdm")
+  call append("$", "foldexpr\texpression used when 'foldmethod' is \"expr\"")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fde")
+  call append("$", "foldignore\tused to ignore lines when 'foldmethod' is \"indent\"")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fdi")
+  call append("$", "foldmarker\tmarkers used when 'foldmethod' is \"marker\"")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fmr")
+  call append("$", "foldnestmax\tmaximum fold depth for when 'foldmethod is \"indent\" or \"syntax\"")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("fdn")
+endif
+
+
+if has("diff")
+  call <SID>Header("diff mode")
+  call append("$", "diff\tuse diff mode for the current window")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("diff")
+  call append("$", "diffopt\toptions for using diff mode")
+  call <SID>OptionG("dip", &dip)
+  call append("$", "diffexpr\texpression used to obtain a diff file")
+  call <SID>OptionG("dex", &dex)
+  call append("$", "patchexpr\texpression used to patch a file")
+  call <SID>OptionG("pex", &pex)
+endif
+
+
+call <SID>Header("mapping")
+call append("$", "maxmapdepth\tmaximum depth of mapping")
+call append("$", " \tset mmd=" . &mmd)
+call append("$", "remap\trecognize mappings in mapped keys")
+call <SID>BinOptionG("remap", &remap)
+call append("$", "timeout\tallow timing out halfway into a mapping")
+call <SID>BinOptionG("to", &to)
+call append("$", "ttimeout\tallow timing out halfway into a key code")
+call <SID>BinOptionG("ttimeout", &ttimeout)
+call append("$", "timeoutlen\ttime in msec for 'timeout'")
+call append("$", " \tset tm=" . &tm)
+call append("$", "ttimeoutlen\ttime in msec for 'ttimeout'")
+call append("$", " \tset ttm=" . &ttm)
+
+
+call <SID>Header("reading and writing files")
+call append("$", "modeline\tenable using settings from modelines when reading a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ml")
+call append("$", "modelines\tnumber of lines to check for modelines")
+call append("$", " \tset mls=" . &mls)
+call append("$", "binary\tbinary file editing")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bin")
+call append("$", "endofline\tlast line in the file has an end-of-line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("eol")
+if has("multi_byte")
+  call append("$", "bomb\tPrepend a Byte Order Mark to the file")
+  call append("$", "\t(local to buffer)")
+  call <SID>BinOptionL("bomb")
+endif
+call append("$", "fileformat\tend-of-line format: \"dos\", \"unix\" or \"mac\"")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ff")
+call append("$", "fileformats\tlist of file formats to look for when editing a file")
+call <SID>OptionG("ffs", &ffs)
+call append("$", "textmode\tobsolete, use 'fileformat'")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("tx")
+call append("$", "textauto\tobsolete, use 'fileformats'")
+call <SID>BinOptionG("ta", &ta)
+call append("$", "write\twriting files is allowed")
+call <SID>BinOptionG("write", &write)
+call append("$", "writebackup\twrite a backup file before overwriting a file")
+call <SID>BinOptionG("wb", &wb)
+call append("$", "backup\tkeep a backup after overwriting a file")
+call <SID>BinOptionG("bk", &bk)
+call append("$", "backupskip\tpatterns that specify for which files a backup is not made")
+call append("$", " \tset bsk=" . &bsk)
+call append("$", "backupcopy\twhether to make the backup as a copy or rename the existing file")
+call append("$", " \tset bkc=" . &bkc)
+call append("$", "backupdir\tlist of directories to put backup files in")
+call <SID>OptionG("bdir", &bdir)
+call append("$", "backupext\tfile name extension for the backup file")
+call <SID>OptionG("bex", &bex)
+call append("$", "autowrite\tautomatically write a file when leaving a modified buffer")
+call <SID>BinOptionG("aw", &aw)
+call append("$", "autowriteall\tas 'autowrite', but works with more commands")
+call <SID>BinOptionG("awa", &awa)
+call append("$", "writeany\talways write without asking for confirmation")
+call <SID>BinOptionG("wa", &wa)
+call append("$", "autoread\tautomatically read a file when it was modified outside of Vim")
+call append("$", "\t(global or local to buffer)")
+call <SID>BinOptionG("ar", &ar)
+call append("$", "patchmode\tkeep oldest version of a file; specifies file name extension")
+call <SID>OptionG("pm", &pm)
+call append("$", "fsync\tforcibly sync the file to disk after writing it")
+call <SID>BinOptionG("fs", &fs)
+if !has("msdos")
+  call append("$", "shortname\tuse 8.3 file names")
+  call append("$", "\t(local to buffer)")
+  call <SID>BinOptionL("sn")
+endif
+
+
+call <SID>Header("the swap file")
+call append("$", "directory\tlist of directories for the swap file")
+call <SID>OptionG("dir", &dir)
+call append("$", "swapfile\tuse a swap file for this buffer")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("swf")
+call append("$", "swapsync\t\"sync\", \"fsync\" or empty; how to flush a swap file to disk")
+call <SID>OptionG("sws", &sws)
+call append("$", "updatecount\tnumber of characters typed to cause a swap file update")
+call append("$", " \tset uc=" . &uc)
+call append("$", "updatetime\ttime in msec after which the swap file will be updated")
+call append("$", " \tset ut=" . &ut)
+call append("$", "maxmem\tmaximum amount of memory in Kbyte used for one buffer")
+call append("$", " \tset mm=" . &mm)
+call append("$", "maxmemtot\tmaximum amount of memory in Kbyte used for all buffers")
+call append("$", " \tset mmt=" . &mmt)
+
+
+call <SID>Header("command line editing")
+call append("$", "history\thow many command lines are remembered ")
+call append("$", " \tset hi=" . &hi)
+call append("$", "wildchar\tkey that triggers command-line expansion")
+call append("$", " \tset wc=" . &wc)
+call append("$", "wildcharm\tlike 'wildchar' but can also be used in a mapping")
+call append("$", " \tset wcm=" . &wcm)
+call append("$", "wildmode\tspecifies how command line completion works")
+call <SID>OptionG("wim", &wim)
+if has("wildoptions")
+  call append("$", "wildoptions\tempty or \"tagfile\" to list file name of matching tags")
+  call <SID>OptionG("wop", &wop)
+endif
+call append("$", "suffixes\tlist of file name extensions that have a lower priority")
+call <SID>OptionG("su", &su)
+if has("file_in_path")
+  call append("$", "suffixesadd\tlist of file name extensions added when searching for a file")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("sua")
+endif
+if has("wildignore")
+  call append("$", "wildignore\tlist of patterns to ignore files for file name completion")
+  call <SID>OptionG("wig", &wig)
+endif
+if has("wildmenu")
+  call append("$", "wildmenu\tcommand-line completion shows a list of matches")
+  call <SID>BinOptionG("wmnu", &wmnu)
+endif
+if has("vertsplit")
+  call append("$", "cedit\tkey used to open the command-line window")
+  call <SID>OptionG("cedit", &cedit)
+  call append("$", "cmdwinheight\theight of the command-line window")
+  call <SID>OptionG("cwh", &cwh)
+endif
+
+
+call <SID>Header("executing external commands")
+call append("$", "shell\tname of the shell program used for external commands")
+call <SID>OptionG("sh", &sh)
+if has("amiga")
+  call append("$", "shelltype\twhen to use the shell or directly execute a command")
+  call append("$", " \tset st=" . &st)
+endif
+call append("$", "shellquote\tcharacter(s) to enclose a shell command in")
+call <SID>OptionG("shq", &shq)
+call append("$", "shellxquote\tlike 'shellquote' but include the redirection")
+call <SID>OptionG("sxq", &sxq)
+call append("$", "shellcmdflag\targument for 'shell' to execute a command")
+call <SID>OptionG("shcf", &shcf)
+call append("$", "shellredir\tused to redirect command output to a file")
+call <SID>OptionG("srr", &srr)
+call append("$", "shelltemp\tuse a temp file for shell commands instead of using a pipe")
+call <SID>BinOptionG("stmp", &stmp)
+call append("$", "equalprg\tprogram used for \"=\" command")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("ep", &ep)
+call append("$", "formatprg\tprogram used to format lines with \"gq\" command")
+call <SID>OptionG("fp", &fp)
+call append("$", "keywordprg\tprogram used for the \"K\" command")
+call <SID>OptionG("kp", &kp)
+call append("$", "warn\twarn when using a shell command and a buffer has changes")
+call <SID>BinOptionG("warn", &warn)
+
+
+if has("quickfix")
+  call <SID>Header("running make and jumping to errors")
+  call append("$", "errorfile\tname of the file that contains error messages")
+  call <SID>OptionG("ef", &ef)
+  call append("$", "errorformat\tlist of formats for error messages")
+  call append("$", "\t(global or local to buffer)")
+  call <SID>OptionG("efm", &efm)
+  call append("$", "makeprg\tprogram used for the \":make\" command")
+  call append("$", "\t(global or local to buffer)")
+  call <SID>OptionG("mp", &mp)
+  call append("$", "shellpipe\tstring used to put the output of \":make\" in the error file")
+  call <SID>OptionG("sp", &sp)
+  call append("$", "makeef\tname of the errorfile for the 'makeprg' command")
+  call <SID>OptionG("mef", &mef)
+  call append("$", "grepprg\tprogram used for the \":grep\" command")
+  call append("$", "\t(global or local to buffer)")
+  call <SID>OptionG("gp", &gp)
+  call append("$", "grepformat\tlist of formats for output of 'grepprg'")
+  call <SID>OptionG("gfm", &gfm)
+endif
+
+
+if has("msdos") || has("os2") || has("win16") || has("win32") || has("osfiletype")
+  call <SID>Header("system specific")
+  if has("msdos")
+    call append("$", "bioskey\tcall the BIOS to get a keyoard character")
+    call <SID>BinOptionG("biosk", &biosk)
+    call append("$", "conskey\tuse direct console I/O to get a keyboard character")
+    call <SID>BinOptionG("consk", &consk)
+  endif
+  if has("osfiletype")
+    call append("$", "osfiletype\tOS-specific information about the type of file")
+    call append("$", "\t(local to buffer)")
+    call <SID>OptionL("oft")
+  endif
+  if has("msdos") || has("os2") || has("win16") || has("win32")
+    call append("$", "shellslash\tuse forward slashes in file names; for Unix-like shells")
+    call <SID>BinOptionG("ssl", &ssl)
+  endif
+endif
+
+
+call <SID>Header("language specific")
+call append("$", "isfname\tspecifies the characters in a file name")
+call <SID>OptionG("isf", &isf)
+call append("$", "isident\tspecifies the characters in an identifier")
+call <SID>OptionG("isi", &isi)
+call append("$", "iskeyword\tspecifies the characters in a keyword")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("isk")
+call append("$", "isprint\tspecifies printable characters")
+call <SID>OptionG("isp", &isp)
+if has("textobjects")
+  call append("$", "quoteescape\tspecifies escape characters in a string")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("qe")
+endif
+if has("rightleft")
+  call append("$", "rightleft\tdisplay the buffer right-to-left")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("rl")
+  call append("$", "rightleftcmd\tWhen to edit the command-line right-to-left")
+  call append("$", "\t(local to window)")
+  call <SID>OptionL("rlc")
+  call append("$", "revins\tInsert characters backwards")
+  call <SID>BinOptionG("ri", &ri)
+  call append("$", "allowrevins\tAllow CTRL-_ in Insert and Command-line mode to toggle 'revins'")
+  call <SID>BinOptionG("ari", &ari)
+  call append("$", "aleph\tthe ASCII code for the first letter of the Hebrew alphabet")
+  call append("$", " \tset al=" . &al)
+  call append("$", "hkmap\tuse Hebrew keyboard mapping")
+  call <SID>BinOptionG("hk", &hk)
+  call append("$", "hkmapp\tuse phonetic Hebrew keyboard mapping")
+  call <SID>BinOptionG("hkp", &hkp)
+endif
+if has("farsi")
+  call append("$", "altkeymap\tuse Farsi as the second language when 'revins' is set")
+  call <SID>BinOptionG("akm", &akm)
+  call append("$", "fkmap\tuse Farsi keyboard mapping")
+  call <SID>BinOptionG("fk", &fk)
+endif
+if has("arabic")
+  call append("$", "arabic\tPrepare for editing Arabic text")
+  call append("$", "\t(local to window)")
+  call <SID>BinOptionL("arab")
+  call append("$", "arabicshape\tPerform shaping of Arabic characters")
+  call <SID>BinOptionG("arshape", &arshape)
+  call append("$", "termbidi\tTerminal will perform bidi handling")
+  call <SID>BinOptionG("tbidi", &tbidi)
+endif
+if has("keymap")
+  call append("$", "keymap\tname of a keyboard mappping")
+  call <SID>OptionL("kmp")
+endif
+if has("langmap")
+  call append("$", "langmap\ttranslate characters for Normal mode")
+  call <SID>OptionG("lmap", &lmap)
+endif
+if has("xim")
+  call append("$", "imdisable\twhen set never use IM; overrules following IM options")
+  call <SID>BinOptionG("imd", &imd)
+endif
+call append("$", "iminsert\tin Insert mode: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("imi")
+call append("$", "imsearch\tentering a search pattern: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ims")
+if has("xim")
+  call append("$", "imcmdline\twhen set always use IM when starting to edit a command line")
+  call <SID>BinOptionG("imc", &imc)
+endif
+
+
+if has("multi_byte")
+  call <SID>Header("multi-byte characters")
+  call append("$", "encoding\tcharacter encoding used in Vim: \"latin1\", \"utf-8\"")
+  call append("$", "\t\"euc-jp\", \"big5\", etc.")
+  call <SID>OptionG("enc", &enc)
+  call append("$", "fileencoding\tcharacter encoding for the current file")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("fenc")
+  call append("$", "fileencodings\tautomatically detected character encodings")
+  call <SID>OptionG("fencs", &fencs)
+  call append("$", "termencoding\tcharacter encoding used by the terminal")
+  call <SID>OptionG("tenc", &tenc)
+  call append("$", "charconvert\texpression used for character encoding conversion")
+  call <SID>OptionG("ccv", &ccv)
+  call append("$", "delcombine\tDelete combining (composing) characters on their own")
+  call <SID>BinOptionG("deco", &deco)
+  call append("$", "maxcombine\tMaximum number of combining (composing) characters displayed")
+  call <SID>OptionG("mco", &mco)
+  if has("xim") && has("gui_gtk")
+    call append("$", "imactivatekey\tkey that activates the X input method")
+    call <SID>OptionG("imak", &imak)
+  endif
+  call append("$", "ambiwidth\tWidth of ambiguous width characters")
+  call <SID>OptionG("ambw", &ambw)
+endif
+
+
+call <SID>Header("various")
+if has("virtualedit")
+  call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"")
+  call <SID>OptionG("ve", &ve)
+endif
+if has("autocmd")
+  call append("$", "eventignore\tlist of autocommand events which are to be ignored")
+  call <SID>OptionG("ei", &ei)
+endif
+call append("$", "loadplugins\tload plugin scripts when starting up")
+call <SID>BinOptionG("lpl", &lpl)
+call append("$", "exrc\tenable reading .vimrc/.exrc/.gvimrc in the current directory")
+call <SID>BinOptionG("ex", &ex)
+call append("$", "secure\tsafer working with script files in the current directory")
+call <SID>BinOptionG("secure", &secure)
+call append("$", "gdefault\tuse the 'g' flag for \":substitute\"")
+call <SID>BinOptionG("gd", &gd)
+call append("$", "edcompatible\t'g' and 'c' flags of \":substitute\" toggle")
+call <SID>BinOptionG("ed", &ed)
+if exists("+opendevice")
+  call append("$", "opendevice\tallow reading/writing devices")
+  call <SID>BinOptionG("odev", &odev)
+endif
+if exists("+maxfuncdepth")
+  call append("$", "maxfuncdepth\tmaximum depth of function calls")
+  call append("$", " \tset mfd=" . &mfd)
+endif
+if has("mksession")
+  call append("$", "sessionoptions\tlist of words that specifies what to put in a session file")
+  call <SID>OptionG("ssop", &ssop)
+  call append("$", "viewoptions\tlist of words that specifies what to save for :mkview")
+  call <SID>OptionG("vop", &vop)
+  call append("$", "viewdir\tdirectory where to store files with :mkview")
+  call <SID>OptionG("vdir", &vdir)
+endif
+if has("viminfo")
+  call append("$", "viminfo\tlist that specifies what to write in the viminfo file")
+  call <SID>OptionG("vi", &vi)
+endif
+if has("quickfix")
+  call append("$", "bufhidden\twhat happens with a buffer when it's no longer in a window")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("bh")
+  call append("$", "buftype\t\"\", \"nofile\", \"nowrite\" or \"quickfix\": type of buffer")
+  call append("$", "\t(local to buffer)")
+  call <SID>OptionL("bt")
+endif
+call append("$", "buflisted\twhether the buffer shows up in the buffer list")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bl")
+call append("$", "debug\tset to \"msg\" to see all error messages")
+call append("$", " \tset debug=" . &debug)
+if has("mzscheme")
+  call append("$", "mzquantum\tinterval in milliseconds between polls for MzScheme threads")
+  call append("$", " \tset mzq=" . &mzq)
+endif
+
+set cpo&vim
+
+" go to first line
+1
+
+" reset 'modified', so that ":q" can be used to close the window
+setlocal nomodified
+
+if has("syntax")
+  " Use Vim highlighting, with some additional stuff
+  setlocal ft=vim
+  syn match optwinHeader "^ \=[0-9].*"
+  syn match optwinName "^[a-z]*\t" nextgroup=optwinComment
+  syn match optwinComment ".*" contained
+  syn match optwinComment "^\t.*"
+  if !exists("did_optwin_syntax_inits")
+    let did_optwin_syntax_inits = 1
+    hi link optwinHeader Title
+    hi link optwinName Identifier
+    hi link optwinComment Comment
+  endif
+endif
+
+" Install autocommands to enable mappings in option-window
+noremap <silent> <buffer> <CR> <C-\><C-N>:call <SID>CR()<CR>
+inoremap <silent> <buffer> <CR> <Esc>:call <SID>CR()<CR>
+noremap <silent> <buffer> <Space> :call <SID>Space()<CR>
+
+" Make the buffer be deleted when the window is closed.
+setlocal buftype=nofile bufhidden=delete noswapfile
+
+augroup optwin
+  au! BufUnload,BufHidden option-window nested
+	\ call <SID>unload() | delfun <SID>unload
+augroup END
+
+fun! <SID>unload()
+  delfun <SID>CR
+  delfun <SID>Space
+  delfun <SID>Find
+  delfun <SID>Update
+  delfun <SID>OptionL
+  delfun <SID>OptionG
+  delfun <SID>BinOptionL
+  delfun <SID>BinOptionG
+  delfun <SID>Header
+  au! optwin
+endfun
+
+" Restore the previous value of 'title' and 'icon'.
+let &title = s:old_title
+let &icon = s:old_icon
+let &ru = s:old_ru
+let &sc = s:old_sc
+let &cpo = s:cpo_save
+unlet s:old_title s:old_icon s:old_ru s:old_sc s:cpo_save s:idx s:lnum
diff --git a/runtime/tutor/runtime/tools.info b/runtime/tutor/runtime/tools.info
new file mode 100755
index 0000000000000000000000000000000000000000..4d173b0bcf23b64ac076d516a68b5c6c3c9e2639
Binary files /dev/null and b/runtime/tutor/runtime/tools.info differ
diff --git a/runtime/tutor/runtime/vim32x32.xpm b/runtime/tutor/runtime/vim32x32.xpm
new file mode 100644
index 0000000000000000000000000000000000000000..43a3a40c0b207a812d4448091c0e6fefc4f2f52f
--- /dev/null
+++ b/runtime/tutor/runtime/vim32x32.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * vim32x32[] = {
+"32 32 8 1",
+" 	c None",
+".	c #000000",
+"+	c #000080",
+"@	c #008000",
+"#	c #00FF00",
+"$	c #808080",
+"%	c #C0C0C0",
+"&	c #FFFFFF",
+"               ..               ",
+"              .##.              ",
+"   ...........#@@#. .........   ",
+"  .&&&&&&&&&&&.@@@#.&&&&&&&&&.  ",
+"  .&%%%%%%%%%%%.@@@.&%%%%%%%%%. ",
+"   .%%%%%%%%%%$.@@@@.%%%%%%%%$. ",
+"    .$%%%%%%$$.@@@@@@.$%%%%%$$. ",
+"    .&%%%%%%$.@@@@@@.&%%%%%$$.  ",
+"    .&%%%%%%$.@@@@@.&&%%%%$$.   ",
+"    .&%%%%%%$.@@@@.&&%%%%$$.    ",
+"    .&%%%%%%$.@@@.&&%%%%$$.     ",
+"    .&%%%%%%$.@@.&&%%%%$$.#.    ",
+"   ..&%%%%%%$.@.&&%%%%$$.@@#.   ",
+"  .#.&%%%%%%$..&&%%%%$$.@@@@#.  ",
+" .#@.&%%%%%%$.&&%%%%$$.@@@@@@#. ",
+".#@@.&%%%%%%$&&%%%%$$.@@@@@@@@#.",
+".+@@.&%%%%%%$&%%%%$$.@@@@@@@@@+.",
+" .+@.&%%%%%%$%%%%$$.@@@@@@@@@+. ",
+"  .+.&%%%%%%%%%%...@@@@@@@@@+.  ",
+"   ..&%%%%%%%%%.%%.@@@@@@@@+.   ",
+"    .&%%%%%%%%%.%%.@@@@@@@+.    ",
+"    .&%%%%%%%%$...@...@......   ",
+"    .&%%%%%%%$.%%%.%%%.%%%.%%.  ",
+"    .&%%%%%%$$..%%..%%%%%%%%%%. ",
+"    .&%%%%%$$..%%...%%++%%..%.  ",
+"    .&%%%%$$.@.%%..%%+.%%..%%.  ",
+"    .&%%%$$.@@.%%..%%..%%..%%.  ",
+"    .&%%$$..+.%%..%%..%%..%%.   ",
+"     .%$$.  ..%%%.%%..%%..%%%.  ",
+"      ...    ....+..  ..  ...   ",
+"              .++.              ",
+"               ..               "};
diff --git a/runtime/tutor/runtime/vim48x48.xpm b/runtime/tutor/runtime/vim48x48.xpm
new file mode 100644
index 0000000000000000000000000000000000000000..b2fdd95924e0232c21026d69164cd85ec47f4189
--- /dev/null
+++ b/runtime/tutor/runtime/vim48x48.xpm
@@ -0,0 +1,59 @@
+/* XPM */
+static char * vim48x48[] = {
+"48 48 8 1",
+" 	c None",
+".	c #000000",
+"+	c #000084",
+"@	c #008200",
+"#	c #00FF00",
+"$	c #848284",
+"&	c #C6C3C6",
+"*	c #FFFFFF",
+"                       ..                       ",
+"                      .##.                      ",
+"                     .#@@#.                     ",
+"      ...............#@@@@#.   ...............  ",
+"     .***************.@@@@@#. .***************. ",
+"    .**&&&&&&&&&&&&&&$.@@@@@#.**&&&&&&&&&&&&&&$.",
+"    .*&&&&&&&&&&&&&&&$.@@@@@@.*&&&&&&&&&&&&&&&$.",
+"    .*$&&&&&&&&&&&&&&$.@@@@@@.*$&&&&&&&&&&&&&&$.",
+"     .$$$&&&&&&&&&$$$.@@@@@@@@.$$$&&&&&&&&&&&$$.",
+"      ..*&&&&&&&&&$$.@@@@@@@@@@..*&&&&&&&&&&$$. ",
+"       .*&&&&&&&&&$$.@@@@@@@@@@.**&&&&&&&&&$$.  ",
+"       .*&&&&&&&&&$$.@@@@@@@@@.**&&&&&&&&&$$.   ",
+"       .*&&&&&&&&&$$.@@@@@@@@.**&&&&&&&&&$$.    ",
+"       .*&&&&&&&&&$$.@@@@@@@.**&&&&&&&&&$$.     ",
+"       .*&&&&&&&&&$$.@@@@@@.**&&&&&&&&&$$.      ",
+"       .*&&&&&&&&&$$.@@@@@.**&&&&&&&&&$$.       ",
+"       .*&&&&&&&&&$$.@@@@.**&&&&&&&&&$$..       ",
+"      ..*&&&&&&&&&$$.@@@.**&&&&&&&&&$$.@#.      ",
+"     .#.*&&&&&&&&&$$.@@.**&&&&&&&&&$$.@@@#.     ",
+"    .#@.*&&&&&&&&&$$.@.**&&&&&&&&&$$.@@@@@#.    ",
+"   .#@@.*&&&&&&&&&$$..**&&&&&&&&&$$.@@@@@@@#.   ",
+"  .#@@@.*&&&&&&&&&$$.**&&&&&&&&&$$.@@@@@@@@@#.  ",
+" .#@@@@.*&&&&&&&&&$$**&&&&&&&&&$$.@@@@@@@@@@@#. ",
+".#+@@@@.*&&&&&&&&&$$*&&&&&&&&&$$.@@@@@@@@@@@@@#.",
+" .++@@@.*&&&&&&&&&$*&&&&&&&&&$$.@@@@@@@@@@@@@++.",
+"  .++@@.*&&&&&&&&&$&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+"   .++@.*&&&&&&&&&&&&&&&&&&$$.@@@@@@@@@@@@@++.  ",
+"    .++.*&&&&&&&&&&&&&&&&....@@@@@@@@@@@@@++.   ",
+"     .+.*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@@+++    ",
+"      ..*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@++.     ",
+"       .*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@++.      ",
+"       .*&&&&&&&&&&&&&&$$...@@@@@@@@@@++.       ",
+"       .*&&&&&&&&&&&&&$$...@@....@@....+....    ",
+"       .*&&&&&&&&&&&&$$..&&..&&&&..&&&&..&&&.   ",
+"       .*&&&&&&&&&&&$$..&&&.@.&&&&&&&&&&&&&&&.  ",
+"       .*&&&&&&&&&&$$.@.&&&.@.&&&&&&&&&&&&&&&.  ",
+"       .*&&&&&&&&&$$.@@.&&.@@.&&....&&....&&.   ",
+"       .*&&&&&&&&$$.@@.&&&.@.&&&.+.&&&. .&&&.   ",
+"       .*&&&&&&&$$.@@@.&&.@@.&&.++.&&.  .&&.    ",
+"       .*&&&&&&$$.@@@.&&&.@.&&&.+.&&&. .&&&.    ",
+"       .*&&&&&$$.++@@.&&.@@.&&.. .&&.  .&&.     ",
+"       .*&&&&$$. .++.&&&.@.&&&. .&&&. .&&&.     ",
+"        .$$$$$.   .+.&&&&..&&&&..&&&&..&&&&.    ",
+"         .....     .+....@+....  ....  ....     ",
+"                    .++@@++.                    ",
+"                     .++++.                     ",
+"                      .++.                      ",
+"                       ..                       "};
diff --git a/runtime/tutor/runtime/vimlogo.eps b/runtime/tutor/runtime/vimlogo.eps
new file mode 100644
index 0000000000000000000000000000000000000000..5bf45ff4f7f98eafad7c70dab0de6afd3b5012cf
--- /dev/null
+++ b/runtime/tutor/runtime/vimlogo.eps
@@ -0,0 +1,791 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 147 74 429 356 
+%%LanguageLevel: 1
+%%Creator: CorelDRAW 11
+%%Title: vimlogo.eps
+%%CreationDate: Mon Feb 02 14:35:16 2004
+%%DocumentProcessColors: Cyan Yellow Black 
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+/AutoSteps 0 def
+/CMYKMarks true def
+/UseLevel 1 def
+%Build: CorelDRAW 11 Version 11.633
+%Color profile:  Generic offset separations profile
+/CorelIsEPS true def
+%%BeginResource: procset wCorel11Dict 11.0 0
+/wCorel11Dict 300 dict def wCorel11Dict begin
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved.     v11.0 r0.0
+/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat}
+bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld
+/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{}
+bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF
+false def/$Scra 0 def/SetScr/setscreen ld/@ss{2 index 0 eq{$dsf 3 1 roll 4 -1
+roll pop}if exch $Scra add exch load SetScr}bd/SepMode_5 where{pop}{/SepMode_5
+0 def}ifelse/CorelIsSeps where{pop}{/CorelIsSeps false def}ifelse
+/CorelIsInRIPSeps where{pop}{/CorelIsInRIPSeps false def}ifelse/CorelIsEPS
+where{pop}{/CorelIsEPS false def}ifelse/CurrentInkName_5 where{pop}
+{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def}
+ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0
+def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false
+def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def
+/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd
+/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def
+/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring
+16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle
+16#60/grave 16#7C/bar
+16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis
+16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def/Comp?{
+/LumSepsDict where{pop false}{/AldusSepsDict where{pop false}{1 0 0 0 @gs
+setcmykcolor currentcmykcolor @gr add add add 0 ne 0 1 0 0 @gs setcmykcolor
+currentcmykcolor @gr add add add 0 ne 0 0 1 0 @gs setcmykcolor currentcmykcolor
+@gr add add add 0 ne 0 0 0 1 @gs setcmykcolor currentcmykcolor @gr add add add
+0 ne and and and}ifelse}ifelse}bd/@PL{/LV where{pop LV 2 ge L2? not and{@np
+/Courier findfont 12 scalefont setfont 72 144 m
+(The PostScript level set in the Corel application is higher than)show 72 132 m
+(the PostScript level of this device. Change the PS Level in the Corel)show 72
+120 m(application to Level 1 by selecting the PostScript tab in the print)show
+72 108 m(dialog, and selecting Level 1 from the Compatibility drop down list.)
+show flush spg quit}if}if}bd/@BeginSysCorelDict{systemdict/Corel30Dict known
+{systemdict/Corel30Dict get exec}if systemdict/CorelLexDict known{1 systemdict
+/CorelLexDict get exec}if}bd/@EndSysCorelDict{systemdict/Corel30Dict known
+{end}if/EndCorelLexDict where{pop EndCorelLexDict}if}bd AutoFlatness{/@ifl{dup
+currentflat exch sub 10 gt{
+([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush
+@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{
+{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill
+{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip
+/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat}
+bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse}
+bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped
+{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{
+/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit
+ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l
+/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp}
+bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1
+exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1
+sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type
+/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd
+/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def}
+ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{
+/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{
+dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2
+copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix
+/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd
+{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd}
+if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch
+load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA}
+{$dsa}ifelse $SCP @ss}if}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge
+{pop}{exch pop}ifelse}bd/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch
+rl neg 0 rl @cp}bd/currentscale{1 0 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1
+exch sub}bd/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}
+repeat pop}bd/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1
+roll sub neg exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index
+.114 mul add 4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb
+/setrgbcolor ld/GetRgb/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray
+ld/SetRgb2 systemdict/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor
+get def/SetHsb systemdict/sethsbcolor get def/GetHsb systemdict
+/currenthsbcolor get def/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor
+sub 3 1 roll SetHsb GetRgb2}bd/setcmykcolor where{pop/LumSepsDict where{pop
+/SetCmyk_5{LumSepsDict/setcmykcolor get exec}def}{/AldusSepsDict where{pop
+/SetCmyk_5{AldusSepsDict/setcmykcolor get exec}def}{/SetCmyk_5/setcmykcolor ld
+}ifelse}ifelse}{/SetCmyk_5{cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{
+pop/GetCmyk/currentcmykcolor ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse
+/setoverprint where{pop}{/setoverprint{/$op xd}bd}ifelse/currentoverprint where
+{pop}{/currentoverprint{$op}bd}ifelse/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1
+roll mul exch}repeat pop}ifelse}bd/@trp{exch pop 5 1 roll @tc_5}bd
+/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0 4 $ink_5 sub index exch pop 5 1
+roll pop pop pop pop SepsColor true eq{$ink_5 3 gt{1 sub neg SetGry}{0 0 0 4
+$ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry}ifelse}ifelse}bd
+/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array astore}bd}ifelse
+/Corelsetcustomcolor_exists false def/setcustomcolor where{pop
+/Corelsetcustomcolor_exists true def}if CorelIsSeps true eq CorelIsInRIPSeps
+false eq and{/Corelsetcustomcolor_exists false def}if
+Corelsetcustomcolor_exists false eq{/setcustomcolor{exch aload pop SepMode_5 0
+eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0}ifelse 6 1 roll
+5 rp 1 sub neg SetGry}ifelse}bd}if/@scc_5{dup type/booleantype eq{dup
+currentoverprint ne{setoverprint}{pop}ifelse}{1 eq setoverprint}ifelse dup _ eq
+{pop setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse
+SepMode_5 0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage
+where{pop/ColorImage{colorimage}def}{/ColorImage{/ncolors xd/$multi xd $multi
+true eq{ncolors 3 eq{/daqB xd/daqG xd/daqR xd pop pop exch pop abs{daqR pop
+daqG pop daqB pop}repeat}{/daqK xd/daqY xd/daqM xd/daqC xd pop pop exch pop abs
+{daqC pop daqM pop daqY pop daqK pop}repeat}ifelse}{/dataaq xd{dataaq ncolors
+dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index get 255
+div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g 255 mul
+cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv getinterval pop}{
+4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1 index get 255 div
+$dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div $dat 4 index 3
+add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1 roll put}for $dat
+0 $dat length ncolors idiv getinterval}if}ifelse}image}ifelse}bd}ifelse
+/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd
+/currentcmykcolor{GetCmyk}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd
+/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor}
+bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd
+/currentgray{currentrgbcolor rgb2g}bd/InsideDCS false def/IMAGE/image ld/image
+{InsideDCS{IMAGE}{/EPSDict where{pop SepMode_5 0 eq{IMAGE}{dup type/dicttype eq
+{dup/ImageType get 1 ne{IMAGE}{dup dup/BitsPerComponent get 8 eq exch
+/BitsPerComponent get 1 eq or currentcolorspace 0 get/DeviceGray eq and{
+CurrentInkName_5(Black)eq{IMAGE}{dup/DataSource get/TCC xd/Height get abs{TCC
+pop}repeat}ifelse}{IMAGE}ifelse}ifelse}{2 index 1 ne{CurrentInkName_5(Black)eq
+{IMAGE}{/TCC xd pop pop exch pop abs{TCC pop}repeat}ifelse}{IMAGE}ifelse}
+ifelse}ifelse}{IMAGE}ifelse}ifelse}bd}ifelse/WaldoColor_5 true def/$fm 0 def
+/wfill{1 $fm eq{fill}{eofill}ifelse}bd/@Pf{@sv SepMode_5 0 eq $Psc 0 ne or
+$ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o @scc_5 pop $ctm setmatrix 72
+1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn load exec}{1 SetGry
+wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if $fil
+1 eq{CorelPtrnDoFill}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$fil 4 eq
+{CorelShfillDoFill}{$t $c $m $y $k $n $o @scc_5{wfill}{@np}ifelse}ifelse}
+ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd/f{@cp F}bd/S{
+matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K
+$N $O @scc_5{matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse $SDF
+{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs F @gr S}bd/b{@cp B}bd/_E{
+5 array astore exch cvlit xd}bd/@cc{currentfile $dat readhexstring pop}bd/@sm{
+/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd/Bblly xd/Bbllx xd}bd/@c{
+@cp}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd}bd/tcc{@cc}def/@B{
+@gs S @gr F}bd/@b{@cp @B}bd/@sep{CurrentInkName_5(Composite)eq{/$ink_5 -1 def}
+{CurrentInkName_5(Cyan)eq{/$ink_5 0 def}{CurrentInkName_5(Magenta)eq{/$ink_5 1
+def}{CurrentInkName_5(Yellow)eq{/$ink_5 2 def}{CurrentInkName_5(Black)eq
+{/$ink_5 3 def}{/$ink_5 4 def}ifelse}ifelse}ifelse}ifelse}ifelse}bd/@whi{@gs
+-72000 dup m -72000 72000 l 72000 dup l 72000 -72000 l @cp 1 SetGry fill @gr}
+bd/@neg{[{1 exch sub}/exec cvx currenttransfer/exec cvx]cvx settransfer @whi}
+bd/deflevel 0 def/@sax{/deflevel deflevel 1 add def}bd/@eax{/deflevel deflevel
+dup 0 gt{1 sub}if def deflevel 0 gt{/eax load}{eax}ifelse}bd/eax{{exec}forall}
+bd/@rax{deflevel 0 eq{@rs @sv}if}bd systemdict/pdfmark known not{/pdfmark
+/cleartomark ld}if/wclip{1 $fm eq{clip}{eoclip}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved.     v11.0 r0.0
+/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3
+index 3 index l clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true
+def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg false def}
+ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string
+def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts 1 eq
+{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load $bts
+1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop}
+repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd $ngx $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $wid $hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse
+]$msimage false eq $ncl 1 eq or{/$dat $wid $bts mul $ncl mul 8 div ceiling cvi
+string def/@cc load false $ncl ColorImage}{$wid $bts mul 8 div ceiling cvi $ncl
+3 eq{dup dup/$dat1 exch string def/$dat2 exch string def/$dat3 exch string def
+/@cc1 load/@cc2 load/@cc3 load}{dup dup dup/$dat1 exch string def/$dat2 exch
+string def/$dat3 exch string def/$dat4 exch string def/@cc1 load/@cc2 load
+/@cc3 load/@cc4 load}ifelse true $ncl ColorImage}ifelse $SDF{$dsf $dsa $dsp
+@ss}if @gr $ctm setmatrix}bd/@cc1{currentfile $dat1 readhexstring pop}bd/@cc2{
+currentfile $dat2 readhexstring pop}bd/@cc3{currentfile $dat3 readhexstring pop
+}bd/@cc4{currentfile $dat4 readhexstring pop}bd/$msimage false def/COMP 0 def
+/MaskedImage false def L2?{/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx
+xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling
+cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK}
+ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub $ury $lly sub scale 8
+dict begin/ImageType 1 def/Width $wid def/Height $hei abs def/BitsPerComponent
+$bts def/Decode $ncl 1 eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}
+ifelse}ifelse def/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def
+/DataSource currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP
+2 eq{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa
+$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@I_3{@sm @gs @ii @np/$ury
+xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul
+$ncl mul 8 div ceiling cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq
+{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub
+$ury $lly sub scale/ImageDataDict 8 dict def ImageDataDict begin/ImageType 1
+def/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1
+eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def
+/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource
+currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq{
+/RunLengthDecode filter}if}ifelse def end/MaskedImageDict 7 dict def
+MaskedImageDict begin/ImageType 3 def/InterleaveType 3 def/MaskDict
+ImageMaskDict def/DataDict ImageDataDict def end MaskedImageDict image $SDF
+{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/@SetMask{/$mbts xd/$mhei xd/$mwid
+xd/ImageMaskDict 8 dict def ImageMaskDict begin/ImageType 1 def/Width $mwid def
+/Height $mhei abs def/BitsPerComponent $mbts def/DataSource maskstream def
+/ImageMatrix[$mwid 0 0 $mhei neg 0 $mhei 0 gt{$mhei}{0}ifelse]def/Decode[1 0]
+def end}bd/@daq{dup type/arraytype eq{{}forall}if}bd/@BMP{/@cc xd UseLevel 3 eq
+MaskedImage true eq and{7 -2 roll pop pop @I_3}{12 index 1 gt UseLevel 2 eq
+UseLevel 3 eq or and{7 -2 roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}{
+7 -2 roll pop pop @I}ifelse}ifelse}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved.     v11.0 r0.0
+/@p{/$fil 1 def 1 eq dup/$vectpat xd{/$pfrg true def}{@gs $t $c $m $y $k $n $o
+@scc_5/$pfrg xd @gr}ifelse/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd/$pn xd}bd
+/CorelPtrnDoFill{@gs $ctm setmatrix $pm concat CorelPtrnSetBBox wclip @sv Bburx
+Bbury $pm itransform/$tury xd/$turx xd Bbllx Bblly $pm itransform/$tlly xd
+/$tllx xd newpath $tllx $tlly m $tllx $tury l $turx $tury l $turx $tlly l $tllx
+$tlly m @cp pathbbox @rs/$tury xd/$turx xd/$tlly xd/$tllx xd/$wid $turx $tllx
+sub def/$hei $tury $tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc_5{wfill}if}{
+$t $c $m $y $k $n $o @scc_5{SepMode_5 0 eq $pfrg or{$tllx $tlly Tl $wid $hei
+scale <00> 8 1 false[8 0 0 1 0 0]{}imagemask}{/$bkg true def}ifelse}if}ifelse
+@gr $wid 0 gt $hei 0 gt and{$pn cvlit load aload pop/$pd xd 3 -1 roll sub
+/$phei xd exch sub/$pwid xd $wid $pwid div ceiling 1 add/$tlx xd $hei $phei div
+ceiling 1 add/$tly xd currentdict/CorelPtrnL2Pattern known $psy 0 eq and $psx 0
+eq and{CorelPtrnL2Pattern}{$psx 0 eq{CorelPtrnTileVeritcal}{CorelPtrnTileHoriz
+}ifelse}ifelse}if @gr @np/$bkg false def}bd/CorelPtrnSetBBox{pathbbox/$ury xd
+/$urx xd/$lly xd/$llx xd}bd/CorelPtrnSetFirstTile{$tllx $pxf add dup $tllx gt
+{$pwid sub}if/$tx xd $tury $pyf sub dup $tury lt{$phei add}if/$ty xd}bd/p{/$pm
+xd 7 rp/$pyf xd/$pxf xd/$pn xd/$fil 1 def}bd/CorelPtrnDraw{@ep}bd
+/CorelPtrnPutTile{@sv/$in true def 2 copy dup $lly le{/$in false def}if $phei
+sub $ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add $llx le{
+/$in false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl 0
+$phei rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 roll 3
+index sub Tl matrix currentmatrix/$ctm xd CorelPtrnDraw pop pop pop pop}{pop
+pop}ifelse @rs}bd/CorelPtrnTileHoriz{CorelPtrnSetFirstTile 0 1 $tly 1 sub{dup
+$psx mul $tx add{dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty
+exch sub 0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch CorelPtrnPutTile
+pop}for pop pop}for}bd/CorelPtrnTileVeritcal{CorelPtrnSetFirstTile 0 1 $tlx 1
+sub{dup $pwid mul $tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}
+{exit}ifelse}loop 0 1 $tly 1 sub{$phei mul 3 copy sub CorelPtrnPutTile pop}for
+pop pop}for}bd L2? UseLevel 2 ge and{/CorelPtrnL2Pattern{@sv[$pn cvlit load
+aload pop pop]$pwid $phei $pn cvlit load aload pop pop pop pop pathbbox pop pop
+2 index sub exch 3 index sub 4 -2 roll pop pop exch matrix identmatrix
+translate/PatternMatrix xd/PatternYStep xd/PatternXStep xd/PatternBBox xd
+currentdict/PatternMainDict xd <</PaintType 1/PatternType 1/TilingType 1/BBox
+PatternBBox/XStep PatternXStep/YStep PatternYStep/PaintProc{begin
+PatternMainDict begin $ctm currentmatrix pop 0 CorelPtrnDraw end end}bind >>
+PatternMatrix makepattern setpattern fill @rs}def}if
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+wCorel11Dict begin
+@BeginSysCorelDict
+2.6131 setmiterlimit
+1.00 setflat
+/$fst 128 def
+%%EndSetup
+
+%%Page: 1 1
+%LogicalPage: 1
+%%BeginPageSetup
+@sv
+@sm
+@sv
+%%EndPageSetup
+@rax %Note: Object
+147.81600 74.66400 428.47200 355.32000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+428.47200 216.43200 m
+286.70400 355.32000 L
+147.81600 213.62400 L
+286.70400 74.66400 L
+428.47200 216.43200 L
+@c
+B
+
+@rax %Note: Object
+286.70400 80.35200 422.78400 216.43200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.58 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.28800 216.43200 m
+422.78400 216.43200 L
+286.70400 80.35200 L
+286.70400 88.84800 L
+414.28800 216.43200 L
+@c
+B
+
+@rax %Note: Object
+153.50400 80.35200 286.70400 213.62400 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.51 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+153.50400 213.62400 m
+162.00000 213.62400 L
+286.70400 88.84800 L
+286.70400 80.35200 L
+153.50400 213.62400 L
+@c
+B
+
+@rax %Note: Object
+153.50400 213.62400 286.70400 349.63200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 341.20800 m
+286.70400 349.63200 L
+153.50400 213.62400 L
+162.00000 213.62400 L
+286.70400 341.20800 L
+@c
+B
+
+@rax %Note: Object
+286.70400 216.43200 422.78400 349.63200 @E
+ 0 O 0 @g
+0.73 0.00 0.99 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 349.63200 m
+286.70400 341.20800 L
+414.28800 216.43200 L
+422.78400 216.43200 L
+286.70400 349.63200 L
+@c
+B
+
+@rax %Note: Object
+162.00000 88.84800 414.28800 341.20800 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.40 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 88.84800 m
+414.28800 216.43200 L
+286.70400 341.20800 L
+162.00000 213.62400 L
+286.70400 88.84800 L
+@c
+B
+
+@rax %Note: Object
+165.81600 103.03200 423.72000 344.01600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+313.20000 312.84000 m
+321.69600 304.27200 L
+321.69600 304.27200 L
+263.08800 244.80000 L
+263.08800 304.27200 L
+268.77600 304.27200 L
+277.27200 312.84000 L
+277.27200 335.44800 L
+268.77600 344.01600 L
+174.31200 344.01600 L
+165.81600 335.44800 L
+165.81600 312.84000 L
+174.31200 304.27200 L
+180.93600 304.27200 L
+180.93600 111.52800 L
+191.30400 103.03200 L
+220.60800 103.03200 L
+423.72000 312.84000 L
+423.72000 335.44800 L
+415.22400 344.01600 L
+322.63200 344.01600 L
+313.20000 335.44800 L
+313.20000 312.84000 L
+@c
+B
+
+@rax %Note: Object
+171.43200 309.96000 271.58400 338.40000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+177.12000 309.96000 m
+171.43200 315.64800 L
+171.43200 332.64000 L
+177.12000 338.32800 L
+265.96800 338.40000 L
+271.58400 332.64000 L
+265.96800 329.90400 L
+263.08800 332.64000 L
+177.12000 318.52800 L
+177.12000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+187.48800 108.72000 194.11200 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+194.11200 108.72000 m
+187.48800 114.40800 L
+187.48800 310.03200 L
+194.11200 315.64800 L
+194.11200 108.72000 L
+@c
+B
+
+@rax %Note: Object
+247.03200 207.93600 341.56800 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+335.88000 309.96000 m
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 207.93600 L
+257.47200 230.61600 L
+335.88000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+177.12000 309.96000 196.05600 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+196.05600 318.45600 m
+194.11200 315.64800 L
+187.48800 309.96000 L
+177.12000 309.96000 L
+177.12000 321.33600 L
+196.05600 318.45600 L
+@c
+B
+
+@rax %Note: Object
+247.03200 208.00800 271.58400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+257.47200 309.96000 m
+257.47200 230.61600 L
+247.03200 208.00800 L
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+263.08800 332.64000 L
+271.58400 332.64000 L
+271.58400 315.64800 L
+265.96800 309.96000 L
+257.47200 309.96000 L
+@c
+B
+
+@rax %Note: Object
+318.88800 309.96000 418.10400 338.32800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+324.50400 309.96000 m
+318.88800 315.64800 L
+318.88800 332.64000 L
+325.44000 338.32800 L
+411.48000 338.32800 L
+418.10400 332.64000 L
+408.60000 324.14400 L
+324.50400 318.52800 L
+324.50400 309.96000 L
+@c
+B
+
+@rax %Note: Object
+194.11200 108.72000 418.10400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+418.10400 315.64800 m
+218.66400 108.72000 L
+194.11200 108.72000 L
+194.11200 117.21600 L
+212.11200 117.21600 L
+411.48000 321.33600 L
+408.60000 332.64000 L
+418.10400 332.64000 L
+418.10400 315.64800 L
+@c
+B
+
+@rax %Note: Object
+324.50400 309.96000 343.44000 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+343.44000 318.45600 m
+341.49600 315.64800 L
+335.88000 309.96000 L
+324.50400 309.96000 L
+324.50400 321.33600 L
+343.44000 318.45600 L
+@c
+B
+
+@rax %Note: Object
+177.12000 114.40800 412.41600 332.71200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+247.03200 208.00800 m
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+265.96800 329.90400 L
+263.08800 332.71200 L
+179.92800 332.71200 L
+177.12000 329.90400 L
+177.12000 318.52800 L
+179.92800 315.72000 L
+194.11200 315.72000 L
+194.11200 117.21600 L
+197.78400 114.40800 L
+213.98400 114.40800 L
+412.41600 321.33600 L
+412.41600 329.47200 L
+409.53600 332.71200 L
+327.38400 332.71200 L
+324.50400 329.90400 L
+324.50400 318.45600 L
+327.38400 315.64800 L
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 208.00800 L
+@c
+B
+
+@rax %Note: Object
+292.89600 185.18400 326.95200 213.55200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+298.58400 207.86400 m
+305.20800 213.55200 L
+322.20000 213.55200 L
+326.95200 207.86400 L
+321.26400 190.87200 L
+314.71200 185.18400 L
+297.72000 185.18400 L
+292.89600 190.87200 L
+298.58400 207.86400 L
+@c
+B
+
+@rax %Note: Object
+304.27200 114.33600 424.22400 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+304.27200 114.33600 m
+321.33600 165.31200 L
+315.64800 165.31200 L
+321.33600 182.37600 L
+346.75200 182.37600 L
+352.44000 176.68800 L
+356.25600 176.68800 L
+361.87200 182.37600 L
+380.80800 182.37600 L
+386.49600 176.68800 L
+390.24000 176.68800 L
+395.92800 182.37600 L
+416.66400 182.37600 L
+424.22400 171.00000 L
+411.84000 130.68000 L
+417.45600 130.68000 L
+411.98400 114.33600 L
+377.92800 114.33600 L
+391.24800 154.00800 L
+382.75200 154.00800 L
+374.90400 130.82400 L
+380.52000 130.82400 L
+375.19200 114.33600 L
+341.13600 114.33600 L
+354.38400 154.00800 L
+345.88800 154.00800 L
+337.96800 130.68000 L
+343.65600 130.68000 L
+338.32800 114.33600 L
+304.27200 114.33600 L
+@c
+B
+
+@rax %Note: Object
+311.83200 120.02400 418.46400 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.07200 176.68800 m
+418.46400 170.42400 L
+404.49600 125.64000 L
+410.11200 125.64000 L
+408.24000 120.02400 L
+385.56000 120.02400 L
+398.80800 159.69600 L
+378.93600 159.69600 L
+367.63200 125.64000 L
+373.24800 125.64000 L
+371.37600 120.02400 L
+348.69600 120.02400 L
+361.94400 159.69600 L
+342.07200 159.69600 L
+330.76800 125.64000 L
+336.45600 125.64000 L
+334.51200 120.02400 L
+311.83200 120.02400 L
+328.89600 171.00000 L
+323.20800 171.00000 L
+325.08000 176.68800 L
+345.88800 176.68800 L
+351.57600 171.00000 L
+357.19200 171.00000 L
+362.88000 176.68800 L
+379.87200 176.68800 L
+385.56000 171.00000 L
+391.24800 171.00000 L
+396.93600 176.68800 L
+414.07200 176.68800 L
+@c
+B
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+318.45600 182.37600 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+F
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+S
+
+@rax %Note: Object
+274.96800 120.02400 310.89600 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+297.64800 120.02400 m
+299.52000 125.64000 L
+293.83200 125.64000 L
+310.89600 176.68800 L
+287.28000 176.68800 L
+285.33600 171.00000 L
+291.96000 171.00000 L
+274.96800 120.02400 L
+297.64800 120.02400 L
+@c
+B
+
+@rax %Note: Object
+299.52000 190.87200 320.32800 207.86400 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+316.51200 193.68000 m
+320.32800 205.05600 L
+318.45600 207.86400 L
+307.08000 207.86400 L
+303.33600 205.05600 L
+299.52000 193.68000 L
+301.46400 190.87200 L
+312.84000 190.87200 L
+316.51200 193.68000 L
+@c
+B
+
+%%PageTrailer
+@rs
+@rs
+%%Trailer
+@EndSysCorelDict
+end
+%%DocumentSuppliedResources: procset wCorel11Dict 11.0 0
+%%EOF
diff --git a/runtime/tutor/tutor.sv.utf-8 b/runtime/tutor/tutor.sv.utf-8
new file mode 100644
index 0000000000000000000000000000000000000000..967fc82a72116974617f19c8b6f434eb73cf021e
--- /dev/null
+++ b/runtime/tutor/tutor.sv.utf-8
@@ -0,0 +1,830 @@
+===============================================================================
+= V ä l k o m m e n  t i l l  h a n d l e d n i n g e n  i  V i m  - Ver. 1.5 =
+===============================================================================
+
+     Vim är en väldigt kraftfull redigerare som har många kommandon, alltför
+     många att förklara i en handledning som denna. Den här handledningen är
+     gjord för att förklara tillräckligt många kommandon så att du enkelt ska
+     kunna använda Vim som en redigerare för alla ändamål.
+
+     Den beräknade tiden för att slutföra denna handledning är 25-30 minuter,
+     beroende på hur mycket tid som läggs ned på experimentering.
+
+     Kommandona i lektionerna kommer att modifiera texten. Gör en kopia av den
+     här filen att öva på (om du startade "vimtutor är det här redan en kopia).
+
+     Det är viktigt att komma ihåg att den här handledningen är konstruerad
+     att lära vid användning. Det betyder att du måste köra kommandona för att
+     lära dig dem ordentligt. Om du bara läser texten så kommer du att glömma
+     kommandona!
+
+     Försäkra dig nu om att din Caps-Lock tangent INTE är aktiv och tryck på
+     j-tangenten tillräckligt många gånger för att förflytta markören så att
+     Lektion 1.1 fyller skärmen helt.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lektion 1.1: FLYTTA MARKÖREN
+
+
+   ** För att flytta markören, tryck på tangenterna h,j,k,l som indikerat. **
+	     ^
+	     k		Tips:
+       < h	 l >	h-tangenten är till vänster och flyttar till vänster.
+	     j		l-tangenten är till höger och flyttar till höger.
+	     v		j-tangenten ser ut som en pil ned.
+  1. Flytta runt markören på skärmen tills du känner dig bekväm.
+
+  2. HÃ¥ll ned tangenten pil ned (j) tills att den repeterar.
+---> Nu vet du hur du tar dig till nästa lektion.
+
+  3. Flytta till Lektion 1.2, med hjälp av ned tangenten.
+
+Notera: Om du är osäker på någonting du skrev, tryck <ESC> för att placera dig
+	dig i Normal-läge. Skriv sedan om kommandot.
+
+Notera: Piltangenterna borde också fungera.  Men om du använder hjkl så kommer
+	du att kunna flytta omkring mycket snabbare, när du väl vant dig vid
+	det.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lektion 1.2: STARTA OCH AVSLUTA VIM
+
+
+  !! NOTERA: Innan du utför någon av punkterna nedan, läs hela lektionen!!
+
+  1. Tryck <ESC>-tangenten (för att se till att du är i Normal-läge).
+
+  2. Skriv:			:q! <ENTER>.
+
+---> Detta avslutar redigeraren UTAN att spara några ändringar du gjort.
+     Om du vill spara ändringarna och avsluta skriv:
+				:wq  <ENTER>
+
+  3. När du ser skal-prompten, skriv kommandot som tog dig in i den här
+     handledningen.  Det kan vara:	vimtutor <ENTER>
+     Normalt vill du använda:		vim tutor <ENTER>
+
+---> 'vim' betyder öppna redigeraren vim, 'tutor' är filen du vill redigera.
+
+  4. Om du har memorerat dessa steg och känner dig självsäker, kör då stegen
+     1 till 3 för att avsluta och starta om redigeraren. Flytta sedan ned
+     markören till Lektion 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lektion 1.3: TEXT REDIGERING - BORTTAGNING
+
+
+** När du är i Normal-läge tryck  x  för att ta bort tecknet under markören. **
+
+  1. Flytta markören till raden nedan med markeringen --->.
+
+  2. För att rätta felen, flytta markören tills den står på tecknet som ska
+     tas bort. fix the errors, move the cursor until it is on top of the
+
+  3. Tryck på	x-tangenten för att ta bort det felaktiga tecknet.
+
+  4. Upprepa steg 2 till 4 tills meningen är korrekt.
+
+---> Kkon hoppadee övverr måånen.
+
+  5. Nu när raden är korrekt, gå till Lektion 1.4.
+
+NOTERA: När du går igenom den här handledningen, försök inte att memorera, lär
+	genom användning.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lektion 1.4: TEXT REDIGERING - INFOGNING
+
+
+	 ** När du är i Normal-läge tryck  i  för att infoga text. **
+
+  1. Flytta markören till den första raden nedan med markeringen --->.
+
+  2. För att göra den första raden likadan som den andra, flytta markören till
+     det första tecknet EFTER där text ska infogas.
+
+  3. Tryck  i  och skriv in det som saknas.
+
+  4. När du rättat ett fel tryck <ESC> för att återgå till Normal-läge.
+     Upprepa steg 2 till 4 för att rätta meningen.
+
+---> Det sakns här .
+---> Det saknas lite text från den här raden.
+
+  5. När du känner dig bekväm med att infoga text, gå till sammanfattningen
+     nedan.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       LEKTION 1 SAMMANFATTNING
+
+
+  1. Markören flyttas genom att använda piltangenterna eller hjkl-tangenterna.
+	 h (vänster)	j (ned)       k (upp)	    l (höger)
+
+  2. För att starta Vim (från %-prompten) skriv:  vim FILNAMN <ENTER>
+
+  3. För att avsluta Vim skriv:  <ESC>  :q!  <ENTER>  för att kasta ändringar.
+		   ELLER skriv:  <ESC>	:wq  <ENTER>  för att spara ändringar.
+
+  4. För att ta bort tecknet under markören i Normal-läge skriv:  x
+
+  5. För att infoga text vid markören i Normal-läge skriv:
+	 i     skriv in text	<ESC>
+
+NOTERA: Genom att trycka <ESC> kommer du att placeras i Normal-läge eller
+	avbryta ett delvis färdigskrivet kommando.
+
+Fortsätt nu med Lektion 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lektion 2.1: BORTTAGNINGSKOMMANDON
+
+
+	    ** Skriv  dw  för att radera till slutet av ett ord. **
+
+  1. Tryck  <ESC>  för att försäkra dig om att du är i Normal-läge.
+
+  2. Flytta markören till raden nedan markerad --->.
+
+  3. Flytta markören till början av ett ord som måste raderas.
+
+  4. Skriv   dw	 för att radera ordet.
+
+  NOTERA: Bokstäverna dw kommer att synas på den sista raden på skärmen när
+	du skriver dem. Om du skrev något fel, tryck  <ESC>  och börja om.
+
+---> Det är ett några ord roliga att som inte hör hemma i den här meningen.
+
+  5. Upprepa stegen 3 och 4 tills meningen är korrekt och gå till Lektion 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lektion 2.2: FLER BORTTAGNINGSKOMMANDON
+
+
+	   ** Skriv  d$	för att radera till slutet på raden. **
+
+  1. Tryck  <ESC>  för att försäkra dig om att du är i Normal-läge.
+
+  2. Flytta markören till raden nedan markerad --->.
+
+  3. Flytta markören till slutet på den rätta raden (EFTER den första . ).
+
+  4. Skriv    d$    för att radera till slutet på raden.
+
+---> Någon skrev slutet på den här raden två gånger. den här raden två gånger.
+
+
+  5. Gå vidare till Lektion 2.3 för att förstå vad det är som händer.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lesson 2.3: KOMMANDON OCH OBJEKT
+
+
+  Syntaxen för  d  raderingskommandot är följande:
+
+	 [nummer]   d	objekt	    ELLER	     d	 [nummer]   objekt
+  Var:
+    nummer - är antalet upprepningar av kommandot (valfritt, standard=1).
+    d - är kommandot för att radera.
+    objekt - är vad kommandot kommer att operera på (listade nedan).
+
+  En kort lista över objekt:
+    w - från markören till slutet av ordet, inklusive blanksteget.
+    e - från markören till slutet av ordet, EJ inklusive blanksteget.
+    $ - från markören till slutet på raden.
+
+NOTERA:  För den äventyrslystne, genom att bara trycka på objektet i
+	 Normal-läge (utan kommando) så kommer markören att flyttas som
+	 angivet i objektlistan.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Lektion 2.4: ETT UNDANTAG TILL 'KOMMANDO-OBJEKT'
+
+
+	       ** Skriv	 dd   för att radera hela raden. **
+
+  På grund av hur vanligt det är att ta bort hela rader, valde upphovsmannen
+  till Vi att det skulle vara enklare att bara trycka d två gånger i rad för
+  att ta bort en rad.
+
+  1. Flytta markören till den andra raden i frasen nedan.
+  2. Skriv  dd  för att radera raden.
+  3. Flytta nu till den fjärde raden.
+  4. Skriv   2dd   (kom ihåg:  nummer-kommando-objekt) för att radera de två
+     raderna.
+
+      1)  Roses are red,
+      2)  Mud is fun,
+      3)  Violets are blue,
+      4)  I have a car,
+      5)  Clocks tell time,
+      6)  Sugar is sweet
+      7)  And so are you.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Lektion 2.5: Ã…NGRA-KOMMANDOT
+
+
+** Skriv  u för att ångra det senaste kommandona,  U för att fixa en hel rad. **
+
+  1. Flytta markören till slutet av raden nedan markerad ---> och placera den
+     på det första felet.
+  2. Skriv  x  för att radera den första felaktiga tecknet.
+  3. Skriv nu  u  för att ångra det senaste körda kommandot.
+  4. Rätta den här gången alla felen på raden med  x-kommandot.
+  5. Skriv nu  U  för att återställa raden till dess ursprungliga utseende.
+  6. Skriv nu  u  några gånger för att ångra  U  och tidigare kommandon.
+  7. Tryck nu CTRL-R (håll inne CTRL samtidigt som du trycker R) några gånger
+     för att upprepa kommandona (ångra ångringarna).
+
+---> Fiixa felen ppå deen häär meningen och återskapa dem med ångra.
+
+  8. Det här är väldigt användbara kommandon.  Gå nu vidare till
+     Lektion 2 Sammanfattning.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       LEKTION 2 SAMMANFATTNING
+
+
+  1. För att radera från markören till slutet av ett ord skriv:    dw
+
+  2. För att radera från markören till slutet av en rad skriv:    d$
+
+  3. För att radera en hel rad skriv:    dd
+
+  4. Syntaxen för ett kommando i Normal-läge är:
+
+       [nummer]   kommando   objekt   ELLER   kommando   [nummer]   objekt
+     där:
+       nummer - är hur många gånger kommandot kommandot ska repeteras
+       kommando - är vad som ska göras, t.ex.  d  för att radera
+       objekt - är vad kommandot ska operera på, som t.ex.  w (ord),
+		$ (till slutet av raden), etc.
+
+  5. För att ångra tidigare kommandon, skriv:  u (litet u)
+     För att ångra alla tidigare ändringar på en rad skriv:  U (stort U)
+     För att ångra ångringar tryck:  CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Lektion 3.1: KLISTRA IN-KOMMANDOT
+
+
+   ** Skriv  p  för att klistra in den senaste raderingen efter markören. **
+
+  1. Flytta markören till den första raden i listan nedan.
+
+  2. Skriv  dd  för att radera raden och lagra den i Vims buffert.
+
+  3. Flytta markören till raden OVANFÖR där den raderade raden borde vara.
+
+  4. När du är i Normal-läge, skriv    p	 för att byta ut raden.
+
+  5. Repetera stegen 2 till 4 för att klistra in alla rader i rätt ordning.
+
+     d) Kan du lära dig också?
+     b) Violetter är blå,
+     c) Intelligens fås genom lärdom,
+     a) Rosor är röda,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lesson 3.2: ERSÄTT-KOMMANDOT
+
+
+  ** Skriv  r  och ett tecken för att ersätta tecknet under markören. **
+
+  1. Flytta markören till den första raden nedan markerad --->.
+
+  2. Flytta markören så att den står på det första felet.
+
+  3. Skriv   r	och sedan det tecken som borde ersätta felet.
+
+  4. Repetera steg 2 och 3 tills den första raden är korrekt.
+
+--->  När drn här ruden skrevs, trickte någon på fil knappar!
+--->  När den här raden skrevs, tryckte någon på fel knappar!
+
+  5. GÃ¥ nu vidare till Lektion 3.2.
+
+NOTERA: Kom ihåg att du skall lära dig genom användning, inte genom memorering.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lektion 3.3: ÄNDRA-KOMMANDOT
+
+
+	   ** För att ändra en del eller ett helt ord, skriv  cw . **
+
+  1. Flytta markören till den första redan nedan markerad --->.
+
+  2. Placera markören på d i rdrtn.
+
+  3. Skriv  cw  och det rätta ordet (i det här fallet, skriv "aden".)
+
+  4. Tryck <ESC> och flytta markören till nästa fel (det första tecknet som
+     ska ändras.)
+
+  5. Repetera steg 3 och 4 tills den första raden är likadan som den andra.
+
+---> Den här rdrtn har några otf som brhotrt ändras mrf ändra-komjendit.
+---> Den här raden har några ord som behöver ändras med ändra-kommandot.
+
+Notera att  cw  inte bara ändrar ordet, utan även placerar dig i infogningsläge.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lektion 3.4: FLER ÄNDRINGAR MED c
+
+
+     ** Ändra-kommandot används på samma objekt som radera. **
+
+  1. Ändra-kommandot fungerar på samma sätt som radera. Syntaxen är:
+
+       [nummer]   c   objekt	   ELLER	    c	[nummer]   objekt
+
+  2. Objekten är också de samma, som t.ex.   w (ord), $ (slutet av raden), etc.
+
+  3. Flytta till den första raden nedan markerad -->.
+
+  4. Flytta markören till det första felet.
+
+  5. Skriv  c$  för att göra resten av raden likadan som den andra och tryck
+     <ESC>.
+
+---> Slutet på den här raden behöver hjälp med att få den att likna den andra.
+---> Slutet på den här raden behöver rättas till med  c$-kommandot.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       LEKTION 3 SAMMANFATTNING
+
+
+  1. För att ersätta text som redan har blivit raderad, skriv   p .
+     Detta klistrar in den raderade texten EFTER markören (om en rad raderades
+     kommer den att hamna på raden under markören.
+
+  2. För att ersätta tecknet under markören, skriv   r   och sedan tecknet som
+     kommer att ersätta orginalet.
+
+  3. Ändra-kommandot låter dig ändra det angivna objektet från markören till
+     slutet på objektet. eg. Skriv  cw  för att ändra från markören till slutet
+     på ordet, c$	för att ändra till slutet på en rad.
+
+  4. Syntaxen för ändra-kommandot är:
+
+	 [nummer]   c	objekt	      ELLER	c   [nummer]   objekt
+
+Gå nu till nästa lektion.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lektion 4.1: POSITION OCH FILSTATUS
+
+
+  ** Tryck CTRL-g för att visa din position i filen och filstatusen.
+     Tryck SHIFT-G för att flytta till en rad i filen. **
+
+  Notera: Läsa hela den lektion innan du utför något av stegen!!
+
+  1. HÃ¥ll ned Ctrl-tangenten och tryck  g . En statusrad med filnamn och raden
+     du befinner dig på kommer att synas. Kom ihåg radnummret till Steg 3.
+
+  2. Tryck shift-G för att flytta markören till slutet på filen.
+
+  3. Skriv in nummret på raden du var på och tryck sedan shift-G. Detta kommer
+     att ta dig tillbaka till raden du var på när du först tryckte Ctrl-g.
+     (När du skriver in nummren, kommer de INTE att visas på skärmen.)
+
+  4. Om du känner dig säker på det här, utför steg 1 till 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lektion 4.2: SÖK-KOMMANDOT
+
+
+     ** Skriv  /  följt av en fras för att söka efter frasen. **
+
+  1. I Normal-läge skriv /-tecknet. Notera att det och markören blir synlig
+     längst ned på skärmen precis som med :-kommandot.
+
+  2. Skriv nu "feeel" <ENTER>. Det här är ordet du vill söka efter.
+
+  3. För att söka efter samma fras igen, tryck helt enkelt  n .
+     För att söka efter samma fras igen i motsatt riktning, tryck  Shift-N .
+
+  4. Om du vill söka efter en fras bakåt i filen, använd kommandot  ?  istället
+     för /.
+
+---> "feeel" är inte rätt sätt att stava fel: feeel är ett fel.
+
+Notera: När sökningen når slutet på filen kommer den att fortsätta vid början.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Lektion 4.3: SÖKNING EFTER MATCHANDE PARENTESER
+
+
+	      ** Skriv  %  för att hitta en matchande ),], or } . **
+
+  1. Placera markören på någon av (, [, or { på raden nedan markerad --->.
+
+  2. Skriv nu %-tecknet.
+
+  3. Markören borde vara på den matchande parentesen eller hakparentesen.
+
+  4. Skriv  %  för att flytta markören tillbaka till den första hakparentesen
+     (med matchning).
+
+---> Det ( här är en testrad med (, [ ] och { } i den. ))
+
+Notera: Det här är väldigt användbart vid avlusning av ett program med icke
+	matchande parenteser!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lektion 4.4: ETT SÄTT ATT ÄNDRA FEL
+
+
+	** Skriv  :s/gammalt/nytt/g  för att ersätta "gammalt" med "nytt". **
+
+  1. Flytta markören till raden nedan markerad --->.
+
+  2. Skriv  :s/denn/den <ENTER> . Notera att det här kommandot bara ändrar den
+     första förekomsten på raden.
+
+  3. Skriv nu	 :s/denn/den/g	   vilket betyder ersätt globalt på raden.
+     Det ändrar alla förekomster på raden.
+
+---> denn bästa tiden att se blommor blomma är denn på våren.
+
+  4. För att ändra alla förekomster av en teckensträng mellan två rader,
+     skriv  :#,#s/gammalt/nytt/g    där #,# är de två radernas radnummer.
+     Skriv  :%s/gammtl/nytt/g    för att ändra varje förekomst i hela filen.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       LEKTION 4 SAMMANFATTNING
+
+
+  1. Ctrl-g  visar din position i filen och filstatusen.
+     Shift-G  flyttar till slutet av filen. Ett radnummer följt  Shift-G
+     flyttar till det radnummret.
+
+  2. Skriver man  /	följt av en fras söks det FRAMMÅT efter frasen.
+     Skriver man  ?	följt av en fras söks det BAKÅT efter frasen.
+     Efter en sökning skriv  n  för att hitta nästa förekomst i samma riktning
+     eller  Shift-N  för att söka i den motsatta riktningen.
+
+  3. Skriver man  %	när markören är på ett  (,),[,],{, eller }  hittas dess
+     matchande par.
+
+  4. För att ersätta den första gammalt med nytt på en rad skriv  :s/gammlt/nytt
+     För att ersätta alla gammlt med nytt på en rad skriv  :s/gammlt/nytt/g
+     För att ersätta fraser mellan rad # och rad # skriv  :#,#s/gammlt/nytt/g
+     För att ersätta alla förekomster i filen skriv  :%s/gammlt/nytt/g
+     För att bekräfta varje gång lägg till "c"  :%s/gammlt/nytt/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Lektion 5.1: HUR MAN KÖR ETT EXTERNT KOMMANDO
+
+
+   ** Skriv  :!	följt av ett externt kommando för att köra det kommandot. **
+
+  1. Skriv det välbekanta kommandot	:  för att placera markören längst ned
+     på skärmen på skärmen. Detta låter dig skriva in ett kommando.
+
+  2. Skriv nu  !  (utropstecken).  Detta låter dig köra ett godtyckligt externt
+     skalkommando.
+
+  3. Som ett exempel skriv   ls   efter ! och tryck sedan <ENTER>. Detta kommer
+     att visa dig en listning av din katalog, precis som om du kört det vid
+     skalprompten. Använd  :!dir  om ls inte fungerar.
+
+Notera:  Det är möjligt att köra vilket externt kommando som helst på det här
+	 sättet.
+
+Notera:  Alla  :-kommandon måste avslutas med att trycka på <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lektion 5.2: MER OM ATT SPARA FILER
+
+
+     ** För att spara ändringar gjorda i en fil, skriv  :w FILNAMN. **
+
+  1. Skriv  :!dir  eller  :!ls  för att få en listning av din katalog.
+     Du vet redan att du måste trycka <ENTER> efter det här.
+
+  2. Välj ett filnamn som inte redan existerar, som t.ex. TEST.
+
+  3. Skriv nu:	 :w TEST   (där TEST är filnamnet du valt.)
+
+  4. Det här sparar hela filen	(Vim handledningen)  under namnet TEST.
+     För att verifiera detta, skriv    :!dir   igen för att se din katalog
+
+Notera: Om du skulle avsluta Vim och sedan öppna igen med filnamnet TEST så
+	skulle filen vara en exakt kopia av handledningen när du sparade den.
+
+  5. Ta nu bort filen genom att skriva (MS-DOS):  :!del TEST
+				   eller (Unix):  :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Lektion 5.3: ETT SELEKTIVT SPARA-KOMMANDO
+
+
+	** För att spara en del av en fil, skriv   :#,# w FILNAMN **
+
+  1. Ännu en gång, skriv  :!dir  eller  :!ls  för att få en listning av din
+     katalog och välj ett passande filnamn som t.ex. TEST.
+
+  2. Flytta markören högst upp på den här sidan och tryck  Ctrl-g  för att få
+     reda på radnumret på den raden. KOM IHÅG DET NUMMRET!
+
+  3. Flytta nu längst ned på sidan och skriv  Ctrl-g igen.
+     KOM IHÃ…G DET RADNUMMRET OCKSÃ…!
+
+  4. För att BARA spara en sektion till en fil, skriv   :#,# w TEST
+     där #,# är de två nummren du kom ihåg (toppen, botten) och TEST är
+     ditt filnamn.
+
+  5. Ännu en gång, kolla så att filen är där med  :!dir  men radera den INTE.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Lektion 5.4: TA EMOT OCH FÖRENA FILER
+
+
+       ** För att infoga innehållet av en fil, skriv   :r FILNAMN **
+
+  1. Skriv   :!dir   för att försäkra dig om att TEST-filen från tidigare
+     fortfarande är kvar.
+
+  2. Placera markören högst upp på den här sidan.
+
+NOTERA:  Efter att du kört Steg 3 kommer du att se Lektion 5.3.
+	 Flytta då NED till den här lektionen igen.
+
+  3. Ta nu emot din TEST-fil med kommandot   :r TEST   där TEST är namnet på
+     filen.
+
+NOTERA:  Filen du tar emot placeras där markören är placerad.
+
+  4. För att verifiera att filen togs emot, gå tillbaka och notera att det nu
+     finns två kopior av Lektion 5.3, orginalet och filversionen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       LEKTION 5 SAMMANFATTNING
+
+
+  1.  :!kommando  kör ett externt kommando.
+
+      Några användbara exempel är:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		  -  visar en kataloglistning.
+	  :!del FILNAMN    :!rm FILNAMN   -  tar bort filen FILNAMN.
+
+  2.  :w FILNAMN  sparar den aktuella Vim-filen med namnet FILNAMN.
+
+  3.  :#,#w FILNAMN  sparar raderna # till #  i filen FILNAMN.
+
+  4.  :r FILNAMN  tar emot filen FILNAMN och infogar den i den aktuella filen
+      efter markören.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Lektion 6.1: ÖPPNA-KOMMANDOT
+
+
+ ** Skriv  o  för att öppna en rad under markören och placera dig i
+    Infoga-läge. **
+
+  1. Flytta markören till raden nedan markerad --->.
+
+  2. Skriv  o (litet o) för att öppna upp en rad NEDANFÖR markören och placera
+     dig i Infoga-mode.
+
+  3. Kopiera nu raden markerad ---> och tryck <ESC> för att avsluta
+     Infoga-läget.
+
+---> Efter du skrivit  o  placerad markören på en öppen rad i Infoga-läge.
+
+  4. För att öppna upp en rad OVANFÖR markören, skriv ett stort  O , istället
+     för ett litet  o. Pröva detta på raden nedan.
+Öppna upp en rad ovanför denna genom att trycka Shift-O när markören står här.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lektion 6.2: LÄGG TILL-KOMMANDOT
+
+
+	     ** Skriv  a  för att infoga text EFTER markören. **
+
+  1. Flytta markören till slutet av den första raden nedan markerad ---> genom
+     att skriv  $	i Normal-läge.
+
+  2. Skriv ett  a  (litet a) för att lägga till text EFTER tecknet under
+     markören.  (Stort  A  lägger till i slutet av raden.)
+
+Notera: Detta undviker att behöva skriva  i , det sista tecknet, texten att
+	infoga, <ESC>, högerpil, och slutligen, x, bara för att lägga till i
+	slutet på en rad!
+
+  3. Gör nu färdigt den första raden. Notera också att lägga till är likadant
+      som Infoga-läge, enda skillnaden är positionen där texten blir infogad.
+
+---> Här kan du träna
+---> Här kan du träna på att lägga till text i slutet på en rad.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Lektion 6.3: EN ANNAN VERSION AV ERSÄTT
+
+
+      ** Skriv ett stort  R  för att ersätta fler än ett tecken. **
+
+  1. Flytta markören till den första raden nedan markerad --->.
+
+  2. Placera markören vid början av det första ordet som är annorlunda jämfört
+     med den andra raden markerad ---> (ordet "sista").
+
+  3. Skriv nu  R  och ersätt resten av texten på den första raden genom att
+     skriva över den gamla texten så att den första raden blir likadan som
+     den andra.
+
+---> För att få den första raden lika som den sista, använd tangenterna.
+---> För att få den första raden lika som den andra, skriv R och den nya texten.
+
+  4. Notera att när du trycker <ESC> för att avsluta, så blir eventuell
+     oförändrad text kvar.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Lektion 6.4: SÄTT FLAGGOR
+
+  ** Sätt en flagga så att en sökning eller ersättning ignorerar storlek **
+
+  1. Sök efter "ignore" genom att skriva:
+     /ignore
+     Repetera flera gånger genom att trycka på n-tangenten
+
+  2. Sätt 'ic' (Ignore Case) flaggan genom att skriva:
+     :set ic
+
+  3. Sök nu efter "ignore" igen genom att trycka: n
+     Repeat search several more times by hitting the n key
+
+  4. Sätt 'hlsearch' and 'incsearch' flaggorna:
+     :set hls is
+
+  5. Skriv nu in sök-kommandot igen, och se vad som händer:
+     /ignore
+
+  6. För att ta bort framhävningen av träffar, skriv
+     :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       LEKTION 6 SAMMANFATTNING
+
+
+  1. Genom att skriva  o  öpnnas en rad NEDANFÖR markören och markören placeras
+     på den öppna raden i Infoga-läge.
+     Genom att skriva ett stort  O  öppnas raden OVANFÖR raden som markören är
+     på.
+
+  2. Skriv ett  a  för att infoga text EFTER tecknet som markören står på.
+     Genom att skriva ett stort  A  läggs text automatiskt till i slutet på
+     raden.
+
+  3. Genom att skriva ett stort  R  hamnar du i Ersätt-läge till  <ESC>  trycks
+     för att avsluta.
+
+  4. Genom att skriva ":set xxx" sätts flaggan "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       LEKTION 7: ON-LINE HJÄLP-KOMMANDON
+
+
+		      ** Använd on-line hjälpsystemet **
+
+  Vim har ett omfattande on-line hjälpsystem. För att komma igång pröva ett av
+  dessa tre:
+	- tryck <HELP> tangenten (om du har någon)
+	- tryck <F1> tangenten (om du har någon)
+	- skriv   :help <ENTER>
+
+  Skriv   :q <ENTER>   för att stränga hjälpfönstret.
+
+  Du kan hitta hjälp om nästan allting, genom att ge ett argument till
+  ":help" kommandot. Pröva dessa (glöm inte att trycka <ENTER>):
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       LEKTION 8: SKAPA ETT UPPSTARTSSKRIPT
+
+			  ** Aktivera Vim- funktioner **
+
+  Vim har många fler funktioner än Vi, men de flesta av dem är inaktiverade som
+  standard. För att börja använda fler funktioner måste du skapa en "vimrc"-fil.
+
+  1. Börja redigera "vimrc"-filen, detta beror på ditt system:
+	:edit ~/.vimrc			för Unix
+	:edit $VIM/_vimrc		för MS-Windows
+
+  2. Läs nu texten i exempel "vimrc"-filen:
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Spara filen med:
+
+	:write
+
+  Nästa gång du startar Vim kommer den att använda syntaxframhävning.
+  Du kan lägga till alla inställningar du föredrar till den här "vimrc"-filen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Detta avslutar handledningen i Vim. Den var avsedd att ge en kort översikt av
+  redigeraren Vim, bara tillräckligt för att du ska kunna använda redigeraren
+  relativt enkelt. Den är långt ifrån komplett eftersom Vim har många många fler
+  kommandon. Läs användarmanualen härnäst: ":help user-manual".
+
+  För vidare läsning rekommenderas den här boken:
+	Vim - Vi Improved - av Steve Oualline
+	Förlag: New Riders
+  Den första boken som är endast behandlar Vim. Speciellt användbar för
+  nybörjare. Det finns många exempel och bilder.
+  Se http://iccf-holland.org/click5.html
+
+  Den här boken är äldre och behandlar mer Vi än Vim, men rekommenderas också:
+	Learning the Vi Editor - av Linda Lamb
+	Förlag: O'Reilly & Associates Inc.
+  Det är en bra bok för att lära sig nästan allt som du vill kunna göra med Vi.
+  Den sjätte upplagan inkluderar också information om Vim.
+
+  Den här handledningen är skriven av Michael C. Pierce och Robert K. Ware,
+  Colorado School of Mines med idéer från Charles Smith,
+  Colorado State University.  E-post: bware@mines.colorado.edu.
+
+  Modifierad för Vim av Bram Moolenaar.
+  Översatt av Johan Svedberg <johan@svedberg.com>
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.vi.utf-8 b/runtime/tutor/tutor.vi.utf-8
new file mode 100644
index 0000000000000000000000000000000000000000..ea7142ad7b6faf4d66a00322796dcad0827b653b
--- /dev/null
+++ b/runtime/tutor/tutor.vi.utf-8
@@ -0,0 +1,812 @@
+===============================================================================
+=    Xin chào mừng bạn đến với Hướng dẫn dùng Vim    -    Phiên bản 1.5      =
+===============================================================================
+	Vim là một trình soạn thảo rất mạnh. Vim có rất nhiều câu lệnh,
+	chính vì thế không thể trình bày hết được trong cuốn hướng dẫn này.
+	Cuốn hướng dẫn chỉ đưa ra những câu lệnh để giúp bạn sử dụng Vim
+	được dễ dàng hơn. Đây cũng chính là mục đich của sách
+
+	Cần khoảng 25-30 phút để hoàn thành bài học, phụ thuộc vào thời
+	gian thực hành.
+
+	Các câu lệnh trong bài học sẽ thay đổi văn bản này. Vì thế hãy tạo
+	một bản sao của tập tin này để thực hành (nếu bạn dùng "vimtutor"
+	thì đây đã là bản sao).
+
+	Hãy nhớ rằng hướng dẫn này viết với nguyên tắc "học đi đôi với hành".
+	Có nghĩa là bạn cần chạy các câu lệnh để học chúng. Nếu chỉ đọc, bạn
+	sẽ quên các câu lệnh!
+
+	Bây giờ, cần chắc chắn là phím Shift KHÔNG bị nhấn và hãy nhấn phím
+	j đủ số lần cần thiết (di chuyển con trỏ) để Bài 1.1 hiện ra đầy đủ
+	trên màn hình.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Bài 1.1:  DI CHUYỂN CON TRỎ
+
+
+   ** Để di chuyển con trỏ, nhấn các phím h,j,k,l như đã chỉ ra. **
+	     ^
+	     k		    Gợi ý:  phím h ở phía trái và di chuyển sang trái.
+	< h	l >		   phím l ở bên phải và di chuyển sang phải.
+	     j			   phím j trong như một mũi tên chỉ xuống
+	     v
+  1. Di chuyển con trỏ quanh màn hình cho đến khi bạn quen dùng.
+
+  2. Nhấn và giữ phím (j) cho đến khi nó lặp lại.
+---> Bây giờ bạn biết cách chuyển tới bài học thứ hai.
+
+  3. Sử dụng phím di chuyển xuống bài 1.2.
+
+Chú ý: Nếu bạn không chắc chắn về những gì đã gõ, hãy nhấn <ESC> để chuyển vào
+	 chế độ Câu lệnh, rồi gõ lại những câu lệnh mình muốn.
+
+Chú ý: Các phím mũi tên cũng làm việc. Nhưng một khi sử dụng thành thạo hjkl,
+	 bạn sẽ di chuyển con trỏ nhanh hơn so với các phím mũi tên.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Bài 1.2: VÀO VÀ THOÁT VIM
+
+
+  !! CHÚ Ý: Trước khi thực hiện bất kỳ lệnh nào, xin hãy đọc cả bài học này!!
+
+  1. Nhấn phím <ESC> (để chắc chắn là bạn đang ở chế độ Câu lệnh).
+
+  2. Gõ:			:q! <ENTER>.
+
+---> Lệnh này sẽ thoát trình soạn thảo mà KHÔNG ghi nhớ bất kỳ thay đổi nào mà bạn đã làm.
+     Nếu bạn muốn ghi nhớ những thay đổi đó và thoát thì hãy gõ:
+				:wq  <ENTER>
+
+  3. Khi thấy dấu nhắc shell, hãy gõ câu lệnh đã đưa bạn tới hướng dẫn này. Có
+	 thể là lệnh:	vimtutor vi <ENTER>
+     Thông thường bạn dùng:	vim tutor.vi<ENTER>
+
+---> 'vim' là trình soạn thảo vim, 'tutor.vi' là tập tin bạn muốn soạn thảo.
+
+  4. Nếu bạn đã nhớ và nắm chắc những câu lệnh trên, hãy thực hiện các bước từ
+	 1 tới 3 để thoát và quay vào trình soạn thảo. Sau đó di chuyển con trỏ
+	 tới Bài 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Bài 1.3: SOẠN THẢO VĂN BẢN - XÓA
+
+
+** Trong chế độ Câu lệnh nhấn	x  để xóa ký tự nằm dưới con trỏ. **
+
+  1. Di chuyển con trỏ tới dòng có dấu --->.
+
+  2. Để sửa lỗi, di chuyển con trỏ để nó nằm trên ký tự sẽ bị
+	 xóa.
+
+  3. Nhấn phím	x  để xóa ký tự không mong muốn.
+
+  4. Lặp lại các bước từ 2 tới 4 để sửa lại câu.
+
+---> Emm xiinh em đứnng chỗ nào cũnkg xinh.
+
+  5. Câu trên đã sửa xong, hãy chuyển tới Bài 1.4.
+
+Chú ý: Khi học theo cuốn hướng dẫn này đừng cố nhớ, mà học từ thực hành.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Bài 1.4: SOẠN THẢO VĂN BẢN - CHÈN
+
+
+	 ** Trong chế độ Câu lệnh nhấn  i  để chèn văn bản. **
+
+  1. Di chuyển con trỏ tới dòng có dấu ---> đầu tiên.
+
+  2. Để dòng thứ nhất giống hệt với dòng thứ hai, di chuyển con trỏ lên ký tự
+	 đầu tiên NGAY SAU chỗ muốn chèn văn bản.
+
+  3. Nhấn	i	và gõ văn bản cần thêm.
+
+  4. Sau mỗi lần chèn từ còn thiếu nhấn <ESC> để trở lại chế dộ Câu lệnh.
+     Lặp lại các bước từ 2 tới 4 để sửa câu này.
+
+---> Mot lam chang nen , ba cay chum lai hon cao.
+---> Mot cay lam chang nen non, ba cay chum lai nen hon nui cao.
+
+  5. Sau khi thấy quen với việc chèn văn bản hãy chuyển tới phần tổng kết
+	 ở dưới.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       TỔNG KẾT BÀI 1
+
+
+  1. Con trỏ được di chuyển bởi các phím mũi tên hoặc các phím hjkl.
+	 h (trái)	j (xuống)       k (lên)	    l (phải)
+
+  2. Để vào Vim (từ dấu nhắc %) gõ:  vim TÊNTẬPTIN <ENTER>
+
+  3. Muốn thoát Vim gõ:	   <ESC>   :q!	 <ENTER>  để vứt bỏ mọi thay đổi.
+	     HOẶC gõ:	   <ESC>   :wq	 <ENTER>  để ghi nhớ thay đổi.
+
+  4. Để xóa bỏ ký tự nằm dưới con trỏ trong chế độ Câu lệnh gõ:  x
+
+  5. Để chèn văn bản tại vị trí con trỏ trong chế độ Câu lệnh gõ:
+	 i     văn bản sẽ nhập	<ESC>
+
+CHÚ Ý: Nhấn <ESC> sẽ đưa bạn vào chế độ Câu lệnh hoặc sẽ hủy bỏ một câu lệnh
+	 hay đoạn câu lệnh không mong muốn.
+
+Bây giờ chúng ta tiếp tục với Bài 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Bài 2.1: CÁC LỆNH XÓA
+
+
+	    ** Gõ	dw	để xóa tới cuối một từ. **
+
+  1. Nhấn  <ESC>  để chắc chắn là bạn đang trong chế độ Câu lệnh.
+
+  2. Di chuyển con trỏ tới dòng có dấu --->.
+
+  3. Di chuyển con trỏ tới ký tự đầu của từ cần xóa.
+
+  4. Gõ   dw	 để làm từ đó biến mất.
+
+  CHÚ Ý: các ký tự dw sẽ xuất hiện trên dòng cuối cùng của màn hình khi bạn gõ
+	 chúng. Nếu bạn gõ nhầm, hãy nhấn <ESC> và làm lại từ đầu.
+
+---> Khi trái tỉm tìm tim ai như mùa đông giá lạnh lanh
+	 Anh đâu thành cánh én nhỏ trùng khơi.
+
+  5. Lặp lại các bước cho đến khi sửa xong câu thơ rồi chuyển tới Bài 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Bài 2.2: CÁC CÂU LỆNH XÓA KHÁC
+
+
+	   ** gõ  d$	để xóa tới cuối một dòng. **
+
+  1. Nhấn  <ESC>  để chắc chắn là bạn đang trong chế độ Câu lệnh.
+
+  2. Di chuyển con trỏ tới dòng có dấu --->.
+
+  3. Di chuyển con trỏ tới cuối câu đúng (SAU dấu . đầu tiên).
+
+  4. Gõ    d$    để xóa tới cuối dòng.
+
+---> Đã qua đi những tháng năm khờ dại. thừa thãi.
+
+
+  5. Chuyển tới Bài 2.3 để hiểu cái gì đang xảy ra.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Bài 2.3: CÂU LỆNH VÀ ĐỐI TƯỢNG
+
+
+  Câu lệnh xóa	d	có dạng như sau:
+
+	 [số]   d	đối_tượng	    HOẶC	     d	 [số]   đối_tượng
+  Trong đó:
+    số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
+    d - là câu lệnh xóa.
+    đối_tượng - câu lệnh sẽ thực hiện trên chúng (liệt kê phía dưới).
+
+  Danh sách ngắn của đối tượng:
+    w - từ con trỏ tới cuối một từ, bao gồm cả khoảng trắng.
+    e - từ con trỏ tới cuối một từ, KHÔNG bao gồm khoảng trắng.
+    $ - từ con trỏ tới cuối một dòng.
+
+CHÚ Ý:  Dành cho những người ham tìm hiểu, chỉ nhấn đối tượng trong chế độ Câu
+	 lệnh mà không có câu lệnh sẽ di chuyển con trỏ như trong danh sách trên.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Bài 2.4: TRƯỜNG HỢP NGOẠI LỆ CỦA QUY LUẬT  'CÂU LỆNH-ĐỐI TƯỢNG'
+
+
+	       ** Gõ	 dd   để xóa cả một dòng. **
+
+  Người dùng thường xuyên xóa cả một dòng, vì thế các nhà phát triển Vi đã
+  quyết định dùng hai chữ d để đơn giản hóa thao tác này.
+
+  1. Di chuyển con trỏ tới dòng thứ hai trong cụm phía dưới.
+  2. Gõ dd để xóa dòng này.
+  3. Bây giờ di chuyển tới dòng thứ  tư.
+  4. Gõ   2dd   (hãy nhớ lại bộ ba  số-câu lệnh-đối tượng) để xóa hai dòng.
+
+	 1) Trong tim em khắc sâu bao kỉ niệm
+	 2) Tình yêu chân thành em dành cả cho anh
+	 3) Dẫu cuộc đời như bể dâu thay đổi
+	 4) Anh mãi là ngọn lửa ấm trong đêm
+	 5) Đã qua đi những tháng năm khờ dại
+	 7) Hãy để tự em lau nước mắt của mình
+	 8) Lặng lẽ sống những đêm dài bất tận
+	 9) Bao khổ đau chờ tia nắng bình minh
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Bài 2.5: CÂU LỆNH "HỦY THAO TÁC"
+
+
+   ** Nhấn  u	để hủy bỏ những câu lệnh cuối cùng,   U	 để sửa cả một dòng. **
+
+  1. Di chuyển con trỏ tới dòng có dấu ---> và đặt con trỏ trên từ có lỗi
+	 đầu tiên
+  2. Gõ  x  để xóa chữ cái gây ra lỗi đầu tiên.
+  3. Bây giờ gõ  u  để hủy bỏ câu lệnh vừa thự hiện (xóa chữ cái).
+  4. Dùng câu lệnh	x	để sửa lỗi cả dòng này.
+  5. Bây giờ gõ chữ  U  hoa để phục hồi trạng thái ban đầu của dòng.
+  6. Bây giờ gõ  u  vài lần để hủy bỏ câu lệnh  U  và các câu lệnh trước.
+  7. Bây giờ gõ CTRL-R (giữ phím CTRL và gõ R) và lầu để thực hiện
+     lại các câu lệnh (hủy bỏ các câu lệnh hủy bỏ).
+
+---> Câyy ccó cộii, nuước csó nguuồn.
+
+  8. Đây là những câu lệnh rất hữu ích.  Bây giờ chuyển tới Tổng kết Bài 2.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       TỔNG KẾT BÀI 2
+
+
+  1. Để xóa từ con trỏ tới cuối một từ gõ:    dw
+
+  2. Để xóa từ con trỏ tới cuối một dòng gõ:    d$
+
+  3. Để xóa cả một dòng gõ:    dd
+
+  4. Một câu lệnh trong chế độ Câu lệnh có dạng:
+
+       [số]   câu_lệnh   đối_tượng     HOẶC     câu_lệnh	[số]   đối_tượng
+     trong đó:
+		số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
+		câu_lệnh - là những gì thực hiện, ví dụ	d	dùng để xóa.
+		đối_tượng - câu lệnh sẽ thực hiện trên chúng, ví dụ	w (từ),
+       	$ (tới cuối một dòng), v.v...
+
+  5. Để hủy bỏ thao tác trước, gõ:	     u	 (chữ u thường)
+     Để hủy bỏ tất cả các thao tác trên một dòng, gõ: U	 (chữ U hoa)
+     Để hủy bỏ các câu lệnh hủy bỏ, gõ:		     CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Bài 3.1: CÂU LỆNH DÁN
+
+
+       ** Gõ	p  để dán những gì vừa xóa tới sau con trỏ. **
+
+  1. Di chuyển con trỏ tới dòng đầu tiên trong cụm ở dưới.
+
+  2. Gõ  dd  để xóa và ghi lại một dòng trong bộ nhớ đệm của Vim.
+
+  3. Di chuyển con trỏ tới dòng Ở TRÊN chỗ cần dán.
+
+  4. Trong chế độ Câu lệnh, gõ    p	 để thay thế dòng.
+
+  5. Lặp lại các bước từ 2 tới 4 để đặt các dòng theo đúng thứ tự của chúng.
+
+     d) Niềm vui như gió xưa bay nhè nhẹ
+     b) Em vẫn mong anh sẽ đến với em
+     c) Đừng để em mất đi niềm hy vọng đó
+     a) Ai sẽ giúp em vượt qua sóng gió
+	 e) Dễ ra đi khó giữ lại bên mình
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Bài 3.2: CÂU LỆNH THAY THẾ
+
+
+  ** Gõ  r  và một ký tự để thay thế ký tự nằm dưới con trỏ. **
+
+  1. Di chuyển con trỏ tới dòng có dấu --->.
+
+  2. Di chuyển con trỏ tới ký tự gõ sai đầu tiên.
+
+  3. Gõ   r	và ký tự đúng.
+
+  4. Lặp lại các bước từ 2 đến 4 để sửa cả dòng.
+
+--->  "Trên đời nài làm gì có đườmg, người to đi mãi rồi thànk đường là tHôi"
+--->  "Trên đời này làm gì có đường, người ta đi mãi rồi thành đường mà thôi"
+
+  5. Bây giờ chuyển sang Bài 3.3.
+
+CHÚ Ý: Hãy nhớ rằng bạn cần thực hành, không nên "học vẹt".
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Bài 3.3: CÂU LỆNH THAY ĐỔI
+
+
+	   ** Để thay đổi một phần hay cả một từ, gõ  cw . **
+
+  1. Di chuyển con trỏ tới dòng có dấu --->.
+
+  2. Đặt con trỏ trên chữ trong.
+
+  3. Gõ  cw  và sửa lại từ (trong trường hợp này, gõ  'ine'.)
+
+  4. Gõ <ESC> và chuyển tới lỗi tiếp theo (chữ cái đầu tiên trong số cần thay.)
+
+  5. Lặp lại các bước 3 và 4 cho tới khi thu được dòng như dòng thứ hai.
+
+---> Trên dùgn này có một dầy từ cần tyays đổi, sử dunk câu lệnh thay đổi.
+---> Trên dong này có một vai từ cần thay đổi, sử dung câu lệnh thay đổi.
+
+Chú ý rằng  cw  không chỉ thay đổi từ, nhưng còn đưa bạn vào chế độ chèn.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Bài 3.4: TIẾP TỤC THAY ĐỔI VỚI c
+
+
+     ** Câu lệnh thay đổi được sử dụng với cùng đối tượng như câu lệnh xóa. **
+
+  1. Câu lệnh thay đổi làm việc tương tự như câu lệnh xóa. Định dạng như sau:
+
+        [số]   c   đối_tượng     HOẶC     c	[số]   đối_tượng
+
+  2. Đối tượng cũng giống như ở trên, ví dụ   w (từ), $ (cuối dòng), v.v...
+
+  3. Di chuyển con trỏ tới dòng có dấu --->.
+
+  4. Di chuyển con trỏ tới dòng có lỗi đầu tiên.
+
+  5. Gõ  c$  để sửa cho giống với dòng thứ hai và gõ <ESC>.
+
+---> Doan cuoi dong nay can sua de cho giong voi dong thu hai.
+---> Doan cuoi dong nay can su dung cau lenh c$ de sua.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       TỔNG KẾT BÀI 3
+
+
+  1. Để dán đoạn văn bản vừa xóa, gõ p. Câu lệnh này sẽ đặt đoạn văn bản này
+	 PHÍA SAU con trỏ (nếu một dòng vừa bị xóa, dòng này sẽ được đặt vào dòng
+	 nằm dưới con trỏ).
+
+  2. Để thay thế ký tự dưới con trỏ, gõ   r   và sau đó gõ
+     ký tự muốn thay vào.
+
+  3. Câu lệnh thay đổi cho phép bạn thay đổi đối tượng chỉ ra từ con
+     trỏ tới cuối đối tượng.  vd. Gõ  cw  để thay đổi từ
+     con trỏ tới cuối một từ, c$	để thay đổi tới cuối một dòng.
+
+  4. Định dạng để thay đổi:
+
+	[số]   c   đối_tượng     HOẶC     c	[số]   đối_tượng
+
+Bây giờ chúng ta tiếp tục bài học mới.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Bài 4.1: THÔNG TIN VỀ TẬP TIN VÀ VỊ TRÍ TRONG TẬP TIN
+
+
+  ** Gõ CTRL-g để hiển thị vị trí của bạn trong tập tin và thông tin về tập tin.
+     Gõ SHIFT-G để chuyển tới một dòng trong tập tin. **
+
+  Chú ý: Đọc toàn bộ bài học này trước khi thực hiện bất kỳ bước nào!!
+
+  1. Giữ phím Ctrl và nhấn  g .  Một dòng thông tin xuất hiện tại cuối trang
+     với tên tập tin và dòng mà bạn đang nằm trên.  Hãy nhớ số dòng này
+     Cho bước số 3.
+
+  2. Nhấn shift-G để chuyển tới cuối tập tin.
+
+  3. Gõ số dòng mà bạn đã nằm trên và sau đó shift-G.  Thao tác này sẽ đưa bạn
+     trở lại dòng mà con trỏ đã ở trước khi nhấn tổ hợp Ctrl-g.
+     (Khi bạn gõ số, chúng sẽ KHÔNG hiển thị trên màn hình.)
+
+  4. Nếu bạn cảm thấy đã hiểu rõ, hãy thực hiện các bước từ 1 tới 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Bài 4.2: CÂU LỆNH TÌM KIẾM
+
+
+     ** Gõ  /  và theo sau là cụm từ muốn tìm kiếm. **
+
+  1. Trong chế độ Câu lệnh gõ ký tự  /  .Chú ý rằng ký tự này  và con trỏ sẽ
+	 xuất hiện tại cuối màn hình giống như câu lệnh  :	.
+
+  2. Bây giờ gõ 'loiiiii' <ENTER>.  Đây là từ bạn muốn tìm.
+
+  3. Để tìm kiếm cụm từ đó lần nữa, đơn giản gõ  n .
+     Để tìm kiếm cụm từ theo hướng ngược lại, gõ  Shift-N .
+
+  4. Nếu bạn muối tìm kiếm cụm từ theo hướng ngược lại đầu tập tin, sử dụng
+     câu lệnh  ?  thay cho /.
+
+---> "loiiiii" là những gì không đúng lắm;  loiiiii thường xuyên xảy ra.
+
+Chú ý: Khi tìm kiếm đến cuối tập tin, việc tìm kiếm sẽ tiếp tục từ đầu
+      tập tin này.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Bài 4.3: TÌM KIẾM CÁC DẤU NGOẶC SÁNH ĐÔI
+
+
+	      ** Gõ  %  để tìm kiếm ),], hay } . **
+
+  1. Đặt con trỏ trên bất kỳ một (, [, hay { nào trong dòng có dấu --->.
+
+  2. Bây giờ gõ ký tự  %  .
+
+  3. Con trỏ sẽ di chuyển đến dấu ngoặc tạo cặp (dấu đóng ngoặc).
+
+  4. Gõ  %  để chuyển con trỏ trở lại dấu ngoặc đầu tiên (dấu mở ngoặc).
+
+---> Đây là ( một dòng thử nghiệm với các dấu ngoặc (, [ ] và { } . ))
+
+Chú ý: Rất có ích khi sửa lỗi chương trình, khi có các lỗi thừa thiếu dấu ngoặc!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Bài 4.4: MỘT CÁCH SỬA LỖI
+
+
+	** Gõ  :s/cũ/mới/g  để thay thế 'mới' vào 'cũ'. **
+
+  1. Di chuyển con trỏ tới dòng có dấu --->.
+
+  2. Gõ  :s/duou/ruou <ENTER> .  Chú ý rằng câu lệnh này chỉ thay đổi từ tìm
+     thấy đầu tiên trên dòng (từ 'duou' đầu dòng).
+
+  3. Bây giờ gõ	 :s/duou/ruou/g	   để thực hiện thay thế trên toàn bộ dòng.
+     Lệnh này sẽ thay thế tất cả những từ ('duou') tìm thấy trên dòng.
+
+---> duou ngon phai co ban hie. Khong duou cung khong hoa.
+
+  4. Để thay thế thực hiện trong đoạn văn bản giữa hai dòng,
+     gõ   :#,#s/cũ/mới/g    trong đó #,# là số thứ tự của hai dòng.
+     Gõ   :%s/cũ/mới/g    để thực hiện thay thế trong toàn bộ tập tin.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       TỔNG KẾT BÀI 4
+
+
+  1. Ctrl-g  vị trí của con trỏ trong tập tin và thông tin về tập tin.
+     Shift-G  di chuyển con trỏ tới cuối tập tin.  Số dòng và theo sau
+     là  Shift-G  di chuyển con trỏ tới dòng đó.
+
+  2. Gõ  /	và cụm từ theo sau để tìm kiếm cụm từ VỀ PHÍA TRƯỚC.
+     Gõ  ?	và cụm từ theo sau để tìm kiếm cụm từ NGƯỢC TRỞ LẠI.
+     Sau một lần tìm kiếm gõ  n  để tìm kiếm cụm từ lại một lần nữa theo hướng
+     đã tìm hoặc  Shift-N  để tìm kiếm theo hướng ngược lại.
+
+  3. Gõ  %	khi con trỏ nằm trên một  (,),[,],{, hay }  sẽ chỉ ra vị trí của
+     dấu ngoặc còn lại trong cặp.
+
+  4. Để thay thế 'mới' cho 'cũ' đầu tiên trên dòng, gõ    :s/cũ/mới
+     Để thay thế 'mới' cho tất cả 'cũ' trên dòng, gõ	   :s/cũ/mới/g
+     Để thay thế giữa hai dòng, gõ	   :#,#s/cũ/mới/g
+     Để thay thế trong toàn bộ tập tin, gõ	   :%s/cũ/mới/g
+     Để chương trình hỏi lại trước khi thay thế, thêm 'c'	:%s/cũ/mới/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Lesson 5.1: CÁCH THỰC HIỆN MỘT CÂU LỆNH NGOẠI TRÚ
+
+
+   ** Gõ  :!	theo sau là một câu lệnh ngoại trú để thực hiện câu lệnh đó. **
+
+  1. Gõ câu lệnh quen thuộc	:  để đặt con trỏ tại cuối màn hình.
+     Thao tác này cho phép bạn nhập một câu lệnh.
+
+  2. Bây giờ gõ ký tự  !  (chấm than).  Ký tự này cho phép bạn
+     thực hiện bất kỳ một câu lệnh shell nào.
+
+  3. Ví dụ gõ   ls   theo sau dấu ! và gõ <ENTER>.  Lệnh này
+	 sẽ hiển thị nội dung của thư mục hiện thời, hoặc sử dụng
+     lệnh   :!dir	nếu ls không làm việc.
+
+Chú ý:  Có thể thực hiện bất kỳ câu lệnh ngoại trú nào theo cách này.
+
+Chú ý:  Tất cả các câu lệnh  :  cần kết thúc bởi phím <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Bài 5.2: GHI LẠI CÁC TẬP TIN
+
+
+     ** Để ghi lại các thay đổi, gõ  :w TÊNTỆPTIN. **
+
+  1. Gõ  :!dir  hoặc  :!ls  để lấy bảng liệt kê thư mục hiện thời.
+     Như bạn đã biết, bạn cần gõ <ENTER> để thực hiện.
+
+  2. Chọn một tên tập tin chưa có, ví dụ TEST.
+
+  3. Bây giờ gõ:	 :w TEST   (trong đó TEST là tên tập tin bạn đã chọn.)
+
+  4. Thao tác này ghi toàn bộ tập tin	(Hướng dẫn dùng Vim) dưới tên TEST.
+     Để kiểm tra lại, gõ    :!dir   một lần nữa để liệt kê thư mục.
+
+Chú ý: Nếu bạn thoát khỏi Vim và quay trở lại với tên tập tin TEST, thì tập
+      tin sẽ là bản sao của hướng dẫn tại thời điểm bạn ghi lại.
+
+  5. Bây giờ xóa bỏ tập tin (MS-DOS):    :!del TEST
+				hay (Unix):	:!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Bài 5.3: CÂU LỆNH GHI CHỌN LỌC
+
+
+	** Để ghi một phần của tập tin, gõ   :#,# w TÊNTẬPTIN **
+
+  1. Gõ lại một lần nữa  :!dir  hoặc  :!ls  để liệt kê nội dung thư mục
+     rồi chọn một tên tập tin thích hợp, ví dụ TEST.
+
+  2. Di chuyển con trỏ tới đầu trang này, rồi gõ  Ctrl-g  để tìm ra số thứ
+     tự của dòng đó.  HÃY NHỚ SỐ THỨ TỰ NÀY!
+
+  3. Bây giờ di chuyển con trỏ tới dòng cuối trang và gõ lại Ctrl-g lần nữa.
+	 HÃY NHỚ CẢ SỐ THỨ TỰ NÀY!
+
+  4. Để CHỈ ghi lại một phần vào một tập tin, gõ   :#,# w TEST   trong đó #,#
+     là hai số thứ tự bạn đã nhớ (đầu,cuối) và TEST là tên tập tin.
+
+  5. Nhắc lại, xem tập tin của bạn có ở đó không với  :!dir  nhưng ĐỪNG xóa.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Bài 5.4: ĐỌC VÀ KẾT HỢP CÁC TẬP TIN
+
+
+       ** Để chèn nội dung của một tập tin, gõ   :r TÊNTẬPTIN **
+
+  1. Gõ   :!dir   để chắc chắn là có tệp tin TEST.
+
+  2. Đặt con trỏ tại đầu trang này.
+
+CHÚ Ý:  Sau khi thực hiện Bước 3 bạn sẽ thấy Bài 5.3. Sau đó cần di chuyển
+	 XUỐNG bài học này lần nữa.
+
+  3. Bây giờ dùng câu lệnh   :r TEST   để đọc tập tin TEST, trong đó TEST là
+     tên của tập tin.
+
+CHÚ Ý:  Tập tin được đọc sẽ đặt bắt đầu từ vị trí của con trỏ.
+
+  4. Để kiểm tra lại, di chuyển con trỏ ngược trở lại và thấy rằng bây giờ
+     có hai Bài 5.3, bản gốc và bản vừa chèn.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			      TỔNG KẾT BÀI 5
+
+
+  1.  :!câulệnh  thực hiện một câu lệnh ngoại trú
+
+      Một vài ví dụ hữu ích:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  liệt kê nội dung một thư mục.
+	  :!del TÊNTẬPTIN   :!rm TÊNTẬPTIN   -  xóa bỏ tập tin TÊNTẬPTIN.
+
+  2.  :w TÊNTẬPTIN  ghi tập tin hiện thời của Vim lên đĩa với tên TÊNTẬPTIN.
+
+  3.  :#,#w TÊNTẬPTIN  ghi các dòng từ # tới # vào tập tin TÊNTẬPTIN.
+
+  4.  :r TÊNTẬPTIN  đọc tập tin trên đĩa TÊNTẬPTIN và chèn nội dung của nó vào
+      tập tin hiện thời sau vị trí của con trỏ.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Bài 6.1: CÂU LỆNH TẠO DÒNG
+
+
+ ** Gõ  o  để mở một dòng phía dưới con trỏ và chuyển vào chế độ Soạn thảo. **
+
+  1. Di chuyển con trỏ tới dòng có dấu --->.
+
+  2. Gõ  o (chữ thường) để mở một dòng BÊN DƯỚI con trỏ và chuyển vào chế độ
+     Soạn thảo.
+
+  3. Bây giờ sao chép dòng có dấu ---> và nhấn <ESC> để thoát khỏi chế độ Soạn
+	 thảo.
+
+---> Sau khi gõ  o  con trỏ sẽ đặt trên dòng vừa mở trong chế độ Soạn thảo.
+
+  4. Để mở một dòng Ở TRÊN con trỏ, đơn giản gõ một chữ	O hoa, thay cho
+     chữ  o thường.  Hãy thử thực hiện trên dòng dưới đây.
+Di chuyển con trỏ tới dòng này, rồi gõ Shift-O sẽ mở một dòng trên nó.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Bài 6.2: CÂU LỆNH THÊM VÀO
+
+
+	     ** Gõ  a  để chèn văn bản vào SAU con trỏ. **
+
+  1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->
+     bằng cách gõ  $	trong chế độ câu lệnh.
+
+  2. Gõ  a  (chữ thường) để thêm văn bản vào SAU ký tự dưới con trỏ.
+     (Chữ  A  hoa thêm văn bản vào cuối một dòng.)
+
+Chú ý: Lệnh này thay cho việc gõ  i , ký tự cuối cùng, văn bản muốn chèn,
+     <ESC>, mũi tên sang phải, và cuối cùng, x , chỉ để thêm vào cuối dòng!
+
+  3. Bây giờ thêm cho đủ dòng thứ nhất. Chú ý rằng việc thêm giống hệt với
+     việc chèn, trừ vị trí chèn văn bản.
+
+---> Dong nay cho phep ban thuc hanh
+---> Dong nay cho phep ban thuc hanh viec them van ban vao cuoi dong.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Bài 6.3: MỘT CÁCH THAY THẾ KHÁC
+
+
+      ** Gõ chữ cái  R  hoa để thay thế nhiều ký tự. **
+
+  1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->.
+
+  2. Đặt con trỏ tại chữ cái đầu của từ đầu tiên khác với dòng có dấu
+     ---> tiếp theo (từ 'tren').
+
+  3. Bây giờ gõ R và thay thế phần còn lại của dòng thứ nhất bằng cách gõ
+     đè lên văn bản cũ để cho hai dòng giống nhau.
+
+---> De cho dong thu nhat giong voi dong thu hai tren trang nay.
+---> De cho dong thu nhat giong voi dong thu hai, go R va van ban moi.
+
+  4. Chú ý rằng khi bạn nhấn <ESC> để thoát, đoạn văn bản không sửa đổi sẽ
+	 được giữ nguyên.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Bài 6.4: THIẾT LẬP CÁC THAM SỐ
+
+	  ** Thiết lập một tùy chọn để việc tìm kiếm hay thay thế lờ đi kiểu chữ **
+
+  1. Tìm kiếm từ 'lodi' bằng cách gõ:
+     /lodi
+     Lặp lại vài lần bằng phím n.
+
+  2. Đặt tham số 'ic' (Lodi - ignore case) bằng cách gõ:
+     :set ic
+
+  3. Bây giờ thử lại tìm kiếm 'lodi' bằng cách gõ: n
+     Lặp lại vài lần bằng phím n.
+
+  4. Đặt các tham số 'hlsearch' và 'incsearch':
+     :set hls is
+
+  5. Bây giờ nhập lại câu lệnh tìm kiếm một lần nữa và xem cái gì xảy ra:
+     /lodi
+
+  6. Để xóa bỏ việc hiện sáng từ tìm thấy, gõ:
+     :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       TỔNG KẾT BÀI 6
+
+
+  1. Gõ  o	mở một dòng phía DƯỚI con trỏ và đặt con trỏ trên dòng vừa mở
+     trong chế độ Soạn thảo.
+     Gõ một chữ  O  hoa để mở dòng phía TRÊN dòng của con trỏ.
+
+  2. Gõ  a  để chèn văn bản vào SAU ký tự nằm dưới con trỏ.
+     Gõ một chữ  A  hoa tự động thêm văn bản vào cuối một dòng.
+
+  3. Gõ một chữ  R  hoa chuyển vào chế độ Thay thế cho đến khi nhấn  <ESC>.
+
+  4. Gõ ":set xxx" sẽ đặt tham số "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Bài 7: CÂU LỆNH TRỢ GIÚP
+
+
+		      ** Sử dụng hệ thống trợ giúp có sẵn **
+
+  Vim có một hệ thống trợ giúp đầy đủ. Để bắt đầu, thử một trong ba
+  lệnh sau:
+	- nhấn phím <HELP> (nếu bàn phím có)
+	- nhấn phím <F1> (nếu bàn phím có)
+	- gõ   :help <ENTER>
+
+  Gõ   :q <ENTER>   để đóng cửa sổ trợ giúp.
+
+  Bạn có thể tìm thấy trợ giúp theo một đề tài, bằng cách đưa tham số tới
+  câu lệnh ":help".  Hãy thử (đừng quên gõ <ENTER>):
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Bài 8: TẠO MỘT SCRIPT KHỞI ĐỘNG
+
+			  ** Bật các tính năng của Vim **
+
+  Vim có nhiều tính năng hơn Vi, nhưng hầu hết chúng bị tắt theo mặc định.
+  Để sử dụng các tính năng này bạn cần phải tạo một tập tin "vimrc".
+
+  1. Soạn thảo tệp tin "vimrc", phụ thuộc vào hệ thống của bạn:
+	:edit ~/.vimrc			đối với Unix
+	:edit $VIM/_vimrc		đối với MS-Windows
+
+  2. Bây giờ đọc tập tin "vimrc" ví dụ:
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Ghi lại tập tin:
+
+	:write
+
+  Trong lần khởi động tiếp theo, Vim sẽ sử dụng việc hiện sáng cú pháp.
+  Bạn có thể thêm các thiết lập ưa thích vào tập tin "vimrc" này.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Bài học hướng dẫn sử dụng Vim (Vim Tutor) kết thúc tại đây.  Bài học đưa ra
+  cái nhìn tổng quát về trình soạn thảo Vim, chỉ đủ để bạn có thể sử dụng
+  trình soạn thảo một cách dễ dàng. Bài học còn rất xa để có thể nói là đầy
+  đủ vì Vim có rất rất nhiều câu lệnh. Tiếp theo xin hãy đọc hướng dẫn người
+  dùng: ":help user-manual".
+
+  Cuốn sách sau được khuyên dùng cho việc nghiên cứu sâu hơn:
+	Vim - Vi Improved - Tác giả: Steve Oualline
+	Nhà xuất bản: New Riders
+  Cuốn sách đầu tiên dành hoàn toàn cho Vim. Đặc biệt có ích cho người mới.
+  Có rất nhiều ví dụ và tranh ảnh.
+  Hãy xem: http://iccf-holland.org/click5.html
+
+  Cuốn sách tiếp theo này xuất bản sớm hơn và nói nhiều về Vi hơn là Vim,
+  nhưng cũng rất nên đọc:
+	Learning the Vi Editor - Tác giả: Linda Lamb
+	Nhà xuất bản: O'Reilly & Associates Inc.
+  Đây là một cuốn sách hay và cho bạn biết tất cả cách thực hiện những gì muốn
+  làm với Vi. Lần xuất bản thứ sáu đã thêm thông tin về Vim.
+
+  Bài học hướng dẫn này viết bởi Michael C. Pierce và Robert K. Ware,
+  Colorado School of Mines sử dụng ý tưởng của Charles Smith,
+  Colorado State University.  E-mail: bware@mines.colorado.edu.
+
+  Sửa đổi cho Vim bởi Bram Moolenaar.
+
+  Dịch bởi: Phan Vĩnh Thịnh <teppi@vnlinux.org>, 2005
+  Translator: Phan Vinh Thịnh <teppi@vnlinux.org>, 2005
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/vimdir.info b/runtime/tutor/vimdir.info
new file mode 100755
index 0000000000000000000000000000000000000000..ddb2a14626501d11864c939a5e95ce6b31a9eea7
Binary files /dev/null and b/runtime/tutor/vimdir.info differ
diff --git a/runtime/tutor/vimtutor.bat b/runtime/tutor/vimtutor.bat
new file mode 100644
index 0000000000000000000000000000000000000000..b147a8c44f392b591fc2f9d726271120be19f30d
--- /dev/null
+++ b/runtime/tutor/vimtutor.bat
@@ -0,0 +1,67 @@
+:: Start Vim on a copy of the tutor file.
+@echo off
+
+:: Usage: vimtutor [-console] [xx]
+::
+:: -console means gvim will not be used
+:: xx is a language code like "es" or "nl".
+:: When an xx argument is given, it tries loading that tutor.
+:: When this fails or no xx argument was given, it tries using 'v:lang'
+:: When that also fails, it uses the English version.
+
+:: Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
+FOR %%d in (. %TMP% %TEMP%) DO IF EXIST %%d\nul SET TUTORCOPY=%%d\$tutor$
+
+SET xx=%1
+
+IF NOT .%1==.-console GOTO use_gui
+SHIFT
+SET xx=%1
+GOTO use_vim
+:use_gui
+
+:: Try making a copy of tutor with gvim.  If gvim cannot be found, try using
+:: vim instead.  If vim cannot be found, alert user to check environment and
+:: installation.
+
+:: The script tutor.vim tells Vim which file to copy.
+:: For Windows NT "start" works a bit differently.
+IF .%OS%==.Windows_NT GOTO ntaction
+
+start /w gvim -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim"
+IF ERRORLEVEL 1 GOTO use_vim
+
+:: Start gvim without any .vimrc, set 'nocompatible'
+start /w gvim -u NONE -c "set nocp" %TUTORCOPY%
+
+GOTO end
+
+:ntaction
+start "dummy" /b /w gvim -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim"
+IF ERRORLEVEL 1 GOTO use_vim
+
+:: Start gvim without any .vimrc, set 'nocompatible'
+start "dummy" /b /w gvim -u NONE -c "set nocp" %TUTORCOPY%
+
+GOTO end
+
+:use_vim
+:: The script tutor.vim tells Vim which file to copy
+vim -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim"
+IF ERRORLEVEL 1 GOTO no_executable
+
+:: Start vim without any .vimrc, set 'nocompatible'
+vim -u NONE -c "set nocp" %TUTORCOPY%
+
+GOTO end
+
+:no_executable
+ECHO.
+ECHO.
+ECHO No vim or gvim found in current directory or PATH.
+ECHO Check your installation or re-run install.exe
+
+:end
+:: remove the copy of the tutor
+IF EXIST %TUTORCOPY% DEL %TUTORCOPY%
+SET xx=
diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt
index 2c4102624a27b4187d7a3bfbba6a52c19d81f2bb..a2ee9545fead0aa7d73a1937271fe8e90f9141ca 100644
--- a/src/INSTALLpc.txt
+++ b/src/INSTALLpc.txt
@@ -155,16 +155,11 @@ Visual C++ 2008 Express Edition       *msvc-2008-express*
 -------------------------------
 
 Visual C++ 2008 Express Edition can be downloaded for free from:
-    http://msdn2.microsoft.com/en-us/express/default.aspx
-This includes the IDE and the debugger. You can build Vim with Make_mvc.mak.
+    http://www.microsoft.com/express/vc/Default.aspx
+This includes the IDE and the debugger.
 
-
-Visual C++ 2008 Express Edition       *msvc-2008-express*
--------------------------------
-
-Visual C++ 2008 Express Edition can be downloaded for free from:
-    http://msdn2.microsoft.com/en-us/express/default.aspx
-This includes the IDE and the debugger. You can build Vim with Make_mvc.mak.
+To set the environment execute the msvc2008.bat script.  You can then build
+Vim with Make_mvc.mak.
 
 
 2. MinGW
@@ -258,8 +253,9 @@ If you like, you can compile the 'mingw' Win32 version from the comfort of
 your Linux (or other unix) box.  To do this, you need to follow a few steps:
     1) Install the mingw32 cross-compiler. See
 	http://www.libsdl.org/extras/win32/cross/README.txt
-    2) get the *unix* version of the vim sources
-    3) in 'Make_ming.mak', set 'CROSS' to '1' instead of '0'.
+    2) Get and unpack both the Unix sources and the extra archive
+    3) in 'Make_ming.mak', set 'CROSS' to 'yes' instead of 'no'.
+       Make further changes to 'Make_ming.mak' as you wish.
     4) make -f Make_ming.mak gvim.exe
 
 Now you have created the Windows binary from your Linux box!  Have fun...
diff --git a/src/INSTALLvms.txt b/src/INSTALLvms.txt
index 1de2980275ea69aadfec24d347b6ddfe1b40c513..c617aae4a33771083d0a7548f89458e9364547fb 100644
--- a/src/INSTALLvms.txt
+++ b/src/INSTALLvms.txt
@@ -1,7 +1,7 @@
 INSTALLvms.txt - Installation of Vim on OpenVMS
 
 Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
-Last change:  2007 May 07
+Last change:  2008 Jan 06
 
 This file contains instructions for compiling Vim on Openvms.
 If you already have an executable version of Vim, you don't need this.
@@ -83,7 +83,7 @@ from CVS mirror ftp://ftp.polarhome.com/pub/cvs/SOURCE/
 			  NORMAL  - A default selection of features enabled
 			  BIG	  - Many features enabled, as rich as possible.
 			  (OpenVMS default)
-			  HUGE	  - All possible featues enabled.
+			  HUGE	  - All possible features enabled.
 			  Uncommented - will default to BIG
 	Default		: MODEL = BIG
 
diff --git a/src/Make_mint.mak b/src/Make_mint.mak
index 6bcaacb84f915fd2986b2b0d8beac6d0226e7b5f..97a2e4b4d13996a20624c9c6a633adb8fd1f62b0 100644
--- a/src/Make_mint.mak
+++ b/src/Make_mint.mak
@@ -11,7 +11,7 @@
 # Otherwise the postprocessing won't get done.
 #
 
-### This Makefile has been succesfully tested on these systems.
+### This Makefile has been successfully tested on these systems.
 ### Check the (*) column for remarks, listed below.
 ### Later code changes may cause small problems, otherwise Vim is supposed to
 ### compile and run without problems.
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index 34c87a598278512e008ec2dfa53d1cadaf981136..18fd327b81e00eb65470e58c501b628e55b35ed0 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -350,6 +350,9 @@ MSVCVER = 8.0
 !if "$(_NMAKE_VER)" == "9.00.20706.01"
 MSVCVER = 9.0
 !endif
+!if "$(_NMAKE_VER)" == "9.00.21022.08"
+MSVCVER = 9.0
+!endif
 !endif
 
 # Abort bulding VIM if version of VC is unrecognised.
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index c5b520c6663b8ab62fbe9755980155ca37bae31d..460fc2a39a9c7b61cfd436055cf308fdf97b4bf9 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -13,10 +13,6 @@
 
 #include "vim.h"
 
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>	    /* for chdir() */
-#endif
-
 static int	quitmore = 0;
 static int	ex_pressedreturn = FALSE;
 #ifndef FEAT_PRINTER
@@ -1132,7 +1128,7 @@ do_cmdline(cmdline, getline, cookie, flags)
 	{
 	    /* need to copy the command after the '|' to cmdline_copy, for the
 	     * next do_one_cmd() */
-	    mch_memmove(cmdline_copy, next_cmdline, STRLEN(next_cmdline) + 1);
+	    STRMOVE(cmdline_copy, next_cmdline);
 	    next_cmdline = cmdline_copy;
 	}
 
@@ -2375,7 +2371,7 @@ do_one_cmd(cmdlinep, sourcing,
 	     * Halving the number of backslashes is incompatible with previous
 	     * versions. */
 	    if (*p == '\\' && p[1] == '\n')
-		mch_memmove(p, p + 1, STRLEN(p));
+		STRMOVE(p, p + 1);
 	    else if (*p == '\n')
 	    {
 		ea.nextcmd = p + 1;
@@ -4551,7 +4547,7 @@ separate_nextcmd(eap)
 		++p;		/* skip CTRL-V and next char */
 	    else
 				/* remove CTRL-V and skip next char */
-		mch_memmove(p, p + 1, STRLEN(p));
+		STRMOVE(p, p + 1);
 	    if (*p == NUL)		/* stop at NUL after CTRL-V */
 		break;
 	}
@@ -4582,7 +4578,7 @@ separate_nextcmd(eap)
 	    if ((vim_strchr(p_cpo, CPO_BAR) == NULL
 			      || !(eap->argt & USECTRLV)) && *(p - 1) == '\\')
 	    {
-		mch_memmove(p - 1, p, STRLEN(p) + 1);	/* remove the '\' */
+		STRMOVE(p - 1, p);	/* remove the '\' */
 		--p;
 	    }
 	    else
@@ -4640,7 +4636,7 @@ skip_cmd_arg(p, rembs)
 	if (*p == '\\' && p[1] != NUL)
 	{
 	    if (rembs)
-		mch_memmove(p, p + 1, STRLEN(p));
+		STRMOVE(p, p + 1);
 	    else
 		++p;
 	}
@@ -7167,7 +7163,6 @@ theend:
 # endif
 }
 
-#if defined(FEAT_MOUSE) || defined(PROTO)
 /*
  * Open a new tab page.
  */
@@ -7182,7 +7177,6 @@ tabpage_new()
     ea.arg = (char_u *)"";
     ex_splitview(&ea);
 }
-#endif
 
 /*
  * :tabnext command
@@ -9425,7 +9419,7 @@ eval_vars(src, srcstart, usedlen, lnump, errormsg, escaped)
     if (src > srcstart && src[-1] == '\\')
     {
 	*usedlen = 0;
-	mch_memmove(src - 1, src, STRLEN(src) + 1);	/* remove backslash */
+	STRMOVE(src - 1, src);	/* remove backslash */
 	return NULL;
     }
 
diff --git a/src/if_sniff.c b/src/if_sniff.c
index ab7a3f056e163911f54edda931c4509c56ca1dc3..dea157446a5047a98142843bbca5362d58b2d972 100644
--- a/src/if_sniff.c
+++ b/src/if_sniff.c
@@ -11,7 +11,6 @@
 
 #ifdef WIN32
 # include <stdio.h>
-# include <fcntl.h>
 # include "vimio.h"
 # include <process.h>
 # include <string.h>
diff --git a/src/integration.c b/src/integration.c
index 2cbf0a9b82a8d9ffc3f312ae1fca74d43546ea7c..0d46c97bfdf7cfc600fd2e7a72d11afb16998f9c 100644
--- a/src/integration.c
+++ b/src/integration.c
@@ -25,7 +25,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <fcntl.h>
 
 #ifdef INET_SOCKETS
 #include <netdb.h>
diff --git a/src/message.c b/src/message.c
index b2daa90e22ef902a246b9d22874ef33bc97c0ccb..8387d9366f53d26d80b5356fae87666dc818d0b1 100644
--- a/src/message.c
+++ b/src/message.c
@@ -15,6 +15,10 @@
 
 #include "vim.h"
 
+#if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
+# include <math.h>
+#endif
+
 static int other_sourcing_name __ARGS((void));
 static char_u *get_emsg_source __ARGS((void));
 static char_u *get_emsg_lnum __ARGS((void));
@@ -314,7 +318,7 @@ trunc_string(s, buf, room)
 
     /* Set the middle and copy the last part. */
     mch_memmove(buf + e, "...", (size_t)3);
-    mch_memmove(buf + e + 3, s + i, STRLEN(s + i) + 1);
+    STRMOVE(buf + e + 3, s + i);
 }
 
 /*
@@ -603,7 +607,7 @@ emsg(s)
 #endif
 
 	/*
-	 * When using ":silent! cmd" ignore error messsages.
+	 * When using ":silent! cmd" ignore error messages.
 	 * But do write it to the redirection file.
 	 */
 	if (emsg_silent != 0)
@@ -803,6 +807,8 @@ delete_first_msg()
 	return FAIL;
     p = first_msg_hist;
     first_msg_hist = p->next;
+    if (first_msg_hist == NULL)
+        last_msg_hist = NULL;  /* history is empty */
     vim_free(p->msg);
     vim_free(p);
     --msg_hist_len;
@@ -1131,6 +1137,17 @@ msg_start()
 
     vim_free(keep_msg);
     keep_msg = NULL;			/* don't display old message now */
+
+#ifdef FEAT_EVAL
+    if (need_clr_eos)
+    {
+	/* Halfway an ":echo" command and getting an (error) message: clear
+	 * any text from the command. */
+	need_clr_eos = FALSE;
+	msg_clr_eos();
+    }
+#endif
+
     if (!msg_scroll && full_screen)	/* overwrite last message */
     {
 	msg_row = cmdline_row;
@@ -3819,6 +3836,9 @@ static char *e_printf = N_("E766: Insufficient arguments for printf()");
 
 static long tv_nr __ARGS((typval_T *tvs, int *idxp));
 static char *tv_str __ARGS((typval_T *tvs, int *idxp));
+# ifdef FEAT_FLOAT
+static double tv_float __ARGS((typval_T *tvs, int *idxp));
+# endif
 
 /*
  * Get number argument from "idxp" entry in "tvs".  First entry is 1.
@@ -3865,6 +3885,32 @@ tv_str(tvs, idxp)
     }
     return s;
 }
+
+# ifdef FEAT_FLOAT
+/*
+ * Get float argument from "idxp" entry in "tvs".  First entry is 1.
+ */
+    static double
+tv_float(tvs, idxp)
+    typval_T	*tvs;
+    int		*idxp;
+{
+    int		idx = *idxp - 1;
+    double	f = 0;
+
+    if (tvs[idx].v_type == VAR_UNKNOWN)
+	EMSG(_(e_printf));
+    else
+    {
+	++*idxp;
+	if (tvs[idx].v_type == VAR_FLOAT)
+	    f = tvs[idx].vval.v_float;
+	else
+	    EMSG(_("E807: Expected Float argument for printf()"));
+    }
+    return f;
+}
+# endif
 #endif
 
 /*
@@ -3883,6 +3929,8 @@ tv_str(tvs, idxp)
  * with flags: '-', '+', ' ', '0' and '#'.
  * An asterisk is supported for field width as well as precision.
  *
+ * Limited support for floating point was added: 'f', 'e', 'E', 'g', 'G'.
+ *
  * Length modifiers 'h' (short int) and 'l' (long int) are supported.
  * 'll' (long long int) is not supported.
  *
@@ -3983,7 +4031,14 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
 	    char    length_modifier = '\0';
 
 	    /* temporary buffer for simple numeric->string conversion */
-	    char    tmp[32];
+#ifdef FEAT_FLOAT
+# define TMP_LEN 350	/* On my system 1e308 is the biggest number possible.
+			 * That sounds reasonable to use as the maximum
+			 * printable. */
+#else
+# define TMP_LEN 32
+#endif
+	    char    tmp[TMP_LEN];
 
 	    /* string address in case of string argument */
 	    char    *str_arg;
@@ -4124,6 +4179,7 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
 		case 'D': fmt_spec = 'd'; length_modifier = 'l'; break;
 		case 'U': fmt_spec = 'u'; length_modifier = 'l'; break;
 		case 'O': fmt_spec = 'o'; length_modifier = 'l'; break;
+		case 'F': fmt_spec = 'f'; break;
 		default: break;
 	    }
 
@@ -4459,6 +4515,136 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
 		    break;
 		}
 
+#ifdef FEAT_FLOAT
+	    case 'f':
+	    case 'e':
+	    case 'E':
+	    case 'g':
+	    case 'G':
+		{
+		    /* Floating point. */
+		    double	f;
+		    double	abs_f;
+		    char	format[40];
+		    int		l;
+		    int		remove_trailing_zeroes = FALSE;
+
+		    f =
+# ifndef HAVE_STDARG_H
+			get_a_arg(arg_idx);
+# else
+#  if defined(FEAT_EVAL)
+			tvs != NULL ? tv_float(tvs, &arg_idx) :
+#  endif
+			    va_arg(ap, double);
+# endif
+		    abs_f = f < 0 ? -f : f;
+
+		    if (fmt_spec == 'g' || fmt_spec == 'G')
+		    {
+			/* Would be nice to use %g directly, but it prints
+			 * "1.0" as "1", we don't want that. */
+			if ((abs_f >= 0.001 && abs_f < 10000000.0)
+							      || abs_f == 0.0)
+			    fmt_spec = 'f';
+			else
+			    fmt_spec = fmt_spec == 'g' ? 'e' : 'E';
+			remove_trailing_zeroes = TRUE;
+		    }
+
+		    if (fmt_spec == 'f' && abs_f > 1.0e307)
+		    {
+			/* Avoid a buffer overflow */
+			strcpy(tmp, "inf");
+			str_arg_l = 3;
+		    }
+		    else
+		    {
+			format[0] = '%';
+			l = 1;
+			if (precision_specified)
+			{
+			    size_t max_prec = TMP_LEN - 10;
+
+			    /* Make sure we don't get more digits than we
+			     * have room for. */
+			    if (fmt_spec == 'f' && abs_f > 1.0)
+				max_prec -= (size_t)log10(abs_f);
+			    if (precision > max_prec)
+				precision = max_prec;
+			    l += sprintf(format + 1, ".%d", (int)precision);
+			}
+			format[l] = fmt_spec;
+			format[l + 1] = NUL;
+			str_arg_l = sprintf(tmp, format, f);
+
+			if (remove_trailing_zeroes)
+			{
+			    int i;
+			    char *p;
+
+			    /* Using %g or %G: remove superfluous zeroes. */
+			    if (fmt_spec == 'f')
+				p = tmp + str_arg_l - 1;
+			    else
+			    {
+				p = (char *)vim_strchr((char_u *)tmp,
+						 fmt_spec == 'e' ? 'e' : 'E');
+				if (p != NULL)
+				{
+				    /* Remove superfluous '+' and leading
+				     * zeroes from the exponent. */
+				    if (p[1] == '+')
+				    {
+					/* Change "1.0e+07" to "1.0e07" */
+					STRMOVE(p + 1, p + 2);
+					--str_arg_l;
+				    }
+				    i = (p[1] == '-') ? 2 : 1;
+				    while (p[i] == '0')
+				    {
+					/* Change "1.0e07" to "1.0e7" */
+					STRMOVE(p + i, p + i + 1);
+					--str_arg_l;
+				    }
+				    --p;
+				}
+			    }
+
+			    if (p != NULL && !precision_specified)
+				/* Remove trailing zeroes, but keep the one
+				 * just after a dot. */
+				while (p > tmp + 2 && *p == '0' && p[-1] != '.')
+				{
+				    STRMOVE(p, p + 1);
+				    --p;
+				    --str_arg_l;
+				}
+			}
+			else
+			{
+			    char *p;
+
+			    /* Be consistent: some printf("%e") use 1.0e+12
+			     * and some 1.0e+012.  Remove one zero in the last
+			     * case. */
+			    p = (char *)vim_strchr((char_u *)tmp,
+						 fmt_spec == 'e' ? 'e' : 'E');
+			    if (p != NULL && (p[1] == '+' || p[1] == '-')
+					  && p[2] == '0'
+					  && vim_isdigit(p[3])
+					  && vim_isdigit(p[4]))
+			    {
+				STRMOVE(p + 2, p + 3);
+				--str_arg_l;
+			    }
+			}
+		    }
+		    str_arg = tmp;
+		    break;
+		}
+#endif
+
 	    default:
 		/* unrecognized conversion specifier, keep format string
 		 * as-is */
@@ -4566,7 +4752,8 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
 	    if (justify_left)
 	    {
 		/* right blank padding to the field width */
-		int pn = (int)(min_field_width - (str_arg_l + number_of_zeros_to_pad));
+		int pn = (int)(min_field_width
+				      - (str_arg_l + number_of_zeros_to_pad));
 
 		if (pn > 0)
 		{
diff --git a/src/normal.c b/src/normal.c
index d3ce6a8865be3d984f981a479ff592380d312860..3c1c6f064fec078f5e730dce25beb497490e0e1c 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -2464,6 +2464,8 @@ do_mouse(oap, c, dir, count, fixindent)
     /* Check for clicking in the tab page line. */
     if (mouse_row == 0 && firstwin->w_winrow > 0)
     {
+	if (is_drag)
+	    return FALSE;
 	got_click = FALSE;	/* ignore mouse-up and drag events */
 
 	/* click in a tab selects that tab page */
diff --git a/src/os_mac.h b/src/os_mac.h
index 6effe1078fba5b5cd0b7036d9b3cc13786f6b2f8..7a54ee5c56de8aa084f9fe7942fa41e668cac94e 100644
--- a/src/os_mac.h
+++ b/src/os_mac.h
@@ -109,6 +109,7 @@
 # define HAVE_FCNTL_H
 # define HAVE_QSORT
 # define HAVE_ST_MODE		/* have stat.st_mode */
+# define HAVE_MATH_H
 
 # if defined(__DATE__) && defined(__TIME__)
 #  define HAVE_DATE_TIME
@@ -217,10 +218,7 @@
  */
 #define CMDBUFFSIZE 1024	/* size of the command processing buffer */
 
-#if defined(MACOS_X_UNIX)
-# define MAXPATHL	1024
-# define BASENAMELEN	(MAXNAMLEN - 5)	/* length of base of filename */
-#else
+#if !defined(MACOS_X_UNIX)
 # define MAXPATHL	256		/* Limited by the Pascal Strings */
 # define BASENAMELEN	(32-5-1)	/* length of base of filename */
 #endif
diff --git a/src/po/de.po b/src/po/de.po
index 171ddca24e7ea823e4cdc381f9d90880c4c422ec..3a897f2d7f738dfcf4f81a63cc28b2d45d1ffd61 100644
--- a/src/po/de.po
+++ b/src/po/de.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim(deutsch)\n"
 "POT-Creation-Date: 2006-04-02 11:30+0200\n"
-"PO-Revision-Date: 2006-06-18 12:34+0200\n"
-"Last-Translator: Georg Dahn <gorgyd@yahoo.co.uk>\n"
+"PO-Revision-Date: 2008-05-24 17:26+0200\n"
+"Last-Translator: Georg Dahn <georg.dahn@gmail.com>\n"
 "Language-Team: German <de@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO_8859-1\n"
@@ -25,20 +25,20 @@ msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83: Kann den Puffer nicht zuweisen; benutze einen anderen..."
 
 msgid "E515: No buffers were unloaded"
-msgstr "E515: Keine Puffer wurden ausgeladen"
+msgstr "E515: Keine Puffer wurden entladen"
 
 msgid "E516: No buffers were deleted"
-msgstr "E516: Keine Puffer wurden gelöscht"
+msgstr "E516: Keine Puffer wurden vollständig gelöscht"
 
 msgid "E517: No buffers were wiped out"
-msgstr "E517: Keine Puffer wurden gelöscht"
+msgstr "E517: Keine Puffer wurden vollständig gelöscht"
 
 msgid "1 buffer unloaded"
-msgstr "ein Puffer ausgeladen"
+msgstr "ein Puffer entladen"
 
 #, c-format
 msgid "%d buffers unloaded"
-msgstr "%d Puffer ausgeladen"
+msgstr "%d Puffer entladen"
 
 msgid "1 buffer deleted"
 msgstr "ein Puffer gelöscht"
@@ -48,11 +48,11 @@ msgid "%d buffers deleted"
 msgstr "%d Puffer gelöscht"
 
 msgid "1 buffer wiped out"
-msgstr "ein Puffer gelöscht"
+msgstr "ein Puffer vollständig gelöscht"
 
 #, c-format
 msgid "%d buffers wiped out"
-msgstr "%d Puffer gelöscht"
+msgstr "%d Puffer vollständig gelöscht"
 
 msgid "E84: No modified buffer found"
 msgstr "E84: Kein veränderter Puffer gefunden"
@@ -87,11 +87,11 @@ msgstr "E92: Kein Puffer %ld gefunden"
 
 #, c-format
 msgid "E93: More than one match for %s"
-msgstr "E93: Mehr als eine Möglichkeit für %s"
+msgstr "E93: Mehr als ein Treffer für %s"
 
 #, c-format
 msgid "E94: No matching buffer for %s"
-msgstr "E94: Kein Puffer passt zu %s"
+msgstr "E94: Kein übereinstimmender Puffer für %s"
 
 #, c-format
 msgid "line %ld"
@@ -334,16 +334,16 @@ msgstr "E686: Argument von %s muss eine Liste sein"
 
 #, c-format
 msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: Argument von %s muss eine Liste oder ein Dictionary"
+msgstr "E712: Argument von %s muss eine Liste oder ein Wörterbuch"
 
 msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Der Schlüssel für das Dictionary darf nicht leer sein"
+msgstr "E713: Der Schlüssel für das Wörterbuch darf nicht leer sein"
 
 msgid "E714: List required"
 msgstr "E714: Liste benötigt"
 
 msgid "E715: Dictionary required"
-msgstr "E715: Dictionary benötigt"
+msgstr "E715: Wörterbuch benötigt"
 
 #, c-format
 msgid "E118: Too many arguments for function: %s"
@@ -351,20 +351,20 @@ msgstr "E118: Zu viele Argumente f
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Schlüssel nicht vorhanden im Dictionary: %s"
+msgstr "E716: Schlüssel nicht vorhanden im Wörterbuch: %s"
 
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
 msgstr "E122: Funktion %s existiert bereits; zum Ersetzen ! hinzufügen"
 
 msgid "E717: Dictionary entry already exists"
-msgstr "E717: Dictionary-Eintrag existiert bereits"
+msgstr "E717: Wörterbuch-Eintrag existiert bereits"
 
 msgid "E718: Funcref required"
-msgstr "E718: Funcref benötigt"
+msgstr "E718: Funktionsreferenz benötigt"
 
 msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: Kann [:] nicht mit einem Dictionary verwenden"
+msgstr "E719: Kann [:] nicht mit einem Wörterbuch verwenden"
 
 #, c-format
 msgid "E734: Wrong variable type for %s="
@@ -392,7 +392,7 @@ msgid "E738: Can't list variables for %s"
 msgstr "E738: Kann Variablen nicht auflisten: %s"
 
 msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Kann nur Listen und Dictionarys indizieren"
+msgstr "E689: Kann nur Listen und Wörterbücher indizieren"
 
 msgid "E708: [:] must come last"
 msgstr "E708: [:] muss am Schluss kommen"
@@ -430,22 +430,22 @@ msgid "E692: Invalid operation for Lists"
 msgstr "E692: Unzulässige Operation für Listen"
 
 msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Kann nur ein Dictionary mit einem Dictionary vergleichen"
+msgstr "E735: Kann nur ein Wörterbuch mit einem Wörterbuch vergleichen"
 
 msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Unzulässige Operation für ein Dictionary"
+msgstr "E736: Unzulässige Operation für ein Wörterbuch"
 
 msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Kann nur eine Funcref mit einer Funcref vergleichen"
+msgstr "E693: Kann nur eine Funktionsreferenz mit einer Funktionsreferenz vergleichen"
 
 msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Unzulässige Operation für Funcrefs"
+msgstr "E694: Unzulässige Operation für Funktionsreferenzen"
 
 msgid "E110: Missing ')'"
 msgstr "E110: Fehlende ')'"
 
 msgid "E695: Cannot index a Funcref"
-msgstr "E695: Kann keine Funcref indizieren"
+msgstr "E695: Kann keine Funktionsreferenz indizieren"
 
 #, c-format
 msgid "E112: Option name missing: %s"
@@ -473,19 +473,19 @@ msgstr "E697: Fehlendes Ende der Liste ']': %s"
 
 #, c-format
 msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Fehlender Doppelpunkt im Dictionary: %s"
+msgstr "E720: Fehlender Doppelpunkt im Wörterbuch: %s"
 
 #, c-format
 msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Doppelter Schlüssel im Dictionary: \"%s\""
+msgstr "E721: Doppelter Schlüssel im Wörterbuch: \"%s\""
 
 #, c-format
 msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Fehlendes Komma im Dictionary: %s"
+msgstr "E722: Fehlendes Komma im Wörterbuch: %s"
 
 #, c-format
 msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Fehlendes Ende des Dictionarys '}': %s"
+msgstr "E723: Fehlendes Ende des Wörterbuchs '}': %s"
 
 msgid "E724: variable nested too deep for displaying"
 msgstr "E724: Variable ist zu tief verschachtelt für die Anzeige"
@@ -494,7 +494,7 @@ msgid "E699: Too many arguments"
 msgstr "E699: Zu viele Argumente"
 
 msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() kann nur im Insert Modus verwendet werden"
+msgstr "E785: complete() kann nur im Einfüge-Modus verwendet werden"
 
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
@@ -567,26 +567,26 @@ msgid "E677: Error writing temp file"
 msgstr "E677: Fehler beim Schreiben einer temporären Datei"
 
 msgid "E703: Using a Funcref as a number"
-msgstr "E703: Funcref als Zahl verwendet"
+msgstr "E703: Funktionsreferenz als Zahl verwendet"
 
 msgid "E745: Using a List as a number"
 msgstr "E745: Liste als Zahl verwendet"
 
 msgid "E728: Using a Dictionary as a number"
-msgstr "E728: Dictionary als Zahl verwendet"
+msgstr "E728: Wörterbuch als Zahl verwendet"
 
 msgid "E729: using Funcref as a String"
-msgstr "E729: Funcref als String verwendet"
+msgstr "E729: Funktionsreferenz als String verwendet"
 
 msgid "E730: using List as a String"
 msgstr "E730: Liste als String verwendet"
 
 msgid "E731: using Dictionary as a String"
-msgstr "E731: Dictionary als String verwendet"
+msgstr "E731: Wörterbuch als String verwendet"
 
 #, c-format
 msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Funcref Variable muss mit einem Großbuchstaben beginnen: %s"
+msgstr "E704: Funktionsreferenz-Variable muss mit einem Großbuchstaben beginnen: %s"
 
 #, c-format
 msgid "E705: Variable name conflicts with existing function: %s"
@@ -623,7 +623,7 @@ msgstr "E126: Fehlendes :endfunction"
 
 #, c-format
 msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: Funktionsname stimmt nicht mit dem Namen der Skript-Datei überein: %s"
+msgstr "E746: Funktionsname stimmt mit dem Namen der Skript-Datei nicht überein: %s"
 
 msgid "E129: Function name required"
 msgstr "E129: Funktionsname wird verlangt"
@@ -1170,7 +1170,7 @@ msgstr "E467: Eigene Vervollst
 
 #, c-format
 msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Zeile %s kann nicht gefunden werden"
+msgstr "E185: Kann Farbschema %s nicht finden"
 
 msgid "Greetings, Vim user!"
 msgstr "Herzliche Grüße, Vim Benutzer!"
@@ -1269,7 +1269,7 @@ msgid "E195: Cannot open viminfo file for reading"
 msgstr "E195: viminfo kann nicht zum Lesen geöffnet werden"
 
 msgid "E196: No digraphs in this version"
-msgstr "E196 Keine Digraphen in dieser Version"
+msgstr "E196: Keine Digraphen in dieser Version"
 
 msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
 msgstr "E608: Kann nicht :throw Exceptions mit 'Vim' Präfix"
@@ -1504,7 +1504,7 @@ msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: Keine übereinstimmenden Autokommandos für acwrite Puffer"
 
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: Autokommandos haben den zu schreibenden Puffer gelöscht oder heraus geladen"
+msgstr "E203: Autokommandos haben den zu schreibenden Puffer gelöscht oder entladen"
 
 msgid "E204: Autocommand changed number of lines in unexpected way"
 msgstr "E204: Autokommandos haben die Anzahl der Zeilen in unerwarteter Weise verändert"
@@ -1894,21 +1894,21 @@ msgstr "Ersetzen mit:"
 
 #. whole word only button
 msgid "Match whole word only"
-msgstr "Übereinstimmung nur mit ganzen Wörtern"
+msgstr "Nur ganzes Wort suchen"
 
 #. match case button
 msgid "Match case"
-msgstr "Klein-/Großschreibung beachten"
+msgstr "Groß-/Kleinschreibung"
 
 msgid "Direction"
 msgstr "Richtung"
 
 #. 'Up' and 'Down' buttons
 msgid "Up"
-msgstr "Auf"
+msgstr "Aufwärts"
 
 msgid "Down"
-msgstr "Ab"
+msgstr "Abwärts"
 
 msgid "Find Next"
 msgstr "Suche Nächstes"
@@ -2268,7 +2268,7 @@ msgstr "E567: Keine cscope Verbindungen"
 
 #, c-format
 msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: keine Treffer gefunden für cscope Anfragen %s aus %s"
+msgstr "E259: keine Übereinstimmungen gefunden für cscope Abfrage %s aus %s"
 
 #, c-format
 msgid "E469: invalid cscopequickfix flag %c for %c"
@@ -2790,7 +2790,7 @@ msgid "-V[N]\t\tVerbose level"
 msgstr "-V[N]\t\tVerbose Stufe"
 
 msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tDebug Modus"
+msgstr "-D\t\t\tDebug-Modus"
 
 msgid "-n\t\t\tNo swap file, use memory only"
 msgstr "-n\t\t\tKeine Auslagerungsdatei, verwende nur Speicher"
@@ -3383,7 +3383,7 @@ msgstr "E315: ml_get: unzul
 
 #, c-format
 msgid "E316: ml_get: cannot find line %ld"
-msgstr "E316: ml_get: Zeile %ld kann nicht gefunden werden"
+msgstr "E316: ml_get: kann Zeile %ld nicht finden"
 
 msgid "E317: pointer block id wrong 3"
 msgstr "E317: Zeiger Block id falsch 3"
@@ -3402,7 +3402,7 @@ msgstr "Block 1 gel
 
 #, c-format
 msgid "E320: Cannot find line %ld"
-msgstr "E320: Zeile %ld kann nicht gefunden werden"
+msgstr "E320: Kann Zeile %ld nicht finden"
 
 msgid "E317: pointer block id wrong"
 msgstr "E317: Zeiger Block id ist falsch"
@@ -3748,11 +3748,11 @@ msgstr ""
 
 #, c-format
 msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: Verzeichnis \"%s\" kann im 'cdpath' nicht gefunden werden"
+msgstr "E344: Kann Verzeichnis \"%s\" nicht im 'cdpath' finden"
 
 #, c-format
 msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: Datei \"%s\" kann im Pfad nicht gefunden werden"
+msgstr "E345: Kann Datei \"%s\" nicht im Pfad finden"
 
 #, c-format
 msgid "E346: No more directory \"%s\" found in cdpath"
@@ -3784,7 +3784,7 @@ msgid "E505: "
 msgstr "E505: "
 
 msgid "E774: 'operatorfunc' is empty"
-msgstr "E775: 'operatorfunc' is empty"
+msgstr "E774: 'operatorfunc' is empty"
 
 msgid "E775: Eval feature not available"
 msgstr "E775: Evaluierungsfunktion nicht verfügbar"
@@ -4388,19 +4388,19 @@ msgid "E51: Too many %s("
 msgstr "E51: Zu viele %s("
 
 msgid "E52: Unmatched \\z("
-msgstr "E52: \\z( ohne Übereinstimmung"
+msgstr "E52: \\z( ohne Gegenstück"
 
 #, c-format
 msgid "E53: Unmatched %s%%("
-msgstr "E53: %s%%( ohne Übereinstimmung"
+msgstr "E53: %s%%( ohne Gegenstück"
 
 #, c-format
 msgid "E54: Unmatched %s("
-msgstr "E54: %s( ohne Übereinstimmung"
+msgstr "E54: %s( ohne Gegenstück"
 
 #, c-format
 msgid "E55: Unmatched %s)"
-msgstr "E55: %s) ohne Übereinstimmung"
+msgstr "E55: %s) ohne Gegenstück"
 
 #, c-format
 msgid "E59: invalid character after %s@"
@@ -4554,32 +4554,32 @@ msgstr "  NICHT GEFUNDEN"
 
 #, c-format
 msgid "Scanning included file: %s"
-msgstr "Scanne eingefügte Datei: %s"
+msgstr "Durchsuche inkludierte Datei: %s"
 
 #, c-format
 msgid "Searching included file %s"
-msgstr "Suche eingefügte Datei %s"
+msgstr "Suche inkludierte Datei %s"
 
 msgid "E387: Match is on current line"
 msgstr "E387: Treffer ist auf der momentanen Zeile"
 
 msgid "All included files were found"
-msgstr "Alle eingefügten Dateien wurden gefunden"
+msgstr "Alle inkludierten Dateien wurden gefunden"
 
 msgid "No included files"
-msgstr "Keine eingefügten Dateien"
+msgstr "Keine inkludierten Dateien"
 
 msgid "E388: Couldn't find definition"
-msgstr "E388: Definition konnte nicht gefunden werden"
+msgstr "E388: Konnte Definition nicht finden"
 
 msgid "E389: Couldn't find pattern"
-msgstr "E389: Muster konnte nicht gefunden werden"
+msgstr "E389: Konnte Muster nicht finden"
 
 msgid "E759: Format error in spell file"
 msgstr "E759: Format-Fehler im Rechtschreibwörterbuch"
 
 msgid "E758: Truncated spell file"
-msgstr "E758 Abgeschnittenes Rechtschreibwörterbuch"
+msgstr "E758: Abgeschnittenes Rechtschreibwörterbuch"
 
 #, c-format
 msgid "Trailing text in %s line %d: %s"
@@ -4610,16 +4610,16 @@ msgid "Reading spell file \"%s\""
 msgstr "Lese Rechtschreibwörterbuch \"%s\" ein"
 
 msgid "E757: This does not look like a spell file"
-msgstr "E757: Das sieht nicht nach einem Wörterbuch für die Rechtschreibprüfung aus"
+msgstr "E757: Das sieht nicht nach einem Rechtschreibwörterbuch aus"
 
 msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: Altes Wörterbuch für die Rechtschreibprüfung, benötigt Aktualisierung"
+msgstr "E771: Altes Rechtschreibwörterbuch, benötigt Aktualisierung"
 
 msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Wörterbuch für die Rechtschreibprüfung ist für eine neuere Version von Vim"
+msgstr "E772: Rechtschreibwörterbuch ist für eine neuere Version von Vim"
 
 msgid "E770: Unsupported section in spell file"
-msgstr "E770: Nicht unterstützter Abschnitt im Wörterbuch für die Rechtschreibprüfung"
+msgstr "E770: Nicht unterstützter Abschnitt im Rechtschreibwörterbuch"
 
 #, c-format
 msgid "Warning: region %s not supported"
@@ -4987,7 +4987,7 @@ msgstr "E393: \"group[t]here\" ist an dieser Stelle ung
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
-msgstr "E394: \"region\"-Element für \"%s\" konnte nicht gefunden werden"
+msgstr "E394: Konnte kein \"region\"-Element für \"%s\" finden"
 
 msgid "E395: contains argument not accepted here"
 msgstr "E395: \"contains\"-Argument ist an dieser Stelle ungültig"
@@ -5065,10 +5065,10 @@ msgstr "E412: Nicht ausreichend viele Argumente: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E412: Zu viele Argumente: \":highlight link %s\""
+msgstr "E413: Zu viele Argumente: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: Gruppe hat Einstellungen, Unterstreichung Link ignoriert"
+msgstr "E414: Gruppe hat Einstellungen, highlight link ignorieren"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
@@ -5124,7 +5124,7 @@ msgstr "E425: Kann nicht vor den ersten passenden Tag hinausgehen"
 
 #, c-format
 msgid "E426: tag not found: %s"
-msgstr "E426: Tag \"%s\" konnte nicht gefunden werden"
+msgstr "E426: Konnte Tag \"%s\" nicht finden"
 
 msgid "  # pri kind tag"
 msgstr "   # pri verw. tag"
@@ -5190,10 +5190,10 @@ msgid "E433: No tags file"
 msgstr "E433: Keine Tag-Datei"
 
 msgid "E434: Can't find tag pattern"
-msgstr "E434: Tag-Muster kann nicht gefunden werden"
+msgstr "E434: Kann Tag-Muster nicht finden"
 
 msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: Tag konnte nicht gefunden werden, das ist nur eine Vermutung!"
+msgstr "E435: Konnte Tag möglicherweise nicht finden!"
 
 msgid "' not known. Available builtin terminals are:"
 msgstr "' nicht bekannt. Die folgenden eingebauten Terminals stehen zur Verfügung:"
@@ -5205,14 +5205,14 @@ msgid "E557: Cannot open termcap file"
 msgstr "E557: Termcap-Datei kann nicht geöffnet werden"
 
 msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: Terminal-Eintrag konnte in der Terminfo-Datenbank nicht gefunden werden"
+msgstr "E558: Kein Terminal-Eintrag in der Terminfo-Datenbank gefunden"
 
 msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: Terminaleintrag konnte in der Termcap-Datei nicht gefunden werden"
+msgstr "E559: Kein Terminal-Eintrag in der Termcap-Datei gefunden"
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Kein \"%s\" Eintrag in termcap"
+msgstr "E436: Kein \"%s\" Eintrag in der Termcap-Datei"
 
 msgid "E437: terminal capability \"cm\" required"
 msgstr "E437: Terminalfähigkeit \"cm\" wird benötigt"
@@ -5232,7 +5232,7 @@ msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: Fehler beim Lesen der Eingabe, Abbruch...\n"
 
 msgid "No undo possible; continue anyway"
-msgstr "Wiederherstellung nicht möglich; setze trotz dem fort"
+msgstr "Wiederherstellung nicht möglich; setze trotzdem fort"
 
 msgid "Already at oldest change"
 msgstr "Bereits bei der ältesten Änderung"
@@ -5615,11 +5615,11 @@ msgstr "E446: Kein Dateiname unter dem Cursor"
 
 #, c-format
 msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Datei \"%s\" kann im Pfad nicht gefunden werden"
+msgstr "E447: Kann Datei \"%s\" nicht im Pfad finden"
 
 #, c-format
 msgid "E370: Could not load library %s"
-msgstr "E370: Bibliothek %s konnte nicht geladen werden"
+msgstr "E370: Konnte Bibliothek %s nicht laden"
 
 msgid "Sorry, this command is disabled: the Perl library could not be loaded."
 msgstr "Dieser Befehl ist nicht verfügbar, da die Perl-Bibliothek nicht geladen werden konnte"
@@ -5734,7 +5734,7 @@ msgid "E21: Cannot make changes, 'modifiable' is off"
 msgstr "E21: Kann keine Änderungen machen, 'modifiable' ist aus"
 
 msgid "E22: Scripts nested too deep"
-msgstr "E22: Skript-Schachtelung zu tief"
+msgstr "E22: Skript ist zu tief verschachtelt"
 
 msgid "E23: No alternate file"
 msgstr "E23: Keine alternative Datei"
@@ -5875,7 +5875,7 @@ msgid "E523: Not allowed here"
 msgstr "E523: Hier nicht erlaubt"
 
 msgid "E359: Screen mode setting not supported"
-msgstr "E359: Bildschirm Modus wird nicht unterstützt"
+msgstr "E359: Bildschirm-Modus wird nicht unterstützt"
 
 msgid "E49: Invalid scroll size"
 msgstr "E49: Ungültige Scroll-Größe"
@@ -6013,7 +6013,7 @@ msgstr "E120: <SID> wurde nicht in einer Skript-Umgebung benutzt: %s"
 
 #, c-format
 msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Aufruf der 'dict' Funktion ohne Dictionary: %s"
+msgstr "E725: Aufruf der 'dict' Funktion ohne Wörterbuch: %s"
 
 msgid "E786: Range not allowed"
 msgstr "E786: Bereich nicht erlaubt"
diff --git a/src/po/fr.po b/src/po/fr.po
index 990059f840137bdcc8040ce627679e2c1f52ce4d..5e4e86681a8bc715850b65d2ca5d8f0766174092 100644
--- a/src/po/fr.po
+++ b/src/po/fr.po
@@ -5,7 +5,7 @@
 #
 #  FIRST AUTHOR  DindinX         <David.Odin@bigfoot.com>     2000.
 # SECOND AUTHOR  Adrien Beau     <version.francaise@free.fr>  2002, 2003.
-#  THIRD AUTHOR  David Blanchet  <david.blanchet@free.fr>     2006
+#  THIRD AUTHOR  David Blanchet  <david.blanchet@free.fr>     2006, 2008
 #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 #
@@ -80,18 +80,15 @@
 #                         - 1 message fixed, 2 messages translated.
 # 2006-05-02    DB      VIM 7.0g
 #                         - 3 message fixed.
+# 2007-05-13    DB      VIM 7.1
+#                         - 7 new message.
+# 2007-07-03    DB      Fixed a typo (François Pinard).
+# 2008-05-28    DB      VIM 7.1.199
+#                         - 14 new messages.
+#                         - Fixed error number mistakes (Dominique Pelle)
+#                         - Fixed spelling mistakes (Patrick Texier)
 #
-# Translated:	 1694/1694 (100.00%)
-#
-# Polishing done on:
-#  buffer.c
-#  diff.c
-#  digraph.c
-#  edit.c
-#  eval.c
-#  ex_cmds.c
-#
-# Other files still to do.
+# Translated:	 1708/1708 (100.00%)
 #
 # Notations used in the comments of the unpolished part of this file:
 # TODO		There's work to do there, and it's important
@@ -102,7 +99,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim(Français)\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-01 19:42+0200\n"
+"POT-Creation-Date: 2008-05-28 23:07+0200\n"
 "PO-Revision-Date: 2006-05-02 14:15+0200\n"
 "Last-Translator: David Blanchet <david.blanchet@free.fr>\n"
 "Language-Team: Adrien Beau <version.francaise@free.fr>\n"
@@ -320,6 +317,9 @@ msgstr "E98: Le fichier interm
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Le tampon courant n'est pas en mode diff"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: Aucun autre tampon en mode diff n'est modifiable"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Aucun autre tampon n'est en mode diff"
 
@@ -565,7 +565,7 @@ msgid "E689: Can only index a List or Dictionary"
 msgstr "E689: Seul une Liste ou un Dictionnaire peut être indexé"
 
 msgid "E708: [:] must come last"
-msgstr "E709: [:] ne peut être spécifié qu'en dernier"
+msgstr "E708: [:] ne peut être spécifié qu'en dernier"
 
 msgid "E709: [:] requires a List value"
 msgstr "E709: [:] requiert une Liste"
@@ -728,7 +728,7 @@ msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore() a été appelé plus de fois qu'inputsave()"
 
 msgid "E786: Range not allowed"
-msgstr "E786: Les plages ne sont pas autorisés"
+msgstr "E786: Les plages ne sont pas autorisées"
 
 msgid "E701: Invalid type for len()"
 msgstr "E701: Type invalide avec len()"
@@ -802,6 +802,10 @@ msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Type de variable incohérent pour %s"
 
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Impossible de supprimer la variable %s"
+
 #, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: La valeur de %s est verrouillée"
@@ -971,7 +975,7 @@ msgstr "E165: Impossible d'aller au-del
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E432: Compilateur %s non supporté"
+msgstr "E666: Compilateur %s non supporté"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
@@ -1126,6 +1130,7 @@ msgstr " 
 #      ses droits d'accès.
 # AB - Le mot "viminfo" a été retiré pour que le message ne dépasse pas 80
 #      caractères dans le cas courant où %s = /home/12345678/.viminfo
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: L'écriture dans le fichier %s est interdite"
@@ -1207,6 +1212,20 @@ msgstr ""
 "L'option 'readonly' est activée pour \"%s\".\n"
 "Voulez-vous tout de même enregistrer ?"
 
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Les droits du fichier \"%s\" sont restreints à la lecture seule.\n"
+"Il peut être possible de l'écrire tout de même.\n"
+"Tenter ?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr "E505: \"%s\" est en lecture seule (ajoutez ! pour passer outre)"
+
 # AB - Ceci est un titre de boîte de dialogue.
 msgid "Edit File"
 msgstr "Ouvrir un fichier - Vim"
@@ -1516,7 +1535,7 @@ msgstr "Pas de fichier d'
 msgid "Append File"
 msgstr "Ajouter fichier"
 
-msgid "E747: Cannot change directory, buffer is modifed (add ! to override)"
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
 msgstr ""
 "E747: Tampon modifié : impossible de changer de répertoire (ajoutez ! pour "
 "passer outre)"
@@ -1761,6 +1780,9 @@ msgstr "est un r
 msgid "is not a file"
 msgstr "n'est pas un fichier"
 
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "est un périphérique (desactivé par l'option 'opendevice')"
+
 msgid "[New File]"
 msgstr "[Nouveau fichier]"
 
@@ -1800,6 +1822,9 @@ msgstr "[fifo]"
 msgid "[socket]"
 msgstr "[socket]"
 
+msgid "[character special]"
+msgstr "[caractère spécial]"
+
 msgid "[RO]"
 msgstr "[RO]"
 
@@ -1861,6 +1886,9 @@ msgstr "Netbeans interdit l'
 msgid "is not a file or writable device"
 msgstr "n'est pas un fichier ou un périphérique inscriptible"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "écriture vers un périphérique désactivé par l'option 'opendevice'"
+
 msgid "is read-only (add ! to override)"
 msgstr "est en lecture seule (ajoutez ! pour passer outre)"
 
@@ -1888,7 +1916,7 @@ msgstr ""
 "E460: Les ressources partagées seraient perdues (ajoutez ! pour passer outre)"
 
 msgid "E214: Can't find temp file for writing"
-msgstr "Impossible de générer un fichier temporaire pour y écrire"
+msgstr "E214: Impossible de générer un fichier temporaire pour y écrire"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
 msgstr "E213: Impossible de convertir (ajoutez ! pour écrire sans convertir)"
@@ -2226,7 +2254,7 @@ msgid "E231: 'guifontwide' invalid"
 msgstr "E231: 'guifontwide' est invalide"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599 : Valeur de 'imactivatekey' invalide"
+msgstr "E599: Valeur de 'imactivatekey' invalide"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
@@ -2648,15 +2676,15 @@ msgstr "E622: Impossible de forker pour cscope"
 msgid "cs_create_connection exec failed"
 msgstr "exec de cs_create_connection a échoué"
 
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Impossible d'engendrer le processus cscope"
-
 msgid "cs_create_connection: fdopen for to_fp failed"
 msgstr "cs_create_connection: fdopen pour to_fp a échoué"
 
 msgid "cs_create_connection: fdopen for fr_fp failed"
 msgstr "cs_create_connection: fdopen pour fr_fp a échoué"
 
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: Impossible d'engendrer le processus cscope"
+
 msgid "E567: no cscope connections"
 msgstr "E567: Aucune connexion cscope"
 
@@ -3151,8 +3179,11 @@ msgstr ""
 "    ou :"
 
 # DB - todo (VMS uniquement).
-msgid "where case is ignored prepend / to make flag upper case"
+msgid ""
+"\n"
+"Where case is ignored prepend / to make flag upper case"
 msgstr ""
+"\n"
 "pour lesquels la casse est indifférente (/ pour que le drapeau soit "
 "majuscule)"
 
@@ -3224,8 +3255,8 @@ msgstr "-C\t\tCompatible avec Vi : 'compatible'"
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
 msgstr "-N\t\tPas totalement compatible avec Vi : 'nocompatible'"
 
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\tNiveau de verbosité"
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr "-V[N][<fichier>]\tMode verbeux [niveau N] [dans <fichier>]"
 
 msgid "-D\t\t\tDebugging mode"
 msgstr "-D\t\tMode débogage"
@@ -3329,9 +3360,10 @@ msgid ""
 msgstr ""
 "--remote-wait-silent\tPareil, mais pas d'erreur s'il n'y a aucun serveur"
 
-msgid "--remote-tab <files>  As --remote but open tab page for each file"
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
 msgstr ""
-"--remote-tab <fich>\tComme --remote mais ouvrir un onglet pour chaque fichier"
+"--remote-tab[-wait][-silent] <fich>\tComme --remote mais ouvrir un onglet pour chaque fichier"
 
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <tche>\tEnvoyer <touches> à un serveur Vim puis quitter"
@@ -3463,6 +3495,9 @@ msgstr "--socketid <xid>\tOuvrir Vim dans un autre widget GTK"
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <titre parent>\tOuvrir Vim dans une application parente"
 
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\tOuvrir Vim dans un autre widget win32"
+
 msgid "No display"
 msgstr "Aucun display"
 
@@ -3663,6 +3698,9 @@ msgstr ""
 ",\n"
 "ou le fichier a été endommagé."
 
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " a été endommagé (taille de page inférieure à la valeur minimale).\n"
+
 #, c-format
 msgid "Using swap file \"%s\""
 msgstr "Utilisation du fichier d'échange \"%s\""
@@ -4007,6 +4045,10 @@ msgstr "E328: Le menu n'existe que dans un autre mode"
 msgid "E329: No menu \"%s\""
 msgstr "E329: Aucun menu \"%s\""
 
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Nom de menu vide"
+
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Le chemin de menu ne doit pas conduire à un sous-menu"
 
@@ -4535,6 +4577,13 @@ msgstr "E594: Au moins %d colonnes sont n
 msgid "E355: Unknown option: %s"
 msgstr "E355: Option inconnue : %s"
 
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: Nombre requis: &%s = '%s'"
+
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -4687,6 +4736,20 @@ msgstr "Le test du display X a 
 msgid "Opening the X display timed out"
 msgstr "L'ouverture du display X a dépassé le délai d'attente"
 
+msgid ""
+"\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"Impossible d'obtenir le contexte de sécurité pour "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"Impossible de modifier le contexte de sécurité pour "
+
 msgid ""
 "\n"
 "Cannot execute shell "
@@ -5399,6 +5462,7 @@ msgstr "D
 msgid "Sorry, only %ld suggestions"
 msgstr "Désolé, seulement %ld suggestions"
 
+#. for when 'cmdheight' > 1
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
@@ -5414,7 +5478,7 @@ msgstr "E752: Pas de suggestion orthographique pr
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E334: Introuvable : %s"
+msgstr "E753: Introuvable : %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
@@ -5511,7 +5575,7 @@ msgid "E396: containedin argument not accepted here"
 msgstr "E396: L'argument « containedin » n'est pas accepté ici"
 
 msgid "E393: group[t]here not accepted here"
-msgstr "E394: L'argument « group[t]here » n'est pas accepté ici"
+msgstr "E393: L'argument « group[t]here » n'est pas accepté ici"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
@@ -5830,6 +5894,13 @@ msgstr ""
 "\n"
 "Version graphique MS-Windows 16/32 bits"
 
+msgid ""
+"\n"
+"MS-Windows 64 bit GUI version"
+msgstr ""
+"\n"
+"Version graphique MS-Windows 64 bits"
+
 msgid ""
 "\n"
 "MS-Windows 32 bit GUI version"
@@ -6362,7 +6433,7 @@ msgid "E35: No previous regular expression"
 msgstr "E35: Aucune expression régulière précédente"
 
 msgid "E481: No range allowed"
-msgstr "E481: Les plages ne sont pas autorisés"
+msgstr "E481: Les plages ne sont pas autorisées"
 
 msgid "E36: Not enough room"
 msgstr "E36: Pas assez de place"
@@ -6439,9 +6510,9 @@ msgid "E46: Cannot change read-only variable \"%s\""
 msgstr "E46: La variable \"%s\" est en lecture seule"
 
 #, c-format
-msgid "E46: Cannot set variable in the sandbox: \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
 msgstr ""
-"E46: Impossible de modifier une variable depuis le bac à sable : \"%s\""
+"E794: Impossible de modifier une variable depuis le bac à sable : \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Erreur lors de la lecture du fichier d'erreurs"
@@ -6518,7 +6589,7 @@ msgstr ""
 
 #, c-format
 msgid "E685: Internal error: %s"
-msgstr "E473: Erreur interne : %s"
+msgstr "E685: Erreur interne : %s"
 
 msgid "E363: pattern uses more memory than 'maxmempattern'"
 msgstr "E363: le motif utilise plus de mémoire que 'maxmempattern'"
diff --git a/src/po/zh_TW.po b/src/po/zh_TW.po
index 16ddfc9c90b6b8e3e8b5e8480f541652b9b05dc4..6dba3a2f6d970460f9def088fb41c8df8e291d68 100644
--- a/src/po/zh_TW.po
+++ b/src/po/zh_TW.po
@@ -698,7 +698,7 @@ msgstr "E478: 
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E149: ©êºp, ¨S¦³Ãö©ó %s-%s ªº»¡©ú"
+msgstr "E661: ©êºp, ¨S¦³Ãö©ó %s-%s ªº»¡©ú"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
@@ -1677,7 +1677,7 @@ msgid "E231: 'guifontwide' invalid"
 msgstr "E231: ¤£¥¿½Tªº 'guifontwide'"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E559: 'imactivatekey' ªº­È¤£¥¿½T"
+msgstr "E599: 'imactivatekey' ªº­È¤£¥¿½T"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
@@ -4004,7 +4004,7 @@ msgstr "E56: %s* 
 
 #, c-format
 msgid "E57: %s+ operand could be empty"
-msgstr "E56: %s+ ¹Bºâ¤¸¥i¥H¬OªÅªº"
+msgstr "E57: %s+ ¹Bºâ¤¸¥i¥H¬OªÅªº"
 
 #, c-format
 msgid "E59: invalid character after %s@"
@@ -4930,7 +4930,7 @@ msgstr "E234: 
 
 #, c-format
 msgid "E235: Unknown font: %s"
-msgstr "¤£¥¿½Tªº¦r«¬¦WºÙ: %s"
+msgstr "E235: ¤£¥¿½Tªº¦r«¬¦WºÙ: %s"
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
diff --git a/src/proto/os_mac_conv.pro b/src/proto/os_mac_conv.pro
index 7aa3d9fa18ad12241f4c12def08ccb2a17ff8fd2..e9417889afd107ceb7b249b9f5ec7d54b100a4c8 100644
--- a/src/proto/os_mac_conv.pro
+++ b/src/proto/os_mac_conv.pro
@@ -4,8 +4,9 @@ int macroman2enc __ARGS((char_u *ptr, long *sizep, long real_size));
 int enc2macroman __ARGS((char_u *from, size_t fromlen, char_u *to, int *tolenp, int maxtolen, char_u *rest, int *restlenp));
 void mac_conv_init __ARGS((void));
 void mac_conv_cleanup __ARGS((void));
-char_u *mac_utf16_to_enc __ARGS((UniChar *from, size_t fromLen, size_t *actualLen));
-UniChar *mac_enc_to_utf16 __ARGS((char_u *from, size_t fromLen, size_t *actualLen));
-CFStringRef mac_enc_to_cfstring __ARGS((char_u *from, size_t fromLen));
+char_u *mac_utf16_to_enc __ARGS((unsigned short *from, size_t fromLen, size_t *actualLen));
+unsigned short *mac_enc_to_utf16 __ARGS((char_u *from, size_t fromLen, size_t *actualLen));
+void * mac_enc_to_cfstring __ARGS((char_u *from, size_t fromLen));
 char_u *mac_precompose_path __ARGS((char_u *decompPath, size_t decompLen, size_t *precompLen));
+void mac_lang_init __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/spell.c b/src/spell.c
index 22630b5497a3bd748762417246265d4ee7146b9c..cdff0a3b9e4f13f66f0e63428a05aa310b1120bf 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -311,10 +311,6 @@
 
 #if defined(FEAT_SPELL) || defined(PROTO)
 
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
 #ifndef UNIX		/* it's in os_unix.h for Unix */
 # include <time.h>	/* for time_t */
 #endif
@@ -2945,7 +2941,7 @@ read_cnt_string(fd, cnt_bytes, cntp)
 
 /*
  * Read a string of length "cnt" from "fd" into allocated memory.
- * Returns NULL when out of memory.
+ * Returns NULL when out of memory or unable to read that many bytes.
  */
     static char_u *
 read_string(fd, cnt)
@@ -2954,14 +2950,23 @@ read_string(fd, cnt)
 {
     char_u	*str;
     int		i;
+    int		c;
 
     /* allocate memory */
     str = alloc((unsigned)cnt + 1);
     if (str != NULL)
     {
-	/* Read the string.  Doesn't check for truncated file. */
+	/* Read the string.  Quit when running into the EOF. */
 	for (i = 0; i < cnt; ++i)
-	    str[i] = getc(fd);
+	{
+	    c = getc(fd);
+	    if (c == EOF)
+	    {
+		vim_free(str);
+		return NULL;
+	    }
+	    str[i] = c;
+	}
 	str[i] = NUL;
     }
     return str;
@@ -3291,6 +3296,7 @@ read_words_section(fd, lp, len)
 {
     int		done = 0;
     int		i;
+    int		c;
     char_u	word[MAXWLEN];
 
     while (done < len)
@@ -3298,7 +3304,10 @@ read_words_section(fd, lp, len)
 	/* Read one word at a time. */
 	for (i = 0; ; ++i)
 	{
-	    word[i] = getc(fd);
+	    c = getc(fd);
+	    if (c == EOF)
+		return SP_TRUNCERROR;
+	    word[i] = c;
 	    if (word[i] == NUL)
 		break;
 	    if (i == MAXWLEN - 1)
@@ -3545,6 +3554,11 @@ read_compound(fd, slang, len)
     while (todo-- > 0)
     {
 	c = getc(fd);					/* <compflags> */
+	if (c == EOF)
+	{
+	    vim_free(pat);
+	    return SP_TRUNCERROR;
+	}
 
 	/* Add all flags to "sl_compallflags". */
 	if (vim_strchr((char_u *)"+*[]/", c) == NULL
@@ -6024,7 +6038,7 @@ aff_process_flags(affile, entry)
 	    flag = get_affitem(affile->af_flagtype, &p);
 	    if (flag == affile->af_comppermit || flag == affile->af_compforbid)
 	    {
-		mch_memmove(prevp, p, STRLEN(p) + 1);
+		STRMOVE(prevp, p);
 		p = prevp;
 		if (flag == affile->af_comppermit)
 		    entry->ae_comppermit = TRUE;
@@ -6515,7 +6529,7 @@ spell_read_dic(spin, fname, affile)
 	for (p = w; *p != NUL; mb_ptr_adv(p))
 	{
 	    if (*p == '\\' && (p[1] == '\\' || p[1] == '/'))
-		mch_memmove(p, p + 1, STRLEN(p));
+		STRMOVE(p, p + 1);
 	    else if (*p == '/')
 	    {
 		*p = NUL;
@@ -12574,7 +12588,7 @@ suggest_trie_walk(su, lp, fword, soundfold)
 		    tl = (int)STRLEN(ftp->ft_to);
 		    if (fl != tl)
 		    {
-			mch_memmove(p + tl, p + fl, STRLEN(p + fl) + 1);
+			STRMOVE(p + tl, p + fl);
 			repextra += tl - fl;
 		    }
 		    mch_memmove(p, ftp->ft_to, tl);
@@ -12604,7 +12618,7 @@ suggest_trie_walk(su, lp, fword, soundfold)
 	    p = fword + sp->ts_fidx;
 	    if (fl != tl)
 	    {
-		mch_memmove(p + fl, p + tl, STRLEN(p + tl) + 1);
+		STRMOVE(p + fl, p + tl);
 		repextra -= tl - fl;
 	    }
 	    mch_memmove(p, ftp->ft_from, fl);
@@ -13035,7 +13049,7 @@ stp_sal_score(stp, su, slang, badsound)
 	if (vim_iswhite(su->su_badptr[su->su_badlen])
 					 && *skiptowhite(stp->st_word) == NUL)
 	    for (p = fword; *(p = skiptowhite(p)) != NUL; )
-		mch_memmove(p, p + 1, STRLEN(p));
+		STRMOVE(p, p + 1);
 
 	spell_soundfold(slang, fword, TRUE, badsound2);
 	pbad = badsound2;
@@ -14281,8 +14295,7 @@ spell_soundfold_sal(slang, inword, res)
 			    s++;
 			}
 			if (k > k0)
-			    mch_memmove(word + i + k0, word + i + k,
-						    STRLEN(word + i + k) + 1);
+			    STRMOVE(word + i + k0, word + i + k);
 
 			/* new "actual letter" */
 			c = word[i];
@@ -14304,8 +14317,7 @@ spell_soundfold_sal(slang, inword, res)
 			{
 			    if (c != NUL)
 				res[reslen++] = c;
-			    mch_memmove(word, word + i + 1,
-						    STRLEN(word + i + 1) + 1);
+			    STRMOVE(word, word + i + 1);
 			    i = 0;
 			    z0 = 1;
 			}
diff --git a/src/testdir/Make_os2.mak b/src/testdir/Make_os2.mak
index 0f71c85afc258a41dc0df1731c04ad8720f0b160..cbf0a84640cc4cdba9a823cf0139efd2db47f6e6 100644
--- a/src/testdir/Make_os2.mak
+++ b/src/testdir/Make_os2.mak
@@ -25,7 +25,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
 		test43.out test44.out test45.out test46.out test47.out \
 		test48.out test51.out test53.out test54.out test55.out \
 		test56.out test57.out test58.out test59.out test60.out \
-		test61.out test62.out test63.out test64.out
+		test61.out test62.out test63.out test64.out test65.out
 
 .SUFFIXES: .in .out
 
diff --git a/src/vim.h b/src/vim.h
index 71dd3ae2daf270f0224e439e9928f39150a04561..d77d4b719780899a53ee189247d5399538f6ee34 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1329,6 +1329,10 @@ typedef enum
  */
 #define MAXMAPLEN   50
 
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+
 #ifdef BINARY_FILE_IO
 # define WRITEBIN   "wb"	/* no CR-LF translation */
 # define READBIN    "rb"
@@ -1379,6 +1383,9 @@ typedef enum
 # endif
 #endif
 
+/* Like strcpy() but allows overlapped source and destination. */
+#define STRMOVE(d, s)	    mch_memmove((d), (s), STRLEN(s) + 1)
+
 #ifdef HAVE_STRNCASECMP
 # define STRNICMP(d, s, n)  strncasecmp((char *)(d), (char *)(s), (size_t)(n))
 #else
@@ -1709,7 +1716,8 @@ typedef int proftime_T;	    /* dummy for function prototypes */
 #define VV_MOUSE_LNUM   50
 #define VV_MOUSE_COL	51
 #define VV_OP		52
-#define VV_LEN		53	/* number of v: vars */
+#define VV_SEARCHFORWARD 53
+#define VV_LEN		54	/* number of v: vars */
 
 #ifdef FEAT_CLIPBOARD
 
diff --git a/src/vim16.def b/src/vim16.def
index 82fe1f1246e34616cd3030bcf4751dbbd726e990..223ddaf0792b605fe110052667c8bfc5100940a4 100644
--- a/src/vim16.def
+++ b/src/vim16.def
@@ -1,5 +1,5 @@
 CODE PRELOAD EXECUTEONLY
 DATA MULTIPLE SHARED
-DESCRIPTION 'Vim 7.1'
+DESCRIPTION 'Vim 7.2a'
 STACKSIZE 16000
 HEAPSIZE 10000