updated for version 7.2a
diff --git a/runtime/tutor/README_ami.txt b/runtime/tutor/README_ami.txt
new file mode 100644
index 0000000..13fa67d
--- /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 0000000..81df87d
--- /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 0000000..dc76f15
--- /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 0000000..bbb0b4f
--- /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 0000000..7392b53
--- /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 0000000..4d173b0
--- /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 0000000..43a3a40
--- /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 0000000..b2fdd95
--- /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 0000000..5bf45ff
--- /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 0000000..967fc82
--- /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 0000000..ea7142a
--- /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 0000000..ddb2a14
--- /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 0000000..b147a8c
--- /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=