changeset 1619:b9740fb41986

updated for version 7.2a
author vimboss
date Tue, 24 Jun 2008 20:39:31 +0000
parents 46bbe11644e0
children 73fe8baea242
files runtime/autoload/rubycomplete.vim runtime/autoload/xml/html401f.vim runtime/autoload/xml/xhtml10f.vim runtime/colors/slate.vim runtime/doc/Makefile runtime/doc/ft_sql.txt runtime/doc/gui.txt runtime/doc/hangulin.txt runtime/doc/map.txt runtime/doc/mlang.txt runtime/doc/os_qnx.txt runtime/doc/os_vms.txt runtime/doc/pi_gzip.txt runtime/doc/print.txt runtime/doc/usr_03.txt runtime/doc/usr_43.txt runtime/doc/version5.txt runtime/doc/visual.txt runtime/ftplugin/gitcommit.vim runtime/ftplugin/html.vim runtime/indent/php.vim runtime/indent/sql.vim runtime/indent/sqlanywhere.vim runtime/indent/vhdl.vim runtime/keymap/sinhala-phonetic_utf-8.vim runtime/keymap/ukrainian-jcuken.vim runtime/macros/less.sh runtime/plugin/vimballPlugin.vim runtime/spell/cleanadd.vim runtime/syntax/cmusrc.vim runtime/syntax/gp.vim runtime/syntax/manual.vim runtime/syntax/msmessages.vim runtime/syntax/netrw.vim runtime/syntax/pdf.vim runtime/syntax/ruby.vim runtime/syntax/scheme.vim runtime/syntax/tcsh.vim runtime/tutor/README_ami.txt runtime/tutor/runtime/delmenu.vim runtime/tutor/runtime/macmap.vim runtime/tutor/runtime/macros.info runtime/tutor/runtime/optwin.vim runtime/tutor/runtime/tools.info runtime/tutor/runtime/vim32x32.xpm runtime/tutor/runtime/vim48x48.xpm runtime/tutor/runtime/vimlogo.eps runtime/tutor/tutor.sv.utf-8 runtime/tutor/tutor.vi.utf-8 runtime/tutor/vimdir.info runtime/tutor/vimtutor.bat src/INSTALLpc.txt src/INSTALLvms.txt src/Make_mint.mak src/Make_mvc.mak src/ex_docmd.c src/if_sniff.c src/integration.c src/message.c src/normal.c src/os_mac.h src/po/de.po src/po/fr.po src/po/zh_TW.po src/proto/os_mac_conv.pro src/spell.c src/testdir/Make_os2.mak src/vim.h src/vim16.def
diffstat 69 files changed, 5934 insertions(+), 449 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/rubycomplete.vim
+++ b/runtime/autoload/rubycomplete.vim
@@ -36,7 +36,7 @@ if !exists("g:rubycomplete_classes_in_gl
 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")
--- 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
--- 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
--- 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
--- 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 \
+	debug.txt \
 	debugger.txt \
-	debug.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 \
+	mbyte.txt \
 	message.txt \
+	mlang.txt \
 	motion.txt \
-	mbyte.txt \
-	mlang.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 \
+	mbyte.html \
 	message.html \
+	mlang.html \
 	motion.html \
-	mbyte.html \
-	mlang.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
new file mode 100644
--- /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:
--- 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 wh
 - 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*
--- 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
--- 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!" command
 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 tha
 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!  Examp
 	: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
 					*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
--- 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
--- 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
--- 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
--- 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
--- 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.  
 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 
 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 "")
--- 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
 
--- 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
 
--- 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
--- 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
new file mode 100644
--- /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
--- 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.
--- 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
--- 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:
--- 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
 
         " 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
                     \ '\%(\%(\<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
                     \ '',
                     \ '\%(\%(\<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:
--- 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
--- 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!
--- 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 @@ z	Ñ	CYRILLIC SMALL LETTER YA
 ^	,
 &	.
 *	;
+~       ~
+~~      <char-0x301>        Stress
--- 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
--- 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
--- 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"
--- 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
 
--- 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 
 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
--- 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
new file mode 100644
--- /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
--- 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
new file mode 100644
--- /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"
--- 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 :
--- 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_
 	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...
