summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2008-06-24 20:39:31 +0000
committerBram Moolenaar <Bram@vim.org>2008-06-24 20:39:31 +0000
commita7241f5f19fd0865ce697939c347a8c88fb507d5 (patch)
treee1f1c07fe74094539286be048cc3306f6aedb0bc /runtime
parentf233048a129fa7a3b89e064078435181d6421da5 (diff)
downloadvim-git-a7241f5f19fd0865ce697939c347a8c88fb507d5.tar.gz
updated for version 7.2a
Diffstat (limited to 'runtime')
-rw-r--r--runtime/autoload/rubycomplete.vim2
-rw-r--r--runtime/autoload/xml/html401f.vim1
-rw-r--r--runtime/autoload/xml/xhtml10f.vim1
-rw-r--r--runtime/colors/slate.vim1
-rw-r--r--runtime/doc/Makefile26
-rw-r--r--runtime/doc/ft_sql.txt763
-rw-r--r--runtime/doc/gui.txt12
-rw-r--r--runtime/doc/hangulin.txt2
-rw-r--r--runtime/doc/map.txt39
-rw-r--r--runtime/doc/mlang.txt5
-rw-r--r--runtime/doc/os_qnx.txt2
-rw-r--r--runtime/doc/os_vms.txt2
-rw-r--r--runtime/doc/pi_gzip.txt2
-rw-r--r--runtime/doc/print.txt8
-rw-r--r--runtime/doc/usr_03.txt2
-rw-r--r--runtime/doc/usr_43.txt2
-rw-r--r--runtime/doc/version5.txt2
-rw-r--r--runtime/doc/visual.txt2
-rw-r--r--runtime/ftplugin/gitcommit.vim68
-rw-r--r--runtime/ftplugin/html.vim94
-rw-r--r--runtime/indent/php.vim6
-rw-r--r--runtime/indent/sql.vim2
-rw-r--r--runtime/indent/sqlanywhere.vim29
-rw-r--r--runtime/indent/vhdl.vim31
-rw-r--r--runtime/keymap/sinhala-phonetic_utf-8.vim42
-rw-r--r--runtime/keymap/ukrainian-jcuken.vim4
-rwxr-xr-xruntime/macros/less.sh15
-rw-r--r--runtime/plugin/vimballPlugin.vim14
-rw-r--r--runtime/spell/cleanadd.vim13
-rw-r--r--runtime/syntax/cmusrc.vim4
-rw-r--r--runtime/syntax/gp.vim6
-rw-r--r--runtime/syntax/manual.vim9
-rw-r--r--runtime/syntax/msmessages.vim135
-rw-r--r--runtime/syntax/netrw.vim66
-rw-r--r--runtime/syntax/pdf.vim73
-rw-r--r--runtime/syntax/ruby.vim2
-rw-r--r--runtime/syntax/scheme.vim5
-rw-r--r--runtime/syntax/tcsh.vim219
-rw-r--r--runtime/tutor/README_ami.txt32
-rw-r--r--runtime/tutor/runtime/delmenu.vim25
-rw-r--r--runtime/tutor/runtime/macmap.vim75
-rwxr-xr-xruntime/tutor/runtime/macros.infobin0 -> 624 bytes
-rw-r--r--runtime/tutor/runtime/optwin.vim1312
-rwxr-xr-xruntime/tutor/runtime/tools.infobin0 -> 624 bytes
-rw-r--r--runtime/tutor/runtime/vim32x32.xpm43
-rw-r--r--runtime/tutor/runtime/vim48x48.xpm59
-rw-r--r--runtime/tutor/runtime/vimlogo.eps791
-rw-r--r--runtime/tutor/tutor.sv.utf-8830
-rw-r--r--runtime/tutor/tutor.vi.utf-8812
-rwxr-xr-xruntime/tutor/vimdir.infobin0 -> 624 bytes
-rw-r--r--runtime/tutor/vimtutor.bat67
51 files changed, 5486 insertions, 271 deletions
diff --git a/runtime/autoload/rubycomplete.vim b/runtime/autoload/rubycomplete.vim
index 5b728607c..47c77d93d 100644
--- a/runtime/autoload/rubycomplete.vim
+++ b/runtime/autoload/rubycomplete.vim
@@ -36,7 +36,7 @@ if !exists("g:rubycomplete_classes_in_global")
endif
if !exists("g:rubycomplete_buffer_loading")
- let g:rubycomplete_classes_in_global = 0
+ let g:rubycomplete_buffer_loading = 0
endif
if !exists("g:rubycomplete_include_object")
diff --git a/runtime/autoload/xml/html401f.vim b/runtime/autoload/xml/html401f.vim
index 626126550..1797a5a07 100644
--- a/runtime/autoload/xml/html401f.vim
+++ b/runtime/autoload/xml/html401f.vim
@@ -466,4 +466,3 @@ let g:xmldata_html401t = {
\ 'param': ['/>', ''],
\ }
\ }
-" vim:ft=vim:ff=unix
diff --git a/runtime/autoload/xml/xhtml10f.vim b/runtime/autoload/xml/xhtml10f.vim
index 4cd894d3a..0bfa30ce9 100644
--- a/runtime/autoload/xml/xhtml10f.vim
+++ b/runtime/autoload/xml/xhtml10f.vim
@@ -467,4 +467,3 @@ let g:xmldata_xhtml10f = {
\ 'param': ['/>', ''],
\ }
\ }
-" vim:ft=vim:ff=unix
diff --git a/runtime/colors/slate.vim b/runtime/colors/slate.vim
index 12d91bab7..f9a70b877 100644
--- a/runtime/colors/slate.vim
+++ b/runtime/colors/slate.vim
@@ -9,6 +9,7 @@ if version > 580
syntax reset
endif
endif
+let colors_name = "slate"
:hi Normal guifg=White guibg=grey15
:hi Cursor guibg=khaki guifg=slategrey
:hi VertSplit guibg=#c2bfa5 guifg=grey40 gui=none cterm=reverse
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index ad08a87e2..3a289d7b0 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -14,13 +14,12 @@ VIMEXE = vim
include ../../src/auto/config.mk
DOCS = \
- ada.txt \
arabic.txt \
autocmd.txt \
change.txt \
cmdline.txt \
- debugger.txt \
debug.txt \
+ debugger.txt \
develop.txt \
diff.txt \
digraph.txt \
@@ -29,6 +28,8 @@ DOCS = \
farsi.txt \
filetype.txt \
fold.txt \
+ ft_ada.txt \
+ ft_sql.txt \
gui.txt \
gui_w16.txt \
gui_w32.txt \
@@ -50,10 +51,10 @@ DOCS = \
insert.txt \
intro.txt \
map.txt \
- message.txt \
- motion.txt \
mbyte.txt \
+ message.txt \
mlang.txt \
+ motion.txt \
netbeans.txt \
options.txt \
os_390.txt \
@@ -89,10 +90,9 @@ DOCS = \
russian.txt \
scroll.txt \
sign.txt \
+ spell.txt \
sponsor.txt \
starting.txt \
- spell.txt \
- sql.txt \
syntax.txt \
tabpage.txt \
tagsrch.txt \
@@ -145,7 +145,6 @@ DOCS = \
workshop.txt
HTMLS = \
- ada.html \
arabic.html \
autocmd.html \
change.html \
@@ -160,6 +159,8 @@ HTMLS = \
farsi.html \
filetype.html \
fold.html \
+ ft_ada.html \
+ ft_sql.html \
gui.html \
gui_w16.html \
gui_w32.html \
@@ -177,14 +178,13 @@ HTMLS = \
if_tcl.html \
indent.html \
index.html \
- vimindex.html \
insert.html \
intro.html \
map.html \
- message.html \
- motion.html \
mbyte.html \
+ message.html \
mlang.html \
+ motion.html \
netbeans.html \
options.html \
os_390.html \
@@ -220,10 +220,9 @@ HTMLS = \
russian.html \
scroll.html \
sign.html \
+ spell.html \
sponsor.html \
starting.html \
- spell.html \
- sql.html \
syntax.html \
tabpage.html \
tags.html \
@@ -272,6 +271,7 @@ HTMLS = \
version6.html \
version7.html \
vi_diff.html \
+ vimindex.html \
visual.html \
windows.html \
workshop.html
@@ -291,7 +291,7 @@ CONVERTED = \
evim-ru.UTF-8.1 \
vimdiff-ru.UTF-8.1 \
vimtutor-ru.UTF-8.1 \
- xxd-ru.UTF-8.1 \
+ xxd-ru.UTF-8.1
.SUFFIXES:
.SUFFIXES: .c .o .txt .html
diff --git a/runtime/doc/ft_sql.txt b/runtime/doc/ft_sql.txt
new file mode 100644
index 000000000..7946c4f70
--- /dev/null
+++ b/runtime/doc/ft_sql.txt
@@ -0,0 +1,763 @@
+*ft_sql.txt* For Vim version 7.2a. Last change: Wed Apr 26 2006 3:05:33 PM
+
+by David Fishburn
+
+This is a filetype plugin to work with SQL files.
+
+The Structured Query Language (SQL) is a standard which specifies statements
+that allow a user to interact with a relational database. Vim includes
+features for navigation, indentation and syntax highlighting.
+
+1. Navigation |sql-navigation|
+ 1.1 Matchit |sql-matchit|
+ 1.2 Text Object Motions |sql-object-motions|
+ 1.3 Predefined Object Motions |sql-predefined-objects|
+ 1.4 Macros |sql-macros|
+2. SQL Dialects |sql-dialects|
+ 2.1 SQLSetType |SQLSetType|
+ 2.2 SQL Dialect Default |sql-type-default|
+3. Adding new SQL Dialects |sql-adding-dialects|
+4. OMNI SQL Completion |sql-completion|
+ 4.1 Static mode |sql-completion-static|
+ 4.2 Dynamic mode |sql-completion-dynamic|
+ 4.3 Tutorial |sql-completion-tutorial|
+ 4.3.1 Complete Tables |sql-completion-tables|
+ 4.3.2 Complete Columns |sql-completion-columns|
+ 4.3.3 Complete Procedures |sql-completion-procedures|
+ 4.3.4 Complete Views |sql-completion-views|
+ 4.4 Completion Customization |sql-completion-customization|
+ 4.5 SQL Maps |sql-completion-maps|
+ 4.6 Using with other filetypes |sql-completion-filetypes|
+
+==============================================================================
+1. Navigation *sql-navigation*
+
+The SQL ftplugin provides a number of options to assist with file
+navigation.
+
+
+1.1 Matchit *sql-matchit*
+-----------
+The matchit plugin (http://www.vim.org/scripts/script.php?script_id=39)
+provides many additional features and can be customized for different
+languages. The matchit plugin is configured by defining a local
+buffer variable, b:match_words. Pressing the % key while on various
+keywords will move the cursor to its match. For example, if the cursor
+is on an "if", pressing % will cycle between the "else", "elseif" and
+"end if" keywords.
+
+The following keywords are supported: >
+ if
+ elseif | elsif
+ else [if]
+ end if
+
+ [while condition] loop
+ leave
+ break
+ continue
+ exit
+ end loop
+
+ for
+ leave
+ break
+ continue
+ exit
+ end loop
+
+ do
+ statements
+ doend
+
+ case
+ when
+ when
+ default
+ end case
+
+ merge
+ when not matched
+ when matched
+
+ create[ or replace] procedure|function|event
+ returns
+
+
+1.2 Text Object Motions *sql-object-motions*
+-----------------------
+Vim has a number of predefined keys for working with text |object-motions|.
+This filetype plugin attempts to translate these keys to maps which make sense
+for the SQL language.
+
+The following |Normal| mode and |Visual| mode maps exist (when you edit a SQL
+file): >
+ ]] move forward to the next 'begin'
+ [[ move backwards to the previous 'begin'
+ ][ move forward to the next 'end'
+ [] move backwards to the previous 'end'
+
+
+1.3 Predefined Object Motions *sql-predefined-objects*
+-----------------------------
+Most relational databases support various standard features, tables, indices,
+triggers and stored procedures. Each vendor also has a variety of proprietary
+objects. The next set of maps have been created to help move between these
+objects. Depends on which database vendor you are using, the list of objects
+must be configurable. The filetype plugin attempts to define many of the
+standard objects, plus many additional ones. In order to make this as
+flexible as possible, you can override the list of objects from within your
+|vimrc| with the following: >
+ let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' .
+ \ ',schema,service,publication,database,datatype,domain' .
+ \ ',index,subscription,synchronization,view,variable'
+
+The following |Normal| mode and |Visual| mode maps have been created which use
+the above list: >
+ ]} move forward to the next 'create <object name>'
+ [{ move backward to the previous 'create <object name>'
+
+Repeatedly pressing ]} will cycle through each of these create statements: >
+ create table t1 (
+ ...
+ );
+
+ create procedure p1
+ begin
+ ...
+ end;
+
+ create index i1 on t1 (c1);
+
+The default setting for g:ftplugin_sql_objects is: >
+ let g:ftplugin_sql_objects = 'function,procedure,event,' .
+ \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
+ \ 'table,trigger' .
+ \ ',schema,service,publication,database,datatype,domain' .
+ \ ',index,subscription,synchronization,view,variable'
+
+The above will also handle these cases: >
+ create table t1 (
+ ...
+ );
+ create existing table t2 (
+ ...
+ );
+ create global temporary table t3 (
+ ...
+ );
+
+By default, the ftplugin only searches for CREATE statements. You can also
+override this via your |vimrc| with the following: >
+ let g:ftplugin_sql_statements = 'create,alter'
+
+The filetype plugin defines three types of comments: >
+ 1. --
+ 2. //
+ 3. /*
+ *
+ */
+
+The following |Normal| mode and |Visual| mode maps have been created to work
+with comments: >
+ ]" move forward to the beginning of a comment
+ [" move forward to the end of a comment
+
+
+
+1.4 Macros *sql-macros*
+----------
+Vim's feature to find macro definitions, |'define'|, is supported using this
+regular expression: >
+ \c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>
+
+This addresses the following code: >
+ CREATE VARIABLE myVar1 INTEGER;
+
+ CREATE PROCEDURE sp_test(
+ IN myVar2 INTEGER,
+ OUT myVar3 CHAR(30),
+ INOUT myVar4 NUMERIC(20,0)
+ )
+ BEGIN
+ DECLARE myVar5 INTEGER;
+
+ SELECT c1, c2, c3
+ INTO myVar2, myVar3, myVar4
+ FROM T1
+ WHERE c4 = myVar1;
+ END;
+
+Place your cursor on "myVar1" on this line: >
+ WHERE c4 = myVar1;
+ ^
+
+Press any of the following keys: >
+ [d
+ [D
+ [CTRL-D
+
+
+==============================================================================
+2. SQL Dialects *sql-dialects* *sql-types*
+ *sybase* *TSQL* *Transact-SQL*
+ *sqlanywhere*
+ *oracle* *plsql* *sqlj*
+ *sqlserver*
+ *mysql* *postgres* *psql*
+ *informix*
+
+All relational databases support SQL. There is a portion of SQL that is
+portable across vendors (ex. CREATE TABLE, CREATE INDEX), but there is a
+great deal of vendor specific extensions to SQL. Oracle supports the
+"CREATE OR REPLACE" syntax, column defaults specified in the CREATE TABLE
+statement and the procedural language (for stored procedures and triggers).
+
+The default Vim distribution ships with syntax highlighting based on Oracle's
+PL/SQL. The default SQL indent script works for Oracle and SQL Anywhere.
+The default filetype plugin works for all vendors and should remain vendor
+neutral, but extendable.
+
+Vim currently has support for a variety of different vendors, currently this
+is via syntax scripts. Unfortunately, to flip between different syntax rules
+you must either create:
+ 1. New filetypes
+ 2. Custom autocmds
+ 3. Manual steps / commands
+
+The majority of people work with only one vendor's database product, it would
+be nice to specify a default in your |vimrc|.
+
+
+2.1 SQLSetType *sqlsettype* *SQLSetType*
+--------------
+For the people that work with many different databases, it would be nice to be
+able to flip between the various vendors rules (indent, syntax) on a per
+buffer basis, at any time. The ftplugin/sql.vim file defines this function: >
+ SQLSetType
+
+Executing this function without any parameters will set the indent and syntax
+scripts back to their defaults, see |sql-type-default|. If you have turned
+off Vi's compatibility mode, |'compatible'|, you can use the <Tab> key to
+complete the optional parameter.
+
+After typing the function name and a space, you can use the completion to
+supply a parameter. The function takes the name of the Vim script you want to
+source. Using the |cmdline-completion| feature, the SQLSetType function will
+search the |'runtimepath'| for all Vim scripts with a name containing 'sql'.
+This takes the guess work out of the spelling of the names. The following are
+examples: >
+ :SQLSetType
+ :SQLSetType sqloracle
+ :SQLSetType sqlanywhere
+ :SQLSetType sqlinformix
+ :SQLSetType mysql
+
+The easiest approach is to the use <Tab> character which will first complete
+the command name (SQLSetType), after a space and another <Tab>, display a list
+of available Vim script names: >
+ :SQL<Tab><space><Tab>
+
+
+2.2 SQL Dialect Default *sql-type-default*
+-----------------------
+As mentioned earlier, the default syntax rules for Vim is based on Oracle
+(PL/SQL). You can override this default by placing one of the following in
+your |vimrc|: >
+ let g:sql_type_default = 'sqlanywhere'
+ let g:sql_type_default = 'sqlinformix'
+ let g:sql_type_default = 'mysql'
+
+If you added the following to your |vimrc|: >
+ let g:sql_type_default = 'sqlinformix'
+
+The next time edit a SQL file the following scripts will be automatically
+loaded by Vim: >
+ ftplugin/sql.vim
+ syntax/sqlinformix.vim
+ indent/sql.vim
+>
+Notice indent/sqlinformix.sql was not loaded. There is no indent file
+for Informix, Vim loads the default files if the specified files does not
+exist.
+
+
+==============================================================================
+3. Adding new SQL Dialects *sql-adding-dialects*
+
+If you begin working with a SQL dialect which does not have any customizations
+available with the default Vim distribution you can check http://www.vim.org
+to see if any customization currently exist. If not, you can begin by cloning
+an existing script. Read |filetype-plugins| for more details.
+
+To help identify these scripts, try to create the files with a "sql" prefix.
+If you decide you wish to create customizations for the SQLite database, you
+can create any of the following: >
+ Unix
+ ~/.vim/syntax/sqlite.vim
+ ~/.vim/indent/sqlite.vim
+ Windows
+ $VIM/vimfiles/syntax/sqlite.vim
+ $VIM/vimfiles/indent/sqlite.vim
+
+No changes are necessary to the SQLSetType function. It will automatically
+pickup the new SQL files and load them when you issue the SQLSetType command.
+
+
+==============================================================================
+4. OMNI SQL Completion *sql-completion*
+ *omni-sql-completion*
+
+Vim 7 includes a code completion interface and functions which allows plugin
+developers to build in code completion for any language. Vim 7 includes
+code completion for the SQL language.
+
+There are two modes to the SQL completion plugin, static and dynamic. The
+static mode populates the popups with the data generated from current syntax
+highlight rules. The dynamic mode populates the popups with data retrieved
+directly from a database. This includes, table lists, column lists,
+procedures names and more.
+
+4.1 Static Mode *sql-completion-static*
+---------------
+The static popups created contain items defined by the active syntax rules
+while editing a file with a filetype of SQL. The plugin defines (by default)
+various maps to help the user refine the list of items to be displayed.
+The defaults static maps are: >
+ imap <buffer> <C-C>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O>
+ imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
+ imap <buffer> <C-C>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O>
+ imap <buffer> <C-C>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O>
+ imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O>
+ imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O>
+
+The static maps (which are based on the syntax highlight groups) follow this
+format: >
+ imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
+
+This command breaks down as: >
+ imap - Create an insert map
+ <buffer> - Only for this buffer
+ <C-C>k - Your choice of key map
+ <C-\><C-O> - Execute one command, return to Insert mode
+ :call sqlcomplete#Map( - Allows the SQL completion plugin to perform some
+ housekeeping functions to allow it to be used in
+ conjunction with other completion plugins.
+ Indicate which item you want the SQL completion
+ plugin to complete.
+ In this case we are asking the plugin to display
+ items from the syntax highlight group
+ 'sqlKeyword'.
+ You can view a list of highlight group names to
+ choose from by executing the
+ :syntax list
+ command while editing a SQL file.
+ 'sqlKeyword' - Display the items for the sqlKeyword highlight
+ group
+ )<CR> - Execute the :let command
+ <C-X><C-O> - Trigger the standard omni completion key stroke.
+ Passing in 'sqlKeyword' instructs the SQL
+ completion plugin to populate the popup with
+ items from the sqlKeyword highlight group. The
+ plugin will also cache this result until Vim is
+ restarted. The syntax list is retrieved using
+ the syntaxcomplete plugin.
+
+Using the 'syntax' keyword is a special case. This instructs the
+syntaxcomplete plugin to retrieve all syntax items. So this will effectively
+work for any of Vim's SQL syntax files. At the time of writing this includes
+10 different syntax files for the different dialects of SQL (see section 3
+above, |sql-dialects|).
+
+Here are some examples of the entries which are pulled from the syntax files: >
+ All
+ - Contains the contents of all syntax highlight groups
+ Statements
+ - Select, Insert, Update, Delete, Create, Alter, ...
+ Functions
+ - Min, Max, Trim, Round, Date, ...
+ Keywords
+ - Index, Database, Having, Group, With
+ Options
+ - Isolation_level, On_error, Qualify_owners, Fire_triggers, ...
+ Types
+ - Integer, Char, Varchar, Date, DateTime, Timestamp, ...
+
+
+4.2 Dynamic Mode *sql-completion-dynamic*
+----------------
+Dynamic mode populates the popups with data directly from a database. In
+order for the dynamic feature to be enabled you must have the dbext.vim
+plugin installed, (http://vim.sourceforge.net/script.php?script_id=356).
+
+Dynamic mode is used by several features of the SQL completion plugin.
+After installing the dbext plugin see the dbext-tutorial for additional
+configuration and usage. The dbext plugin allows the SQL completion plugin
+to display a list of tables, procedures, views and columns. >
+ Table List
+ - All tables for all schema owners
+ Procedure List
+ - All stored procedures for all schema owners
+ View List
+ - All stored procedures for all schema owners
+ Column List
+ - For the selected table, the columns that are part of the table
+
+To enable the popup, while in INSERT mode, use the following key combinations
+for each group (where <C-C> means hold the CTRL key down while pressing
+the space bar):
+ Table List - <C-C>t
+ - <C-X><C-O> (the default map assumes tables)
+ Stored Procedure List - <C-C>p
+ View List - <C-C>v
+ Column List - <C-C>c
+
+ Windows platform only - When viewing a popup window displaying the list
+ of tables, you can press <C-Right>, this will
+ replace the table currently highlighted with
+ the column list for that table.
+ - When viewing a popup window displaying the list
+ of columns, you can press <C-Left>, this will
+ replace the column list with the list of tables.
+ - This allows you to quickly drill down into a
+ table to view it's columns and back again.
+
+The SQL completion plugin caches various lists that are displayed in
+the popup window. This makes the re-displaying of these lists very
+fast. If new tables or columns are added to the database it may become
+necessary to clear the plugins cache. The default map for this is: >
+ imap <buffer> <C-C>R <C-\><C-O>:call sqlcomplete#Map('ResetCache')<CR><C-X><C-O>
+
+
+4.3 SQL Tutorial *sql-completion-tutorial*
+----------------
+
+This tutorial is designed to take you through the common features of the SQL
+completion plugin so that: >
+ a) You gain familiarity with the plugin
+ b) You are introduced to some of the more common features
+ c) Show how to customize it to your preferences
+ d) Demonstrate "Best of Use" of the plugin (easiest way to configure).
+
+First, create a new buffer: >
+ :e tutorial.sql
+
+
+Static features
+---------------
+To take you through the various lists, simply enter insert mode, hit:
+ <C-C>s (show SQL statements)
+At this point, you can page down through the list until you find "select".
+If you are familiar with the item you are looking for, for example you know
+the statement begins with the letter "s". You can type ahead (without the
+quotes) "se" then press:
+ <C-Space>t
+Assuming "select" is highlighted in the popup list press <Enter> to choose
+the entry. Now type:
+ * fr<C-C>a (show all syntax items)
+choose "from" from the popup list.
+
+When writing stored procedures using the "type" list is useful. It contains
+a list of all the database supported types. This may or may not be true
+depending on the syntax file you are using. The SQL Anywhere syntax file
+(sqlanywhere.vim) has support for this: >
+ BEGIN
+ DECLARE customer_id <C-C>T <-- Choose a type from the list
+
+
+Dynamic features
+----------------
+To take advantage of the dynamic features you must first install the
+dbext.vim plugin (http://vim.sourceforge.net/script.php?script_id=356). It
+also comes with a tutorial. From the SQL completion plugin's perspective,
+the main feature dbext provides is a connection to a database. dbext
+connection profiles are the most efficient mechanism to define connection
+information. Once connections have been setup, the SQL completion plugin
+uses the features of dbext in the background to populate the popups.
+
+What follows assumes dbext.vim has been correctly configured, a simple test
+is to run the command, :DBListTable. If a list of tables is shown, you know
+dbext.vim is working as expected. If not, please consult the dbext.txt
+documentation.
+
+Assuming you have followed the dbext-tutorial you can press <C-C>t to
+display a list of tables. There is a delay while dbext is creating the table
+list. After the list is displayed press <C-W>. This will remove both the
+popup window and the table name already chosen when the list became active. >
+
+ 4.3.1 Table Completion: *sql-completion-tables*
+
+Press <C-C>t to display a list of tables from within the database you
+have connected via the dbext plugin.
+NOTE: All of the SQL completion popups support typing a prefix before pressing
+the key map. This will limit the contents of the popup window to just items
+beginning with those characters. >
+
+ 4.3.2 Column Completion: *sql-completion-columns*
+
+The SQL completion plugin can also display a list of columns for particular
+tables. The column completion is trigger via <C-C>c.
+
+NOTE: The following example uses <C-Right> to trigger a column list while
+the popup window is active. This map is only available on the Windows
+platforms since *nix does not recognize CTRL and the right arrow held down
+together. If you wish to enable this functionality on a *nix platform choose
+a key and create one of these mappings (see |sql-completion-maps| for further
+details on where to create this imap): >
+ imap <buffer> <your_keystroke> <C-R>=sqlcomplete#DrillIntoTable()<CR>
+ imap <buffer> <your_keystroke> <C-Y><C-\><C-O>:call sqlcomplete#Map('column')<CR><C-X><C-O>
+
+Example of using column completion:
+ - Press <C-C>t again to display the list of tables.
+ - When the list is displayed in the completion window, press <C-Right>,
+ this will replace the list of tables, with a list of columns for the
+ table highlighted (after the same short delay).
+ - If you press <C-Left>, this will again replace the column list with the
+ list of tables. This allows you to drill into tables and column lists
+ very quickly.
+ - Press <C-Right> again while the same table is highlighted. You will
+ notice there is no delay since the column list has been cached. If you
+ change the schema of a cached table you can press <C-C>R, which
+ clears the SQL completion cache.
+ - NOTE: <C-Right> and <C-Left> have been designed to work while the
+ completion window is active. If the completion popup window is
+ not active, a normal <C-Right> or <C-Left> will be executed.
+
+Lets look how we can build a SQL statement dynamically. A select statement
+requires a list of columns. There are two ways to build a column list using
+the SQL completion plugin. >
+ One column at a time:
+< 1. After typing SELECT press <C-C>t to display a list of tables.
+ 2. Choose a table from the list.
+ 3. Press <C-Right> to display a list of columns.
+ 4. Choose the column from the list and press enter.
+ 5. Enter a "," and press <C-C>c. Generating a column list
+ generally requires having the cursor on a table name. The plugin
+ uses this name to determine what table to retrieve the column list.
+ In this step, since we are pressing <C-C>c without the cursor
+ on a table name the column list displayed will be for the previous
+ table. Choose a different column and move on.
+ 6. Repeat step 5 as often as necessary. >
+ All columns for a table:
+< 1. After typing SELECT press <C-C>t to display a list of tables.
+ 2. Highlight the table you need the column list for.
+ 3. Press <Enter> to choose the table from the list.
+ 4. Press <C-C>l to request a comma separated list of all columns
+ for this table.
+ 5. Based on the table name chosen in step 3, the plugin attempts to
+ decide on a reasonable table alias. You are then prompted to
+ either accept of change the alias. Press OK.
+ 6. The table name is replaced with the column list of the table is
+ replaced with the comma separate list of columns with the alias
+ prepended to each of the columns.
+ 7. Step 3 and 4 can be replaced by pressing <C-C>L, which has
+ a <C-Y> embedded in the map to choose the currently highlighted
+ table in the list.
+
+There is a special provision when writing select statements. Consider the
+following statement: >
+ select *
+ from customer c,
+ contact cn,
+ department as dp,
+ employee e,
+ site_options so
+ where c.
+
+In INSERT mode after typing the final "c." which is an alias for the
+"customer" table, you can press either <C-C>c or <C-X><C-O>. This will
+popup a list of columns for the customer table. It does this by looking back
+to the beginning of the select statement and finding a list of the tables
+specified in the FROM clause. In this case it notes that in the string
+"customer c", "c" is an alias for the customer table. The optional "AS"
+keyword is also supported, "customer AS c". >
+
+
+ 4.3.3 Procedure Completion: *sql-completion-procedures*
+
+Similar to the table list, <C-C>p, will display a list of stored
+procedures stored within the database. >
+
+ 4.3.4 View Completion: *sql-completion-views*
+
+Similar to the table list, <C-C>v, will display a list of views in the
+database.
+
+
+4.4 Completion Customization *sql-completion-customization*
+----------------------------
+
+The SQL completion plugin can be customized through various options set in
+your |vimrc|: >
+ omni_sql_no_default_maps
+< - Default: This variable is not defined
+ - If this variable is defined, no maps are created for OMNI
+ completion. See |sql-completion-maps| for further discussion.
+>
+ omni_sql_use_tbl_alias
+< - Default: a
+ - This setting is only used when generating a comma separated
+ column list. By default the map is <C-C>l. When generating
+ a column list, an alias can be prepended to the beginning of each
+ column, for example: e.emp_id, e.emp_name. This option has three
+ settings: >
+ n - do not use an alias
+ d - use the default (calculated) alias
+ a - ask to confirm the alias name
+<
+ An alias is determined following a few rules:
+ 1. If the table name has an '_', then use it as a separator: >
+ MY_TABLE_NAME --> MTN
+ my_table_name --> mtn
+ My_table_NAME --> MtN
+< 2. If the table name does NOT contain an '_', but DOES use
+ mixed case then the case is used as a separator: >
+ MyTableName --> MTN
+< 3. If the table name does NOT contain an '_', and does NOT
+ use mixed case then the first letter of the table is used: >
+ mytablename --> m
+ MYTABLENAME --> M
+
+ omni_sql_ignorecase
+< - Default: Current setting for|ignorecase|
+ - Valid settings are 0 or 1.
+ - When entering a few letters before initiating completion, the list
+ will be filtered to display only the entries which begin with the
+ list of characters. When this option is set to 0, the list will be
+ filtered using case sensitivity. >
+
+ omni_sql_include_owner
+< - Default: 0, unless dbext.vim 3.00 has been installed
+ - Valid settings are 0 or 1.
+ - When completing tables, procedure or views and using dbext.vim 3.00
+ or higher the list of objects will also include the owner name.
+ When completing these objects and omni_sql_include_owner is enabled
+ the owner name will be replaced. >
+
+ omni_sql_precache_syntax_groups
+< - Default:
+ ['syntax','sqlKeyword','sqlFunction','sqlOption','sqlType','sqlStatement']
+ - sqlcomplete can be used in conjunction with other completion
+ plugins. This is outlined at |sql-completion-filetypes|. When the
+ filetype is changed temporarily to SQL, the sqlcompletion plugin
+ will cache the syntax groups listed in the List specified in this
+ option.
+>
+
+4.5 SQL Maps *sql-completion-maps*
+------------
+
+The default SQL maps have been described in other sections of this document in
+greater detail. Here is a list of the maps with a brief description of each.
+
+Static Maps
+-----------
+These are maps which use populate the completion list using Vim's syntax
+highlighting rules. >
+ <C-C>a
+< - Displays all SQL syntax items. >
+ <C-C>k
+< - Displays all SQL syntax items defined as 'sqlKeyword'. >
+ <C-C>f
+< - Displays all SQL syntax items defined as 'sqlFunction. >
+ <C-C>o
+< - Displays all SQL syntax items defined as 'sqlOption'. >
+ <C-C>T
+< - Displays all SQL syntax items defined as 'sqlType'. >
+ <C-C>s
+< - Displays all SQL syntax items defined as 'sqlStatement'. >
+
+Dynamic Maps
+------------
+These are maps which use populate the completion list using the dbext.vim
+plugin. >
+ <C-C>t
+< - Displays a list of tables. >
+ <C-C>p
+< - Displays a list of procedures. >
+ <C-C>v
+< - Displays a list of views. >
+ <C-C>c
+< - Displays a list of columns for a specific table. >
+ <C-C>l
+< - Displays a comma separated list of columns for a specific table. >
+ <C-C>L
+< - Displays a comma separated list of columns for a specific table.
+ This should only be used when the completion window is active. >
+ <C-Right>
+< - Displays a list of columns for the table currently highlighted in
+ the completion window. <C-Right> is not recognized on most Unix
+ systems, so this maps is only created on the Windows platform.
+ If you would like the same feature on Unix, choose a different key
+ and make the same map in your vimrc. >
+ <C-Left>
+< - Displays the list of tables.
+ <C-Left> is not recognized on most Unix systems, so this maps is
+ only created on the Windows platform. If you would like the same
+ feature on Unix, choose a different key and make the same map in
+ your vimrc. >
+ <C-C>R
+< - This maps removes all cached items and forces the SQL completion
+ to regenerate the list of items.
+
+Customizing Maps
+----------------
+You can create as many additional key maps as you like. Generally, the maps
+will be specifying different syntax highlight groups.
+
+If you do not wish the default maps created or the key choices do not work on
+your platform (often a case on *nix) you define the following variable in
+your |vimrc|: >
+ let g:omni_sql_no_default_maps = 1
+
+Do no edit ftplugin/sql.vim directly! If you change this file your changes
+will be over written on future updates. Vim has a special directory structure
+which allows you to make customizations without changing the files that are
+included with the Vim distribution. If you wish to customize the maps
+create an after/ftplugin/sql.vim (see |after-directory|) and place the same
+maps from the ftplugin/sql.vim in it using your own key strokes. <C-C> was
+chosen since it will work on both Windows and *nix platforms. On the windows
+platform you can also use <C-Space> or ALT keys.
+
+
+4.6 Using with other filetypes *sql-completion-filetypes*
+------------------------------
+
+Many times SQL can be used with different filetypes. For example Perl, Java,
+PHP, Javascript can all interact with a database. Often you need both the SQL
+completion as well as the completion capabilities for the current language you
+are editing.
+
+This can be enabled easily with the following steps (assuming a Perl file): >
+ 1. :e test.pl
+ 2. :set filetype=sql
+ 3. :set ft=perl
+
+Step 1
+------
+Begins by editing a Perl file. Vim automatically sets the filetype to
+"perl". By default, Vim runs the appropriate filetype file
+ftplugin/perl.vim. If you are using the syntax completion plugin by following
+the directions at |ft-syntax-omni| then the |'omnifunc'| option has been set to
+"syntax#Complete". Pressing <C-X><C-O> will display the omni popup containing
+the syntax items for Perl.
+
+Step 2
+------
+Manually setting the filetype to 'sql' will also fire the appropriate filetype
+files ftplugin/sql.vim. This file will define a number of buffer specific
+maps for SQL completion, see |sql-completion-maps|. Now these maps have
+been created and the SQL completion plugin has been initialized. All SQL
+syntax items have been cached in preparation. The SQL filetype script detects
+we are attempting to use two different completion plugins. Since the SQL maps
+begin with <C-C>, the maps will toggle the |'omnifunc'| when in use. So you
+can use <C-X><C-O> to continue using the completion for Perl (using the syntax
+completion plugin) and <C-C> to use the SQL completion features.
+
+Step 3
+------
+Setting the filetype back to Perl sets all the usual "perl" related items back
+as they were.
+
+
+vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index b5ae414d6..d191bb098 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt* For Vim version 7.1. Last change: 2007 May 11
+*gui.txt* For Vim version 7.2a. Last change: 2008 Jun 14
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -325,16 +325,22 @@ A different kind of selection is used when:
- at the |hit-enter| prompt
- whenever the current mode is not in the 'mouse' option
- when holding the CTRL and SHIFT keys in the GUI
+
Since Vim continues like the selection isn't there, and there is no mode
associated with the selection, this is called modeless selection. Any text in
the Vim window can be selected. Select the text by pressing the left mouse
button at the start, drag to the end and release. To extend the selection,
use the right mouse button when 'mousemodel' is "extend", or the left mouse
button with the shift key pressed when 'mousemodel' is "popup".
-The middle mouse button pastes the text.
The selection is removed when the selected text is scrolled or changed.
+
On the command line CTRL-Y can be used to copy the selection into the
-clipboard. To do this from Insert mode, use CTRL-O : CTRL-Y <CR>.
+clipboard. To do this from Insert mode, use CTRL-O : CTRL-Y <CR>. When
+'guioptions' contains a or A (default on X11), the selection is automatically
+copied to the "* register.
+
+The middle mouse button can then paste the text. On non-X11 systems, you can
+use CTRL-R +.
3.4 Using Mouse on Status Lines *gui-mouse-status*
diff --git a/runtime/doc/hangulin.txt b/runtime/doc/hangulin.txt
index 68178ffd7..f1fa3b3dc 100644
--- a/runtime/doc/hangulin.txt
+++ b/runtime/doc/hangulin.txt
@@ -1,4 +1,4 @@
-*hangulin.txt* For Vim version 7.1. Last change: 2006 Apr 02
+*hangulin.txt* For Vim version 7.2a. Last change: 2006 Apr 02
VIM REFERENCE MANUAL by Chi-Deok Hwang and Sung-Hyun Nam
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index e099491ae..41b96151c 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt* For Vim version 7.1. Last change: 2007 May 11
+*map.txt* For Vim version 7.2a. Last change: 2008 Jun 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -266,12 +266,13 @@ as a special key.
1.3 MAPPING AND MODES *:map-modes*
+ *mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o*
There are five sets of mappings
- For Normal mode: When typing commands.
- For Visual mode: When typing commands while the Visual area is highlighted.
- For Operator-pending mode: When an operator is pending (after "d", "y", "c",
- etc.). Example: ":omap { w" makes "y{" work like "yw" and "d{" like "dw".
+ etc.). See below: |omap-info|.
- For Insert mode. These are also used in Replace mode.
- For Command-line mode: When entering a ":" or "/" command.
@@ -282,7 +283,6 @@ to type a count with a zero.
*map-overview* *map-modes*
Overview of which map command works in which mode:
- *mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o*
commands: modes: ~
Normal Visual+Select Operator-pending ~
:map :noremap :unmap :mapclear yes yes yes
@@ -318,6 +318,19 @@ Therefore the ":map" and ":map!" commands enter and display mappings for
several modes. In Vim you can use the ":nmap", ":vmap", ":omap", ":cmap" and
":imap" commands to enter mappings for each mode separately.
+ *omap-info*
+Operator-pending mappings can be used to define a movement command that can be
+used with any operator. Simple example: ":omap { w" makes "y{" work like "yw"
+and "d{" like "dw".
+
+To ignore the starting cursor position and select different text, you can have
+the omap start Visual mode to select the text to be operated upon. Example
+that operates on a function name in the current line: >
+ onoremap <silent> F :<C-U>normal! 0f(hviw<CR>
+The CTRL-U (<C-U>) is used to remove the range that Vim may insert. The
+Normal mode commands find the first '(' character and select the first word
+before it. That usually is the function name.
+
To enter a mapping for Normal and Visual mode, but not Operator-pending mode,
first define it for all three modes, then unmap it for Operator-pending mode:
:map xx something-difficult
@@ -473,7 +486,7 @@ scenario: >
:imap <M-C> foo
:set encoding=utf-8
The mapping for <M-C> is defined with the latin1 encoding, resulting in a 0xc3
-byte. If you type the character (0xea <M-a>) in UTF-8 encoding this is the
+byte. If you type the character (0xe1 <M-a>) in UTF-8 encoding this is the
two bytes 0xc3 0xa1. You don't want the 0xc3 byte to be mapped then,
otherwise it would be impossible to type the character.
@@ -494,9 +507,9 @@ defined. Changing "mapleader" after that has no effect for already defined
mappings.
*<LocalLeader>* *maplocalleader*
-Just like <Leader>, except that it uses "maplocalleader" instead of
-"mapleader". <LocalLeader> is to be used for mappings which are local to a
-buffer. Example: >
+<LocalLeader> is just like <Leader>, except that it uses "maplocalleader"
+instead of "mapleader". <LocalLeader> is to be used for mappings which are
+local to a buffer. Example: >
:map <LocalLeader>q \DoItNow
<
In a global plugin <Leader> should be used and in a filetype plugin
@@ -1167,7 +1180,7 @@ defined, not where it is invoked! Example:
:source script1.vim
:let s:error = "Wrong!"
:Error s:error
-Executing script2.vim will result in "None" to be echoed. Not what you
+Executing script2.vim will result in "None" being echoed. Not what you
intended! Calling a function may be an alternative.
Completion behavior *:command-completion* *E179*
@@ -1203,7 +1216,7 @@ Custom completion *:command-completion-custom*
*E467* *E468*
It is possible to define customized completion schemes via the "custom,{func}"
or the "customlist,{func}" completion argument. The {func} part should be a
-function with the following prototype >
+function with the following signature: >
:function {func}(ArgLead, CmdLine, CursorPos)
@@ -1370,10 +1383,10 @@ This will invoke: >
:" A more substantial example
:function Allargs(command)
- : let i = 0
- : while i < argc()
- : if filereadable(argv(i))
- : execute "e " . argv(i)
+ : let i = 0
+ : while i < argc()
+ : if filereadable(argv(i))
+ : execute "e " . argv(i)
: execute a:command
: endif
: let i = i + 1
diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt
index e0aa815f9..2e94d85d6 100644
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -1,4 +1,4 @@
-*mlang.txt* For Vim version 7.1. Last change: 2006 Jul 12
+*mlang.txt* For Vim version 7.2a. Last change: 2008 Jun 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -73,6 +73,9 @@ use of "-" and "_".
This sets $LC_TIME.
Without an argument both are set, and additionally
$LANG is set.
+ When compiled with the |+float| feature the LC_NUMERIC
+ value will always be set to "C", so that floating
+ point numbers use '.' as the decimal point.
This will make a difference for items that depend on
the language (some messages, time and date format).
Not fully supported on all systems
diff --git a/runtime/doc/os_qnx.txt b/runtime/doc/os_qnx.txt
index d694e1a83..6d15e5157 100644
--- a/runtime/doc/os_qnx.txt
+++ b/runtime/doc/os_qnx.txt
@@ -1,4 +1,4 @@
-*os_qnx.txt* For Vim version 7.1. Last change: 2005 Mar 29
+*os_qnx.txt* For Vim version 7.2a. Last change: 2005 Mar 29
VIM REFERENCE MANUAL by Julian Kinraid
diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt
index 4062c6d6c..6208d636c 100644
--- a/runtime/doc/os_vms.txt
+++ b/runtime/doc/os_vms.txt
@@ -1,4 +1,4 @@
-*os_vms.txt* For Vim version 7.1. Last change: 2006 Nov 18
+*os_vms.txt* For Vim version 7.2a. Last change: 2006 Nov 18
VIM REFERENCE MANUAL
diff --git a/runtime/doc/pi_gzip.txt b/runtime/doc/pi_gzip.txt
index 64d1f30e6..333437916 100644
--- a/runtime/doc/pi_gzip.txt
+++ b/runtime/doc/pi_gzip.txt
@@ -1,4 +1,4 @@
-*pi_gzip.txt* For Vim version 7.1. Last change: 2002 Oct 29
+*pi_gzip.txt* For Vim version 7.2a. Last change: 2002 Oct 29
VIM REFERENCE MANUAL by Bram Moolenaar
diff --git a/runtime/doc/print.txt b/runtime/doc/print.txt
index 447151a24..cb4de4318 100644
--- a/runtime/doc/print.txt
+++ b/runtime/doc/print.txt
@@ -1,4 +1,4 @@
-*print.txt* For Vim version 7.1. Last change: 2007 Apr 22
+*print.txt* For Vim version 7.2a. Last change: 2008 Apr 30
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -26,6 +26,9 @@ systems a PostScript file is produced. This can be directly sent to a
PostScript printer. For other printers a program like ghostscript needs to be
used.
+Note: If you have problems printing with |:hardcopy|, an alternative is to use
+|:TOhtml| and print the resulting html file from a browser.
+
*:ha* *:hardcopy* *E237* *E238* *E324*
:[range]ha[rdcopy][!] [arguments]
Send [range] lines (default whole file) to the
@@ -193,7 +196,8 @@ the font. When omitted, the point size is 10.
This defines the format of the header produced in |:hardcopy| output. The
option is defined in the same way as the 'statusline' option. If Vim has not
been compiled with the |+statusline| feature, this option has no effect and a
-simple default header is used, which shows the page number.
+simple default header is used, which shows the page number. The same simple
+header is used when this option is empty.
*pmbcs-option*
'printmbcharset' 'pmbcs' string (default "")
diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt
index 361f4098f..c5f114c9c 100644
--- a/runtime/doc/usr_03.txt
+++ b/runtime/doc/usr_03.txt
@@ -1,4 +1,4 @@
-*usr_03.txt* For Vim version 7.1. Last change: 2006 Jun 21
+*usr_03.txt* For Vim version 7.2a. Last change: 2006 Jun 21
VIM USER MANUAL - by Bram Moolenaar
diff --git a/runtime/doc/usr_43.txt b/runtime/doc/usr_43.txt
index 01cc4d626..65ac9b64b 100644
--- a/runtime/doc/usr_43.txt
+++ b/runtime/doc/usr_43.txt
@@ -1,4 +1,4 @@
-*usr_43.txt* For Vim version 7.1. Last change: 2006 Apr 24
+*usr_43.txt* For Vim version 7.2a. Last change: 2006 Apr 24
VIM USER MANUAL - by Bram Moolenaar
diff --git a/runtime/doc/version5.txt b/runtime/doc/version5.txt
index af050e2e6..538c24572 100644
--- a/runtime/doc/version5.txt
+++ b/runtime/doc/version5.txt
@@ -1,4 +1,4 @@
-*version5.txt* For Vim version 7.1. Last change: 2007 May 11
+*version5.txt* For Vim version 7.2a. Last change: 2007 May 11
VIM REFERENCE MANUAL by Bram Moolenaar
diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt
index e5a8e3a9b..4858bb88b 100644
--- a/runtime/doc/visual.txt
+++ b/runtime/doc/visual.txt
@@ -1,4 +1,4 @@
-*visual.txt* For Vim version 7.1. Last change: 2006 Sep 26
+*visual.txt* For Vim version 7.2a. Last change: 2006 Sep 26
VIM REFERENCE MANUAL by Bram Moolenaar
diff --git a/runtime/ftplugin/gitcommit.vim b/runtime/ftplugin/gitcommit.vim
new file mode 100644
index 000000000..bfc5b33f2
--- /dev/null
+++ b/runtime/ftplugin/gitcommit.vim
@@ -0,0 +1,68 @@
+" Vim filetype plugin
+" Language: git config file
+" Maintainer: Tim Pope <vimNOSPAM@tpope.info>
+" Last Change: 2008 Jun 04
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+ finish
+endif
+
+runtime! ftplugin/git.vim
+let b:did_ftplugin = 1
+
+if &textwidth == 0
+ " make sure that log messages play nice with git-log on standard terminals
+ setlocal textwidth=72
+ if !exists("b:undo_ftplugin")
+ let b:undo_ftplugin = ""
+ endif
+ let b:undo_ftplugin = b:undo_ftplugin . "|setl tw<"
+endif
+
+if exists("g:no_gitcommit_commands") || v:version < 700
+ finish
+endif
+
+if !exists("b:git_dir")
+ let b:git_dir = expand("%:p:h")
+endif
+
+" Automatically diffing can be done with:
+" autocmd FileType gitcommit DiffGitCached | wincmd p
+command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+
+function! s:diffcomplete(A,L,P)
+ let args = ""
+ if a:P <= match(a:L." -- "," -- ")+3
+ let args = args . "-p\n--stat\n--shortstat\n--summary\n--patch-with-stat\n--no-renames\n-B\n-M\n-C\n"
+ end
+ if exists("b:git_dir") && a:A !~ '^-'
+ let tree = fnamemodify(b:git_dir,':h')
+ if strpart(getcwd(),0,strlen(tree)) == tree
+ let args = args."\n".system("git diff --cached --name-only")
+ endif
+ endif
+ return args
+endfunction
+
+function! s:gitdiffcached(bang,gitdir,...)
+ let tree = fnamemodify(a:gitdir,':h')
+ let name = tempname()
+ let git = "git"
+ if strpart(getcwd(),0,strlen(tree)) != tree
+ let git .= " --git-dir=".(exists("*shellescape") ? shellescape(a:gitdir) : '"'.a:gitdir.'"')
+ endif
+ if a:0
+ let extra = join(map(copy(a:000),exists("*shellescape") ? 'shellescape(v:val)' : "'\"'.v:val.'\"'"))
+ else
+ let extra = "-p --stat=".&columns
+ endif
+ call system(git." diff --cached --no-color ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
+ exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name)
+ wincmd P
+ let b:git_dir = a:gitdir
+ command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+ nnoremap <silent> q :q<CR>
+ setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git
+endfunction
diff --git a/runtime/ftplugin/html.vim b/runtime/ftplugin/html.vim
index 3d723315d..4797f4b46 100644
--- a/runtime/ftplugin/html.vim
+++ b/runtime/ftplugin/html.vim
@@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: html
" Maintainer: Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2006 Apr 26
+" Last Changed: 2007 Nov 20
" URL: http://mywebpage.netscape.com/sharppeople/vim/ftplugin
if exists("b:did_ftplugin") | finish | endif
@@ -13,63 +13,55 @@ let s:save_cpo = &cpo
set cpo-=C
setlocal commentstring=<!--%s-->
+setlocal matchpairs+=<:>
if exists('&omnifunc')
-" Distinguish between HTML versions
-" To use with other HTML versions add another
-" elseif condition to match proper DOCTYPE
-setlocal omnifunc=htmlcomplete#CompleteTags
+ " Distinguish between HTML versions
+ " To use with other HTML versions add another
+ " elseif condition to match proper DOCTYPE
+ setlocal omnifunc=htmlcomplete#CompleteTags
-if &filetype == 'xhtml'
- let b:html_omni_flavor = 'xhtml10s'
-else
- let b:html_omni_flavor = 'html401t'
-endif
-let i = 1
-while i < 10 && i < line("$")
- let line = getline(i)
- if line =~ '<!DOCTYPE.*\<DTD HTML 3\.2'
- let b:html_omni_flavor = 'html32'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.0 Transitional'
- let b:html_omni_flavor = 'html40t'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.0 Frameset'
- let b:html_omni_flavor = 'html40f'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.0'
- let b:html_omni_flavor = 'html40s'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.01 Transitional'
- let b:html_omni_flavor = 'html401t'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.01 Frameset'
- let b:html_omni_flavor = 'html401f'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD HTML 4\.01'
- let b:html_omni_flavor = 'html401s'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.0 Transitional'
- let b:html_omni_flavor = 'xhtml10t'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.0 Frameset'
- let b:html_omni_flavor = 'xhtml10f'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.0 Strict'
- let b:html_omni_flavor = 'xhtml10s'
- break
- elseif line =~ '<!DOCTYPE.*\<DTD XHTML 1\.1'
- let b:html_omni_flavor = 'xhtml11'
- break
- endif
- let i += 1
-endwhile
+ if &filetype == 'xhtml'
+ let b:html_omni_flavor = 'xhtml10s'
+ else
+ let b:html_omni_flavor = 'html401t'
+ endif
+ let i = 1
+ let line = ""
+ while i < 10 && i < line("$")
+ let line = getline(i)
+ if line =~ '<!DOCTYPE.*\<DTD '
+ break
+ endif
+ let i += 1
+ endwhile
+ if line =~ '<!DOCTYPE.*\<DTD ' " doctype line found above
+ if line =~ ' HTML 3\.2'
+ let b:html_omni_flavor = 'html32'
+ elseif line =~ ' XHTML 1\.1'
+ let b:html_omni_flavor = 'xhtml11'
+ else " two-step detection with strict/frameset/transitional
+ if line =~ ' XHTML 1\.0'
+ let b:html_omni_flavor = 'xhtml10'
+ elseif line =~ ' HTML 4\.01'
+ let b:html_omni_flavor = 'html401'
+ elseif line =~ ' HTML 4.0\>'
+ let b:html_omni_flavor = 'html40'
+ endif
+ if line =~ '\<Transitional\>'
+ let b:html_omni_flavor .= 't'
+ elseif line =~ '\<Frameset\>'
+ let b:html_omni_flavor .= 'f'
+ else
+ let b:html_omni_flavor .= 's'
+ endif
+ endif
+ endif
endif
" HTML: thanks to Johannes Zellner and Benji Fisher.
if exists("loaded_matchit")
let b:match_ignorecase = 1
- let b:match_skip = 's:Comment'
let b:match_words = '<:>,' .
\ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
\ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
@@ -85,7 +77,7 @@ if has("gui_win32")
endif
" Undo the stuff we changed.
-let b:undo_ftplugin = "setlocal commentstring<"
+let b:undo_ftplugin = "setlocal commentstring< matchpairs< omnifunc<"
\ " | unlet! b:match_ignorecase b:match_skip b:match_words b:browsefilter"
" Restore the saved compatibility options.
diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
index 8ba3b2ea1..d73460d07 100644
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -2,7 +2,7 @@
" Language: PHP
" Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>
" URL: http://www.2072productions.com/vim/indent/php.vim
-" Last Change: 2007 February 25th
+" Last Change: 2007 Jun 24
" Newsletter: http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
" Version: 1.24
"
@@ -310,11 +310,11 @@ function! ResetOptions()
setlocal comments=s1:/*,mb:*,ex:*/,://,:#
- setlocal formatoptions-=t
+ " setlocal formatoptions-=t
setlocal formatoptions+=q
setlocal formatoptions+=r
setlocal formatoptions+=o
- setlocal formatoptions+=w
+ " setlocal formatoptions+=w
setlocal formatoptions+=c
setlocal formatoptions+=b
endif
diff --git a/runtime/indent/sql.vim b/runtime/indent/sql.vim
index f7cf83470..4f82b96a5 100644
--- a/runtime/indent/sql.vim
+++ b/runtime/indent/sql.vim
@@ -36,4 +36,4 @@ endif
exec 'runtime indent/'.filename.'.vim'
-" vim:sw=4:ff=unix:
+" vim:sw=4:
diff --git a/runtime/indent/sqlanywhere.vim b/runtime/indent/sqlanywhere.vim
index c2f527ebc..fdafb622e 100644
--- a/runtime/indent/sqlanywhere.vim
+++ b/runtime/indent/sqlanywhere.vim
@@ -1,8 +1,8 @@
" Vim indent file
" Language: SQL
" Maintainer: David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Wed Sep 14 2005 10:21:15 PM
-" Version: 1.4
+" Last Change: Mon Apr 02 2007 9:13:47 AM
+" Version: 1.5
" Download: http://vim.sourceforge.net/script.php?script_id=495
" Notes:
@@ -106,7 +106,7 @@ function s:CheckToIgnoreRightParan( prev_lnum, num_levels )
" if getline(".") =~ '^)'
let matching_paran = searchpair('(', '', ')', 'bW',
- \ 'IsColComment(line("."), col("."))')
+ \ 's:IsColComment(line("."), col("."))')
if matching_paran < 1
" No match found
@@ -165,7 +165,7 @@ function s:GetStmtStarterIndent( keyword, curr_lnum )
\ '\%(\%(\<end\s\+\)\@<!\<if\>\)'.
\ '\)'
let matching_lnum = searchpair(stmts, '', '\<end\>\zs', 'bW',
- \ 'IsColComment(line("."), col(".")) == 1')
+ \ 's:IsColComment(line("."), col(".")) == 1')
exec 'normal! $'
if matching_lnum > 0 && matching_lnum < a:curr_lnum
let ind = indent(matching_lnum)
@@ -177,7 +177,7 @@ function s:GetStmtStarterIndent( keyword, curr_lnum )
\ '',
\ '\%(\%(\<when\s\+others\>\)\|\%(\<end\s\+case\>\)\)',
\ 'bW',
- \ 'IsColComment(line("."), col(".")) == 1')
+ \ 's:IsColComment(line("."), col(".")) == 1')
exec 'normal! $'
if matching_lnum > 0 && matching_lnum < a:curr_lnum
let ind = indent(matching_lnum)
@@ -191,7 +191,7 @@ endfunction
" Check if the line is a comment
-function IsLineComment(lnum)
+function s:IsLineComment(lnum)
let rc = synIDattr(
\ synID(a:lnum,
\ match(getline(a:lnum), '\S')+1, 0)
@@ -203,7 +203,7 @@ endfunction
" Check if the column is a comment
-function IsColComment(lnum, cnum)
+function s:IsColComment(lnum, cnum)
let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name")
\ =~? "comment"
@@ -211,8 +211,9 @@ function IsColComment(lnum, cnum)
endfunction
-" Check if the column is a comment
-function ModuloIndent(ind)
+" Instead of returning a column position, return
+" an appropriate value as a factor of shiftwidth.
+function s:ModuloIndent(ind)
let ind = a:ind
if ind > 0
@@ -235,7 +236,7 @@ function GetSQLIndent()
" If the current line is a comment, leave the indent as is
" Comment out this additional check since it affects the
" indenting of =, and will not reindent comments as it should
- " if IsLineComment(lnum) == 1
+ " if s:IsLineComment(lnum) == 1
" return ind
" endif
@@ -246,9 +247,9 @@ function GetSQLIndent()
return ind
endif
- if IsLineComment(prevlnum) == 1
+ if s:IsLineComment(prevlnum) == 1
if getline(v:lnum) =~ '^\s*\*'
- let ind = ModuloIndent(indent(prevlnum))
+ let ind = s:ModuloIndent(indent(prevlnum))
return ind + 1
endif
" If the previous line is a comment, then return -1
@@ -378,7 +379,7 @@ function GetSQLIndent()
endif
" echom 'final - indent ' . ind
- return ModuloIndent(ind)
+ return s:ModuloIndent(ind)
endfunction
-" vim:sw=4:ff=unix:
+" vim:sw=4:
diff --git a/runtime/indent/vhdl.vim b/runtime/indent/vhdl.vim
index d288be4ce..9940cc5b5 100644
--- a/runtime/indent/vhdl.vim
+++ b/runtime/indent/vhdl.vim
@@ -1,8 +1,8 @@
" VHDL indent ('93 syntax)
" Language: VHDL
" Maintainer: Gerald Lai <laigera+vim?gmail.com>
-" Version: 1.50
-" Last Change: 2007 Jan 29
+" Version: 1.54
+" Last Change: 2007 Aug 17
" URL: http://www.vim.org/scripts/script.php?script_id=1450
" only load this indent file when no other was loaded
@@ -28,13 +28,13 @@ let s:ES = '\s*\%(--.*\)\=$'
let s:NE = '\%(\<end\s\+\)\@<!'
" option to disable alignment of generic/port mappings
-if !exists("g:vhdl_align_genportmap")
- let g:vhdl_align_genportmap = 1
+if !exists("g:vhdl_indent_genportmap")
+ let g:vhdl_indent_genportmap = 1
endif
" option to disable alignment of right-hand side assignment "<=" statements
-if !exists("g:vhdl_align_rhsassign")
- let g:vhdl_align_rhsassign = 1
+if !exists("g:vhdl_indent_rhsassign")
+ let g:vhdl_indent_rhsassign = 1
endif
" only define indent function once
@@ -54,6 +54,7 @@ function GetVHDLindent()
let prevn = prevnonblank(prevn - 1)
let prevs = getline(prevn)
endwhile
+ let prevs_noi = substitute(prevs, '^\s*', '', '')
" default indent starts as previous non-comment line's indent
let ind = prevn > 0 ? indent(prevn) : 0
@@ -77,8 +78,8 @@ function GetVHDLindent()
if curs =~ '^\s*--'
let pn = curn - 1
let ps = getline(pn)
- if ps =~ '--'
- return stridx(ps, '--')
+ if curs =~ '^\s*--\s' && ps =~ '--'
+ return indent(pn) + stridx(substitute(ps, '^\s*', '', ''), '--')
else
" find nextnonblank line that is not a comment
let nn = nextnonblank(curn + 1)
@@ -106,14 +107,14 @@ function GetVHDLindent()
if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
" align closing ")" with opening "("
if curs =~ '^\s*)'
- return stridx(prevs, '(')
+ return ind2 + stridx(prevs_noi, '(')
endif
- let m = matchend(prevs, '(\s*\ze\w')
+ let m = matchend(prevs_noi, '(\s*\ze\w')
if m != -1
- return m
+ return ind2 + m
else
- if g:vhdl_align_genportmap
- return stridx(prevs, '(') + &sw
+ if g:vhdl_indent_genportmap
+ return ind2 + stridx(prevs_noi, '(') + &sw
else
return ind2 + &sw
endif
@@ -124,8 +125,8 @@ function GetVHDLindent()
" keywords: variable + "<=" without ";" ending
" where: start of previous line
if prevs =~? '^\s*\S\+\s*<=[^;]*'.s:ES
- if g:vhdl_align_rhsassign
- return matchend(prevs, '<=\s*\ze.')
+ if g:vhdl_indent_rhsassign
+ return ind2 + matchend(prevs_noi, '<=\s*\ze.')
else
return ind2 + &sw
endif
diff --git a/runtime/keymap/sinhala-phonetic_utf-8.vim b/runtime/keymap/sinhala-phonetic_utf-8.vim
index cd8b2e8e9..adedc3f7c 100644
--- a/runtime/keymap/sinhala-phonetic_utf-8.vim
+++ b/runtime/keymap/sinhala-phonetic_utf-8.vim
@@ -1,7 +1,7 @@
" Vim Keymap file for Sinhala (Sri Lanka) (2003-11-02)
" Maintainer : Harshula Jayasuriya <harshula@gmail.com>
-" Last Updated: 2006-06-08
-" This is a static phonetic mapping for a standard US-English keyboard
+" Last Updated: 2007-06-30
+" This is a phonetic static mapping for a standard US-English keyboard
" (qwerty)
" http://www.nongnu.org/sinhala/doc/keymaps/sinhala-keyboard_3.html
@@ -48,18 +48,18 @@ J <char-0x0da3> " ඣ - mahaapraana jayanna (jha)
z <char-0x0da4> " ඤ - taaluja naasikyaya (nya)
Z <char-0x0da5> " ඥ - taaluja sanyooga naasikyaya (jnya)
<A-j> <char-0x0da6> " ඦ - sanyaka jayanna (nyja)
-t <char-0x0da7> " ට - alpapraana ttayanna (tta)
-T <char-0x0da8> " ඨ - mahaapraana ttayanna (ttha)
-d <char-0x0da9> " ඩ - alpapraana ddayanna (dda)
-D <char-0x0daa> " ඪ - mahaapraana ddayanna (ddha)
+<A-t> <char-0x0da7> " ට - alpapraana ttayanna (tta)
+<A-T> <char-0x0da8> " ඨ - mahaapraana ttayanna (ttha)
+<A-d> <char-0x0da9> " ඩ - alpapraana ddayanna (dda)
+<A-D> <char-0x0daa> " ඪ - mahaapraana ddayanna (ddha)
N <char-0x0dab> " ණ - muurdhaja nayanna (nna)
-x <char-0x0dac> " ඬ - sanyaka ddayanna (nndda)
-<A-t> <char-0x0dad> " ත - alpapraana tayanna (ta)
-<A-T> <char-0x0dae> " ථ - mahaapraana tayanna (tha)
-<A-d> <char-0x0daf> " ද - alpapraana dayanna (da)
-<A-D> <char-0x0db0> " ධ - mahaapraana dayanna (dha)
+X <char-0x0dac> " ඬ - sanyaka ddayanna (nndda)
+t <char-0x0dad> " ත - alpapraana tayanna (ta)
+T <char-0x0dae> " ථ - mahaapraana tayanna (tha)
+d <char-0x0daf> " ද - alpapraana dayanna (da)
+D <char-0x0db0> " ධ - mahaapraana dayanna (dha)
n <char-0x0db1> " න - dantaja nayanna (na)
-X <char-0x0db3> " ඳ - sanyaka dayanna (nda)
+x <char-0x0db3> " ඳ - sanyaka dayanna (nda)
p <char-0x0db4> " ප - alpapraana payanna (pa)
P <char-0x0db5> " ඵ - mahaapraana payanna (pha)
b <char-0x0db6> " බ - alpapraana bayanna (ba)
@@ -70,13 +70,13 @@ y <char-0x0dba> " ය - yayanna (ya)
r <char-0x0dbb> " ර - rayanna (ra)
l <char-0x0dbd> " ල - dantaja layanna (la)
v <char-0x0dc0> " ව - vayanna (va)
-<A-s> <char-0x0dc1> " ශ - taaluja sayanna (sha)
-S <char-0x0dc2> " ෂ - muurdhaja sayanna (ssa)
+S <char-0x0dc1> " ශ - taaluja sayanna (sha)
+<A-s> <char-0x0dc2> " ෂ - muurdhaja sayanna (ssa)
s <char-0x0dc3> " ස - dantaja sayanna (sa)
h <char-0x0dc4> " හ - hayanna (ha)
L <char-0x0dc5> " ළ - muurdhaja layanna (lla)
f <char-0x0dc6> " ෆ - fayanna (fa)
-<A-a> <char-0x0dca> " ් - al-lakuna
+<A-a> <char-0x0dca> " ් - al-lakuna
<A-A> <char-0x0dcf> " ා - aela-pilla (aa)
<A-w> <char-0x0dd0> " ැ - ketti aeda-pilla (ae)
<A-W> <char-0x0dd1> " ෑ - diga aeda-pilla (aae)
@@ -96,12 +96,12 @@ f <char-0x0dc6> " ෆ - fayanna (fa)
<A-L> <char-0x0df3> " ෳ - diga gayanukitta (ll)
<A-.> <char-0x0df4> " ෴ - kunddaliya (punctuation)
-R <char-0x0dca><char-0x200d><char-0x0dbb> " ්‍ර - rakaransaya
+R <char-0x0dca><char-0x200d><char-0x0dbb> " ්‍ර - rakaaranshaya
Y <char-0x0dca><char-0x200d><char-0x0dba> " ්‍ය - yansaya
-<A-r> <char-0x0dbb><char-0x0dca><char-0x200d> " ර්‍ - repaya
+<A-r> <char-0x0dbb><char-0x0dca><char-0x200d> " ර්‍ - repaya
-<A-\> <char-0x0dca><char-0x200d> " join - conjunct letters cons 0DCA ZWJ cons
-<A-|> <char-0x200d><char-0x0dca> " touch - cons ZWJ 0DCA cons
+<A-,> <char-0x0dca><char-0x200d> " join - conjunct letters cons 0DCA ZWJ cons
+<A-/> <char-0x200d><char-0x0dca> " touch - cons ZWJ 0DCA cons
-<S-space> <char-0x00a0> " - no-break space. <S-space> didn't work.
-<C-space> <char-0x200c> " - ZWNJ. <A-space> doesn't work!
+<C-space> <char-0x00a0> " - no-break space. <S-space> didn't work.
+<A-space> <char-0x200c> " - ZWNJ. <A-space> doesn't work!
diff --git a/runtime/keymap/ukrainian-jcuken.vim b/runtime/keymap/ukrainian-jcuken.vim
index 09e56dff8..fcc1c34f8 100644
--- a/runtime/keymap/ukrainian-jcuken.vim
+++ b/runtime/keymap/ukrainian-jcuken.vim
@@ -4,7 +4,7 @@
" Useful mainly with utf-8 but may work with other encodings
" Maintainer: Anatoli Sakhnik <sakhnik@gmail.com>
-" Last Changed: 2006 Mar 15
+" Last Changed: 2007 Nov 11
" All characters are given literally, conversion to another encoding (e.g.,
" UTF-8) should work.
@@ -88,3 +88,5 @@ $ *
^ ,
& .
* ;
+~ ~
+~~ <char-0x301> Stress
diff --git a/runtime/macros/less.sh b/runtime/macros/less.sh
index 256936b5e..484c714ce 100755
--- a/runtime/macros/less.sh
+++ b/runtime/macros/less.sh
@@ -2,8 +2,17 @@
# Shell script to start Vim with less.vim.
# Read stdin if no arguments were given.
-if test $# = 0; then
- vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+if test -t 1; then
+ if test $# = 0; then
+ vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+ else
+ vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+ fi
else
- vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+ # Output is not a terminal, cat arguments or stdin
+ if test $# = 0; then
+ cat
+ else
+ cat "$@"
+ fi
fi
diff --git a/runtime/plugin/vimballPlugin.vim b/runtime/plugin/vimballPlugin.vim
index 386e58f17..502c8216f 100644
--- a/runtime/plugin/vimballPlugin.vim
+++ b/runtime/plugin/vimballPlugin.vim
@@ -1,6 +1,6 @@
" vimballPlugin : construct a file containing both paths and files
" Author: Charles E. Campbell, Jr.
-" Copyright: (c) 2004-2006 by Charles E. Campbell, Jr.
+" Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.
" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
" (see |copyright|) except use "Vimball" instead of "Vim".
" No warranty, express or implied.
@@ -16,18 +16,18 @@
if &cp || exists("g:loaded_vimballPlugin")
finish
endif
-let g:loaded_vimballPlugin = 1
+let g:loaded_vimballPlugin = "v27"
let s:keepcpo = &cpo
set cpo&vim
" ------------------------------------------------------------------------------
" Public Interface: {{{1
-com! -ra -complete=dir -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
-com! -na=? -complete=dir UseVimball call vimball#Vimball(1,<f-args>)
-com! -na=0 VimballList call vimball#Vimball(0)
-com! -na=* -complete=dir RmVimball call vimball#RmVimball(<f-args>)
+com! -ra -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
+com! -na=? -complete=dir UseVimball call vimball#Vimball(1,<f-args>)
+com! -na=0 VimballList call vimball#Vimball(0)
+com! -na=* -complete=dir RmVimball call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
au BufEnter *.vba.gz,*.vba.bz2,*.vba.zip call vimball#Decompress(expand("<amatch>"))
-au BufEnter *.vba setlocal noma bt=nofile fmr=[[[,]]] fdm=marker|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+au BufEnter *.vba setlocal ff=unix noma bt=nofile fmr=[[[,]]] fdm=marker|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
" =====================================================================
" Restoration And Modelines: {{{1
diff --git a/runtime/spell/cleanadd.vim b/runtime/spell/cleanadd.vim
index cb7620fbf..6dc069218 100644
--- a/runtime/spell/cleanadd.vim
+++ b/runtime/spell/cleanadd.vim
@@ -1,6 +1,6 @@
" Vim script to clean the ll.xxxxx.add files of commented out entries
" Author: Antonio Colombo, Bram Moolenaar
-" Last Update: 2006 Jan 19
+" Last Update: 2008 Jun 3
" Time in seconds after last time an ll.xxxxx.add file was updated
" Default is one second.
@@ -14,12 +14,19 @@ endif
" Delete all comment lines, except the ones starting with ##.
for s:fname in split(globpath(&rtp, "spell/*.add"), "\n")
if filewritable(s:fname) && localtime() - getftime(s:fname) > g:spell_clean_limit
- silent exe "tab split " . escape(s:fname, ' \')
- echo "Processing" s:fname
+ if exists('*fnameescape')
+ let s:f = fnameescape(s:fname)
+ else
+ let s:f = escape(s:fname, ' \|<')
+ endif
+ silent exe "tab split " . s:f
+ echo "Processing" s:f
silent! g/^#[^#]/d
silent update
close
+ unlet s:f
endif
endfor
+unlet s:fname
echo "Done"
diff --git a/runtime/syntax/cmusrc.vim b/runtime/syntax/cmusrc.vim
index 3e84751a9..e36a69c69 100644
--- a/runtime/syntax/cmusrc.vim
+++ b/runtime/syntax/cmusrc.vim
@@ -1,6 +1,6 @@
" Vim syntax file
" Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2006-07-22
+" Latest Revision: 2007-06-17
if exists("b:current_syntax")
finish
@@ -9,7 +9,7 @@ endif
let s:cpo_save = &cpo
set cpo&vim
-setlocal iskeyword=@,48-57,_,-
+setlocal iskeyword+=-
syn keyword cmusrcTodo contained TODO FIXME XXX NOTE
diff --git a/runtime/syntax/gp.vim b/runtime/syntax/gp.vim
index 4be13440d..2793aa4ed 100644
--- a/runtime/syntax/gp.vim
+++ b/runtime/syntax/gp.vim
@@ -1,7 +1,7 @@
" Vim syntax file
-" Language: gp (version 2.2)
+" Language: gp (version 2.4)
" Maintainer: Karim Belabas <Karim.Belabas@math.u-bordeaux.fr>
-" Last change: 2006 Apr 12
+" Last change: 2007 Oct 1
" URL: http://pari.math.u-bordeaux.fr
if version < 600
@@ -15,7 +15,7 @@ syntax keyword gpStatement break return next
syntax keyword gpConditional if
syntax keyword gpRepeat until while for fordiv forprime forstep forvec
" storage class
-syntax keyword gpScope local global
+syntax keyword gpScope my local global
" defaults
syntax keyword gpInterfaceKey colors compatible datadir debug debugfiles
syntax keyword gpInterfaceKey debugmem echo factor_add_primes format help
diff --git a/runtime/syntax/manual.vim b/runtime/syntax/manual.vim
index 5ac045f60..5ea373180 100644
--- a/runtime/syntax/manual.vim
+++ b/runtime/syntax/manual.vim
@@ -1,6 +1,6 @@
" Vim syntax support file
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2001 Jun 04
+" Last Change: 2008 Jan 26
" This file is used for ":syntax manual".
" It installs the Syntax autocommands, but no the FileType autocommands.
@@ -17,9 +17,12 @@ endif
let syntax_manual = 1
" Remove the connection between FileType and Syntax autocommands.
-silent! au! syntaxset FileType
+if exists('#syntaxset')
+ au! syntaxset FileType
+endif
" If the GUI is already running, may still need to install the FileType menu.
-if has("gui_running") && !exists("did_install_syntax_menu")
+" Don't do it when the 'M' flag is included in 'guioptions'.
+if has("menu") && has("gui_running") && !exists("did_install_syntax_menu") && &guioptions !~# 'M'
source $VIMRUNTIME/menu.vim
endif
diff --git a/runtime/syntax/msmessages.vim b/runtime/syntax/msmessages.vim
new file mode 100644
index 000000000..60588571c
--- /dev/null
+++ b/runtime/syntax/msmessages.vim
@@ -0,0 +1,135 @@
+" Vim syntax file
+" Language: MS Message Text files (*.mc)
+" Maintainer: Kevin Locke <kwl7@cornell.edu>
+" Last Change: 2008 April 09
+" Location: http://kevinlocke.name/programs/vim/syntax/msmessages.vim
+
+" See format description at <http://msdn2.microsoft.com/en-us/library/aa385646.aspx>
+" This file is based on the rc.vim and c.vim
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" Common MS Messages keywords
+syn case ignore
+syn keyword msmessagesIdentifier MessageIdTypedef
+syn keyword msmessagesIdentifier SeverityNames
+syn keyword msmessagesIdentifier FacilityNames
+syn keyword msmessagesIdentifier LanguageNames
+syn keyword msmessagesIdentifier OutputBase
+
+syn keyword msmessagesIdentifier MessageId
+syn keyword msmessagesIdentifier Severity
+syn keyword msmessagesIdentifier Facility
+syn keyword msmessagesIdentifier OutputBase
+
+syn match msmessagesIdentifier /\<SymbolicName\>/ nextgroup=msmessagesIdentEq skipwhite
+syn match msmessagesIdentEq transparent /=/ nextgroup=msmessagesIdentDef skipwhite contained
+syn match msmessagesIdentDef display /\w\+/ contained
+" Note: The Language keyword is highlighted as part of an msmessagesLangEntry
+
+" Set value
+syn case match
+syn region msmessagesSet start="(" end=")" transparent fold contains=msmessagesName keepend
+syn match msmessagesName /\w\+/ nextgroup=msmessagesSetEquals skipwhite contained
+syn match msmessagesSetEquals /=/ display transparent nextgroup=msmessagesNumVal skipwhite contained
+syn match msmessagesNumVal display transparent "\<\d\|\.\d" contains=msmessagesNumber,msmessagesFloat,msmessagesOctalError,msmessagesOctal nextgroup=msmessagesValSep
+syn match msmessagesValSep /:/ display nextgroup=msmessagesNameDef contained
+syn match msmessagesNameDef /\w\+/ display contained
+
+
+" Comments are converted to C source (by removing leading ;)
+" So we highlight the comments as C
+syn include @msmessagesC syntax/c.vim
+unlet b:current_syntax
+syn region msmessagesCComment matchgroup=msmessagesComment start=/;/ end=/$/ contains=@msmessagesC keepend
+
+" String and Character constants
+" Highlight special characters (those which have a escape) differently
+syn case ignore
+syn region msmessagesLangEntry start=/\<Language\>\s*=\s*\S\+\s*$/hs=e+1 end=/^\./ contains=msmessagesFormat,msmessagesLangEntryEnd,msmessagesLanguage keepend
+syn match msmessagesLanguage /\<Language\(\s*=\)\@=/ contained
+syn match msmessagesLangEntryEnd display /^\./ contained
+syn case match
+syn match msmessagesFormat display /%[1-9]\d\?\(![-+0 #]*\d*\(\.\d\+\)\?\(h\|l\|ll\|I\|I32\|I64\)\?[aAcCdeEfgGinopsSuxX]!\)\?/ contained
+syn match msmessagesFormat display /%[0.%\\br]/ contained
+syn match msmessagesFormat display /%!\(\s\)\@=/ contained
+
+" Integer number, or floating point number without a dot and with "f".
+" Copied from c.vim
+syn case ignore
+"(long) integer
+syn match msmessagesNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+"hex number
+syn match msmessagesNumber display contained "\<0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+" Flag the first zero of an octal number as something special
+syn match msmessagesOctal display contained "\<0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=msmessagesOctalZero
+syn match msmessagesOctalZero display contained "\<0"
+" flag an octal number with wrong digits
+syn match msmessagesOctalError display contained "\<0\o*[89]\d*"
+syn match msmessagesFloat display contained "\d\+f"
+"floating point number, with dot, optional exponent
+syn match msmessagesFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+"floating point number, starting with a dot, optional exponent
+syn match msmessagesFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"floating point number, without dot, with exponent
+syn match msmessagesFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
+"hexadecimal floating point number, optional leading digits, with dot, with exponent
+syn match msmessagesFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
+"hexadecimal floating point number, with leading digits, optional dot, with exponent
+syn match msmessagesFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
+
+" Types (used in MessageIdTypedef statement)
+syn case match
+syn keyword msmessagesType int long short char
+syn keyword msmessagesType signed unsigned
+syn keyword msmessagesType size_t ssize_t sig_atomic_t
+syn keyword msmessagesType int8_t int16_t int32_t int64_t
+syn keyword msmessagesType uint8_t uint16_t uint32_t uint64_t
+syn keyword msmessagesType int_least8_t int_least16_t int_least32_t int_least64_t
+syn keyword msmessagesType uint_least8_t uint_least16_t uint_least32_t uint_least64_t
+syn keyword msmessagesType int_fast8_t int_fast16_t int_fast32_t int_fast64_t
+syn keyword msmessagesType uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
+syn keyword msmessagesType intptr_t uintptr_t
+syn keyword msmessagesType intmax_t uintmax_t
+" Add some Windows datatypes that will be common in msmessages files
+syn keyword msmessagesType BYTE CHAR SHORT SIZE_T SSIZE_T TBYTE TCHAR UCHAR USHORT
+syn keyword msmessagesType DWORD DWORDLONG DWORD32 DWORD64
+syn keyword msmessagesType INT INT32 INT64 UINT UINT32 UINT64
+syn keyword msmessagesType LONG LONGLONG LONG32 LONG64
+syn keyword msmessagesType ULONG ULONGLONG ULONG32 ULONG64
+
+" Sync to language entries, since they should be most common
+syn sync match msmessagesLangSync grouphere msmessagesLangEntry "\<Language\s*="
+syn sync match msmessagesLangEndSync grouphere NONE "^\."
+
+" Define the default highlighting.
+hi def link msmessagesNumber Number
+hi def link msmessagesOctal Number
+hi def link msmessagesFloat Float
+hi def link msmessagesOctalError msmessagesError
+hi def link msmessagesSetError msmessagesError
+hi def link msmessagesError Error
+hi def link msmessagesLangEntry String
+hi def link msmessagesLangEntryEnd Special
+hi def link msmessagesComment Comment
+hi def link msmessagesFormat msmessagesSpecial
+hi def link msmessagesSpecial SpecialChar
+
+hi def link msmessagesType Type
+hi def link msmessagesIdentifier Identifier
+hi def link msmessagesLanguage msmessagesIdentifier
+hi def link msmessagesName msmessagesIdentifier
+hi def link msmessagesNameDef Macro
+hi def link msmessagesIdentDef Macro
+hi def link msmessagesValSep Special
+hi def link msmessagesNameErr Error
+
+let b:current_syntax = "msmessages"
+
+" vim: ts=8
diff --git a/runtime/syntax/netrw.vim b/runtime/syntax/netrw.vim
index e2baac888..62dab3feb 100644
--- a/runtime/syntax/netrw.vim
+++ b/runtime/syntax/netrw.vim
@@ -1,7 +1,7 @@
" Language : Netrw Remote-Directory Listing Syntax
" Maintainer : Charles E. Campbell, Jr.
-" Last change: Nov 27, 2006
-" Version : 9
+" Last change: Feb 06, 2008
+" Version : 12
" ---------------------------------------------------------------------
" Syntax Clearing: {{{1
@@ -13,40 +13,59 @@ endif
" ---------------------------------------------------------------------
" Directory List Syntax Highlighting: {{{1
-syn cluster NetrwGroup contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion
+syn cluster NetrwGroup contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion,netrwCopyTgt
+syn cluster NetrwTreeGroup contains=netrwDir,netrwSymLink,netrwExe
-syn match netrwSpecial "\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify
-syn match netrwDir "\.\{1,2}/" contains=netrwClassify
-syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify
-syn match netrwDir "^\S*/" contains=netrwClassify
-syn match netrwSizeDate "\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s" contains=netrwDateSep skipwhite nextgroup=netrwTime
-syn match netrwSymLink "\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)" contains=netrwClassify
-syn match netrwExe "\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify,netrwTreeIgnore
-syn match netrwTreeIgnore contained "^\%(| \)*"
+syn match netrwSpecial "\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify
+syn match netrwDir "\.\{1,2}/" contains=netrwClassify
+syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify
+syn match netrwSizeDate "\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s" contains=netrwDateSep skipwhite nextgroup=netrwTime
+syn match netrwSymLink "\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)" contains=netrwClassify
+syn match netrwExe "\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify
+syn match netrwTreeBar "^\%(| \)*" contains=netrwTreeBarSpace nextgroup=@netrwTreeGroup
+syn match netrwTreeBarSpace " " contained
syn match netrwClassify "[*=|@/]\ze\%(\s\{2,}\|$\)" contained
syn match netrwDateSep "/" contained
-syn match netrwTime "\d\{1,2}:\d\{2}:\d\{2}" contained contains=netrwTimeSep
+syn match netrwTime "\d\{1,2}:\d\{2}:\d\{2}" contained contains=netrwTimeSep
syn match netrwTimeSep ":"
-syn match netrwComment '".*\%(\t\|$\)' contains=@NetrwGroup
+syn match netrwComment '".*\%(\t\|$\)' contains=@NetrwGroup
syn match netrwHide '^"\s*\(Hid\|Show\)ing:' skipwhite nextgroup=netrwHidePat
syn match netrwSlash "/" contained
syn match netrwHidePat "[^,]\+" contained skipwhite nextgroup=netrwHideSep
syn match netrwHideSep "," contained transparent skipwhite nextgroup=netrwHidePat
syn match netrwSortBy "Sorted by" contained transparent skipwhite nextgroup=netrwList
syn match netrwSortSeq "Sort sequence:" contained transparent skipwhite nextgroup=netrwList
-syn match netrwList ".*$" contained contains=netrwComma
+syn match netrwCopyTgt "Copy/Move Tgt:" contained transparent skipwhite nextgroup=netrwList
+syn match netrwList ".*$" contained contains=netrwComma
syn match netrwComma "," contained
-syn region netrwQuickHelp matchgroup=Comment start="Quick Help:\s\+" end="$" contains=netrwHelpCmd keepend contained
+syn region netrwQuickHelp matchgroup=Comment start="Quick Help:\s\+" end="$" contains=netrwHelpCmd keepend contained
syn match netrwHelpCmd "\S\ze:" contained skipwhite nextgroup=netrwCmdSep
syn match netrwCmdSep ":" contained nextgroup=netrwCmdNote
syn match netrwCmdNote ".\{-}\ze " contained
syn match netrwVersion "(netrw.*)" contained
+" -----------------------------
+" Special filetype highlighting {{{1
+" -----------------------------
+if exists("g:netrw_special_syntax") && netrw_special_syntax
+ syn match netrwBak "\(\S\+ \)*\S\+\.bak\>" contains=netrwTreeBar
+ syn match netrwCompress "\(\S\+ \)*\S\+\.\%(gz\|bz2\|Z\|zip\)\>" contains=netrwTreeBar
+ syn match netrwData "\(\S\+ \)*\S\+\.dat\>" contains=netrwTreeBar
+ syn match netrwHdr "\(\S\+ \)*\S\+\.h\>" contains=netrwTreeBar
+ syn match netrwLib "\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>" contains=netrwTreeBar
+ syn match netrwMakeFile "\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>" contains=netrwTreeBar
+ syn match netrwObj "\(\S\+ \)*\S*\.\%(o\|obj\)\>" contains=netrwTreeBar
+ syn match netrwTags "\<tags\>" contains=netrwTreeBar
+ syn match netrwTags "\<\(ANmenu\|ANtags\)\>" contains=netrwTreeBar
+ syn match netrwTilde "\(\S\+ \)*\S\+\~\>" contains=netrwTreeBar
+ syn match netrwTmp "\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>" contains=netrwTreeBar
+endif
+
" ---------------------------------------------------------------------
" Highlighting Links: {{{1
-if !exists("did_drchip_dbg_syntax")
+if !exists("did_drchip_netrwlist_syntax")
let did_drchip_netrwlist_syntax= 1
hi link netrwClassify Function
hi link netrwCmdSep Delimiter
@@ -56,13 +75,26 @@ if !exists("did_drchip_dbg_syntax")
hi link netrwHidePat Statement
hi link netrwList Statement
hi link netrwVersion Identifier
- hi link netrwSymLink Special
+ hi link netrwSymLink Question
hi link netrwExe PreProc
hi link netrwDateSep Delimiter
+ hi link netrwTreeBar Special
hi link netrwTimeSep netrwDateSep
hi link netrwComma netrwComment
hi link netrwHide netrwComment
+ hi link netrwMarkFile Identifier
+
+ " special syntax highlighting (see :he g:netrw_special_syntax)
+ hi link netrwBak NonText
+ hi link netrwCompress Folded
+ hi link netrwData DiffChange
+ hi link netrwLib DiffChange
+ hi link netrwMakefile DiffChange
+ hi link netrwObj Folded
+ hi link netrwTilde Folded
+ hi link netrwTmp Folded
+ hi link netrwTags Folded
endif
" Current Syntax: {{{1
diff --git a/runtime/syntax/pdf.vim b/runtime/syntax/pdf.vim
new file mode 100644
index 000000000..86d80daa6
--- /dev/null
+++ b/runtime/syntax/pdf.vim
@@ -0,0 +1,73 @@
+" Vim syntax file
+" Language: PDF
+" Maintainer: Tim Pope <vimNOSPAM@tpope.info>
+" Last Change: 2007 Dec 16
+
+if exists("b:current_syntax")
+ finish
+endif
+
+if !exists("main_syntax")
+ let main_syntax = 'pdf'
+endif
+
+syn include @pdfXML syntax/xml.vim
+
+syn case match
+
+syn cluster pdfObjects contains=pdfBoolean,pdfConstant,pdfNumber,pdfFloat,pdfName,pdfHexString,pdfString,pdfArray,pdfHash,pdfReference,pdfComment
+syn keyword pdfBoolean true false contained
+syn keyword pdfConstant null contained
+syn match pdfNumber "[+-]\=\<\d\+\>"
+syn match pdfFloat "[+-]\=\<\%(\d\+\.\|\d*\.\d\+\)\>" contained
+
+syn match pdfNameError "#\X\|#\x\X\|#00" contained containedin=pdfName
+syn match pdfSpecialChar "#\x\x" contained containedin=pdfName
+syn match pdfName "/[^[:space:]\[\](){}<>/]*" contained
+syn match pdfHexError "[^[:space:][:xdigit:]<>]" contained
+"syn match pdfHexString "<\s*\x[^<>]*\x\s*>" contained contains=pdfHexError
+"syn match pdfHexString "<\s*\x\=\s*>" contained
+syn region pdfHexString matchgroup=pdfDelimiter start="<<\@!" end=">" contained contains=pdfHexError
+syn match pdfStringError "\\." contained containedin=pdfString
+syn match pdfSpecialChar "\\\%(\o\{1,3\}\|[nrtbf()\\]\)" contained containedin=pdfString
+syn region pdfString matchgroup=pdfDelimiter start="\\\@<!(" end="\\\@<!)" contains=pdfString
+
+syn region pdfArray matchgroup=pdfOperator start="\[" end="\]" contains=@pdfObjects contained
+syn region pdfHash matchgroup=pdfOperator start="<<" end=">>" contains=@pdfObjects contained
+syn match pdfReference "\<\d\+\s\+\d\+\s\+R\>"
+"syn keyword pdfOperator R contained containedin=pdfReference
+
+syn region pdfObject matchgroup=pdfType start="\<obj\>" end="\<endobj\>" contains=@pdfObjects
+syn region pdfObject matchgroup=pdfType start="\<obj\r\=\n" end="\<endobj\>" contains=@pdfObjects fold
+
+" Do these twice. The ones with only newlines are foldable
+syn region pdfStream matchgroup=pdfType start="\<stream\r\=\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject
+syn region pdfXMLStream matchgroup=pdfType start="\<stream\r\=\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML
+syn region pdfStream matchgroup=pdfType start="\<stream\n" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject fold
+syn region pdfXMLStream matchgroup=pdfType start="\<stream\n\_s*\%(<?\)\@=" end="endstream\s*\%(\r\|\n\|\r\n\)" contained containedin=pdfObject contains=@pdfXML fold
+
+syn region pdfPreProc start="\<xref\%(\r\|\n\|\r\n\)" end="^trailer\%(\r\|\n\|\r\n\)" skipwhite skipempty nextgroup=pdfHash contains=pdfNumber fold
+syn keyword pdfPreProc startxref
+syn match pdfComment "%.*\%(\r\|\n\)" contains=pdfPreProc
+syn match pdfPreProc "^%\%(%EOF\|PDF-\d\.\d\)\(\r\|\n\)"
+
+hi def link pdfOperator Operator
+hi def link pdfNumber Number
+hi def link pdfFloat Float
+hi def link pdfBoolean Boolean
+hi def link pdfConstant Constant
+hi def link pdfName Identifier
+hi def link pdfNameError pdfStringError
+hi def link pdfHexString pdfString
+hi def link pdfHexError pdfStringError
+hi def link pdfString String
+hi def link pdfStringError Error
+hi def link pdfSpecialChar SpecialChar
+hi def link pdfDelimiter Delimiter
+hi def link pdfType Type
+hi def link pdfReference Tag
+hi def link pdfStream NonText
+hi def link pdfPreProc PreProc
+hi def link pdfComment Comment
+
+let b:current_syntax = "pdf"
diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim
index 42a88f475..f68d7f4da 100644
--- a/runtime/syntax/ruby.vim
+++ b/runtime/syntax/ruby.vim
@@ -321,4 +321,4 @@ hi def link rubySpaceError rubyError
let b:current_syntax = "ruby"
-" vim: nowrap sw=2 sts=2 ts=8 noet ff=unix:
+" vim: nowrap sw=2 sts=2 ts=8 noet :
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim
index 93d4187f3..6f6927f67 100644
--- a/runtime/syntax/scheme.vim
+++ b/runtime/syntax/scheme.vim
@@ -1,6 +1,6 @@
" Vim syntax file
" Language: Scheme (R5RS)
-" Last Change: Nov 28, 2004
+" Last Change: 2007 Jun 16
" Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
" Original author: Dirk van Deun <dirk@igwe.vub.ac.be>
@@ -265,6 +265,9 @@ if exists("b:is_chicken") || exists("is_chicken")
syn region ChickenC matchgroup=schemeComment start=+#>%+ end=+<#+ contains=@ChickenC
endif
+ " suggested by Alex Queiroz
+ syn match schemeExtSyntax oneline "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+ syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+
endif
" Synchronization and the wrapping up...
diff --git a/runtime/syntax/tcsh.vim b/runtime/syntax/tcsh.vim
index 83649a751..94c4181c3 100644
--- a/runtime/syntax/tcsh.vim
+++ b/runtime/syntax/tcsh.vim
@@ -1,7 +1,6 @@
-" Vim syntax file
-" Language: C-shell (tcsh)
-" Maintainer: Gautam Iyer <gi1242@users.sourceforge.net>
-" Last Modified: Thu 16 Nov 2006 01:07:04 PM PST
+" tcsh.vim: Vim syntax file for tcsh scripts
+" Maintainer: Gautam Iyer <gi1242@users.sourceforge.net>
+" Modified: Sat 16 Jun 2007 04:52:12 PM PDT
"
" Description: We break up each statement into a "command" and an "end" part.
" All groups are either a "command" or part of the "end" of a statement (ie
@@ -13,64 +12,118 @@
" causes history to come up as a keyword, which we want to avoid.
" Quit when a syntax file was already loaded
-if exists("b:current_syntax")
+if exists('b:current_syntax')
finish
endif
+let s:oldcpo = &cpo
+set cpo&vim " Line continuation is used
+
+setlocal iskeyword+=-
+
syn case match
" ----- Clusters -----
syn cluster tcshModifiers contains=tcshModifier,tcshModifierError
syn cluster tcshQuoteList contains=tcshDQuote,tcshSQuote,tcshBQuote
-syn cluster tcshStatementEnds contains=@tcshQuoteList,tcshComment,tcshUsrVar,TcshArgv,tcshSubst,tcshRedir,tcshMeta,tcshHereDoc,tcshSpecial,tcshArguement
-syn cluster tcshStatements contains=tcshBuiltins,tcshCommands,tcshSet,tcshSetEnv,tcshAlias,tcshIf,tcshWhile
+syn cluster tcshStatementEnds contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshRedir,tcshMeta,tcshHereDoc,tcshSpecial,tcshArguement
+syn cluster tcshStatements contains=tcshBuiltin,tcshCommands,tcshIf,tcshWhile
syn cluster tcshVarList contains=tcshUsrVar,tcshArgv,tcshSubst
+syn cluster tcshConditions contains=tcshCmdSubst,tcshParenExpr,tcshOperator,tcshNumber,@tcshVarList
+
+" ----- Errors -----
+" Define first, so can be easily overridden.
+syn match tcshError contained '\v\S.+'
" ----- Statements -----
" Tcsh commands: Any filename / modifiable variable (must be first!)
syn match tcshCommands '\v[a-zA-Z0-9\\./_$:-]+' contains=tcshSpecial,tcshUsrVar,tcshArgv,tcshVarError nextgroup=tcshStatementEnd
-" Builtin commands except (un)set(env), (un)alias, if, while, else
-syn keyword tcshBuiltins nextgroup=tcshStatementEnd alloc bg bindkey break breaksw builtins bye case cd chdir complete continue default dirs echo echotc end endif endsw eval exec exit fg filetest foreach getspath getxvers glob goto hashstat history hup inlib jobs kill limit log login logout ls ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat rootnode sched setpath setspath settc setty setxvers shift source stop suspend switch telltc time umask uncomplete unhash universe unlimit ver wait warp watchlog where which
+" Builtin commands except those treated specially. Currently (un)set(env),
+" (un)alias, if, while, else, bindkey
+syn keyword tcshBuiltin nextgroup=tcshStatementEnd alloc bg break breaksw builtins bye case cd chdir complete continue default dirs echo echotc end endif endsw eval exec exit fg filetest foreach getspath getxvers glob goto hashstat history hup inlib jobs kill limit log login logout ls ls-F migrate newgrp nice nohup notify onintr popd printenv pushd rehash repeat rootnode sched setpath setspath settc setty setxvers shift source stop suspend switch telltc time umask uncomplete unhash universe unlimit ver wait warp watchlog where which
-" StatementEnd is anything after a builtin / command till the lexical end of a
+" StatementEnd is anything after a built-in / command till the lexical end of a
" statement (;, |, ||, |&, && or end of line)
-syn region tcshStatementEnd transparent contained matchgroup=tcshBuiltins start='' end='\v\\@<!(;|\|[|&]?|\&\&|$)' contains=@tcshStatementEnds
+syn region tcshStatementEnd transparent contained matchgroup=tcshBuiltin start='' end='\v\\@<!(;|\|[|&]?|\&\&|$)' contains=@tcshStatementEnds
" set expressions (Contains shell variables)
syn keyword tcshShellVar contained afsuser ampm argv autocorrect autoexpand autolist autologout backslash_quote catalog cdpath color colorcat command complete continue continue_args correct cwd dextract dirsfile dirstack dspmbyte dunique echo echo_style edit ellipsis fignore filec gid group histchars histdup histfile histlit history home ignoreeof implicitcd inputmode killdup killring listflags listjobs listlinks listmax listmaxrows loginsh logout mail matchbeep nobeep noclobber noding noglob nokanji nonomatch nostat notify oid owd path printexitvalue prompt prompt2 prompt3 promptchars pushdtohome pushdsilent recexact recognize_only_executables rmstar rprompt savedirs savehist sched shell shlvl status symlinks tcsh term time tperiod tty uid user verbose version visiblebell watch who wordchars
-syn keyword tcshSet nextgroup=tcshSetEnd set unset
-syn region tcshSetEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshShellVar,@tcshStatementEnds
+syn keyword tcshBuiltin nextgroup=tcshSetEnd set unset
+syn region tcshSetEnd contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=tcshShellVar,@tcshStatementEnds
-" setenv expressions (Contains enviorenment variables)
+" setenv expressions (Contains environment variables)
syn keyword tcshEnvVar contained AFSUSER COLUMNS DISPLAY EDITOR GROUP HOME HOST HOSTTYPE HPATH LANG LC_CTYPE LINES LS_COLORS MACHTYPE NOREBIND OSTYPE PATH PWD REMOTEHOST SHLVL SYSTYPE TERM TERMCAP USER VENDOR VISUAL
-syn keyword tcshSetEnv nextgroup=tcshEnvEnd setenv unsetenv
-syn region tcshEnvEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshEnvVar,@tcshStatementEnds
+syn keyword tcshBuiltin nextgroup=tcshEnvEnd setenv unsetenv
+syn region tcshEnvEnd contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=tcshEnvVar,@tcshStatementEnds
" alias and unalias (contains special aliases)
syn keyword tcshAliases contained beepcmd cwdcmd jobcmd helpcommand periodic precmd postcmd shell
-syn keyword tcshAlias nextgroup=tcshAliCmd skipwhite alias unalias
+syn keyword tcshBuiltin nextgroup=tcshAliCmd skipwhite alias unalias
syn match tcshAliCmd contained nextgroup=tcshAliEnd skipwhite '\v[\w-]+' contains=tcshAliases
-syn region tcshAliEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=@tcshStatementEnds
+syn region tcshAliEnd contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=@tcshStatementEnds
-" if statements (contains expressions / operators)
-syn keyword tcshIf nextgroup=tcshIfEnd if
-syn region tcshIfEnd contained matchgroup=tcshBuiltins start='' skip="\\$" end="\v<then>|$" contains=tcshOperator,tcshNumber,@tcshStatementEnds
+" if statements
+syn keyword tcshIf nextgroup=tcshIfEnd skipwhite if
+syn region tcshIfEnd contained start='\S' skip='\\$' matchgroup=tcshBuiltin end='\v<then>|$' contains=@tcshConditions,tcshSpecial,@tcshStatementEnds
+syn region tcshIfEnd contained matchgroup=tcshBuiltin contains=@tcshConditions,tcshSpecial start='(' end='\v\)%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds
+syn region tcshIfEnd contained matchgroup=tcshBuiltin contains=tcshCommands,tcshSpecial start='\v\{\s+' end='\v\s+\}%(\s+then>)?' skipwhite nextgroup=@tcshStatementEnds keepend
-" else statements (nextgroup if)
-syn keyword tcshElse nextgroup=tcshIf skipwhite else
+" else statements
+syn keyword tcshBuiltin nextgroup=tcshIf skipwhite else
" while statements (contains expressions / operators)
-syn keyword tcshWhile nextgroup=tcshWhEnd while
-syn region tcshWhEnd contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="\v$" contains=tcshOperator,tcshNumber,@tcshStatementEnds
+syn keyword tcshBuiltin nextgroup=@tcshConditions,tcshSpecial skipwhite while
+
+" Conditions (for if and while)
+syn region tcshParenExpr contained contains=@tcshConditions,tcshSpecial matchgroup=tcshBuiltin start='(' end=')'
+syn region tcshCmdSubst contained contains=tcshCommands matchgroup=tcshBuiltin start='\v\{\s+' end='\v\s+\}' keepend
+
+" Bindkey. Internal editor functions
+syn keyword tcshBindkeyFuncs contained backward-char backward-delete-char
+ \ backward-delete-word backward-kill-line backward-word
+ \ beginning-of-line capitalize-word change-case
+ \ change-till-end-of-line clear-screen complete-word
+ \ complete-word-fwd complete-word-back complete-word-raw
+ \ copy-prev-word copy-region-as-kill dabbrev-expand delete-char
+ \ delete-char-or-eof delete-char-or-list
+ \ delete-char-or-list-or-eof delete-word digit digit-argument
+ \ down-history downcase-word end-of-file end-of-line
+ \ exchange-point-and-mark expand-glob expand-history expand-line
+ \ expand-variables forward-char forward-word
+ \ gosmacs-transpose-chars history-search-backward
+ \ history-search-forward insert-last-word i-search-fwd
+ \ i-search-back keyboard-quit kill-line kill-region
+ \ kill-whole-line list-choices list-choices-raw list-glob
+ \ list-or-eof load-average magic-space newline normalize-path
+ \ normalize-command overwrite-mode prefix-meta quoted-insert
+ \ redisplay run-fg-editor run-help self-insert-command
+ \ sequence-lead-in set-mark-command spell-word spell-line
+ \ stuff-char toggle-literal-history transpose-chars
+ \ transpose-gosling tty-dsusp tty-flush-output tty-sigintr
+ \ tty-sigquit tty-sigtsusp tty-start-output tty-stop-output
+ \ undefined-key universal-argument up-history upcase-word
+ \ vi-beginning-of-next-word vi-add vi-add-at-eol vi-chg-case
+ \ vi-chg-meta vi-chg-to-eol vi-cmd-mode vi-cmd-mode-complete
+ \ vi-delprev vi-delmeta vi-endword vi-eword vi-char-back
+ \ vi-char-fwd vi-charto-back vi-charto-fwd vi-insert
+ \ vi-insert-at-bol vi-repeat-char-fwd vi-repeat-char-back
+ \ vi-repeat-search-fwd vi-repeat-search-back vi-replace-char
+ \ vi-replace-mode vi-search-back vi-search-fwd vi-substitute-char
+ \ vi-substitute-line vi-word-back vi-word-fwd vi-undo vi-zero
+ \ which-command yank yank-pop e_copy_to_clipboard
+ \ e_paste_from_clipboard e_dosify_next e_dosify_prev e_page_up
+ \ e_page_down
+syn keyword tcshBuiltin nextgroup=tcshBindkeyEnd bindkey
+syn region tcshBindkeyEnd contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$' contains=@tcshQuoteList,tcshComment,@tcshVarList,tcshMeta,tcshSpecial,tcshArguement,tcshBindkeyFuncs
" Expressions start with @.
-syn match tcshExprStart "\v\@\s+" nextgroup=tcshExprVar
-syn match tcshExprVar contained "\v\h\w*%(\[\d+\])?" contains=tcshShellVar,tcshEnvVar nextgroup=tcshExprOp
-syn match tcshExprOp contained "++\|--"
-syn match tcshExprOp contained "\v\s*\=" nextgroup=tcshExprEnd
-syn match tcshExprEnd contained "\v.*$"hs=e+1 contains=tcshOperator,tcshNumber,@tcshVarList
-syn match tcshExprEnd contained "\v.{-};"hs=e contains=tcshOperator,tcshNumber,@tcshVarList
+syn match tcshExprStart '\v\@\s+' nextgroup=tcshExprVar
+syn match tcshExprVar contained '\v\h\w*%(\[\d+\])?' contains=tcshShellVar,tcshEnvVar nextgroup=tcshExprOp
+syn match tcshExprOp contained '++\|--'
+syn match tcshExprOp contained '\v\s*\=' nextgroup=tcshExprEnd
+syn match tcshExprEnd contained '\v.*$'hs=e+1 contains=@tcshConditions
+syn match tcshExprEnd contained '\v.{-};'hs=e contains=@tcshConditions
" ----- Comments: -----
syn match tcshComment '#\s.*' contains=tcshTodo,tcshCommentTi,@Spell
@@ -85,12 +138,12 @@ syn match tcshTodo contained '\v\c<todo>'
" want VIM to assume that no backslash quote constructs exist.
" Backquotes are treated as commands, and are not contained in anything
-if(exists("tcsh_backslash_quote") && tcsh_backslash_quote == 0)
- syn region tcshSQuote keepend contained start="\v\\@<!'" end="'" contains=@Spell
+if(exists('tcsh_backslash_quote') && tcsh_backslash_quote == 0)
+ syn region tcshSQuote keepend contained start="\v\\@<!'" end="'"
syn region tcshDQuote keepend contained start='\v\\@<!"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
syn region tcshBQuote keepend start='\v\\@<!`' end='`' contains=@tcshStatements
else
- syn region tcshSQuote contained start="\v\\@<!'" skip="\v\\\\|\\'" end="'" contains=@Spell
+ syn region tcshSQuote contained start="\v\\@<!'" skip="\v\\\\|\\'" end="'"
syn region tcshDQuote contained start='\v\\@<!"' end='"' contains=@tcshVarList,tcshSpecial,@Spell
syn region tcshBQuote keepend matchgroup=tcshBQuoteGrp start='\v\\@<!`' skip='\v\\\\|\\`' end='`' contains=@tcshStatements
endif
@@ -101,17 +154,17 @@ endif
syn match tcshVarError '\v\$\S*' contained
" Modifiable Variables without {}.
-syn match tcshUsrVar contained "\v\$\h\w*%(\[\d+%(-\d+)?\])?" nextgroup=@tcshModifiers contains=tcshShellVar,tcshEnvVar
-syn match tcshArgv contained "\v\$%(\d+|\*)" nextgroup=@tcshModifiers
+syn match tcshUsrVar contained '\v\$\h\w*%(\[\d+%(-\d+)?\])?' nextgroup=@tcshModifiers contains=tcshShellVar,tcshEnvVar
+syn match tcshArgv contained '\v\$%(\d+|\*)' nextgroup=@tcshModifiers
" Modifiable Variables with {}.
-syn match tcshUsrVar contained "\v\$\{\h\w*%(\[\d+%(-\d+)?\])?%(:\S*)?\}" contains=@tcshModifiers,tcshShellVar,tcshEnvVar
-syn match tcshArgv contained "\v\$\{%(\d+|\*)%(:\S*)?\}" contains=@tcshModifiers
+syn match tcshUsrVar contained '\v\$\{\h\w*%(\[\d+%(-\d+)?\])?%(:\S*)?\}' contains=@tcshModifiers,tcshShellVar,tcshEnvVar
+syn match tcshArgv contained '\v\$\{%(\d+|\*)%(:\S*)?\}' contains=@tcshModifiers
-" UnModifiable Substitutions. Order is important here.
-syn match tcshSubst contained "\v\$[?#$!_<]" nextgroup=tcshModifierError
-syn match tcshSubst contained "\v\$[%#?]%(\h\w*|\d+)" nextgroup=tcshModifierError contains=tcshShellVar,tcshEnvVar
-syn match tcshSubst contained "\v\$\{[%#?]%(\h\w*|\d+)%(:\S*)?\}" contains=tcshModifierError contains=tcshShellVar,tcshEnvVar
+" Un-modifiable Substitutions. Order is important here.
+syn match tcshSubst contained '\v\$[?#$!_<]' nextgroup=tcshModifierError
+syn match tcshSubst contained '\v\$[%#?]%(\h\w*|\d+)' nextgroup=tcshModifierError contains=tcshShellVar,tcshEnvVar
+syn match tcshSubst contained '\v\$\{[%#?]%(\h\w*|\d+)%(:\S*)?\}' contains=tcshModifierError contains=tcshShellVar,tcshEnvVar
" Variable Name Expansion Modifiers (order important)
syn match tcshModifierError contained '\v:\S*'
@@ -119,61 +172,60 @@ syn match tcshModifier contained '\v:[ag]?[htreuls&qx]' nextgroup=@tcshModifier
" ----- Operators / Specials -----
" Standard redirects (except <<) [<, >, >>, >>&, >>!, >>&!]
-syn match tcshRedir contained "\v\<|\>\>?\&?!?"
+syn match tcshRedir contained '\v\<|\>\>?\&?!?'
-" Metachars
-syn match tcshMeta contained "\v[]{}*?[]"
+" Meta-chars
+syn match tcshMeta contained '\v[]{}*?[]'
-" Here Documents (<<)
-syn region tcshHereDoc contained matchgroup=tcshRedir start="\v\<\<\s*\z(\h\w*)" end="^\z1$" contains=@tcshVarList,tcshSpecial
-syn region tcshHereDoc contained matchgroup=tcshRedir start="\v\<\<\s*'\z(\h\w*)'" start='\v\<\<\s*"\z(\h\w*)"$' start="\v\<\<\s*\\\z(\h\w*)$" end="^\z1$"
+" Here documents (<<)
+syn region tcshHereDoc contained matchgroup=tcshShellVar start='\v\<\<\s*\z(\h\w*)' end='^\z1$' contains=@tcshVarList,tcshSpecial
+syn region tcshHereDoc contained matchgroup=tcshShellVar start="\v\<\<\s*'\z(\h\w*)'" start='\v\<\<\s*"\z(\h\w*)"$' start='\v\<\<\s*\\\z(\h\w*)$' end='^\z1$'
" Operators
-syn match tcshOperator contained "&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||"
-syn match tcshOperator contained "[(){}]"
+syn match tcshOperator contained '&&\|!\~\|!=\|<<\|<=\|==\|=\~\|>=\|>>\|\*\|\^\|\~\|||\|!\|%\|&\|+\|-\|/\|<\|>\||'
+"syn match tcshOperator contained '[(){}]'
" Numbers
-syn match tcshNumber contained "\v<-?\d+>"
+syn match tcshNumber contained '\v<-?\d+>'
-" Arguements
-syn match tcshArguement contained "\v\s@<=-(\w|-)*"
+" Arguments
+syn match tcshArguement contained '\v\s@<=-(\w|-)*'
-" Special charectors
-syn match tcshSpecial contained "\v\\@<!\\(\d{3}|.)"
+" Special characters. \xxx, or backslashed characters.
+"syn match tcshSpecial contained '\v\\@<!\\(\d{3}|.)'
+syn match tcshSpecial contained '\v\\%([0-7]{3}|.)'
-" ----- Syncronising -----
-if exists("tcsh_minlines")
- exec "syn sync minlines=" . tcsh_minlines
+" ----- Synchronising -----
+if exists('tcsh_minlines')
+ exec 'syn sync minlines=' . tcsh_minlines
else
- syn sync minlines=15 " Except 'here' documents, nothing is long
+ syn sync minlines=100 " Some completions can be quite long
endif
" Define highlighting of syntax groups
-hi def link tcshBuiltins statement
-hi def link tcshShellVar preproc
+hi def link tcshError Error
+hi def link tcshBuiltin Statement
+hi def link tcshShellVar Preproc
hi def link tcshEnvVar tcshShellVar
hi def link tcshAliases tcshShellVar
-hi def link tcshAliCmd identifier
-hi def link tcshCommands identifier
-hi def link tcshSet tcshBuiltins
-hi def link tcshSetEnv tcshBuiltins
-hi def link tcshAlias tcshBuiltins
-hi def link tcshIf tcshBuiltins
-hi def link tcshElse tcshBuiltins
-hi def link tcshWhile tcshBuiltins
-hi def link tcshExprStart tcshBuiltins
+hi def link tcshAliCmd Identifier
+hi def link tcshCommands Identifier
+hi def link tcshIf tcshBuiltin
+hi def link tcshWhile tcshBuiltin
+hi def link tcshBindkeyFuncs Function
+hi def link tcshExprStart tcshBuiltin
hi def link tcshExprVar tcshUsrVar
hi def link tcshExprOp tcshOperator
hi def link tcshExprEnd tcshOperator
-hi def link tcshComment comment
-hi def link tcshCommentTi preproc
+hi def link tcshComment Comment
+hi def link tcshCommentTi Preproc
hi def link tcshSharpBang tcshCommentTi
-hi def link tcshTodo todo
-hi def link tcshSQuote constant
+hi def link tcshTodo Todo
+hi def link tcshSQuote Constant
hi def link tcshDQuote tcshSQuote
-hi def link tcshBQuoteGrp include
-hi def link tcshVarError error
-hi def link tcshUsrVar type
+hi def link tcshBQuoteGrp Include
+hi def link tcshVarError Error
+hi def link tcshUsrVar Type
hi def link tcshArgv tcshUsrVar
hi def link tcshSubst tcshUsrVar
hi def link tcshModifier tcshArguement
@@ -181,9 +233,12 @@ hi def link tcshModifierError tcshVarError
hi def link tcshMeta tcshSubst
hi def link tcshRedir tcshOperator
hi def link tcshHereDoc tcshSQuote
-hi def link tcshOperator operator
-hi def link tcshNumber number
-hi def link tcshArguement special
-hi def link tcshSpecial specialchar
+hi def link tcshOperator Operator
+hi def link tcshNumber Number
+hi def link tcshArguement Special
+hi def link tcshSpecial SpecialChar
+
+let &cpo = s:oldcpo
+unlet s:oldcpo
-let b:current_syntax = "tcsh"
+let b:current_syntax = 'tcsh'
diff --git a/runtime/tutor/README_ami.txt b/runtime/tutor/README_ami.txt
new file mode 100644
index 000000000..13fa67d62
--- /dev/null
+++ b/runtime/tutor/README_ami.txt
@@ -0,0 +1,32 @@
+README_ami.txt for version 7.2a of Vim: Vi IMproved.
+
+This file explains the installation of Vim on Amiga systems.
+See README.txt for general information about Vim.
+
+
+Unpack the distributed files in the place where you want to keep them. It is
+wise to have a "vim" directory to keep your vimrc file and any other files you
+change. The distributed files go into a subdirectory. This way you can
+easily upgrade to a new version. For example:
+
+ dh0:editors/vim contains your vimrc and modified files
+ dh0:editors/vim/vim54 contains the Vim version 5.4 distributed files
+ dh0:editors/vim/vim55 contains the Vim version 5.5 distributed files
+
+You would then unpack the archives like this:
+
+ cd dh0:editors
+ tar xf t:vim60bin.tar
+ tar xf t:vim60rt.tar
+
+Set the $VIM environment variable to point to the top directory of your Vim
+files. For the above example:
+
+ set VIM=dh0:editors/vim
+
+Vim version 5.4 will look for your vimrc file in $VIM, and for the runtime
+files in $VIM/vim54. See ":help $VIM" for more information.
+
+Make sure the Vim executable is in your search path. Either copy the Vim
+executable to a directory that is in your search path, or (preferred) modify
+the search path to include the directory where the Vim executable is.
diff --git a/runtime/tutor/runtime/delmenu.vim b/runtime/tutor/runtime/delmenu.vim
new file mode 100644
index 000000000..81df87d34
--- /dev/null
+++ b/runtime/tutor/runtime/delmenu.vim
@@ -0,0 +1,25 @@
+" This Vim script deletes all the menus, so that they can be redefined.
+" Warning: This also deletes all menus defined by the user!
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 May 27
+
+aunmenu *
+
+silent! unlet did_install_default_menus
+silent! unlet did_install_syntax_menu
+if exists("did_menu_trans")
+ menutrans clear
+ unlet did_menu_trans
+endif
+
+silent! unlet find_help_dialog
+
+silent! unlet menutrans_help_dialog
+silent! unlet menutrans_path_dialog
+silent! unlet menutrans_tags_dialog
+silent! unlet menutrans_textwidth_dialog
+silent! unlet menutrans_fileformat_dialog
+silent! unlet menutrans_no_file
+
+" vim: set sw=2 :
diff --git a/runtime/tutor/runtime/macmap.vim b/runtime/tutor/runtime/macmap.vim
new file mode 100644
index 000000000..dc76f15f9
--- /dev/null
+++ b/runtime/tutor/runtime/macmap.vim
@@ -0,0 +1,75 @@
+" System gvimrc file for Mac OS X
+" Author: Benji Fisher <benji@member.AMS.org>
+" Last Change: Thu Mar 09 09:00 AM 2006 EST
+"
+" Define Mac-standard keyboard shortcuts.
+
+" We don't change 'cpoptions' here, because it would not be set properly when
+" a .vimrc file is found later. Thus don't use line continuation and use
+" <special> in mappings.
+
+nnoremap <special> <D-n> :confirm enew<CR>
+vmap <special> <D-n> <Esc><D-n>gv
+imap <special> <D-n> <C-O><D-n>
+cmap <special> <D-n> <C-C><D-n>
+omap <special> <D-n> <Esc><D-n>
+
+nnoremap <special> <D-o> :browse confirm e<CR>
+vmap <special> <D-o> <Esc><D-o>gv
+imap <special> <D-o> <C-O><D-o>
+cmap <special> <D-o> <C-C><D-o>
+omap <special> <D-o> <Esc><D-o>
+
+nnoremap <silent> <special> <D-w> :if winheight(2) < 0 <Bar> confirm enew <Bar> else <Bar> confirm close <Bar> endif<CR>
+vmap <special> <D-w> <Esc><D-w>gv
+imap <special> <D-w> <C-O><D-w>
+cmap <special> <D-w> <C-C><D-w>
+omap <special> <D-w> <Esc><D-w>
+
+nnoremap <silent> <special> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar> else<Bar>confirm w<Bar>endif<CR>
+vmap <special> <D-s> <Esc><D-s>gv
+imap <special> <D-s> <C-O><D-s>
+cmap <special> <D-s> <C-C><D-s>
+omap <special> <D-s> <Esc><D-s>
+
+nnoremap <special> <D-S-s> :browse confirm saveas<CR>
+vmap <special> <D-S-s> <Esc><D-s>gv
+imap <special> <D-S-s> <C-O><D-s>
+cmap <special> <D-S-s> <C-C><D-s>
+omap <special> <D-S-s> <Esc><D-s>
+
+" From the Edit menu of SimpleText:
+nnoremap <special> <D-z> u
+vmap <special> <D-z> <Esc><D-z>gv
+imap <special> <D-z> <C-O><D-z>
+cmap <special> <D-z> <C-C><D-z>
+omap <special> <D-z> <Esc><D-z>
+
+vnoremap <special> <D-x> "+x
+
+vnoremap <special> <D-c> "+y
+
+cnoremap <special> <D-c> <C-Y>
+
+nnoremap <special> <D-v> "+gP
+cnoremap <special> <D-v> <C-R>+
+execute 'vnoremap <script> <special> <D-v>' paste#paste_cmd['v']
+execute 'inoremap <script> <special> <D-v>' paste#paste_cmd['i']
+
+nnoremap <silent> <special> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar> else<Bar>exe ":norm ggVG"<Bar>endif<CR>
+vmap <special> <D-a> <Esc><D-a>
+imap <special> <D-a> <Esc><D-a>
+cmap <special> <D-a> <C-C><D-a>
+omap <special> <D-a> <Esc><D-a>
+
+nnoremap <special> <D-f> /
+vmap <special> <D-f> <Esc><D-f>
+imap <special> <D-f> <Esc><D-f>
+cmap <special> <D-f> <C-C><D-f>
+omap <special> <D-f> <Esc><D-f>
+
+nnoremap <special> <D-g> n
+vmap <special> <D-g> <Esc><D-g>
+imap <special> <D-g> <C-O><D-g>
+cmap <special> <D-g> <C-C><D-g>
+omap <special> <D-g> <Esc><D-g>
diff --git a/runtime/tutor/runtime/macros.info b/runtime/tutor/runtime/macros.info
new file mode 100755
index 000000000..bbb0b4f16
--- /dev/null
+++ b/runtime/tutor/runtime/macros.info
Binary files differ
diff --git a/runtime/tutor/runtime/optwin.vim b/runtime/tutor/runtime/optwin.vim
new file mode 100644
index 000000000..7392b53bd
--- /dev/null
+++ b/runtime/tutor/runtime/optwin.vim
@@ -0,0 +1,1312 @@
+" These commands create the option window.
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2008 May 12
+
+" If there already is an option window, jump to that one.
+if bufwinnr("option-window") > 0
+ let s:thiswin = winnr()
+ while 1
+ if @% == "option-window"
+ finish
+ endif
+ exe "norm! \<C-W>w"
+ if s:thiswin == winnr()
+ break
+ endif
+ endwhile
+endif
+
+" Make sure the '<' flag is not included in 'cpoptions', otherwise <CR> would
+" not be recognized. See ":help 'cpoptions'".
+let s:cpo_save = &cpo
+set cpo&vim
+
+" function to be called when <CR> is hit in the option-window
+fun! <SID>CR()
+
+ " If on a continued comment line, go back to the first comment line
+ let lnum = line(".")
+ let line = getline(lnum)
+ while line[0] == "\t"
+ let lnum = lnum - 1
+ let line = getline(lnum)
+ endwhile
+
+ " <CR> on a "set" line executes the option line
+ if match(line, "^ \tset ") >= 0
+
+ " For a local option: go to the previous window
+ " If this is a help window, go to the window below it
+ let thiswin = winnr()
+ let local = <SID>Find(lnum)
+ if local >= 0
+ exe line
+ call <SID>Update(lnum, line, local, thiswin)
+ endif
+
+ " <CR> on a "option" line shows help for that option
+ elseif match(line, "^[a-z]") >= 0
+ let name = substitute(line, '\([^\t]*\).*', '\1', "")
+ exe "help '" . name . "'"
+
+ " <CR> on an index line jumps to the group
+ elseif match(line, '^ \=[0-9]') >= 0
+ exe "norm! /" . line . "\<CR>zt"
+ endif
+endfun
+
+" function to be called when <Space> is hit in the option-window
+fun! <SID>Space()
+
+ let lnum = line(".")
+ let line = getline(lnum)
+
+ " <Space> on a "set" line refreshes the option line
+ if match(line, "^ \tset ") >= 0
+
+ " For a local option: go to the previous window
+ " If this is a help window, go to the window below it
+ let thiswin = winnr()
+ let local = <SID>Find(lnum)
+ if local >= 0
+ call <SID>Update(lnum, line, local, thiswin)
+ endif
+
+ endif
+endfun
+
+" find the window in which the option applies
+" returns 0 for global option, 1 for local option, -1 for error
+fun! <SID>Find(lnum)
+ if getline(a:lnum - 1) =~ "(local to"
+ let local = 1
+ let thiswin = winnr()
+ exe "norm! \<C-W>p"
+ if exists("b:current_syntax") && b:current_syntax == "help"
+ exe "norm! \<C-W>j"
+ if winnr() == thiswin
+ exe "norm! \<C-W>j"
+ endif
+ endif
+ else
+ let local = 0
+ endif
+ if local && (winnr() == thiswin || (exists("b:current_syntax")
+ \ && b:current_syntax == "help"))
+ echo "Don't know in which window"
+ let local = -1
+ endif
+ return local
+endfun
+
+" Update a "set" line in the option window
+fun! <SID>Update(lnum, line, local, thiswin)
+ " get the new value of the option and update the option window line
+ if match(a:line, "=") >= 0
+ let name = substitute(a:line, '^ \tset \([^=]*\)=.*', '\1', "")
+ else
+ let name = substitute(a:line, '^ \tset \(no\)\=\([a-z]*\).*', '\2', "")
+ endif
+ if name == "pt" && &pt =~ "\x80"
+ let val = <SID>PTvalue()
+ else
+ exe "let val = substitute(&" . name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+ endif
+ if a:local
+ exe "norm! " . a:thiswin . "\<C-W>w"
+ endif
+ if match(a:line, "=") >= 0 || (val != "0" && val != "1")
+ call setline(a:lnum, " \tset " . name . "=" . val)
+ else
+ if val
+ call setline(a:lnum, " \tset " . name . "\tno" . name)
+ else
+ call setline(a:lnum, " \tset no" . name . "\t" . name)
+ endif
+ endif
+ set nomodified
+endfun
+
+" Reset 'title' and 'icon' to make it work faster.
+let s:old_title = &title
+let s:old_icon = &icon
+let s:old_sc = &sc
+let s:old_ru = &ru
+set notitle noicon nosc noru
+
+" If the current window is a help window, try finding a non-help window.
+" Relies on syntax highlighting to be switched on.
+let s:thiswin = winnr()
+while exists("b:current_syntax") && b:current_syntax == "help"
+ exe "norm! \<C-W>w"
+ if s:thiswin == winnr()
+ break
+ endif
+endwhile
+
+" Open the window
+new option-window
+setlocal ts=15 tw=0 noro
+
+" Insert help and a "set" command for each option.
+call append(0, '" Each "set" line shows the current value of an option (on the left).')
+call append(1, '" Hit <CR> on a "set" line to execute it.')
+call append(2, '" A boolean option will be toggled.')
+call append(3, '" For other options you can edit the value.')
+call append(4, '" Hit <CR> on a help line to open a help window on this option.')
+call append(5, '" Hit <CR> on an index line to jump there.')
+call append(6, '" Hit <Space> on a "set" line to refresh it.')
+
+" These functions are called often below. Keep them fast!
+
+" Init a local binary option
+fun! <SID>BinOptionL(name)
+ exe "norm! \<C-W>p"
+ exe "let val = &" . a:name
+ exe "norm! \<C-W>p"
+ call append("$", substitute(substitute(" \tset " . val . a:name . "\t" .
+ \!val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" Init a global binary option
+fun! <SID>BinOptionG(name, val)
+ call append("$", substitute(substitute(" \tset " . a:val . a:name . "\t" .
+ \!a:val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" Init a local string option
+fun! <SID>OptionL(name)
+ exe "norm! \<C-W>p"
+ exe "let val = substitute(&" . a:name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+ exe "norm! \<C-W>p"
+ call append("$", " \tset " . a:name . "=" . val)
+endfun
+
+" Init a global string option
+fun! <SID>OptionG(name, val)
+ call append("$", " \tset " . a:name . "=" . substitute(a:val, '[ \t\\"|]',
+ \ '\\\0', "g"))
+endfun
+
+let s:idx = 1
+let s:lnum = line("$")
+call append("$", "")
+
+fun! <SID>Header(text)
+ let line = s:idx . " " . a:text
+ if s:idx < 10
+ let line = " " . line
+ endif
+ call append("$", "")
+ call append("$", line)
+ call append("$", "")
+ call append(s:lnum, line)
+ let s:idx = s:idx + 1
+ let s:lnum = s:lnum + 1
+endfun
+
+" Get the value of 'pastetoggle'. It could be a special key.
+fun! <SID>PTvalue()
+ redir @a
+ silent set pt
+ redir END
+ return substitute(@a, '[^=]*=\(.*\)', '\1', "")
+endfun
+
+" Restore the previous value of 'cpoptions' here, it's used below.
+let &cpo = s:cpo_save
+
+" List of all options, organized by function.
+" The text should be sufficient to know what the option is used for.
+
+call <SID>Header("important")
+call append("$", "compatible\tbehave very Vi compatible (not advisable)")
+call <SID>BinOptionG("cp", &cp)
+call append("$", "cpoptions\tlist of flags to specify Vi compatibility")
+call <SID>OptionG("cpo", &cpo)
+call append("$", "insertmode\tuse Insert mode as the default mode")
+call <SID>BinOptionG("im", &im)
+call append("$", "paste\tpaste mode, insert typed text literally")
+call <SID>BinOptionG("paste", &paste)
+call append("$", "pastetoggle\tkey sequence to toggle paste mode")
+if &pt =~ "\x80"
+ call append("$", " \tset pt=" . <SID>PTvalue())
+else
+ call <SID>OptionG("pt", &pt)
+endif
+call append("$", "runtimepath\tlist of directories used for runtime files and plugins")
+call <SID>OptionG("rtp", &rtp)
+call append("$", "helpfile\tname of the main help file")
+call <SID>OptionG("hf", &hf)
+
+
+call <SID>Header("moving around, searching and patterns")
+call append("$", "whichwrap\tlist of flags specifying which commands wrap to another line")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ww")
+call append("$", "startofline\tmany jump commands move the cursor to the first non-blank")
+call append("$", "\tcharacter of a line")
+call <SID>BinOptionG("sol", &sol)
+call append("$", "paragraphs\tnroff macro names that separate paragraphs")
+call <SID>OptionG("para", &para)
+call append("$", "sections\tnroff macro names that separate sections")
+call <SID>OptionG("sect", &sect)
+call append("$", "path\tlist of directory names used for file searching")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("pa", &pa)
+call append("$", "cdpath\tlist of directory names used for :cd")
+call <SID>OptionG("cd", &cd)
+if has("netbeans_intg") || has("sun_workshop")
+ call append("$", "autochdir\tchange to directory of file in buffer")
+ call <SID>BinOptionG("acd", &acd)
+endif
+call append("$", "wrapscan\tsearch commands wrap around the end of the buffer")
+call <SID>BinOptionG("ws", &ws)
+call append("$", "incsearch\tshow match for partly typed search command")
+call <SID>BinOptionG("is", &is)
+call append("$", "magic\tchange the way backslashes are used in search patterns")
+call <SID>BinOptionG("magic", &magic)
+call append("$", "ignorecase\tignore case when using a search pattern")
+call <SID>BinOptionG("ic", &ic)
+call append("$", "smartcase\toverride 'ignorecase' when pattern has upper case characters")
+call <SID>BinOptionG("scs", &scs)
+call append("$", "casemap\tWhat method to use for changing case of letters")
+call <SID>OptionG("cmp", &cmp)
+call append("$", "maxmempattern\tmaximum amount of memory in Kbyte used for pattern matching")
+call append("$", " \tset mmp=" . &mmp)
+call append("$", "define\tpattern for a macro definition line")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("def", &def)
+if has("find_in_path")
+ call append("$", "include\tpattern for an include-file line")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inc")
+ call append("$", "includeexpr\texpression used to transform an include line to a file name")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inex")
+endif
+
+
+call <SID>Header("tags")
+call append("$", "tagbsearch\tuse binary searching in tags files")
+call <SID>BinOptionG("tbs", &tbs)
+call append("$", "taglength\tnumber of significant characters in a tag name or zero")
+call append("$", " \tset tl=" . &tl)
+call append("$", "tags\tlist of file names to search for tags")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("tag", &tag)
+call append("$", "tagrelative\tfile names in a tags file are relative to the tags file")
+call <SID>BinOptionG("tr", &tr)
+call append("$", "tagstack\ta :tag command will use the tagstack")
+call <SID>BinOptionG("tgst", &tgst)
+call append("$", "showfulltag\twhen completing tags in Insert mode show more info")
+call <SID>BinOptionG("sft", &sft)
+if has("cscope")
+ call append("$", "cscopeprg\tcommand for executing cscope")
+ call <SID>OptionG("csprg", &csprg)
+ call append("$", "cscopetag\tuse cscope for tag commands")
+ call <SID>BinOptionG("cst", &cst)
+ call append("$", "cscopetagorder\t0 or 1; the order in which \":cstag\" performs a search")
+ call append("$", " \tset csto=" . &csto)
+ call append("$", "cscopeverbose\tgive messages when adding a cscope database")
+ call <SID>BinOptionG("csverb", &csverb)
+ call append("$", "cscopepathcomp\thow many components of the path to show")
+ call append("$", " \tset cspc=" . &cspc)
+ call append("$", "cscopequickfix\tWhen to open a quickfix window for cscope")
+ call <SID>OptionG("csqf", &csqf)
+endif
+
+
+call <SID>Header("displaying text")
+call append("$", "scroll\tnumber of lines to scroll for CTRL-U and CTRL-D")
+call append("$", "\t(local to window)")
+call <SID>OptionL("scr")
+call append("$", "scrolloff\tnumber of screen lines to show around the cursor")
+call append("$", " \tset so=" . &so)
+call append("$", "wrap\tlong lines wrap")
+call <SID>BinOptionG("wrap", &wrap)
+call append("$", "linebreak\twrap long lines at a character in 'breakat'")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("lbr")
+call append("$", "breakat\twhich characters might cause a line break")
+call <SID>OptionG("brk", &brk)
+call append("$", "showbreak\tstring to put before wrapped screen lines")
+call <SID>OptionG("sbr", &sbr)
+call append("$", "sidescroll\tminimal number of columns to scroll horizontally")
+call append("$", " \tset ss=" . &ss)
+call append("$", "sidescrolloff\tminimal number of columns to keep left and right of the cursor")
+call append("$", " \tset siso=" . &siso)
+call append("$", "display\tinclude \"lastline\" to show the last line even if it doesn't fit")
+call append("$", "\tinclude \"uhex\" to show unprintable characters as a hex number")
+call <SID>OptionG("dy", &dy)
+call append("$", "fillchars\tcharacters to use for the status line, folds and filler lines")
+call <SID>OptionG("fcs", &fcs)
+call append("$", "cmdheight\tnumber of lines used for the command-line")
+call append("$", " \tset ch=" . &ch)
+call append("$", "columns\twidth of the display")
+call append("$", " \tset co=" . &co)
+call append("$", "lines\tnumber of lines in the display")
+call append("$", " \tset lines=" . &lines)
+call append("$", "lazyredraw\tdon't redraw while executing macros")
+call <SID>BinOptionG("lz", &lz)
+if has("reltime")
+ call append("$", "redrawtime\ttimeout for 'hlsearch' and :match highlighting in msec")
+ call append("$", " \tset rdt=" . &rdt)
+endif
+call append("$", "writedelay\tdelay in msec for each char written to the display")
+call append("$", "\t(for debugging)")
+call append("$", " \tset wd=" . &wd)
+call append("$", "list\tshow <Tab> as ^I and end-of-line as $")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("list")
+call append("$", "listchars\tlist of strings used for list mode")
+call <SID>OptionG("lcs", &lcs)
+call append("$", "number\tshow the line number for each line")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("nu")
+if has("linebreak")
+ call append("$", "numberwidth\tnumber of columns to use for the line number")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("nuw")
+endif
+
+
+call <SID>Header("syntax, highlighting and spelling")
+call append("$", "background\t\"dark\" or \"light\"; the background color brightness")
+call <SID>OptionG("bg", &bg)
+if has("autocmd")
+ call append("$", "filetype\ttype of file; triggers the FileType event when set")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("ft")
+endif
+if has("syntax")
+ call append("$", "syntax\tname of syntax highlighting used")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("syn")
+ call append("$", "synmaxcol\tmaximum column to look for syntax items")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("smc")
+endif
+call append("$", "highlight\twhich highlighting to use for various occasions")
+call <SID>OptionG("hl", &hl)
+call append("$", "hlsearch\thighlight all matches for the last used search pattern")
+call <SID>BinOptionG("hls", &hls)
+if has("syntax")
+ call append("$", "cursorcolumn\thighlight the screen column of the cursor")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("cuc")
+ call append("$", "cursorline\thighlight the screen line of the cursor")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("cul")
+ call append("$", "spell\thighlight spelling mistakes")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("spell")
+ call append("$", "spelllang\tlist of accepted languages")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("spl")
+ call append("$", "spellfile\tfile that \"zg\" adds good words to")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("spf")
+ call append("$", "spellcapcheck\tpattern to locate the end of a sentence")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("spc")
+ call append("$", "spellsuggest\tmethods used to suggest corrections")
+ call <SID>OptionG("sps", &sps)
+ call append("$", "mkspellmem\tamount of memory used by :mkspell before compressing")
+ call <SID>OptionG("msm", &msm)
+endif
+
+
+call <SID>Header("multiple windows")
+call append("$", "laststatus\t0, 1 or 2; when to use a status line for the last window")
+call append("$", " \tset ls=" . &ls)
+if has("statusline")
+ call append("$", "statusline\talternate format to be used for a status line")
+ call <SID>OptionG("stl", &stl)
+endif
+call append("$", "equalalways\tmake all windows the same size when adding/removing windows")
+call <SID>BinOptionG("ea", &ea)
+if has("vertsplit")
+ call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"")
+ call <SID>OptionG("ead", &ead)
+endif
+call append("$", "winheight\tminimal number of lines used for the current window")
+call append("$", " \tset wh=" . &wh)
+call append("$", "winminheight\tminimal number of lines used for any window")
+call append("$", " \tset wmh=" . &wmh)
+call append("$", "winfixheight\tkeep the height of the window")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("wfh")
+if has("vertsplit")
+call append("$", "winfixwidth\tkeep the width of the window")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("wfw")
+ call append("$", "winwidth\tminimal number of columns used for the current window")
+ call append("$", " \tset wiw=" . &wiw)
+ call append("$", "winminwidth\tminimal number of columns used for any window")
+ call append("$", " \tset wmw=" . &wmw)
+endif
+call append("$", "helpheight\tinitial height of the help window")
+call append("$", " \tset hh=" . &hh)
+if has("quickfix")
+ call append("$", "previewheight\tdefault height for the preview window")
+ call append("$", " \tset pvh=" . &pvh)
+ call append("$", "previewwindow\tidentifies the preview window")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("pvw")
+endif
+call append("$", "hidden\tdon't unload a buffer when no longer shown in a window")
+call <SID>BinOptionG("hid", &hid)
+call append("$", "switchbuf\t\"useopen\" and/or \"split\"; which window to use when jumping")
+call append("$", "\tto a buffer")
+call <SID>OptionG("swb", &swb)
+call append("$", "splitbelow\ta new window is put below the current one")
+call <SID>BinOptionG("sb", &sb)
+if has("vertsplit")
+ call append("$", "splitright\ta new window is put right of the current one")
+ call <SID>BinOptionG("spr", &spr)
+endif
+if has("scrollbind")
+ call append("$", "scrollbind\tthis window scrolls together with other bound windows")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("scb")
+ call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'")
+ call <SID>OptionG("sbo", &sbo)
+endif
+
+
+call <SID>Header("multiple tab pages")
+call append("$", "showtabline\t0, 1 or 2; when to use a tab pages line")
+call append("$", " \tset stal=" . &stal)
+call append("$", "tabpagemax\tmaximum number of tab pages to open for -p and \"tab all\"")
+call append("$", " \tset tpm=" . &tpm)
+call append("$", "tabline\tcustom tab pages line")
+call <SID>OptionG("tal", &tal)
+if has("gui")
+ call append("$", "guitablabel\tcustom tab page label for the GUI")
+ call <SID>OptionG("gtl", &gtl)
+ call append("$", "guitabtooltip\tcustom tab page tooltip for the GUI")
+ call <SID>OptionG("gtt", &gtt)
+endif
+
+
+call <SID>Header("terminal")
+call append("$", "term\tname of the used terminal")
+call <SID>OptionG("term", &term)
+call append("$", "ttytype\talias for 'term'")
+call <SID>OptionG("tty", &tty)
+call append("$", "ttybuiltin\tcheck built-in termcaps first")
+call <SID>BinOptionG("tbi", &tbi)
+call append("$", "ttyfast\tterminal connection is fast")
+call <SID>BinOptionG("tf", &tf)
+call append("$", "weirdinvert\tterminal that requires extra redrawing")
+call <SID>BinOptionG("wiv", &wiv)
+call append("$", "esckeys\trecognize keys that start with <Esc> in Insert mode")
+call <SID>BinOptionG("ek", &ek)
+call append("$", "scrolljump\tminimal number of lines to scroll at a time")
+call append("$", " \tset sj=" . &sj)
+call append("$", "ttyscroll\tmaximum number of lines to use scrolling instead of redrawing")
+call append("$", " \tset tsl=" . &tsl)
+if has("gui") || has("msdos") || has("win32")
+ call append("$", "guicursor\tspecifies what the cursor looks like in different modes")
+ call <SID>OptionG("gcr", &gcr)
+endif
+if has("title")
+ let &title = s:old_title
+ call append("$", "title\tshow info in the window title")
+ call <SID>BinOptionG("title", &title)
+ set notitle
+ call append("$", "titlelen\tpercentage of 'columns' used for the window title")
+ call append("$", " \tset titlelen=" . &titlelen)
+ call append("$", "titlestring\twhen not empty, string to be used for the window title")
+ call <SID>OptionG("titlestring", &titlestring)
+ call append("$", "titleold\tstring to restore the title to when exiting Vim")
+ call <SID>OptionG("titleold", &titleold)
+ let &icon = s:old_icon
+ call append("$", "icon\tset the text of the icon for this window")
+ call <SID>BinOptionG("icon", &icon)
+ set noicon
+ call append("$", "iconstring\twhen not empty, text for the icon of this window")
+ call <SID>OptionG("iconstring", &iconstring)
+endif
+if has("win32")
+ call append("$", "restorescreen\trestore the screen contents when exiting Vim")
+ call <SID>BinOptionG("rs", &rs)
+endif
+
+
+call <SID>Header("using the mouse")
+call append("$", "mouse\tlist of flags for using the mouse")
+call <SID>OptionG("mouse", &mouse)
+if has("gui")
+ call append("$", "mousefocus\tthe window with the mouse pointer becomes the current one")
+ call <SID>BinOptionG("mousef", &mousef)
+ call append("$", "mousehide\thide the mouse pointer while typing")
+ call <SID>BinOptionG("mh", &mh)
+endif
+call append("$", "mousemodel\t\"extend\", \"popup\" or \"popup_setpos\"; what the right")
+call append("$", "\tmouse button is used for")
+call <SID>OptionG("mousem", &mousem)
+call append("$", "mousetime\tmaximum time in msec to recognize a double-click")
+call append("$", " \tset mouset=" . &mouset)
+call append("$", "ttymouse\t\"xterm\", \"xterm2\", \"dec\" or \"netterm\"; type of mouse")
+call <SID>OptionG("ttym", &ttym)
+if has("mouseshape")
+ call append("$", "mouseshape\twhat the mouse pointer looks like in different modes")
+ call <SID>OptionG("mouses", &mouses)
+endif
+
+
+if has("gui")
+ call <SID>Header("GUI")
+ call append("$", "guifont\tlist of font names to be used in the GUI")
+ call <SID>OptionG("gfn", &gfn)
+ if has("xfontset")
+ call append("$", "guifontset\tpair of fonts to be used, for multibyte editing")
+ call <SID>OptionG("gfs", &gfs)
+ endif
+ call append("$", "guifontwide\tlist of font names to be used for double-wide characters")
+ call <SID>OptionG("gfw", &gfw)
+ if has("mac")
+ call append("$", "antialias\tuse smooth, antialiased fonts")
+ call <SID>BinOptionG("anti", &anti)
+ endif
+ call append("$", "guioptions\tlist of flags that specify how the GUI works")
+ call <SID>OptionG("go", &go)
+ if has("gui_gtk")
+ call append("$", "toolbar\t\"icons\", \"text\" and/or \"tooltips\"; how to show the toolbar")
+ call <SID>OptionG("tb", &tb)
+ if has("gui_gtk2")
+ call append("$", "toolbariconsize\tSize of toolbar icons")
+ call <SID>OptionG("tbis", &tbis)
+ endif
+ call append("$", "guiheadroom\troom (in pixels) left above/below the window")
+ call append("$", " \tset ghr=" . &ghr)
+ endif
+ call append("$", "guipty\tuse a pseudo-tty for I/O to external commands")
+ call <SID>BinOptionG("guipty", &guipty)
+ if has("browse")
+ call append("$", "browsedir\t\"last\", \"buffer\" or \"current\": which directory used for the file browser")
+ call <SID>OptionG("bsdir", &bsdir)
+ endif
+ if has("multi_lang")
+ call append("$", "langmenu\tlanguage to be used for the menus")
+ call <SID>OptionG("langmenu", &lm)
+ endif
+ call append("$", "menuitems\tmaximum number of items in one menu")
+ call append("$", " \tset mis=" . &mis)
+ if has("winaltkeys")
+ call append("$", "winaltkeys\t\"no\", \"yes\" or \"menu\"; how to use the ALT key")
+ call <SID>OptionG("wak", &wak)
+ endif
+ call append("$", "linespace\tnumber of pixel lines to use between characters")
+ call append("$", " \tset lsp=" . &lsp)
+ if has("balloon_eval")
+ call append("$", "balloondelay\tdelay in milliseconds before a balloon may pop up")
+ call append("$", " \tset bdlay=" . &bdlay)
+ call append("$", "ballooneval\twhether the balloon evaluation is to be used")
+ call <SID>BinOptionG("beval", &beval)
+ if has("eval")
+ call append("$", "balloonexpr\texpression to show in balloon eval")
+ call append("$", " \tset bexpr=" . &bexpr)
+ endif
+ endif
+ if exists("+macatsui")
+ call append("$", "macatsui\tuse ATSUI text drawing; disable to avoid display problems")
+ call <SID>OptionG("macatsui", &macatsui)
+ endif
+endif
+
+if has("printer")
+ call <SID>Header("printing")
+ call append("$", "printoptions\tlist of items that control the format of :hardcopy output")
+ call <SID>OptionG("popt", &popt)
+ call append("$", "printdevice\tname of the printer to be used for :hardcopy")
+ call <SID>OptionG("pdev", &pdev)
+ if has("postscript")
+ call append("$", "printexpr\texpression used to print the PostScript file for :hardcopy")
+ call <SID>OptionG("pexpr", &pexpr)
+ endif
+ call append("$", "printfont\tname of the font to be used for :hardcopy")
+ call <SID>OptionG("pfn", &pfn)
+ call append("$", "printheader\tformat of the header used for :hardcopy")
+ call <SID>OptionG("pheader", &pheader)
+ if has("postscript")
+ call append("$", "printencoding\tencoding used to print the PostScript file for :hardcopy")
+ call <SID>OptionG("penc", &penc)
+ endif
+ if has("multi_byte")
+ call append("$", "printmbcharset\tthe CJK character set to be used for CJK output from :hardcopy")
+ call <SID>OptionG("pmbcs", &pmbcs)
+ call append("$", "printmbfont\tlist of font names to be used for CJK output from :hardcopy")
+ call <SID>OptionG("pmbfn", &pmbfn)
+ endif
+endif
+
+call <SID>Header("messages and info")
+call append("$", "terse\tadd 's' flag in 'shortmess' (don't show search message)")
+call <SID>BinOptionG("terse", &terse)
+call append("$", "shortmess\tlist of flags to make messages shorter")
+call <SID>OptionG("shm", &shm)
+call append("$", "showcmd\tshow (partial) command keys in the status line")
+let &sc = s:old_sc
+call <SID>BinOptionG("sc", &sc)
+set nosc
+call append("$", "showmode\tdisplay the current mode in the status line")
+call <SID>BinOptionG("smd", &smd)
+call append("$", "ruler\tshow cursor position below each window")
+let &ru = s:old_ru
+call <SID>BinOptionG("ru", &ru)
+set noru
+if has("statusline")
+ call append("$", "rulerformat\talternate format to be used for the ruler")
+ call <SID>OptionG("ruf", &ruf)
+endif
+call append("$", "report\tthreshold for reporting number of changed lines")
+call append("$", " \tset report=" . &report)
+call append("$", "verbose\tthe higher the more messages are given")
+call append("$", " \tset vbs=" . &vbs)
+call append("$", "verbosefile\tfile to write messages in")
+call <SID>OptionG("vfile", &vfile)
+call append("$", "more\tpause listings when the screen is full")
+call <SID>BinOptionG("more", &more)
+if has("dialog_con") || has("dialog_gui")
+ call append("$", "confirm\tstart a dialog when a command fails")
+ call <SID>BinOptionG("cf", &cf)
+endif
+call append("$", "errorbells\tring the bell for error messages")
+call <SID>BinOptionG("eb", &eb)
+call append("$", "visualbell\tuse a visual bell instead of beeping")
+call <SID>BinOptionG("vb", &vb)
+if has("multi_lang")
+ call append("$", "helplang\tlist of preferred languages for finding help")
+ call <SID>OptionG("hlg", &hlg)
+endif
+
+
+call <SID>Header("selecting text")
+call append("$", "selection\t\"old\", \"inclusive\" or \"exclusive\"; how selecting text behaves")
+call <SID>OptionG("sel", &sel)
+call append("$", "selectmode\t\"mouse\", \"key\" and/or \"cmd\"; when to start Select mode")
+call append("$", "\tinstead of Visual mode")
+call <SID>OptionG("slm", &slm)
+if has("clipboard")
+ call append("$", "clipboard\t\"unnamed\" to use the * register like unnamed register")
+ call append("$", "\t\"autoselect\" to always put selected text on the clipboard")
+ call <SID>OptionG("cb", &cb)
+endif
+call append("$", "keymodel\t\"startsel\" and/or \"stopsel\"; what special keys can do")
+call <SID>OptionG("km", &km)
+
+
+call <SID>Header("editing text")
+call append("$", "undolevels\tmaximum number of changes that can be undone")
+call append("$", " \tset ul=" . &ul)
+call append("$", "modified\tchanges have been made and not written to a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("mod")
+call append("$", "readonly\tbuffer is not to be written")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ro")
+call append("$", "modifiable\tchanges to the text are not possible")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ma")
+call append("$", "textwidth\tline length above which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("tw")
+call append("$", "wrapmargin\tmargin from the right in which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("wm")
+call append("$", "backspace\tspecifies what <BS>, CTRL-W, etc. can do in Insert mode")
+call append("$", " \tset bs=" . &bs)
+call append("$", "comments\tdefinition of what comment lines look like")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("com")
+call append("$", "formatoptions\tlist of flags that tell how automatic formatting works")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("fo")
+call append("$", "formatlistpat\tpattern to recognize a numbered list")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("flp")
+if has("eval")
+ call append("$", "formatexpr\texpression used for \"gq\" to format lines")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("fex")
+endif
+if has("insert_expand")
+ call append("$", "complete\tspecifies how Insert mode completion works for CTRL-N and CTRL-P")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cpt")
+ call append("$", "completeopt\twhether to use a popup menu for Insert mode completion")
+ call <SID>OptionG("cot", &cot)
+ call append("$", "pumheight\tmaximum height of the popup menu")
+ call <SID>OptionG("ph", &ph)
+ call append("$", "completefunc\tuser defined function for Insert mode completion")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cfu")
+ call append("$", "omnifunc\tfunction for filetype-specific Insert mode completion")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("ofu")
+ call append("$", "dictionary\tlist of dictionary files for keyword completion")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("dict", &dict)
+ call append("$", "thesaurus\tlist of thesaurus files for keyword completion")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("tsr", &tsr)
+endif
+call append("$", "infercase\tadjust case of a keyword completion match")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("inf")
+if has("digraphs")
+ call append("$", "digraph\tenable entering digraps with c1 <BS> c2")
+ call <SID>BinOptionG("dg", &dg)
+endif
+call append("$", "tildeop\tthe \"~\" command behaves like an operator")
+call <SID>BinOptionG("top", &top)
+call append("$", "operatorfunc\tfunction called for the\"g@\" operator")
+call <SID>OptionG("opfunc", &opfunc)
+call append("$", "showmatch\tWhen inserting a bracket, briefly jump to its match")
+call <SID>BinOptionG("sm", &sm)
+call append("$", "matchtime\ttenth of a second to show a match for 'showmatch'")
+call append("$", " \tset mat=" . &mat)
+call append("$", "matchpairs\tlist of pairs that match for the \"%\" command")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("mps")
+call append("$", "joinspaces\tuse two spaces after '.' when joining a line")
+call <SID>BinOptionG("js", &js)
+call append("$", "nrformats\t\"alpha\", \"octal\" and/or \"hex\"; number formats recognized for")
+call append("$", "\tCTRL-A and CTRL-X commands")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("nf")
+
+
+call <SID>Header("tabs and indenting")
+call append("$", "tabstop\tnumber of spaces a <Tab> in the text stands for")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ts")
+call append("$", "shiftwidth\tnumber of spaces used for each step of (auto)indent")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sw")
+call append("$", "smarttab\ta <Tab> in an indent inserts 'shiftwidth' spaces")
+call <SID>BinOptionG("sta", &sta)
+call append("$", "softtabstop\tif non-zero, number of spaces to insert for a <Tab>")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sts")
+call append("$", "shiftround\tround to 'shiftwidth' for \"<<\" and \">>\"")
+call <SID>BinOptionG("sr", &sr)
+call append("$", "expandtab\texpand <Tab> to spaces in Insert mode")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("et")
+call append("$", "autoindent\tautomatically set the indent of a new line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ai")
+if has("smartindent")
+ call append("$", "smartindent\tdo clever autoindenting")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("si")
+endif
+if has("cindent")
+ call append("$", "cindent\tenable specific indenting for C code")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("cin")
+ call append("$", "cinoptions\toptions for C-indenting")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cino")
+ call append("$", "cinkeys\tkeys that trigger C-indenting in Insert mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cink")
+ call append("$", "cinwords\tlist of words that cause more C-indent")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cinw")
+ call append("$", "indentexpr\texpression used to obtain the indent of a line")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inde")
+ call append("$", "indentkeys\tkeys that trigger indenting with 'indentexpr' in Insert mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("indk")
+endif
+call append("$", "copyindent\tCopy whitespace for indenting from previous line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ci")
+call append("$", "preserveindent\tPreserve kind of whitespace when changing indent")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("pi")
+if has("lispindent")
+ call append("$", "lisp\tenable lisp mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("lisp")
+ call append("$", "lispwords\twords that change how lisp indenting works")
+ call <SID>OptionG("lw", &lw)
+endif
+
+
+if has("folding")
+ call <SID>Header("folding")
+ call append("$", "foldenable\tset to display all folds open")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("fen")
+ call append("$", "foldlevel\tfolds with a level higher than this number will be closed")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdl")
+ call append("$", "foldlevelstart\tvalue for 'foldlevel' when starting to edit a file")
+ call append("$", " \tset fdls=" . &fdls)
+ call append("$", "foldcolumn\twidth of the column used to indicate folds")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdc")
+ call append("$", "foldtext\texpression used to display the text of a closed fold")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdt")
+ call append("$", "foldclose\tset to \"all\" to close a fold when the cursor leaves it")
+ call <SID>OptionG("fcl", &fcl)
+ call append("$", "foldopen\tspecifies for which commands a fold will be opened")
+ call <SID>OptionG("fdo", &fdo)
+ call append("$", "foldminlines\tminimum number of screen lines for a fold to be closed")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fml")
+ call append("$", "commentstring\ttemplate for comments; used to put the marker in")
+ call <SID>OptionL("cms")
+ call append("$", "foldmethod\tfolding type: \"manual\", \"indent\", \"expr\", \"marker\" or \"syntax\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdm")
+ call append("$", "foldexpr\texpression used when 'foldmethod' is \"expr\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fde")
+ call append("$", "foldignore\tused to ignore lines when 'foldmethod' is \"indent\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdi")
+ call append("$", "foldmarker\tmarkers used when 'foldmethod' is \"marker\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fmr")
+ call append("$", "foldnestmax\tmaximum fold depth for when 'foldmethod is \"indent\" or \"syntax\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdn")
+endif
+
+
+if has("diff")
+ call <SID>Header("diff mode")
+ call append("$", "diff\tuse diff mode for the current window")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("diff")
+ call append("$", "diffopt\toptions for using diff mode")
+ call <SID>OptionG("dip", &dip)
+ call append("$", "diffexpr\texpression used to obtain a diff file")
+ call <SID>OptionG("dex", &dex)
+ call append("$", "patchexpr\texpression used to patch a file")
+ call <SID>OptionG("pex", &pex)
+endif
+
+
+call <SID>Header("mapping")
+call append("$", "maxmapdepth\tmaximum depth of mapping")
+call append("$", " \tset mmd=" . &mmd)
+call append("$", "remap\trecognize mappings in mapped keys")
+call <SID>BinOptionG("remap", &remap)
+call append("$", "timeout\tallow timing out halfway into a mapping")
+call <SID>BinOptionG("to", &to)
+call append("$", "ttimeout\tallow timing out halfway into a key code")
+call <SID>BinOptionG("ttimeout", &ttimeout)
+call append("$", "timeoutlen\ttime in msec for 'timeout'")
+call append("$", " \tset tm=" . &tm)
+call append("$", "ttimeoutlen\ttime in msec for 'ttimeout'")
+call append("$", " \tset ttm=" . &ttm)
+
+
+call <SID>Header("reading and writing files")
+call append("$", "modeline\tenable using settings from modelines when reading a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ml")
+call append("$", "modelines\tnumber of lines to check for modelines")
+call append("$", " \tset mls=" . &mls)
+call append("$", "binary\tbinary file editing")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bin")
+call append("$", "endofline\tlast line in the file has an end-of-line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("eol")
+if has("multi_byte")
+ call append("$", "bomb\tPrepend a Byte Order Mark to the file")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("bomb")
+endif
+call append("$", "fileformat\tend-of-line format: \"dos\", \"unix\" or \"mac\"")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ff")
+call append("$", "fileformats\tlist of file formats to look for when editing a file")
+call <SID>OptionG("ffs", &ffs)
+call append("$", "textmode\tobsolete, use 'fileformat'")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("tx")
+call append("$", "textauto\tobsolete, use 'fileformats'")
+call <SID>BinOptionG("ta", &ta)
+call append("$", "write\twriting files is allowed")
+call <SID>BinOptionG("write", &write)
+call append("$", "writebackup\twrite a backup file before overwriting a file")
+call <SID>BinOptionG("wb", &wb)
+call append("$", "backup\tkeep a backup after overwriting a file")
+call <SID>BinOptionG("bk", &bk)
+call append("$", "backupskip\tpatterns that specify for which files a backup is not made")
+call append("$", " \tset bsk=" . &bsk)
+call append("$", "backupcopy\twhether to make the backup as a copy or rename the existing file")
+call append("$", " \tset bkc=" . &bkc)
+call append("$", "backupdir\tlist of directories to put backup files in")
+call <SID>OptionG("bdir", &bdir)
+call append("$", "backupext\tfile name extension for the backup file")
+call <SID>OptionG("bex", &bex)
+call append("$", "autowrite\tautomatically write a file when leaving a modified buffer")
+call <SID>BinOptionG("aw", &aw)
+call append("$", "autowriteall\tas 'autowrite', but works with more commands")
+call <SID>BinOptionG("awa", &awa)
+call append("$", "writeany\talways write without asking for confirmation")
+call <SID>BinOptionG("wa", &wa)
+call append("$", "autoread\tautomatically read a file when it was modified outside of Vim")
+call append("$", "\t(global or local to buffer)")
+call <SID>BinOptionG("ar", &ar)
+call append("$", "patchmode\tkeep oldest version of a file; specifies file name extension")
+call <SID>OptionG("pm", &pm)
+call append("$", "fsync\tforcibly sync the file to disk after writing it")
+call <SID>BinOptionG("fs", &fs)
+if !has("msdos")
+ call append("$", "shortname\tuse 8.3 file names")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("sn")
+endif
+
+
+call <SID>Header("the swap file")
+call append("$", "directory\tlist of directories for the swap file")
+call <SID>OptionG("dir", &dir)
+call append("$", "swapfile\tuse a swap file for this buffer")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("swf")
+call append("$", "swapsync\t\"sync\", \"fsync\" or empty; how to flush a swap file to disk")
+call <SID>OptionG("sws", &sws)
+call append("$", "updatecount\tnumber of characters typed to cause a swap file update")
+call append("$", " \tset uc=" . &uc)
+call append("$", "updatetime\ttime in msec after which the swap file will be updated")
+call append("$", " \tset ut=" . &ut)
+call append("$", "maxmem\tmaximum amount of memory in Kbyte used for one buffer")
+call append("$", " \tset mm=" . &mm)
+call append("$", "maxmemtot\tmaximum amount of memory in Kbyte used for all buffers")
+call append("$", " \tset mmt=" . &mmt)
+
+
+call <SID>Header("command line editing")
+call append("$", "history\thow many command lines are remembered ")
+call append("$", " \tset hi=" . &hi)
+call append("$", "wildchar\tkey that triggers command-line expansion")
+call append("$", " \tset wc=" . &wc)
+call append("$", "wildcharm\tlike 'wildchar' but can also be used in a mapping")
+call append("$", " \tset wcm=" . &wcm)
+call append("$", "wildmode\tspecifies how command line completion works")
+call <SID>OptionG("wim", &wim)
+if has("wildoptions")
+ call append("$", "wildoptions\tempty or \"tagfile\" to list file name of matching tags")
+ call <SID>OptionG("wop", &wop)
+endif
+call append("$", "suffixes\tlist of file name extensions that have a lower priority")
+call <SID>OptionG("su", &su)
+if has("file_in_path")
+ call append("$", "suffixesadd\tlist of file name extensions added when searching for a file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("sua")
+endif
+if has("wildignore")
+ call append("$", "wildignore\tlist of patterns to ignore files for file name completion")
+ call <SID>OptionG("wig", &wig)
+endif
+if has("wildmenu")
+ call append("$", "wildmenu\tcommand-line completion shows a list of matches")
+ call <SID>BinOptionG("wmnu", &wmnu)
+endif
+if has("vertsplit")
+ call append("$", "cedit\tkey used to open the command-line window")
+ call <SID>OptionG("cedit", &cedit)
+ call append("$", "cmdwinheight\theight of the command-line window")
+ call <SID>OptionG("cwh", &cwh)
+endif
+
+
+call <SID>Header("executing external commands")
+call append("$", "shell\tname of the shell program used for external commands")
+call <SID>OptionG("sh", &sh)
+if has("amiga")
+ call append("$", "shelltype\twhen to use the shell or directly execute a command")
+ call append("$", " \tset st=" . &st)
+endif
+call append("$", "shellquote\tcharacter(s) to enclose a shell command in")
+call <SID>OptionG("shq", &shq)
+call append("$", "shellxquote\tlike 'shellquote' but include the redirection")
+call <SID>OptionG("sxq", &sxq)
+call append("$", "shellcmdflag\targument for 'shell' to execute a command")
+call <SID>OptionG("shcf", &shcf)
+call append("$", "shellredir\tused to redirect command output to a file")
+call <SID>OptionG("srr", &srr)
+call append("$", "shelltemp\tuse a temp file for shell commands instead of using a pipe")
+call <SID>BinOptionG("stmp", &stmp)
+call append("$", "equalprg\tprogram used for \"=\" command")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("ep", &ep)
+call append("$", "formatprg\tprogram used to format lines with \"gq\" command")
+call <SID>OptionG("fp", &fp)
+call append("$", "keywordprg\tprogram used for the \"K\" command")
+call <SID>OptionG("kp", &kp)
+call append("$", "warn\twarn when using a shell command and a buffer has changes")
+call <SID>BinOptionG("warn", &warn)
+
+
+if has("quickfix")
+ call <SID>Header("running make and jumping to errors")
+ call append("$", "errorfile\tname of the file that contains error messages")
+ call <SID>OptionG("ef", &ef)
+ call append("$", "errorformat\tlist of formats for error messages")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("efm", &efm)
+ call append("$", "makeprg\tprogram used for the \":make\" command")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("mp", &mp)
+ call append("$", "shellpipe\tstring used to put the output of \":make\" in the error file")
+ call <SID>OptionG("sp", &sp)
+ call append("$", "makeef\tname of the errorfile for the 'makeprg' command")
+ call <SID>OptionG("mef", &mef)
+ call append("$", "grepprg\tprogram used for the \":grep\" command")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("gp", &gp)
+ call append("$", "grepformat\tlist of formats for output of 'grepprg'")
+ call <SID>OptionG("gfm", &gfm)
+endif
+
+
+if has("msdos") || has("os2") || has("win16") || has("win32") || has("osfiletype")
+ call <SID>Header("system specific")
+ if has("msdos")
+ call append("$", "bioskey\tcall the BIOS to get a keyoard character")
+ call <SID>BinOptionG("biosk", &biosk)
+ call append("$", "conskey\tuse direct console I/O to get a keyboard character")
+ call <SID>BinOptionG("consk", &consk)
+ endif
+ if has("osfiletype")
+ call append("$", "osfiletype\tOS-specific information about the type of file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("oft")
+ endif
+ if has("msdos") || has("os2") || has("win16") || has("win32")
+ call append("$", "shellslash\tuse forward slashes in file names; for Unix-like shells")
+ call <SID>BinOptionG("ssl", &ssl)
+ endif
+endif
+
+
+call <SID>Header("language specific")
+call append("$", "isfname\tspecifies the characters in a file name")
+call <SID>OptionG("isf", &isf)
+call append("$", "isident\tspecifies the characters in an identifier")
+call <SID>OptionG("isi", &isi)
+call append("$", "iskeyword\tspecifies the characters in a keyword")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("isk")
+call append("$", "isprint\tspecifies printable characters")
+call <SID>OptionG("isp", &isp)
+if has("textobjects")
+ call append("$", "quoteescape\tspecifies escape characters in a string")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("qe")
+endif
+if has("rightleft")
+ call append("$", "rightleft\tdisplay the buffer right-to-left")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("rl")
+ call append("$", "rightleftcmd\tWhen to edit the command-line right-to-left")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("rlc")
+ call append("$", "revins\tInsert characters backwards")
+ call <SID>BinOptionG("ri", &ri)
+ call append("$", "allowrevins\tAllow CTRL-_ in Insert and Command-line mode to toggle 'revins'")
+ call <SID>BinOptionG("ari", &ari)
+ call append("$", "aleph\tthe ASCII code for the first letter of the Hebrew alphabet")
+ call append("$", " \tset al=" . &al)
+ call append("$", "hkmap\tuse Hebrew keyboard mapping")
+ call <SID>BinOptionG("hk", &hk)
+ call append("$", "hkmapp\tuse phonetic Hebrew keyboard mapping")
+ call <SID>BinOptionG("hkp", &hkp)
+endif
+if has("farsi")
+ call append("$", "altkeymap\tuse Farsi as the second language when 'revins' is set")
+ call <SID>BinOptionG("akm", &akm)
+ call append("$", "fkmap\tuse Farsi keyboard mapping")
+ call <SID>BinOptionG("fk", &fk)
+endif
+if has("arabic")
+ call append("$", "arabic\tPrepare for editing Arabic text")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("arab")
+ call append("$", "arabicshape\tPerform shaping of Arabic characters")
+ call <SID>BinOptionG("arshape", &arshape)
+ call append("$", "termbidi\tTerminal will perform bidi handling")
+ call <SID>BinOptionG("tbidi", &tbidi)
+endif
+if has("keymap")
+ call append("$", "keymap\tname of a keyboard mappping")
+ call <SID>OptionL("kmp")
+endif
+if has("langmap")
+ call append("$", "langmap\ttranslate characters for Normal mode")
+ call <SID>OptionG("lmap", &lmap)
+endif
+if has("xim")
+ call append("$", "imdisable\twhen set never use IM; overrules following IM options")
+ call <SID>BinOptionG("imd", &imd)
+endif
+call append("$", "iminsert\tin Insert mode: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("imi")
+call append("$", "imsearch\tentering a search pattern: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ims")
+if has("xim")
+ call append("$", "imcmdline\twhen set always use IM when starting to edit a command line")
+ call <SID>BinOptionG("imc", &imc)
+endif
+
+
+if has("multi_byte")
+ call <SID>Header("multi-byte characters")
+ call append("$", "encoding\tcharacter encoding used in Vim: \"latin1\", \"utf-8\"")
+ call append("$", "\t\"euc-jp\", \"big5\", etc.")
+ call <SID>OptionG("enc", &enc)
+ call append("$", "fileencoding\tcharacter encoding for the current file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("fenc")
+ call append("$", "fileencodings\tautomatically detected character encodings")
+ call <SID>OptionG("fencs", &fencs)
+ call append("$", "termencoding\tcharacter encoding used by the terminal")
+ call <SID>OptionG("tenc", &tenc)
+ call append("$", "charconvert\texpression used for character encoding conversion")
+ call <SID>OptionG("ccv", &ccv)
+ call append("$", "delcombine\tDelete combining (composing) characters on their own")
+ call <SID>BinOptionG("deco", &deco)
+ call append("$", "maxcombine\tMaximum number of combining (composing) characters displayed")
+ call <SID>OptionG("mco", &mco)
+ if has("xim") && has("gui_gtk")
+ call append("$", "imactivatekey\tkey that activates the X input method")
+ call <SID>OptionG("imak", &imak)
+ endif
+ call append("$", "ambiwidth\tWidth of ambiguous width characters")
+ call <SID>OptionG("ambw", &ambw)
+endif
+
+
+call <SID>Header("various")
+if has("virtualedit")
+ call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"")
+ call <SID>OptionG("ve", &ve)
+endif
+if has("autocmd")
+ call append("$", "eventignore\tlist of autocommand events which are to be ignored")
+ call <SID>OptionG("ei", &ei)
+endif
+call append("$", "loadplugins\tload plugin scripts when starting up")
+call <SID>BinOptionG("lpl", &lpl)
+call append("$", "exrc\tenable reading .vimrc/.exrc/.gvimrc in the current directory")
+call <SID>BinOptionG("ex", &ex)
+call append("$", "secure\tsafer working with script files in the current directory")
+call <SID>BinOptionG("secure", &secure)
+call append("$", "gdefault\tuse the 'g' flag for \":substitute\"")
+call <SID>BinOptionG("gd", &gd)
+call append("$", "edcompatible\t'g' and 'c' flags of \":substitute\" toggle")
+call <SID>BinOptionG("ed", &ed)
+if exists("+opendevice")
+ call append("$", "opendevice\tallow reading/writing devices")
+ call <SID>BinOptionG("odev", &odev)
+endif
+if exists("+maxfuncdepth")
+ call append("$", "maxfuncdepth\tmaximum depth of function calls")
+ call append("$", " \tset mfd=" . &mfd)
+endif
+if has("mksession")
+ call append("$", "sessionoptions\tlist of words that specifies what to put in a session file")
+ call <SID>OptionG("ssop", &ssop)
+ call append("$", "viewoptions\tlist of words that specifies what to save for :mkview")
+ call <SID>OptionG("vop", &vop)
+ call append("$", "viewdir\tdirectory where to store files with :mkview")
+ call <SID>OptionG("vdir", &vdir)
+endif
+if has("viminfo")
+ call append("$", "viminfo\tlist that specifies what to write in the viminfo file")
+ call <SID>OptionG("vi", &vi)
+endif
+if has("quickfix")
+ call append("$", "bufhidden\twhat happens with a buffer when it's no longer in a window")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("bh")
+ call append("$", "buftype\t\"\", \"nofile\", \"nowrite\" or \"quickfix\": type of buffer")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("bt")
+endif
+call append("$", "buflisted\twhether the buffer shows up in the buffer list")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bl")
+call append("$", "debug\tset to \"msg\" to see all error messages")
+call append("$", " \tset debug=" . &debug)
+if has("mzscheme")
+ call append("$", "mzquantum\tinterval in milliseconds between polls for MzScheme threads")
+ call append("$", " \tset mzq=" . &mzq)
+endif
+
+set cpo&vim
+
+" go to first line
+1
+
+" reset 'modified', so that ":q" can be used to close the window
+setlocal nomodified
+
+if has("syntax")
+ " Use Vim highlighting, with some additional stuff
+ setlocal ft=vim
+ syn match optwinHeader "^ \=[0-9].*"
+ syn match optwinName "^[a-z]*\t" nextgroup=optwinComment
+ syn match optwinComment ".*" contained
+ syn match optwinComment "^\t.*"
+ if !exists("did_optwin_syntax_inits")
+ let did_optwin_syntax_inits = 1
+ hi link optwinHeader Title
+ hi link optwinName Identifier
+ hi link optwinComment Comment
+ endif
+endif
+
+" Install autocommands to enable mappings in option-window
+noremap <silent> <buffer> <CR> <C-\><C-N>:call <SID>CR()<CR>
+inoremap <silent> <buffer> <CR> <Esc>:call <SID>CR()<CR>
+noremap <silent> <buffer> <Space> :call <SID>Space()<CR>
+
+" Make the buffer be deleted when the window is closed.
+setlocal buftype=nofile bufhidden=delete noswapfile
+
+augroup optwin
+ au! BufUnload,BufHidden option-window nested
+ \ call <SID>unload() | delfun <SID>unload
+augroup END
+
+fun! <SID>unload()
+ delfun <SID>CR
+ delfun <SID>Space
+ delfun <SID>Find
+ delfun <SID>Update
+ delfun <SID>OptionL
+ delfun <SID>OptionG
+ delfun <SID>BinOptionL
+ delfun <SID>BinOptionG
+ delfun <SID>Header
+ au! optwin
+endfun
+
+" Restore the previous value of 'title' and 'icon'.
+let &title = s:old_title
+let &icon = s:old_icon
+let &ru = s:old_ru
+let &sc = s:old_sc
+let &cpo = s:cpo_save
+unlet s:old_title s:old_icon s:old_ru s:old_sc s:cpo_save s:idx s:lnum
diff --git a/runtime/tutor/runtime/tools.info b/runtime/tutor/runtime/tools.info
new file mode 100755
index 000000000..4d173b0bc
--- /dev/null
+++ b/runtime/tutor/runtime/tools.info
Binary files differ
diff --git a/runtime/tutor/runtime/vim32x32.xpm b/runtime/tutor/runtime/vim32x32.xpm
new file mode 100644
index 000000000..43a3a40c0
--- /dev/null
+++ b/runtime/tutor/runtime/vim32x32.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * vim32x32[] = {
+"32 32 8 1",
+" c None",
+". c #000000",
+"+ c #000080",
+"@ c #008000",
+"# c #00FF00",
+"$ c #808080",
+"% c #C0C0C0",
+"& c #FFFFFF",
+" .. ",
+" .##. ",
+" ...........#@@#. ......... ",
+" .&&&&&&&&&&&.@@@#.&&&&&&&&&. ",
+" .&%%%%%%%%%%%.@@@.&%%%%%%%%%. ",
+" .%%%%%%%%%%$.@@@@.%%%%%%%%$. ",
+" .$%%%%%%$$.@@@@@@.$%%%%%$$. ",
+" .&%%%%%%$.@@@@@@.&%%%%%$$. ",
+" .&%%%%%%$.@@@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@.&&%%%%$$.#. ",
+" ..&%%%%%%$.@.&&%%%%$$.@@#. ",
+" .#.&%%%%%%$..&&%%%%$$.@@@@#. ",
+" .#@.&%%%%%%$.&&%%%%$$.@@@@@@#. ",
+".#@@.&%%%%%%$&&%%%%$$.@@@@@@@@#.",
+".+@@.&%%%%%%$&%%%%$$.@@@@@@@@@+.",
+" .+@.&%%%%%%$%%%%$$.@@@@@@@@@+. ",
+" .+.&%%%%%%%%%%...@@@@@@@@@+. ",
+" ..&%%%%%%%%%.%%.@@@@@@@@+. ",
+" .&%%%%%%%%%.%%.@@@@@@@+. ",
+" .&%%%%%%%%$...@...@...... ",
+" .&%%%%%%%$.%%%.%%%.%%%.%%. ",
+" .&%%%%%%$$..%%..%%%%%%%%%%. ",
+" .&%%%%%$$..%%...%%++%%..%. ",
+" .&%%%%$$.@.%%..%%+.%%..%%. ",
+" .&%%%$$.@@.%%..%%..%%..%%. ",
+" .&%%$$..+.%%..%%..%%..%%. ",
+" .%$$. ..%%%.%%..%%..%%%. ",
+" ... ....+.. .. ... ",
+" .++. ",
+" .. "};
diff --git a/runtime/tutor/runtime/vim48x48.xpm b/runtime/tutor/runtime/vim48x48.xpm
new file mode 100644
index 000000000..b2fdd9592
--- /dev/null
+++ b/runtime/tutor/runtime/vim48x48.xpm
@@ -0,0 +1,59 @@
+/* XPM */
+static char * vim48x48[] = {
+"48 48 8 1",
+" c None",
+". c #000000",
+"+ c #000084",
+"@ c #008200",
+"# c #00FF00",
+"$ c #848284",
+"& c #C6C3C6",
+"* c #FFFFFF",
+" .. ",
+" .##. ",
+" .#@@#. ",
+" ...............#@@@@#. ............... ",
+" .***************.@@@@@#. .***************. ",
+" .**&&&&&&&&&&&&&&$.@@@@@#.**&&&&&&&&&&&&&&$.",
+" .*&&&&&&&&&&&&&&&$.@@@@@@.*&&&&&&&&&&&&&&&$.",
+" .*$&&&&&&&&&&&&&&$.@@@@@@.*$&&&&&&&&&&&&&&$.",
+" .$$$&&&&&&&&&$$$.@@@@@@@@.$$$&&&&&&&&&&&$$.",
+" ..*&&&&&&&&&$$.@@@@@@@@@@..*&&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@.**&&&&&&&&&$$.. ",
+" ..*&&&&&&&&&$$.@@@.**&&&&&&&&&$$.@#. ",
+" .#.*&&&&&&&&&$$.@@.**&&&&&&&&&$$.@@@#. ",
+" .#@.*&&&&&&&&&$$.@.**&&&&&&&&&$$.@@@@@#. ",
+" .#@@.*&&&&&&&&&$$..**&&&&&&&&&$$.@@@@@@@#. ",
+" .#@@@.*&&&&&&&&&$$.**&&&&&&&&&$$.@@@@@@@@@#. ",
+" .#@@@@.*&&&&&&&&&$$**&&&&&&&&&$$.@@@@@@@@@@@#. ",
+".#+@@@@.*&&&&&&&&&$$*&&&&&&&&&$$.@@@@@@@@@@@@@#.",
+" .++@@@.*&&&&&&&&&$*&&&&&&&&&$$.@@@@@@@@@@@@@++.",
+" .++@@.*&&&&&&&&&$&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+" .++@.*&&&&&&&&&&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+" .++.*&&&&&&&&&&&&&&&&....@@@@@@@@@@@@@++. ",
+" .+.*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@@+++ ",
+" ..*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&&$$...@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&$$...@@....@@....+.... ",
+" .*&&&&&&&&&&&&$$..&&..&&&&..&&&&..&&&. ",
+" .*&&&&&&&&&&&$$..&&&.@.&&&&&&&&&&&&&&&. ",
+" .*&&&&&&&&&&$$.@.&&&.@.&&&&&&&&&&&&&&&. ",
+" .*&&&&&&&&&$$.@@.&&.@@.&&....&&....&&. ",
+" .*&&&&&&&&$$.@@.&&&.@.&&&.+.&&&. .&&&. ",
+" .*&&&&&&&$$.@@@.&&.@@.&&.++.&&. .&&. ",
+" .*&&&&&&$$.@@@.&&&.@.&&&.+.&&&. .&&&. ",
+" .*&&&&&$$.++@@.&&.@@.&&.. .&&. .&&. ",
+" .*&&&&$$. .++.&&&.@.&&&. .&&&. .&&&. ",
+" .$$$$$. .+.&&&&..&&&&..&&&&..&&&&. ",
+" ..... .+....@+.... .... .... ",
+" .++@@++. ",
+" .++++. ",
+" .++. ",
+" .. "};
diff --git a/runtime/tutor/runtime/vimlogo.eps b/runtime/tutor/runtime/vimlogo.eps
new file mode 100644
index 000000000..5bf45ff4f
--- /dev/null
+++ b/runtime/tutor/runtime/vimlogo.eps
@@ -0,0 +1,791 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 147 74 429 356
+%%LanguageLevel: 1
+%%Creator: CorelDRAW 11
+%%Title: vimlogo.eps
+%%CreationDate: Mon Feb 02 14:35:16 2004
+%%DocumentProcessColors: Cyan Yellow Black
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+/AutoSteps 0 def
+/CMYKMarks true def
+/UseLevel 1 def
+%Build: CorelDRAW 11 Version 11.633
+%Color profile: Generic offset separations profile
+/CorelIsEPS true def
+%%BeginResource: procset wCorel11Dict 11.0 0
+/wCorel11Dict 300 dict def wCorel11Dict begin
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat}
+bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld
+/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{}
+bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF
+false def/$Scra 0 def/SetScr/setscreen ld/@ss{2 index 0 eq{$dsf 3 1 roll 4 -1
+roll pop}if exch $Scra add exch load SetScr}bd/SepMode_5 where{pop}{/SepMode_5
+0 def}ifelse/CorelIsSeps where{pop}{/CorelIsSeps false def}ifelse
+/CorelIsInRIPSeps where{pop}{/CorelIsInRIPSeps false def}ifelse/CorelIsEPS
+where{pop}{/CorelIsEPS false def}ifelse/CurrentInkName_5 where{pop}
+{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def}
+ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0
+def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false
+def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def
+/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd
+/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def
+/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring
+16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle
+16#60/grave 16#7C/bar
+16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis
+16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def/Comp?{
+/LumSepsDict where{pop false}{/AldusSepsDict where{pop false}{1 0 0 0 @gs
+setcmykcolor currentcmykcolor @gr add add add 0 ne 0 1 0 0 @gs setcmykcolor
+currentcmykcolor @gr add add add 0 ne 0 0 1 0 @gs setcmykcolor currentcmykcolor
+@gr add add add 0 ne 0 0 0 1 @gs setcmykcolor currentcmykcolor @gr add add add
+0 ne and and and}ifelse}ifelse}bd/@PL{/LV where{pop LV 2 ge L2? not and{@np
+/Courier findfont 12 scalefont setfont 72 144 m
+(The PostScript level set in the Corel application is higher than)show 72 132 m
+(the PostScript level of this device. Change the PS Level in the Corel)show 72
+120 m(application to Level 1 by selecting the PostScript tab in the print)show
+72 108 m(dialog, and selecting Level 1 from the Compatibility drop down list.)
+show flush spg quit}if}if}bd/@BeginSysCorelDict{systemdict/Corel30Dict known
+{systemdict/Corel30Dict get exec}if systemdict/CorelLexDict known{1 systemdict
+/CorelLexDict get exec}if}bd/@EndSysCorelDict{systemdict/Corel30Dict known
+{end}if/EndCorelLexDict where{pop EndCorelLexDict}if}bd AutoFlatness{/@ifl{dup
+currentflat exch sub 10 gt{
+([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush
+@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{
+{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill
+{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip
+/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat}
+bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse}
+bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped
+{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{
+/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit
+ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l
+/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp}
+bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1
+exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1
+sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type
+/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd
+/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def}
+ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{
+/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{
+dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2
+copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix
+/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd
+{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd}
+if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch
+load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA}
+{$dsa}ifelse $SCP @ss}if}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge
+{pop}{exch pop}ifelse}bd/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch
+rl neg 0 rl @cp}bd/currentscale{1 0 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1
+exch sub}bd/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}
+repeat pop}bd/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1
+roll sub neg exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index
+.114 mul add 4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb
+/setrgbcolor ld/GetRgb/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray
+ld/SetRgb2 systemdict/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor
+get def/SetHsb systemdict/sethsbcolor get def/GetHsb systemdict
+/currenthsbcolor get def/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor
+sub 3 1 roll SetHsb GetRgb2}bd/setcmykcolor where{pop/LumSepsDict where{pop
+/SetCmyk_5{LumSepsDict/setcmykcolor get exec}def}{/AldusSepsDict where{pop
+/SetCmyk_5{AldusSepsDict/setcmykcolor get exec}def}{/SetCmyk_5/setcmykcolor ld
+}ifelse}ifelse}{/SetCmyk_5{cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{
+pop/GetCmyk/currentcmykcolor ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse
+/setoverprint where{pop}{/setoverprint{/$op xd}bd}ifelse/currentoverprint where
+{pop}{/currentoverprint{$op}bd}ifelse/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1
+roll mul exch}repeat pop}ifelse}bd/@trp{exch pop 5 1 roll @tc_5}bd
+/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0 4 $ink_5 sub index exch pop 5 1
+roll pop pop pop pop SepsColor true eq{$ink_5 3 gt{1 sub neg SetGry}{0 0 0 4
+$ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry}ifelse}ifelse}bd
+/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array astore}bd}ifelse
+/Corelsetcustomcolor_exists false def/setcustomcolor where{pop
+/Corelsetcustomcolor_exists true def}if CorelIsSeps true eq CorelIsInRIPSeps
+false eq and{/Corelsetcustomcolor_exists false def}if
+Corelsetcustomcolor_exists false eq{/setcustomcolor{exch aload pop SepMode_5 0
+eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0}ifelse 6 1 roll
+5 rp 1 sub neg SetGry}ifelse}bd}if/@scc_5{dup type/booleantype eq{dup
+currentoverprint ne{setoverprint}{pop}ifelse}{1 eq setoverprint}ifelse dup _ eq
+{pop setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse
+SepMode_5 0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage
+where{pop/ColorImage{colorimage}def}{/ColorImage{/ncolors xd/$multi xd $multi
+true eq{ncolors 3 eq{/daqB xd/daqG xd/daqR xd pop pop exch pop abs{daqR pop
+daqG pop daqB pop}repeat}{/daqK xd/daqY xd/daqM xd/daqC xd pop pop exch pop abs
+{daqC pop daqM pop daqY pop daqK pop}repeat}ifelse}{/dataaq xd{dataaq ncolors
+dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index get 255
+div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g 255 mul
+cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv getinterval pop}{
+4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1 index get 255 div
+$dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div $dat 4 index 3
+add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1 roll put}for $dat
+0 $dat length ncolors idiv getinterval}if}ifelse}image}ifelse}bd}ifelse
+/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd
+/currentcmykcolor{GetCmyk}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd
+/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor}
+bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd
+/currentgray{currentrgbcolor rgb2g}bd/InsideDCS false def/IMAGE/image ld/image
+{InsideDCS{IMAGE}{/EPSDict where{pop SepMode_5 0 eq{IMAGE}{dup type/dicttype eq
+{dup/ImageType get 1 ne{IMAGE}{dup dup/BitsPerComponent get 8 eq exch
+/BitsPerComponent get 1 eq or currentcolorspace 0 get/DeviceGray eq and{
+CurrentInkName_5(Black)eq{IMAGE}{dup/DataSource get/TCC xd/Height get abs{TCC
+pop}repeat}ifelse}{IMAGE}ifelse}ifelse}{2 index 1 ne{CurrentInkName_5(Black)eq
+{IMAGE}{/TCC xd pop pop exch pop abs{TCC pop}repeat}ifelse}{IMAGE}ifelse}
+ifelse}ifelse}{IMAGE}ifelse}ifelse}bd}ifelse/WaldoColor_5 true def/$fm 0 def
+/wfill{1 $fm eq{fill}{eofill}ifelse}bd/@Pf{@sv SepMode_5 0 eq $Psc 0 ne or
+$ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o @scc_5 pop $ctm setmatrix 72
+1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn load exec}{1 SetGry
+wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if $fil
+1 eq{CorelPtrnDoFill}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$fil 4 eq
+{CorelShfillDoFill}{$t $c $m $y $k $n $o @scc_5{wfill}{@np}ifelse}ifelse}
+ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd/f{@cp F}bd/S{
+matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K
+$N $O @scc_5{matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse $SDF
+{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs F @gr S}bd/b{@cp B}bd/_E{
+5 array astore exch cvlit xd}bd/@cc{currentfile $dat readhexstring pop}bd/@sm{
+/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd/Bblly xd/Bbllx xd}bd/@c{
+@cp}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd}bd/tcc{@cc}def/@B{
+@gs S @gr F}bd/@b{@cp @B}bd/@sep{CurrentInkName_5(Composite)eq{/$ink_5 -1 def}
+{CurrentInkName_5(Cyan)eq{/$ink_5 0 def}{CurrentInkName_5(Magenta)eq{/$ink_5 1
+def}{CurrentInkName_5(Yellow)eq{/$ink_5 2 def}{CurrentInkName_5(Black)eq
+{/$ink_5 3 def}{/$ink_5 4 def}ifelse}ifelse}ifelse}ifelse}ifelse}bd/@whi{@gs
+-72000 dup m -72000 72000 l 72000 dup l 72000 -72000 l @cp 1 SetGry fill @gr}
+bd/@neg{[{1 exch sub}/exec cvx currenttransfer/exec cvx]cvx settransfer @whi}
+bd/deflevel 0 def/@sax{/deflevel deflevel 1 add def}bd/@eax{/deflevel deflevel
+dup 0 gt{1 sub}if def deflevel 0 gt{/eax load}{eax}ifelse}bd/eax{{exec}forall}
+bd/@rax{deflevel 0 eq{@rs @sv}if}bd systemdict/pdfmark known not{/pdfmark
+/cleartomark ld}if/wclip{1 $fm eq{clip}{eoclip}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3
+index 3 index l clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true
+def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg false def}
+ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string
+def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts 1 eq
+{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load $bts
+1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop}
+repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd $ngx $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $wid $hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse
+]$msimage false eq $ncl 1 eq or{/$dat $wid $bts mul $ncl mul 8 div ceiling cvi
+string def/@cc load false $ncl ColorImage}{$wid $bts mul 8 div ceiling cvi $ncl
+3 eq{dup dup/$dat1 exch string def/$dat2 exch string def/$dat3 exch string def
+/@cc1 load/@cc2 load/@cc3 load}{dup dup dup/$dat1 exch string def/$dat2 exch
+string def/$dat3 exch string def/$dat4 exch string def/@cc1 load/@cc2 load
+/@cc3 load/@cc4 load}ifelse true $ncl ColorImage}ifelse $SDF{$dsf $dsa $dsp
+@ss}if @gr $ctm setmatrix}bd/@cc1{currentfile $dat1 readhexstring pop}bd/@cc2{
+currentfile $dat2 readhexstring pop}bd/@cc3{currentfile $dat3 readhexstring pop
+}bd/@cc4{currentfile $dat4 readhexstring pop}bd/$msimage false def/COMP 0 def
+/MaskedImage false def L2?{/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx
+xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling
+cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK}
+ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub $ury $lly sub scale 8
+dict begin/ImageType 1 def/Width $wid def/Height $hei abs def/BitsPerComponent
+$bts def/Decode $ncl 1 eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}
+ifelse}ifelse def/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def
+/DataSource currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP
+2 eq{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa
+$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@I_3{@sm @gs @ii @np/$ury
+xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul
+$ncl mul 8 div ceiling cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq
+{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub
+$ury $lly sub scale/ImageDataDict 8 dict def ImageDataDict begin/ImageType 1
+def/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1
+eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def
+/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource
+currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq{
+/RunLengthDecode filter}if}ifelse def end/MaskedImageDict 7 dict def
+MaskedImageDict begin/ImageType 3 def/InterleaveType 3 def/MaskDict
+ImageMaskDict def/DataDict ImageDataDict def end MaskedImageDict image $SDF
+{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/@SetMask{/$mbts xd/$mhei xd/$mwid
+xd/ImageMaskDict 8 dict def ImageMaskDict begin/ImageType 1 def/Width $mwid def
+/Height $mhei abs def/BitsPerComponent $mbts def/DataSource maskstream def
+/ImageMatrix[$mwid 0 0 $mhei neg 0 $mhei 0 gt{$mhei}{0}ifelse]def/Decode[1 0]
+def end}bd/@daq{dup type/arraytype eq{{}forall}if}bd/@BMP{/@cc xd UseLevel 3 eq
+MaskedImage true eq and{7 -2 roll pop pop @I_3}{12 index 1 gt UseLevel 2 eq
+UseLevel 3 eq or and{7 -2 roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}{
+7 -2 roll pop pop @I}ifelse}ifelse}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/@p{/$fil 1 def 1 eq dup/$vectpat xd{/$pfrg true def}{@gs $t $c $m $y $k $n $o
+@scc_5/$pfrg xd @gr}ifelse/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd/$pn xd}bd
+/CorelPtrnDoFill{@gs $ctm setmatrix $pm concat CorelPtrnSetBBox wclip @sv Bburx
+Bbury $pm itransform/$tury xd/$turx xd Bbllx Bblly $pm itransform/$tlly xd
+/$tllx xd newpath $tllx $tlly m $tllx $tury l $turx $tury l $turx $tlly l $tllx
+$tlly m @cp pathbbox @rs/$tury xd/$turx xd/$tlly xd/$tllx xd/$wid $turx $tllx
+sub def/$hei $tury $tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc_5{wfill}if}{
+$t $c $m $y $k $n $o @scc_5{SepMode_5 0 eq $pfrg or{$tllx $tlly Tl $wid $hei
+scale <00> 8 1 false[8 0 0 1 0 0]{}imagemask}{/$bkg true def}ifelse}if}ifelse
+@gr $wid 0 gt $hei 0 gt and{$pn cvlit load aload pop/$pd xd 3 -1 roll sub
+/$phei xd exch sub/$pwid xd $wid $pwid div ceiling 1 add/$tlx xd $hei $phei div
+ceiling 1 add/$tly xd currentdict/CorelPtrnL2Pattern known $psy 0 eq and $psx 0
+eq and{CorelPtrnL2Pattern}{$psx 0 eq{CorelPtrnTileVeritcal}{CorelPtrnTileHoriz
+}ifelse}ifelse}if @gr @np/$bkg false def}bd/CorelPtrnSetBBox{pathbbox/$ury xd
+/$urx xd/$lly xd/$llx xd}bd/CorelPtrnSetFirstTile{$tllx $pxf add dup $tllx gt
+{$pwid sub}if/$tx xd $tury $pyf sub dup $tury lt{$phei add}if/$ty xd}bd/p{/$pm
+xd 7 rp/$pyf xd/$pxf xd/$pn xd/$fil 1 def}bd/CorelPtrnDraw{@ep}bd
+/CorelPtrnPutTile{@sv/$in true def 2 copy dup $lly le{/$in false def}if $phei
+sub $ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add $llx le{
+/$in false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl 0
+$phei rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 roll 3
+index sub Tl matrix currentmatrix/$ctm xd CorelPtrnDraw pop pop pop pop}{pop
+pop}ifelse @rs}bd/CorelPtrnTileHoriz{CorelPtrnSetFirstTile 0 1 $tly 1 sub{dup
+$psx mul $tx add{dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty
+exch sub 0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch CorelPtrnPutTile
+pop}for pop pop}for}bd/CorelPtrnTileVeritcal{CorelPtrnSetFirstTile 0 1 $tlx 1
+sub{dup $pwid mul $tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}
+{exit}ifelse}loop 0 1 $tly 1 sub{$phei mul 3 copy sub CorelPtrnPutTile pop}for
+pop pop}for}bd L2? UseLevel 2 ge and{/CorelPtrnL2Pattern{@sv[$pn cvlit load
+aload pop pop]$pwid $phei $pn cvlit load aload pop pop pop pop pathbbox pop pop
+2 index sub exch 3 index sub 4 -2 roll pop pop exch matrix identmatrix
+translate/PatternMatrix xd/PatternYStep xd/PatternXStep xd/PatternBBox xd
+currentdict/PatternMainDict xd <</PaintType 1/PatternType 1/TilingType 1/BBox
+PatternBBox/XStep PatternXStep/YStep PatternYStep/PaintProc{begin
+PatternMainDict begin $ctm currentmatrix pop 0 CorelPtrnDraw end end}bind >>
+PatternMatrix makepattern setpattern fill @rs}def}if
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+wCorel11Dict begin
+@BeginSysCorelDict
+2.6131 setmiterlimit
+1.00 setflat
+/$fst 128 def
+%%EndSetup
+
+%%Page: 1 1
+%LogicalPage: 1
+%%BeginPageSetup
+@sv
+@sm
+@sv
+%%EndPageSetup
+@rax %Note: Object
+147.81600 74.66400 428.47200 355.32000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+428.47200 216.43200 m
+286.70400 355.32000 L
+147.81600 213.62400 L
+286.70400 74.66400 L
+428.47200 216.43200 L
+@c
+B
+
+@rax %Note: Object
+286.70400 80.35200 422.78400 216.43200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.58 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.28800 216.43200 m
+422.78400 216.43200 L
+286.70400 80.35200 L
+286.70400 88.84800 L
+414.28800 216.43200 L
+@c
+B
+
+@rax %Note: Object
+153.50400 80.35200 286.70400 213.62400 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.51 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+153.50400 213.62400 m
+162.00000 213.62400 L
+286.70400 88.84800 L
+286.70400 80.35200 L
+153.50400 213.62400 L
+@c
+B
+
+@rax %Note: Object
+153.50400 213.62400 286.70400 349.63200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 341.20800 m
+286.70400 349.63200 L
+153.50400 213.62400 L
+162.00000 213.62400 L
+286.70400 341.20800 L
+@c
+B
+
+@rax %Note: Object
+286.70400 216.43200 422.78400 349.63200 @E
+ 0 O 0 @g
+0.73 0.00 0.99 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 349.63200 m
+286.70400 341.20800 L
+414.28800 216.43200 L
+422.78400 216.43200 L
+286.70400 349.63200 L
+@c
+B
+
+@rax %Note: Object
+162.00000 88.84800 414.28800 341.20800 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.40 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 88.84800 m
+414.28800 216.43200 L
+286.70400 341.20800 L
+162.00000 213.62400 L
+286.70400 88.84800 L
+@c
+B
+
+@rax %Note: Object
+165.81600 103.03200 423.72000 344.01600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+313.20000 312.84000 m
+321.69600 304.27200 L
+321.69600 304.27200 L
+263.08800 244.80000 L
+263.08800 304.27200 L
+268.77600 304.27200 L
+277.27200 312.84000 L
+277.27200 335.44800 L
+268.77600 344.01600 L
+174.31200 344.01600 L
+165.81600 335.44800 L
+165.81600 312.84000 L
+174.31200 304.27200 L
+180.93600 304.27200 L
+180.93600 111.52800 L
+191.30400 103.03200 L
+220.60800 103.03200 L
+423.72000 312.84000 L
+423.72000 335.44800 L
+415.22400 344.01600 L
+322.63200 344.01600 L
+313.20000 335.44800 L
+313.20000 312.84000 L
+@c
+B
+
+@rax %Note: Object
+171.43200 309.96000 271.58400 338.40000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+177.12000 309.96000 m
+171.43200 315.64800 L
+171.43200 332.64000 L
+177.12000 338.32800 L
+265.96800 338.40000 L
+271.58400 332.64000 L
+265.96800 329.90400 L
+263.08800 332.64000 L
+177.12000 318.52800 L
+177.12000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+187.48800 108.72000 194.11200 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+194.11200 108.72000 m
+187.48800 114.40800 L
+187.48800 310.03200 L
+194.11200 315.64800 L
+194.11200 108.72000 L
+@c
+B
+
+@rax %Note: Object
+247.03200 207.93600 341.56800 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+335.88000 309.96000 m
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 207.93600 L
+257.47200 230.61600 L
+335.88000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+177.12000 309.96000 196.05600 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+196.05600 318.45600 m
+194.11200 315.64800 L
+187.48800 309.96000 L
+177.12000 309.96000 L
+177.12000 321.33600 L
+196.05600 318.45600 L
+@c
+B
+
+@rax %Note: Object
+247.03200 208.00800 271.58400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+257.47200 309.96000 m
+257.47200 230.61600 L
+247.03200 208.00800 L
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+263.08800 332.64000 L
+271.58400 332.64000 L
+271.58400 315.64800 L
+265.96800 309.96000 L
+257.47200 309.96000 L
+@c
+B
+
+@rax %Note: Object
+318.88800 309.96000 418.10400 338.32800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+324.50400 309.96000 m
+318.88800 315.64800 L
+318.88800 332.64000 L
+325.44000 338.32800 L
+411.48000 338.32800 L
+418.10400 332.64000 L
+408.60000 324.14400 L
+324.50400 318.52800 L
+324.50400 309.96000 L
+@c
+B
+
+@rax %Note: Object
+194.11200 108.72000 418.10400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+418.10400 315.64800 m
+218.66400 108.72000 L
+194.11200 108.72000 L
+194.11200 117.21600 L
+212.11200 117.21600 L
+411.48000 321.33600 L
+408.60000 332.64000 L
+418.10400 332.64000 L
+418.10400 315.64800 L
+@c
+B
+
+@rax %Note: Object
+324.50400 309.96000 343.44000 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+343.44000 318.45600 m
+341.49600 315.64800 L
+335.88000 309.96000 L
+324.50400 309.96000 L
+324.50400 321.33600 L
+343.44000 318.45600 L
+@c
+B
+
+@rax %Note: Object
+177.12000 114.40800 412.41600 332.71200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+247.03200 208.00800 m
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+265.96800 329.90400 L
+263.08800 332.71200 L
+179.92800 332.71200 L
+177.12000 329.90400 L
+177.12000 318.52800 L
+179.92800 315.72000 L
+194.11200 315.72000 L
+194.11200 117.21600 L
+197.78400 114.40800 L
+213.98400 114.40800 L
+412.41600 321.33600 L
+412.41600 329.47200 L
+409.53600 332.71200 L
+327.38400 332.71200 L
+324.50400 329.90400 L
+324.50400 318.45600 L
+327.38400 315.64800 L
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 208.00800 L
+@c
+B
+
+@rax %Note: Object
+292.89600 185.18400 326.95200 213.55200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+298.58400 207.86400 m
+305.20800 213.55200 L
+322.20000 213.55200 L
+326.95200 207.86400 L
+321.26400 190.87200 L
+314.71200 185.18400 L
+297.72000 185.18400 L
+292.89600 190.87200 L
+298.58400 207.86400 L
+@c
+B
+
+@rax %Note: Object
+304.27200 114.33600 424.22400 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+304.27200 114.33600 m
+321.33600 165.31200 L
+315.64800 165.31200 L
+321.33600 182.37600 L
+346.75200 182.37600 L
+352.44000 176.68800 L
+356.25600 176.68800 L
+361.87200 182.37600 L
+380.80800 182.37600 L
+386.49600 176.68800 L
+390.24000 176.68800 L
+395.92800 182.37600 L
+416.66400 182.37600 L
+424.22400 171.00000 L
+411.84000 130.68000 L
+417.45600 130.68000 L
+411.98400 114.33600 L
+377.92800 114.33600 L
+391.24800 154.00800 L
+382.75200 154.00800 L
+374.90400 130.82400 L
+380.52000 130.82400 L
+375.19200 114.33600 L
+341.13600 114.33600 L
+354.38400 154.00800 L
+345.88800 154.00800 L
+337.96800 130.68000 L
+343.65600 130.68000 L
+338.32800 114.33600 L
+304.27200 114.33600 L
+@c
+B
+
+@rax %Note: Object
+311.83200 120.02400 418.46400 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.07200 176.68800 m
+418.46400 170.42400 L
+404.49600 125.64000 L
+410.11200 125.64000 L
+408.24000 120.02400 L
+385.56000 120.02400 L
+398.80800 159.69600 L
+378.93600 159.69600 L
+367.63200 125.64000 L
+373.24800 125.64000 L
+371.37600 120.02400 L
+348.69600 120.02400 L
+361.94400 159.69600 L
+342.07200 159.69600 L
+330.76800 125.64000 L
+336.45600 125.64000 L
+334.51200 120.02400 L
+311.83200 120.02400 L
+328.89600 171.00000 L
+323.20800 171.00000 L
+325.08000 176.68800 L
+345.88800 176.68800 L
+351.57600 171.00000 L
+357.19200 171.00000 L
+362.88000 176.68800 L
+379.87200 176.68800 L
+385.56000 171.00000 L
+391.24800 171.00000 L
+396.93600 176.68800 L
+414.07200 176.68800 L
+@c
+B
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+318.45600 182.37600 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+F
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+S
+
+@rax %Note: Object
+274.96800 120.02400 310.89600 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+297.64800 120.02400 m
+299.52000 125.64000 L
+293.83200 125.64000 L
+310.89600 176.68800 L
+287.28000 176.68800 L
+285.33600 171.00000 L
+291.96000 171.00000 L
+274.96800 120.02400 L
+297.64800 120.02400 L
+@c
+B
+
+@rax %Note: Object
+299.52000 190.87200 320.32800 207.86400 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+316.51200 193.68000 m
+320.32800 205.05600 L
+318.45600 207.86400 L
+307.08000 207.86400 L
+303.33600 205.05600 L
+299.52000 193.68000 L
+301.46400 190.87200 L
+312.84000 190.87200 L
+316.51200 193.68000 L
+@c
+B
+
+%%PageTrailer
+@rs
+@rs
+%%Trailer
+@EndSysCorelDict
+end
+%%DocumentSuppliedResources: procset wCorel11Dict 11.0 0
+%%EOF
diff --git a/runtime/tutor/tutor.sv.utf-8 b/runtime/tutor/tutor.sv.utf-8
new file mode 100644
index 000000000..967fc82a7
--- /dev/null
+++ b/runtime/tutor/tutor.sv.utf-8
@@ -0,0 +1,830 @@
+===============================================================================
+= V ä l k o m m e n t i l l h a n d l e d n i n g e n i V i m - Ver. 1.5 =
+===============================================================================
+
+ Vim är en väldigt kraftfull redigerare som har många kommandon, alltför
+ många att förklara i en handledning som denna. Den här handledningen är
+ gjord för att förklara tillräckligt många kommandon så att du enkelt ska
+ kunna använda Vim som en redigerare för alla ändamål.
+
+ Den beräknade tiden för att slutföra denna handledning är 25-30 minuter,
+ beroende på hur mycket tid som läggs ned på experimentering.
+
+ Kommandona i lektionerna kommer att modifiera texten. Gör en kopia av den
+ här filen att öva på (om du startade "vimtutor är det här redan en kopia).
+
+ Det är viktigt att komma ihåg att den här handledningen är konstruerad
+ att lära vid användning. Det betyder att du måste köra kommandona för att
+ lära dig dem ordentligt. Om du bara läser texten så kommer du att glömma
+ kommandona!
+
+ Försäkra dig nu om att din Caps-Lock tangent INTE är aktiv och tryck på
+ j-tangenten tillräckligt många gånger för att förflytta markören så att
+ Lektion 1.1 fyller skärmen helt.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.1: FLYTTA MARKÖREN
+
+
+ ** För att flytta markören, tryck på tangenterna h,j,k,l som indikerat. **
+ ^
+ k Tips:
+ < h l > h-tangenten är till vänster och flyttar till vänster.
+ j l-tangenten är till höger och flyttar till höger.
+ v j-tangenten ser ut som en pil ned.
+ 1. Flytta runt markören på skärmen tills du känner dig bekväm.
+
+ 2. Håll ned tangenten pil ned (j) tills att den repeterar.
+---> Nu vet du hur du tar dig till nästa lektion.
+
+ 3. Flytta till Lektion 1.2, med hjälp av ned tangenten.
+
+Notera: Om du är osäker på någonting du skrev, tryck <ESC> för att placera dig
+ dig i Normal-läge. Skriv sedan om kommandot.
+
+Notera: Piltangenterna borde också fungera. Men om du använder hjkl så kommer
+ du att kunna flytta omkring mycket snabbare, när du väl vant dig vid
+ det.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.2: STARTA OCH AVSLUTA VIM
+
+
+ !! NOTERA: Innan du utför någon av punkterna nedan, läs hela lektionen!!
+
+ 1. Tryck <ESC>-tangenten (för att se till att du är i Normal-läge).
+
+ 2. Skriv: :q! <ENTER>.
+
+---> Detta avslutar redigeraren UTAN att spara några ändringar du gjort.
+ Om du vill spara ändringarna och avsluta skriv:
+ :wq <ENTER>
+
+ 3. När du ser skal-prompten, skriv kommandot som tog dig in i den här
+ handledningen. Det kan vara: vimtutor <ENTER>
+ Normalt vill du använda: vim tutor <ENTER>
+
+---> 'vim' betyder öppna redigeraren vim, 'tutor' är filen du vill redigera.
+
+ 4. Om du har memorerat dessa steg och känner dig självsäker, kör då stegen
+ 1 till 3 för att avsluta och starta om redigeraren. Flytta sedan ned
+ markören till Lektion 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.3: TEXT REDIGERING - BORTTAGNING
+
+
+** När du är i Normal-läge tryck x för att ta bort tecknet under markören. **
+
+ 1. Flytta markören till raden nedan med markeringen --->.
+
+ 2. För att rätta felen, flytta markören tills den står på tecknet som ska
+ tas bort. fix the errors, move the cursor until it is on top of the
+
+ 3. Tryck på x-tangenten för att ta bort det felaktiga tecknet.
+
+ 4. Upprepa steg 2 till 4 tills meningen är korrekt.
+
+---> Kkon hoppadee övverr måånen.
+
+ 5. Nu när raden är korrekt, gå till Lektion 1.4.
+
+NOTERA: När du går igenom den här handledningen, försök inte att memorera, lär
+ genom användning.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.4: TEXT REDIGERING - INFOGNING
+
+
+ ** När du är i Normal-läge tryck i för att infoga text. **
+
+ 1. Flytta markören till den första raden nedan med markeringen --->.
+
+ 2. För att göra den första raden likadan som den andra, flytta markören till
+ det första tecknet EFTER där text ska infogas.
+
+ 3. Tryck i och skriv in det som saknas.
+
+ 4. När du rättat ett fel tryck <ESC> för att återgå till Normal-läge.
+ Upprepa steg 2 till 4 för att rätta meningen.
+
+---> Det sakns här .
+---> Det saknas lite text från den här raden.
+
+ 5. När du känner dig bekväm med att infoga text, gå till sammanfattningen
+ nedan.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 1 SAMMANFATTNING
+
+
+ 1. Markören flyttas genom att använda piltangenterna eller hjkl-tangenterna.
+ h (vänster) j (ned) k (upp) l (höger)
+
+ 2. För att starta Vim (från %-prompten) skriv: vim FILNAMN <ENTER>
+
+ 3. För att avsluta Vim skriv: <ESC> :q! <ENTER> för att kasta ändringar.
+ ELLER skriv: <ESC> :wq <ENTER> för att spara ändringar.
+
+ 4. För att ta bort tecknet under markören i Normal-läge skriv: x
+
+ 5. För att infoga text vid markören i Normal-läge skriv:
+ i skriv in text <ESC>
+
+NOTERA: Genom att trycka <ESC> kommer du att placeras i Normal-läge eller
+ avbryta ett delvis färdigskrivet kommando.
+
+Fortsätt nu med Lektion 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.1: BORTTAGNINGSKOMMANDON
+
+
+ ** Skriv dw för att radera till slutet av ett ord. **
+
+ 1. Tryck <ESC> för att försäkra dig om att du är i Normal-läge.
+
+ 2. Flytta markören till raden nedan markerad --->.
+
+ 3. Flytta markören till början av ett ord som måste raderas.
+
+ 4. Skriv dw för att radera ordet.
+
+ NOTERA: Bokstäverna dw kommer att synas på den sista raden på skärmen när
+ du skriver dem. Om du skrev något fel, tryck <ESC> och börja om.
+
+---> Det är ett några ord roliga att som inte hör hemma i den här meningen.
+
+ 5. Upprepa stegen 3 och 4 tills meningen är korrekt och gå till Lektion 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.2: FLER BORTTAGNINGSKOMMANDON
+
+
+ ** Skriv d$ för att radera till slutet på raden. **
+
+ 1. Tryck <ESC> för att försäkra dig om att du är i Normal-läge.
+
+ 2. Flytta markören till raden nedan markerad --->.
+
+ 3. Flytta markören till slutet på den rätta raden (EFTER den första . ).
+
+ 4. Skriv d$ för att radera till slutet på raden.
+
+---> Någon skrev slutet på den här raden två gånger. den här raden två gånger.
+
+
+ 5. Gå vidare till Lektion 2.3 för att förstå vad det är som händer.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: KOMMANDON OCH OBJEKT
+
+
+ Syntaxen för d raderingskommandot är följande:
+
+ [nummer] d objekt ELLER d [nummer] objekt
+ Var:
+ nummer - är antalet upprepningar av kommandot (valfritt, standard=1).
+ d - är kommandot för att radera.
+ objekt - är vad kommandot kommer att operera på (listade nedan).
+
+ En kort lista över objekt:
+ w - från markören till slutet av ordet, inklusive blanksteget.
+ e - från markören till slutet av ordet, EJ inklusive blanksteget.
+ $ - från markören till slutet på raden.
+
+NOTERA: För den äventyrslystne, genom att bara trycka på objektet i
+ Normal-läge (utan kommando) så kommer markören att flyttas som
+ angivet i objektlistan.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.4: ETT UNDANTAG TILL 'KOMMANDO-OBJEKT'
+
+
+ ** Skriv dd för att radera hela raden. **
+
+ På grund av hur vanligt det är att ta bort hela rader, valde upphovsmannen
+ till Vi att det skulle vara enklare att bara trycka d två gånger i rad för
+ att ta bort en rad.
+
+ 1. Flytta markören till den andra raden i frasen nedan.
+ 2. Skriv dd för att radera raden.
+ 3. Flytta nu till den fjärde raden.
+ 4. Skriv 2dd (kom ihåg: nummer-kommando-objekt) för att radera de två
+ raderna.
+
+ 1) Roses are red,
+ 2) Mud is fun,
+ 3) Violets are blue,
+ 4) I have a car,
+ 5) Clocks tell time,
+ 6) Sugar is sweet
+ 7) And so are you.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.5: ÅNGRA-KOMMANDOT
+
+
+** Skriv u för att ångra det senaste kommandona, U för att fixa en hel rad. **
+
+ 1. Flytta markören till slutet av raden nedan markerad ---> och placera den
+ på det första felet.
+ 2. Skriv x för att radera den första felaktiga tecknet.
+ 3. Skriv nu u för att ångra det senaste körda kommandot.
+ 4. Rätta den här gången alla felen på raden med x-kommandot.
+ 5. Skriv nu U för att återställa raden till dess ursprungliga utseende.
+ 6. Skriv nu u några gånger för att ångra U och tidigare kommandon.
+ 7. Tryck nu CTRL-R (håll inne CTRL samtidigt som du trycker R) några gånger
+ för att upprepa kommandona (ångra ångringarna).
+
+---> Fiixa felen ppå deen häär meningen och återskapa dem med ångra.
+
+ 8. Det här är väldigt användbara kommandon. Gå nu vidare till
+ Lektion 2 Sammanfattning.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 2 SAMMANFATTNING
+
+
+ 1. För att radera från markören till slutet av ett ord skriv: dw
+
+ 2. För att radera från markören till slutet av en rad skriv: d$
+
+ 3. För att radera en hel rad skriv: dd
+
+ 4. Syntaxen för ett kommando i Normal-läge är:
+
+ [nummer] kommando objekt ELLER kommando [nummer] objekt
+ där:
+ nummer - är hur många gånger kommandot kommandot ska repeteras
+ kommando - är vad som ska göras, t.ex. d för att radera
+ objekt - är vad kommandot ska operera på, som t.ex. w (ord),
+ $ (till slutet av raden), etc.
+
+ 5. För att ångra tidigare kommandon, skriv: u (litet u)
+ För att ångra alla tidigare ändringar på en rad skriv: U (stort U)
+ För att ångra ångringar tryck: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.1: KLISTRA IN-KOMMANDOT
+
+
+ ** Skriv p för att klistra in den senaste raderingen efter markören. **
+
+ 1. Flytta markören till den första raden i listan nedan.
+
+ 2. Skriv dd för att radera raden och lagra den i Vims buffert.
+
+ 3. Flytta markören till raden OVANFÖR där den raderade raden borde vara.
+
+ 4. När du är i Normal-läge, skriv p för att byta ut raden.
+
+ 5. Repetera stegen 2 till 4 för att klistra in alla rader i rätt ordning.
+
+ d) Kan du lära dig också?
+ b) Violetter är blå,
+ c) Intelligens fås genom lärdom,
+ a) Rosor är röda,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.2: ERSÄTT-KOMMANDOT
+
+
+ ** Skriv r och ett tecken för att ersätta tecknet under markören. **
+
+ 1. Flytta markören till den första raden nedan markerad --->.
+
+ 2. Flytta markören så att den står på det första felet.
+
+ 3. Skriv r och sedan det tecken som borde ersätta felet.
+
+ 4. Repetera steg 2 och 3 tills den första raden är korrekt.
+
+---> När drn här ruden skrevs, trickte någon på fil knappar!
+---> När den här raden skrevs, tryckte någon på fel knappar!
+
+ 5. Gå nu vidare till Lektion 3.2.
+
+NOTERA: Kom ihåg att du skall lära dig genom användning, inte genom memorering.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.3: ÄNDRA-KOMMANDOT
+
+
+ ** För att ändra en del eller ett helt ord, skriv cw . **
+
+ 1. Flytta markören till den första redan nedan markerad --->.
+
+ 2. Placera markören på d i rdrtn.
+
+ 3. Skriv cw och det rätta ordet (i det här fallet, skriv "aden".)
+
+ 4. Tryck <ESC> och flytta markören till nästa fel (det första tecknet som
+ ska ändras.)
+
+ 5. Repetera steg 3 och 4 tills den första raden är likadan som den andra.
+
+---> Den här rdrtn har några otf som brhotrt ändras mrf ändra-komjendit.
+---> Den här raden har några ord som behöver ändras med ändra-kommandot.
+
+Notera att cw inte bara ändrar ordet, utan även placerar dig i infogningsläge.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.4: FLER ÄNDRINGAR MED c
+
+
+ ** Ändra-kommandot används på samma objekt som radera. **
+
+ 1. Ändra-kommandot fungerar på samma sätt som radera. Syntaxen är:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+ 2. Objekten är också de samma, som t.ex. w (ord), $ (slutet av raden), etc.
+
+ 3. Flytta till den första raden nedan markerad -->.
+
+ 4. Flytta markören till det första felet.
+
+ 5. Skriv c$ för att göra resten av raden likadan som den andra och tryck
+ <ESC>.
+
+---> Slutet på den här raden behöver hjälp med att få den att likna den andra.
+---> Slutet på den här raden behöver rättas till med c$-kommandot.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 3 SAMMANFATTNING
+
+
+ 1. För att ersätta text som redan har blivit raderad, skriv p .
+ Detta klistrar in den raderade texten EFTER markören (om en rad raderades
+ kommer den att hamna på raden under markören.
+
+ 2. För att ersätta tecknet under markören, skriv r och sedan tecknet som
+ kommer att ersätta orginalet.
+
+ 3. Ändra-kommandot låter dig ändra det angivna objektet från markören till
+ slutet på objektet. eg. Skriv cw för att ändra från markören till slutet
+ på ordet, c$ för att ändra till slutet på en rad.
+
+ 4. Syntaxen för ändra-kommandot är:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+Gå nu till nästa lektion.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.1: POSITION OCH FILSTATUS
+
+
+ ** Tryck CTRL-g för att visa din position i filen och filstatusen.
+ Tryck SHIFT-G för att flytta till en rad i filen. **
+
+ Notera: Läsa hela den lektion innan du utför något av stegen!!
+
+ 1. Håll ned Ctrl-tangenten och tryck g . En statusrad med filnamn och raden
+ du befinner dig på kommer att synas. Kom ihåg radnummret till Steg 3.
+
+ 2. Tryck shift-G för att flytta markören till slutet på filen.
+
+ 3. Skriv in nummret på raden du var på och tryck sedan shift-G. Detta kommer
+ att ta dig tillbaka till raden du var på när du först tryckte Ctrl-g.
+ (När du skriver in nummren, kommer de INTE att visas på skärmen.)
+
+ 4. Om du känner dig säker på det här, utför steg 1 till 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.2: SÖK-KOMMANDOT
+
+
+ ** Skriv / följt av en fras för att söka efter frasen. **
+
+ 1. I Normal-läge skriv /-tecknet. Notera att det och markören blir synlig
+ längst ned på skärmen precis som med :-kommandot.
+
+ 2. Skriv nu "feeel" <ENTER>. Det här är ordet du vill söka efter.
+
+ 3. För att söka efter samma fras igen, tryck helt enkelt n .
+ För att söka efter samma fras igen i motsatt riktning, tryck Shift-N .
+
+ 4. Om du vill söka efter en fras bakåt i filen, använd kommandot ? istället
+ för /.
+
+---> "feeel" är inte rätt sätt att stava fel: feeel är ett fel.
+
+Notera: När sökningen når slutet på filen kommer den att fortsätta vid början.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.3: SÖKNING EFTER MATCHANDE PARENTESER
+
+
+ ** Skriv % för att hitta en matchande ),], or } . **
+
+ 1. Placera markören på någon av (, [, or { på raden nedan markerad --->.
+
+ 2. Skriv nu %-tecknet.
+
+ 3. Markören borde vara på den matchande parentesen eller hakparentesen.
+
+ 4. Skriv % för att flytta markören tillbaka till den första hakparentesen
+ (med matchning).
+
+---> Det ( här är en testrad med (, [ ] och { } i den. ))
+
+Notera: Det här är väldigt användbart vid avlusning av ett program med icke
+ matchande parenteser!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.4: ETT SÄTT ATT ÄNDRA FEL
+
+
+ ** Skriv :s/gammalt/nytt/g för att ersätta "gammalt" med "nytt". **
+
+ 1. Flytta markören till raden nedan markerad --->.
+
+ 2. Skriv :s/denn/den <ENTER> . Notera att det här kommandot bara ändrar den
+ första förekomsten på raden.
+
+ 3. Skriv nu :s/denn/den/g vilket betyder ersätt globalt på raden.
+ Det ändrar alla förekomster på raden.
+
+---> denn bästa tiden att se blommor blomma är denn på våren.
+
+ 4. För att ändra alla förekomster av en teckensträng mellan två rader,
+ skriv :#,#s/gammalt/nytt/g där #,# är de två radernas radnummer.
+ Skriv :%s/gammtl/nytt/g för att ändra varje förekomst i hela filen.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 4 SAMMANFATTNING
+
+
+ 1. Ctrl-g visar din position i filen och filstatusen.
+ Shift-G flyttar till slutet av filen. Ett radnummer följt Shift-G
+ flyttar till det radnummret.
+
+ 2. Skriver man / följt av en fras söks det FRAMMÅT efter frasen.
+ Skriver man ? följt av en fras söks det BAKÅT efter frasen.
+ Efter en sökning skriv n för att hitta nästa förekomst i samma riktning
+ eller Shift-N för att söka i den motsatta riktningen.
+
+ 3. Skriver man % när markören är på ett (,),[,],{, eller } hittas dess
+ matchande par.
+
+ 4. För att ersätta den första gammalt med nytt på en rad skriv :s/gammlt/nytt
+ För att ersätta alla gammlt med nytt på en rad skriv :s/gammlt/nytt/g
+ För att ersätta fraser mellan rad # och rad # skriv :#,#s/gammlt/nytt/g
+ För att ersätta alla förekomster i filen skriv :%s/gammlt/nytt/g
+ För att bekräfta varje gång lägg till "c" :%s/gammlt/nytt/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.1: HUR MAN KÖR ETT EXTERNT KOMMANDO
+
+
+ ** Skriv :! följt av ett externt kommando för att köra det kommandot. **
+
+ 1. Skriv det välbekanta kommandot : för att placera markören längst ned
+ på skärmen på skärmen. Detta låter dig skriva in ett kommando.
+
+ 2. Skriv nu ! (utropstecken). Detta låter dig köra ett godtyckligt externt
+ skalkommando.
+
+ 3. Som ett exempel skriv ls efter ! och tryck sedan <ENTER>. Detta kommer
+ att visa dig en listning av din katalog, precis som om du kört det vid
+ skalprompten. Använd :!dir om ls inte fungerar.
+
+Notera: Det är möjligt att köra vilket externt kommando som helst på det här
+ sättet.
+
+Notera: Alla :-kommandon måste avslutas med att trycka på <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.2: MER OM ATT SPARA FILER
+
+
+ ** För att spara ändringar gjorda i en fil, skriv :w FILNAMN. **
+
+ 1. Skriv :!dir eller :!ls för att få en listning av din katalog.
+ Du vet redan att du måste trycka <ENTER> efter det här.
+
+ 2. Välj ett filnamn som inte redan existerar, som t.ex. TEST.
+
+ 3. Skriv nu: :w TEST (där TEST är filnamnet du valt.)
+
+ 4. Det här sparar hela filen (Vim handledningen) under namnet TEST.
+ För att verifiera detta, skriv :!dir igen för att se din katalog
+
+Notera: Om du skulle avsluta Vim och sedan öppna igen med filnamnet TEST så
+ skulle filen vara en exakt kopia av handledningen när du sparade den.
+
+ 5. Ta nu bort filen genom att skriva (MS-DOS): :!del TEST
+ eller (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.3: ETT SELEKTIVT SPARA-KOMMANDO
+
+
+ ** För att spara en del av en fil, skriv :#,# w FILNAMN **
+
+ 1. Ännu en gång, skriv :!dir eller :!ls för att få en listning av din
+ katalog och välj ett passande filnamn som t.ex. TEST.
+
+ 2. Flytta markören högst upp på den här sidan och tryck Ctrl-g för att få
+ reda på radnumret på den raden. KOM IHÅG DET NUMMRET!
+
+ 3. Flytta nu längst ned på sidan och skriv Ctrl-g igen.
+ KOM IHÅG DET RADNUMMRET OCKSÅ!
+
+ 4. För att BARA spara en sektion till en fil, skriv :#,# w TEST
+ där #,# är de två nummren du kom ihåg (toppen, botten) och TEST är
+ ditt filnamn.
+
+ 5. Ännu en gång, kolla så att filen är där med :!dir men radera den INTE.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.4: TA EMOT OCH FÖRENA FILER
+
+
+ ** För att infoga innehållet av en fil, skriv :r FILNAMN **
+
+ 1. Skriv :!dir för att försäkra dig om att TEST-filen från tidigare
+ fortfarande är kvar.
+
+ 2. Placera markören högst upp på den här sidan.
+
+NOTERA: Efter att du kört Steg 3 kommer du att se Lektion 5.3.
+ Flytta då NED till den här lektionen igen.
+
+ 3. Ta nu emot din TEST-fil med kommandot :r TEST där TEST är namnet på
+ filen.
+
+NOTERA: Filen du tar emot placeras där markören är placerad.
+
+ 4. För att verifiera att filen togs emot, gå tillbaka och notera att det nu
+ finns två kopior av Lektion 5.3, orginalet och filversionen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 5 SAMMANFATTNING
+
+
+ 1. :!kommando kör ett externt kommando.
+
+ Några användbara exempel är:
+ (MS-DOS) (Unix)
+ :!dir :!ls - visar en kataloglistning.
+ :!del FILNAMN :!rm FILNAMN - tar bort filen FILNAMN.
+
+ 2. :w FILNAMN sparar den aktuella Vim-filen med namnet FILNAMN.
+
+ 3. :#,#w FILNAMN sparar raderna # till # i filen FILNAMN.
+
+ 4. :r FILNAMN tar emot filen FILNAMN och infogar den i den aktuella filen
+ efter markören.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.1: ÖPPNA-KOMMANDOT
+
+
+ ** Skriv o för att öppna en rad under markören och placera dig i
+ Infoga-läge. **
+
+ 1. Flytta markören till raden nedan markerad --->.
+
+ 2. Skriv o (litet o) för att öppna upp en rad NEDANFÖR markören och placera
+ dig i Infoga-mode.
+
+ 3. Kopiera nu raden markerad ---> och tryck <ESC> för att avsluta
+ Infoga-läget.
+
+---> Efter du skrivit o placerad markören på en öppen rad i Infoga-läge.
+
+ 4. För att öppna upp en rad OVANFÖR markören, skriv ett stort O , istället
+ för ett litet o. Pröva detta på raden nedan.
+Öppna upp en rad ovanför denna genom att trycka Shift-O när markören står här.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.2: LÄGG TILL-KOMMANDOT
+
+
+ ** Skriv a för att infoga text EFTER markören. **
+
+ 1. Flytta markören till slutet av den första raden nedan markerad ---> genom
+ att skriv $ i Normal-läge.
+
+ 2. Skriv ett a (litet a) för att lägga till text EFTER tecknet under
+ markören. (Stort A lägger till i slutet av raden.)
+
+Notera: Detta undviker att behöva skriva i , det sista tecknet, texten att
+ infoga, <ESC>, högerpil, och slutligen, x, bara för att lägga till i
+ slutet på en rad!
+
+ 3. Gör nu färdigt den första raden. Notera också att lägga till är likadant
+ som Infoga-läge, enda skillnaden är positionen där texten blir infogad.
+
+---> Här kan du träna
+---> Här kan du träna på att lägga till text i slutet på en rad.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.3: EN ANNAN VERSION AV ERSÄTT
+
+
+ ** Skriv ett stort R för att ersätta fler än ett tecken. **
+
+ 1. Flytta markören till den första raden nedan markerad --->.
+
+ 2. Placera markören vid början av det första ordet som är annorlunda jämfört
+ med den andra raden markerad ---> (ordet "sista").
+
+ 3. Skriv nu R och ersätt resten av texten på den första raden genom att
+ skriva över den gamla texten så att den första raden blir likadan som
+ den andra.
+
+---> För att få den första raden lika som den sista, använd tangenterna.
+---> För att få den första raden lika som den andra, skriv R och den nya texten.
+
+ 4. Notera att när du trycker <ESC> för att avsluta, så blir eventuell
+ oförändrad text kvar.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.4: SÄTT FLAGGOR
+
+ ** Sätt en flagga så att en sökning eller ersättning ignorerar storlek **
+
+ 1. Sök efter "ignore" genom att skriva:
+ /ignore
+ Repetera flera gånger genom att trycka på n-tangenten
+
+ 2. Sätt 'ic' (Ignore Case) flaggan genom att skriva:
+ :set ic
+
+ 3. Sök nu efter "ignore" igen genom att trycka: n
+ Repeat search several more times by hitting the n key
+
+ 4. Sätt 'hlsearch' and 'incsearch' flaggorna:
+ :set hls is
+
+ 5. Skriv nu in sök-kommandot igen, och se vad som händer:
+ /ignore
+
+ 6. För att ta bort framhävningen av träffar, skriv
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 6 SAMMANFATTNING
+
+
+ 1. Genom att skriva o öpnnas en rad NEDANFÖR markören och markören placeras
+ på den öppna raden i Infoga-läge.
+ Genom att skriva ett stort O öppnas raden OVANFÖR raden som markören är
+ på.
+
+ 2. Skriv ett a för att infoga text EFTER tecknet som markören står på.
+ Genom att skriva ett stort A läggs text automatiskt till i slutet på
+ raden.
+
+ 3. Genom att skriva ett stort R hamnar du i Ersätt-läge till <ESC> trycks
+ för att avsluta.
+
+ 4. Genom att skriva ":set xxx" sätts flaggan "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 7: ON-LINE HJÄLP-KOMMANDON
+
+
+ ** Använd on-line hjälpsystemet **
+
+ Vim har ett omfattande on-line hjälpsystem. För att komma igång pröva ett av
+ dessa tre:
+ - tryck <HELP> tangenten (om du har någon)
+ - tryck <F1> tangenten (om du har någon)
+ - skriv :help <ENTER>
+
+ Skriv :q <ENTER> för att stränga hjälpfönstret.
+
+ Du kan hitta hjälp om nästan allting, genom att ge ett argument till
+ ":help" kommandot. Pröva dessa (glöm inte att trycka <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 8: SKAPA ETT UPPSTARTSSKRIPT
+
+ ** Aktivera Vim- funktioner **
+
+ Vim har många fler funktioner än Vi, men de flesta av dem är inaktiverade som
+ standard. För att börja använda fler funktioner måste du skapa en "vimrc"-fil.
+
+ 1. Börja redigera "vimrc"-filen, detta beror på ditt system:
+ :edit ~/.vimrc för Unix
+ :edit $VIM/_vimrc för MS-Windows
+
+ 2. Läs nu texten i exempel "vimrc"-filen:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Spara filen med:
+
+ :write
+
+ Nästa gång du startar Vim kommer den att använda syntaxframhävning.
+ Du kan lägga till alla inställningar du föredrar till den här "vimrc"-filen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Detta avslutar handledningen i Vim. Den var avsedd att ge en kort översikt av
+ redigeraren Vim, bara tillräckligt för att du ska kunna använda redigeraren
+ relativt enkelt. Den är långt ifrån komplett eftersom Vim har många många fler
+ kommandon. Läs användarmanualen härnäst: ":help user-manual".
+
+ För vidare läsning rekommenderas den här boken:
+ Vim - Vi Improved - av Steve Oualline
+ Förlag: New Riders
+ Den första boken som är endast behandlar Vim. Speciellt användbar för
+ nybörjare. Det finns många exempel och bilder.
+ Se http://iccf-holland.org/click5.html
+
+ Den här boken är äldre och behandlar mer Vi än Vim, men rekommenderas också:
+ Learning the Vi Editor - av Linda Lamb
+ Förlag: O'Reilly & Associates Inc.
+ Det är en bra bok för att lära sig nästan allt som du vill kunna göra med Vi.
+ Den sjätte upplagan inkluderar också information om Vim.
+
+ Den här handledningen är skriven av Michael C. Pierce och Robert K. Ware,
+ Colorado School of Mines med idéer från Charles Smith,
+ Colorado State University. E-post: bware@mines.colorado.edu.
+
+ Modifierad för Vim av Bram Moolenaar.
+ Översatt av Johan Svedberg <johan@svedberg.com>
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.vi.utf-8 b/runtime/tutor/tutor.vi.utf-8
new file mode 100644
index 000000000..ea7142ad7
--- /dev/null
+++ b/runtime/tutor/tutor.vi.utf-8
@@ -0,0 +1,812 @@
+===============================================================================
+= Xin chào mừng bạn đến với Hướng dẫn dùng Vim - Phiên bản 1.5 =
+===============================================================================
+ Vim là một trình soạn thảo rất mạnh. Vim có rất nhiều câu lệnh,
+ chính vì thế không thể trình bày hết được trong cuốn hướng dẫn này.
+ Cuốn hướng dẫn chỉ đưa ra những câu lệnh để giúp bạn sử dụng Vim
+ được dễ dàng hơn. Đây cũng chính là mục đich của sách
+
+ Cần khoảng 25-30 phút để hoàn thành bài học, phụ thuộc vào thời
+ gian thực hành.
+
+ Các câu lệnh trong bài học sẽ thay đổi văn bản này. Vì thế hãy tạo
+ một bản sao của tập tin này để thực hành (nếu bạn dùng "vimtutor"
+ thì đây đã là bản sao).
+
+ Hãy nhớ rằng hướng dẫn này viết với nguyên tắc "học đi đôi với hành".
+ Có nghĩa là bạn cần chạy các câu lệnh để học chúng. Nếu chỉ đọc, bạn
+ sẽ quên các câu lệnh!
+
+ Bây giờ, cần chắc chắn là phím Shift KHÔNG bị nhấn và hãy nhấn phím
+ j đủ số lần cần thiết (di chuyển con trỏ) để Bài 1.1 hiện ra đầy đủ
+ trên màn hình.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.1: DI CHUYỂN CON TRỎ
+
+
+ ** Để di chuyển con trỏ, nhấn các phím h,j,k,l như đã chỉ ra. **
+ ^
+ k Gợi ý: phím h ở phía trái và di chuyển sang trái.
+ < h l > phím l ở bên phải và di chuyển sang phải.
+ j phím j trong như một mũi tên chỉ xuống
+ v
+ 1. Di chuyển con trỏ quanh màn hình cho đến khi bạn quen dùng.
+
+ 2. Nhấn và giữ phím (j) cho đến khi nó lặp lại.
+---> Bây giờ bạn biết cách chuyển tới bài học thứ hai.
+
+ 3. Sử dụng phím di chuyển xuống bài 1.2.
+
+Chú ý: Nếu bạn không chắc chắn về những gì đã gõ, hãy nhấn <ESC> để chuyển vào
+ chế độ Câu lệnh, rồi gõ lại những câu lệnh mình muốn.
+
+Chú ý: Các phím mũi tên cũng làm việc. Nhưng một khi sử dụng thành thạo hjkl,
+ bạn sẽ di chuyển con trỏ nhanh hơn so với các phím mũi tên.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.2: VÀO VÀ THOÁT VIM
+
+
+ !! CHÚ Ý: Trước khi thực hiện bất kỳ lệnh nào, xin hãy đọc cả bài học này!!
+
+ 1. Nhấn phím <ESC> (để chắc chắn là bạn đang ở chế độ Câu lệnh).
+
+ 2. Gõ: :q! <ENTER>.
+
+---> Lệnh này sẽ thoát trình soạn thảo mà KHÔNG ghi nhớ bất kỳ thay đổi nào mà bạn đã làm.
+ Nếu bạn muốn ghi nhớ những thay đổi đó và thoát thì hãy gõ:
+ :wq <ENTER>
+
+ 3. Khi thấy dấu nhắc shell, hãy gõ câu lệnh đã đưa bạn tới hướng dẫn này. Có
+ thể là lệnh: vimtutor vi <ENTER>
+ Thông thường bạn dùng: vim tutor.vi<ENTER>
+
+---> 'vim' là trình soạn thảo vim, 'tutor.vi' là tập tin bạn muốn soạn thảo.
+
+ 4. Nếu bạn đã nhớ và nắm chắc những câu lệnh trên, hãy thực hiện các bước từ
+ 1 tới 3 để thoát và quay vào trình soạn thảo. Sau đó di chuyển con trỏ
+ tới Bài 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.3: SOẠN THẢO VĂN BẢN - XÓA
+
+
+** Trong chế độ Câu lệnh nhấn x để xóa ký tự nằm dưới con trỏ. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Để sửa lỗi, di chuyển con trỏ để nó nằm trên ký tự sẽ bị
+ xóa.
+
+ 3. Nhấn phím x để xóa ký tự không mong muốn.
+
+ 4. Lặp lại các bước từ 2 tới 4 để sửa lại câu.
+
+---> Emm xiinh em đứnng chỗ nào cũnkg xinh.
+
+ 5. Câu trên đã sửa xong, hãy chuyển tới Bài 1.4.
+
+Chú ý: Khi học theo cuốn hướng dẫn này đừng cố nhớ, mà học từ thực hành.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.4: SOẠN THẢO VĂN BẢN - CHÈN
+
+
+ ** Trong chế độ Câu lệnh nhấn i để chèn văn bản. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu ---> đầu tiên.
+
+ 2. Để dòng thứ nhất giống hệt với dòng thứ hai, di chuyển con trỏ lên ký tự
+ đầu tiên NGAY SAU chỗ muốn chèn văn bản.
+
+ 3. Nhấn i và gõ văn bản cần thêm.
+
+ 4. Sau mỗi lần chèn từ còn thiếu nhấn <ESC> để trở lại chế dộ Câu lệnh.
+ Lặp lại các bước từ 2 tới 4 để sửa câu này.
+
+---> Mot lam chang nen , ba cay chum lai hon cao.
+---> Mot cay lam chang nen non, ba cay chum lai nen hon nui cao.
+
+ 5. Sau khi thấy quen với việc chèn văn bản hãy chuyển tới phần tổng kết
+ ở dưới.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 1
+
+
+ 1. Con trỏ được di chuyển bởi các phím mũi tên hoặc các phím hjkl.
+ h (trái) j (xuống) k (lên) l (phải)
+
+ 2. Để vào Vim (từ dấu nhắc %) gõ: vim TÊNTẬPTIN <ENTER>
+
+ 3. Muốn thoát Vim gõ: <ESC> :q! <ENTER> để vứt bỏ mọi thay đổi.
+ HOẶC gõ: <ESC> :wq <ENTER> để ghi nhớ thay đổi.
+
+ 4. Để xóa bỏ ký tự nằm dưới con trỏ trong chế độ Câu lệnh gõ: x
+
+ 5. Để chèn văn bản tại vị trí con trỏ trong chế độ Câu lệnh gõ:
+ i văn bản sẽ nhập <ESC>
+
+CHÚ Ý: Nhấn <ESC> sẽ đưa bạn vào chế độ Câu lệnh hoặc sẽ hủy bỏ một câu lệnh
+ hay đoạn câu lệnh không mong muốn.
+
+Bây giờ chúng ta tiếp tục với Bài 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.1: CÁC LỆNH XÓA
+
+
+ ** Gõ dw để xóa tới cuối một từ. **
+
+ 1. Nhấn <ESC> để chắc chắn là bạn đang trong chế độ Câu lệnh.
+
+ 2. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 3. Di chuyển con trỏ tới ký tự đầu của từ cần xóa.
+
+ 4. Gõ dw để làm từ đó biến mất.
+
+ CHÚ Ý: các ký tự dw sẽ xuất hiện trên dòng cuối cùng của màn hình khi bạn gõ
+ chúng. Nếu bạn gõ nhầm, hãy nhấn <ESC> và làm lại từ đầu.
+
+---> Khi trái tỉm tìm tim ai như mùa đông giá lạnh lanh
+ Anh đâu thành cánh én nhỏ trùng khơi.
+
+ 5. Lặp lại các bước cho đến khi sửa xong câu thơ rồi chuyển tới Bài 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.2: CÁC CÂU LỆNH XÓA KHÁC
+
+
+ ** gõ d$ để xóa tới cuối một dòng. **
+
+ 1. Nhấn <ESC> để chắc chắn là bạn đang trong chế độ Câu lệnh.
+
+ 2. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 3. Di chuyển con trỏ tới cuối câu đúng (SAU dấu . đầu tiên).
+
+ 4. Gõ d$ để xóa tới cuối dòng.
+
+---> Đã qua đi những tháng năm khờ dại. thừa thãi.
+
+
+ 5. Chuyển tới Bài 2.3 để hiểu cái gì đang xảy ra.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.3: CÂU LỆNH VÀ ĐỐI TƯỢNG
+
+
+ Câu lệnh xóa d có dạng như sau:
+
+ [số] d đối_tượng HOẶC d [số] đối_tượng
+ Trong đó:
+ số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
+ d - là câu lệnh xóa.
+ đối_tượng - câu lệnh sẽ thực hiện trên chúng (liệt kê phía dưới).
+
+ Danh sách ngắn của đối tượng:
+ w - từ con trỏ tới cuối một từ, bao gồm cả khoảng trắng.
+ e - từ con trỏ tới cuối một từ, KHÔNG bao gồm khoảng trắng.
+ $ - từ con trỏ tới cuối một dòng.
+
+CHÚ Ý: Dành cho những người ham tìm hiểu, chỉ nhấn đối tượng trong chế độ Câu
+ lệnh mà không có câu lệnh sẽ di chuyển con trỏ như trong danh sách trên.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.4: TRƯỜNG HỢP NGOẠI LỆ CỦA QUY LUẬT 'CÂU LỆNH-ĐỐI TƯỢNG'
+
+
+ ** Gõ dd để xóa cả một dòng. **
+
+ Người dùng thường xuyên xóa cả một dòng, vì thế các nhà phát triển Vi đã
+ quyết định dùng hai chữ d để đơn giản hóa thao tác này.
+
+ 1. Di chuyển con trỏ tới dòng thứ hai trong cụm phía dưới.
+ 2. Gõ dd để xóa dòng này.
+ 3. Bây giờ di chuyển tới dòng thứ tư.
+ 4. Gõ 2dd (hãy nhớ lại bộ ba số-câu lệnh-đối tượng) để xóa hai dòng.
+
+ 1) Trong tim em khắc sâu bao kỉ niệm
+ 2) Tình yêu chân thành em dành cả cho anh
+ 3) Dẫu cuộc đời như bể dâu thay đổi
+ 4) Anh mãi là ngọn lửa ấm trong đêm
+ 5) Đã qua đi những tháng năm khờ dại
+ 7) Hãy để tự em lau nước mắt của mình
+ 8) Lặng lẽ sống những đêm dài bất tận
+ 9) Bao khổ đau chờ tia nắng bình minh
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.5: CÂU LỆNH "HỦY THAO TÁC"
+
+
+ ** Nhấn u để hủy bỏ những câu lệnh cuối cùng, U để sửa cả một dòng. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu ---> và đặt con trỏ trên từ có lỗi
+ đầu tiên
+ 2. Gõ x để xóa chữ cái gây ra lỗi đầu tiên.
+ 3. Bây giờ gõ u để hủy bỏ câu lệnh vừa thự hiện (xóa chữ cái).
+ 4. Dùng câu lệnh x để sửa lỗi cả dòng này.
+ 5. Bây giờ gõ chữ U hoa để phục hồi trạng thái ban đầu của dòng.
+ 6. Bây giờ gõ u vài lần để hủy bỏ câu lệnh U và các câu lệnh trước.
+ 7. Bây giờ gõ CTRL-R (giữ phím CTRL và gõ R) và lầu để thực hiện
+ lại các câu lệnh (hủy bỏ các câu lệnh hủy bỏ).
+
+---> Câyy ccó cộii, nuước csó nguuồn.
+
+ 8. Đây là những câu lệnh rất hữu ích. Bây giờ chuyển tới Tổng kết Bài 2.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 2
+
+
+ 1. Để xóa từ con trỏ tới cuối một từ gõ: dw
+
+ 2. Để xóa từ con trỏ tới cuối một dòng gõ: d$
+
+ 3. Để xóa cả một dòng gõ: dd
+
+ 4. Một câu lệnh trong chế độ Câu lệnh có dạng:
+
+ [số] câu_lệnh đối_tượng HOẶC câu_lệnh [số] đối_tượng
+ trong đó:
+ số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
+ câu_lệnh - là những gì thực hiện, ví dụ d dùng để xóa.
+ đối_tượng - câu lệnh sẽ thực hiện trên chúng, ví dụ w (từ),
+ $ (tới cuối một dòng), v.v...
+
+ 5. Để hủy bỏ thao tác trước, gõ: u (chữ u thường)
+ Để hủy bỏ tất cả các thao tác trên một dòng, gõ: U (chữ U hoa)
+ Để hủy bỏ các câu lệnh hủy bỏ, gõ: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.1: CÂU LỆNH DÁN
+
+
+ ** Gõ p để dán những gì vừa xóa tới sau con trỏ. **
+
+ 1. Di chuyển con trỏ tới dòng đầu tiên trong cụm ở dưới.
+
+ 2. Gõ dd để xóa và ghi lại một dòng trong bộ nhớ đệm của Vim.
+
+ 3. Di chuyển con trỏ tới dòng Ở TRÊN chỗ cần dán.
+
+ 4. Trong chế độ Câu lệnh, gõ p để thay thế dòng.
+
+ 5. Lặp lại các bước từ 2 tới 4 để đặt các dòng theo đúng thứ tự của chúng.
+
+ d) Niềm vui như gió xưa bay nhè nhẹ
+ b) Em vẫn mong anh sẽ đến với em
+ c) Đừng để em mất đi niềm hy vọng đó
+ a) Ai sẽ giúp em vượt qua sóng gió
+ e) Dễ ra đi khó giữ lại bên mình
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.2: CÂU LỆNH THAY THẾ
+
+
+ ** Gõ r và một ký tự để thay thế ký tự nằm dưới con trỏ. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Di chuyển con trỏ tới ký tự gõ sai đầu tiên.
+
+ 3. Gõ r và ký tự đúng.
+
+ 4. Lặp lại các bước từ 2 đến 4 để sửa cả dòng.
+
+---> "Trên đời nài làm gì có đườmg, người to đi mãi rồi thànk đường là tHôi"
+---> "Trên đời này làm gì có đường, người ta đi mãi rồi thành đường mà thôi"
+
+ 5. Bây giờ chuyển sang Bài 3.3.
+
+CHÚ Ý: Hãy nhớ rằng bạn cần thực hành, không nên "học vẹt".
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.3: CÂU LỆNH THAY ĐỔI
+
+
+ ** Để thay đổi một phần hay cả một từ, gõ cw . **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Đặt con trỏ trên chữ trong.
+
+ 3. Gõ cw và sửa lại từ (trong trường hợp này, gõ 'ine'.)
+
+ 4. Gõ <ESC> và chuyển tới lỗi tiếp theo (chữ cái đầu tiên trong số cần thay.)
+
+ 5. Lặp lại các bước 3 và 4 cho tới khi thu được dòng như dòng thứ hai.
+
+---> Trên dùgn này có một dầy từ cần tyays đổi, sử dunk câu lệnh thay đổi.
+---> Trên dong này có một vai từ cần thay đổi, sử dung câu lệnh thay đổi.
+
+Chú ý rằng cw không chỉ thay đổi từ, nhưng còn đưa bạn vào chế độ chèn.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.4: TIẾP TỤC THAY ĐỔI VỚI c
+
+
+ ** Câu lệnh thay đổi được sử dụng với cùng đối tượng như câu lệnh xóa. **
+
+ 1. Câu lệnh thay đổi làm việc tương tự như câu lệnh xóa. Định dạng như sau:
+
+ [số] c đối_tượng HOẶC c [số] đối_tượng
+
+ 2. Đối tượng cũng giống như ở trên, ví dụ w (từ), $ (cuối dòng), v.v...
+
+ 3. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 4. Di chuyển con trỏ tới dòng có lỗi đầu tiên.
+
+ 5. Gõ c$ để sửa cho giống với dòng thứ hai và gõ <ESC>.
+
+---> Doan cuoi dong nay can sua de cho giong voi dong thu hai.
+---> Doan cuoi dong nay can su dung cau lenh c$ de sua.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 3
+
+
+ 1. Để dán đoạn văn bản vừa xóa, gõ p. Câu lệnh này sẽ đặt đoạn văn bản này
+ PHÍA SAU con trỏ (nếu một dòng vừa bị xóa, dòng này sẽ được đặt vào dòng
+ nằm dưới con trỏ).
+
+ 2. Để thay thế ký tự dưới con trỏ, gõ r và sau đó gõ
+ ký tự muốn thay vào.
+
+ 3. Câu lệnh thay đổi cho phép bạn thay đổi đối tượng chỉ ra từ con
+ trỏ tới cuối đối tượng. vd. Gõ cw để thay đổi từ
+ con trỏ tới cuối một từ, c$ để thay đổi tới cuối một dòng.
+
+ 4. Định dạng để thay đổi:
+
+ [số] c đối_tượng HOẶC c [số] đối_tượng
+
+Bây giờ chúng ta tiếp tục bài học mới.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.1: THÔNG TIN VỀ TẬP TIN VÀ VỊ TRÍ TRONG TẬP TIN
+
+
+ ** Gõ CTRL-g để hiển thị vị trí của bạn trong tập tin và thông tin về tập tin.
+ Gõ SHIFT-G để chuyển tới một dòng trong tập tin. **
+
+ Chú ý: Đọc toàn bộ bài học này trước khi thực hiện bất kỳ bước nào!!
+
+ 1. Giữ phím Ctrl và nhấn g . Một dòng thông tin xuất hiện tại cuối trang
+ với tên tập tin và dòng mà bạn đang nằm trên. Hãy nhớ số dòng này
+ Cho bước số 3.
+
+ 2. Nhấn shift-G để chuyển tới cuối tập tin.
+
+ 3. Gõ số dòng mà bạn đã nằm trên và sau đó shift-G. Thao tác này sẽ đưa bạn
+ trở lại dòng mà con trỏ đã ở trước khi nhấn tổ hợp Ctrl-g.
+ (Khi bạn gõ số, chúng sẽ KHÔNG hiển thị trên màn hình.)
+
+ 4. Nếu bạn cảm thấy đã hiểu rõ, hãy thực hiện các bước từ 1 tới 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.2: CÂU LỆNH TÌM KIẾM
+
+
+ ** Gõ / và theo sau là cụm từ muốn tìm kiếm. **
+
+ 1. Trong chế độ Câu lệnh gõ ký tự / .Chú ý rằng ký tự này và con trỏ sẽ
+ xuất hiện tại cuối màn hình giống như câu lệnh : .
+
+ 2. Bây giờ gõ 'loiiiii' <ENTER>. Đây là từ bạn muốn tìm.
+
+ 3. Để tìm kiếm cụm từ đó lần nữa, đơn giản gõ n .
+ Để tìm kiếm cụm từ theo hướng ngược lại, gõ Shift-N .
+
+ 4. Nếu bạn muối tìm kiếm cụm từ theo hướng ngược lại đầu tập tin, sử dụng
+ câu lệnh ? thay cho /.
+
+---> "loiiiii" là những gì không đúng lắm; loiiiii thường xuyên xảy ra.
+
+Chú ý: Khi tìm kiếm đến cuối tập tin, việc tìm kiếm sẽ tiếp tục từ đầu
+ tập tin này.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.3: TÌM KIẾM CÁC DẤU NGOẶC SÁNH ĐÔI
+
+
+ ** Gõ % để tìm kiếm ),], hay } . **
+
+ 1. Đặt con trỏ trên bất kỳ một (, [, hay { nào trong dòng có dấu --->.
+
+ 2. Bây giờ gõ ký tự % .
+
+ 3. Con trỏ sẽ di chuyển đến dấu ngoặc tạo cặp (dấu đóng ngoặc).
+
+ 4. Gõ % để chuyển con trỏ trở lại dấu ngoặc đầu tiên (dấu mở ngoặc).
+
+---> Đây là ( một dòng thử nghiệm với các dấu ngoặc (, [ ] và { } . ))
+
+Chú ý: Rất có ích khi sửa lỗi chương trình, khi có các lỗi thừa thiếu dấu ngoặc!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.4: MỘT CÁCH SỬA LỖI
+
+
+ ** Gõ :s/cũ/mới/g để thay thế 'mới' vào 'cũ'. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Gõ :s/duou/ruou <ENTER> . Chú ý rằng câu lệnh này chỉ thay đổi từ tìm
+ thấy đầu tiên trên dòng (từ 'duou' đầu dòng).
+
+ 3. Bây giờ gõ :s/duou/ruou/g để thực hiện thay thế trên toàn bộ dòng.
+ Lệnh này sẽ thay thế tất cả những từ ('duou') tìm thấy trên dòng.
+
+---> duou ngon phai co ban hie. Khong duou cung khong hoa.
+
+ 4. Để thay thế thực hiện trong đoạn văn bản giữa hai dòng,
+ gõ :#,#s/cũ/mới/g trong đó #,# là số thứ tự của hai dòng.
+ Gõ :%s/cũ/mới/g để thực hiện thay thế trong toàn bộ tập tin.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 4
+
+
+ 1. Ctrl-g vị trí của con trỏ trong tập tin và thông tin về tập tin.
+ Shift-G di chuyển con trỏ tới cuối tập tin. Số dòng và theo sau
+ là Shift-G di chuyển con trỏ tới dòng đó.
+
+ 2. Gõ / và cụm từ theo sau để tìm kiếm cụm từ VỀ PHÍA TRƯỚC.
+ Gõ ? và cụm từ theo sau để tìm kiếm cụm từ NGƯỢC TRỞ LẠI.
+ Sau một lần tìm kiếm gõ n để tìm kiếm cụm từ lại một lần nữa theo hướng
+ đã tìm hoặc Shift-N để tìm kiếm theo hướng ngược lại.
+
+ 3. Gõ % khi con trỏ nằm trên một (,),[,],{, hay } sẽ chỉ ra vị trí của
+ dấu ngoặc còn lại trong cặp.
+
+ 4. Để thay thế 'mới' cho 'cũ' đầu tiên trên dòng, gõ :s/cũ/mới
+ Để thay thế 'mới' cho tất cả 'cũ' trên dòng, gõ :s/cũ/mới/g
+ Để thay thế giữa hai dòng, gõ :#,#s/cũ/mới/g
+ Để thay thế trong toàn bộ tập tin, gõ :%s/cũ/mới/g
+ Để chương trình hỏi lại trước khi thay thế, thêm 'c' :%s/cũ/mới/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.1: CÁCH THỰC HIỆN MỘT CÂU LỆNH NGOẠI TRÚ
+
+
+ ** Gõ :! theo sau là một câu lệnh ngoại trú để thực hiện câu lệnh đó. **
+
+ 1. Gõ câu lệnh quen thuộc : để đặt con trỏ tại cuối màn hình.
+ Thao tác này cho phép bạn nhập một câu lệnh.
+
+ 2. Bây giờ gõ ký tự ! (chấm than). Ký tự này cho phép bạn
+ thực hiện bất kỳ một câu lệnh shell nào.
+
+ 3. Ví dụ gõ ls theo sau dấu ! và gõ <ENTER>. Lệnh này
+ sẽ hiển thị nội dung của thư mục hiện thời, hoặc sử dụng
+ lệnh :!dir nếu ls không làm việc.
+
+Chú ý: Có thể thực hiện bất kỳ câu lệnh ngoại trú nào theo cách này.
+
+Chú ý: Tất cả các câu lệnh : cần kết thúc bởi phím <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 5.2: GHI LẠI CÁC TẬP TIN
+
+
+ ** Để ghi lại các thay đổi, gõ :w TÊNTỆPTIN. **
+
+ 1. Gõ :!dir hoặc :!ls để lấy bảng liệt kê thư mục hiện thời.
+ Như bạn đã biết, bạn cần gõ <ENTER> để thực hiện.
+
+ 2. Chọn một tên tập tin chưa có, ví dụ TEST.
+
+ 3. Bây giờ gõ: :w TEST (trong đó TEST là tên tập tin bạn đã chọn.)
+
+ 4. Thao tác này ghi toàn bộ tập tin (Hướng dẫn dùng Vim) dưới tên TEST.
+ Để kiểm tra lại, gõ :!dir một lần nữa để liệt kê thư mục.
+
+Chú ý: Nếu bạn thoát khỏi Vim và quay trở lại với tên tập tin TEST, thì tập
+ tin sẽ là bản sao của hướng dẫn tại thời điểm bạn ghi lại.
+
+ 5. Bây giờ xóa bỏ tập tin (MS-DOS): :!del TEST
+ hay (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 5.3: CÂU LỆNH GHI CHỌN LỌC
+
+
+ ** Để ghi một phần của tập tin, gõ :#,# w TÊNTẬPTIN **
+
+ 1. Gõ lại một lần nữa :!dir hoặc :!ls để liệt kê nội dung thư mục
+ rồi chọn một tên tập tin thích hợp, ví dụ TEST.
+
+ 2. Di chuyển con trỏ tới đầu trang này, rồi gõ Ctrl-g để tìm ra số thứ
+ tự của dòng đó. HÃY NHỚ SỐ THỨ TỰ NÀY!
+
+ 3. Bây giờ di chuyển con trỏ tới dòng cuối trang và gõ lại Ctrl-g lần nữa.
+ HÃY NHỚ CẢ SỐ THỨ TỰ NÀY!
+
+ 4. Để CHỈ ghi lại một phần vào một tập tin, gõ :#,# w TEST trong đó #,#
+ là hai số thứ tự bạn đã nhớ (đầu,cuối) và TEST là tên tập tin.
+
+ 5. Nhắc lại, xem tập tin của bạn có ở đó không với :!dir nhưng ĐỪNG xóa.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 5.4: ĐỌC VÀ KẾT HỢP CÁC TẬP TIN
+
+
+ ** Để chèn nội dung của một tập tin, gõ :r TÊNTẬPTIN **
+
+ 1. Gõ :!dir để chắc chắn là có tệp tin TEST.
+
+ 2. Đặt con trỏ tại đầu trang này.
+
+CHÚ Ý: Sau khi thực hiện Bước 3 bạn sẽ thấy Bài 5.3. Sau đó cần di chuyển
+ XUỐNG bài học này lần nữa.
+
+ 3. Bây giờ dùng câu lệnh :r TEST để đọc tập tin TEST, trong đó TEST là
+ tên của tập tin.
+
+CHÚ Ý: Tập tin được đọc sẽ đặt bắt đầu từ vị trí của con trỏ.
+
+ 4. Để kiểm tra lại, di chuyển con trỏ ngược trở lại và thấy rằng bây giờ
+ có hai Bài 5.3, bản gốc và bản vừa chèn.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 5
+
+
+ 1. :!câulệnh thực hiện một câu lệnh ngoại trú
+
+ Một vài ví dụ hữu ích:
+ (MS-DOS) (Unix)
+ :!dir :!ls - liệt kê nội dung một thư mục.
+ :!del TÊNTẬPTIN :!rm TÊNTẬPTIN - xóa bỏ tập tin TÊNTẬPTIN.
+
+ 2. :w TÊNTẬPTIN ghi tập tin hiện thời của Vim lên đĩa với tên TÊNTẬPTIN.
+
+ 3. :#,#w TÊNTẬPTIN ghi các dòng từ # tới # vào tập tin TÊNTẬPTIN.
+
+ 4. :r TÊNTẬPTIN đọc tập tin trên đĩa TÊNTẬPTIN và chèn nội dung của nó vào
+ tập tin hiện thời sau vị trí của con trỏ.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.1: CÂU LỆNH TẠO DÒNG
+
+
+ ** Gõ o để mở một dòng phía dưới con trỏ và chuyển vào chế độ Soạn thảo. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Gõ o (chữ thường) để mở một dòng BÊN DƯỚI con trỏ và chuyển vào chế độ
+ Soạn thảo.
+
+ 3. Bây giờ sao chép dòng có dấu ---> và nhấn <ESC> để thoát khỏi chế độ Soạn
+ thảo.
+
+---> Sau khi gõ o con trỏ sẽ đặt trên dòng vừa mở trong chế độ Soạn thảo.
+
+ 4. Để mở một dòng Ở TRÊN con trỏ, đơn giản gõ một chữ O hoa, thay cho
+ chữ o thường. Hãy thử thực hiện trên dòng dưới đây.
+Di chuyển con trỏ tới dòng này, rồi gõ Shift-O sẽ mở một dòng trên nó.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.2: CÂU LỆNH THÊM VÀO
+
+
+ ** Gõ a để chèn văn bản vào SAU con trỏ. **
+
+ 1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->
+ bằng cách gõ $ trong chế độ câu lệnh.
+
+ 2. Gõ a (chữ thường) để thêm văn bản vào SAU ký tự dưới con trỏ.
+ (Chữ A hoa thêm văn bản vào cuối một dòng.)
+
+Chú ý: Lệnh này thay cho việc gõ i , ký tự cuối cùng, văn bản muốn chèn,
+ <ESC>, mũi tên sang phải, và cuối cùng, x , chỉ để thêm vào cuối dòng!
+
+ 3. Bây giờ thêm cho đủ dòng thứ nhất. Chú ý rằng việc thêm giống hệt với
+ việc chèn, trừ vị trí chèn văn bản.
+
+---> Dong nay cho phep ban thuc hanh
+---> Dong nay cho phep ban thuc hanh viec them van ban vao cuoi dong.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.3: MỘT CÁCH THAY THẾ KHÁC
+
+
+ ** Gõ chữ cái R hoa để thay thế nhiều ký tự. **
+
+ 1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->.
+
+ 2. Đặt con trỏ tại chữ cái đầu của từ đầu tiên khác với dòng có dấu
+ ---> tiếp theo (từ 'tren').
+
+ 3. Bây giờ gõ R và thay thế phần còn lại của dòng thứ nhất bằng cách gõ
+ đè lên văn bản cũ để cho hai dòng giống nhau.
+
+---> De cho dong thu nhat giong voi dong thu hai tren trang nay.
+---> De cho dong thu nhat giong voi dong thu hai, go R va van ban moi.
+
+ 4. Chú ý rằng khi bạn nhấn <ESC> để thoát, đoạn văn bản không sửa đổi sẽ
+ được giữ nguyên.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.4: THIẾT LẬP CÁC THAM SỐ
+
+ ** Thiết lập một tùy chọn để việc tìm kiếm hay thay thế lờ đi kiểu chữ **
+
+ 1. Tìm kiếm từ 'lodi' bằng cách gõ:
+ /lodi
+ Lặp lại vài lần bằng phím n.
+
+ 2. Đặt tham số 'ic' (Lodi - ignore case) bằng cách gõ:
+ :set ic
+
+ 3. Bây giờ thử lại tìm kiếm 'lodi' bằng cách gõ: n
+ Lặp lại vài lần bằng phím n.
+
+ 4. Đặt các tham số 'hlsearch' và 'incsearch':
+ :set hls is
+
+ 5. Bây giờ nhập lại câu lệnh tìm kiếm một lần nữa và xem cái gì xảy ra:
+ /lodi
+
+ 6. Để xóa bỏ việc hiện sáng từ tìm thấy, gõ:
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 6
+
+
+ 1. Gõ o mở một dòng phía DƯỚI con trỏ và đặt con trỏ trên dòng vừa mở
+ trong chế độ Soạn thảo.
+ Gõ một chữ O hoa để mở dòng phía TRÊN dòng của con trỏ.
+
+ 2. Gõ a để chèn văn bản vào SAU ký tự nằm dưới con trỏ.
+ Gõ một chữ A hoa tự động thêm văn bản vào cuối một dòng.
+
+ 3. Gõ một chữ R hoa chuyển vào chế độ Thay thế cho đến khi nhấn <ESC>.
+
+ 4. Gõ ":set xxx" sẽ đặt tham số "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 7: CÂU LỆNH TRỢ GIÚP
+
+
+ ** Sử dụng hệ thống trợ giúp có sẵn **
+
+ Vim có một hệ thống trợ giúp đầy đủ. Để bắt đầu, thử một trong ba
+ lệnh sau:
+ - nhấn phím <HELP> (nếu bàn phím có)
+ - nhấn phím <F1> (nếu bàn phím có)
+ - gõ :help <ENTER>
+
+ Gõ :q <ENTER> để đóng cửa sổ trợ giúp.
+
+ Bạn có thể tìm thấy trợ giúp theo một đề tài, bằng cách đưa tham số tới
+ câu lệnh ":help". Hãy thử (đừng quên gõ <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 8: TẠO MỘT SCRIPT KHỞI ĐỘNG
+
+ ** Bật các tính năng của Vim **
+
+ Vim có nhiều tính năng hơn Vi, nhưng hầu hết chúng bị tắt theo mặc định.
+ Để sử dụng các tính năng này bạn cần phải tạo một tập tin "vimrc".
+
+ 1. Soạn thảo tệp tin "vimrc", phụ thuộc vào hệ thống của bạn:
+ :edit ~/.vimrc đối với Unix
+ :edit $VIM/_vimrc đối với MS-Windows
+
+ 2. Bây giờ đọc tập tin "vimrc" ví dụ:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Ghi lại tập tin:
+
+ :write
+
+ Trong lần khởi động tiếp theo, Vim sẽ sử dụng việc hiện sáng cú pháp.
+ Bạn có thể thêm các thiết lập ưa thích vào tập tin "vimrc" này.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Bài học hướng dẫn sử dụng Vim (Vim Tutor) kết thúc tại đây. Bài học đưa ra
+ cái nhìn tổng quát về trình soạn thảo Vim, chỉ đủ để bạn có thể sử dụng
+ trình soạn thảo một cách dễ dàng. Bài học còn rất xa để có thể nói là đầy
+ đủ vì Vim có rất rất nhiều câu lệnh. Tiếp theo xin hãy đọc hướng dẫn người
+ dùng: ":help user-manual".
+
+ Cuốn sách sau được khuyên dùng cho việc nghiên cứu sâu hơn:
+ Vim - Vi Improved - Tác giả: Steve Oualline
+ Nhà xuất bản: New Riders
+ Cuốn sách đầu tiên dành hoàn toàn cho Vim. Đặc biệt có ích cho người mới.
+ Có rất nhiều ví dụ và tranh ảnh.
+ Hãy xem: http://iccf-holland.org/click5.html
+
+ Cuốn sách tiếp theo này xuất bản sớm hơn và nói nhiều về Vi hơn là Vim,
+ nhưng cũng rất nên đọc:
+ Learning the Vi Editor - Tác giả: Linda Lamb
+ Nhà xuất bản: O'Reilly & Associates Inc.
+ Đây là một cuốn sách hay và cho bạn biết tất cả cách thực hiện những gì muốn
+ làm với Vi. Lần xuất bản thứ sáu đã thêm thông tin về Vim.
+
+ Bài học hướng dẫn này viết bởi Michael C. Pierce và Robert K. Ware,
+ Colorado School of Mines sử dụng ý tưởng của Charles Smith,
+ Colorado State University. E-mail: bware@mines.colorado.edu.
+
+ Sửa đổi cho Vim bởi Bram Moolenaar.
+
+ Dịch bởi: Phan Vĩnh Thịnh <teppi@vnlinux.org>, 2005
+ Translator: Phan Vinh Thịnh <teppi@vnlinux.org>, 2005
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/vimdir.info b/runtime/tutor/vimdir.info
new file mode 100755
index 000000000..ddb2a1462
--- /dev/null
+++ b/runtime/tutor/vimdir.info
Binary files differ
diff --git a/runtime/tutor/vimtutor.bat b/runtime/tutor/vimtutor.bat
new file mode 100644
index 000000000..b147a8c44
--- /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=