--- 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:[a
 
 " ----- 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	tcshVarErr
 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 b:current_syntax = "tcsh"
+let &cpo = s:oldcpo
+unlet s:oldcpo
+
+let b:current_syntax = 'tcsh'
new file mode 100644
--- /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.
new file mode 100644
--- /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 :
new file mode 100644
--- /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>
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bbb0b4f16b944ccf1b417013e32ec14eef69d68e
GIT binary patch
literal 624
zc$|AIz`)1=0>2pq7@Qb*7}$V(Mh5l#2nO}a4-Cj41&A4$vcPObp%XyzI}o!ns5c%!
zQsvF~mBI7>e-M+2L8zWVQ(Orwu6(-(t|o@T{yz|aZRUWBIx%nqwJ`QDFr!%O08tDC
z2N-N1Lh?WsLX1e3Eu4iguO7~VGX6KfSqw1NdpPSni1n}j|9lAR4+Dcfg!TVwXgHJw
zRre3#Qho*`^BPe61^4d*-2SzP2-U*^m~sCB27ZVnf>n=K3}}ixvHpd-c|Ta>ADs24
nAH@3n|IhzF{vg%^2F7}b*uPb)_Wwbs1F{xCT#D{r76=6ZTT30w
new file mode 100644
--- /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
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4d173b0bcf23b64ac076d516a68b5c6c3c9e2639
GIT binary patch
literal 624
zc$|AIz`)1=1dMYT1Q?tcco^7#d`1TKDh?o4U_b^bAZ1KhV78(tP>yjXkj2WN-d%yD
z%A4^kgXjPMASM%oP(6dDxDr@g`F0OnO$>wme;@$c%mEj5V&Dd9VeCD?jAE?=L@^K?
zV6cG*$pcvkF(O&Ea2CS6dN>Qp_}>6$F~C^w;jHr@*1!7y^C7H13=H}Z*8i)a;ZPP-
z-9Ly+`5BPRYe4ZA%)b*Z;P$UQM5z7%RE}}~0S11EB!X3sR}5&1JhA?TyLmrY<R6^%
orys=n{QuAYKmH)r0|v%=h}geXtM>mvr~|SVKwOIMUls@j0F^=;&j0`b
new file mode 100644
--- /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",
+"               ..               ",
+"              .##.              ",
+"   ...........#@@#. .........   ",
+"  .&&&&&&&&&&&.@@@#.&&&&&&&&&.  ",
+"  .&%%%%%%%%%%%.@@@.&%%%%%%%%%. ",
+"   .%%%%%%%%%%$.@@@@.%%%%%%%%$. ",
+"    .$%%%%%%$$.@@@@@@.$%%%%%$$. ",
+"    .&%%%%%%$.@@@@@@.&%%%%%$$.  ",
+"    .&%%%%%%$.@@@@@.&&%%%%$$.   ",
+"    .&%%%%%%$.@@@@.&&%%%%$$.    ",
+"    .&%%%%%%$.@@@.&&%%%%$$.     ",
+"    .&%%%%%%$.@@.&&%%%%$$.#.    ",
+"   ..&%%%%%%$.@.&&%%%%$$.@@#.   ",
+"  .#.&%%%%%%$..&&%%%%$$.@@@@#.  ",
+" .#@.&%%%%%%$.&&%%%%$$.@@@@@@#. ",
+".#@@.&%%%%%%$&&%%%%$$.@@@@@@@@#.",
+".+@@.&%%%%%%$&%%%%$$.@@@@@@@@@+.",
+" .+@.&%%%%%%$%%%%$$.@@@@@@@@@+. ",
+"  .+.&%%%%%%%%%%...@@@@@@@@@+.  ",
+"   ..&%%%%%%%%%.%%.@@@@@@@@+.   ",
+"    .&%%%%%%%%%.%%.@@@@@@@+.    ",
+"    .&%%%%%%%%$...@...@......   ",
+"    .&%%%%%%%$.%%%.%%%.%%%.%%.  ",
+"    .&%%%%%%$$..%%..%%%%%%%%%%. ",
+"    .&%%%%%$$..%%...%%++%%..%.  ",
+"    .&%%%%$$.@.%%..%%+.%%..%%.  ",
+"    .&%%%$$.@@.%%..%%..%%..%%.  ",
+"    .&%%$$..+.%%..%%..%%..%%.   ",
+"     .%$$.  ..%%%.%%..%%..%%%.  ",
+"      ...    ....+..  ..  ...   ",
+"              .++.              ",
+"               ..               "};
new file mode 100644
--- /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",
+"                       ..                       ",
+"                      .##.                      ",
+"                     .#@@#.                     ",
+"      ...............#@@@@#.   ...............  ",
+"     .***************.@@@@@#. .***************. ",
+"    .**&&&&&&&&&&&&&&$.@@@@@#.**&&&&&&&&&&&&&&$.",
+"    .*&&&&&&&&&&&&&&&$.@@@@@@.*&&&&&&&&&&&&&&&$.",
+"    .*$&&&&&&&&&&&&&&$.@@@@@@.*$&&&&&&&&&&&&&&$.",
+"     .$$$&&&&&&&&&$$$.@@@@@@@@.$$$&&&&&&&&&&&$$.",
+"      ..*&&&&&&&&&$$.@@@@@@@@@@..*&&&&&&&&&&$$. ",
+"       .*&&&&&&&&&$$.@@@@@@@@@@.**&&&&&&&&&$$.  ",
+"       .*&&&&&&&&&$$.@@@@@@@@@.**&&&&&&&&&$$.   ",
+"       .*&&&&&&&&&$$.@@@@@@@@.**&&&&&&&&&$$.    ",
+"       .*&&&&&&&&&$$.@@@@@@@.**&&&&&&&&&$$.     ",
+"       .*&&&&&&&&&$$.@@@@@@.**&&&&&&&&&$$.      ",
+"       .*&&&&&&&&&$$.@@@@@.**&&&&&&&&&$$.       ",
+"       .*&&&&&&&&&$$.@@@@.**&&&&&&&&&$$..       ",
+"      ..*&&&&&&&&&$$.@@@.**&&&&&&&&&$$.@#.      ",
+"     .#.*&&&&&&&&&$$.@@.**&&&&&&&&&$$.@@@#.     ",
+"    .#@.*&&&&&&&&&$$.@.**&&&&&&&&&$$.@@@@@#.    ",
+"   .#@@.*&&&&&&&&&$$..**&&&&&&&&&$$.@@@@@@@#.   ",
+"  .#@@@.*&&&&&&&&&$$.**&&&&&&&&&$$.@@@@@@@@@#.  ",
+" .#@@@@.*&&&&&&&&&$$**&&&&&&&&&$$.@@@@@@@@@@@#. ",
+".#+@@@@.*&&&&&&&&&$$*&&&&&&&&&$$.@@@@@@@@@@@@@#.",
+" .++@@@.*&&&&&&&&&$*&&&&&&&&&$$.@@@@@@@@@@@@@++.",
+"  .++@@.*&&&&&&&&&$&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+"   .++@.*&&&&&&&&&&&&&&&&&&$$.@@@@@@@@@@@@@++.  ",
+"    .++.*&&&&&&&&&&&&&&&&....@@@@@@@@@@@@@++.   ",
+"     .+.*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@@+++    ",
+"      ..*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@++.     ",
+"       .*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@++.      ",
+"       .*&&&&&&&&&&&&&&$$...@@@@@@@@@@++.       ",
+"       .*&&&&&&&&&&&&&$$...@@....@@....+....    ",
+"       .*&&&&&&&&&&&&$$..&&..&&&&..&&&&..&&&.   ",
+"       .*&&&&&&&&&&&$$..&&&.@.&&&&&&&&&&&&&&&.  ",
+"       .*&&&&&&&&&&$$.@.&&&.@.&&&&&&&&&&&&&&&.  ",
+"       .*&&&&&&&&&$$.@@.&&.@@.&&....&&....&&.   ",
+"       .*&&&&&&&&$$.@@.&&&.@.&&&.+.&&&. .&&&.   ",
+"       .*&&&&&&&$$.@@@.&&.@@.&&.++.&&.  .&&.    ",
+"       .*&&&&&&$$.@@@.&&&.@.&&&.+.&&&. .&&&.    ",
+"       .*&&&&&$$.++@@.&&.@@.&&.. .&&.  .&&.     ",
+"       .*&&&&$$. .++.&&&.@.&&&. .&&&. .&&&.     ",
+"        .$$$$$.   .+.&&&&..&&&&..&&&&..&&&&.    ",
+"         .....     .+....@+....  ....  ....     ",
+"                    .++@@++.                    ",
+"                     .++++.                     ",
+"                      .++.                      ",
+"                       ..                       "};
new file mode 100644
--- /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
new file mode 100644
--- /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>
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new file mode 100644
--- /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
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ddb2a14626501d11864c939a5e95ce6b31a9eea7
GIT binary patch
literal 624
zc$|AIz`)1=0+I{@3{DI@3~WF?BZJZu1|Z(SfDBTAn2`y>R!|QBlA=J&%Aj7^0awGt
zV8fKkkoW&Th{MDnRL`JZ1<|4;B?4C!!(jg(2%t8@fD;2ZPzz&g1v84U14J<p9AL14
z2+0Fk2r(jAws020ym~kb%J|;^XEDH7@8PWTAlAS7|MMZNKMV}|5Z3>zq2W*#RNX&_
zOZgd)%xhr4=HIpm-2SzP2-P2e$}#Rgz`zfYM6l}diUCcLC)U4kH}40F{DZUp^n+NR
j|Nr^_#~;Lcz`$4!5&O4l)&4&SbwJhvh)dD^%L1VQf*%<Y
new file mode 100644
--- /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=
--- a/src/INSTALLpc.txt
+++ b/src/INSTALLpc.txt
@@ -155,16 +155,11 @@ Visual C++ 2008 Express Edition       *m
 -------------------------------
 
 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'
 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...
--- 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 @@ 2.2  Edit vim-X.X/src/Make_vms.mms to cu
 			  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
 
--- 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.
--- 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.
--- 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, fla
 	{
 	    /* 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,
     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;
     }
 
--- 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>
--- 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>
--- 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: Insuff
 
 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
 	    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
 		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
 		    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
 	    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)
 		{
--- 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 */
--- 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
--- 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, usin
 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 
 
 #, 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ür Funktion: %s"
 
 #, 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 '
 
 #, 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ändigung benötigt eine Funktion als Argument"
 
 #, 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 fo
 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 fo
 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ässige lnum: %ld"
 
 #, 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öscht?"
 
 #, 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ültig"
 
 #, 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 Ar
 
 #, 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 
 
 #, 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
 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 C
 
 #, 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, 'modifi
 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
 
 #, 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"
--- 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.
-#
-# Translated:	 1694/1694 (100.00%)
+# 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)
 #
-# 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édiaire produit par diff n'a pu être lu"
 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 Di
 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 
 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()"
@@ -803,6 +803,10 @@ msgid "E706: Variable type mismatch for:
 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à du dernier fichier"
 
 #, 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 " ÉCHEC"
 #      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'échange"
 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épertoire"
 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'écriture partielle de ses tampons"
 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 
 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"
-msgstr ""
+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 : 'comp
 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"
-msgstr ""
-"--remote-tab <fich>\tComme --remote mais ouvrir un onglet pour chaque fichier"
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--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 dan
 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 
 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écessaires"
 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 ---"
@@ -4689,6 +4738,20 @@ 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 "
 msgstr ""
 "\n"
@@ -5399,6 +5462,7 @@ msgstr "Désolé, aucune suggestion"
 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édente"
 
 #, 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 ac
 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"
@@ -5832,6 +5896,13 @@ msgstr ""
 
 msgid ""
 "\n"
+"MS-Windows 64 bit GUI version"
+msgstr ""
+"\n"
+"Version graphique MS-Windows 64 bits"
+
+msgid ""
+"\n"
 "MS-Windows 32 bit GUI version"
 msgstr ""
 "\n"
@@ -6362,7 +6433,7 @@ msgid "E35: No previous regular expressi
 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 vari
 msgstr "E46: La variable \"%s\" est en lecture seule"
 
 #, c-format
-msgid "E46: Cannot set variable in the sandbox: \"%s\""
-msgstr ""
-"E46: Impossible de modifier une variable depuis le bac à sable : \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr ""
+"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'"
--- a/src/po/zh_TW.po
+++ b/src/po/zh_TW.po
@@ -698,7 +698,7 @@ msgstr "E478: ¤£­nÅå·W!"
 
 #, 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* ¹Bºâ¤¸¥i¥H¬OªÅªº"
 
 #, 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: ¤£¥¿½Tªº¦r¤¸¶° (Fontset): %s"
 
 #, 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"
--- a/src/proto/os_mac_conv.pro
+++ b/src/proto/os_mac_conv.pro
@@ -4,8 +4,9 @@ int macroman2enc __ARGS((char_u *ptr, lo
 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 : */
--- 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, soundfo
 		    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, soundfo
 	    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;
 			}
--- a/src/testdir/Make_os2.mak
+++ b/src/testdir/Make_os2.mak
@@ -25,7 +25,7 @@ SCRIPTS = test1.out test3.out test4.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
 
--- 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
 #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
 
--- 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