Update runtime files.
diff --git a/runtime/autoload/ada.vim b/runtime/autoload/ada.vim
index ffd0ff8..8f525f4 100644
--- a/runtime/autoload/ada.vim
+++ b/runtime/autoload/ada.vim
@@ -1,15 +1,15 @@
 "------------------------------------------------------------------------------
 "  Description: Perform Ada specific completion & tagging.
 "     Language: Ada (2005)
-"	   $Id$
+"	   $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
 "   Maintainer: Martin Krischik <krischik@users.sourceforge.net>
 "		Taylor Venable <taylor@metasyntax.net>
 "		Neil Bird <neil@fnxweb.com>
 "		Ned Okie <nokie@radford.edu>
-"      $Author$
-"	 $Date$
+"      $Author: krischik $
+"	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $
 "      History: 24.05.2006 MK Unified Headers
 "		26.05.2006 MK ' should not be in iskeyword.
diff --git a/runtime/autoload/adacomplete.vim b/runtime/autoload/adacomplete.vim
index 8db4351..2659f51 100644
--- a/runtime/autoload/adacomplete.vim
+++ b/runtime/autoload/adacomplete.vim
@@ -1,12 +1,12 @@
 "------------------------------------------------------------------------------
 "  Description: Vim Ada omnicompletion file
 "     Language:	Ada (2005)
-"	   $Id$
+"	   $Id: adacomplete.vim 887 2008-07-08 14:29:01Z krischik $
 "   Maintainer:	Martin Krischik
-"      $Author$
-"	 $Date$
+"      $Author: krischik $
+"	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/adacomplete.vim $
 "      History: 24.05.2006 MK Unified Headers
 "		26.05.2006 MK improved search for begin of word.
diff --git a/runtime/autoload/decada.vim b/runtime/autoload/decada.vim
index fb5400e..7741ff0 100644
--- a/runtime/autoload/decada.vim
+++ b/runtime/autoload/decada.vim
@@ -1,13 +1,13 @@
 "------------------------------------------------------------------------------
 "  Description: Vim Ada/Dec Ada compiler file
 "     Language: Ada (Dec Ada)
-"          $Id$
+"          $Id: decada.vim 887 2008-07-08 14:29:01Z krischik $
 "    Copyright: Copyright (C) 2006 Martin Krischik
 "   Maintainer:	Martin Krischik <krischik@users.sourceforge.net>
-"      $Author$
-"        $Date$
+"      $Author: krischik $
+"        $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6      
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/decada.vim $
 "      History: 21.07.2006 MK New Dec Ada
 "               15.10.2006 MK Bram's suggestion for runtime integration
diff --git a/runtime/autoload/getscript.vim b/runtime/autoload/getscript.vim
index 5a466cb..6e01976 100644
--- a/runtime/autoload/getscript.vim
+++ b/runtime/autoload/getscript.vim
@@ -1,8 +1,8 @@
 " ---------------------------------------------------------------------
 " getscript.vim
 "  Author:	Charles E. Campbell, Jr.
-"  Date:	Jul 10, 2008
-"  Version:	31
+"  Date:	Dec 28, 2009
+"  Version:	32
 "  Installing:	:help glvs-install
 "  Usage:	:help glvs
 "
@@ -12,19 +12,24 @@
 " Initialization:	{{{1
 " if you're sourcing this file, surely you can't be
 " expecting vim to be in its vi-compatible mode!
+if exists("g:loaded_getscript")
+ finish
+endif
+let g:loaded_getscript= "v32"
 if &cp
  echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
  finish
 endif
+if v:version < 702
+ echohl WarningMsg
+ echo "***warning*** this version of getscript needs vim 7.2"
+ echohl Normal
+ finish
+endif
 let s:keepcpo = &cpo
 set cpo&vim
 "DechoTabOn
 
-if exists("g:loaded_getscript")
- finish
-endif
-let g:loaded_getscript= "v31"
-
 " ---------------------------
 " Global Variables: {{{1
 " ---------------------------
@@ -40,25 +45,6 @@
   let g:getscript_cygwin= 0
  endif
 endif
-" shell quoting character {{{2
-if exists("g:netrw_shq") && !exists("g:getscript_shq")
- let g:getscript_shq= g:netrw_shq
-elseif !exists("g:getscript_shq")
- if exists("&shq") && &shq != ""
-  let g:getscript_shq= &shq
- elseif exists("&sxq") && &sxq != ""
-  let g:getscript_shq= &sxq
- elseif has("win32") || has("win95") || has("win64") || has("win16")
-  if g:getscript_cygwin
-   let g:getscript_shq= "'"
-  else
-   let g:getscript_shq= '"'
-  endif
- else
-  let g:getscript_shq= "'"
- endif
-" call Decho("g:getscript_shq<".g:getscript_shq.">")
-endif
 
 " wget vs curl {{{2
 if !exists("g:GetLatestVimScripts_wget")
@@ -112,7 +98,9 @@
   endif
  endif
 
- if exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim)
+ if exists("g:GetLatestVimScripts_autoinstalldir") && isdirectory(g:GetLatestVimScripts_autoinstalldir)
+  let s:autoinstall= g:GetLatestVimScripts_autoinstalldir"
+ elseif exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim)
   let s:autoinstall= $HOME."/".s:dotvim
  endif
 " call Decho("s:autoinstall<".s:autoinstall.">")
@@ -165,7 +153,6 @@
 "   call Dret("GetLatestVimScripts : unable to find a GetLatest subdirectory")
    return
   endif
-
   if filewritable(datadir) != 2
    echoerr "(getLatestVimScripts) Your ".datadir." isn't writable"
 "   call Dret("GetLatestVimScripts : non-writable directory<".datadir.">")
@@ -182,21 +169,29 @@
 "   call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">")
    return
   endif
+  " --------------------
+  " Passed sanity checks
+  " --------------------
+
 "  call Decho("datadir  <".datadir.">")
 "  call Decho("datafile <".datafile.">")
 
-  " don't let any events interfere (like winmanager's, taglist's, etc)
-  let eikeep= &ei
-  let hlskeep= &hls
-  set ei=all hls&vim
+  " don't let any event handlers interfere (like winmanager's, taglist's, etc)
+  let eikeep  = &ei
+  let hlskeep = &hls
+  let acdkeep = &acd
+  set ei=all hls&vim noacd
 
-  " record current directory, change to datadir, open split window with
-  " datafile
+  " Edit the datafile (ie. GetLatestVimScripts.dat):
+  " 1. record current directory (origdir),
+  " 2. change directory to datadir,
+  " 3. split window
+  " 4. edit datafile
   let origdir= getcwd()
 "  call Decho("exe cd ".fnameescape(substitute(datadir,'\','/','ge')))
   exe "cd ".fnameescape(substitute(datadir,'\','/','ge'))
   split
-"  call Decho("exe e ".fnameescape(substitute(datafile,'\','/','ge')))
+"  call Decho("exe  e ".fnameescape(substitute(datafile,'\','/','ge')))
   exe "e ".fnameescape(substitute(datafile,'\','/','ge'))
   res 1000
   let s:downloads = 0
@@ -207,69 +202,68 @@
 "  call Decho("searching plugins for GetLatestVimScripts dependencies")
   let lastline    = line("$")
 "  call Decho("lastline#".lastline)
-  let plugins     = split(globpath(&rtp,"plugin/*.vim"),'\n')
+  let firstdir    = substitute(&rtp,',.*$','','')
+  let plugins     = split(globpath(firstdir,"plugin/*.vim"),'\n')
+  let plugins     = plugins + split(globpath(firstdir,"AsNeeded/*.vim"),'\n')
   let foundscript = 0
-  let firstdir= ""
 
+  " this loop updates the GetLatestVimScripts.dat file
+  " with dependencies explicitly mentioned in the plugins
+  " via   GetLatestVimScripts: ... lines
+  " It reads the plugin script at the end of the GetLatestVimScripts.dat
+  " file, examines it, and then removes it.
   for plugin in plugins
+"   call Decho(" ")
 "   call Decho("plugin<".plugin.">")
 
-   " don't process plugins in system directories
-   if firstdir == ""
-    let firstdir= substitute(plugin,'[/\\][^/\\]\+$','','')
-"    call Decho("setting firstdir<".firstdir.">")
-   else
-    let curdir= substitute(plugin,'[/\\][^/\\]\+$','','')
-"    call Decho("curdir<".curdir.">")
-    if curdir != firstdir
-"     call Decho("skipping subsequent plugins: curdir<".curdir."> != firstdir<".firstdir.">")
-     break
-    endif
-   endif
-
    " read plugin in
    " evidently a :r creates a new buffer (the "#" buffer) that is subsequently unused -- bwiping it
    $
-"   call Decho(" ")
 "   call Decho(".dependency checking<".plugin."> line$=".line("$"))
-"   call Decho("exe silent r ".fnameescape(plugin))
+"   call Decho("..exe silent r ".fnameescape(plugin))
    exe "silent r ".fnameescape(plugin)
    exe "silent bwipe ".bufnr("#")
 
    while search('^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+','W') != 0
-    let newscript= substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e')
-    let llp1     = lastline+1
-"    call Decho("..newscript<".newscript.">")
+    let depscript   = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e')
+    let depscriptid = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\(\d\+\)\s\+.*$','\1','')
+    let llp1        = lastline+1
+"    call Decho("..depscript<".depscript.">")
 
-    " don't process ""GetLatestVimScripts lines -- those that have been doubly-commented out
-    if newscript !~ '^"'
-     " found a "GetLatestVimScripts: # #" line in the script; check if its already in the datafile
-     let curline     = line(".")
-     let noai_script = substitute(newscript,'\s*:AutoInstall:\s*','','e')
-     exe llp1
-     let srchline    = search('\<'.noai_script.'\>','bW')
-"     call Decho("..noai_script<".noai_script."> srch=".srchline."curline#".line(".")." lastline#".lastline)
-
-     if srchline == 0
-      " found a new script to permanently include in the datafile
-      let keep_rega   = @a
-      let @a          = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','')
-      exe lastline."put a"
-      echomsg "Appending <".@a."> to ".datafile." for ".newscript
-"      call Decho("..APPEND (".noai_script.")<".@a."> to GetLatestVimScripts.dat")
-      let @a          = keep_rega
-      let lastline    = llp1
-      let curline     = curline     + 1
-      let foundscript = foundscript + 1
-"     else	" Decho
-"      call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")")
-     endif
-
-     let curline = curline + 1
-     exe curline
+    " found a "GetLatestVimScripts: # #" line in the script;
+    " check if its already in the datafile by searching backwards from llp1,
+    " the (prior to reading in the plugin script) last line plus one of the GetLatestVimScripts.dat file,
+    " for the script-id with no wrapping allowed.
+    let curline     = line(".")
+    let noai_script = substitute(depscript,'\s*:AutoInstall:\s*','','e')
+    exe llp1
+    let srchline    = search('^\s*'.depscriptid.'\s\+\d\+\s\+.*$','bW')
+    if srchline == 0
+     " this second search is taken when, for example, a   0 0 scriptname  is to be skipped over
+     let srchline= search('\<'.noai_script.'\>','bW')
     endif
+"    call Decho("..noai_script<".noai_script."> depscriptid#".depscriptid." srchline#".srchline." curline#".line(".")." lastline#".lastline)
+
+    if srchline == 0
+     " found a new script to permanently include in the datafile
+     let keep_rega   = @a
+     let @a          = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','')
+     echomsg "Appending <".@a."> to ".datafile." for ".depscript
+"     call Decho("..Appending <".@a."> to ".datafile." for ".depscript)
+     exe lastline."put a"
+     let @a          = keep_rega
+     let lastline    = llp1
+     let curline     = curline     + 1
+     let foundscript = foundscript + 1
+"    else	" Decho
+"     call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")")
+    endif
+
+    let curline = curline + 1
+    exe curline
    endwhile
 
+   " llp1: last line plus one
    let llp1= lastline + 1
 "   call Decho(".deleting lines: ".llp1.",$d")
    exe "silent! ".llp1.",$d"
@@ -282,7 +276,9 @@
    setlocal nomod
   endif
 
+  " --------------------------------------------------------------------
   " Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat
+  " --------------------------------------------------------------------
 "  call Decho("begin: checking out-of-date scripts using datafile<".datafile.">")
   setlocal lz
   1
@@ -322,8 +318,9 @@
 
   " restore events and current directory
   exe "cd ".fnameescape(substitute(origdir,'\','/','ge'))
-  let &ei= eikeep
-  let &hls= hlskeep
+  let &ei  = eikeep
+  let &hls = hlskeep
+  let &acd = acdkeep
   setlocal nolz
 "  call Dredir("BUFFER TEST (GetLatestVimScripts 2)","ls!")
 "  call Dret("GetLatestVimScripts : did ".s:downloads." downloads")
@@ -333,7 +330,7 @@
 "  GetOneScript: (Get Latest Vim Script) this function operates {{{1
 "    on the current line, interpreting two numbers and text as
 "    ScriptID, SourceID, and Filename.
-"    It downloads any scripts that have newer versions from vim.sf.net.
+"    It downloads any scripts that have newer versions from vim.sourceforge.net.
 fun! s:GetOneScript(...)
 "   call Dfunc("GetOneScript()")
 
@@ -391,6 +388,7 @@
 "   call Decho("fname   <".fname.">")
   endif
 
+  " plugin author protection from downloading his/her own scripts atop their latest work
   if scriptid == 0 || srcid == 0
    " When looking for :AutoInstall: lines, skip scripts that have   0 0 scriptname
    let @a= rega
@@ -416,21 +414,21 @@
 "  call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid)
   echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
 
-  " grab a copy of the plugin's vim.sf.net webpage
-  let scriptaddr = 'http://vim.sf.net/script.php?script_id='.scriptid
+  " grab a copy of the plugin's vim.sourceforge.net webpage
+  let scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='.scriptid
   let tmpfile    = tempname()
   let v:errmsg   = ""
 
   " make up to three tries at downloading the description
   let itry= 1
   while itry <= 3
-"   call Decho("try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr)
+"   call Decho(".try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr)
    if has("win32") || has("win16") || has("win95")
-"    call Decho("new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(tmpfile).' '.s:Escape(scriptaddr)."|bw!")
-    new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(tmpfile).' '.s:Escape(scriptaddr)|bw!
+"    call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)."|bw!")
+    new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw!
    else
-"    call Decho("exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(tmpfile)." ".s:Escape(scriptaddr))
-    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(tmpfile)." ".s:Escape(scriptaddr)
+"    call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr))
+    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr)
    endif
    if itry == 1
     exe "silent vsplit ".fnameescape(tmpfile)
@@ -495,8 +493,7 @@
   let latestsrcid = latestsrcid + 0
 "  call Decho("srcid=".srcid." latestsrcid=".latestsrcid." sname<".sname.">")
 
-  " has the plugin's most-recent srcid increased, which indicates
-  " that it has been updated
+  " has the plugin's most-recent srcid increased, which indicates that it has been updated
   if latestsrcid > srcid
 "   call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."]: need to update <".sname.">")
 
@@ -506,65 +503,103 @@
     let sname= "NEW_".sname
    endif
 
+   " -----------------------------------------------------------------------------
    " the plugin has been updated since we last obtained it, so download a new copy
-"   call Decho("...downloading new <".sname.">")
-   echomsg "...downloading new <".sname.">"
+   " -----------------------------------------------------------------------------
+"   call Decho(".downloading new <".sname.">")
+   echomsg ".downloading new <".sname.">"
    if has("win32") || has("win16") || has("win95")
-"    call Decho("new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(sname)." ".s:Escape('http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid)."|q")
-    new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(sname)." ".s:Escape('http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid)|q
+"    call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='.latestsrcid)."|q")
+    new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='.latestsrcid)|q
    else
-"    call Decho("exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(sname)." ".s:Escape('http://vim.sf.net/scripts/download_script.php?src_id='))
-    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".s:Escape(sname)." ".s:Escape('http://vim.sf.net/scripts/download_script.php?src_id=').latestsrcid
+"    call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='))
+    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id=').latestsrcid
    endif
 
+   " --------------------------------------------------------------------------
    " AutoInstall: only if doautoinstall has been requested by the plugin itself
+   " --------------------------------------------------------------------------
    if doautoinstall
-"    call Decho("attempting to do autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname))
+"    call Decho(" ")
+"    call Decho("Autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname))
     if filereadable(sname)
-"     call Decho("exe silent !".g:GetLatestVimScripts_mv." ".s:Escape(sname)." ".s:Escape(s:autoinstall))
-     exe "silent !".g:GetLatestVimScripts_mv." ".s:Escape(sname)." ".s:Escape(s:autoinstall)
+"     call Decho("<".sname."> is readable")
+"     call Decho("exe silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall))
+     exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
      let curdir    = escape(substitute(getcwd(),'\','/','ge'),"|[]*'\" #")
      let installdir= curdir."/Installed"
      if !isdirectory(installdir)
       call mkdir(installdir)
      endif
-"    call Decho("exe cd ".fnameescape(s:autoinstall))
+"     call Decho("curdir<".curdir."> installdir<".installdir.">")
+"     call Decho("exe cd ".fnameescape(s:autoinstall))
      exe "cd ".fnameescape(s:autoinstall)
+
+     " determine target directory for moves
+     let firstdir= substitute(&rtp,',.*$','','')
+     let pname   = substitute(sname,'\..*','.vim','')
+"     call Decho("determine tgtdir: is <".firstdir.'/AsNeeded/'.pname." readable?")
+     if filereadable(firstdir.'/AsNeeded/'.pname)
+      let tgtdir= "AsNeeded"
+     else
+      let tgtdir= "plugin"
+     endif
+"     call Decho("tgtdir<".tgtdir.">  pname<".pname.">")
      
      " decompress
      if sname =~ '\.bz2$'
 "      call Decho("decompress: attempt to bunzip2 ".sname)
-      exe "silent !bunzip2 ".s:Escape(sname)
+      exe "silent !bunzip2 ".shellescape(sname)
       let sname= substitute(sname,'\.bz2$','','')
 "      call Decho("decompress: new sname<".sname."> after bunzip2")
      elseif sname =~ '\.gz$'
 "      call Decho("decompress: attempt to gunzip ".sname)
-      exe "silent !gunzip ".s:Escape(sname)
+      exe "silent !gunzip ".shellescape(sname)
       let sname= substitute(sname,'\.gz$','','')
 "      call Decho("decompress: new sname<".sname."> after gunzip")
+     else
+"      call Decho("no decompression needed")
      endif
      
      " distribute archive(.zip, .tar, .vba) contents
      if sname =~ '\.zip$'
 "      call Decho("dearchive: attempt to unzip ".sname)
-      exe "silent !unzip -o ".s:Escape(sname)
+      exe "silent !unzip -o ".shellescape(sname)
      elseif sname =~ '\.tar$'
 "      call Decho("dearchive: attempt to untar ".sname)
-      exe "silent !tar -xvf ".s:Escape(sname)
+      exe "silent !tar -xvf ".shellescape(sname)
      elseif sname =~ '\.vba$'
 "      call Decho("dearchive: attempt to handle a vimball: ".sname)
       silent 1split
+      if exists("g:vimball_home")
+       let oldvimballhome= g:vimball_home
+      endif
+      let g:vimball_home= s:autoinstall
       exe "silent e ".fnameescape(sname)
       silent so %
       silent q
+      if exists("oldvimballhome")
+       let g:vimball_home= oldvimballhome
+      else
+       unlet g:vimball_home
+      endif
+     else
+"      call Decho("no dearchiving needed")
      endif
      
+     " ---------------------------------------------
+     " move plugin to plugin/ or AsNeeded/ directory
+     " ---------------------------------------------
      if sname =~ '.vim$'
-"      call Decho("dearchive: attempt to simply move ".sname." to plugin")
-      exe "silent !".g:GetLatestVimScripts_mv." ".s:Escape(sname)." plugin"
+"      call Decho("dearchive: attempt to simply move ".sname." to ".tgtdir)
+      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".tgtdir
      else
 "      call Decho("dearchive: move <".sname."> to installdir<".installdir.">")
-      exe "silent !".g:GetLatestVimScripts_mv." ".s:Escape(sname)." ".installdir
+      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".installdir
+     endif
+     if tgtdir != "plugin"
+"      call Decho("exe silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir)
+      exe "silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir
      endif
      
      " helptags step
@@ -600,20 +635,6 @@
 endfun
 
 " ---------------------------------------------------------------------
-" s:Escape: makes a string safe&suitable for the shell {{{2
-fun! s:Escape(name)
-"  call Dfunc("s:Escape(name<".a:name.">)")
-  if exists("*shellescape")
-   " shellescape() was added by patch 7.0.111
-   let name= shellescape(a:name)
-  else
-   let name= g:getscript_shq . a:name . g:getscript_shq
-  endif
-"  call Dret("s:Escape ".name)
-  return name
-endfun
-
-" ---------------------------------------------------------------------
 " Restore Options: {{{1
 let &cpo= s:keepcpo
 unlet s:keepcpo
diff --git a/runtime/autoload/gnat.vim b/runtime/autoload/gnat.vim
index cebde8e..0def672 100644
--- a/runtime/autoload/gnat.vim
+++ b/runtime/autoload/gnat.vim
@@ -1,14 +1,14 @@
 "------------------------------------------------------------------------------
 "  Description: Vim Ada/GNAT compiler file
 "     Language: Ada (GNAT)
-"          $Id$
+"          $Id: gnat.vim 887 2008-07-08 14:29:01Z krischik $
 "    Copyright: Copyright (C) 2006 Martin Krischik
 "   Maintainer:	Martin Krischi <krischik@users.sourceforge.net>k
 "		Ned Okie <nokie@radford.edu>
-"      $Author$
-"        $Date$
+"      $Author: krischik $
+"        $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/gnat.vim $
 "      History: 24.05.2006 MK Unified Headers
 "		16.07.2006 MK Ada-Mode as vim-ball
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index 1e181d0..dff8afd 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,10 +1,10 @@
 " netrw.vim: Handles file transfer and remote directory listing across
 "            AUTOLOAD SECTION
-" Date:		Aug 08, 2008
-" Version:	132
+" Date:		Dec 28, 2009
+" Version:	136
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2009 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -22,12 +22,18 @@
 if &cp || exists("g:loaded_netrw")
   finish
 endif
+let g:loaded_netrw = "v136"
+if v:version < 702
+ echohl WarningMsg
+ echo "***warning*** this version of netrw needs vim 7.2"
+ echohl Normal
+ finish
+endif
 if !exists("s:NOTE")
  let s:NOTE    = 0
  let s:WARNING = 1
  let s:ERROR   = 2
 endif
-let g:loaded_netrw = "v132"
 
 " sanity checks
 if v:version < 700
@@ -45,25 +51,41 @@
 " ======================
 
 " ---------------------------------------------------------------------
+" NetrwInit: initializes variables if they haven't been defined {{{2
+"            Loosely,  varname = value.
+fun s:NetrwInit(varname,value)
+  if !exists(a:varname)
+   if type(a:value) == 0
+    exe "let ".a:varname."=".a:value
+   elseif type(a:value) == 1
+    exe "let ".a:varname."="."'".a:value."'"
+   else
+    exe "let ".a:varname."=".a:value
+   endif
+  endif
+endfun
+
+" ---------------------------------------------------------------------
 "  Netrw Constants: {{{2
-if !exists("g:NETRW_BOOKMARKMAX")
- let g:NETRW_BOOKMARKMAX= 0
-endif
-if !exists("g:NETRW_DIRHIST_CNT")
- let g:NETRW_DIRHIST_CNT= 0
-endif
+call s:NetrwInit("g:netrw_dirhist_cnt",0)
 if !exists("s:LONGLIST")
- let s:THINLIST = 0
- let s:LONGLIST = 1
- let s:WIDELIST = 2
- let s:TREELIST = 3
- let s:MAXLIST  = 4
+ call s:NetrwInit("s:THINLIST",0)
+ call s:NetrwInit("s:LONGLIST",1)
+ call s:NetrwInit("s:WIDELIST",2)
+ call s:NetrwInit("s:TREELIST",3)
+ call s:NetrwInit("s:MAXLIST" ,4)
 endif
 
 " ---------------------------------------------------------------------
 " Default values for netrw's global protocol variables {{{2
 if !exists("g:netrw_dav_cmd")
+ if executable("cadaver")
   let g:netrw_dav_cmd	= "cadaver"
+ elseif executable("curl")
+  let g:netrw_dav_cmd	= "curl"
+ else
+  let g:netrw_dav_cmd   = ""
+ endif
 endif
 if !exists("g:netrw_fetch_cmd")
  if executable("fetch")
@@ -78,35 +100,28 @@
 if !exists("g:netrw_http_cmd")
  if executable("elinks")
   let g:netrw_http_cmd = "elinks"
-  let g:netrw_http_xcmd= "-dump >"
+  call s:NetrwInit("g:netrw_http_xcmd","-source >")
  elseif executable("links")
   let g:netrw_http_cmd = "links"
-  let g:netrw_http_xcmd= "-dump >"
+  call s:NetrwInit("g:netrw_http_xcmd","-source >")
  elseif executable("curl")
-  let g:netrw_http_cmd	= "curl -o"
+  let g:netrw_http_cmd	= "curl"
+  call s:NetrwInit("g:netrw_http_xcmd","-o")
  elseif executable("wget")
-  let g:netrw_http_cmd	= "wget -q -O"
+  let g:netrw_http_cmd	= "wget"
+  call s:NetrwInit("g:netrw_http_xcmd","-q -O")
  elseif executable("fetch")
-  let g:netrw_http_cmd	= "fetch -o"
+  let g:netrw_http_cmd	= "fetch"
+  call s:NetrwInit("g:netrw_http_xcmd","-o")
  else
   let g:netrw_http_cmd	= ""
  endif
 endif
-if !exists("g:netrw_rcp_cmd")
-  let g:netrw_rcp_cmd	= "rcp"
-endif
-if !exists("g:netrw_rsync_cmd")
-  let g:netrw_rsync_cmd	= "rsync"
-endif
-if !exists("g:netrw_scp_cmd")
-  let g:netrw_scp_cmd	= "scp -q"
-endif
-if !exists("g:netrw_sftp_cmd")
-  let g:netrw_sftp_cmd	= "sftp"
-endif
-if !exists("g:netrw_ssh_cmd")
- let g:netrw_ssh_cmd= "ssh"
-endif
+call s:NetrwInit("g:netrw_rcp_cmd"  , "rcp")
+call s:NetrwInit("g:netrw_rsync_cmd", "rsync")
+call s:NetrwInit("g:netrw_scp_cmd"  , "scp -q")
+call s:NetrwInit("g:netrw_sftp_cmd" , "sftp")
+call s:NetrwInit("g:netrw_ssh_cmd"  , "ssh")
 
 if (has("win32") || has("win95") || has("win64") || has("win16"))
   \ && exists("g:netrw_use_nt_rcp")
@@ -134,40 +149,24 @@
  endif
 endif
 " Default values - a-c ---------- {{{3
-if !exists("g:netrw_alto")
- let g:netrw_alto= &sb
-endif
-if !exists("g:netrw_altv")
- let g:netrw_altv= &spr
-endif
-if !exists("g:netrw_browse_split")
- let g:netrw_browse_split= 0
-endif
-if !exists("g:netrw_chgwin")
- let g:netrw_chgwin    = -1
-endif
-if !exists("g:netrw_compress")
- let g:netrw_compress= "gzip"
-endif
-if !exists("g:netrw_ctags")
- let g:netrw_ctags= "ctags"
+call s:NetrwInit("g:netrw_alto"        , &sb)
+call s:NetrwInit("g:netrw_altv"        , &spr)
+call s:NetrwInit("g:netrw_banner"      , 1)
+call s:NetrwInit("g:netrw_browse_split", 0)
+call s:NetrwInit("g:netrw_chgwin"      , -1)
+call s:NetrwInit("g:netrw_compress"    , "gzip")
+call s:NetrwInit("g:netrw_ctags"       , "ctags")
+if !exists("g:netrw_cursorline")
+ let g:netrw_cursorline= 1
+ let s:netrw_usercul   = &cursorline
+ let s:netrw_usercuc   = &cursorcolumn
 endif
 " Default values - d-g ---------- {{{3
-if !exists("g:NETRW_DIRHIST_CNT")
- let g:NETRW_DIRHIST_CNT= 0
-endif
-if !exists("g:netrw_decompress")
- let g:netrw_decompress= { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
-endif
-if !exists("g:netrw_dirhistmax")
- let g:netrw_dirhistmax= 10
-endif
-if !exists("g:netrw_fastbrowse")
- let g:netrw_fastbrowse= 1
-endif
-if !exists("g:netrw_ftp_browse_reject")
- let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$'
-endif
+call s:NetrwInit("g:netrw_dirhist_cnt"      , 0)
+call s:NetrwInit("g:netrw_decompress"       , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf"}')
+call s:NetrwInit("g:netrw_dirhistmax"       , 10)
+call s:NetrwInit("g:netrw_fastbrowse"       , 1)
+call s:NetrwInit("g:netrw_ftp_browse_reject", '^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$')
 if !exists("g:netrw_ftp_list_cmd")
  if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
   let g:netrw_ftp_list_cmd     = "ls -lF"
@@ -179,13 +178,9 @@
   let g:netrw_ftp_sizelist_cmd = "dir"
  endif
 endif
-if !exists("g:netrw_ftpmode")
- let g:netrw_ftpmode= "binary"
-endif
+call s:NetrwInit("g:netrw_ftpmode",'binary')
 " Default values - h-lh ---------- {{{3
-if !exists("g:netrw_hide")
- let g:netrw_hide= 1
-endif
+call s:NetrwInit("g:netrw_hide",1)
 if !exists("g:netrw_ignorenetrc")
  if &shell =~ '\c\<\%(cmd\|4nt\)\.exe$'
   let g:netrw_ignorenetrc= 1
@@ -193,9 +188,7 @@
   let g:netrw_ignorenetrc= 0
  endif
 endif
-if !exists("g:netrw_keepdir")
- let g:netrw_keepdir= 1
-endif
+call s:NetrwInit("g:netrw_keepdir",1)
 if !exists("g:netrw_list_cmd")
  if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
   " provide a 'pscp' listing command
@@ -211,9 +204,7 @@
   let g:netrw_list_cmd= ""
  endif
 endif
-if !exists("g:netrw_list_hide")
- let g:netrw_list_hide= ""
-endif
+call s:NetrwInit("g:netrw_list_hide","")
 " Default values - lh-lz ---------- {{{3
 if !exists("g:netrw_localcopycmd")
  if has("win32") || has("win95") || has("win64") || has("win16")
@@ -228,9 +219,7 @@
   let g:netrw_localcopycmd= ""
  endif
 endif
-if !exists("g:netrw_local_mkdir")
- let g:netrw_local_mkdir= "mkdir"
-endif
+call s:NetrwInit("g:netrw_local_mkdir","mkdir")
 if !exists("g:netrw_localmovecmd")
  if has("win32") || has("win95") || has("win64") || has("win16")
   if g:netrw_cygwin
@@ -244,128 +233,66 @@
   let g:netrw_localmovecmd= ""
  endif
 endif
-if !exists("g:netrw_local_rmdir")
- let g:netrw_local_rmdir= "rmdir"
-endif
-if !exists("g:netrw_liststyle")
- let g:netrw_liststyle= s:THINLIST
-endif
+call s:NetrwInit("g:netrw_local_rmdir", "rmdir")
+call s:NetrwInit("g:netrw_liststyle"  , s:THINLIST)
+" sanity checks
 if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
- " sanity check
  let g:netrw_liststyle= s:THINLIST
 endif
 if g:netrw_liststyle == s:LONGLIST && g:netrw_scp_cmd !~ '^pscp'
  let g:netrw_list_cmd= g:netrw_list_cmd." -l"
 endif
 " Default values - m-r ---------- {{{3
-if !exists("g:netrw_markfileesc")
- let g:netrw_markfileesc= '*./[\~'
+call s:NetrwInit("g:netrw_markfileesc"   , '*./[\~')
+call s:NetrwInit("g:netrw_maxfilenamelen", 32)
+call s:NetrwInit("g:netrw_menu"          , 1)
+call s:NetrwInit("g:netrw_mkdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir")
+call s:NetrwInit("g:netrw_mousemaps"     , (exists("&mouse") && &mouse =~ '[anh]'))
+call s:NetrwInit("g:netrw_retmap"        , 0)
+if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
+ call s:NetrwInit("g:netrw_chgperm"       , "chmod PERM FILENAME")
+elseif has("win32") || has("win95") || has("win64") || has("win16")
+ call s:NetrwInit("g:netrw_chgperm"       , "cacls FILENAME /e /p PERM")
+else
+ call s:NetrwInit("g:netrw_chgperm"       , "chmod PERM FILENAME")
 endif
-if !exists("g:netrw_maxfilenamelen")
- let g:netrw_maxfilenamelen= 32
-endif
-if !exists("g:netrw_menu")
- let g:netrw_menu= 1
-endif
-if !exists("g:netrw_mkdir_cmd")
- let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir"
-endif
-if !exists("g:netrw_mousemaps")
- if exists("&mouse") && &mouse =~ '[anh]'
-  let g:netrw_mousemaps= 1
- else
-  let g:netrw_mousemaps= 0
- endif
-endif
-if !exists("g:netrw_retmap")
- let g:netrw_retmap= 0
-endif
-if !exists("g:netrw_preview")
- let g:netrw_preview= 0
-endif
-if !exists("g:netrw_scpport")
- let g:netrw_scpport= "-P"
-endif
-if !exists("g:netrw_sshport")
- let g:netrw_sshport= "-p"
-endif
-if !exists("g:netrw_rename_cmd")
- let g:netrw_rename_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mv"
-endif
-if !exists("g:netrw_rm_cmd")
- let g:netrw_rm_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm"
-endif
-if !exists("g:netrw_rmdir_cmd")
- let g:netrw_rmdir_cmd = g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir"
-endif
-if !exists("g:netrw_rmf_cmd")
- let g:netrw_rmf_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f"
-endif
+call s:NetrwInit("g:netrw_preview"       , 0)
+call s:NetrwInit("g:netrw_scpport"       , "-P")
+call s:NetrwInit("g:netrw_sshport"       , "-p")
+call s:NetrwInit("g:netrw_rename_cmd"    , g:netrw_ssh_cmd." USEPORT HOSTNAME mv")
+call s:NetrwInit("g:netrw_rm_cmd"        , g:netrw_ssh_cmd." USEPORT HOSTNAME rm")
+call s:NetrwInit("g:netrw_rmdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir")
+call s:NetrwInit("g:netrw_rmf_cmd"       , g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f")
 " Default values - s ---------- {{{3
- " set up shell quoting character
-if exists("g:netrw_silent") && g:netrw_silent != 0
- let s:netrw_silentxfer= "silent "
-else
- let s:netrw_silentxfer= ""
-endif
-if !exists("g:netrw_sort_by")
- " alternatives: date size
- let g:netrw_sort_by= "name"
-endif
-if !exists("g:netrw_sort_options")
- let g:netrw_sort_options= ""
-endif
-if !exists("g:netrw_sort_direction")
- " alternative: reverse  (z y x ...)
- let g:netrw_sort_direction= "normal"
-endif
+" g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename
+call s:NetrwInit("g:netrw_sepchr"        , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>")
+call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "silent " : "")
+call s:NetrwInit("g:netrw_sort_by"       , "name") " alternatives: date                                      , size
+call s:NetrwInit("g:netrw_sort_options"  , "")
+call s:NetrwInit("g:netrw_sort_direction", "normal") " alternative: reverse  (z y x ...)
 if !exists("g:netrw_sort_sequence")
- let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
-endif
-if !exists("g:netrw_special_syntax")
- let g:netrw_special_syntax= 0
-endif
-if !exists("g:netrw_ssh_browse_reject")
-  let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
-endif
-if !has("patch192")
- if !exists("g:netrw_use_noswf")
-  let g:netrw_use_noswf= 1
+ if has("unix")
+  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
+ else
+  let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
  endif
-else
-  let g:netrw_use_noswf= 0
 endif
+call s:NetrwInit("g:netrw_special_syntax"   , 0)
+call s:NetrwInit("g:netrw_ssh_browse_reject", '^total\s\+\d\+$')
+call s:NetrwInit("g:netrw_use_noswf"        , 0)
 " Default values - t-w ---------- {{{3
-if !exists("g:netrw_timefmt")
- let g:netrw_timefmt= "%c"
-endif
-if !exists("g:netrw_xstrlen")
- let g:netrw_xstrlen= 1
-endif
-if !exists("g:NetrwTopLvlMenu")
- let g:NetrwTopLvlMenu= "Netrw."
-endif
-if !exists("g:netrw_use_errorwindow")
- let g:netrw_use_errorwindow= 1
-endif
-if !exists("g:netrw_win95ftp")
- let g:netrw_win95ftp= 1
-endif
-if !exists("g:netrw_winsize")
- let g:netrw_winsize= ""
-endif
+call s:NetrwInit("g:netrw_timefmt","%c")
+call s:NetrwInit("g:netrw_xstrlen",0)
+call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
+call s:NetrwInit("g:netrw_use_errorwindow",1)
+call s:NetrwInit("g:netrw_win95ftp",1)
+call s:NetrwInit("g:netrw_winsize","")
 " ---------------------------------------------------------------------
 " Default values for netrw's script variables: {{{2
-if !exists("g:netrw_fname_escape")
- let g:netrw_fname_escape= ' ?&;%'
-endif
-if !exists("g:netrw_glob_escape")
-  let g:netrw_glob_escape= '[]*?`{~$'
-endif
-if !exists("g:netrw_tmpfile_escape")
- let g:netrw_tmpfile_escape= ' &;'
-endif
-let s:netrw_map_escape = "<|\n\r\\\<C-V>\""
+call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
+call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$')
+call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
+call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
 
 " BufEnter event ignored by decho when following variable is true
 "  Has a side effect that doau BufReadPost doesn't work, so
@@ -384,7 +311,7 @@
 "             NetrwBrowse.
 "             vt: normally its "w:" or "s:" (a variable type)
 fun! s:NetrwOptionSave(vt)
-"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
+"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$"))
 
 "  call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
   if !exists("{a:vt}netrw_optionsave")
@@ -430,7 +357,7 @@
 " ------------------------------------------------------------------------
 " s:NetrwOptionRestore: restore options {{{2
 fun! s:NetrwOptionRestore(vt)
-"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%"))
+"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")." winnr($)=".winnr("$"))
   if !exists("{a:vt}netrw_optionsave")
 "   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
 "   call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
@@ -503,8 +430,8 @@
 " ---------------------------------------------------------------------
 " s:NetrwSafeOptions: sets options to help netrw do its job {{{2
 fun! s:NetrwSafeOptions()
-"  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
-"  call Decho("window's ft=".&ft)
+"  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$"))
+"  call Decho("win#".winnr()."'s ft=".&ft)
   setlocal cino=
   setlocal com=
   setlocal cpo-=aA
@@ -513,9 +440,16 @@
   setlocal fo=nroql2
   setlocal tw=0
   setlocal report=10000
+  setlocal isk+=@ isk+=* isk+=/
   if g:netrw_use_noswf && has("win32") && !has("win95")
    setlocal noswf
   endif
+
+  " allow the user to override safe options
+  if &ft == "netrw"
+   silent keepalt keepjumps doau FileType netrw
+  endif
+
 "  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
 "  call Dret("s:NetrwSafeOptions")
 endfun
@@ -566,6 +500,16 @@
 "  call Dret("netrw#NetrwClean")
 endfun
 
+" ---------------------------------------------------------------------
+" netrw#Nread: {{{2
+fun! netrw#Nread(mode,fname)
+"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
+  call netrw#NetrwSavePosn()
+  call netrw#NetRead(a:mode,a:fname)
+  call netrw#NetrwRestorePosn()
+"  call Dret("netrw#Nread")
+endfun
+
 " ------------------------------------------------------------------------
 "  Netrw Transfer Functions: {{{1
 " ===============================
@@ -579,11 +523,11 @@
 fun! netrw#NetRead(mode,...)
 "  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
 
-  " save options {{{3
+  " NetRead: save options {{{3
   call s:NetrwOptionSave("w:")
   call s:NetrwSafeOptions()
 
-  " interpret mode into a readcmd {{{3
+  " NetRead: interpret mode into a readcmd {{{3
   if     a:mode == 0 " read remote file before current line
    let readcmd = "0r"
   elseif a:mode == 1 " read file after current line
@@ -599,7 +543,7 @@
   let ichoice = (a:0 == 0)? 0 : 1
 "  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
 
-  " Get Temporary Filename {{{3
+  " NetRead: get temporary filename {{{3
   let tmpfile= s:GetTempfile("")
   if tmpfile == ""
 "   call Dret("netrw#NetRead : unable to get a tempfile!")
@@ -666,8 +610,12 @@
 "   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
 
-   " Determine method of read (ftp, rcp, etc) {{{3
+   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
    call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetRead : unsupported method")
+    return
+   endif
    let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
 
    " Check if NetrwBrowse() should be handling this request
@@ -680,14 +628,14 @@
    endif
 
    " ============
-   " Perform Protocol-Based Read {{{3
+   " NetRead: Perform Protocol-Based Read {{{3
    " ===========================
    if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
     echo "(netrw) Processing your read request..."
    endif
 
    ".........................................
-   " rcp:  NetRead Method #1 {{{3
+   " NetRead: (rcp)  NetRead Method #1 {{{3
    if  b:netrw_method == 1 " read with rcp
 "    call Decho("read via rcp (method #1)")
    " ER: nothing done with g:netrw_uid yet?
@@ -709,12 +657,12 @@
     endif
    endif
 "   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
-   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
    let b:netrw_lastfile = choice
 
    ".........................................
-   " ftp + <.netrc>:  NetRead Method #2 {{{3
+   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
    elseif b:netrw_method  == 2		" read with ftp + <.netrc>
 "     call Decho("read via ftp+.netrc (method #2)")
      let netrw_fname= b:netrw_fname
@@ -745,7 +693,8 @@
      endif
      call s:SaveBufVars()
      bd!
-     if bufname("%") == "" && line("$") == 1 && getline("$") == ""
+     if bufname("%") == "" && getline("$") == "" && line('$') == 1
+      " needed when one sources a file in a nolbl setting window via ftp
       q!
      endif
      call s:RestoreBufVars()
@@ -753,7 +702,7 @@
      let b:netrw_lastfile = choice
 
    ".........................................
-   " ftp + machine,id,passwd,filename:  NetRead Method #3 {{{3
+   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
    elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
     " Construct execution string (four lines) which will be passed through filter
 "    call Decho("read via ftp+mipf (method #3)")
@@ -809,7 +758,7 @@
     let b:netrw_lastfile = choice
 
    ".........................................
-   " scp: NetRead Method #4 {{{3
+   " NetRead: (scp) NetRead Method #4 {{{3
    elseif     b:netrw_method  == 4	" read with scp
 "    call Decho("read via scp (method #4)")
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -817,13 +766,13 @@
     else
      let useport= ""
     endif
-"    call Decho("exe s:netrw_silentxfer.!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
     exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
 
    ".........................................
-   " http: NetRead Method #5 (wget) {{{3
+   " NetRead: (http) NetRead Method #5 (wget) {{{3
    elseif     b:netrw_method  == 5
 "    call Decho("read via http (method #5)")
     if g:netrw_http_cmd == ""
@@ -863,33 +812,43 @@
     setlocal ro
 
    ".........................................
-   " cadaver: NetRead Method #6 {{{3
+   " NetRead: (dav) NetRead Method #6 {{{3
    elseif     b:netrw_method  == 6
 "    call Decho("read via cadaver (method #6)")
 
-    " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    new
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
-    else
-     put ='open '.g:netrw_machine
+    if !executable(g:netrw_dav_cmd)
+     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
+"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
+     return
     endif
-    put ='user '.g:netrw_uid.' '.s:netrw_passwd
-    put ='get '.netrw_fname.' '.tmpfile
-    put ='quit'
+    if g:netrw_dav_cmd =~ "curl"
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
+     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    else
+     " Construct execution string (four lines) which will be passed through filter
+     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+     new
+     setlocal ff=unix
+     if exists("g:netrw_port") && g:netrw_port != ""
+      put ='open '.g:netrw_machine.' '.g:netrw_port
+     else
+      put ='open '.g:netrw_machine
+     endif
+     put ='user '.g:netrw_uid.' '.s:netrw_passwd
+     put ='get '.netrw_fname.' '.tmpfile
+     put ='quit'
 
-    " perform cadaver operation:
-    norm! 1Gdd
+     " perform cadaver operation:
+     norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_dav_cmd)
-    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
-    bd!
+     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+     bd!
+    endif
     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
 
    ".........................................
-   " rsync: NetRead Method #7 {{{3
+   " NetRead: (rsync) NetRead Method #7 {{{3
    elseif     b:netrw_method  == 7
 "    call Decho("read via rsync (method #7)")
 "    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
@@ -898,7 +857,7 @@
     let b:netrw_lastfile = choice
 
    ".........................................
-   " fetch: NetRead Method #8 {{{3
+   " NetRead: (fetch) NetRead Method #8 {{{3
    "    fetch://[user@]host[:http]/path
    elseif     b:netrw_method  == 8
 "    call Decho("read via fetch (method #8)")
@@ -928,7 +887,7 @@
     setlocal ro
 
    ".........................................
-   " sftp: NetRead Method #9 {{{3
+   " NetRead: (sftp) NetRead Method #9 {{{3
    elseif     b:netrw_method  == 9
 "    call Decho("read via sftp (method #9)")
 "    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
@@ -937,13 +896,13 @@
     let b:netrw_lastfile = choice
 
    ".........................................
-   " Complain {{{3
+   " NetRead: Complain {{{3
    else
     call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
    endif
   endwhile
 
-  " cleanup {{{3
+  " NetRead: cleanup {{{3
   if exists("b:netrw_method")
 "   call Decho("cleanup b:netrw_method and b:netrw_fname")
    unlet b:netrw_method
@@ -951,7 +910,7 @@
   endif
   if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't'
 "   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
-   call s:NetrwDelete(fnameescape(tmpfile))
+   call s:NetrwDelete(tmpfile)
   endif
   call s:NetrwOptionRestore("w:")
 
@@ -963,12 +922,12 @@
 fun! netrw#NetWrite(...) range
 "  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
 
-  " option handling
+  " NetWrite: option handling {{{3
   let mod= 0
   call s:NetrwOptionSave("w:")
   call s:NetrwSafeOptions()
 
-  " Get Temporary Filename {{{3
+  " NetWrite: Get Temporary Filename {{{3
   let tmpfile= s:GetTempfile("")
   if tmpfile == ""
 "   call Dret("netrw#NetWrite : unable to get a tempfile!")
@@ -1007,7 +966,7 @@
    0file!
   endif
 
-  " While choice loop: {{{3
+  " NetWrite: while choice loop: {{{3
   while ichoice <= a:0
 
    " Process arguments: {{{4
@@ -1065,9 +1024,13 @@
 
    " Determine method of write (ftp, rcp, etc) {{{4
    call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetWrite : unsupported method")
+    return
+   endif
 
    " =============
-   " Perform Protocol-Based Write {{{4
+   " NetWrite: Perform Protocol-Based Write {{{3
    " ============================
    if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
     echo "(netrw) Processing your write request..."
@@ -1075,7 +1038,7 @@
    endif
 
    ".........................................
-   " rcp: NetWrite Method #1 {{{4
+   " NetWrite: (rcp) NetWrite Method #1 {{{3
    if  b:netrw_method == 1
 "    call Decho("write via rcp (method #1)")
     if s:netrw_has_nt_rcp == 1
@@ -1096,11 +1059,17 @@
     let b:netrw_lastfile = choice
 
    ".........................................
-   " ftp + <.netrc>: NetWrite Method #2 {{{4
+   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
    elseif b:netrw_method == 2
 "    call Decho("write via ftp+.netrc (method #2)")
-    let netrw_fname= b:netrw_fname
-    new
+    let netrw_fname = b:netrw_fname
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let bhkeep      = &l:bh
+    let curbuf      = bufnr("%")
+    setlocal bh=hide
+    enew
+
 "    call Decho("filter input window#".winnr())
     setlocal ff=unix
     put =g:netrw_ftpmode
@@ -1126,17 +1095,29 @@
      endif
      let mod=1
     endif
-    bd!
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+
     let b:netrw_lastfile = choice
 
    ".........................................
-   " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{4
+   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
    elseif b:netrw_method == 3
-    " Construct execution string (four lines) which will be passed through filter
+    " Construct execution string (three or more lines) which will be passed through filter
 "    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname= b:netrw_fname
-    new
+    let netrw_fname = b:netrw_fname
+    let bhkeep      = &l:bh
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let curbuf      = bufnr("%")
+    setlocal bh=hide
+    enew
     setlocal ff=unix
+
     if exists("g:netrw_port") && g:netrw_port != ""
      put ='open '.g:netrw_machine.' '.g:netrw_port
 "     call Decho("filter input: ".getline('.'))
@@ -1153,6 +1134,12 @@
      put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline('.'))
     endif
+    put =g:netrw_ftpmode
+"    call Decho("filter input: ".getline('$'))
+    if exists("g:netrw_ftpextracmd")
+     put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline("$"))
+    endif
     put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
 "    call Decho("filter input: ".getline('.'))
     " save choice/id/password for future use
@@ -1172,10 +1159,15 @@
      endif
      let mod=1
     endif
-    bd!
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh= bhkeep
+    exe filtbuf."bw!"
 
    ".........................................
-   " scp: NetWrite Method #4 {{{4
+   " NetWrite: (scp) NetWrite Method #4 {{{3
    elseif     b:netrw_method == 4
 "    call Decho("write via scp (method #4)")
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -1188,7 +1180,7 @@
     let b:netrw_lastfile = choice
 
    ".........................................
-   " http: NetWrite Method #5 {{{4
+   " NetWrite: (http) NetWrite Method #5 {{{3
    elseif     b:netrw_method == 5
 "    call Decho("write via http (method #5)")
     if !exists("g:netrw_quiet")
@@ -1196,13 +1188,19 @@
     endif
 
    ".........................................
-   " dav: NetWrite Method #6 (cadaver) {{{4
+   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
    elseif     b:netrw_method == 6
 "    call Decho("write via cadaver (method #6)")
 
     " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    new
+    let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape)
+    let bhkeep      = &l:bh
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let curbuf      = bufnr("%")
+    setlocal bh=hide
+    enew
+
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
      put ='open '.g:netrw_machine.' '.g:netrw_port
@@ -1218,11 +1216,17 @@
     norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_dav_cmd)
     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
-    bd!
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+
     let b:netrw_lastfile = choice
 
    ".........................................
-   " rsync: NetWrite Method #7 {{{4
+   " NetWrite: (rsync) NetWrite Method #7 {{{3
    elseif     b:netrw_method == 7
 "    call Decho("write via rsync (method #7)")
 "    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
@@ -1230,7 +1234,7 @@
     let b:netrw_lastfile = choice
 
    ".........................................
-   " sftp: NetWrite Method #9 {{{4
+   " NetWrite: (sftp) NetWrite Method #9 {{{3
    elseif     b:netrw_method == 9
 "    call Decho("read via sftp (method #9)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
@@ -1239,24 +1243,32 @@
     else
      let uid_machine = g:netrw_machine
     endif
-    new
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let bhkeep = &l:bh
+    let curbuf = bufnr("%")
+    setlocal bh=hide
+    enew
+
     setlocal ff=unix
-    put ='put \"'.escape(tmpfile,'\').'\" '.netrw_fname
+    call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
 "    call Decho("filter input: ".getline('.'))
-    norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
     exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)
-    bd!
-    let b:netrw_lastfile= choice
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+    let b:netrw_lastfile = choice
 
    ".........................................
-   " Complain {{{4
+   " NetWrite: Complain {{{3
    else
     call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
    endif
   endwhile
 
-  " Cleanup: {{{3
+  " NetWrite: Cleanup: {{{3
 "  call Decho("cleanup")
   if s:FileReadable(tmpfile)
 "   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
@@ -1269,6 +1281,7 @@
    let &mod= mod
   endif
 
+  " restore equalalways
 "  call Dret("netrw#NetWrite")
 endfun
 
@@ -1370,11 +1383,7 @@
    " rename buffer back to remote filename
 "   call Decho("exe silent! keepalt file ".fnameescape(rfile))
    exe "silent! keepalt file ".fnameescape(rfile)
-   if a:method == 5
-    set ft=html
-   else
-    filetype detect
-   endif
+   filetype detect
 "   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
    let line1 = 1
    let line2 = line("$")
@@ -1406,7 +1415,7 @@
 "   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
   endif
 
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
+  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
    " update the Buffers menu
    call s:UpdateBuffersMenu()
   endif
@@ -1422,18 +1431,34 @@
 
 " ------------------------------------------------------------------------
 " s:NetrwMethod:  determine method of transfer {{{2
-"  method == 1: rcp
-"	     2: ftp + <.netrc>
-"	     3: ftp + machine, id, password, and [path]filename
-"	     4: scp
-"	     5: http (wget)
-"	     6: cadaver
-"	     7: rsync
-"	     8: fetch
-"	     9: sftp
-fun! s:NetrwMethod(choice)  " globals: method machine id passwd fname
+" Input:
+"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
+" Output:
+"  b:netrw_method= 1: rcp                                             
+"                  2: ftp + <.netrc>                                  
+"	           3: ftp + machine, id, password, and [path]filename 
+"	           4: scp                                             
+"	           5: http (wget)                                     
+"	           6: dav
+"	           7: rsync                                           
+"	           8: fetch                                           
+"	           9: sftp                                            
+"  g:netrw_machine= hostname
+"  b:netrw_fname  = filename
+"  g:netrw_port   = optional port number (for ftp)
+"  g:netrw_choice = copy of input url (choice)
+fun! s:NetrwMethod(choice)
 "   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
 
+   " record current g:netrw_machine, if any
+   " curmachine used if protocol == ftp and no .netrc
+   if exists("g:netrw_machine")
+    let curmachine= g:netrw_machine
+"    call Decho("curmachine<".curmachine.">")
+   else
+    let curmachine= "N O T A HOST"
+   endif
+
   " initialization
   let b:netrw_method  = 0
   let g:netrw_machine = ""
@@ -1449,7 +1474,7 @@
   " rcphf    : [user@]host:filename		     Use rcp
   " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
   " httpurm  : http://[user@]host/filename	     Use wget
-  " davurm   : dav[s]://host[:port]/path             Use cadaver
+  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
   " rsyncurm : rsync://host[:port]/path              Use rsync
   " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
   " sftpurm  : sftp://[user@]host/filename  Use scp
@@ -1518,9 +1543,14 @@
    let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
    let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
    let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
+"   call Decho("g:netrw_machine<".g:netrw_machine.">")
    if userid != ""
     let g:netrw_uid= userid
    endif
+   if exists("s:netrw_passwd") && curmachine != g:netrw_machine
+    " if there's a change in hostname, require password re-entry
+    unlet s:netrw_passwd
+   endif
    if exists("g:netrw_uid") && exists("s:netrw_passwd")
     let b:netrw_method = 3
    else
@@ -1592,7 +1622,7 @@
 
   else
    if !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:WARNING,"cannot determine method",45)
+    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
    endif
    let b:netrw_method  = -1
   endif
@@ -1626,10 +1656,24 @@
 if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
  fun! NetReadFixup(method, line1, line2)
 "   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+
+   " sanity checks -- attempt to convert inputs to integers
+   let method = a:method + 0
+   let line1  = a:line1 + 0
+   let line2  = a:line2 + 0
+   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
+"    call Dret("NetReadFixup")
+    return
+   endif
+
    if method == 3   " ftp (no <.netrc>)
     let fourblanklines= line2 - 3
-    silent fourblanklines.",".line2."g/^\s*/d"
+    if fourblanklines >= line1
+     exe "silent ".fourblanklines.",".line2."g/^\s*$/d"
+     call histdel("/",-1)
+    endif
    endif
+
 "   call Dret("NetReadFixup")
  endfun
 endif
@@ -1678,7 +1722,7 @@
    nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
    nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
    nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
    nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
    nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
@@ -1694,25 +1738,28 @@
    nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
    nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
    nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(1)<cr>
+   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> c		:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
    nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("")<cr>
    nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(1)<cr>
+   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
    nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(3)<cr>
    nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(1)<cr>
    nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
    nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookmarkDir(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
    nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
    nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
    nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
    nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookmarkDir(4,expand("%"))<cr>
-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookmarkDir(5,expand("%"))<cr>
+   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
    nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
    nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
    nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
@@ -1754,7 +1801,7 @@
    nnoremap <buffer> <silent> <c-l>	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
    nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
    nnoremap <buffer> <silent> a		:call <SID>NetrwHide(0)<cr>
-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
    nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
    nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
@@ -1770,23 +1817,26 @@
    nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
    nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
    nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_cur)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
    nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
+   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
    nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(0)<cr>
+   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
    nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(0)<cr>
    nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
    nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
    nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(0)<cr>
-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookmarkDir(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
    nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
    nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
    nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
    nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookmarkDir(4,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookmarkDir(5,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
    nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
    nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(0)<cr>
@@ -1836,7 +1886,7 @@
 endfun
 
 " ---------------------------------------------------------------------
-"  s:NetrwBookmarkDir: {{{2
+"  s:NetrwBookHistHandler: {{{2
 "    0: (user: <mb>)   bookmark current directory
 "    1: (user: <gb>)   change to the bookmarked directory
 "    2: (user: <qb>)   list bookmarks
@@ -1844,32 +1894,27 @@
 "    4: (user: <u>)    go up   (previous) bookmark
 "    5: (user: <U>)    go down (next)     bookmark
 "    6: (user: <mB>)   delete bookmark
-fun! s:NetrwBookmarkDir(chg,curdir)
-"  call Dfunc("NetrwBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." bookmax=".g:NETRW_BOOKMARKMAX." histmax=".g:netrw_dirhistmax)
+fun! s:NetrwBookHistHandler(chg,curdir)
+"  call Dfunc("NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
 
   if a:chg == 0
    " bookmark the current directory
 "   call Decho("(user: <b>) bookmark the current directory")
-   if v:count > 0
-    " handle bookmark# specified via the count
-    let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
-    if !exists("g:NETRW_BOOKMARKMAX")
-     let g:NETRW_BOOKMARKMAX= v:count
-    elseif v:count > g:NETRW_BOOKMARKMAX
-     let g:NETRW_BOOKMARKMAX= v:count
-    endif
-   else
-    " handle no count specified
-    let g:NETRW_BOOKMARKMAX                       = g:NETRW_BOOKMARKMAX + 1
-    let g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX} = a:curdir
+   if !exists("g:netrw_bookmarklist")
+    let g:netrw_bookmarklist= []
+   endif
+   if index(g:netrw_bookmarklist,a:curdir) == -1
+    " curdir not currently in g:netrw_bookmarklist, so include it
+    call add(g:netrw_bookmarklist,a:curdir)
+    call sort(g:netrw_bookmarklist)
    endif
    echo "bookmarked the current directory"
 
   elseif a:chg == 1
    " change to the bookmarked directory
-"   call Decho("(user: <B>) change to the bookmarked directory")
-   if exists("g:NETRW_BOOKMARKDIR_{v:count}")
-    exe "e ".fnameescape(g:NETRW_BOOKMARKDIR_{v:count})
+"   call Decho("(user: <".v:count."mb>) change to the bookmarked directory")
+   if exists("g:netrw_bookmarklist[v:count-1]")
+    exe "e ".fnameescape(g:netrw_bookmarklist[v:count-1])
    else
     echomsg "Sorry, bookmark#".v:count." doesn't exist!"
    endif
@@ -1879,29 +1924,27 @@
    let didwork= 0
    " list user's bookmarks
 "   call Decho("(user: <q>) list user's bookmarks")
-   if exists("g:NETRW_BOOKMARKMAX")
-"    call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
-    let cnt= 0
-    while cnt <= g:NETRW_BOOKMARKMAX
-     if exists("g:NETRW_BOOKMARKDIR_{cnt}")
-"      call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
-      echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
-      let didwork= 1
-     endif
-     let cnt= cnt + 1
-    endwhile
+   if exists("g:netrw_bookmarklist")
+"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
+     echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]
+     let didwork = 1
+     let cnt     = cnt + 1
+    endfor
    endif
 
    " list directory history
-   let cnt     = g:NETRW_DIRHIST_CNT
+   let cnt     = g:netrw_dirhist_cnt
    let first   = 1
    let histcnt = 0
-   while ( first || cnt != g:NETRW_DIRHIST_CNT )
-"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
+   while ( first || cnt != g:netrw_dirhist_cnt )
+"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
     let histcnt= histcnt + 1
-    if exists("g:NETRW_DIRHIST_{cnt}")
-"     call Decho("Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
-     echo "Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
+    if exists("g:netrw_dirhist_{cnt}")
+"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
+     echo "Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt}
      let didwork= 1
     endif
     let first = 0
@@ -1917,22 +1960,21 @@
   elseif a:chg == 3
    " saves most recently visited directories (when they differ)
 "   call Decho("(browsing) record curdir history")
-   if !exists("g:NETRW_DIRHIST_0") || g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} != a:curdir
-    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
-"    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
-    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= a:curdir
-"    call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
+    let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+    let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
+"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
    endif
 
   elseif a:chg == 4
    " u: change to the previous directory stored on the history list
 "   call Decho("(user: <u>) chg to prev dir from history")
-   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
-   if g:NETRW_DIRHIST_CNT < 0
-    let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
+   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
+   if g:netrw_dirhist_cnt < 0
+    let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
    endif
-   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
-"    call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
      setlocal ma noro
 "     call Decho("setlocal ma noro")
@@ -1940,19 +1982,19 @@
      setlocal nomod
 "     call Decho("setlocal nomod")
     endif
-"    "    call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
-    exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
+"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+    exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
    else
-    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
+    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
     echo "Sorry, no predecessor directory exists yet"
    endif
 
   elseif a:chg == 5
    " U: change to the subsequent directory stored on the history list
 "   call Decho("(user: <U>) chg to next dir from history")
-   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
-   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
-"    call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
      setlocal ma noro
 "     call Decho("setlocal ma noro")
@@ -1961,57 +2003,108 @@
      setlocal nomod
 "     call Decho("setlocal nomod")
     endif
-"    call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
-    exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
+"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+    exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
    else
-    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
-    if g:NETRW_DIRHIST_CNT < 0
-     let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
+    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
+    if g:netrw_dirhist_cnt < 0
+     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
     endif
     echo "Sorry, no successor directory exists yet"
    endif
 
   elseif a:chg == 6
-   if v:count > 0 && v:count == g:NETRW_BOOKMARKMAX
-    " delete the v:count'th bookmark
-"    call Decho("delete bookmark#".v:count."<".g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}.">")
-    unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
-    let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
-
-   elseif v:count > 0
-"    call Decho("delete by shifting bookmark#".v:count."<".g:NETRW_BOOKMARKDIR_{v:count}.">")
-    let cnt= v:count
-    while cnt < g:NETRW_BOOKMARKMAX
-     let g:NETRW_BOOKMARKDIR_{cnt} = g:NETRW_BOOKMARKDIR_{(cnt+1)}
-     let cnt                       = cnt + 1
-    endwhile
-    unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
-    let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
-
-   elseif exists("b:netrw_curdir")
-    " look for current directory amongst the bookmarks and remove that bookmark
-"    call Decho("search for bookmark<".b:netrw_curdir.">")
-    let cnt= 1
-    while cnt <= g:NETRW_BOOKMARKMAX
-"     call Decho("checking: g:NETRW_BOOKMARKDIR_".cnt."<".g:NETRW_BOOKMARKDIR_{cnt}.">")
-     if g:NETRW_BOOKMARKDIR_{cnt} == b:netrw_curdir
-      if cnt < g:NETRW_BOOKMARKMAX
-"       call Decho("delete bookmark#".cnt."<".b:netrw_curdir.">")
-       while cnt < g:NETRW_BOOKMARMAX
-        let g:NETRW_BOOKMARKDIR_{cnt} = g:NETRW_BOOKMARKDIR_{(cnt+1)}
-        let cnt                       = cnt + 1
-       endwhile
-      endif
-      unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
-      let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
-     endif
-     let cnt= cnt + 1
-    endwhile
+   " delete the v:count'th bookmark
+"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
+   let savefile= s:NetrwHome()."/.netrwbook"
+   if filereadable(savefile)
+    call s:NetrwBookHistSave() " done here to merge bookmarks first
+    call delete(savefile)
    endif
-
+   call remove(g:netrw_bookmarklist,v:count-1)
   endif
   call s:NetrwBookmarkMenu()
-"  call Dret("NetrwBookmarkDir")
+"  call Dret("NetrwBookHistHandler")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
+"                      Sister function: s:NetrwBookHistSave()
+fun! s:NetrwBookHistRead()
+"  call Dfunc("s:NetrwBookHistRead()")
+  if !exists("s:netrw_initbookhist")
+   let home    = s:NetrwHome()
+   let savefile= home."/.netrwbook"
+   if filereadable(savefile)
+"    call Decho("sourcing .netrwbook")
+    exe "so ".savefile
+   endif
+   let savefile= home."/.netrwhist"
+   if filereadable(savefile)
+"    call Decho("sourcing .netrwhist")
+    exe "so ".savefile
+   endif
+   let s:netrw_initbookhist= 1
+   au VimLeave * call s:NetrwBookHistSave()
+  endif
+"  call Dret("s:NetrwBookHistRead")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
+"                      Sister function: s:NetrwBookHistRead()
+"                      I used to do this via viminfo but that appears to
+"                      be unreliable for long-term storage
+"                      COMBAK: does $HOME work under windows???
+fun! s:NetrwBookHistSave()
+"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
+  let savefile= s:NetrwHome()."/.netrwhist"
+  1split
+  call s:NetrwEnew()
+  setlocal cino= com= cpo-=aA fo=nroql2 tw=0 report=10000 noswf
+  setlocal nocin noai noci magic nospell nohid wig= noaw
+  setlocal ma noro write
+  if exists("&acd") | setlocal noacd | endif
+  silent %d
+
+  " save .netrwhist -- no attempt to merge
+  silent! file .netrwhist
+  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
+  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
+  let lastline = line("$")
+  let cnt      = 1
+  while cnt <= g:netrw_dirhist_cnt
+   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
+   let cnt= cnt + 1
+  endwhile
+  exe "silent! w! ".savefile
+
+  silent %d
+  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
+   " merge and write .netrwbook
+   let savefile= s:NetrwHome()."/.netrwbook"
+
+   if filereadable(savefile)
+    let booklist= deepcopy(g:netrw_bookmarklist)
+    exe "silent so ".savefile
+    for bdm in booklist
+     if index(g:netrw_bookmarklist,bdm) == -1
+      call add(g:netrw_bookmarklist,bdm)
+     endif
+    endfor
+    call sort(g:netrw_bookmarklist)
+    exe "silent! w! ".savefile
+   endif
+
+   " construct and save .netrwbook
+   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
+   exe "silent! w! ".savefile
+  endif
+  let bgone= bufnr("%")
+  q!
+  exe bgone."bwipe!"
+
+"  call Dret("s:NetrwBookHistSave")
 endfun
 
 " ---------------------------------------------------------------------
@@ -2024,6 +2117,18 @@
 "  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%").">")
 "  call Decho("tab#".tabpagenr()." win#".winnr())
 "  call Dredir("ls!")
+  if !exists("s:netrw_initbookhist")
+   call s:NetrwBookHistRead()
+  endif
+"  call FOTEST(7)
+
+  " simplify the dirname (especially for ".."s in dirnames)
+  if a:dirname !~ '^\a\+://'
+   let dirname= simplify(a:dirname)
+  else
+   let dirname= a:dirname
+  endif
+"  call FOTEST(8)
 
   if exists("s:netrw_skipbrowse")
    unlet s:netrw_skipbrowse
@@ -2043,37 +2148,40 @@
   endif
 
   call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
+"  call FOTEST(9)
 
   " re-instate any marked files
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
 "   call Decho("clearing marked files")
    exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
   endif
+"  call FOTEST(10)
 
   if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
 "   call Decho("handle w:netrw_acdkeep:")
-"   call Decho("keepjumps lcd ".fnameescape(a:dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
-   exe 'keepjumps lcd '.fnameescape(a:dirname)
+"   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
+   exe 'keepjumps lcd '.fnameescape(dirname)
+   call s:NetrwSafeOptions()
 "   call Decho("getcwd<".getcwd().">")
 
-  elseif !a:islocal && a:dirname !~ '[\/]$' && a:dirname !~ '^"'
+  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
    " looks like a regular file, attempt transfer
-"   call Decho("attempt transfer as regular file<".a:dirname.">")
+"   call Decho("attempt transfer as regular file<".dirname.">")
 
    " remove any filetype indicator from end of dirname, except for the {{{3
    " "this is a directory" indicator (/).
    " There shouldn't be one of those here, anyway.
-   let path= substitute(a:dirname,'[*=@|]\r\=$','','e')
+   let path= substitute(dirname,'[*=@|]\r\=$','','e')
 "   call Decho("new path<".path.">")
-   call s:RemotePathAnalysis(a:dirname)
+   call s:RemotePathAnalysis(dirname)
 
    " remote-read the requested file into current buffer {{{3
    mark '
-   call s:NetrwEnew(a:dirname)
+   call s:NetrwEnew(dirname)
+   call s:NetrwSafeOptions()
    setlocal ma noro
 "   call Decho("setlocal ma noro")
-   let b:netrw_curdir= a:dirname
+   let b:netrw_curdir= dirname
 "   call Decho("exe silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
    exe "silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
    exe "silent keepalt doau BufReadPre ".fnameescape(s:fname)
@@ -2092,17 +2200,19 @@
 "   call Dret("s:NetrwBrowse : file<".s:fname.">")
    return
   endif
+"  call FOTEST(11)
 
   " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
   call s:UseBufWinVars()
 
   " set up some variables {{{3
   let b:netrw_browser_active = 1
-  let dirname                = a:dirname
+  let dirname                = dirname
   let s:last_sort_by         = g:netrw_sort_by
 
   " set up menu {{{3
   call s:NetrwMenu(1)
+"  call FOTEST(12)
 
   " set up buffer {{{3
   let reusing= s:NetrwGetBuffer(a:islocal,dirname)
@@ -2122,6 +2232,7 @@
 "   call Dret("s:NetrwBrowse : re-using buffer")
    return
   endif
+""  call FOTEST(13) " PROBLEM WITH LISTING
 
   " set b:netrw_curdir to the new directory name {{{3
 "  call Decho("set b:netrw_curdir to the new directory name:")
@@ -2143,6 +2254,7 @@
    let b:netrw_curdir= b:netrw_curdir.'/'
   endif
 "  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+""  call FOTEST(14) " PROBLEM WITH LISTING
 
   " ------------
   " (local only) {{{3
@@ -2183,11 +2295,11 @@
   else
 "   call Decho("remote only:")
 
-   " analyze a:dirname and g:netrw_list_cmd {{{4
-"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> a:dirname<".a:dirname.">")
-   if a:dirname =~ "^NetrwTreeListing\>"
+   " analyze dirname and g:netrw_list_cmd {{{4
+"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
+   if dirname =~ "^NetrwTreeListing\>"
     let dirname= b:netrw_curdir
-"    call Decho("(dirname was ".a:dirname.") dirname<".dirname.">")
+"    call Decho("(dirname was ".dirname.") dirname<".dirname.">")
    elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
     let dirname= substitute(b:netrw_curdir,'\\','/','g')
     if dirname !~ '/$'
@@ -2196,7 +2308,7 @@
     let b:netrw_curdir = dirname
 "    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
    else
-    let dirname = substitute(a:dirname,'\\','/','g')
+    let dirname = substitute(dirname,'\\','/','g')
 "    call Decho("(normal) dirname<".dirname.">")
    endif
 
@@ -2214,12 +2326,23 @@
    let b:netrw_curdir= dirname
 "   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
   endif  " (additional remote handling)
+""  call FOTEST(15) " PROBLEM WITH LISTING
 
   " -----------------------
   " Directory Listing: {{{3
   " -----------------------
   call s:BrowserMaps(a:islocal)
+""  call FOTEST(16) " PROBLEM WITH LISTING
   call s:PerformListing(a:islocal)
+"  call FOTEST(17)
+
+  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
+  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
+  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
+  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
+  " function gets called due to that autocmd; it notices that the following variable is set
+  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
+  let s:locbrowseshellcmd= 1
 
 "  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
 "  call Dret("s:NetrwBrowse : did PerformListing")
@@ -2274,13 +2397,14 @@
 "  call Decho("--re-use a buffer if possible--")
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
    " find NetrwTreeList buffer if there is one
+"   call Decho("find NetrwTreeList buffer if there is one")
    if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
 "    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
     let eikeep= &ei
     set ei=all
     exe "b ".w:netrw_treebufnr
     let &ei= eikeep
-"    call Dret("s:NetrwGetBuffer : bufnum#".bufnum."<NetrwTreeListing>")
+"    call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
     return
    endif
    let bufnum= -1
@@ -2297,7 +2421,7 @@
 "   call Decho("  bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
 
    if bufnum < 0 && dirname !~ '/$'
-    " trying appending a trailing /
+    " try appending a trailing /
 "    call Decho("  try appending a trailing / to dirname<".dirname.">")
     let bufnum= bufnr(escape(dirname.'/','\'))
     if bufnum > 0
@@ -2306,7 +2430,7 @@
    endif
 
    if bufnum < 0 && dirname =~ '/$'
-    " trying removing a trailing /
+    " try removing a trailing /
 "    call Decho("  try removing a trailing / from dirname<".dirname.">")
     let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
     if bufnum > 0
@@ -2318,17 +2442,26 @@
    " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
    if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
     " handle approximate matches
-"    call Decho("  handling approx match: bufnum#%d<".bufname(bufnum)."> approx=dirname<".dirname.">")
+"    call Decho("  handling approx match: bufnum#".bufnum."<".bufname(bufnum)."> approx-dirname<".dirname.">")
     let ibuf    = 1
     let buflast = bufnr("$")
 "    call Decho("  findbuf2: buflast=".buflast)
     while ibuf <= buflast
      let bname= substitute(bufname(ibuf),'\\','/','g')
      let bname= substitute(bname,'.\zs/$','','')
-"     call Decho("  findbuf3: dirname<".dirname."> bufname(".ibuf.")<".bname.">")
-     if bname != '' && dirname =~ '/'.bname.'/\=$' | break | endif
-     if bname   =~ '^'.dirname.'/\=$' | break | endif
-     if dirname =~ '^'.bname.'/$'     | break | endif
+"     call Decho("  findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bufname(".ibuf.")<".bname.">")
+     if bname   != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
+"      call Decho("  findbuf3: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
+      break
+     endif
+     if bname   =~ '^'.dirname.'/\=$'
+"      call Decho('  findbuf3: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
+      break
+     endif
+     if dirname =~ '^'.bname.'/$'
+"      call Decho('  findbuf3: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
+      break
+     endif
      let ibuf= ibuf + 1
     endwhile
     if ibuf > buflast
@@ -2510,6 +2643,7 @@
    if !exists("b:netrw_cpf")
     let b:netrw_cpf= 0
     exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+    call histdel("/",-1)
 "   call Decho("computed cpf=".b:netrw_cpf)
    endif
 
@@ -2621,6 +2755,22 @@
   let svpos= netrw#NetrwSavePosn()
   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   call netrw#NetrwRestorePosn(svpos)
+  if w:netrw_liststyle != s:WIDELIST
+   if g:netrw_cursorline == 2
+    setlocal cursorline
+    let &cursorcolumn= s:netrw_usercuc
+   elseif g:netrw_cursorline
+    setlocal cursorline
+"    call Decho("setlocal cursorline")
+   endif
+  else
+   if g:netrw_cursorline == 2
+    setlocal cursorline cursorcolumn
+"    call Decho("setlocal cursorline cursorcolumn")
+   elseif g:netrw_cursorline
+    let &cursorline= s:netrw_usercul
+   endif
+  endif
 
   " keep cursor on the filename
   silent keepjumps $
@@ -2634,6 +2784,29 @@
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwBannerCtrl: toggles the display of the banner {{{2
+fun! s:NetrwBannerCtrl(islocal)
+"  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
+
+  " toggle the banner (enable/suppress)
+  let g:netrw_banner= !g:netrw_banner
+
+  " refresh the listing
+  let svpos= netrw#NetrwSavePosn()
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+
+  " keep cursor on the filename
+  let fname= s:NetrwGetWord()
+  silent keepjumps $
+  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+  if result <= 0 && exists("w:netrw_bannercnt")
+   exe "keepjumps ".w:netrw_bannercnt
+  endif
+"  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwBookmarkMenu: Uses menu priorities {{{2
 "                      .2.[cnt] for bookmarks, and
 "                      .3.[cnt] for history
@@ -2642,37 +2815,47 @@
   if !exists("s:netrw_menucnt")
    return
   endif
-"  call Dfunc("NetrwBookmarkMenu() bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." menucnt=".s:netrw_menucnt)
+"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
 
   " the following test assures that gvim is running, has menus available, and has menus enabled.
   if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
    if exists("g:NetrwTopLvlMenu")
 "    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
+    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
+   endif
+   if !exists("s:netrw_initbookhist")
+    call s:NetrwBookHistRead()
    endif
 
    " show bookmarked places
-   let cnt       = 1
-   while cnt <= g:NETRW_BOOKMARKMAX
-    if exists("g:NETRW_BOOKMARKDIR_{cnt}")
-     let bmdir= escape(g:NETRW_BOOKMARKDIR_{cnt},'. ')
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmdir.'	:e '.bmdir)
-     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmdir.'	:e '.bmdir."\<cr>"
-    endif
-    let cnt= cnt + 1
-   endwhile
+   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.'	:e '.bmd)
+     let bmd= escape(bmd,'. ')
+
+     " show bookmarks for goto menu
+     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.'	:e '.bmd."\<cr>"
+
+     " show bookmarks for deletion menu
+     exe 'silent! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.'	'.cnt."mB"
+     let cnt= cnt + 1
+    endfor
+
+   endif
 
    " show directory browsing history
-   let cnt     = g:NETRW_DIRHIST_CNT
+   let cnt     = g:netrw_dirhist_cnt
    let first   = 1
    let histcnt = 0
-   while ( first || cnt != g:NETRW_DIRHIST_CNT )
+   while ( first || cnt != g:netrw_dirhist_cnt )
     let histcnt  = histcnt + 1
-    let priority = g:NETRW_DIRHIST_CNT + histcnt
-    if exists("g:NETRW_DIRHIST_{cnt}")
-     let bmdir= escape(g:NETRW_DIRHIST_{cnt},'/&? ')
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'	:e '.bmdir)
-     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'	:e '.bmdir."\<cr>"
+    let priority = g:netrw_dirhist_cnt + histcnt
+    if exists("g:netrw_dirhist_{cnt}")
+     let histdir= escape(g:netrw_dirhist_{cnt},'./&? ')
+"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir)
+     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir."\<cr>"
     endif
     let first = 0
     let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
@@ -2680,6 +2863,7 @@
      let cnt= cnt + g:netrw_dirhistmax
     endif
    endwhile
+
   endif
 "  call Dret("NetrwBookmarkMenu")
 endfun
@@ -2702,6 +2886,19 @@
    return
   endif
 
+  " check if the status bar was clicked on instead of a file/directory name
+  call feedkeys("\<LeftMouse>")
+  let c= getchar()
+  let mouse_lnum = v:mouse_lnum
+  let wlastline  = line('w$')
+  let lastline   = line('$')
+"  call Decho("v:mouse_lnum=".mouse_lnum." line(w$)=".wlastline." line($)=".lastline)
+  if mouse_lnum == wlastline + 1
+"   call Decho("appears to be a status bar leftmouse click")
+   " appears to be a status bar leftmouse click
+   return
+  endif
+
   call s:NetrwOptionSave("s:")
   call s:NetrwSafeOptions()
   let nbcd_curpos                = netrw#NetrwSavePosn()
@@ -2737,6 +2934,7 @@
     else
      let dirname= s:NetrwTreeDir()."/".newdir
     endif
+"    call Decho("dirname<".dirname.">")
 "    call Decho("tree listing")
    elseif newdir =~ '^\(/\|\a:\)'
     let dirname= newdir
@@ -2751,10 +2949,14 @@
     if !exists("s:didsplit")
      if     g:netrw_browse_split == 1
       new
-      wincmd _
+      if !&ea
+       wincmd _
+      endif
      elseif g:netrw_browse_split == 2
       rightb vert new
-      wincmd |
+      if !&ea
+       wincmd |
+      endif
      elseif g:netrw_browse_split == 3
       tabnew
      elseif g:netrw_browse_split == 4
@@ -2781,6 +2983,22 @@
 "     call Decho("remote file: NetrwBrowse will edit it")
     endif
     let dolockout= 1
+
+    " handle g:Netrw_funcref -- call external-to-netrw functions
+    "   This code will handle g:Netrw_funcref as an individual function reference
+    "   or as a list of function references.  It will ignore anything that's not
+    "   a function reference.  See  :help Funcref  for information about function references.
+    if exists("g:Netrw_funcref")
+     if type(g:Netrw_funcref) == 2
+      call g:Netrw_funcref()
+     elseif type(g:Netrw_funcref) == 3
+      for Fncref in g:Netrw_funcref
+       if type(FncRef) == 2
+        call FncRef()
+       endif
+      endfor
+     endif
+    endif
    endif
 
   elseif newdir =~ '^/'
@@ -2887,15 +3105,16 @@
     " close tree listing for selected subdirectory
 "    call Decho("closing selected subdirectory<".dirname.">")
     call remove(w:netrw_treedict,treedir)
-"    call Decho("removed     entry<".dirname."> from treedict")
+"    call Decho("removed     entry<".treedir."> from treedict")
 "    call Decho("yielding treedict<".string(w:netrw_treedict).">")
-    let dirname= w:netrw_treetop
+    let dirname           = w:netrw_treetop
    else
     " go down one directory
     let dirname= substitute(treedir,'/*$','/','')
 "    call Decho("go down one dir: treedir<".treedir.">")
    endif
    call s:SetRexDir(a:islocal,dirname)
+   let s:treeforceredraw = 1
 
   else
    " go down one directory
@@ -2916,17 +3135,40 @@
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwBrowseX:  allows users to write custom functions to operate on {{{2
-"              files given their extension.  Passes 0=local, 1=remote
+" s:NetrwBrowseX:  (implements "x") executes a special "viewer" script or program for the {{{2
+"              given filename; typically this means given their extension.
+"              0=local, 1=remote
 fun! netrw#NetrwBrowseX(fname,remote)
 "  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
 
+  " special core dump handler
+  if a:fname =~ '/core\(\.\d\+\)\=$'
+   if exists("g:Netrw_corehandler")
+    if type(g:Netrw_corehandler) == 2
+     " g:Netrw_corehandler is a function reference (see :help Funcref)
+"     call Decho("g:Netrw_corehandler is a funcref")
+     call g:Netrw_corehandler(a:fname)
+    elseif type(g:netrw_corehandler) == 3)
+     " g:Netrw_corehandler is a List of function references (see :help Funcref)
+"     call Decho("g:Netrw_corehandler is a List")
+     for Fncref in g:Netrw_corehandler
+      if type(FncRef) == 2
+       call FncRef(a:fname)
+      endif
+     endfor
+    endif
+"    call Dret("NetrwBrowseX : coredump handler invoked")
+    return
+   endif
+  endif
+
   " set up the filename
   " (lower case the extension, make a local copy of a remote file)
   let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
   if has("win32") || has("win95") || has("win64") || has("win16")
    let exten= substitute(exten,'^.*$','\L&\E','')
   endif
+"  call Decho("exten<".exten.">")
 
   " seems kde systems often have gnome-open due to dependencies, even though
   " gnome-open's subsidiary display tools are largely absent.  Kde systems
@@ -2945,16 +3187,25 @@
 
   if a:remote == 1
    " create a local copy
-   let fname= fnamemodify(tempname(),":r").".".exten
-"   call Decho("a:remote=".a:remote.": create a local copy of <".fname."> as <".fname.">")
-   exe "silent keepjumps bot 1new ".fnameescape(fname)
+"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">")
    setlocal bh=delete
-"   call Decho("read <".fnameescape(fname).">, now writing: exe w! ".fnameescape(fname))
-   exe "silent! w! ".fnameescape(fname)
-   q
+   call netrw#NetRead(3,a:fname)
+   " attempt to rename tempfile
+   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
+   let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
+"   call Decho("basename<".basename.">")
+"   call Decho("newname <".newname.">")
+   if rename(s:netrw_tmpfile,newname) == 0
+    " renaming succeeded
+    let fname= newname
+   else
+    " renaming failed
+    let fname= s:netrw_tmpfile
+   endif
   else
    let fname= a:fname
   endif
+"  call Decho("fname<".fname.">")
 "  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
 
   " set up redirection
@@ -2973,6 +3224,7 @@
 
   " extract any viewing options.  Assumes that they're set apart by quotes.
   if exists("g:netrw_browsex_viewer")
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
    if g:netrw_browsex_viewer =~ '\s'
     let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
     let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
@@ -3004,8 +3256,15 @@
    let ret= v:shell_error
 
   elseif has("win32") || has("win64")
-"   call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
-   exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   if executable("start")
+"    call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+    exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   elseif executable("rundll32")
+"    call Decho('exe silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+    exe 'silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   else
+    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
+   endif
    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let ret= v:shell_error
 
@@ -3060,19 +3319,72 @@
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwChgPerm: (implements "gp") change file permission {{{2
+fun! s:NetrwChgPerm(islocal,curdir)
+"  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
+  call inputsave()
+  let newperm= input("Enter new permission: ")
+  call inputrestore()
+  let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'')
+  let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'')
+"  call Decho("chgperm<".chgperm.">")
+  call system(chgperm)
+  if v:shell_error != 0
+   call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75)
+  endif
+  if a:islocal
+   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  endif
+"  call Dret("s:NetrwChgPerm")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwClearExplore: clear explore variables (if any) {{{2
+fun! s:NetrwClearExplore()
+"  call Dfunc("s:NetrwClearExplore()")
+  2match none
+  if exists("s:explore_match")        |unlet s:explore_match        |endif
+  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
+  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
+  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
+  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
+  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
+  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
+"   redraw!
+  echo " "
+  echo " "
+"  call Dret("s:NetrwClearExplore")
+endfun
+
+" ---------------------------------------------------------------------
 " netrw#Explore: launch the local browser in the directory of the current file {{{2
-"          dosplit==0: the window will be split iff the current file has
-"                      been modified
-"          dosplit==1: the window will be split before running the local
-"                      browser
+"          indx:  == -1: Nexplore
+"                 == -2: Pexplore
+"                 ==  +: this is overloaded:
+"                      * If Nexplore/Pexplore is in use, then this refers to the
+"                        indx'th item in the w:netrw_explore_list[] of items which
+"                        matched the */pattern **/pattern *//pattern **//pattern
+"                      * If Hexplore or Vexplore, then this will override
+"                        g:netrw_winsize to specify the qty of rows or columns the
+"                        newly split window should have.
+"          dosplit==0: the window will be split iff the current file has been modified
+"          dosplit==1: the window will be split before running the local browser
+"          style == 0: Explore     style == 1: Explore!
+"                == 2: Hexplore    style == 3: Hexplore!
+"                == 4: Vexplore    style == 5: Vexplore!
+"                == 6: Texplore
 fun! netrw#Explore(indx,dosplit,style,...)
 "  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
   if !exists("b:netrw_curdir")
    let b:netrw_curdir= getcwd()
 "   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
   endif
-  let curfile= b:netrw_curdir
-"  call Decho("curfile<".curfile.">")
+  let curdir     = b:netrw_curdir
+  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+"  call Decho("curdir<".curdir.">  curfiledir<".curfiledir.">")
+"  call FOTEST(1)
 
   " save registers
   silent! let keepregstar = @*
@@ -3083,30 +3395,34 @@
   if a:dosplit || &modified || a:style == 6
 "   call Decho("case: dosplit=".a:dosplit." modified=".&modified." a:style=".a:style)
    call s:SaveWinVars()
+   let winsize= g:netrw_winsize
+   if a:indx > 0
+    let winsize= a:indx
+   endif
 
    if a:style == 0      " Explore, Sexplore
 "    call Decho("style=0: Explore or Sexplore")
-    exe g:netrw_winsize."wincmd s"
+    exe winsize."wincmd s"
 
    elseif a:style == 1  "Explore!, Sexplore!
 "    call Decho("style=1: Explore! or Sexplore!")
-    exe g:netrw_winsize."wincmd v"
+    exe winsize."wincmd v"
 
    elseif a:style == 2  " Hexplore
 "    call Decho("style=2: Hexplore")
-    exe "bel ".g:netrw_winsize."wincmd s"
+    exe "bel ".winsize."wincmd s"
 
    elseif a:style == 3  " Hexplore!
 "    call Decho("style=3: Hexplore!")
-    exe "abo ".g:netrw_winsize."wincmd s"
+    exe "abo ".winsize."wincmd s"
 
    elseif a:style == 4  " Vexplore
 "    call Decho("style=4: Vexplore")
-    exe "lefta ".g:netrw_winsize."wincmd v"
+    exe "lefta ".winsize."wincmd v"
 
    elseif a:style == 5  " Vexplore!
 "    call Decho("style=5: Vexplore!")
-    exe "rightb ".g:netrw_winsize."wincmd v"
+    exe "rightb ".winsize."wincmd v"
 
    elseif a:style == 6  " Texplore
     call s:SaveBufVars()
@@ -3117,6 +3433,7 @@
    call s:RestoreWinVars()
   endif
   norm! 0
+"  call FOTEST(2)
 
   if a:0 > 0
 "   call Decho("case [a:0=".a:0."]>0: a:1<".a:1.">")
@@ -3131,28 +3448,18 @@
 "    call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
    elseif a:1 =~ '\$'
     let dirname= expand(a:1)
+"    call Decho("using user-specified dirname<".dirname."> with $env-var")
    else
     let dirname= a:1
-"    call Decho("using dirname<".dirname.">")
+"    call Decho("using user-specified dirname<".dirname.">")
    endif
   else
    " clear explore
-"   call Decho("clearing explore variables")
-   2match none
-   if exists("s:explore_match")        |unlet s:explore_match        |endif
-   if exists("s:explore_indx")         |unlet s:explore_indx         |endif
-   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
-   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
-   if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
-   if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
-   if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
-   if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
-"   redraw!
-   echo " "
-   echo " "
+   call s:NetrwClearExplore()
 "   call Dret("netrw#Explore : cleared list")
    return
   endif
+"  call FOTEST(3)
 
   if dirname =~ '/\*\*/'
    " handle .../**/.../filepat
@@ -3192,15 +3499,19 @@
    " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
    let starpat= 4
 "   call Decho("case Explore **/filepat (starpat=".starpat.")")
+
   else
    let starpat= 0
+"   call Decho("default case: starpat=".starpat)
   endif
+"  call FOTEST(4)
 
   if starpat == 0 && a:indx >= 0
    " [Explore Hexplore Vexplore Sexplore] [dirname]
-"   call Decho("case dirname<".dirname."> a:indx=".a:indx.": Explore Hexplore Vexplore Sexplore")
+"   call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname."> Explore Hexplore Vexplore Sexplore")
    if dirname == ""
-    let dirname= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+    let dirname= curfiledir
+"    call Decho("empty dirname, using current file's directory<".dirname.">")
    endif
    if dirname =~ '^scp:' || dirname =~ '^ftp:'
 "    call Decho("calling NetrwBrowse(0,dirname<".dirname.">)")
@@ -3211,11 +3522,11 @@
     call netrw#LocalBrowseCheck(dirname)
    endif
 
-"   call Decho("curfile<".curfile.">")
+"   call Decho("curdir<".curdir.">")
    if has("win32") || has("win95") || has("win64") || has("win16")
-    call search('\<'.substitute(curfile,'^.*[/\\]','','e').'\>','cW')
+    call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
    else
-    call search('\<'.substitute(curfile,'^.*/','','e').'\>','cW')
+    call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
    endif
 
   " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
@@ -3224,7 +3535,7 @@
   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
   elseif a:indx <= 0
    " Nexplore, Pexplore, Explore: handle starpat
-"   call Decho("case Nexplore, Pexplore, <s-down>, <s-up>: starpat=".starpat." a:indx=".a:indx)
+"   call Decho("case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
    if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
 "    call Decho("set up <s-up> and <s-down> maps")
     let s:didstarstar= 1
@@ -3237,9 +3548,10 @@
     if !exists("w:netrw_explore_indx")
      let w:netrw_explore_indx= 0
     endif
+
     let indx = a:indx
 "    call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]")
-"
+
     if indx == -1
      " Nexplore
 "     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
@@ -3290,6 +3602,7 @@
      " Explore -- initialize
      " build list of files to Explore with Nexplore/Pexplore
 "     call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")")
+     call s:NetrwClearExplore()
      let w:netrw_explore_indx= 0
      if !exists("b:netrw_curdir")
       let b:netrw_curdir= getcwd()
@@ -3300,17 +3613,24 @@
      if starpat == 1
       " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
 "      call Decho("starpat=".starpat.": build *//pattern list")
-      exe "vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
-      let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)')
+"      call Decho("pattern<".pattern.">")
+      try
+       exe "noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+       call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
+       return
+      endtry
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
 
      elseif starpat == 2
       " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
 "      call Decho("starpat=".starpat.": build **//pattern list")
       try
-       exe "silent vimgrep /".pattern."/gj "."**/*"
+       exe "silent noautocmd vimgrep /".pattern."/gj "."**/*"
       catch /^Vim\%((\a\+)\)\=:E480/
-      	call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
+       call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
        if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
        silent! let @* = keepregstar
        silent! let @+ = keepregstar
@@ -3320,19 +3640,22 @@
       endtry
       let s:netrw_curdir       = b:netrw_curdir
       let w:netrw_explore_list = getqflist()
-      let w:netrw_explore_list = map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)')
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
 
      elseif starpat == 3
       " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
 "      call Decho("starpat=".starpat.": build */filepat list")
-      let dirname             = substitute(dirname,'^\*/','','')
-      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
-      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+      let filepat= substitute(dirname,'^\*/','','')
+      let filepat= substitute(filepat,'^[%#<]','\\&','')
+"      call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+"      call Decho("filepat<".filepat.">")
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
+      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
 
      elseif starpat == 4
       " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
 "      call Decho("starpat=".starpat.": build **/filepat list")
-      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
       if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
      endif " switch on starpat to build w:netrw_explore_list
 
@@ -3352,7 +3675,7 @@
 
     " NetrwStatusLine support - for exploring support
     let w:netrw_explore_indx= indx
-"    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
+"    call Decho("w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
 
     " wrap the indx around, but issue a note
     if indx >= w:netrw_explore_listlen || indx < 0
@@ -3360,7 +3683,6 @@
      let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
      let w:netrw_explore_indx= indx
      call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
-     sleep 1
     endif
 
     exe "let dirfile= w:netrw_explore_list[".indx."]"
@@ -3397,7 +3719,7 @@
    endif
 
   else
-"   call Decho("case Explore newdir<".dirname.">")
+"   call Decho("default case: Explore newdir<".dirname.">")
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
     silent! unlet w:netrw_treedict
     silent! unlet w:netrw_treetop
@@ -3409,14 +3731,19 @@
     call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
    endif
   endif
+"  call FOTEST(5)
 
   " visual display of **/ **// */ Exploration files
+"  call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
+"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
   if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
+"   call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
    if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
     " only update match list if current directory isn't the same as before
+"    call Decho("only update match list if current directory not the same as before")
     let s:explore_prvdir = b:netrw_curdir
     let s:explore_match  = ""
-    let dirlen           = strlen(b:netrw_curdir)
+    let dirlen           = s:Strlen(b:netrw_curdir)
     if b:netrw_curdir !~ '/$'
      let dirlen= dirlen + 1
     endif
@@ -3425,15 +3752,15 @@
 "     call Decho("fname<".fname.">")
      if fname =~ '^'.b:netrw_curdir
       if s:explore_match == ""
-       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
       else
-       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
       endif
      elseif fname !~ '^/' && fname != prvfname
       if s:explore_match == ""
-       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
       else
-       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
       endif
      endif
      let prvfname= fname
@@ -3449,6 +3776,7 @@
    echo " "
 "   call Decho("cleared explore match list")
   endif
+"  call FOTEST(6)
 
   silent! let @* = keepregstar
   silent! let @+ = keepregstar
@@ -3457,6 +3785,24 @@
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwExploreListUniq: {{{2
+fun! s:NetrwExploreListUniq(explist)
+"  call Dfunc("s:NetrwExploreListUniq(explist)")
+
+  " this assumes that the list is already sorted
+  let newexplist= []
+  for member in a:explist
+   if !exists("uniqmember") || member != uniqmember
+    let uniqmember = member
+    let newexplist = newexplist + [ member ]
+   endif
+  endfor
+
+"  call Dret("s:NetrwExploreListUniq")
+  return newexplist
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwHide: this function is invoked by the "a" map for browsing {{{2
 "          and switches the hiding mode.  The actual hiding is done by
 "          s:NetrwListHide().
@@ -3490,9 +3836,7 @@
 "     call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">")
     endif
    endfor
-   unlet s:netrwmarkfilelist_{bufnr("%")}
-   unlet s:netrwmarkfilemtch_{bufnr("%")}
-   2match none
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
    let g:netrw_hide= 1
 
   else
@@ -3522,7 +3866,7 @@
   if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+'
    " remove pattern from hiding list
    let g:netrw_list_hide= substitute(g:netrw_list_hide,'\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+','','')
-  elseif strlen(g:netrw_list_hide) >= 1
+  elseif s:Strlen(g:netrw_list_hide) >= 1
    let g:netrw_list_hide= g:netrw_list_hide . ',\(^\|\s\s\)\zs\.\S\+'
   else
    let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
@@ -3535,6 +3879,41 @@
 endfun
 
 " ---------------------------------------------------------------------
+"  s:NetrwHome: this function determines a "home" for saving bookmarks and history {{{2
+fun! s:NetrwHome()
+  if exists("g:netrw_home")
+   let home= g:netrw_home
+  else
+   " go to vim plugin home
+   for home in split(&rtp,',') + ['']
+    if isdirectory(home) && filewritable(home) | break | endif
+     let basehome= substitute(home,'[/\\]\.vim$','','')
+    if isdirectory(basehome) && filewritable(basehome)
+     let home= basehome."/.vim"
+     break
+    endif
+   endfor
+   if home == ""
+    " just pick the first directory
+    let home= substitute(&rtp,',.*$','','')
+   endif
+   if (has("win32") || has("win95") || has("win64") || has("win16"))
+    let home= substitute(home,'/','\\','g')
+   endif
+  endif
+  " insure that the home directory exists
+  if !isdirectory(home)
+   if exists("g:netrw_mkdir")
+    call system(g:netrw_mkdir." ".shellescape(home))
+   else
+    call mkdir(home)
+   endif
+  endif
+  let g:netrw_home= home
+  return home
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
 fun! s:NetrwLeftmouse(islocal)
 "  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
@@ -3749,6 +4128,7 @@
 "  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
   let curbufnr= bufnr("%")
   let curdir  = b:netrw_curdir
+  let trailer = '[@=|\/\*]\=\>'
   if exists("s:netrwmarkfilelist_{curbufnr}")
    " markfile list exists
 "   call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
@@ -3759,7 +4139,7 @@
     " append filename to buffer's markfilelist
 "    call Decho("append filename<".a:fname."> to local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
     call add(s:netrwmarkfilelist_{curbufnr},a:fname)
-    let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+    let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer
 
    else
     " remove filename from buffer's markfilelist
@@ -3767,7 +4147,7 @@
     call filter(s:netrwmarkfilelist_{curbufnr},'v:val != a:fname')
     if s:netrwmarkfilelist_{curbufnr} == []
      " local markfilelist is empty; remove it entirely
-"     call Decho("markfile list now empty, unlet s:netrwmarkfilelist_".curbufnr." and ...mtch_".curbufnr)
+"     call Decho("markfile list now empty")
      call s:NetrwUnmarkList(curbufnr,curdir)
     else
      " rebuild match list to display markings correctly
@@ -3776,9 +4156,9 @@
      let first                           = 1
      for fname in s:netrwmarkfilelist_{curbufnr}
       if first
-       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer
       else
-       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer
       endif
       let first= 0
      endfor
@@ -3799,7 +4179,7 @@
    if a:fname =~ '/$'
     let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc)
    else
-    let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).'\>'
+    let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).trailer
    endif
 "   call Decho("ending s:netrwmarkfilemtch_".curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
   endif
@@ -3830,7 +4210,9 @@
   " set up 2match'ing to netrwmarkfilemtch list
   if exists("s:netrwmarkfilemtch_{curbufnr}") && s:netrwmarkfilemtch_{curbufnr} != ""
 "   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/"
+   if exists("g:did_drchip_netrwlist_syntax")
+    exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/"
+   endif
   else
 "   call Decho("2match none")
    2match none
@@ -3858,7 +4240,7 @@
     for sfx in sort(keys(g:netrw_decompress))
      if fname =~ '\'.sfx.'$'
       " fname has a suffix indicating that its compressed; apply associated decompression routine
-      let exe= s:WinPath(g:netrw_decompress[sfx])
+      let exe= netrw#WinPath(g:netrw_decompress[sfx])
 "      call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
       if a:islocal
        if g:netrw_keepdir
@@ -3883,10 +4265,10 @@
      unlet exe
     elseif a:islocal
      " fname not a compressed file, so compress it
-     call system(s:WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname)))
+     call system(netrw#WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname)))
     else
      " fname not a compressed file, so compress it
-     call s:RemoteSystem(s:WinPath(g:netrw_compress)." ".shellescape(fname))
+     call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
     endif
    endfor
    call s:NetrwUnmarkList(curbufnr,curdir)
@@ -3927,7 +4309,7 @@
 "   call Decho("copy from local to local")
    let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
 "   call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
-   call system(s:WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
+   call system(netrw#WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
 
   elseif  a:islocal && !s:netrwmftgt_islocal
    " Copy marked files, local directory to remote directory
@@ -3982,7 +4364,9 @@
   if a:islocal
    call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
   endif
-  call s:LocalBrowseShellCmdRefresh()
+  if g:netrw_fastbrowse <= 1
+   call s:LocalBrowseShellCmdRefresh()
+  endif
   
 "  call Dret("s:NetrwMarkFileCopy 1")
   return 1
@@ -4064,10 +4448,10 @@
    for fname in s:netrwmarkfilelist_{curbufnr}
     if a:islocal
      if g:netrw_keepdir
-      let fname= shellescape(s:WinPath(s:ComposePath(curdir,fname)))
+      let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname)))
      endif
     else
-     let fname= shellescape(s:WinPath(b:netrw_curdir.fname))
+     let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname))
     endif
     if cmd =~ '%'
      let xcmd= substitute(cmd,'%',fname,'g')
@@ -4185,7 +4569,13 @@
 
    " use vimgrep for both local and remote
 "   call Decho("exe vimgrep".pat." ".netrwmarkfilelist)
-   exe "vimgrep".pat." ".netrwmarkfilelist
+   try
+    exe "noautocmd vimgrep".pat." ".netrwmarkfilelist
+    catch /^Vim\%((\a\+)\)\=:E480/
+     call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+"     call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
+     return
+   endtry
 
    2match none
    call netrw#NetrwRestorePosn(svpos)
@@ -4290,7 +4680,9 @@
   if a:islocal
    call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
   endif
-  call s:LocalBrowseShellCmdRefresh()
+  if g:netrw_fastbrowse <= 1
+   call s:LocalBrowseShellCmdRefresh()
+  endif
   
 "  call Dret("s:NetrwMarkFileMove")
 endfun
@@ -4342,24 +4734,15 @@
    " get the matching list of files using local glob()
 "   call Decho("handle local regexp")
    let dirname  = escape(b:netrw_curdir,g:netrw_glob_escape)
-   let filelist = glob(s:ComposePath(dirname,regexp))
-   if filelist != ""
-    let filelist= filelist."\n"
-   endif
+   let files = glob(s:ComposePath(dirname,regexp))
+"   call Decho("files<".files.">")
+   let filelist= split(files,"\n")
 
   " mark the list of files
-  while filelist != ""
-   if filelist =~ '\n'
-    let filename = substitute(filelist,'\n.*$','','e')
-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
-   else
-    let filename = filelist
-    let filelist = ""
-   endif
-"   call Decho("filelist<".filelist.">")
-"   call Decho("filename<".filename.">")
-   call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
-  endwhile
+  for fname in filelist
+"   call Decho("fname<".fname.">")
+   call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','',''))
+  endfor
 
   else
 "   call Decho("handle remote regexp")
@@ -4371,7 +4754,8 @@
    set ei=all ma
 "   call Decho("set ei=all ma")
    1split
-   enew
+   call s:NetrwEnew()
+   call s:NetrwSafeOptions()
    silent norm! "ap
    2
    let bannercnt= search('^" =====','W')
@@ -4379,16 +4763,21 @@
    set bt=nofile
    if     g:netrw_liststyle == s:LONGLIST
     silent %s/\s\{2,}\S.*$//e
+    call histdel("/",-1)
    elseif g:netrw_liststyle == s:WIDELIST
     silent %s/\s\{2,}/\r/ge
+    call histdel("/",-1)
    elseif g:netrw_liststyle == s:TREELIST
     silent %s/^| //e
     silent! g/^ .*$/d
+    call histdel("/",-1)
+    call histdel("/",-1)
    endif
    " convert regexp into the more usual glob-style format
    let regexp= substitute(regexp,'\*','.*','g')
 "   call Decho("regexp<".regexp.">")
    exe "silent! v/".escape(regexp,'/')."/d"
+   call histdel("/",-1)
    let filelist= getline(1,line("$"))
    q!
    for filename in filelist
@@ -4459,6 +4848,7 @@
     let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','')
 "    call Decho("curdir<".curdir."> path<".path.">")
     exe '%s/\t\(\S\+\)\t/\t'.escape(path,"/\n\r\\").'\1\t/e'
+    call histdel("/",-1)
     wq!
    endif
    2match none
@@ -4518,7 +4908,7 @@
   endif
   let s:netrwmftgt_islocal= a:islocal
 
-  if g:netrw_fastbrowse > 0
+  if g:netrw_fastbrowse <= 1
    call s:LocalBrowseShellCmdRefresh()
   endif
   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
@@ -4653,20 +5043,17 @@
 "    call Decho("initialize menu")
     let s:netrw_menu_enabled= 1
     exe 'silent! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
-    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4
     exe 'silent! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-	:'
     exe 'silent! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
     exe 'silent! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
     exe 'silent! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.2   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete<tab>mB	mB'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.3   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Bookmark<tab>gb	gb'
     exe 'silent! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
     exe 'silent! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
     exe 'silent! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab>'."<ctrl-h>	\<Plug>NetrwHideEdit"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
     exe 'silent! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
     exe 'silent! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<Plug>NetrwRefresh"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
     exe 'silent! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
     exe 'silent! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
     exe 'silent! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
@@ -4677,8 +5064,8 @@
     exe 'silent! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
     exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
     exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
     exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
     exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
     exe 'silent! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
@@ -4704,6 +5091,7 @@
     exe 'silent! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s	s'
     exe 'silent! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
     exe 'silent! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
+    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
     let s:netrw_menucnt= 28
 
    elseif !a:domenu
@@ -4731,8 +5119,8 @@
 "  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
 
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   let islocal= s:netrwmarkfilelist_{bufnr("%")}[1] !~ '^\a\+://'
-   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr("%")})
+   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
+   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
    call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
   else
    call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
@@ -4769,7 +5157,7 @@
   endif
 "  call Decho("tgtdir<".tgtdir.">")
 
-  if b:netrw_islocal
+  if exists("b:netrw_islocal") && b:netrw_islocal
    " obtain a file from local b:netrw_curdir to (local) tgtdir
 "   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
    if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
@@ -4921,6 +5309,14 @@
       call netrw#ErrorMsg(s:ERROR,getline(1),5)
      endif
     endif
+   elseif !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetrwObtain : unsupported method")
+    return
+   endif
+
+   " restore status line
+   if type(a:fname) == 1 && exists("s:netrw_users_stl")
+    call s:SetupNetrwStatusLine(s:netrw_users_stl)
    endif
 
   endif
@@ -4989,8 +5385,8 @@
     let &ei= eikeep
 "    call Decho("bnr=".bnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr#".winnr())
     if bnrcnt == 1
-     let bufname= bufname(winbufnr(winnr()))
-     let choice= confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel")
+     let bufname = bufname(winbufnr(winnr()))
+     let choice  = confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel")
 "     call Decho("bufname<".bufname."> choice=".choice." winnr#".winnr())
 
      if choice == 1
@@ -5138,6 +5534,7 @@
      endif
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      silent g/Local directory now/d
+     call histdel("/",-1)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       call netrw#ErrorMsg(s:ERROR,getline(1),14)
      else
@@ -5196,6 +5593,7 @@
      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      silent g/Local directory now/d
+     call histdel("/",-1)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       let debugkeep= &debug
       setlocal debug=msg
@@ -5205,6 +5603,9 @@
      else
       bw!|q
      endif
+    elseif !exists("b:netrw_method") || b:netrw_method < 0
+"     call Dfunc("netrw#NetrwUpload : unsupported method")
+     return
     endif
    else
     call netrw#ErrorMsg(s:ERROR,"can't obtain files with protocol from<".a:tgt.">",63)
@@ -5325,13 +5726,12 @@
     let seq     = seqlist
     let seqlist = ""
    endif
-   let sepchr= "\<Char-0xff>"
    if priority < 10
-    let spriority= "00".priority.sepchr
+    let spriority= "00".priority.g:netrw_sepchr
    elseif priority < 100
-    let spriority= "0".priority.sepchr
+    let spriority= "0".priority.g:netrw_sepchr
    else
-    let spriority= priority.sepchr
+    let spriority= priority.g:netrw_sepchr
    endif
 "   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
 
@@ -5345,14 +5745,17 @@
     let starpriority= spriority
    else
     exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.seq.'/s/^/'.spriority.'/'
+    call histdel("/",-1)
     " sometimes multiple sorting patterns will match the same file or directory.
     " The following substitute is intended to remove the excess matches.
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}'.sepchr.'\d\{3}\//s/^\d\{3}'.sepchr.'\(\d\{3}\/\).\@=/\1/e'
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e'
+    call histdel("/",-1)
    endif
    let priority = priority + 1
   endwhile
   if exists("starpriority")
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}'.sepchr.'/s/^/'.starpriority.'/'
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/'
+   call histdel("/",-1)
   endif
 
   " Following line associated with priority -- items that satisfy a priority
@@ -5361,7 +5764,8 @@
   " priority pattern needs to be retained.  So, at this point, these excess
   " priority prefixes need to be removed, but not directories that happen to
   " be just digits themselves.
-  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}'.sepchr.'\)\%(\d\{3}'.sepchr.'\)\+\ze./\1/e'
+  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e'
+  call histdel("/",-1)
 
 "  call Dret("SetSort")
 endfun
@@ -5405,12 +5809,12 @@
 
   elseif a:mode == 1
    " remote and t
-   let cursorword  = s:NetrwGetWord()
+   let newdir  = s:NetrwBrowseChgDir(0,s:NetrwGetWord())
 "   call Decho("tabnew")
    tabnew
    let s:didsplit= 1
    call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,cursorword))
+   call s:NetrwBrowse(0,newdir)
    unlet s:didsplit
 
   elseif a:mode == 2
@@ -5433,8 +5837,8 @@
 
   elseif a:mode == 4
    " local and t
-   let netrw_curdir= b:netrw_curdir
    let cursorword  = s:NetrwGetWord()
+   let netrw_curdir= s:NetrwTreeDir()
 "   call Decho("tabnew")
    tabnew
    let b:netrw_curdir= netrw_curdir
@@ -5505,12 +5909,13 @@
   if w:netrw_liststyle == s:TREELIST
 "   call Decho("w:netrrw_liststyle is TREELIST:")
 "   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
+
+   " extract tree directory if on a line specifying a subdirectory (ie. ends with "/")
    if getline('.') =~ '/$'
     let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e')
    else
     let treedir= ""
    endif
-
 "   call Decho("treedir<".treedir.">")
 
    " detect user attempting to close treeroot
@@ -5525,11 +5930,11 @@
 
    " elide all non-depth information
    let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
-"   call Decho("depth<".depth."> 1st subst")
+"   call Decho("depth<".depth."> 1st subst (non-depth info removed)")
 
    " elide first depth
    let depth = substitute(depth,'^| ','','')
-"   call Decho("depth<".depth."> 2nd subst")
+"   call Decho("depth<".depth."> 2nd subst (first depth removed)")
 
    " construct treedir by searching backwards at correct depth
 "   call Decho("constructing treedir<".treedir."> depth<".depth.">")
@@ -5548,11 +5953,6 @@
   endif
   let treedir= substitute(treedir,'//$','/','')
 
-"  " now force a refresh
-"" call DECHO("clear buffer<".expand("%")."> with :%d")
-"  setlocal ma noro
-"  keepjumps %d
-
 "  call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
   return treedir
 endfun
@@ -5663,30 +6063,32 @@
   if w:netrw_liststyle == s:WIDELIST
 "   call Dfunc("NetrwWideListing() w:netrw_liststyle=".w:netrw_liststyle.' fo='.&fo.' l:fo='.&l:fo)
    " look for longest filename (cpf=characters per filename)
-   " cpf: characters per file
-   " fpl: files per line
-   " fpc: files per column
+   " cpf: characters per filename
+   " fpl: filenames per line
+   " fpc: filenames per column
    setlocal ma noro
 "   call Decho("setlocal ma noro")
    let b:netrw_cpf= 0
    if line("$") >= w:netrw_bannercnt
     exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+    call histdel("/",-1)
    else
 "    call Dret("NetrwWideListing")
     return
    endif
-"   call Decho("max file strlen+1=".b:netrw_cpf)
-   let b:netrw_cpf= b:netrw_cpf + 1
+   let b:netrw_cpf= b:netrw_cpf + 2
+"   call Decho("b:netrw_cpf=max_filename_length+2=".b:netrw_cpf)
 
    " determine qty files per line (fpl)
    let w:netrw_fpl= winwidth(0)/b:netrw_cpf
    if w:netrw_fpl <= 0
     let w:netrw_fpl= 1
    endif
-"   call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
+"   call Decho("fpl= [winwidth=".winwidth(0)."]/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
 
    " make wide display
    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
+   call histdel("/",-1)
    let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
    let newcolstart = w:netrw_bannercnt + fpc
    let newcolend   = newcolstart + fpc - 1
@@ -5706,6 +6108,7 @@
    endwhile
    silent! let @*= keepregstar
    exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
+   call histdel("/",-1)
    setlocal noma nomod ro
 "   call Dret("NetrwWideListing")
   endif
@@ -5733,16 +6136,21 @@
   endif
 
   " save current directory on directory history list
-  call s:NetrwBookmarkDir(3,b:netrw_curdir)
+  call s:NetrwBookHistHandler(3,b:netrw_curdir)
 
   " Set up the banner {{{3
-"  call Decho("set up banner")
-  keepjumps put ='\" ============================================================================'
-  keepjumps put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
-  keepjumps put ='\"   '.b:netrw_curdir
-  keepjumps 1d
-  let w:netrw_bannercnt= 3
-  exe "keepjumps ".w:netrw_bannercnt
+  if g:netrw_banner
+"   call Decho("set up banner")
+   keepjumps put ='\" ============================================================================'
+   keepjumps put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
+   keepjumps put ='\"   '.b:netrw_curdir
+   keepjumps 1d
+   let w:netrw_bannercnt= 3
+   exe "keepjumps ".w:netrw_bannercnt
+  else
+   keepjumps 1
+   let w:netrw_bannercnt= 1
+  endif
 
   let sortby= g:netrw_sort_by
   if g:netrw_sort_direction =~ "^r"
@@ -5750,55 +6158,63 @@
   endif
 
   " Sorted by... {{{3
-"  call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
-  if g:netrw_sort_by =~ "^n"
+  if g:netrw_banner
+"   call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
+   if g:netrw_sort_by =~ "^n"
 "   call Decho("directories will be sorted by name")
-   " sorted by name
-   keepjumps put ='\"   Sorted by      '.sortby
-   keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
-   let w:netrw_bannercnt= w:netrw_bannercnt + 2
-  else
+    " sorted by name
+    keepjumps put ='\"   Sorted by      '.sortby
+    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
+    let w:netrw_bannercnt= w:netrw_bannercnt + 2
+   else
 "   call Decho("directories will be sorted by size or time")
-   " sorted by size or date
-   keepjumps put ='\"   Sorted by '.sortby
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
+    " sorted by size or date
+    keepjumps put ='\"   Sorted by '.sortby
+    let w:netrw_bannercnt= w:netrw_bannercnt + 1
+   endif
+   exe "keepjumps ".w:netrw_bannercnt
   endif
-  exe "keepjumps ".w:netrw_bannercnt
 
   " show copy/move target, if any
-  if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal")
-"   call Decho("show copy/move target<".s:netrwmftgt.">")
-   keepjumps put =''
-   if s:netrwmftgt_islocal
-    call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
+  if g:netrw_banner
+   if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal")
+"    call Decho("show copy/move target<".s:netrwmftgt.">")
+    keepjumps put =''
+    if s:netrwmftgt_islocal
+     call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
+    else
+     call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (remote)')
+    endif
+    let w:netrw_bannercnt= w:netrw_bannercnt + 1
    else
-    call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (remote)')
+"    call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
    endif
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
-  else
-"   call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
+   exe "keepjumps ".w:netrw_bannercnt
   endif
-  exe "keepjumps ".w:netrw_bannercnt
 
   " Hiding...  -or-  Showing... {{{3
-"  call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
-  if g:netrw_list_hide != "" && g:netrw_hide
-   if g:netrw_hide == 1
-    keepjumps put ='\"   Hiding:        '.g:netrw_list_hide
-   else
-    keepjumps put ='\"   Showing:       '.g:netrw_list_hide
+  if g:netrw_banner
+"   call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
+   if g:netrw_list_hide != "" && g:netrw_hide
+    if g:netrw_hide == 1
+     keepjumps put ='\"   Hiding:        '.g:netrw_list_hide
+    else
+     keepjumps put ='\"   Showing:       '.g:netrw_list_hide
+    endif
+    let w:netrw_bannercnt= w:netrw_bannercnt + 1
    endif
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
+   exe "keepjumps ".w:netrw_bannercnt
+   keepjumps put ='\"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
+   keepjumps put ='\" ============================================================================'
+   let w:netrw_bannercnt= w:netrw_bannercnt + 2
   endif
-  exe "keepjumps ".w:netrw_bannercnt
-  keepjumps put ='\"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
-  keepjumps put ='\" ============================================================================'
-  let w:netrw_bannercnt= w:netrw_bannercnt + 2
 
   " bannercnt should index the line just after the banner
-  let w:netrw_bannercnt= w:netrw_bannercnt + 1
-  exe "keepjumps ".w:netrw_bannercnt
-"  call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
+  if g:netrw_banner
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
+   exe "keepjumps ".w:netrw_bannercnt
+"   call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
+  endif
 
   " set up syntax highlighting {{{3
 "  call Decho("set up syntax highlighting")
@@ -5816,23 +6232,23 @@
   else " remote
    call s:NetrwRemoteListing()
   endif
-"  call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
+"  call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
 
   " manipulate the directory listing (hide, sort) {{{3
-  if line("$") >= w:netrw_bannercnt
+  if !g:netrw_banner || line("$") >= w:netrw_bannercnt
 "   call Decho("manipulate directory listing (hide)")
 "   call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
    endif
-   if line("$") >= w:netrw_bannercnt
+   if !g:netrw_banner || line("$") >= w:netrw_bannercnt
 "    call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
 
     if g:netrw_sort_by =~ "^n"
      " sort by name
      call s:NetrwSetSort()
 
-     if w:netrw_bannercnt < line("$")
+     if !g:netrw_banner || w:netrw_bannercnt < line("$")
 "      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
       if g:netrw_sort_direction =~ 'n'
        " normal direction sorting
@@ -5844,11 +6260,11 @@
      endif
      " remove priority pattern prefix
 "     call Decho("remove priority pattern prefix")
-     let sepchr= "\<Char-0xff>"
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}'.sepchr.'//e'
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
+     call histdel("/",-1)
 
     elseif a:islocal
-     if w:netrw_bannercnt < line("$")
+     if !g:netrw_banner || w:netrw_bannercnt < line("$")
 "      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
       if g:netrw_sort_direction =~ 'n'
 "       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
@@ -5857,13 +6273,17 @@
 "       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
        exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
       endif
-     endif
      exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+     call histdel("/",-1)
+     endif
     endif
 
    elseif g:netrw_sort_direction =~ 'r'
 "    call Decho('reverse the sorted listing')
-    exe 'silent keepjumps '.w:netrw_bannercnt.'g/^/m '.w:netrw_bannercnt
+    if !g:netrw_banner || w:netrw_bannercnt < line('$')
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^/m '.w:netrw_bannercnt
+     call histdel("/",-1)
+    endif
    endif
   endif
 
@@ -5872,7 +6292,7 @@
   call s:NetrwWideListing()
   call s:NetrwTreeListing(b:netrw_curdir)
 
-  if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
+  if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner)
    " place cursor on the top-left corner of the file listing
 "   call Decho("place cursor on top-left corner of file listing")
    exe 'silent keepjumps '.w:netrw_bannercnt
@@ -6006,8 +6426,10 @@
     " cleanup
     if g:netrw_ftp_browse_reject != ""
      exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
+     call histdel("/",-1)
     endif
     silent! keepjumps %s/\r$//e
+    call histdel("/",-1)
 
     " if there's no ../ listed, then put ./ and ../ in
     let line1= line(".")
@@ -6025,11 +6447,15 @@
     if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
 "     call Decho("M$ ftp cleanup")
      exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
+     call histdel("/",-1)
     else " normal ftp cleanup
 "     call Decho("normal ftp cleanup")
      exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
      exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
      exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
+     call histdel("/",-1)
+     call histdel("/",-1)
+     call histdel("/",-1)
     endif
    endif
 
@@ -6045,8 +6471,12 @@
     g/^Listing directory/d
     g/^d[-rwx][-rwx][-rwx]/s+$+/+e
     silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e
+    call histdel("/",-1)
+    call histdel("/",-1)
+    call histdel("/",-1)
     if g:netrw_liststyle != s:LONGLIST
      g/^[dlsp-][-rwx][-rwx][-rwx]/s/^.*\s\(\S\+\)$/\1/e
+     call histdel("/",-1)
     endif
    else
     if s:path == ""
@@ -6063,6 +6493,7 @@
    if g:netrw_ftp_browse_reject != ""
 "    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
     exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
+    call histdel("/",-1)
    endif
   endif
 
@@ -6099,6 +6530,9 @@
     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
     exe 'silent keepjumps '.w:netrw_bannercnt
+    call histdel("/",-1)
+    call histdel("/",-1)
+    call histdel("/",-1)
    endif
   endif
 
@@ -6118,6 +6552,7 @@
   let all= 0
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
    " remove all marked files
+"   call Decho("remove all marked files with bufnr#".bufnr("%"))
    for fname in s:netrwmarkfilelist_{bufnr("%")}
     let ok= s:NetrwRemoteRmFile(a:path,fname,all)
     if ok =~ 'q\%[uit]'
@@ -6126,12 +6561,11 @@
      let all= 1
     endif
    endfor
-   unlet s:netrwmarkfilelist_{bufnr("%")}
-   unlet s:netrwmarkfilemtch_{bufnr("%")}
-   2match none
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
 
   else
    " remove files specified by range
+"   call Decho("remove files specified by range")
 
    " preparation for removing multiple files/directories
    let ctr= a:firstline
@@ -6245,14 +6679,14 @@
      call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
     else
      let rmfile          = substitute(a:path.a:rmfile,'/$','','')
-     let netrw_rmdir_cmd = s:MakeSshCmd(s:WinPath(g:netrw_rmdir_cmd)).' '.shellescape(s:WinPath(rmfile))
+     let netrw_rmdir_cmd = s:MakeSshCmd(netrw#WinPath(g:netrw_rmdir_cmd)).' '.shellescape(netrw#WinPath(rmfile))
 "      call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
      let ret= system(netrw_rmdir_cmd)
 "      call Decho("returned=".ret." errcode=".v:shell_error)
 
      if v:shell_error != 0
 "      call Decho("v:shell_error not 0")
-      let netrw_rmf_cmd= s:MakeSshCmd(s:WinPath(g:netrw_rmf_cmd)).' '.shellescape(s:WinPath(substitute(rmfile,'[\/]$','','e')))
+      let netrw_rmf_cmd= s:MakeSshCmd(netrw#WinPath(g:netrw_rmf_cmd)).' '.shellescape(netrw#WinPath(substitute(rmfile,'[\/]$','','e')))
 "      call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
       let ret= system(netrw_rmf_cmd)
 "      call Decho("returned=".ret." errcode=".v:shell_error)
@@ -6353,13 +6787,17 @@
   " cleanup for Windows
   if has("win32") || has("win95") || has("win64") || has("win16")
    silent! keepjumps %s/\r$//e
+   call histdel("/",-1)
   endif
   if a:listcmd == "dir"
    " infer directory/link based on the file permission string
    silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
    silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
+   call histdel("/",-1)
+   call histdel("/",-1)
    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
     exe "silent! keepjumps ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
+    call histdel("/",-1)
    endif
   endif
 
@@ -6412,8 +6850,8 @@
     else
      let oldname= shellescape(a:path.oldname)
      let newname= shellescape(a:path.newname)
-"     call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")")
-     let ret    = system(s:WinPath(rename_cmd).' '.oldname.' '.newname)
+"     call Decho("system(netrw#WinPath(".rename_cmd.") ".oldname.' '.newname.")")
+     let ret    = system(netrw#WinPath(rename_cmd).' '.oldname.' '.newname)
     endif
 
    endfor
@@ -6437,8 +6875,8 @@
     else
      let oldname= shellescape(a:path.oldname)
      let newname= shellescape(a:path.newname)
-"     call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")")
-     let ret    = system(s:WinPath(rename_cmd).' '.oldname.' '.newname)
+"     call Decho("system(netrw#WinPath(".rename_cmd.") ".oldname.' '.newname.")")
+     let ret    = system(netrw#WinPath(rename_cmd).' '.oldname.' '.newname)
     endif
 
     let ctr= ctr + 1
@@ -6466,13 +6904,16 @@
   " The &ft == "netrw" test was installed because the BufEnter event
   " would hit when re-entering netrw windows, creating unexpected
   " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
-"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname))
+"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
   if isdirectory(a:dirname)
 "   call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$"))
    if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname)
     silent! call s:NetrwBrowse(1,a:dirname)
    elseif &ft == "netrw" && line("$") == 1
     silent! call s:NetrwBrowse(1,a:dirname)
+   elseif exists("s:treeforceredraw")
+    unlet s:treeforceredraw
+    silent! call s:NetrwBrowse(1,a:dirname)
    endif
   endif
   " not a directory, ignore it
@@ -6492,7 +6933,7 @@
 
   " get the list of files contained in the current directory
   let dirname    = escape(b:netrw_curdir,g:netrw_glob_escape)
-  let dirnamelen = strlen(b:netrw_curdir)
+  let dirnamelen = s:Strlen(b:netrw_curdir)
   let filelist   = glob(s:ComposePath(dirname,"*"))
 "  call Decho("glob(dirname<".dirname."/*>)=".filelist)
   if filelist != ""
@@ -6608,7 +7049,7 @@
 
    if w:netrw_liststyle == s:LONGLIST
     let sz   = getfsize(filename)
-    let fsz  = strpart("               ",1,15-s:Strlen(sz)).sz
+    let fsz  = strpart("               ",1,15-strlen(sz)).sz
     let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
 "    call Decho("sz=".sz." fsz=".fsz)
    endif
@@ -6617,7 +7058,7 @@
     " sort by time (handles time up to 1 quintillion seconds, US)
 "    call Decho("getftime(".filename.")=".getftime(filename))
     let t  = getftime(filename)
-    let ft = strpart("000000000000000000",1,18-s:Strlen(t)).t
+    let ft = strpart("000000000000000000",1,18-strlen(t)).t
 "    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
     let ftpfile= ft.'/'.pfile
     keepjumps silent! put=ftpfile
@@ -6626,7 +7067,7 @@
     " sort by size (handles file sizes up to 1 quintillion bytes, US)
 "    call Decho("getfsize(".filename.")=".getfsize(filename))
     let sz   = getfsize(filename)
-    let fsz  = strpart("000000000000000000",1,18-s:Strlen(sz)).sz
+    let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
 "    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
     let fszpfile= fsz.'/'.pfile
     keepjumps silent! put =fszpfile
@@ -6639,7 +7080,9 @@
   endwhile
 
   " cleanup any windows mess at end-of-line
+  silent! keepjumps g/^$/d
   silent! keepjumps %s/\r$//e
+  call histdel("/",-1)
   exe "setlocal ts=".g:netrw_maxfilenamelen
 "  call Decho("setlocal ts=".g:netrw_maxfilenamelen)
 
@@ -6659,9 +7102,17 @@
    return
   endif
   if !exists("w:netrw_bannercnt")
-"   call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw windwo")
+"   call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw window")
    return
   endif
+  if exists("s:locbrowseshellcmd")
+   if s:locbrowseshellcmd
+    let s:locbrowseshellcmd= 0
+"    call Dret("LocalBrowseShellCmdRefresh : NetrwBrowse itself caused the refresh")
+    return
+   endif
+   let s:locbrowseshellcmd= 0
+  endif
   let itab       = 1
   let buftablist = []
   while itab <= tabpagenr("$")
@@ -6815,8 +7266,8 @@
    let rmfile= substitute(rmfile,'[\/]$','','e')
 
    if all || ok =~ 'y\%[es]' || ok == ""
-"    call Decho("1st attempt: system(s:WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
-    call system(s:WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
+"    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
+    call system(netrw#WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
 "    call Decho("v:shell_error=".v:shell_error)
 
     if v:shell_error != 0
@@ -6874,9 +7325,7 @@
     endif
     call rename(oldname,newname)
    endfor
-   2match none
-   unlet s:netrwmarkfilelist_{bufnr("%")}
-   unlet s:netrwmarkfilemtch_{bufnr("%")}
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
   
   else
 
@@ -6955,9 +7404,11 @@
    augroup AuNetrwShellCmd
     au!
     if (has("win32") || has("win95") || has("win64") || has("win16"))
+"     call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
      au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
     else
      au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
+"     call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
     endif
    augroup END
   endif
@@ -6984,7 +7435,7 @@
 "   0=note     = s:NOTE
 "   1=warning  = s:WARNING
 "   2=error    = s:ERROR
-"  Jul 08, 2008 : max errnum currently is 71
+"  Dec 03, 2009 : max errnum currently is 76
 fun! netrw#ErrorMsg(level,msg,errnum)
 "  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
 
@@ -7017,7 +7468,8 @@
    else
 "    call Decho("create a NetrwMessage buffer window")
     bo 1split
-    enew
+    call s:NetrwEnew()
+    call s:NetrwSafeOptions()
     setlocal bt=nofile
     file NetrwMessage
 "    call Decho("setlocal ma noro")
@@ -7101,6 +7553,7 @@
   let w:netrw_winnr= winnr()
   let w:netrw_line = line(".")
   let w:netrw_col  = virtcol(".")
+"  call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
 
   " Save top-of-screen line
   norm! H0
@@ -7130,7 +7583,7 @@
 
   if(has("amiga"))
 "   call Decho("amiga")
-   let ec = a:base[strlen(a:base)-1]
+   let ec = a:base[s:Strlen(a:base)-1]
    if ec != '/' && ec != ':'
     let ret = a:base . "/" . a:subdir
    else
@@ -7141,6 +7594,14 @@
 "   call Decho("windows")
    let ret= a:subdir
 
+  elseif a:base =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16"))
+"   call Decho("windows")
+   if a:base =~ '[/\\]$'
+    let ret= a:base.a:subdir
+   else
+    let ret= a:base."/".a:subdir
+   endif
+
   elseif a:base =~ '^\a\+://'
 "   call Decho("remote linux/macos")
    let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','')
@@ -7212,7 +7673,7 @@
    endif
 
    " let netrw#NetSource() know about the tmpfile
-   let s:netrw_tmpfile= tmpfile " used by netrw#NetSource()
+   let s:netrw_tmpfile= tmpfile " used by netrw#NetSource() and netrw#NetrwBrowseX()
 "   call Decho("tmpfile<".tmpfile."> s:netrw_tmpfile<".s:netrw_tmpfile.">")
 
    " o/s dependencies
@@ -7301,7 +7762,7 @@
 fun! s:NetrwDelete(path)
 "  call Dfunc("s:NetrwDelete(path<".a:path.">)")
 
-  let path = s:WinPath(a:path)
+  let path = netrw#WinPath(a:path)
   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
    if exists("+shellslash")
     let sskeep= &shellslash
@@ -7317,7 +7778,7 @@
    let result= delete(path)
   endif
   if result < 0
-   call Netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
+   call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
   endif
 
 "  call Dret("s:NetrwDelete ".result)
@@ -7326,8 +7787,9 @@
 
 " ---------------------------------------------------------------------
 " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
-fun! s:NetrwEnew(curdir)
-"  call Dfunc("s:NetrwEnew(curdir<".a:curdir.">) buf#".bufnr("%")."<".bufname("%").">")
+fun! s:NetrwEnew(...)
+"  call Dfunc("s:NetrwEnew() a:0=".a:0)
+"  call Decho("curdir<".((a:0>0)? a:1 : "")."> buf#".bufnr("%")."<".bufname("%").">")
 
   " grab a function-local-variable copy of buffer variables
   if exists("b:netrw_bannercnt")      |let netrw_bannercnt       = b:netrw_bannercnt      |endif
@@ -7370,14 +7832,16 @@
   if exists("netrw_option")         |let b:netrw_option          = netrw_option         |endif
   if exists("netrw_prvdir")         |let b:netrw_prvdir          = netrw_prvdir         |endif
 
-  let b:netrw_curdir= a:curdir
-  if b:netrw_curdir =~ '/$'
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-    file NetrwTreeListing
-    nno <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
-    nno <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
-   else
-    exe "silent! keepalt file ".fnameescape(b:netrw_curdir)
+  if a:0 > 0
+   let b:netrw_curdir= a:1
+   if b:netrw_curdir =~ '/$'
+    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+     file NetrwTreeListing
+     nno <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
+     nno <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
+    else
+     exe "silent! keepalt file ".fnameescape(b:netrw_curdir)
+    endif
    endif
   endif
 
@@ -7511,13 +7975,16 @@
    call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
    unlet s:nbcd_curpos_{bufnr('%')}
   endif
+  if exists("s:explore_match")
+   exe "2match netrwMarkFile /".s:explore_match."/"
+  endif
 "  call Dret("s:NetrwRexplore")
 endfun
 
 " ---------------------------------------------------------------------
 " s:SaveBufVars: {{{2
 fun! s:SaveBufVars()
-"  call Dfunc("s:SaveBufVars()")
+"  call Dfunc("s:SaveBufVars() buf#".bufnr("%"))
 
   if exists("b:netrw_curdir")        |let s:netrw_curdir         = b:netrw_curdir        |endif
   if exists("b:netrw_lastfile")      |let s:netrw_lastfile       = b:netrw_lastfile      |endif
@@ -7532,7 +7999,7 @@
 " ---------------------------------------------------------------------
 " s:SaveWinVars: (used by Explore() and NetrwSplit()) {{{2
 fun! s:SaveWinVars()
-"  call Dfunc("s:SaveWinVars()")
+"  call Dfunc("s:SaveWinVars() win#".winnr())
   if exists("w:netrw_bannercnt")      |let s:bannercnt       = w:netrw_bannercnt      |endif
   if exists("w:netrw_col")            |let s:col             = w:netrw_col            |endif
   if exists("w:netrw_curdir")         |let s:curdir          = w:netrw_curdir         |endif
@@ -7562,7 +8029,7 @@
 "   variables are not inherited by the new window.  SetBufWinVars() and
 "   UseBufWinVars() get around that.
 fun! s:SetBufWinVars()
-"  call Dfunc("s:SetBufWinVars()")
+"  call Dfunc("s:SetBufWinVars() win#".winnr())
   if exists("w:netrw_liststyle")      |let b:netrw_liststyle      = w:netrw_liststyle      |endif
   if exists("w:netrw_bannercnt")      |let b:netrw_bannercnt      = w:netrw_bannercnt      |endif
   if exists("w:netrw_method")         |let b:netrw_method         = w:netrw_method         |endif
@@ -7584,8 +8051,7 @@
   if a:islocal
    exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
    if g:netrw_retmap
-    silent! unmap <2-leftmouse>
-    if !hasmapto("<Plug>NetrwReturn")
+    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
      nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
     endif
     let dir = escape(a:dirname, s:netrw_map_escape)
@@ -7594,8 +8060,7 @@
   else
    exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
    if g:netrw_retmap
-    silent! unmap <2-leftmouse>
-    if !hasmapto("<Plug>NetrwReturn")
+    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
      nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
     endif
     let dir = escape(a:dirname, s:netrw_map_escape)
@@ -7608,9 +8073,9 @@
 " ---------------------------------------------------------------------
 " s:Strlen: this function returns the length of a string, even if its {{{2
 "           using two-byte etc characters.
-"           Currently, its only used if g:Align_xstrlen is set to a
-"           nonzero value.  Solution from Nicolai Weibull, vim docs
-"           (:help strlen()), Tony Mechelynck, and my own invention.
+"           Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck,
+"           and a bit from me.
+"           if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used.
 fun! s:Strlen(x)
 "  call Dfunc("s:Strlen(x<".a:x.">")
   if g:netrw_xstrlen == 1
@@ -7638,7 +8103,7 @@
 
   else
    " at least give a decent default
-   ret= strlen(a:x)
+   let ret= strlen(a:x)
   endif
 "  call Dret("s:Strlen ".ret)
   return ret
@@ -7707,7 +8172,7 @@
 "                      Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
 fun! s:UpdateBuffersMenu()
 "  call Dfunc("s:UpdateBuffersMenu()")
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
+  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
    try
     silent emenu Buffers.Refresh\ menu
    catch /^Vim\%((\a\+)\)\=:E/
@@ -7737,12 +8202,14 @@
 endfun
 
 " ---------------------------------------------------------------------
-" s:WinPath: {{{2
-fun! s:WinPath(path)
-"  call Dfunc("s:WinPath(path<".a:path.">)")
-  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
+fun! netrw#WinPath(path)
+"  call Dfunc("netrw#WinPath(path<".a:path.">)")
+  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
+   " remove cygdrive prefix, if present
+   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
    " remove trailing slash (Win95)
-   let path = substitute(a:path, '\(\\\|/\)$', '', 'g')
+   let path = substitute(path, '\(\\\|/\)$', '', 'g')
    " remove escaped spaces
    let path = substitute(path, '\ ', ' ', 'g')
    " convert slashes to backslashes
@@ -7750,7 +8217,7 @@
   else
    let path= a:path
   endif
-"  call Dret("s:WinPath <".path.">")
+"  call Dret("netrw#WinPath <".path.">")
   return path
 endfun
 
diff --git a/runtime/autoload/netrwFileHandlers.vim b/runtime/autoload/netrwFileHandlers.vim
index 5fb05ba..1515b00 100644
--- a/runtime/autoload/netrwFileHandlers.vim
+++ b/runtime/autoload/netrwFileHandlers.vim
@@ -1,9 +1,9 @@
 " netrwFileHandlers: contains various extension-based file handlers for
 "                    netrw's browsers' x command ("eXecute launcher")
 " Author:	Charles E. Campbell, Jr.
-" Date:		May 30, 2006
-" Version:	9
-" Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
+" Date:		Sep 30, 2008
+" Version:	10
+" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,9 +20,15 @@
 if exists("g:loaded_netrwFileHandlers") || &cp
  finish
 endif
+let g:loaded_netrwFileHandlers= "v10"
+if v:version < 702
+ echohl WarningMsg
+ echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
+ echohl Normal
+ finish
+endif
 let s:keepcpo= &cpo
 set cpo&vim
-let g:loaded_netrwFileHandlers= "v9"
 
 " ---------------------------------------------------------------------
 " netrwFileHandlers#Invoke: {{{1
@@ -73,10 +79,10 @@
 
   if executable("mozilla")
 "   call Decho("executing !mozilla ".page)
-   exe "!mozilla ".g:netrw_shq.page.g:netrw_shq
+   exe "!mozilla ".shellescape(page,1)
   elseif executable("netscape")
 "   call Decho("executing !netscape ".page)
-   exe "!netscape ".g:netrw_shq..page.g:netrw_shq
+   exe "!netscape ".shellescape(page,1)
   else
 "   call Dret("s:NFH_html 0")
    return 0
@@ -96,10 +102,10 @@
 
   if executable("mozilla")
 "   call Decho("executing !mozilla ".page)
-   exe "!mozilla ".g:netrw_shq.page.g:netrw_shq
+   exe "!mozilla ".shellescape(page,1)
   elseif executable("netscape")
 "   call Decho("executing !netscape ".page)
-   exe "!netscape ".g:netrw_shq.page.g:netrw_shq
+   exe "!netscape ".shellescape(page,1)
   else
 "   call Dret("s:NFH_htm 0")
    return 0
@@ -115,10 +121,10 @@
 "  call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)")
 
   if executable("gimp")
-   exe "silent! !gimp -s ".g:netrw_shq.a:jpgfile.g:netrw_shq
+   exe "silent! !gimp -s ".shellescape(a:jpgfile,1)
   elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
 "   call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
-   exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:jpgfile.g:netrw_shq
+   exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:jpgfile,1)
   else
 "   call Dret("s:NFH_jpg 0")
    return 0
@@ -134,9 +140,9 @@
 "  call Dfunc("s:NFH_gif(giffile<".a:giffile.">)")
 
   if executable("gimp")
-   exe "silent! !gimp -s ".g:netrw_shq.a:giffile.g:netrw_shq
+   exe "silent! !gimp -s ".shellescape(a:giffile,1)
   elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
-   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:giffile.g:netrw_shq
+   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:giffile,1)
   else
 "   call Dret("s:NFH_gif 0")
    return 0
@@ -152,9 +158,9 @@
 "  call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)")
 
   if executable("gimp")
-   exe "silent! !gimp -s ".g:netrw_shq.a:pngfile.g:netrw_shq
+   exe "silent! !gimp -s ".shellescape(a:pngfile,1)
   elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
-   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:pngfile.g:netrw_shq
+   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pngfile,1)
   else
 "   call Dret("s:NFH_png 0")
    return 0
@@ -170,9 +176,9 @@
 "  call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)")
 
   if executable("gimp")
-   exe "silent! !gimp -s ".g:netrw_shq.a:pnmfile.g:netrw_shq
+   exe "silent! !gimp -s ".shellescape(a:pnmfile,1)
   elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
-   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:pnmfile.g:netrw_shq
+   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pnmfile,1)
   else
 "   call Dret("s:NFH_pnm 0")
    return 0
@@ -190,7 +196,7 @@
   if executable("gimp")
    exe "silent! !gimp -s ".a:bmpfile
   elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
-   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:bmpfile.g:netrw_shq
+   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:bmpfile,1)
   else
 "   call Dret("s:NFH_bmp 0")
    return 0
@@ -205,9 +211,9 @@
 fun! s:NFH_pdf(pdf)
 "  call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)")
   if executable("gs")
-   exe 'silent! !gs '.g:netrw_shq.a:pdf.g:netrw_shq
+   exe 'silent! !gs '.shellescape(a:pdf,1)
   elseif executable("pdftotext")
-   exe 'silent! pdftotext -nopgbrk '.g:netrw_shq.a:pdf.g:netrw_shq
+   exe 'silent! pdftotext -nopgbrk '.shellescape(a:pdf,1)
   else
 "  call Dret("s:NFH_pdf 0")
    return 0
@@ -223,7 +229,7 @@
 "  call Dfunc("s:NFH_doc(doc<".a:doc.">)")
 
   if executable("oowriter")
-   exe 'silent! !oowriter '.g:netrw_shq.a:doc.g:netrw_shq
+   exe 'silent! !oowriter '.shellescape(a:doc,1)
    redraw!
   else
 "  call Dret("s:NFH_doc 0")
@@ -240,7 +246,7 @@
 "  call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)")
 
   if executable("oowriter")
-   exe 'silent! !oowriter '.g:netrw_shq.a:sxw.g:netrw_shq
+   exe 'silent! !oowriter '.shellescape(a:sxw,1)
    redraw!
   else
 "   call Dret("s:NFH_sxw 0")
@@ -257,7 +263,7 @@
 "  call Dfunc("s:NFH_xls(xls<".a:xls.">)")
 
   if executable("oocalc")
-   exe 'silent! !oocalc '.g:netrw_shq.a:xls.g:netrw_shq
+   exe 'silent! !oocalc '.shellescape(a:xls,1)
    redraw!
   else
 "  call Dret("s:NFH_xls 0")
@@ -274,15 +280,15 @@
 "  call Dfunc("s:NFH_ps(ps<".a:ps.">)")
   if executable("gs")
 "   call Decho("exe silent! !gs ".a:ps)
-   exe "silent! !gs ".g:netrw_shq.a:ps.g:netrw_shq
+   exe "silent! !gs ".shellescape(a:ps,1)
    redraw!
   elseif executable("ghostscript")
 "   call Decho("exe silent! !ghostscript ".a:ps)
-   exe "silent! !ghostscript ".g:netrw_shq.a:ps.g:netrw_shq
+   exe "silent! !ghostscript ".shellescape(a:ps,1)
    redraw!
   elseif executable("gswin32")
-"   call Decho("exe silent! !gswin32 ".g:netrw_shq.a:ps.g:netrw_shq)
-   exe "silent! !gswin32 ".g:netrw_shq.a:ps.g:netrw_shq
+"   call Decho("exe silent! !gswin32 ".shellescape(a:ps,1))
+   exe "silent! !gswin32 ".shellescape(a:ps,1)
    redraw!
   else
 "   call Dret("s:NFH_ps 0")
@@ -298,16 +304,16 @@
 fun! s:NFH_eps(eps)
 "  call Dfunc("s:NFH_eps()")
   if executable("gs")
-   exe "silent! !gs ".g:netrw_shq.a:eps.g:netrw_shq
+   exe "silent! !gs ".shellescape(a:eps,1)
    redraw!
   elseif executable("ghostscript")
-   exe "silent! !ghostscript ".g:netrw_shq.a:eps.g:netrw_shq
+   exe "silent! !ghostscript ".shellescape(a:eps,1)
    redraw!
   elseif executable("ghostscript")
-   exe "silent! !ghostscript ".g:netrw_shq.a:eps.g:netrw_shq
+   exe "silent! !ghostscript ".shellescape(a:eps,1)
    redraw!
   elseif executable("gswin32")
-   exe "silent! !gswin32 ".g:netrw_shq.a:eps.g:netrw_shq
+   exe "silent! !gswin32 ".shellescape(a:eps,1)
    redraw!
   else
 "   call Dret("s:NFH_eps 0")
diff --git a/runtime/autoload/netrwSettings.vim b/runtime/autoload/netrwSettings.vim
index c0704d4..38f7299 100644
--- a/runtime/autoload/netrwSettings.vim
+++ b/runtime/autoload/netrwSettings.vim
@@ -1,7 +1,7 @@
 " netrwSettings.vim: makes netrw settings simpler
-" Date:		Jul 02, 2008
+" Date:		Sep 03, 2008
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	12
+" Version:	13
 " Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
@@ -19,7 +19,13 @@
 if exists("g:loaded_netrwSettings") || &cp
   finish
 endif
-let g:loaded_netrwSettings  = "v12"
+let g:loaded_netrwSettings = "v13"
+if v:version < 700
+ echohl WarningMsg
+ echo "***warning*** this version of netrwSettings needs vim 7.0"
+ echohl Normal
+ finish
+endif
 
 " ---------------------------------------------------------------------
 " NetrwSettings: {{{1
@@ -100,6 +106,7 @@
    put = 'let g:netrw_browsex_viewer    = (not defined)'
   endif
   put = 'let g:netrw_compress          = '.g:netrw_compress
+  put = 'let g:netrw_cursorline        = '.g:netrw_cursorline
   let decompressline= line("$")
   put ='let g:netrw_decompress...'
   put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
@@ -138,6 +145,7 @@
   put = 'let g:netrw_special_syntax    = '.g:netrw_special_syntax
   put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
   put = 'let g:netrw_scpport           = '.g:netrw_scpport
+  put = 'let g:netrw_sepchr            = '.g:netrw_sepchr
   put = 'let g:netrw_sshport           = '.g:netrw_sshport
   put = 'let g:netrw_timefmt           = '.g:netrw_timefmt
   let tmpfileescline= line("$")
diff --git a/runtime/autoload/rubycomplete.vim b/runtime/autoload/rubycomplete.vim
index 87e6c9a..86baa0d 100644
--- a/runtime/autoload/rubycomplete.vim
+++ b/runtime/autoload/rubycomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:             Ruby
 " Maintainer:           Mark Guzman <segfault@hasno.info>
-" Info:                 $Id$
+" Info:                 $Id: rubycomplete.vim,v 1.41 2008/06/30 06:50:45 segy Exp $
 " URL:                  http://vim-ruby.rubyforge.org
 " Anon CVS:             See above site
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/autoload/spellfile.vim b/runtime/autoload/spellfile.vim
index 9979f1b..534acc6 100644
--- a/runtime/autoload/spellfile.vim
+++ b/runtime/autoload/spellfile.vim
@@ -1,6 +1,6 @@
 " Vim script to download a missing spell file
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2008 Jun 27
+" Last Change:	2008 Nov 29
 
 if !exists('g:spellfile_URL')
   " Prefer using http:// when netrw should be able to use it, since
@@ -39,19 +39,22 @@
   let s:donedict[a:lang . &enc] = 1
 
   " Find spell directories we can write in.
-  let dirlist = []
-  let dirchoices = '&Cancel'
-  for dir in split(globpath(&rtp, 'spell'), "\n")
-    if filewritable(dir) == 2
-      call add(dirlist, dir)
-      let dirchoices .= "\n&" . len(dirlist)
-    endif
-  endfor
+  let [dirlist, dirchoices] = spellfile#GetDirChoices()
   if len(dirlist) == 0
-    if &verbose
+    let dir_to_create = spellfile#WritableSpellDir()
+    if &verbose || dir_to_create != ''
       echomsg 'spellfile#LoadFile(): There is no writable spell directory.'
     endif
-    return
+    if dir_to_create != ''
+      if confirm("Shall I create " . dir_to_create, "&Yes\n&No", 2) == 1
+	" After creating the directory it should show up in the list.
+	call mkdir(dir_to_create, "p")
+	let [dirlist, dirchoices] = spellfile#GetDirChoices()
+      endif
+    endif
+    if len(dirlist) == 0
+      return
+    endif
   endif
 
   let msg = 'Cannot find spell file for "' . a:lang . '" in ' . &enc
@@ -177,3 +180,29 @@
     unlet g:netrw_use_errorwindow
   endif
 endfunc
+
+" Get a list of writable spell directories and choices for confirm().
+function! spellfile#GetDirChoices()
+  let dirlist = []
+  let dirchoices = '&Cancel'
+  for dir in split(globpath(&rtp, 'spell'), "\n")
+    if filewritable(dir) == 2
+      call add(dirlist, dir)
+      let dirchoices .= "\n&" . len(dirlist)
+    endif
+  endfor
+  return [dirlist, dirchoices]
+endfunc
+
+function! spellfile#WritableSpellDir()
+  if has("unix")
+    " For Unix always use the $HOME/.vim directory
+    return $HOME . "/.vim/spell"
+  endif
+  for dir in split(&rtp, ',')
+    if filewritable(dir) == 2
+      return dir . "/spell"
+    endif
+  endfor
+  return ''
+endfunction
diff --git a/runtime/autoload/sqlcomplete.vim b/runtime/autoload/sqlcomplete.vim
index eecb326..aae92e6 100644
--- a/runtime/autoload/sqlcomplete.vim
+++ b/runtime/autoload/sqlcomplete.vim
@@ -1,13 +1,19 @@
 " Vim OMNI completion script for SQL
 " Language:    SQL
-" Maintainer:  David Fishburn <fishburn@ianywhere.com>
-" Version:     6.0
-" Last Change: Thu 03 Apr 2008 10:37:54 PM Eastern Daylight Time
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Version:     7.0
+" Last Change: 2009 Jan 04
 " Usage:       For detailed help
 "              ":help sql.txt" 
 "              or ":help ft-sql-omni" 
 "              or read $VIMRUNTIME/doc/sql.txt
 
+" History
+" Version 7.0
+"     Better handling of object names
+" Version 6.0
+"     Supports object names with spaces "my table name"
+"
 " Set completion with CTRL-X CTRL-O to autoloaded function.
 " This check is in place in case this script is
 " sourced directly instead of using the autoload feature. 
@@ -22,7 +28,7 @@
 if exists('g:loaded_sql_completion')
     finish 
 endif
-let g:loaded_sql_completion = 50
+let g:loaded_sql_completion = 70
 
 " Maintains filename of dictionary
 let s:sql_file_table        = ""
@@ -106,10 +112,23 @@
             let begindot = 1
         endif
         while start > 0
-            if line[start - 1] =~ '\(\w\|\s\+\)'
+            " Additional code was required to handle objects which 
+            " can contain spaces like "my table name".
+            if line[start - 1] !~ '\(\w\|\.\)'
+                " If the previous character is not a period or word character
+                break
+            " elseif line[start - 1] =~ '\(\w\|\s\+\)'
+            "     let start -= 1
+            elseif line[start - 1] =~ '\w'
+                " If the previous character is word character continue back
                 let start -= 1
             elseif line[start - 1] =~ '\.' && 
                         \ compl_type =~ 'column\|table\|view\|procedure'
+                " If the previous character is a period and we are completing
+                " an object which can be specified with a period like this:
+                "     table_name.column_name
+                "     owner_name.table_name
+
                 " If lastword has already been set for column completion
                 " break from the loop, since we do not also want to pickup
                 " a table name if it was also supplied.
@@ -184,9 +203,10 @@
         endif
 
         let compl_type_uc = substitute(compl_type, '\w\+', '\u&', '')
-        if s:sql_file_{compl_type} == ""
-            let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type_uc)
-        endif
+        " Same call below, no need to do it twice
+        " if s:sql_file_{compl_type} == ""
+        "     let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type_uc)
+        " endif
         let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type_uc)
         if s:sql_file_{compl_type} != ""
             if filereadable(s:sql_file_{compl_type})
@@ -312,9 +332,16 @@
     endif
 
     if base != ''
-        " Filter the list based on the first few characters the user
-        " entered
-        let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\([^.]*\\)\\?'.base.'\\)"'
+        " Filter the list based on the first few characters the user entered.
+        " Check if the text matches at the beginning 
+        " or 
+        " Match to a owner.table or alias.column type match
+        " or
+        " Handle names with spaces "my table name"
+        let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
+        " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\)"'
+        " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\(\\.\\)\\?'.base.'\\)"'
+        " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\([^.]*\\)\\?'.base.'\\)"'
         let compl_list = filter(deepcopy(compl_list), expr)
     endif
 
diff --git a/runtime/autoload/tar.vim b/runtime/autoload/tar.vim
index af6fbca..3e44579 100644
--- a/runtime/autoload/tar.vim
+++ b/runtime/autoload/tar.vim
@@ -1,13 +1,13 @@
 " tar.vim: Handles browsing tarfiles
 "            AUTOLOAD PORTION
-" Date:			Aug 08, 2008
-" Version:		23 + modifications by Bram
+" Date:			Dec 28, 2009
+" Version:		24
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
 "
 "	Contains many ideas from Michael Toren's <tar.vim>
 "
-" Copyright:    Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2009 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -16,19 +16,22 @@
 "               By using this plugin, you agree that in no event will the
 "               copyright holder be liable for any damages resulting from
 "               the use of this software.
-
+"     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 " ---------------------------------------------------------------------
 " Load Once: {{{1
-let s:keepcpo= &cpo
-set cpo&vim
-if &cp || exists("g:loaded_tar") || v:version < 700
+if &cp || exists("g:loaded_tar")
  finish
 endif
-let g:loaded_tar= "v23b"
-"call Decho("loading autoload/tar.vim")
-if v:version < 701 || (v:version == 701 && !has("patch299"))
- echoerr "(autoload/tar.vim) need vim v7.1 with patchlevel 299"
+let g:loaded_tar= "v24"
+if v:version < 702
+ echohl WarningMsg
+ echo "***warning*** this version of tar needs vim 7.2"
+ echohl Normal
+ finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
+"call Decho("loading autoload/tar.vim")
 
 " ---------------------------------------------------------------------
 "  Default Settings: {{{1
@@ -44,7 +47,22 @@
 if !exists("g:tar_writeoptions")
  let g:tar_writeoptions= "uf"
 endif
-
+if !exists("g:tar_copycmd")
+ if !exists("g:netrw_localcopycmd")
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   if g:netrw_cygwin
+    let g:netrw_localcopycmd= "cp"
+   else
+    let g:netrw_localcopycmd= "copy"
+   endif
+  elseif has("unix") || has("macunix")
+   let g:netrw_localcopycmd= "cp"
+  else
+   let g:netrw_localcopycmd= ""
+  endif
+ endif
+ let g:tar_copycmd= g:netrw_localcopycmd
+endif
 if !exists("g:netrw_cygwin")
  if has("win32") || has("win95") || has("win64") || has("win16")
   if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
@@ -56,6 +74,9 @@
   let g:netrw_cygwin= 0
  endif
 endif
+if !exists("g:tar_extractcmd")
+ let g:tar_extractcmd= "tar -xf"
+endif
 
 " set up shell quoting character
 if !exists("g:tar_shq")
@@ -88,7 +109,6 @@
   if !executable(g:tar_cmd)
    redraw!
    echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
-"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("tar#Browse")
    return
@@ -99,7 +119,6 @@
     " if its an url, don't complain, let url-handlers such as vim do its thing
     redraw!
     echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
-"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
    let &report= repkeep
 "   call Dret("tar#Browse : file<".a:tarfile."> not readable")
@@ -130,37 +149,38 @@
   let tarfile= a:tarfile
   if has("win32") && executable("cygpath")
    " assuming cygwin
-   let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
+   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
   let curlast= line("$")
   if tarfile =~# '\.\(gz\|tgz\)$'
-"   call Decho("1: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+"   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   elseif tarfile =~# '\.lrp'
-"   call Decho("2: exe silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
+"   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
+   exe "silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
   elseif tarfile =~# '\.bz2$'
-"   call Decho("3: exe silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+"   call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+  elseif tarfile =~# '\.lzma$'
+"   call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   else
    if tarfile =~ '^\s*-'
-    " A file name starting with a dash may be taken as an option.  Prepend ./ to avoid that.
+    " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
     let tarfile = substitute(tarfile, '-', './-', '')
    endif
-"   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1))
-   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1)
+"   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,0))
+   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
   endif
   if v:shell_error != 0
    redraw!
    echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">"
-"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
    return
   endif
   if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
    redraw!
    echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
-"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    silent %d
    let eikeep= &ei
    set ei=BufReadCmd,FileReadCmd
@@ -189,7 +209,7 @@
 
   if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-'
    redraw!
-   echohl WarningMsg | echo '***error*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"; See :help tar-options'
+   echohl WarningMsg | echo '***warning*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"'
 "   call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"')
    return
   endif
@@ -206,7 +226,7 @@
   let curfile= expand("%")
   if has("win32") && executable("cygpath")
    " assuming cygwin
-   let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
+   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
 
   new
@@ -231,21 +251,24 @@
   let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
   if has("win32") && executable("cygpath")
    " assuming cygwin
-   let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e')
+   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
 "  call Decho("tarfile<".tarfile.">")
 "  call Decho("fname<".fname.">")
 
-  if      fname =~ '\.gz$'  && executable("zcat")
+  if  fname =~ '\.bz2$' && executable("bzcat")
+   let decmp= "|bzcat"
+   let doro = 1
+  elseif      fname =~ '\.gz$'  && executable("zcat")
    let decmp= "|zcat"
    let doro = 1
-  elseif  fname =~ '\.bz2$' && executable("bzcat")
-   let decmp= "|bzcat"
+  elseif  fname =~ '\.lzma$' && executable("lzcat")
+   let decmp= "|lzcat"
    let doro = 1
   else
    let decmp=""
    let doro = 0
-   if fname =~ '\.gz$\|\.bz2$\|\.Z$\|\.zip$'
+   if fname =~ '\.bz2$\|\.gz$\|\.lzma$\|\.zip$\|\.Z$'
     setlocal bin
    endif
   endif
@@ -255,22 +278,25 @@
   else
    let tar_secure= " "
   endif
-  if tarfile =~# '\.\(gz\|tgz\)$'
-"   call Decho("5: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.s:Escape(fname,1))
-   exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
+  if tarfile =~# '\.bz2$'
+"   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+  elseif tarfile =~# '\.\(gz\|tgz\)$'
+"   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
+   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.lrp$'
-"   call Decho("6: exe silent r! cat ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp)
-   exe "silent r! cat -- ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
-  elseif tarfile =~# '\.bz2$'
-"   call Decho("7: exe silent r! bzip2 -d -c ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp)
-   exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp
+"   call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+   exe "silent r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+  elseif tarfile =~# '\.lzma$'
+"   call Decho("7: exe silent r! lzma -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   else
    if tarfile =~ '^\s*-'
-    " A file name starting with a dash may be taken as an option.  Prepend ./ to avoid that.
+    " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
     let tarfile = substitute(tarfile, '-', './-', '')
    endif
-"   call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions." "s:Escape(tarfile,1).tar_secure..s:Escape(fname,1).decmp)
-   exe "silent r! ".g:tar_cmd." -".g:tar_readoptions." ".s:Escape(tarfile,1).tar_secure.s:Escape(fname,1).decmp
+"   call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions.tar_secure.shellescape(tarfile,1)." ".shellescape(fname,1).decmp)
+   exe "silent r! ".g:tar_cmd." -".g:tar_readoptions.shellescape(tarfile,1)." ".tar_secure.shellescape(fname,1).decmp
   endif
 
   if doro
@@ -298,7 +324,7 @@
 
   if !exists("g:tar_secure") && a:fname =~ '^\s*-\|\s\+-'
    redraw!
-   echohl WarningMsg | echo '***error*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"; See :help tar-options'
+   echohl WarningMsg | echo '***warning*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"'
 "   call Dret('tar#Write : rejecting tarfile member<'.fname.'> because of embedded "-"')
    return
   endif
@@ -307,7 +333,6 @@
   if !executable(g:tar_cmd)
    redraw!
    echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
-"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("tar#Write")
    return
@@ -315,7 +340,6 @@
   if !exists("*mkdir")
    redraw!
    echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None
-"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("tar#Write")
    return
@@ -336,7 +360,6 @@
   catch /^Vim\%((\a\+)\)\=:E344/
    redraw!
    echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None
-"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("tar#Write")
    return
@@ -355,29 +378,33 @@
   let fname   = substitute(w:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
 
   " handle compressed archives
-  if tarfile =~# '\.gz'
-   call system("gzip -d -- ".s:Escape(tarfile,0))
+  if tarfile =~# '\.bz2'
+   call system("bzip2 -d -- ".shellescape(tarfile,0))
+   let tarfile = substitute(tarfile,'\.bz2','','e')
+   let compress= "bzip2 -- ".shellescape(tarfile,0)
+"   call Decho("compress<".compress.">")
+  elseif tarfile =~# '\.gz'
+   call system("gzip -d -- ".shellescape(tarfile,0))
    let tarfile = substitute(tarfile,'\.gz','','e')
-   let compress= "gzip -- ".s:Escape(tarfile,0)
+   let compress= "gzip -- ".shellescape(tarfile,0)
+"   call Decho("compress<".compress.">")
+  elseif tarfile =~# '\.lzma'
+   call system("lzma -d -- ".shellescape(tarfile,0))
+   let tarfile = substitute(tarfile,'\.lzma','','e')
+   let compress= "lzma -- ".shellescape(tarfile,0)
 "   call Decho("compress<".compress.">")
   elseif tarfile =~# '\.tgz'
-   call system("gzip -d -- ".s:Escape(tarfile,0))
+   call system("gzip -d -- ".shellescape(tarfile,0))
    let tarfile = substitute(tarfile,'\.tgz','.tar','e')
-   let compress= "gzip -- ".s:Escape(tarfile,0)
+   let compress= "gzip -- ".shellescape(tarfile,0)
    let tgz     = 1
 "   call Decho("compress<".compress.">")
-  elseif tarfile =~# '\.bz2'
-   call system("bzip2 -d -- ".s:Escape(tarfile,0))
-   let tarfile = substitute(tarfile,'\.bz2','','e')
-   let compress= "bzip2 -- ".s:Escape(tarfile,0)
-"   call Decho("compress<".compress.">")
   endif
 "  call Decho("tarfile<".tarfile.">")
 
   if v:shell_error != 0
    redraw!
    echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
-"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
   else
 
 "   call Decho("tarfile<".tarfile."> fname<".fname.">")
@@ -385,7 +412,7 @@
    if fname =~ '/'
     let dirpath = substitute(fname,'/[^/]\+$','','e')
     if executable("cygpath")
-     let dirpath = substitute(system("cygpath ".s:Escape(dirpath, 0)),'\n','','e')
+     let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e')
     endif
     call mkdir(dirpath,"p")
    endif
@@ -405,25 +432,23 @@
    endif
    exe "w! ".fnameescape(fname)
    if executable("cygpath")
-    let tarfile = substitute(system("cygpath ".s:Escape(tarfile,0)),'\n','','e')
+    let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e')
    endif
  
    " delete old file from tarfile
-"   call Decho("system(".g:tar_cmd." --delete -f ".s:Escape(tarfile,0)." -- ".s:Escape(fname,0).")")
-   call system(g:tar_cmd." --delete -f ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
+"   call Decho("system(".g:tar_cmd." --delete -f ".shellescape(tarfile,0)." -- ".shellescape(fname,0).")")
+   call system(g:tar_cmd." --delete -f ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
    if v:shell_error != 0
     redraw!
     echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
-"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    else
  
     " update tarfile with new file 
-"    call Decho(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
-    call system(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0))
+"    call Decho(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
+    call system(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
     if v:shell_error != 0
      redraw!
      echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
-"     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     elseif exists("compress")
 "     call Decho("call system(".compress.")")
      call system(compress)
@@ -439,13 +464,13 @@
 "    call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">")
     let tblfile= s:tblfile_{winnr()}
     1split|enew
-    let binkeep= &binary
+    let binkeep= &l:binary
     let eikeep = &ei
     set binary ei=all
     exe "e! ".fnameescape(tarfile)
     call netrw#NetWrite(tblfile)
-    let &ei     = eikeep
-    let &binary = binkeep
+    let &ei       = eikeep
+    let &l:binary = binkeep
     q!
     unlet s:tblfile_{winnr()}
    endif
@@ -462,38 +487,98 @@
 endfun
 
 " ---------------------------------------------------------------------
-" Rmdir: {{{2
+" s:Rmdir: {{{2
 fun! s:Rmdir(fname)
 "  call Dfunc("Rmdir(fname<".a:fname.">)")
   if has("unix")
-   call system("/bin/rm -rf -- ".s:Escape(a:fname,0))
+   call system("/bin/rm -rf -- ".shellescape(a:fname,0))
   elseif has("win32") || has("win95") || has("win64") || has("win16")
    if &shell =~? "sh$"
-    call system("/bin/rm -rf -- ".s:Escape(a:fname,0))
+    call system("/bin/rm -rf -- ".shellescape(a:fname,0))
    else
-    call system("del /S ".s:Escape(a:fname,0))
+    call system("del /S ".shellescape(a:fname,0))
    endif
   endif
 "  call Dret("Rmdir")
 endfun
 
 " ---------------------------------------------------------------------
-" s:Escape: {{{2
-fun s:Escape(name,isfilt)
-  " shellescape() was added by patch 7.0.111
-  if exists("*shellescape")
-   if a:isfilt
-    let qnameq= shellescape(a:name,1)
+" tar#Vimuntar: installs a tarball in the user's .vim / vimfiles directory {{{2
+fun! tar#Vimuntar(...)
+"  call Dfunc("tar#Vimuntar() a:0=".a:0." a:1<".(exists("a:1")? a:1 : "-n/a-").">")
+  let tarball = expand("%")
+"  call Decho("tarball<".tarball.">")
+  let tarbase = substitute(tarball,'\..*$','','')
+"  call Decho("tarbase<".tarbase.">")
+  let tarhome = expand("%:p")
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   let tarhome= substitute(tarhome,'\\','/','g')
+  endif
+  let tarhome= substitute(tarhome,'/[^/]*$','','')
+"  call Decho("tarhome<".tarhome.">")
+  let tartail = expand("%:t")
+"  call Decho("tartail<".tartail.">")
+  let curdir  = getcwd()
+"  call Decho("curdir <".curdir.">")
+  " set up vimhome
+  if a:0 > 0 && a:1 != ""
+   let vimhome= a:1
+  else
+   let vimhome= vimball#VimballHome()
+  endif
+"  call Decho("vimhome<".vimhome.">")
+
+"  call Decho("curdir<".curdir."> vimhome<".vimhome.">")
+  if simplify(curdir) != simplify(vimhome)
+   " copy (possibly compressed) tarball to .vim/vimfiles
+"   call Decho(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
+   call system(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
+"   call Decho("exe cd ".fnameescape(vimhome))
+   exe "cd ".fnameescape(vimhome)
+  endif
+"  call Decho("getcwd<".getcwd().">")
+
+  " if necessary, decompress the tarball; then, extract it
+  if tartail =~ '\.tgz'
+   if executable("gunzip")
+    silent exe "!gunzip ".shellescape(tartail)
+   elseif executable("gzip")
+    silent exe "!gzip -d ".shellescape(tartail)
    else
-    let qnameq= shellescape(a:name)
+    echoerr "unable to decompress<".tartail."> on this sytem"
+    if simplify(curdir) != simplify(tarhome)
+     " remove decompressed tarball, restore directory
+"     call Decho("delete(".tartail.".tar)")
+     call delete(tartail.".tar")
+"     call Decho("exe cd ".fnameescape(curdir))
+     exe "cd ".fnameescape(curdir)
+    endif
+"    call Dret("tar#Vimuntar")
+    return
    endif
   else
-   let qnameq= g:tar_shq . a:name . g:tar_shq
+   call vimball#Decompress(tartail,0)
   endif
-  return qnameq
+  let extractcmd= netrw#WinPath(g:tar_extractcmd)
+"  call Decho("system(".extractcmd." ".shellescape(tarbase.".tar").")")
+  call system(extractcmd." ".shellescape(tarbase.".tar"))
+
+  " set up help
+  if filereadable("doc/".tarbase.".txt")
+"   call Decho("exe helptags ".getcwd()."/doc")
+   exe "helptags ".getcwd()."/doc"
+  endif
+
+  if simplify(tarhome) != simplify(vimhome)
+   " remove decompressed tarball, restore directory
+   call delete(vimhome."/".tarbase.".tar")
+   exe "cd ".fnameescape(curdir)
+  endif
+
+"  call Dret("tar#Vimuntar")
 endfun
 
-" ---------------------------------------------------------------------
+" =====================================================================
 " Modelines And Restoration: {{{1
 let &cpo= s:keepcpo
 unlet s:keepcpo
diff --git a/runtime/autoload/vimball.vim b/runtime/autoload/vimball.vim
index 4f6292b..b97c3a5 100644
--- a/runtime/autoload/vimball.vim
+++ b/runtime/autoload/vimball.vim
@@ -1,9 +1,9 @@
 " vimball.vim : construct a file containing both paths and files
 " Author:	Charles E. Campbell, Jr.
-" Date:		Jul 30, 2008
-" Version:	29
+" Date:		Dec 28, 2009
+" Version:	30
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
-" Copyright: (c) 2004-2008 by Charles E. Campbell, Jr.
+" Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
 "            No warranty, express or implied.
@@ -11,11 +11,17 @@
 
 " ---------------------------------------------------------------------
 "  Load Once: {{{1
-if &cp || exists("g:loaded_vimball") || v:version < 700
+if &cp || exists("g:loaded_vimball")
  finish
 endif
-let s:keepcpo        = &cpo
-let g:loaded_vimball = "v29"
+let g:loaded_vimball = "v30"
+if v:version < 702
+ echohl WarningMsg
+ echo "***warning*** this version of vimball needs vim 7.2"
+ echohl Normal
+ finish
+endif
+let s:keepcpo= &cpo
 set cpo&vim
 "DechoTabOn
 
@@ -52,30 +58,6 @@
    call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined")
   endif
  endif
-
- " set up shell quoting character
- if exists("g:vimball_shq") && !exists("g:netrw_shq")
-  let g:netrw_shq= g:vimball_shq
- endif
- if !exists("g:netrw_shq")
-  if exists("&shq") && &shq != ""
-   let g:netrw_shq= &shq
-  elseif has("win32") || has("win95") || has("win64") || has("win16")
-   if g:netrw_cygwin
-    let g:netrw_shq= "'"
-   else
-    let g:netrw_shq= '"'
-   endif
-  else
-   let g:netrw_shq= "'"
-  endif
-" call Decho("g:netrw_shq<".g:netrw_shq.">")
- endif
-
- " set up escape string (used to protect paths)
- if !exists("g:vimball_path_escape")
-  let g:vimball_path_escape= ' ;#%'
- endif
 endif
 
 " =====================================================================
@@ -106,8 +88,8 @@
    let vbname= vbname.'.vba'
   endif
 "  call Decho("vbname<".vbname.">")
-  if a:1 =~ '[\/]'
-   call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes")
+  if !a:writelevel && a:1 =~ '[\/]'
+   call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes; use ! to insist")
 "   call Dret("MkVimball : vimball name<".a:1."> should not include slashes")
    return
   endif
@@ -125,7 +107,7 @@
    let home= expand(a:2)
   else
    " use first existing directory from rtp
-   let home= s:VimballHome()
+   let home= vimball#VimballHome()
   endif
 
   " save current directory
@@ -218,7 +200,7 @@
    return
   endif
 
-  if getline(1) !~ '^" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.$'
+  if getline(1) !~ '^" Vimball Archiver'
    echoerr "(Vimball) The current file does not appear to be a Vimball!"
 "   call Dret("vimball#Vimball")
    return
@@ -240,7 +222,7 @@
   if a:0 > 0
    let home= expand(a:1)
   else
-   let home= s:VimballHome()
+   let home= vimball#VimballHome()
   endif
 "  call Decho("home<".home.">")
 
@@ -272,7 +254,9 @@
   while 1 < linenr && linenr < line("$")
    let fname   = substitute(getline(linenr),'\t\[\[\[1$','','')
    let fname   = substitute(fname,'\\','/','g')
-   let fsize   = getline(linenr+1)+0
+"   let fsize   = getline(linenr+1)+0
+   let fsize   = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
+   let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\+\)$','\1','')
    let filecnt = filecnt + 1
 "   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt)
 
@@ -307,7 +291,7 @@
      if !isdirectory(dirname)
 "      call Decho("making <".dirname.">")
       if exists("g:vimball_mkdir")
-	   call system(g:vimball_mkdir." ".s:Escape(dirname))
+	   call system(g:vimball_mkdir." ".shellescape(dirname))
       else
        call mkdir(dirname)
       endif
@@ -337,9 +321,13 @@
    if a:really
     let fnamepath= home."/".fname
 "    call Decho("exe w! ".fnameescape(fnamepath))
-	exe "silent w! ".fnameescape(fnamepath)
-    echo "wrote ".fnamepath
-	call s:RecordInVar(home,"call delete('".fnameescape(fnamepath)."')")
+	if fenc != ""
+	 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
+	else
+	 exe "silent w! ".fnameescape(fnamepath)
+	endif
+	echo "wrote ".fnameescape(fnamepath)
+	call s:RecordInVar(home,"call delete('".fnamepath."')")
    endif
 
    " return to tab with vimball
@@ -418,7 +406,7 @@
   if a:0 >= 2
    let home= expand(a:2)
   else
-   let home= s:VimballHome()
+   let home= vimball#VimballHome()
   endif
   let curdir = getcwd()
 "  call Decho("home   <".home.">")
@@ -432,19 +420,20 @@
    keepalt keepjumps 1split 
    silent! keepalt keepjumps e .VimballRecord
    let keepsrch= @/
-"   call Decho("search for ^".curfile.".vba:")
-"   call Decho("search for ^".curfile."[-0-9.]*.vba:")
-   if search('^'.curfile.": ".'cw')
+"   call Decho('search for ^\M'.curfile.'.\m: ')
+"   call Decho('search for ^\M'.curfile.'.\mvba: ')
+"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.vba: ')
+   if search('^\M'.curfile."\m: ".'cw')
 	let foundit= 1
-   elseif search('^'.curfile.".vba: ",'cw')
+   elseif search('^\M'.curfile.".\mvba: ",'cw')
 	let foundit= 1
-   elseif search('^'.curfile.'[-0-9.]*.vba: ','cw')
+   elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
 	let foundit= 1
    else
     let foundit = 0
    endif
    if foundit
-	let exestring  = substitute(getline("."),'^'.curfile.'\S\{-}\.vba: ','','')
+	let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
     let s:VBRstring= substitute(exestring,'call delete(','','g')
     let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
 "	call Decho("exe ".exestring)
@@ -472,62 +461,62 @@
 
 " ---------------------------------------------------------------------
 " vimball#Decompress: attempts to automatically decompress vimballs {{{2
-fun! vimball#Decompress(fname)
-"  call Dfunc("Decompress(fname<".a:fname.">)")
+fun! vimball#Decompress(fname,...)
+"  call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0)
 
   " decompression:
   if     expand("%") =~ '.*\.gz'  && executable("gunzip")
    " handle *.gz with gunzip
-   silent exe "!gunzip ".s:Escape(a:fname)
+   silent exe "!gunzip ".shellescape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
    endif
    let fname= substitute(a:fname,'\.gz$','','')
    exe "e ".escape(fname,' \')
-   call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+   if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
 
   elseif expand("%") =~ '.*\.gz' && executable("gzip")
    " handle *.gz with gzip -d
-   silent exe "!gzip -d ".s:Escape(a:fname)
+   silent exe "!gzip -d ".shellescape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
    endif
    let fname= substitute(a:fname,'\.gz$','','')
    exe "e ".escape(fname,' \')
-   call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+   if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
 
   elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
    " handle *.bz2 with bunzip2
-   silent exe "!bunzip2 ".s:Escape(a:fname)
+   silent exe "!bunzip2 ".shellescape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
    endif
    let fname= substitute(a:fname,'\.bz2$','','')
    exe "e ".escape(fname,' \')
-   call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+   if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
 
   elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
    " handle *.bz2 with bzip2 -d
-   silent exe "!bzip2 -d ".s:Escape(a:fname)
+   silent exe "!bzip2 -d ".shellescape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
    endif
    let fname= substitute(a:fname,'\.bz2$','','')
    exe "e ".escape(fname,' \')
-   call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+   if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
 
   elseif expand("%") =~ '.*\.zip' && executable("unzip")
    " handle *.zip with unzip
-   silent exe "!unzip ".s:Escape(a:fname)
+   silent exe "!unzip ".shellescape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
    endif
    let fname= substitute(a:fname,'\.zip$','','')
    exe "e ".escape(fname,' \')
-   call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+   if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
   endif
 
-  set noma bt=nofile fmr=[[[,]]] fdm=marker
+  if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif
 
 "  call Dret("Decompress")
 endfun
@@ -536,20 +525,21 @@
 " vimball#ShowMesg: {{{2
 fun! vimball#ShowMesg(level,msg)
 "  call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)")
+
   let rulerkeep   = &ruler
   let showcmdkeep = &showcmd
   set noruler noshowcmd
   redraw!
 
   if &fo =~ '[ta]'
-   echomsg "***vimball*** " a:msg
+   echomsg "***vimball*** ".a:msg
   else
    if a:level == s:WARNING || a:level == s:USAGE
     echohl WarningMsg
    elseif a:level == s:ERROR
     echohl Error
    endif
-   echomsg "***vimball*** " a:msg
+   echomsg "***vimball*** ".a:msg
    echohl None
   endif
 
@@ -646,9 +636,9 @@
 endfun
 
 " ---------------------------------------------------------------------
-" s:VimballHome: determine/get home directory path (usually from rtp) {{{2
-fun! s:VimballHome()
-"  call Dfunc("VimballHome()")
+" vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2
+fun! vimball#VimballHome()
+"  call Dfunc("vimball#VimballHome()")
   if exists("g:vimball_home")
    let home= g:vimball_home
   else
@@ -674,14 +664,14 @@
   if !isdirectory(home)
    if exists("g:vimball_mkdir")
 "	call Decho("home<".home."> isn't a directory -- making it now with g:vimball_mkdir<".g:vimball_mkdir.">")
-"    call Decho("system(".g:vimball_mkdir." ".s:Escape(home).")")
-    call system(g:vimball_mkdir." ".s:Escape(home))
+"    call Decho("system(".g:vimball_mkdir." ".shellescape(home).")")
+    call system(g:vimball_mkdir." ".shellescape(home))
    else
 "	call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
     call mkdir(home)
    endif
   endif
-"  call Dret("VimballHome <".home.">")
+"  call Dret("vimball#VimballHome <".home.">")
   return home
 endfun
 
@@ -743,20 +733,5 @@
 endfun
 
 " ---------------------------------------------------------------------
-" s:Escape: {{{2
-fun s:Escape(name)
-  " shellescape() was added by patch 7.0.111
-  if exists("*shellescape")
-    return shellescape(a:name)
-  endif
-  return g:netrw_shq . a:name . g:netrw_shq
-endfun
-
-" ---------------------------------------------------------------------
-"  Restore:
-let &cpo= s:keepcpo
-unlet s:keepcpo
-
-" ---------------------------------------------------------------------
 " Modelines: {{{1
 " vim: fdm=marker
diff --git a/runtime/colors/desert.vim b/runtime/colors/desert.vim
index cdde62b..7166220 100644
--- a/runtime/colors/desert.vim
+++ b/runtime/colors/desert.vim
@@ -1,9 +1,9 @@
 " Vim color file
 " Maintainer:	Hans Fugal <hans@fugal.net>
-" Last Change:	$Date$
-" Last Change:	$Date$
+" Last Change:	$Date: 2004/06/13 19:30:30 $
+" Last Change:	$Date: 2004/06/13 19:30:30 $
 " URL:		http://hans.fugal.net/vim/colors/desert.vim
-" Version:	$Id$
+" Version:	$Id: desert.vim,v 1.1 2004/06/13 19:30:30 vimboss Exp $
 
 " cool help screens
 " :he group-name
diff --git a/runtime/compiler/decada.vim b/runtime/compiler/decada.vim
index 4c777fe..8e267ec 100644
--- a/runtime/compiler/decada.vim
+++ b/runtime/compiler/decada.vim
@@ -1,13 +1,13 @@
 "------------------------------------------------------------------------------
 "  Description: Vim Ada/Dec Ada compiler file
 "     Language: Ada (Dec Ada)
-"          $Id$
+"          $Id: decada.vim 887 2008-07-08 14:29:01Z krischik $
 "    Copyright: Copyright (C) 2006 Martin Krischik
 "   Maintainer:	Martin Krischik <krischik@users.sourceforge.net>
-"      $Author$
-"        $Date$
+"      $Author: krischik $
+"        $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/compiler/decada.vim $
 "      History: 21.07.2006 MK New Dec Ada
 "               15.10.2006 MK Bram's suggestion for runtime integration
diff --git a/runtime/compiler/eruby.vim b/runtime/compiler/eruby.vim
index 44194f5..1a68136 100644
--- a/runtime/compiler/eruby.vim
+++ b/runtime/compiler/eruby.vim
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Language:		eRuby
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Info:			$Id$
+" Info:			$Id: eruby.vim,v 1.7 2008/06/29 04:18:42 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/compiler/fortran_g77.vim b/runtime/compiler/fortran_g77.vim
index 94018e7..744ce6a 100644
--- a/runtime/compiler/fortran_g77.vim
+++ b/runtime/compiler/fortran_g77.vim
@@ -1,8 +1,8 @@
 " Vim compiler file
 " Compiler:     g77 (GNU Fortran)
 " Maintainer:   Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-" Last Change:  $Date$
-" $Revision$
+" Last Change:  $Date: 2004/06/13 18:17:36 $
+" $Revision: 1.1 $
 
 if exists("current_compiler")
   finish
diff --git a/runtime/compiler/gcc.vim b/runtime/compiler/gcc.vim
index a62415f..75c596c 100644
--- a/runtime/compiler/gcc.vim
+++ b/runtime/compiler/gcc.vim
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Compiler:         GNU C Compiler
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-12-20
+" Latest Revision:  2009-05-01
 
 if exists("current_compiler")
   finish
@@ -12,10 +12,13 @@
 set cpo-=C
 
 CompilerSet errorformat=
+      \%*[^\"]\"%f\"%*\\D%l:%c:\ %m,
       \%*[^\"]\"%f\"%*\\D%l:\ %m,
+      \\"%f\"%*\\D%l:%c:\ %m,
       \\"%f\"%*\\D%l:\ %m,
       \%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
       \%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
+      \%f:%l:%c:\ %m,
       \%f:%l:\ %m,
       \\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
       \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
diff --git a/runtime/compiler/gnat.vim b/runtime/compiler/gnat.vim
index ad1697a..d7ec55b 100644
--- a/runtime/compiler/gnat.vim
+++ b/runtime/compiler/gnat.vim
@@ -1,14 +1,14 @@
 "------------------------------------------------------------------------------
 "  Description: Vim Ada/GNAT compiler file
 "     Language: Ada (GNAT)
-"          $Id$
+"          $Id: gnat.vim 887 2008-07-08 14:29:01Z krischik $
 "    Copyright: Copyright (C) 2006 Martin Krischik
 "   Maintainer:	Martin Krischi <krischik@users.sourceforge.net>k
 "		Ned Okie <nokie@radford.edu>
-"      $Author$
-"        $Date$
+"      $Author: krischik $
+"        $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/compiler/gnat.vim $
 "      History: 24.05.2006 MK Unified Headers
 "		16.07.2006 MK Ada-Mode as vim-ball
diff --git a/runtime/compiler/jikes.vim b/runtime/compiler/jikes.vim
index 8566969..5125128 100644
--- a/runtime/compiler/jikes.vim
+++ b/runtime/compiler/jikes.vim
@@ -1,8 +1,8 @@
 " Vim Compiler File
 " Compiler:	Jikes
 " Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Change:	2004 Mar 27
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/compiler
+" Last Change:	20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/compiler
 
 if exists("current_compiler")
   finish
diff --git a/runtime/compiler/rspec.vim b/runtime/compiler/rspec.vim
index 19c410f..c185bc7 100644
--- a/runtime/compiler/rspec.vim
+++ b/runtime/compiler/rspec.vim
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Language:		RSpec
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.info>
-" Info:			$Id$
+" Info:			$Id: rspec.vim,v 1.2 2008/06/29 04:18:42 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/compiler/ruby.vim b/runtime/compiler/ruby.vim
index 9607f75..ff3b3c7 100644
--- a/runtime/compiler/ruby.vim
+++ b/runtime/compiler/ruby.vim
@@ -2,7 +2,7 @@
 " Language:		Ruby
 " Function:		Syntax check and/or error reporting
 " Maintainer:		Tim Hammerquist <timh at rubyforge.org>
-" Info:			$Id$
+" Info:			$Id: ruby.vim,v 1.13 2008/06/29 04:18:43 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/compiler/rubyunit.vim b/runtime/compiler/rubyunit.vim
index 74a6f01..dd5d4cb 100644
--- a/runtime/compiler/rubyunit.vim
+++ b/runtime/compiler/rubyunit.vim
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Language:		Test::Unit - Ruby Unit Testing Framework
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Info:			$Id$
+" Info:			$Id: rubyunit.vim,v 1.12 2008/06/29 04:18:43 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/compiler/splint.vim b/runtime/compiler/splint.vim
index 5ba5e03..6239ca7 100644
--- a/runtime/compiler/splint.vim
+++ b/runtime/compiler/splint.vim
@@ -3,7 +3,7 @@
 " Maintainer:   Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
 " Splint Home:	http://www.splint.org/
 " Last Change:  2005 Apr 21
-" $Revision$
+" $Revision: 1.3 $
 
 if exists("current_compiler")
   finish
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index c34510e..5665cc2 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2008 Aug 03
+" Last Change:	2009 Dec 24
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -110,12 +110,15 @@
 au BufNewFile,BufRead proftpd.conf*		call s:StarSetf('apachestyle')
 
 " Apache config file
-au BufNewFile,BufRead .htaccess			 setf apache
-au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf* call s:StarSetf('apache')
+au BufNewFile,BufRead .htaccess,/etc/httpd/*.conf		 setf apache
+au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf*,/etc/httpd/conf.d/*.conf* call s:StarSetf('apache')
 
 " XA65 MOS6510 cross assembler
 au BufNewFile,BufRead *.a65			setf a65
 
+" Applescript
+au BufNewFile,BufRead *.scpt			setf applescript
+
 " Applix ELF
 au BufNewFile,BufRead *.am
 	\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
@@ -350,10 +353,9 @@
 	\ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif
 
 " C++
+au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp
 if has("fname_case")
-  au BufNewFile,BufRead *.cxx,*.c++,*.C,*.H,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
-else
-  au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.moc,*.tcc,*.inl setf cpp
+  au BufNewFile,BufRead *.C,*.H setf cpp
 endif
 
 " .h files can be C, Ch C++, ObjC or ObjC++.
@@ -364,9 +366,9 @@
 func! s:FTheader()
   if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
     setf objc
-  elseif exists("c_syntax_for_h")
+  elseif exists("g:c_syntax_for_h")
     setf c
-  elseif exists("ch_syntax_for_h")
+  elseif exists("g:ch_syntax_for_h")
     setf ch
   else
     setf cpp
@@ -669,8 +671,9 @@
 " Fetchmail RC file
 au BufNewFile,BufRead .fetchmailrc		setf fetchmail
 
-" FlexWiki
-au BufNewFile,BufRead *.wiki			setf flexwiki
+" FlexWiki - disabled, because it has side effects when a .wiki file
+" is not actually FlexWiki
+"au BufNewFile,BufRead *.wiki			setf flexwiki
 
 " Focus Executable
 au BufNewFile,BufRead *.fex,*.focexec		setf focexec
@@ -704,12 +707,12 @@
 au BufNewFile,BufRead *.mo,*.gdmo		setf gdmo
 
 " Gedcom
-au BufNewFile,BufRead *.ged			setf gedcom
+au BufNewFile,BufRead *.ged,lltxxxxx.txt	setf gedcom
 
 " Git
-autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG    setf gitcommit
-autocmd BufNewFile,BufRead *.git/config,.gitconfig setf gitconfig
-autocmd BufNewFile,BufRead git-rebase-todo         setf gitrebase
+autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG setf gitcommit
+autocmd BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
+autocmd BufNewFile,BufRead git-rebase-todo      setf gitrebase
 autocmd BufNewFile,BufRead .msg.[0-9]*
       \ if getline(1) =~ '^From.*# This line is ignored.$' |
       \   setf gitsendemail |
@@ -896,7 +899,7 @@
 au BufNewFile,BufRead *.jj,*.jjt		setf javacc
 
 " JavaScript, ECMAScript
-au BufNewFile,BufRead *.js,*.javascript,*.es	setf javascript
+au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx	setf javascript
 
 " Java Server Pages
 au BufNewFile,BufRead *.jsp			setf jsp
@@ -1043,7 +1046,7 @@
   let n = 1
   while n < 10
     let line = getline(n)
-    if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)'
+    if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\|//\)'
       setf objc
       return
     endif
@@ -1070,6 +1073,9 @@
 " Maya Extension Language
 au BufNewFile,BufRead *.mel			setf mel
 
+" Mercurial config (looks like generic config file)
+au BufNewFile,BufRead *.hgrc,*hgrc		setf cfg
+
 " Messages
 au BufNewFile,BufRead /var/log/messages,/var/log/messages.*[0-9]  setf messages
 
@@ -1260,7 +1266,7 @@
 else
   au BufNewFile,BufRead *.pl			call s:FTpl()
 endif
-au BufNewFile,BufRead *.plx			setf perl
+au BufNewFile,BufRead *.plx,*.al		setf perl
 
 func! s:FTpl()
   if exists("g:filetype_pl")
@@ -1552,6 +1558,7 @@
 
 " Remind
 au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
+au BufNewFile,BufRead *.remind,*.rem		setf remind
 
 " Resolv.conf
 au BufNewFile,BufRead resolv.conf		setf resolv
@@ -1586,7 +1593,7 @@
 " Rantfile and Rakefile is like Ruby
 au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake	setf ruby
 
-" S-lang (or shader language!)
+" S-lang (or shader language, or SmallLisp)
 au BufNewFile,BufRead *.sl			setf slang
 
 " Samba config
@@ -1685,7 +1692,15 @@
   if expand("<amatch>") =~ g:ft_ignore_pat
     return
   endif
-  if a:name =~ '\<ksh\>'
+  if a:name =~ '\<csh\>'
+    " Some .sh scripts contain #!/bin/csh.
+    call SetFileTypeShell("csh")
+    return
+  elseif a:name =~ '\<tcsh\>'
+    " Some .sh scripts contain #!/bin/tcsh.
+    call SetFileTypeShell("tcsh")
+    return
+  elseif a:name =~ '\<ksh\>'
     let b:is_kornshell = 1
     if exists("b:is_bash")
       unlet b:is_bash
@@ -1823,10 +1838,15 @@
 
 let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
 func! s:FTRules()
-  if expand('<amatch>:p') =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$'
+  let path = expand('<amatch>:p')
+  if path =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$'
     setf udevrules
     return
   endif
+  if path =~ '^/etc/ufw/'
+    setf conf  " Better than hog
+    return
+  endif
   try
     let config_lines = readfile('/etc/udev/udev.conf')
   catch /^Vim\%((\a\+)\)\=:E484/
@@ -1909,6 +1929,9 @@
 " Sysctl
 au BufNewFile,BufRead /etc/sysctl.conf		setf sysctl
 
+" Synopsys Design Constraints
+au BufNewFile,BufRead *.sdc			setf sdc
+
 " Sudoers
 au BufNewFile,BufRead /etc/sudoers,sudoers.tmp	setf sudoers
 
@@ -1944,6 +1967,10 @@
 " TAK
 au BufNewFile,BufRead *.tak			setf tak
 
+" Task
+au BufRead,BufNewFile {pending,completed,undo}.data  setf taskdata
+au BufRead,BufNewFile *.task                    setf taskedit
+
 " Tcl (JACL too)
 au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl	setf tcl
 
@@ -2079,8 +2106,13 @@
 " Viminfo file
 au BufNewFile,BufRead .viminfo,_viminfo		setf viminfo
 
-" Virata Config Script File
-au BufRead,BufNewFile *.hw,*.module,*.pkg	setf virata
+" Virata Config Script File or Drupal module
+au BufRead,BufNewFile *.hw,*.module,*.pkg
+	\ if getline(1) =~ '<?php' |
+	\   setf php |
+	\ else |
+	\   setf virata |
+	\ endif
 
 " Visual Basic (also uses *.bas) or FORM
 au BufNewFile,BufRead *.frm			call s:FTVB("form")
@@ -2325,6 +2357,9 @@
 	\|  let b:fvwm_version = 2 | call s:StarSetf('fvwm')
 	\|endif
 
+" Gedcom
+au BufNewFile,BufRead /tmp/lltmp*		call s:StarSetf('gedcom')
+
 " GTK RC
 au BufNewFile,BufRead .gtkrc*,gtkrc*		call s:StarSetf('gtkrc')
 
diff --git a/runtime/ftplugin/abaqus.vim b/runtime/ftplugin/abaqus.vim
index 17985b3..873b9bf 100644
--- a/runtime/ftplugin/abaqus.vim
+++ b/runtime/ftplugin/abaqus.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     Abaqus finite element input file (www.abaqus.com)
 " Maintainer:   Carl Osterwisch <osterwischc@asme.org>
-" Last Change:  2004 Jul 06
+" Last Change:  2008 Oct 5
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin") | finish | endif
@@ -13,13 +13,6 @@
 let s:cpo_save = &cpoptions
 set cpoptions&vim
 
-" Folding
-if version >= 600
-    " Fold all lines that do not begin with *
-    setlocal foldexpr=getline(v:lnum)[0]!=\"\*\"
-    setlocal foldmethod=expr
-endif
-
 " Set the format of the include file specification for Abaqus
 " Used in :check gf ^wf [i and other commands
 setlocal include=\\<\\cINPUT\\s*=
@@ -42,29 +35,43 @@
 " Abaqus keywords and identifiers may include a - character
 setlocal iskeyword+=-
 
+let b:undo_ftplugin = "setlocal include< includeexpr< isfname<"
+    \ . " comments< commentstring< define< iskeyword<"
+
+if has("folding")
+    " Fold all lines that do not begin with *
+    setlocal foldexpr=getline(v:lnum)[0]!=\"\*\"
+    setlocal foldmethod=expr
+    let b:undo_ftplugin .= " foldexpr< foldmethod<"
+endif
+
 " Set the file browse filter (currently only supported under Win32 gui)
 if has("gui_win32") && !exists("b:browsefilter")
     let b:browsefilter = "Abaqus Input Files (*.inp *.inc)\t*.inp;*.inc\n" .
     \ "Abaqus Results (*.dat)\t*.dat\n" .
     \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
     \ "All Files (*.*)\t*.*\n"
+    let b:undo_ftplugin .= "|unlet b:browsefilter"
 endif
 
-" Define keys used to move [count] sections backward or forward.
-" TODO: Make this do something intelligent in visual mode.
-nnoremap <silent> <buffer> [[ :call <SID>Abaqus_Jump('?^\*\a?')<CR>
-nnoremap <silent> <buffer> ]] :call <SID>Abaqus_Jump('/^\*\a/')<CR>
-function! <SID>Abaqus_Jump(motion) range
-    let s:count = v:count1
-    mark '
-    while s:count > 0
-        silent! execute a:motion
-        let s:count = s:count - 1
-    endwhile
-endfunction
+" Define patterns for the matchit plugin
+if exists("loaded_matchit") && !exists("b:match_words")
+    let b:match_ignorecase = 1
+    let b:match_words = 
+    \ '\*part:\*end\s*part,' .
+    \ '\*assembly:\*end\s*assembly,' .
+    \ '\*instance:\*end\s*instance,' .
+    \ '\*step:\*end\s*step'
+    let b:undo_ftplugin .= "|unlet b:match_ignorecase b:match_words"
+endif
+
+" Define keys used to move [count] keywords backward or forward.
+noremap <silent><buffer> [[ ?^\*\a<CR>:nohlsearch<CR>
+noremap <silent><buffer> ]] /^\*\a<CR>:nohlsearch<CR>
 
 " Define key to toggle commenting of the current line or range
-noremap <silent> <buffer> <m-c> :call <SID>Abaqus_ToggleComment()<CR>j
+noremap <silent><buffer> <LocalLeader><LocalLeader> 
+    \ :call <SID>Abaqus_ToggleComment()<CR>j
 function! <SID>Abaqus_ToggleComment() range
     if strpart(getline(a:firstline), 0, 2) == "**"
         " Un-comment all lines in range
@@ -75,5 +82,8 @@
     endif
 endfunction
 
+let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]"
+    \ . "|unmap <buffer> <LocalLeader><LocalLeader>"
+
 " Restore saved compatibility options
 let &cpoptions = s:cpo_save
diff --git a/runtime/ftplugin/ada.vim b/runtime/ftplugin/ada.vim
index 045645d..091181f 100644
--- a/runtime/ftplugin/ada.vim
+++ b/runtime/ftplugin/ada.vim
@@ -1,14 +1,14 @@
 "------------------------------------------------------------------------------
 "  Description: Perform Ada specific completion & tagging.
 "     Language: Ada (2005)
-"	   $Id$
+"	   $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
 "   Maintainer: Martin Krischik <krischik@users.sourceforge.net>
 "		Taylor Venable <taylor@metasyntax.net>
 "		Neil Bird <neil@fnxweb.com>
-"      $Author$
-"	 $Date$
+"      $Author: krischik $
+"	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $
 "      History: 24.05.2006 MK Unified Headers
 "		26.05.2006 MK ' should not be in iskeyword.
diff --git a/runtime/ftplugin/ant.vim b/runtime/ftplugin/ant.vim
index d45ef3b..648fca1 100644
--- a/runtime/ftplugin/ant.vim
+++ b/runtime/ftplugin/ant.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	ant
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 29
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/aspvbs.vim b/runtime/ftplugin/aspvbs.vim
index e3bc709..2b841ef 100644
--- a/runtime/ftplugin/aspvbs.vim
+++ b/runtime/ftplugin/aspvbs.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	aspvbs
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2004 Jun 28
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/bst.vim b/runtime/ftplugin/bst.vim
index 973e342..5e65aac 100644
--- a/runtime/ftplugin/bst.vim
+++ b/runtime/ftplugin/bst.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	bst
 " Author:	Tim Pope <vimNOSPAM@tpope.info>
-" $Id$
+" $Id: bst.vim,v 1.1 2007/05/05 17:37:57 vimboss Exp $
 
 if exists("b:did_ftplugin")
     finish
diff --git a/runtime/ftplugin/changelog.vim b/runtime/ftplugin/changelog.vim
index 924d35d..30cd7b5 100644
--- a/runtime/ftplugin/changelog.vim
+++ b/runtime/ftplugin/changelog.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:         generic Changelog file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2007-05-21
+" Latest Revision:  2009-05-25
 " Variables:
 "   g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
 "       description: the timeformat used in ChangeLog entries.
@@ -46,73 +46,78 @@
     endif
   endif
 
-  " Try to figure out a reasonable username of the form:
-  "   Full Name <user@host>.
-  if !exists('g:changelog_username')
-    if exists('$EMAIL') && $EMAIL != ''
-      let g:changelog_username = $EMAIL
-    elseif exists('$EMAIL_ADDRESS') && $EMAIL_ADDRESS != ''
-      " This is some Debian junk if I remember correctly.
-      let g:changelog_username = $EMAIL_ADDRESS
-    else
-      " Get the users login name.
-      let login = system('whoami')
-      if v:shell_error
-        let login = 'unknown'
-      else
-        let newline = stridx(login, "\n")
-        if newline != -1
-          let login = strpart(login, 0, newline)
-        endif
-      endif
-
-      " Try to get the full name from gecos field in /etc/passwd.
-      if filereadable('/etc/passwd')
-        for line in readfile('/etc/passwd')
-          if line =~ '^' . login
-            let name = substitute(line,'^\%([^:]*:\)\{4}\([^:]*\):.*$','\1','')
-            " Only keep stuff before the first comma.
-            let comma = stridx(name, ',')
-            if comma != -1
-              let name = strpart(name, 0, comma)
-            endif
-            " And substitute & in the real name with the login of our user.
-            let amp = stridx(name, '&')
-            if amp != -1
-              let name = strpart(name, 0, amp) . toupper(login[0]) .
-                       \ strpart(login, 1) . strpart(name, amp + 1)
-            endif
-          endif
-        endfor
-      endif
-
-      " If we haven't found a name, try to gather it from other places.
-      if !exists('name')
-        " Maybe the environment has something of interest.
-        if exists("$NAME")
-          let name = $NAME
-        else
-          " No? well, use the login name and capitalize first
-          " character.
-          let name = toupper(login[0]) . strpart(login, 1)
-        endif
-      endif
-
-      " Get our hostname.
-      let hostname = system('hostname')
-      if v:shell_error
-        let hostname = 'localhost'
-      else
-        let newline = stridx(hostname, "\n")
-        if newline != -1
-          let hostname = strpart(hostname, 0, newline)
-        endif
-      endif
-
-      " And finally set the username.
-      let g:changelog_username = name . '  <' . login . '@' . hostname . '>'
+  function! s:username()
+    if exists('g:changelog_username')
+      return g:changelog_username
+    elseif $EMAIL != ""
+      return $EMAIL
+    elseif $EMAIL_ADDRESS != ""
+      return $EMAIL_ADDRESS
     endif
-  endif
+    
+    let login = s:login()
+    return printf('%s <%s@%s>', s:name(login), login, s:hostname())
+  endfunction
+
+  function! s:login()
+    return s:trimmed_system_with_default('whoami', 'unknown')
+  endfunction
+
+  function! s:trimmed_system_with_default(command, default)
+    return s:first_line(s:system_with_default(a:command, a:default))
+  endfunction
+
+  function! s:system_with_default(command, default)
+    let output = system(a:command)
+    if v:shell_error
+      return default
+    endif
+    return output
+  endfunction
+
+  function! s:first_line(string)
+    return substitute(a:string, '\n.*$', "", "")
+  endfunction
+
+  function! s:name(login)
+    for name in [s:gecos_name(a:login), $NAME, s:capitalize(a:login)]
+      if name != ""
+        return name
+      endif
+    endfor
+  endfunction
+
+  function! s:gecos_name(login)
+    for line in s:try_reading_file('/etc/passwd')
+      if line =~ '^' . a:login . ':'
+        return substitute(s:passwd_field(line, 5), '&', s:capitalize(a:login), "")
+      endif
+    endfor
+    return ""
+  endfunction
+
+  function! s:try_reading_file(path)
+    try
+      return readfile(a:path)
+    endtry
+    return []
+  endfunction
+
+  function! s:passwd_field(line, field)
+    let fields = split(a:line, ':', 1)
+    if len(fields) < field
+      return ""
+    endif
+    return fields[field - 1]
+  endfunction
+
+  function! s:capitalize(word)
+    return toupper(a:word[0]) . strpart(a:word, 1)
+  endfunction
+
+  function! s:hostname()
+    return s:trimmed_system_with_default('hostname', 'localhost')
+  endfunction
 
   " Format used for new date entries.
   if !exists('g:changelog_new_date_format')
@@ -178,7 +183,7 @@
       " Ok, now we look for the end of the date entry, and add an entry.
       call cursor(nextnonblank(line('.') + 1), 1)
       if search(g:changelog_date_end_entry_search, 'W') > 0
-        let p = line('.') - 1
+	let p = (line('.') == line('$')) ? line('.') : line('.') - 1
       else
         let p = line('.')
       endif
@@ -217,7 +222,7 @@
   endfunction
 
   if exists(":NewChangelogEntry") != 2
-    map <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR>
+    noremap <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR>
     command! -nargs=0 NewChangelogEntry call s:new_changelog_entry()
   endif
 
@@ -236,14 +241,48 @@
   let &cpo = s:cpo_save
   unlet s:cpo_save
 else
+  let s:cpo_save = &cpo
+  set cpo&vim
+
   " Add the Changelog opening mapping
-  nmap <silent> <Leader>o :call <SID>open_changelog()<CR>
+  nnoremap <silent> <Leader>o :call <SID>open_changelog()<CR>
 
   function! s:open_changelog()
-    if !filereadable('ChangeLog')
+    let path = expand('%:p:h')
+    if exists('b:changelog_path')
+      let changelog = b:changelog_path
+    else
+      if exists('b:changelog_name')
+        let name = b:changelog_name
+      else
+        let name = 'ChangeLog'
+      endif
+      while isdirectory(path)
+        let changelog = path . '/' . name
+        if filereadable(changelog)
+          break
+        endif
+        let parent = substitute(path, '/\+[^/]*$', "", "")
+        if path == parent
+          break
+        endif
+        let path = parent
+      endwhile
+    endif
+    if !filereadable(changelog)
       return
     endif
-    let buf = bufnr('ChangeLog')
+
+    if exists('b:changelog_entry_prefix')
+      let prefix = call(b:changelog_entry_prefix, [])
+    else
+      let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "") . ':'
+    endif
+    if !empty(prefix)
+      let prefix = ' ' . prefix
+    endif
+
+    let buf = bufnr(changelog)
     if buf != -1
       if bufwinnr(buf) != -1
         execute bufwinnr(buf) . 'wincmd w'
@@ -251,9 +290,12 @@
         execute 'sbuffer' buf
       endif
     else
-      split ChangeLog
+      execute 'split' fnameescape(changelog)
     endif
 
-    call s:new_changelog_entry()
+    call s:new_changelog_entry(prefix)
   endfunction
+
+  let &cpo = s:cpo_save
+  unlet s:cpo_save
 endif
diff --git a/runtime/ftplugin/cobol.vim b/runtime/ftplugin/cobol.vim
index 443ea68..203d734 100644
--- a/runtime/ftplugin/cobol.vim
+++ b/runtime/ftplugin/cobol.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	cobol
 " Author:	Tim Pope <vimNOSPAM@tpope.info>
-" $Id$
+" $Id: cobol.vim,v 1.1 2007/05/05 17:24:38 vimboss Exp $
 
 " Insert mode mappings: <C-T> <C-D> <Tab>
 " Normal mode mappings: < > << >> [[ ]] [] ][
diff --git a/runtime/ftplugin/config.vim b/runtime/ftplugin/config.vim
index 427d0ed..df607b1 100644
--- a/runtime/ftplugin/config.vim
+++ b/runtime/ftplugin/config.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	config
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2004 Jul 08
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/csc.vim b/runtime/ftplugin/csc.vim
index d9f9010..ac02088 100644
--- a/runtime/ftplugin/csc.vim
+++ b/runtime/ftplugin/csc.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	csc
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 29
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/csh.vim b/runtime/ftplugin/csh.vim
index d053cbb..3f89c72 100644
--- a/runtime/ftplugin/csh.vim
+++ b/runtime/ftplugin/csh.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	csh
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 29
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/dosbatch.vim b/runtime/ftplugin/dosbatch.vim
index 91d57d9..6e581e7 100644
--- a/runtime/ftplugin/dosbatch.vim
+++ b/runtime/ftplugin/dosbatch.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    MS-DOS .bat files
 " Maintainer:  Mike Williams <mrw@eandem.co.uk>
-" Last Change: 5th February 2003
+" Last Change: 27th May 2009
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -12,10 +12,10 @@
 let b:did_ftplugin = 1
 
 " BAT comment formatting
-setlocal comments=b:rem,b:@rem,b:REM,b:@REM,b:::
+setlocal comments=b:rem,b:@rem,b:REM,b:@REM,:::
 setlocal formatoptions-=t formatoptions+=rol
 
 " Define patterns for the browse file filter
 if has("gui_win32") && !exists("b:browsefilter")
-  let b:browsefilter = "DOS Batch Files (*.bat, *.btm, *.cmd)\t*.bat;*.btm;*.cmd\nAll Files (*.*)\t*.*\n"
+  let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\nAll Files (*.*)\t*.*\n"
 endif
diff --git a/runtime/ftplugin/dtd.vim b/runtime/ftplugin/dtd.vim
index 3b15bda..eed5ca6 100644
--- a/runtime/ftplugin/dtd.vim
+++ b/runtime/ftplugin/dtd.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	dtd
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 30 Jun 2008
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/eruby.vim b/runtime/ftplugin/eruby.vim
index 802f596..9e121c2 100644
--- a/runtime/ftplugin/eruby.vim
+++ b/runtime/ftplugin/eruby.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.info>
-" Info:			$Id$
+" Info:			$Id: eruby.vim,v 1.12 2008/06/29 04:18:43 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/ftplugin/git.vim b/runtime/ftplugin/git.vim
index 9ac1aa1..63d4f33 100644
--- a/runtime/ftplugin/git.vim
+++ b/runtime/ftplugin/git.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	generic git output
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
-" Last Change:	2008 Jul 30
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2009 Dec 24
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -29,6 +29,9 @@
 else
     setlocal keywordprg=git\ show
 endif
+if has('gui_running')
+  let &l:keywordprg = substitute(&l:keywordprg,'^git\>','git --no-pager','')
+endif
 
 setlocal includeexpr=substitute(v:fname,'^[^/]\\+/','','')
 let b:undo_ftplugin = "setl keywordprg< path< includeexpr<"
diff --git a/runtime/ftplugin/gitcommit.vim b/runtime/ftplugin/gitcommit.vim
index bfc5b33..f8788c8 100644
--- a/runtime/ftplugin/gitcommit.vim
+++ b/runtime/ftplugin/gitcommit.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
-" Language:	git config file
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
-" Last Change:	2008 Jun 04
+" Language:	git commit file
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2009 Dec 24
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
diff --git a/runtime/ftplugin/gitconfig.vim b/runtime/ftplugin/gitconfig.vim
index ee33baf..833b8b1 100644
--- a/runtime/ftplugin/gitconfig.vim
+++ b/runtime/ftplugin/gitconfig.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	git config file
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
-" Last Change:	2007 Dec 16
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2009 Dec 24
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
diff --git a/runtime/ftplugin/gitrebase.vim b/runtime/ftplugin/gitrebase.vim
index 6e0e6c1..4680d28 100644
--- a/runtime/ftplugin/gitrebase.vim
+++ b/runtime/ftplugin/gitrebase.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	git rebase --interactive
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
-" Last Change:	2008 Apr 16
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2009 Dec 24
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -22,12 +22,13 @@
 endfunction
 
 function! s:cycle()
-    call s:choose(get({'s':'edit','p':'squash'},getline('.')[0],'pick'))
+    call s:choose(get({'s':'edit','p':'squash','e':'reword'},getline('.')[0],'pick'))
 endfunction
 
 command! -buffer -bar Pick   :call s:choose('pick')
 command! -buffer -bar Squash :call s:choose('squash')
 command! -buffer -bar Edit   :call s:choose('edit')
+command! -buffer -bar Reword :call s:choose('reword')
 command! -buffer -bar Cycle  :call s:cycle()
 " The above are more useful when they are mapped; for example:
 "nnoremap <buffer> <silent> S :Cycle<CR>
diff --git a/runtime/ftplugin/gitsendemail.vim b/runtime/ftplugin/gitsendemail.vim
index a83e48a..8fb436e 100644
--- a/runtime/ftplugin/gitsendemail.vim
+++ b/runtime/ftplugin/gitsendemail.vim
@@ -1,6 +1,6 @@
 " Vim filetype plugin
 " Language:	git send-email message
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
-" Last Change:	2007 Dec 16
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2009 Dec 24
 
 runtime! ftplugin/mail.vim
diff --git a/runtime/ftplugin/html.vim b/runtime/ftplugin/html.vim
index 6c8607d..5f1384b 100644
--- a/runtime/ftplugin/html.vim
+++ b/runtime/ftplugin/html.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	html
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2007 Nov 20
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim
index 96e62c6..6c7b367 100644
--- a/runtime/ftplugin/java.vim
+++ b/runtime/ftplugin/java.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	Java
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Change:  2005 Mar 28
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Change:  20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/jsp.vim b/runtime/ftplugin/jsp.vim
index 4987cc5..9c0eb96 100644
--- a/runtime/ftplugin/jsp.vim
+++ b/runtime/ftplugin/jsp.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	jsp
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2005 Oct 10
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/mail.vim b/runtime/ftplugin/mail.vim
index 34e1d3c..4a4c851 100644
--- a/runtime/ftplugin/mail.vim
+++ b/runtime/ftplugin/mail.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Mail
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2007 Apr 30
+" Last Change:	2009 Jun 03
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -23,7 +23,7 @@
 " Set 'formatoptions' to break text lines and keep the comment leader ">".
 setlocal fo+=tcql
 
-" Add mappings, unless the user didn't want this.
+" Add mappings, unless the user doesn't want this.
 if !exists("no_plugin_maps") && !exists("no_mail_maps")
   " Quote text by inserting "> "
   if !hasmapto('<Plug>MailQuote')
diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim
index a58d297..eef0628 100644
--- a/runtime/ftplugin/man.vim
+++ b/runtime/ftplugin/man.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	man
-" Maintainer:	Nam SungHyun <namsh@kldp.org>
-" Last Change:	2007 Nov 30
+" Maintainer:	SungHyun Nam <goweol@gmail.com>
+" Last Change:	2008 Sep 17
 
 " To make the ":Man" command available before editing a manual page, source
 " this script from your startup vimrc file.
diff --git a/runtime/ftplugin/pascal.vim b/runtime/ftplugin/pascal.vim
index c138dda..3b1db4a 100644
--- a/runtime/ftplugin/pascal.vim
+++ b/runtime/ftplugin/pascal.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	pascal
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2005 Sep 05
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/perl.vim b/runtime/ftplugin/perl.vim
index 3771005..318e70f 100644
--- a/runtime/ftplugin/perl.vim
+++ b/runtime/ftplugin/perl.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	Perl
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Change:  17 Jul 2008
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Change:  20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/php.vim b/runtime/ftplugin/php.vim
index c9a0bc7..f59cf12 100644
--- a/runtime/ftplugin/php.vim
+++ b/runtime/ftplugin/php.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	php
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2007 Nov 10
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/ruby.vim b/runtime/ftplugin/ruby.vim
index 1d4347a..7dfdfb5 100644
--- a/runtime/ftplugin/ruby.vim
+++ b/runtime/ftplugin/ruby.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:		Ruby
 " Maintainer:		Gavin Sinclair <gsinclair at gmail.com>
-" Info:			$Id$
+" Info:			$Id: ruby.vim,v 1.40 2008/06/29 04:18:43 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/ftplugin/sgml.vim b/runtime/ftplugin/sgml.vim
index 4a19dda..a07d31f 100644
--- a/runtime/ftplugin/sgml.vim
+++ b/runtime/ftplugin/sgml.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	sgml
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 30
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/sh.vim b/runtime/ftplugin/sh.vim
index 183215a..076b5ef 100644
--- a/runtime/ftplugin/sh.vim
+++ b/runtime/ftplugin/sh.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	sh
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 29
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/sql.vim b/runtime/ftplugin/sql.vim
index 9f40b01..f41fb5b 100644
--- a/runtime/ftplugin/sql.vim
+++ b/runtime/ftplugin/sql.vim
@@ -1,8 +1,8 @@
 " SQL filetype plugin file
 " Language:    SQL (Common for Oracle, Microsoft SQL Server, Sybase)
-" Version:     4.0
+" Version:     6.0
 " Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Wed 27 Feb 2008 04:35:21 PM Eastern Standard Time
+" Last Change: 2009 Aug 04
 " Download:    http://vim.sourceforge.net/script.php?script_id=454
 
 " For more details please use:
@@ -29,6 +29,27 @@
 "
 " To change the default dialect, add the following to your vimrc:
 "    let g:sql_type_default = 'sqlanywhere'
+"
+" This file also creates a command, SQLGetType, which allows you to 
+" determine what the current dialect is in use.
+"     :SQLGetType
+"
+" History
+"
+" Version 6.0
+" 
+" NF: Adds the command SQLGetType
+"
+" Version 5.0
+" 
+" NF: Adds the ability to choose the keys to control SQL completion, just add 
+"     the following to your .vimrc:
+"    let g:ftplugin_sql_omni_key       = '<C-C>'
+"    let g:ftplugin_sql_omni_key_right = '<Right>'
+"    let g:ftplugin_sql_omni_key_left  = '<Left>'
+"
+" BF: format-options - Auto-wrap comments using textwidth was turned off 
+"                      by mistake.
 
 
 " Only do this when not done yet for this buffer
@@ -44,7 +65,7 @@
 " c     Auto-wrap comments using textwidth, inserting the current comment
 "       leader automatically.
 setlocal formatoptions-=t
-setlocal formatoptions-=c
+setlocal formatoptions+=c
 
 " Functions/Commands to allow the user to change SQL syntax dialects
 " through the use of :SQLSetType <tab> for completion.
@@ -154,6 +175,20 @@
 
 endif
 
+" Functions/Commands to allow the user determine current SQL syntax dialect
+" This works with both Vim 6 and 7.
+
+if !exists("*SQL_GetType")
+    function SQL_GetType()
+        if exists('b:sql_type_override') 
+            echomsg "Current SQL dialect in use:".b:sql_type_override
+        else
+            echomsg "Current SQL dialect in use:".g:sql_type_default        
+        endif
+    endfunction
+    command! -nargs=0 SQLGetType :call SQL_GetType()
+endif
+
 if exists("b:sql_type_override")
     " echo 'sourcing buffer ftplugin/'.b:sql_type_override.'.vim'
     if globpath(&runtimepath, 'ftplugin/'.b:sql_type_override.'.vim') != ''
@@ -311,6 +346,19 @@
                 \ ',index,subscription,synchronization,view,variable'
 endif
 
+" Key to trigger SQL completion
+if !exists('g:ftplugin_sql_omni_key')
+    let g:ftplugin_sql_omni_key = '<C-C>'
+endif
+" Key to trigger drill into column list
+if !exists('g:ftplugin_sql_omni_key_right')
+    let g:ftplugin_sql_omni_key_right = '<Right>'
+endif
+" Key to trigger drill out of column list
+if !exists('g:ftplugin_sql_omni_key_left')
+    let g:ftplugin_sql_omni_key_left = '<Left>'
+endif
+
 " Replace all ,'s with bars, except ones with numbers after them.
 " This will most likely be a \{,1} string.
 let s:ftplugin_sql_objects = 
@@ -382,32 +430,32 @@
     if !exists('g:omni_sql_no_default_maps')
         " Static maps which use populate the completion list
         " using Vim's syntax highlighting rules
-        imap <buffer> <c-c>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O>
-        imap <buffer> <c-c>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
-        imap <buffer> <c-c>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O>
-        imap <buffer> <c-c>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O>
-        imap <buffer> <c-c>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O>
-        imap <buffer> <c-c>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O>
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement")<CR><C-X><C-O>'
         " Dynamic maps which use populate the completion list
         " using the dbext.vim plugin
-        imap <buffer> <c-c>t <C-\><C-O>:call sqlcomplete#Map('table')<CR><C-X><C-O>
-        imap <buffer> <c-c>p <C-\><C-O>:call sqlcomplete#Map('procedure')<CR><C-X><C-O>
-        imap <buffer> <c-c>v <C-\><C-O>:call sqlcomplete#Map('view')<CR><C-X><C-O>
-        imap <buffer> <c-c>c <C-\><C-O>:call sqlcomplete#Map('column')<CR><C-X><C-O>
-        imap <buffer> <c-c>l <C-\><C-O>:call sqlcomplete#Map('column_csv')<CR><C-X><C-O>
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " The next 3 maps are only to be used while the completion window is
         " active due to the <CR> at the beginning of the map
-        imap <buffer> <c-c>L <C-Y><C-\><C-O>:call sqlcomplete#Map('column_csv')<CR><C-X><C-O>
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " <C-Right> is not recognized on most Unix systems, so only create
         " these additional maps on the Windows platform.
         " If you would like to use these maps, choose a different key and make
         " the same map in your vimrc.
-        if has('win32')
-            imap <buffer> <c-right>  <C-R>=sqlcomplete#DrillIntoTable()<CR>
-            imap <buffer> <c-left>  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>
-        endif
+        " if has('win32')
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
+        " endif
         " Remove any cached items useful for schema changes
-        imap <buffer> <c-c>R <C-\><C-O>:call sqlcomplete#Map('resetCache')<CR><C-X><C-O>
+        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
     endif
 
     if b:sql_compl_savefunc != ""
diff --git a/runtime/ftplugin/svg.vim b/runtime/ftplugin/svg.vim
index 4544172..f8a0d62 100644
--- a/runtime/ftplugin/svg.vim
+++ b/runtime/ftplugin/svg.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	svg
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 29
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/tcl.vim b/runtime/ftplugin/tcl.vim
new file mode 100644
index 0000000..c5bc303
--- /dev/null
+++ b/runtime/ftplugin/tcl.vim
@@ -0,0 +1,36 @@
+" Vim filetype plugin file
+" Language:         Tcl
+" Maintainer:       Robert L Hicks <sigzero@gmail.com>
+" Latest Revision:  2009-05-01
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+" Make sure the continuation lines below do not cause problems in
+" compatibility mode.
+let s:cpo_save = &cpo
+set cpo-=C
+
+setlocal comments=:#
+setlocal commentstring=#%s
+setlocal formatoptions+=croql
+
+" Change the browse dialog on Windows to show mainly Tcl-related files
+if has("gui_win32")
+    let b:browsefilter = "Tcl Source Files (.tcl)\t*.tcl\n" .
+                \ "Tcl Test Files (.test)\t*.test\n" .
+                \ "All Files (*.*)\t*.*\n"
+endif
+
+"-----------------------------------------------------------------------------
+
+" Undo the stuff we changed.
+let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp<" .
+	    \	      " | unlet! b:browsefilter"
+
+" Restore the saved compatibility options.
+let &cpo = s:cpo_save
+
+" vim: set et ts=4 sw=4 tw=78:
diff --git a/runtime/ftplugin/tcsh.vim b/runtime/ftplugin/tcsh.vim
index 4c724e6..dacb44e 100644
--- a/runtime/ftplugin/tcsh.vim
+++ b/runtime/ftplugin/tcsh.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	tcsh
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 29
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/verilog.vim b/runtime/ftplugin/verilog.vim
index 1d37d60..6594f2e 100644
--- a/runtime/ftplugin/verilog.vim
+++ b/runtime/ftplugin/verilog.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Verilog HDL
 " Maintainer:	Chih-Tsun Huang <cthuang@larc.ee.nthu.edu.tw>
-" Last Change:	Mon Sep  5 11:05:54 CST 2005 and 2006 April 30
+" Last Change:	Wed Sep  3 15:24:49 CST 2008
 " URL:		http://larc.ee.nthu.edu.tw/~cthuang/vim/ftplugin/verilog.vim
 
 " Only do this when not done yet for this buffer
@@ -12,6 +12,10 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+" Set 'cpoptions' to allow line continuations
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Undo the plugin effect
 let b:undo_ftplugin = "setlocal fo< com< tw<"
     \ . "| unlet! b:browsefilter b:match_ignorecase b:match_words"
@@ -28,8 +32,6 @@
   setlocal tw=78
 endif
 
-set cpo-=C
-
 " Win32 can filter files in the browse dialog
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "Verilog Source Files (*.v)\t*.v\n" .
@@ -49,3 +51,7 @@
     \ '\<task\>:\<endtask\>,' .
     \ '\<specify\>:\<endspecify\>'
 endif
+
+" Reset 'cpoptions' back to the user's setting
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
index ca66597..de8a047 100644
--- a/runtime/ftplugin/vim.vim
+++ b/runtime/ftplugin/vim.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	Vim
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2008 Feb 27
+" Last Change:	2009 Jan 22
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,16 +11,20 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
-let cpo_save = &cpo
+let s:cpo_save = &cpo
 set cpo-=C
 
-let b:undo_ftplugin = "setl fo< com< tw< commentstring<"
+let b:undo_ftplugin = "setl fo< isk< com< tw< commentstring<"
 	\ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
 
 " Set 'formatoptions' to break comment lines but not other lines,
 " and insert the comment leader when hitting <CR> or using "o".
 setlocal fo-=t fo+=croql
 
+" To allow tag lookup via CTRL-] for autoload functions, '#' must be a
+" keyword character.  E.g., for netrw#Nread().
+setlocal isk+=#
+
 " Set 'comments' to format dashed lists in comments
 setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\"
 
@@ -53,8 +57,7 @@
   let b:match_ignorecase = 0
   let b:match_words =
 	\ '\<fu\%[nction]\>:\<retu\%[rn]\>:\<endf\%[unction]\>,' .
-	\ '\<wh\%[ile]\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<endw\%[hile]\>,' .
-	\ '\<for\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<endfo\%[r]\>,' .
+ 	\ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' .
 	\ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' .
 	\ '\<try\>:\<cat\%[ch]\>:\<fina\%[lly]\>:\<endt\%[ry]\>,' .
 	\ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,' .
@@ -64,7 +67,8 @@
 	\ synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string"'
 endif
 
-let &cpo = cpo_save
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " removed this, because 'cpoptions' is a global option.
 " setlocal cpo+=M		" makes \%( match \)
diff --git a/runtime/ftplugin/xhtml.vim b/runtime/ftplugin/xhtml.vim
index e03407b..a50ed92 100644
--- a/runtime/ftplugin/xhtml.vim
+++ b/runtime/ftplugin/xhtml.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	xhtml
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2004 Jul 08
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/xml.vim b/runtime/ftplugin/xml.vim
index 55d9ee6..74cd064 100644
--- a/runtime/ftplugin/xml.vim
+++ b/runtime/ftplugin/xml.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	xml
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 30 Jun 2008
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
diff --git a/runtime/ftplugin/xsd.vim b/runtime/ftplugin/xsd.vim
index 1cd7adc..b033760 100644
--- a/runtime/ftplugin/xsd.vim
+++ b/runtime/ftplugin/xsd.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	xsd
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2003 Sep 29
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/ftplugin/xslt.vim b/runtime/ftplugin/xslt.vim
index 9580432..1a5ee62 100644
--- a/runtime/ftplugin/xslt.vim
+++ b/runtime/ftplugin/xslt.vim
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:	xslt
-" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
-" Last Changed: 2004 Jul 08
-" URL:		http://mywebpage.netscape.com/sharppeople/vim/ftplugin
+" Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Changed: 20 Jan 2009
+" URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 
diff --git a/runtime/indent/ada.vim b/runtime/indent/ada.vim
index e56aaff..a9b461c 100644
--- a/runtime/indent/ada.vim
+++ b/runtime/indent/ada.vim
@@ -1,15 +1,15 @@
 "------------------------------------------------------------------------------
 "  Description: Vim Ada indent file
 "     Language: Ada (2005)
-"	   $Id$
+"	   $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
 "    Copyright: Copyright (C) 2006 Martin Krischik
 "   Maintainer: Martin Krischik <krischik@users.sourceforge.net>
 "		Neil Bird <neil@fnxweb.com>
 "		Ned Okie <nokie@radford.edu>
-"      $Author$
-"	 $Date$
+"      $Author: krischik $
+"	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/indent/ada.vim $
 "      History: 24.05.2006 MK Unified Headers
 "		16.07.2006 MK Ada-Mode as vim-ball
diff --git a/runtime/indent/bst.vim b/runtime/indent/bst.vim
index 5933d80..be1f63e 100644
--- a/runtime/indent/bst.vim
+++ b/runtime/indent/bst.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	bst
 " Author:	Tim Pope <vimNOSPAM@tpope.info>
-" $Id$
+" $Id: bst.vim,v 1.1 2007/05/05 18:11:12 vimboss Exp $
 
 if exists("b:did_indent")
     finish
diff --git a/runtime/indent/cmake.vim b/runtime/indent/cmake.vim
index b54a8d8..4315ad2 100644
--- a/runtime/indent/cmake.vim
+++ b/runtime/indent/cmake.vim
@@ -1,10 +1,10 @@
 " =============================================================================
 " 
 "   Program:   CMake - Cross-Platform Makefile Generator
-"   Module:    $RCSfile$
+"   Module:    $RCSfile: cmake-indent.vim,v $
 "   Language:  VIM
-"   Date:      $Date$
-"   Version:   $Revision$
+"   Date:      $Date: 2006/09/23 21:09:08 $
+"   Version:   $Revision: 1.7 $
 " 
 " =============================================================================
 
@@ -12,8 +12,8 @@
 " Language:     CMake (ft=cmake)
 " Author:       Andy Cedilnik <andy.cedilnik@kitware.com>
 " Maintainer:   Andy Cedilnik <andy.cedilnik@kitware.com>
-" Last Change:  $Date$
-" Version:      $Revision$
+" Last Change:  $Date: 2006/09/23 21:09:08 $
+" Version:      $Revision: 1.7 $
 "
 " Licence:      The CMake license applies to this file. See
 "               http://www.cmake.org/HTML/Copyright.html
diff --git a/runtime/indent/cobol.vim b/runtime/indent/cobol.vim
index 9ed8a47..8dce3cd 100644
--- a/runtime/indent/cobol.vim
+++ b/runtime/indent/cobol.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	cobol
 " Author:	Tim Pope <vimNOSPAM@tpope.info>
-" $Id$
+" $Id: cobol.vim,v 1.1 2007/05/05 18:08:19 vimboss Exp $
 
 if exists("b:did_indent")
     finish
diff --git a/runtime/indent/cpp.vim b/runtime/indent/cpp.vim
index 9ae126a..ffa37d7 100644
--- a/runtime/indent/cpp.vim
+++ b/runtime/indent/cpp.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	C++
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2001 Jun 12
+" Last Change:	2008 Nov 29
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -11,3 +11,5 @@
 
 " C++ indenting is built-in, thus this is very simple
 setlocal cindent
+
+let b:undo_indent = "setl cin<"
diff --git a/runtime/indent/cuda.vim b/runtime/indent/cuda.vim
new file mode 100644
index 0000000..68ee9ce
--- /dev/null
+++ b/runtime/indent/cuda.vim
@@ -0,0 +1,15 @@
+" Vim indent file
+" Language:	CUDA
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2008 Nov 29
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+   finish
+endif
+let b:did_indent = 1
+
+" It's just like C indenting
+setlocal cindent
+
+let b:undo_indent = "setl cin<"
diff --git a/runtime/indent/eiffel.vim b/runtime/indent/eiffel.vim
index 8959459..db66bf8 100644
--- a/runtime/indent/eiffel.vim
+++ b/runtime/indent/eiffel.vim
@@ -2,8 +2,8 @@
 " Language:	Eiffel
 " Maintainer:	Jocelyn Fiat <eiffel@djoce.net>
 " Previous-Maintainer:	David Clarke <gadicath@dishevelled.net>
-" $Date$
-" $Revision$
+" $Date: 2004/12/09 21:33:52 $
+" $Revision: 1.3 $
 " URL: http://www.djoce.net/page/vim/
 " Last Change:	2004 Sept 14 : removed specific value for tab (sw)
 
diff --git a/runtime/indent/eruby.vim b/runtime/indent/eruby.vim
index 31cbb8b..931eaac 100644
--- a/runtime/indent/eruby.vim
+++ b/runtime/indent/eruby.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.info>
-" Info:			$Id$
+" Info:			$Id: eruby.vim,v 1.16 2008/06/29 04:18:43 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/indent/gitconfig.vim b/runtime/indent/gitconfig.vim
index 7ce0c71..28d95b7 100644
--- a/runtime/indent/gitconfig.vim
+++ b/runtime/indent/gitconfig.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	git config file
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
-" Last Change:	2008 Jun 04
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2009 Dec 24
 
 if exists("b:did_indent")
   finish
diff --git a/runtime/indent/mail.vim b/runtime/indent/mail.vim
new file mode 100644
index 0000000..6246b40
--- /dev/null
+++ b/runtime/indent/mail.vim
@@ -0,0 +1,13 @@
+" Vim indent file
+" Language:	Mail
+" Maintainer:	Bram Moolenaar
+" Last Change:	2009 Jun 03
+
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+" What works best is auto-indenting, disable other indenting.
+" For formatting see the ftplugin.
+setlocal autoindent nosmartindent nocindent indentexpr=
diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
index 6124eb2..9f1a1ed 100644
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -2,17 +2,10 @@
 " Language:	PHP
 " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:		http://www.2072productions.com/vim/indent/php.vim
-" Last Change:  2008 June 7th
+" Last Change:  2008 November 22nd
 " Newsletter:   http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
-" Version:	1.28
+" Version:	1.30
 "
-"  If you find a bug, please e-mail me at John.wellesz (AT) teaser (DOT) fr
-"  with an example of code that breaks the algorithm.
-"
-"  ---> The change log and all the comments have been removed from this file.
-"
-"  For a complete change log and fully commented code, download the script on
-"  2072productions.com at the URI provided above.
 "
 "  If you find a bug, please e-mail me at John.wellesz (AT) teaser (DOT) fr
 "  with an example of code that breaks the algorithm.
@@ -24,7 +17,7 @@
 " NOTE: This script must be used with PHP syntax ON and with the php syntax
 "	script by Lutz Eymers (http://www.isp.de/data/php.vim ) or with the
 "	script by Peter Hodge (http://www.vim.org/scripts/script.php?script_id=1571 )
-"	the later is bunbdled by default with vim 7.
+"	the later is bunbdled by default with Vim 7.
 "
 "
 "	In the case you have syntax errors in your script such as HereDoc end
@@ -33,50 +26,19 @@
 "	they are followed by a ';').
 "
 "
-" NOTE: If you are editing file in Unix file format and that (by accident)
-" there are '\r' before new lines, this script won't be able to proceed
-" correctly and will make many mistakes because it won't be able to match
-" '\s*$' correctly.
-" So you have to remove those useless characters first with a command like:
+" NOTE: If you are editing files in Unix file format and that (by accident)
+"	there are '\r' before new lines, this script won't be able to proceed
+"	correctly and will make many mistakes because it won't be able to match
+"	'\s*$' correctly.
+"	So you have to remove those useless characters first with a command like:
 "
-" :%s /\r$//g
+"	:%s /\r$//g
 "
-" or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will
-" silently remove them when VIM load this script (at each bufread).
+"	or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will
+"	silently remove them when VIM load this script (at each bufread).
 "
-"
-" Options: PHP_autoformatcomment = 0 to not enable autoformating of comment by
-"		    default, if set to 0, this script will let the 'formatoptions' setting intact.
-"
-" Options: PHP_default_indenting = # of sw (default is 0), # of sw will be
-"		   added to the indent of each line of PHP code.
-"
-" Options: PHP_removeCRwhenUnix = 1 to make the script automatically remove CR
-"		   at end of lines (by default this option is unset), NOTE that you
-"		   MUST remove CR when the fileformat is UNIX else the indentation
-"		   won't be correct!
-"
-" Options: PHP_BracesAtCodeLevel = 1 to indent the '{' and '}' at the same
-"		   level than the code they contain.
-"		   Exemple:
-"			Instead of:
-"				if ($foo)
-"				{
-"					foo();
-"				}
-"
-"			You will write:
-"				if ($foo)
-"					{
-"					foo();
-"					}
-"
-"			NOTE: The script will be a bit slower if you use this option because
-"			some optimizations won't be available.
-"
-" Options: PHP_vintage_case_default_indent = 1 (defaults to 0) to add a meaningless indent
-"		    befaore 'case:' and 'default":' statement in switch block
-"
+" Options: See :help php-indent for available options.
+
 
 if exists("b:did_indent")
     finish
@@ -145,6 +107,7 @@
 endif
 
 if exists("*GetPhpIndent")
+    call ResetPhpOptions()
     finish " XXX
 endif
 
@@ -317,14 +280,13 @@
 let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|else\)'
 let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\)'
 
-let s:autorestoptions = 0
-if ! s:autorestoptions
-    au BufWinEnter,Syntax	*.php,*.php3,*.php4,*.php5	call ResetOptions()
-    let s:autorestoptions = 1
+let s:autoresetoptions = 0
+if ! s:autoresetoptions
+    let s:autoresetoptions = 1
 endif
 
-function! ResetOptions()
-    if ! b:optionsset
+function! ResetPhpOptions()
+    if ! b:optionsset && &filetype == "php" 
 	if b:PHP_autoformatcomment
 
 	    setlocal comments=s1:/*,mb:*,ex:*/,://,:#
@@ -341,6 +303,8 @@
     endif
 endfunc
 
+call ResetPhpOptions()
+
 function! GetPhpIndent()
 
     let b:GetLastRealCodeLNum_ADD = 0
@@ -360,7 +324,7 @@
     if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast
 	if b:PHP_indentbeforelast
 	    let b:PHP_indentinghuge = 1
-	    echom 'Large indenting detected, speed optimizations engaged (v1.28)'
+	    echom 'Large indenting detected, speed optimizations engaged (v1.30)'
 	endif
 	let b:PHP_indentbeforelast = b:PHP_lastindented
     endif
@@ -693,6 +657,7 @@
 
     if !LastLineClosed
 
+
 	if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && pline !~ '[,(]'.endline
 
 	    if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'
@@ -715,11 +680,11 @@
 	elseif last_line =~ '^\s*'.s:blockstart
 	    let ind = ind + &sw
 
-	elseif last_line =~# defaultORcase
+	elseif last_line =~# defaultORcase && cline !~# defaultORcase
 	    let ind = ind + &sw
 
 
-	elseif pline =~ '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . defaultORcase
+	elseif pline =~ '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . defaultORcase && cline !~# defaultORcase
 
 	    let ind = ind + &sw
 	endif
diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim
index 8a56e54..4a3012f 100644
--- a/runtime/indent/ruby.vim
+++ b/runtime/indent/ruby.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:		Ruby
 " Maintainer:		Nikolai Weibull <now at bitwi.se>
-" Info:			$Id$
+" Info:			$Id: ruby.vim,v 1.47 2008/06/29 04:18:43 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim
index 483e543..49146c7 100644
--- a/runtime/indent/sh.vim
+++ b/runtime/indent/sh.vim
@@ -1,7 +1,7 @@
 " Vim indent file
-" Language:	    Shell Script
+" Language:         Shell Script
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2010-01-06
 
 if exists("b:did_indent")
   finish
@@ -9,8 +9,10 @@
 let b:did_indent = 1
 
 setlocal indentexpr=GetShIndent()
-setlocal indentkeys+==then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done
+setlocal indentkeys+=0=then,0=do,0=else,0=elif,0=fi,0=esac,0=done,),0=;;,0=;&
+setlocal indentkeys+=0=fin,0=fil,0=fip,0=fir,0=fix
 setlocal indentkeys-=:,0#
+setlocal nosmartindent
 
 if exists("*GetShIndent")
   finish
@@ -19,34 +21,138 @@
 let s:cpo_save = &cpo
 set cpo&vim
 
-function GetShIndent()
+function s:buffer_shiftwidth()
+  return &shiftwidth
+endfunction
+
+let s:sh_indent_defaults = {
+      \ 'default': function('s:buffer_shiftwidth'),
+      \ 'continuation-line': function('s:buffer_shiftwidth'),
+      \ 'case-labels': function('s:buffer_shiftwidth'),
+      \ 'case-statements': function('s:buffer_shiftwidth'),
+      \ 'case-breaks': 0 }
+
+function! s:indent_value(option)
+  let Value = exists('b:sh_indent_options')
+            \ && has_key(b:sh_indent_options, a:option) ?
+            \ b:sh_indent_options[a:option] :
+            \ s:sh_indent_defaults[a:option]
+  if type(Value) == type(function('type'))
+    return Value()
+  endif
+  return Value
+endfunction
+
+function! GetShIndent()
   let lnum = prevnonblank(v:lnum - 1)
   if lnum == 0
     return 0
   endif
 
-  " Add a 'shiftwidth' after if, while, else, case, until, for, function()
-  " Skip if the line also contains the closure for the above
+  let pnum = prevnonblank(lnum - 1)
+
   let ind = indent(lnum)
   let line = getline(lnum)
-  if line =~ '^\s*\(if\|then\|do\|else\|elif\|case\|while\|until\|for\)\>'
-	\ || line =~ '^\s*\<\k\+\>\s*()\s*{'
-	\ || line =~ '^\s*{'
-    if line !~ '\(esac\|fi\|done\)\>\s*$' && line !~ '}\s*$'
-      let ind = ind + &sw
+  if line =~ '^\s*\%(if\|then\|do\|else\|elif\|case\|while\|until\|for\|select\)\>'
+    if line !~ '\<\%(fi\|esac\|done\)\>\s*\%(#.*\)\=$'
+      let ind += s:indent_value('default')
     endif
+  elseif s:is_case_label(line, pnum)
+    if !s:is_case_ended(line)
+      let ind += s:indent_value('case-statements')
+    endif
+  elseif line =~ '^\s*\<\k\+\>\s*()\s*{' || line =~ '^\s*{'
+    if line !~ '}\s*\%(#.*\)\=$'
+      let ind += s:indent_value('default')
+    endif
+  elseif s:is_continuation_line(line)
+    if pnum == 0 || !s:is_continuation_line(getline(pnum))
+      let ind += s:indent_value('continuation-line')
+    endif
+  elseif pnum != 0 && s:is_continuation_line(getline(pnum))
+    let ind = indent(s:find_continued_lnum(pnum))
   endif
 
-  " Subtract a 'shiftwidth' on a then, do, else, esac, fi, done
-  " Retain the indentation level if line matches fin (for find)
+  let pine = line
   let line = getline(v:lnum)
-  if (line =~ '^\s*\(then\|do\|else\|elif\|esac\|fi\|done\)\>' || line =~ '^\s*}')
-	\ && line !~ '^\s*fi[ln]\>'
-    let ind = ind - &sw
+  if line =~ '^\s*\%(then\|do\|else\|elif\|fi\|done\)\>' || line =~ '^\s*}'
+    let ind -= s:indent_value('default')
+  elseif line =~ '^\s*esac\>'
+    let ind -= (s:is_case_label(pine, lnum) && s:is_case_ended(pine) ?
+             \ 0 : s:indent_value('case-statements')) +
+             \ s:indent_value('case-labels')
+    if s:is_case_break(pine)
+      let ind += s:indent_value('case-breaks')
+    endif
+  elseif s:is_case_label(line, lnum)
+    if s:is_case(pine)
+      let ind = indent(lnum) + s:indent_value('case-labels')
+    else
+      let ind -= s:indent_value('case-statements') - s:indent_value('case-breaks')
+    endif
+  elseif s:is_case_break(line)
+    let ind -= s:indent_value('case-breaks')
   endif
 
   return ind
 endfunction
 
+function! s:is_continuation_line(line)
+  return a:line =~ '\%(\%(^\|[^\\]\)\\\|&&\|||\)$'
+endfunction
+
+function! s:find_continued_lnum(lnum)
+  let i = a:lnum
+  while i > 1 && s:is_continuation_line(getline(i - 1))
+    let i -= 1
+  endwhile
+  return i
+endfunction
+
+function! s:is_case_label(line, pnum)
+  if a:line !~ '^\s*(\=.*)'
+    return 0
+  endif
+
+  if a:pnum > 0
+    let pine = getline(a:pnum)
+    if !(s:is_case(pine) || s:is_case_ended(pine))
+      return 0
+    endif
+  endif
+
+  let suffix = substitute(a:line, '^\s*(\=', "", "")
+  let nesting = 0
+  let i = 0
+  let n = strlen(suffix)
+  while i < n
+    let c = suffix[i]
+    let i += 1
+    if c == '\\'
+      let i += 1
+    elseif c == '('
+      let nesting += 1
+    elseif c == ')'
+      if nesting == 0
+        return 1
+      endif
+      let nesting -= 1
+    endif
+  endwhile
+  return 0
+endfunction
+
+function! s:is_case(line)
+  return a:line =~ '^\s*case\>'
+endfunction
+
+function! s:is_case_break(line)
+  return a:line =~ '^\s*;[;&]'
+endfunction
+
+function! s:is_case_ended(line)
+  return s:is_case_break(a:line) || a:line =~ ';[;&]\s*\%(#.*\)\=$'
+endfunction
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim
index 340981b..4ac35b6 100644
--- a/runtime/indent/xml.vim
+++ b/runtime/indent/xml.vim
@@ -1,10 +1,11 @@
 " Language:	xml
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
-" Last Change:	Tue, 27 Apr 2004 14:54:59 CEST
+" Last Change:	2009-05-26 00:17:25
 " Notes:	1) does not indent pure non-xml code (e.g. embedded scripts)
 "		2) will be confused by unbalanced tags in comments
 "		or CDATA sections.
-" TODO:		implement pre-like tags, see xml_indent_open / xml_indent_close
+"		2009-05-26 patch by Nikolai Weibull
+" TODO: 	implement pre-like tags, see xml_indent_open / xml_indent_close
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -46,6 +47,9 @@
 	if '' != syn1 && syn1 !~ 'xml' && '' != syn2 && syn2 !~ 'xml'
 	    " don't indent pure non-xml code
 	    return 0
+	elseif syn1 =~ '^xmlComment' && syn2 =~ '^xmlComment'
+	    " indent comments specially
+	    return -1
 	endif
     endif
     return 1
@@ -74,8 +78,12 @@
     endif
 
     if a:use_syntax_check
-	if 0 == <SID>XmlIndentSynCheck(lnum) || 0 == <SID>XmlIndentSynCheck(a:lnum)
+	let check_lnum = <SID>XmlIndentSynCheck(lnum)
+	let check_alnum = <SID>XmlIndentSynCheck(a:lnum)
+	if 0 == check_lnum || 0 == check_alnum
 	    return indent(a:lnum)
+	elseif -1 == check_lnum || -1 == check_alnum
+	    return -1
 	endif
     endif
 
diff --git a/runtime/keymap/dvorak.vim b/runtime/keymap/dvorak.vim
new file mode 100644
index 0000000..77dc530
--- /dev/null
+++ b/runtime/keymap/dvorak.vim
@@ -0,0 +1,82 @@
+" Maintainer:   Ashish SHUKLA <wahjava@members.fsf.org>
+" Last Changed: 2009 Jul 04
+"
+" All characters are ASCII, conversion to another encoding (e.g., UTF-8)
+" should work.
+
+let b:keymap_name = "en-dv"
+
+loadkeymap
+q	'
+w	,
+e	.
+r	p
+t	y
+y	f
+u	g
+i	c
+o	r
+p	l
+[	/
+]	=
+\\	\\
+a	a
+s	o
+d	e
+f	u
+g	i
+h	d
+j	h
+k	t
+l	n
+;	s
+'	-
+z	;
+x	q
+c	j
+v	k
+b	x
+n	b
+m	m
+,	w
+.	v
+/	z
+Z	:
+X	Q
+C	J
+V	K
+B	X
+N	B
+M	M
+<	W
+>	V
+?	Z
+A	A
+S	O
+D	E
+F	U
+G	I
+H	D
+J	H
+K	T
+L	N
+:	S
+\"	_
+Q	"
+W	<
+E	>
+R	P
+T	Y
+Y	F
+U	G
+I	C
+O	R
+P	L
+{	?
+}	+
+|	|
+-	[
+_	{
+=	]
++	}
+
diff --git a/runtime/lang/menu_cs_cz.iso_8859-2.vim b/runtime/lang/menu_cs_cz.iso_8859-2.vim
index 3aefac6..a5bc82e 100644
--- a/runtime/lang/menu_cs_cz.iso_8859-2.vim
+++ b/runtime/lang/menu_cs_cz.iso_8859-2.vim
@@ -1,8 +1,8 @@
 " Menu Translations:	Czech for ISO-8859-2
 " Maintainer:		Jiri Brezina <brzj@seznam.cz>
 " vim:set foldmethod=marker:
-" $Revision$
-" $Date$
+" $Revision: 1.3 $
+" $Date: 2005/12/19 22:08:24 $
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
diff --git a/runtime/lang/menu_czech_czech_republic.1250.vim b/runtime/lang/menu_czech_czech_republic.1250.vim
index c63c1ab..4f21e89 100644
--- a/runtime/lang/menu_czech_czech_republic.1250.vim
+++ b/runtime/lang/menu_czech_czech_republic.1250.vim
@@ -1,8 +1,8 @@
 " Menu Translations:	Czech for MS-Windows
 " Maintainer:		Jiri Brezina <brzj@seznam.cz>
 " vim:set foldmethod=marker:
-" $Revision$
-" $Date$
+" $Revision: 1.3 $
+" $Date: 2005/12/19 22:13:30 $
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
diff --git a/runtime/lang/menu_czech_czech_republic.ascii.vim b/runtime/lang/menu_czech_czech_republic.ascii.vim
index 9f39922..f2faec9 100644
--- a/runtime/lang/menu_czech_czech_republic.ascii.vim
+++ b/runtime/lang/menu_czech_czech_republic.ascii.vim
@@ -1,8 +1,8 @@
 " Menu Translations:	Czech for systems without localization
 " Maintainer:		Jiri Brezina <brzj@seznam.cz>
 " vim:set foldmethod=marker:
-" $Revision$
-" $Date$
+" $Revision: 1.3 $
+" $Date: 2005/12/19 22:06:56 $
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
diff --git a/runtime/lang/menu_es_es.latin1.vim b/runtime/lang/menu_es_es.latin1.vim
index 8001100..b943e23 100644
--- a/runtime/lang/menu_es_es.latin1.vim
+++ b/runtime/lang/menu_es_es.latin1.vim
@@ -1,7 +1,8 @@
 " Menu Translations:	Español
-" Maintainer:		Alejandro López-Valencia <dradul@users.sourceforge.net>
-" Version:		6.4.p0-1
-" Last Change:		2005 Dec 01
+" Previous translator:	Alejandro López-Valencia <dradul@users.sourceforge.net>
+" Last translator:	Omar Campagne Polaino <ocampagne@gmail.com>
+" Version:		7.2.245
+" Last Change:		2009 Sep 03
 "
 
 " Quit when menu translations have already been done.
@@ -28,13 +29,14 @@
 menutrans Co&pying		&Términos\ de\ Licencia
 menutrans Sponsor/Register	Benefactor/Regístrese
 menutrans &Version		&Versión\ e\ \información\ de\ configuración
-menutrans &About		&Acerca\ de\ Vim.
+menutrans &About		&Acerca\ de\ Vim
 
 " File menu
 menutrans &File				&Archivo
 menutrans &Open\.\.\.<Tab>:e		&Abrir\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp	A&brir\ en\ otra\ ventana\.\.\.<Tab>:sp
 menutrans &New<Tab>:enew		&Nuevo<Tab>:enew
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Abrir\ pes&taña\.\.\.<Tab>:tabnew
 menutrans &Close<Tab>:close		&Cerrar<Tab>:close
 menutrans &Save<Tab>:w			&Guardar<Tab>:w
 menutrans Save\ &As\.\.\.<Tab>:sav	Guardar\ &como\.\.\.<Tab>:sav
@@ -65,11 +67,12 @@
 menutrans Find\ and\ Rep&lace		Buscar\ y\ R&eemplazar
 menutrans Find\ and\ Rep&lace<Tab>:s	Buscar\ y\ R&eemplazar<Tab>:s
 menutrans Settings\ &Window		&Ventana\ de\ opciones
+menutrans Startup\ &Settings		Opciones\ de\ arranque	 
 
 " Edit/Global Settings
 menutrans &Global\ Settings		Opciones\ &globales
 
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	Activar/Desactivar\ &realzado\ de\ sintaxis<Tab>:set\ hls!
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	Activar/Desactivar\ &resaltado\ de\ sintaxis<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Activar/Desactivar\ &ignorar\ mayúsculas\ y\ minúsculas<Tab>:set\ ic!
 menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Activar/Desactivar\ &mostrar\ coincidencias<Tab>:set\ sm!
 
@@ -95,11 +98,11 @@
 menutrans Toggle\ &Left\ Scrollbar	Ocultar/Mostrar\ barra\ de\ desplazamiento\ i&zquierda
 menutrans Toggle\ &Right\ Scrollbar	Ocultar/Mostrar\ barra\ de\ desplazamiento\ &derecha
 
-let g:menutrans_path_dialog = "Introduzca la ruta de búsqueda para los ficheros.\nSepare los nombres de los directorios con una coma."
-let g:menutrans_tags_dialog = "Introduzca los nombres de los fichero de tags.\nSepare los nombres con una coma."
+let g:menutrans_path_dialog = "Introduzca la ruta de búsqueda para los archivos.\nSepare los nombres de los directorios con una coma."
+let g:menutrans_tags_dialog = "Introduzca los nombres de los archivos de tags.\nSepare los nombres con una coma."
 
 " Edit/File Settings
-menutrans F&ile\ Settings		Opciones\ del\ &fichero
+menutrans F&ile\ Settings		Opciones\ del\ &archivo
 
 " Boolean options
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Activar/Desactivar\ &numeración\ de\ líneas<Tab>:set\ nu!
@@ -118,8 +121,8 @@
 menutrans Te&xt\ Width\.\.\.		Anchura\ del\ te&xto\.\.\.
 let g:menutrans_textwidth_dialog = "Introduzca el nuevo ancho del texto (0 para desactivar el quiebre de línea): "
 
-menutrans &File\ Format\.\.\.		&Formato\ del\ fichero\.\.\.
-let g:menutrans_fileformat_dialog = "Seleccione el formato para escribir el fichero"
+menutrans &File\ Format\.\.\.		&Formato\ del\ archivo\.\.\.
+let g:menutrans_fileformat_dialog = "Seleccione el formato para escribir el archivo"
 
 menutrans C&olor\ Scheme		Esquema\ de\ c&olores
 menutrans blue		azul
@@ -154,7 +157,7 @@
 menutrans &Tools			&Herramientas
 menutrans &Jump\ to\ this\ tag<Tab>g^]	&Saltar\ a\ este\ etiqueta<Tab>g^]
 menutrans Jump\ &back<Tab>^T		Saltar\ &atrás<Tab>^T
-menutrans Build\ &Tags\ File		Crear\ fichero\ de\ &etiquetas\
+menutrans Build\ &Tags\ File		Crear\ archivo\ de\ &etiquetas\
 menutrans &Diff				Modo\ de\ &diferencias
 menutrans &Folding			&Plegado
 menutrans &Make<Tab>:make		Ejecutar\ «&Make»<Tab>:make
@@ -169,6 +172,24 @@
 menutrans &Convert\ to\ HEX<Tab>:%!xxd	Convertir\ a\ formato\ &hexadecimal<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r	&Convertir\ al\ formato\ original<Tab>:%!xxd\ -r
 
+" Tools.Spelling Menu
+menutrans &Spelling				Corrección\ ortográfica
+menutrans &Spell\ Check\ On			&Activar\ corrección\ ortográfica
+menutrans Spell\ Check\ &Off			&Desactivar\ corrección\ ortográfica
+menutrans To\ &Next\ error<Tab>]s		&Siguiente\ error<Tab>]s
+menutrans To\ &Previous\ error<Tab>[s  		Error\ &precedente<Tab>[s 
+menutrans Suggest\ &Corrections<Tab>z=		Sugerir\ &corrección<Tab>z=
+menutrans &Repeat\ correction<Tab>:spellrepall	&Repetir\ corrección<Tab>:spellrepall
+an 40.335.205 &Tools.&Spelling.Castellano\ (es)	:set spl=es spell<CR>
+menutrans Set\ language\ to\ "en"		Inglés
+menutrans Set\ language\ to\ "en_au"		Inglés\ (en_au)
+menutrans Set\ language\ to\ "en_ca"		Inglés\ (en_ca)
+menutrans Set\ language\ to\ "en_gb"		Inglés\ (en_gb)
+menutrans Set\ language\ to\ "en_nz"		Inglés\ (en_nz)
+menutrans Set\ language\ to\ "en_us"		Inglés\ (en_us)
+
+menutrans &Find\ More\ Languages		&Buscar\ otras\ lenguas
+
 " Tools.Fold Menu
 menutrans &Enable/Disable\ folds<Tab>zi		&Activar/Desactivar\ pliegues<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv		&Ver\ línea\ del\ cursor<Tab>zv
@@ -182,7 +203,7 @@
 " create and delete folds
 menutrans Create\ &Fold<Tab>zf			Crear\ &pliegue<Tab>zf
 menutrans &Delete\ Fold<Tab>zd			&Suprimir\ pliegue<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD		Suprimir\ &todos\ los\ pligues<Tab>zD
+menutrans Delete\ &All\ Folds<Tab>zD		Suprimir\ &todos\ los\ pliegues<Tab>zD
 " moving around in folds
 menutrans Fold\ col&umn\ width			A&nchura\ de\ columna\ del\ pliegue
 
@@ -203,7 +224,7 @@
 menutrans &Alternate		&Alternar
 menutrans &Next			Si&guiente
 menutrans &Previous		&Previo
-let g:menutrans_no_file = "[Sin fichero]"
+let g:menutrans_no_file = "[Sin archivo]"
 
 " Window menu
 menutrans &Window			&Ventana
@@ -211,7 +232,7 @@
 menutrans S&plit<Tab>^Ws		&Dividir\ la\ ventana<Tab>^Ws
 menutrans Sp&lit\ To\ #<Tab>^W^^	D&ividir\ en\ el\ marcador\ (#)<Tab>^W^^
 menutrans Split\ &Vertically<Tab>^Wv    Dividir\ &verticalmente<Tab>^Wv
-menutrans Split\ File\ E&xplorer	&Abrir\ el\ «Explorador\ de\ ficheros»
+menutrans Split\ File\ E&xplorer	&Abrir\ el\ «Explorador\ de\ archivos»
 menutrans &Close<Tab>^Wc		&Cerrar\ esta\ ventana<Tab>^Wc
 menutrans Close\ &Other(s)<Tab>^Wo	Cerrar\ &otra(s)\ ventana(s)<Tab>^Wo
 menutrans Move\ &To			Mov&er\ a
@@ -245,9 +266,9 @@
     delfun Do_toolbar_tmenu
   endif
   fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open		Abrir fichero
-    tmenu ToolBar.Save		Guardar fichero
-    tmenu ToolBar.SaveAll	Guardar todos los ficheros
+    tmenu ToolBar.Open		Abrir archivo
+    tmenu ToolBar.Save		Guardar archivo
+    tmenu ToolBar.SaveAll	Guardar todos los archivos
     tmenu ToolBar.Print		Imprimir
     tmenu ToolBar.Undo		Deshacer
     tmenu ToolBar.Redo		Rehacer
@@ -273,7 +294,7 @@
     tmenu ToolBar.RunScript	Ejecutar un archivo de órdenes
     tmenu ToolBar.Make		Ejecutar «Make»
     tmenu ToolBar.Shell		Abrir un intérprete de comandos
-    tmenu ToolBar.RunCtags	Generar un fichero de etiquetas
+    tmenu ToolBar.RunCtags	Generar un archivo de etiquetas
     tmenu ToolBar.TagJump	Saltar a una etiqueta
     tmenu ToolBar.Help		Ayuda
     tmenu ToolBar.FindHelp	Buscar en la ayuda...
@@ -282,15 +303,15 @@
 
 " Syntax menu
 menutrans &Syntax			&Sintaxis
-menutrans &Show\ filetypes\ in\ menu	&Mostrar\ listas\ de\ «tipo\ de\ fichero»
+menutrans &Show\ filetypes\ in\ menu	&Mostrar\ listas\ de\ «tipo\ de\ archivo»
 menutrans Set\ '&syntax'\ only		Activar\ sólo\ sintaxis
-menutrans Set\ '&filetype'\ too		Activar\ también\ «tipo\ de\ fichero»
+menutrans Set\ '&filetype'\ too		Activar\ también\ «tipo\ de\ archivo»
 menutrans &Off				&Desactivar\ sintaxis
-menutrans &Manual			sintaxis\ &manual
-menutrans A&utomatic			sintaxis\ a&utomática
-menutrans on/off\ for\ &This\ file	Activar/Desactivar\ en\ es&te\ fichero
+menutrans &Manual			Sintaxis\ &manual
+menutrans A&utomatic			Sintaxis\ a&utomática
+menutrans on/off\ for\ &This\ file	Activar/Desactivar\ en\ es&te\ archivo
 menutrans Co&lor\ test			&Prueba\ de\ colores
-menutrans &Highlight\ test		Prueba\ de\ &realzado
+menutrans &Highlight\ test		Prueba\ de\ &resaltado
 menutrans &Convert\ to\ HTML		&Convertir\ a\ HTML
 
 " Find Help dialog text
diff --git a/runtime/lang/menu_ko_kr.euckr.vim b/runtime/lang/menu_ko_kr.euckr.vim
index b8fa625..5e2851e 100644
--- a/runtime/lang/menu_ko_kr.euckr.vim
+++ b/runtime/lang/menu_ko_kr.euckr.vim
@@ -1,6 +1,6 @@
 " Menu Translations:	Korean
-" Maintainer:		Nam SungHyun <namsh@kldp.org>
-" Last Change:		2003 Apr 25
+" Maintainer:		SungHyun Nam <goweol@gmail.com>
+" Last Change:		2008 Sep 17
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
diff --git a/runtime/lang/menu_ko_kr.utf-8.vim b/runtime/lang/menu_ko_kr.utf-8.vim
index 8e507d5..d0b1cc0 100644
--- a/runtime/lang/menu_ko_kr.utf-8.vim
+++ b/runtime/lang/menu_ko_kr.utf-8.vim
@@ -1,6 +1,6 @@
 " Menu Translations:	Korean
-" Maintainer:		Nam SungHyun <namsh@kldp.org>
-" Last Change:		2003 Apr 25
+" Maintainer:		SungHyun Nam <goweol@gmail.com>
+" Last Change:		2008 Sep 17
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
diff --git a/runtime/lang/menu_ko_kr.vim b/runtime/lang/menu_ko_kr.vim
index 26a959a..b67d0cc 100644
--- a/runtime/lang/menu_ko_kr.vim
+++ b/runtime/lang/menu_ko_kr.vim
@@ -1,5 +1,5 @@
 " Menu Translations:	Korean
-" Translated By:	Nam SungHyun <namsh@kldp.org>
-" Last Change:		2003 Feb 24
+" Translated By:	SungHyun Nam <goweol@gmail.com>
+" Last Change:		2008 Sep 17
 
 source <sfile>:p:h/menu_ko_kr.euckr.vim
diff --git a/runtime/lang/menu_ru_ru.koi8-r.vim b/runtime/lang/menu_ru_ru.koi8-r.vim
index 295b016..37cd935 100644
--- a/runtime/lang/menu_ru_ru.koi8-r.vim
+++ b/runtime/lang/menu_ru_ru.koi8-r.vim
@@ -3,7 +3,7 @@
 " Last Change:		26 Apr 2004
 " URL:			cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
 "
-" $Id$
+" $Id: menu_ru_ru.koi8-r.vim,v 1.2 2004/06/16 11:19:21 vimboss Exp $
 "
 " Adopted for RuVim project by Vassily Ragosin.
 " First translation: Tim Alexeevsky <realtim [at] mail.ru>,
diff --git a/runtime/lang/menu_ru_ru.vim b/runtime/lang/menu_ru_ru.vim
index d471fd5..b726152 100644
--- a/runtime/lang/menu_ru_ru.vim
+++ b/runtime/lang/menu_ru_ru.vim
@@ -3,7 +3,7 @@
 " Last Change:		26 Apr 2004
 " URL:			cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
 "
-" $Id$
+" $Id: menu_ru_ru.vim,v 1.1 2004/06/13 16:09:10 vimboss Exp $
 "
 " Adopted for RuVim project by Vassily Ragosin.
 " First translation: Tim Alexeevsky <realtim [at] mail.ru>,
diff --git a/runtime/macros/matchit.vim b/runtime/macros/matchit.vim
index e41cda9..549c26c 100644
--- a/runtime/macros/matchit.vim
+++ b/runtime/macros/matchit.vim
@@ -357,7 +357,7 @@
       execute s:Ref(ini, d, "start", "len")
       let ini = strpart(ini, 0, start) . backref . strpart(ini, start+len)
       let tailBR = substitute(tailBR, s:notslash . '\zs\\' . d,
-	\ escape(backref, '\\'), 'g')
+	\ escape(backref, '\\&'), 'g')
     endif
     let d = d-1
   endwhile
diff --git a/runtime/menu.vim b/runtime/menu.vim
index fab890e..b7eccea 100644
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2008 Jun 30
+" Last Change:	2009 Feb 26
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -138,6 +138,7 @@
 func! s:FnameEscape(fname)
   if exists('*fnameescape')
     return fnameescape(a:fname)
+  endif
   return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
 endfunc
 
@@ -1016,10 +1017,9 @@
   tmenu ToolBar.Copy		Copy to clipboard
   tmenu ToolBar.Paste		Paste from Clipboard
   if !has("gui_athena")
-    tmenu ToolBar.Find		Find...
+    tmenu ToolBar.Replace	Find / Replace...
     tmenu ToolBar.FindNext	Find Next
     tmenu ToolBar.FindPrev	Find Previous
-    tmenu ToolBar.Replace		Find / Replace...
   endif
   tmenu ToolBar.LoadSesn	Choose a session to load
   tmenu ToolBar.SaveSesn	Save current session
diff --git a/runtime/plugin/getscriptPlugin.vim b/runtime/plugin/getscriptPlugin.vim
index 4fd36db..7ae35cb 100644
--- a/runtime/plugin/getscriptPlugin.vim
+++ b/runtime/plugin/getscriptPlugin.vim
@@ -19,7 +19,7 @@
  endif
  finish
 endif
-let g:loaded_getscriptPlugin = "v31"
+let g:loaded_getscriptPlugin = "v32"
 let s:keepcpo                = &cpo
 set cpo&vim
 
diff --git a/runtime/plugin/gzip.vim b/runtime/plugin/gzip.vim
index 6560238..16e4f8f 100644
--- a/runtime/plugin/gzip.vim
+++ b/runtime/plugin/gzip.vim
@@ -1,6 +1,6 @@
 " Vim plugin for editing compressed files.
 " Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2005 Jul 26
+" Last Change: 2009 Jul 01
 
 " Exit quickly when:
 " - this plugin was already loaded
@@ -20,17 +20,21 @@
   "
   " Set binary mode before reading the file.
   " Use "gzip -d", gunzip isn't always available.
-  autocmd BufReadPre,FileReadPre	*.gz,*.bz2,*.Z setlocal bin
+  autocmd BufReadPre,FileReadPre	*.gz,*.bz2,*.Z,*.lzma setlocal bin
   autocmd BufReadPost,FileReadPost	*.gz  call gzip#read("gzip -dn")
   autocmd BufReadPost,FileReadPost	*.bz2 call gzip#read("bzip2 -d")
   autocmd BufReadPost,FileReadPost	*.Z   call gzip#read("uncompress")
+  autocmd BufReadPost,FileReadPost	*.lzma call gzip#read("lzma -d")
   autocmd BufWritePost,FileWritePost	*.gz  call gzip#write("gzip")
   autocmd BufWritePost,FileWritePost	*.bz2 call gzip#write("bzip2")
   autocmd BufWritePost,FileWritePost	*.Z   call gzip#write("compress -f")
+  autocmd BufWritePost,FileWritePost	*.lzma call gzip#write("lzma -z")
   autocmd FileAppendPre			*.gz  call gzip#appre("gzip -dn")
   autocmd FileAppendPre			*.bz2 call gzip#appre("bzip2 -d")
   autocmd FileAppendPre			*.Z   call gzip#appre("uncompress")
+  autocmd FileAppendPre			*.lzma call gzip#appre("lzma -d")
   autocmd FileAppendPost		*.gz  call gzip#write("gzip")
   autocmd FileAppendPost		*.bz2 call gzip#write("bzip2")
   autocmd FileAppendPost		*.Z   call gzip#write("compress -f")
+  autocmd FileAppendPost		*.lzma call gzip#write("lzma -z")
 augroup END
diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim
index f38e481..d5a0ac5 100644
--- a/runtime/plugin/matchparen.vim
+++ b/runtime/plugin/matchparen.vim
@@ -1,6 +1,6 @@
 " Vim plugin for showing matching parens
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2008 Feb 27
+" Last Change: 2008 Sep 03
 
 " Exit quickly when:
 " - this plugin was already loaded (or disabled)
@@ -21,7 +21,7 @@
   finish
 endif
 
-let cpo_save = &cpo
+let s:cpo_save = &cpo
 set cpo-=C
 
 " The function that is invoked (very often) to define a ":match" highlighting
@@ -147,4 +147,5 @@
 	  \ au! matchparen
 command! DoMatchParen runtime plugin/matchparen.vim | windo doau CursorMoved
 
-let &cpo = cpo_save
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/plugin/netrwPlugin.vim b/runtime/plugin/netrwPlugin.vim
index 7d2ca0b..13798b0 100644
--- a/runtime/plugin/netrwPlugin.vim
+++ b/runtime/plugin/netrwPlugin.vim
@@ -1,6 +1,6 @@
 " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN SECTION
-" Date:		Aug 01, 2008
+" Date:		Aug 10, 2008
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
@@ -16,19 +16,16 @@
 "  But be doers of the Word, and not only hearers, deluding your own selves {{{1
 "  (James 1:22 RSV)
 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-" ---------------------------------------------------------------------
 " Load Once: {{{1
 if &cp || exists("g:loaded_netrwPlugin")
  finish
 endif
-let g:loaded_netrwPlugin = "v132"
-let s:keepcpo            = &cpo
-if v:version < 700
- echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
+let g:loaded_netrwPlugin = "v136"
+if v:version < 702
+ echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
  finish
 endif
-let s:keepcpo= &cpo
+let s:keepcpo = &cpo
 set cpo&vim
 
 " ---------------------------------------------------------------------
@@ -52,8 +49,8 @@
   au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
   au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
  endif
- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|exe '2Nread '.fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
- au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|exe 'Nread '.fnameescape(expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
+ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
+ au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
  au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
  au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
  try
@@ -156,24 +153,6 @@
 endfun
 
 " ------------------------------------------------------------------------
-" NetReadFixup: this sort of function is typically written by the user {{{1
-"               to handle extra junk that their system's ftp dumps
-"               into the transfer.  This function is provided as an
-"               example and as a fix for a Windows 95 problem: in my
-"               experience, win95's ftp always dumped four blank lines
-"               at the end of the transfer.
-if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
- fun! NetReadFixup(method, line1, line2)
-"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
-   if method == 3   " ftp (no <.netrc>)
-    let fourblanklines= line2 - 3
-    silent fourblanklines.",".line2."g/^\s*/d"
-   endif
-"   call Dret("NetReadFixup")
- endfun
-endif
-
-" ------------------------------------------------------------------------
 " Modelines And Restoration: {{{1
 let &cpo= s:keepcpo
 unlet s:keepcpo
diff --git a/runtime/plugin/tarPlugin.vim b/runtime/plugin/tarPlugin.vim
index 2ddf7f3..8232b46 100644
--- a/runtime/plugin/tarPlugin.vim
+++ b/runtime/plugin/tarPlugin.vim
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_tarPlugin")
  finish
 endif
-let g:loaded_tarPlugin = "v23"
+let g:loaded_tarPlugin = "v24"
 let s:keepcpo          = &cpo
 set cpo&vim
 
@@ -34,13 +34,15 @@
    au FileWriteCmd tarfile::*/*	call tar#Write(expand("<amatch>"))
   endif
 
-  au BufReadCmd   *.tar.gz	call tar#Browse(expand("<amatch>"))
-  au BufReadCmd   *.tar		call tar#Browse(expand("<amatch>"))
-  au BufReadCmd   *.lrp		call tar#Browse(expand("<amatch>"))
-  au BufReadCmd   *.tar.bz2	call tar#Browse(expand("<amatch>"))
-  au BufReadCmd   *.tar.Z	call tar#Browse(expand("<amatch>"))
-  au BufReadCmd   *.tgz		call tar#Browse(expand("<amatch>"))
+  au BufReadCmd   *.tar.gz		call tar#Browse(expand("<amatch>"))
+  au BufReadCmd   *.tar			call tar#Browse(expand("<amatch>"))
+  au BufReadCmd   *.lrp			call tar#Browse(expand("<amatch>"))
+  au BufReadCmd   *.tar.bz2		call tar#Browse(expand("<amatch>"))
+  au BufReadCmd   *.tar.Z		call tar#Browse(expand("<amatch>"))
+  au BufReadCmd   *.tgz			call tar#Browse(expand("<amatch>"))
+  au BufReadCmd   *.tar.lzma	call tar#Browse(expand("<amatch>"))
 augroup END
+com! -nargs=? -complete=file Vimuntar call tar#Vimuntar(<q-args>)
 
 " ---------------------------------------------------------------------
 " Restoration And Modelines: {{{1
diff --git a/runtime/plugin/vimballPlugin.vim b/runtime/plugin/vimballPlugin.vim
index 630bb9f..1192a6b 100644
--- a/runtime/plugin/vimballPlugin.vim
+++ b/runtime/plugin/vimballPlugin.vim
@@ -1,6 +1,6 @@
 " vimballPlugin : construct a file containing both paths and files
 " Author: Charles E. Campbell, Jr.
-" Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.
+" Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
 "            No warranty, express or implied.
@@ -16,18 +16,18 @@
 if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballPlugin = "v29"
+let g:loaded_vimballPlugin = "v30"
 let s:keepcpo              = &cpo
 set cpo&vim
 
 " ------------------------------------------------------------------------------
 " Public Interface: {{{1
 com! -ra   -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
-com! -na=? -complete=dir  UseVimball  call vimball#Vimball(1,<f-args>)
-com! -na=0                VimballList call vimball#Vimball(0)
-com! -na=* -complete=dir  RmVimball   call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
-au BufEnter  *.vba.gz,*.vba.bz2,*.vba.zip call vimball#Decompress(expand("<amatch>"))
-au BufEnter  *.vba setlocal ff=unix noma bt=nofile fmr=[[[,]]] fdm=marker|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+com! -na=? -complete=dir  UseVimball			call vimball#Vimball(1,<f-args>)
+com! -na=0                VimballList			call vimball#Vimball(0)
+com! -na=* -complete=dir  RmVimball				call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
+au SourceCmd  *.vba.gz,*.vba.bz2,*.vba.zip		call vimball#Decompress(expand("<amatch>"))|call vimball#Vimball(1)
+au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'| setlocal ff=unix|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
 
 " =====================================================================
 " Restoration And Modelines: {{{1
diff --git a/runtime/scripts.vim b/runtime/scripts.vim
index d20ab09..0b3b135 100644
--- a/runtime/scripts.vim
+++ b/runtime/scripts.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types in scripts
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2008 Aug 09
+" Last change:	2009 Dec 24
 
 " This file is called by an autocommand for every file that has just been
 " loaded into a buffer.  It checks if the type of file can be recognized by
@@ -318,30 +318,31 @@
     set ft=scheme
 
   " Git output
-  elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}$\|^tag \S\+$'
+  elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
     set ft=git
 
   " CVS diff
   else
-    let lnum = 1
-    while getline(lnum) =~ "^? " && lnum < line("$")
-      let lnum = lnum + 1
+    let s:lnum = 1
+    while getline(s:lnum) =~ "^? " && s:lnum < line("$")
+      let s:lnum += 1
     endwhile
-    if getline(lnum) =~ '^Index:\s\+\f\+$'
+    if getline(s:lnum) =~ '^Index:\s\+\f\+$'
       set ft=diff
 
       " locale input files: Formal Definitions of Cultural Conventions
       " filename must be like en_US, fr_FR@euro or en_US.UTF-8
     elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
-      let lnum = 1
-      while lnum < 100 && lnum < line("$")
-	if getline(lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
+      let s:lnum = 1
+      while s:lnum < 100 && s:lnum < line("$")
+	if getline(s:lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
 	  setf fdcc
 	  break
 	endif
-	let lnum = lnum + 1
+	let s:lnum += 1
       endwhile
     endif
+    unlet s:lnum
 
   endif
 
diff --git a/runtime/spell/README.txt b/runtime/spell/README.txt
index d2a9c17..40837a6 100644
--- a/runtime/spell/README.txt
+++ b/runtime/spell/README.txt
@@ -72,7 +72,7 @@
    change too much, the OpenOffice people are not stupid.  However, you may
    want to remove obvious mistakes.  And remove single-letter words that
    aren't really words, they mess up the suggestions (English has this
-   problem).  You can use the "fixdup" Vim script to find duplicate words.
+   problem).  You can use the "fixdup.vim" Vim script to find duplicate words.
 
 3. Make the diff file.  "aap diff" will do this for you.  If a diff would be
    too big you might consider writing a Vim script to do systematic changes.
diff --git a/runtime/spell/fixdup.vim b/runtime/spell/fixdup.vim
new file mode 100644
index 0000000..0dd532d
--- /dev/null
+++ b/runtime/spell/fixdup.vim
@@ -0,0 +1,27 @@
+" Vim script to fix duplicate words in a .dic file  vim: set ft=vim:
+"
+" Usage: Edit the .dic file and source this script.
+
+let deleted = 0
+
+" Start below the word count.
+let lnum = 2
+while lnum <= line('$')
+  let word = getline(lnum)
+  if word !~ '/'
+    if search('^' . word . '/', 'w') != 0
+      let deleted += 1
+      exe lnum . "d"
+      continue		" don't increment lnum, it's already at the next word
+    endif
+  endif
+  let lnum += 1
+endwhile
+
+if deleted == 0
+  echomsg "No duplicate words found"
+elseif deleted == 1
+  echomsg "Deleted 1 duplicate word"
+else
+  echomsg printf("Deleted %d duplicate words", deleted)
+endif
diff --git a/runtime/syntax/2html.vim b/runtime/syntax/2html.vim
index ee66bf6..252a841 100644
--- a/runtime/syntax/2html.vim
+++ b/runtime/syntax/2html.vim
@@ -1,13 +1,18 @@
 " Vim syntax support file
 " Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2008 Jul 17
+" Last Change: 2009 Jul 14
 "	       (modified by David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>)
 "	       (XHTML support by Panagiotis Issaris <takis@lumumba.luc.ac.be>)
 "	       (made w3 compliant by Edd Barrett <vext01@gmail.com>)
 "	       (added html_font. Edd Barrett <vext01@gmail.com>)
+"	       (dynamic folding by Ben Fritz <fritzophrenic@gmail.com>)
 
 " Transform a file into HTML, using the current syntax highlighting.
 
+" this file uses line continuations
+let s:cpo_sav = &cpo
+set cpo-=C
+
 " Number lines when explicitely requested or when `number' is set
 if exists("html_number_lines")
   let s:numblines = html_number_lines
@@ -22,6 +27,37 @@
   let s:htmlfont = "monospace"
 endif
 
+" make copies of the user-defined settings that we may overrule
+if exists("html_dynamic_folds")
+  let s:html_dynamic_folds = 1
+endif
+if exists("html_hover_unfold")
+  let s:html_hover_unfold = 1
+endif
+if exists("html_use_css")
+  let s:html_use_css = 1
+endif
+
+" hover opening implies dynamic folding
+if exists("s:html_hover_unfold")
+  let s:html_dynamic_folds = 1
+endif
+
+" dynamic folding with no foldcolumn implies hover opens
+if exists("s:html_dynamic_folds") && exists("html_no_foldcolumn")
+  let s:html_hover_unfold = 1
+endif
+
+" ignore folding overrides dynamic folding
+if exists("html_ignore_folding") && exists("s:html_dynamic_folds")
+  unlet s:html_dynamic_folds
+endif
+
+" dynamic folding implies css
+if exists("s:html_dynamic_folds")
+  let s:html_use_css = 1
+endif
+
 " When not in gui we can only guess the colors.
 if has("gui_running")
   let s:whatterm = "gui"
@@ -62,7 +98,7 @@
   endfun
 endif
 
-if !exists("html_use_css")
+if !exists("s:html_use_css")
   " Return opening HTML tag for given highlight id
   function! s:HtmlOpening(id)
     let a = ""
@@ -150,6 +186,26 @@
   return a
 endfun
 
+if exists("s:html_dynamic_folds")
+
+  " compares two folds as stored in our list of folds
+  " A fold is "less" than another if it starts at an earlier line number,
+  " or ends at a later line number, ties broken by fold level
+  function! s:FoldCompare(f1, f2)
+    if a:f1.firstline != a:f2.firstline
+      " put it before if it starts earlier
+      return a:f1.firstline - a:f2.firstline
+    elseif a:f1.lastline != a:f2.lastline
+      " put it before if it ends later
+      return a:f2.lastline - a:f1.lastline
+    else
+      " if folds begin and end on the same lines, put lowest fold level first
+      return a:f1.level - a:f2.level
+    endif
+  endfunction
+
+endif
+
 " Figure out proper MIME charset from the 'encoding' option.
 if exists("html_use_encoding")
   let s:html_encoding = html_use_encoding
@@ -223,13 +279,13 @@
   let s:tag_close = '>'
 endif
 
-" Cache html_no_pre incase we have to turn it on for non-css mode
+" Cache html_no_pre in case we have to turn it on for non-css mode
 if exists("html_no_pre")
   let s:old_html_no_pre = html_no_pre
 endif
 
-if !exists("html_use_css")
-  " Cant put font tags in <pre>
+if !exists("s:html_use_css")
+  " Can't put font tags in <pre>
   let html_no_pre=1
 endif
 
@@ -251,9 +307,86 @@
   exe "normal! a<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:html_encoding . '"' . s:tag_close . "\n\e"
 endif
 
-if exists("html_use_css")
-  exe "normal! a<style type=\"text/css\">\n<!--\n-->\n</style>\n\e"
+if exists("s:html_use_css")
+  if exists("s:html_dynamic_folds")
+    if exists("s:html_hover_unfold")
+      " if we are doing hover_unfold, use css 2 with css 1 fallback for IE6
+      exe "normal! a".
+	  \ "<style type=\"text/css\">\n<!--\n".
+	  \ ".FoldColumn { text-decoration: none; white-space: pre; }\n\n".
+	  \ "body * { margin: 0; padding: 0; }\n".
+	  \ "\n".
+	  \ ".open-fold   > .Folded { display: none;  }\n".
+	  \ ".open-fold   > .fulltext { display: inline; }\n".
+	  \ ".closed-fold > .fulltext { display: none;  }\n".
+	  \ ".closed-fold > .Folded { display: inline; }\n".
+	  \ "\n".
+	  \ ".open-fold   > .toggle-open   { display: none;   }\n".
+	  \ ".open-fold   > .toggle-closed { display: inline; }\n".
+	  \ ".closed-fold > .toggle-open   { display: inline; }\n".
+	  \ ".closed-fold > .toggle-closed { display: none;   }\n"
+      exe "normal! a\n/* opening a fold while hovering won't be supported by IE6 and other\n".
+	  \ "similar browsers, but it should fail gracefully. */\n".
+	  \ ".closed-fold:hover > .fulltext { display: inline; }\n".
+	  \ ".closed-fold:hover > .toggle-filler { display: none; }\n".
+	  \ ".closed-fold:hover > .Folded { display: none; }\n"
+      exe "normal! a-->\n</style>\n"
+      exe "normal! a<!--[if lt IE 7]>".
+	  \ "<style type=\"text/css\">\n".
+	  \ ".open-fold   .Folded      { display: none; }\n".
+	  \ ".open-fold   .fulltext      { display: inline; }\n".
+	  \ ".open-fold   .toggle-open   { display: none; }\n".
+	  \ ".closed-fold .toggle-closed { display: inline; }\n".
+	  \ "\n".
+	  \ ".closed-fold .fulltext      { display: none; }\n".
+	  \ ".closed-fold .Folded      { display: inline; }\n".
+	  \ ".closed-fold .toggle-open   { display: inline; }\n".
+	  \ ".closed-fold .toggle-closed { display: none; }\n".
+	  \ "</style>\n".
+	  \ "<![endif]-->\n"
+    else
+      " if we aren't doing hover_unfold, use CSS 1 only
+      exe "normal! a<style type=\"text/css\">\n<!--\n".
+	    \ ".FoldColumn { text-decoration: none; white-space: pre; }\n\n".
+	    \ ".open-fold   .Folded      { display: none; }\n".
+	    \ ".open-fold   .fulltext      { display: inline; }\n".
+	    \ ".open-fold   .toggle-open   { display: none; }\n".
+	    \ ".closed-fold .toggle-closed { display: inline; }\n".
+	    \ "\n".
+	    \ ".closed-fold .fulltext      { display: none; }\n".
+	    \ ".closed-fold .Folded      { display: inline; }\n".
+	    \ ".closed-fold .toggle-open   { display: inline; }\n".
+	    \ ".closed-fold .toggle-closed { display: none; }\n".
+	    \ "-->\n</style>\n"
+    endif
+  else
+    " if we aren't doing any dynamic folding, no need for any special rules
+    exe "normal! a<style type=\"text/css\">\n<!--\n-->\n</style>\n\e"
+  endif
 endif
+
+" insert javascript to toggle folds open and closed
+if exists("s:html_dynamic_folds")
+  exe "normal! a\n".
+	\ "<script type='text/javascript'>\n".
+	\ "<!--\n".
+	\ "function toggleFold(objID)\n".
+	\ "{\n".
+	\ "  var fold;\n".
+	\ "  fold = document.getElementById(objID);\n".
+	\ "  if(fold.className == 'closed-fold')\n".
+	\ "  {\n".
+	\ "    fold.className = 'open-fold';\n".
+	\ "  }\n".
+	\ "  else if (fold.className == 'open-fold')\n".
+	\ "  {\n".
+	\ "    fold.className = 'closed-fold';\n".
+	\ "  }\n".
+	\ "}\n".
+	\ "-->\n".
+	\ "</script>\n\e"
+endif
+
 if exists("html_no_pre")
   exe "normal! a</head>\n<body>\n\e"
 else
@@ -265,7 +398,81 @@
 " List of all id's
 let s:idlist = ","
 
-" Loop over all lines in the original text.
+" First do some preprocessing for dynamic folding. Do this for the entire file
+" so we don't accidentally start within a closed fold or something.
+let s:allfolds = []
+
+if exists("s:html_dynamic_folds")
+  let s:lnum = 1
+  let s:end = line('$')
+  " save the fold text and set it to the default so we can find fold levels
+  let s:foldtext_save = &foldtext
+  set foldtext&
+
+  " we will set the foldcolumn in the html to the greater of the maximum fold
+  " level and the current foldcolumn setting
+  let s:foldcolumn = &foldcolumn
+
+  " get all info needed to describe currently closed folds
+  while s:lnum < s:end
+    if foldclosed(s:lnum) == s:lnum
+      " default fold text has '+-' and then a number of dashes equal to fold
+      " level, so subtract 2 from index of first non-dash after the dashes
+      " in order to get the fold level of the current fold
+      let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
+      if s:level+1 > s:foldcolumn
+	let s:foldcolumn = s:level+1
+      endif
+      " store fold info for later use
+      let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
+      call add(s:allfolds, s:newfold)
+      " open the fold so we can find any contained folds
+      execute s:lnum."foldopen"
+    else
+      let s:lnum = s:lnum + 1
+    endif
+  endwhile
+
+  " close all folds to get info for originally open folds
+  silent! %foldclose!
+  let s:lnum = 1
+
+  " the originally open folds will be all folds we encounter that aren't
+  " already in the list of closed folds
+  while s:lnum < s:end
+    if foldclosed(s:lnum) == s:lnum
+      " default fold text has '+-' and then a number of dashes equal to fold
+      " level, so subtract 2 from index of first non-dash after the dashes
+      " in order to get the fold level of the current fold
+      let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
+      if s:level+1 > s:foldcolumn
+	let s:foldcolumn = s:level+1
+      endif
+      let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
+      " only add the fold if we don't already have it
+      if empty(s:allfolds) || index(s:allfolds, s:newfold) == -1
+	let s:newfold.type = "open-fold"
+	call add(s:allfolds, s:newfold)
+      endif
+      " open the fold so we can find any contained folds
+      execute s:lnum."foldopen"
+    else
+      let s:lnum = s:lnum + 1
+    endif
+  endwhile
+
+  " sort the folds so that we only ever need to look at the first item in the
+  " list of folds
+  call sort(s:allfolds, "s:FoldCompare")
+
+  let &foldtext = s:foldtext_save
+  unlet s:foldtext_save
+
+  " close all folds again so we can get the fold text as we go
+  silent! %foldclose! 
+endif
+
+" Now loop over all lines in the original text to convert to html.
 " Use html_start_line and html_end_line if they are set.
 if exists("html_start_line")
   let s:lnum = html_start_line
@@ -284,6 +491,15 @@
   let s:end = line("$")
 endif
 
+" stack to keep track of all the folds containing the current line
+let s:foldstack = []
+
+if s:numblines
+  let s:margin = strlen(s:end) + 1
+else
+  let s:margin = 0
+endif
+
 if has('folding') && !exists('html_ignore_folding')
   let s:foldfillchar = &fillchars[matchend(&fillchars, 'fold:')]
   if s:foldfillchar == ''
@@ -295,6 +511,7 @@
   let s:difffillchar = '-'
 endif
 
+let s:foldId = 0
 
 while s:lnum <= s:end
 
@@ -303,12 +520,7 @@
   if s:filler > 0
     let s:n = s:filler
     while s:n > 0
-      if s:numblines
-	" Indent if line numbering is on
-	let s:new = repeat(s:LeadingSpace, strlen(s:end) + 1) . repeat(s:difffillchar, 3)
-      else
-	let s:new = repeat(s:difffillchar, 3)
-      endif
+      let s:new = repeat(s:difffillchar, 3)
 
       if s:n > 2 && s:n < s:filler && !exists("html_whole_filler")
 	let s:new = s:new . " " . s:filler . " inserted lines "
@@ -317,10 +529,16 @@
 
       if !exists("html_no_pre")
 	" HTML line wrapping is off--go ahead and fill to the margin
-	let s:new = s:new . repeat(s:difffillchar, &columns - strlen(s:new))
+	let s:new = s:new . repeat(s:difffillchar, &columns - strlen(s:new) - s:margin)
+      else
+	let s:new = s:new . repeat(s:difffillchar, 3)
       endif
 
       let s:new = s:HtmlFormat(s:new, "DiffDelete")
+      if s:numblines
+	" Indent if line numbering is on; must be after escaping.
+	let s:new = repeat(s:LeadingSpace, s:margin) . s:new
+      endif
       exe s:newwin . "wincmd w"
       exe "normal! a" . s:new . s:HtmlEndline . "\n\e"
       exe s:orgwin . "wincmd w"
@@ -333,16 +551,18 @@
 
   " Start the line with the line number.
   if s:numblines
-    let s:new = repeat(' ', strlen(s:end) - strlen(s:lnum)) . s:lnum . ' '
+    let s:numcol = repeat(' ', s:margin - 1 - strlen(s:lnum)) . s:lnum . ' '
   else
-    let s:new = ""
+    let s:numcol = ""
   endif
 
-  if has('folding') && !exists('html_ignore_folding') && foldclosed(s:lnum) > -1
+  let s:new = ""
+
+  if has('folding') && !exists('html_ignore_folding') && foldclosed(s:lnum) > -1 && !exists('s:html_dynamic_folds')
     "
-    " This is the beginning of a folded block
+    " This is the beginning of a folded block (with no dynamic folding)
     "
-    let s:new = s:new . foldtextresult(s:lnum)
+    let s:new = s:numcol . foldtextresult(s:lnum)
     if !exists("html_no_pre")
       " HTML line wrapping is off--go ahead and fill to the margin
       let s:new = s:new . repeat(s:foldfillchar, &columns - strlen(s:new))
@@ -355,14 +575,96 @@
 
   else
     "
-    " A line that is not folded.
+    " A line that is not folded, or doing dynamic folding.
     "
     let s:line = getline(s:lnum)
-
     let s:len = strlen(s:line)
 
+    if exists("s:html_dynamic_folds")
+      " First insert a closing for any open folds that end on this line
+      while !empty(s:foldstack) && get(s:foldstack,0).lastline == s:lnum-1
+	let s:new = s:new."</span></span>"
+	call remove(s:foldstack, 0)
+      endwhile
+
+      " Now insert an opening any new folds that start on this line
+      let s:firstfold = 1
+      while !empty(s:allfolds) && get(s:allfolds,0).firstline == s:lnum
+	let s:foldId = s:foldId + 1
+	let s:new = s:new . "<span id='fold".s:foldId."' class='".s:allfolds[0].type."'>"
+
+	" Unless disabled, add a fold column for the opening line of a fold.
+	"
+	" Note that dynamic folds require using css so we just use css to take
+	" care of the leading spaces rather than using &nbsp; in the case of
+	" html_no_pre to make it easier
+	if !exists("html_no_foldcolumn")
+	  " add fold column that can open the new fold
+	  if s:allfolds[0].level > 1 && s:firstfold
+	    let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
+	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1) . "</a>"
+	  endif
+	  let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>+</a>"
+	  let s:new = s:new . "<a class='toggle-open "
+	  " If this is not the last fold we're opening on this line, we need
+	  " to keep the filler spaces hidden if the fold is opened by mouse
+	  " hover. If it is the last fold to open in the line, we shouldn't hide
+	  " them, so don't apply the toggle-filler class.
+	  if get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum
+	    let s:new = s:new . "toggle-filler "
+	  endif
+	  let s:new = s:new . "FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
+	  let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level) . "</a>"
+
+	  " add fold column that can close the new fold
+	  let s:new = s:new . "<a class='toggle-closed FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
+	  if s:firstfold
+	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1)
+	  endif
+	  let s:new = s:new . "-"
+	  " only add spaces if we aren't opening another fold on the same line
+	  if get(s:allfolds, 1, {'firstline': 0}).firstline != s:lnum
+	    let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level)
+	  endif
+	  let s:new = s:new . "</a>"
+	  let s:firstfold = 0
+	endif
+
+	" add fold text, moving the span ending to the next line so collapsing
+	" of folds works correctly
+	let s:new = s:new . substitute(s:HtmlFormat(s:numcol . foldtextresult(s:lnum), "Folded"), '</span>', s:HtmlEndline.'\r\0', '')
+	let s:new = s:new . "<span class='fulltext'>"
+
+	" open the fold now that we have the fold text to allow retrieval of
+	" fold text for subsequent folds
+	execute s:lnum."foldopen"
+	call insert(s:foldstack, remove(s:allfolds,0))
+	let s:foldstack[0].id = s:foldId
+      endwhile
+
+      " Unless disabled, add a fold column for other lines.
+      "
+      " Note that dynamic folds require using css so we just use css to take
+      " care of the leading spaces rather than using &nbsp; in the case of
+      " html_no_pre to make it easier
+      if !exists("html_no_foldcolumn")
+	if empty(s:foldstack)
+	  " add the empty foldcolumn for unfolded lines
+	  let s:new = s:new . s:HtmlFormat(repeat(' ', s:foldcolumn), "FoldColumn")
+	else
+	  " add the fold column for folds not on the opening line
+	  if get(s:foldstack, 0).firstline < s:lnum
+	    let s:new = s:new . "<a class='FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
+	    let s:new = s:new . repeat('|', s:foldstack[0].level)
+	    let s:new = s:new . repeat(' ', s:foldcolumn - s:foldstack[0].level) . "</a>"
+	  endif
+	endif
+      endif
+    endif
+
+    " Now continue with the unfolded line text
     if s:numblines
-      let s:new = s:HtmlFormat(s:new, "lnr")
+      let s:new = s:new . s:HtmlFormat(s:numcol, "lnr")
     endif
 
     " Get the diff attribute, if any.
@@ -380,7 +682,7 @@
 	while s:col <= s:len && s:id == diff_hlID(s:lnum, s:col) | let s:col = s:col + 1 | endwhile
 	if s:len < &columns && !exists("html_no_pre")
 	  " Add spaces at the end to mark the changed line.
-	  let s:line = s:line . repeat(' ', &columns - s:len)
+	  let s:line = s:line . repeat(' ', &columns - virtcol([s:lnum, s:len]) - s:margin)
 	  let s:len = &columns
 	endif
       else
@@ -393,11 +695,27 @@
 
       " Expand tabs
       let s:expandedtab = strpart(s:line, s:startcol - 1, s:col - s:startcol)
-      let idx = stridx(s:expandedtab, "\t")
-      while idx >= 0
-	let i = &ts - ((idx + s:startcol - 1) % &ts)
-	let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', i), '')
-	let idx = stridx(s:expandedtab, "\t")
+      let s:offset = 0
+      let s:idx = stridx(s:expandedtab, "\t")
+      while s:idx >= 0
+	if has("multi_byte_encoding")
+	  if s:startcol + s:idx == 1
+	    let s:i = &ts
+	  else
+	    if s:idx == 0
+	      let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c')
+	    else
+	      let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c')
+	    endif
+	    let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
+	    let s:i = &ts - (s:vcol % &ts)
+	  endif
+	  let s:offset -= s:i - 1
+	else
+	  let s:i = &ts - ((s:idx + s:startcol - 1) % &ts)
+	endif
+	let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
+	let s:idx = stridx(s:expandedtab, "\t")
       endwhile
 
       " Output the text with the same synID, with class set to {s:id_name}
@@ -415,8 +733,22 @@
 " Finish with the last line
 exe s:newwin . "wincmd w"
 
+if exists("s:html_dynamic_folds")
+  " finish off any open folds
+  while !empty(s:foldstack)
+    exe "normal! a</span></span>"
+    call remove(s:foldstack, 0)
+  endwhile
+
+  " add fold column to the style list if not already there
+  let s:id = hlID('FoldColumn')
+  if stridx(s:idlist, "," . s:id . ",") == -1
+    let s:idlist = s:idlist . s:id . ","
+  endif
+endif
+
 " Close off the font tag that encapsulates the whole <body>
-if !exists("html_use_css")
+if !exists("s:html_use_css")
   exe "normal! a</font>\e"
 endif
 
@@ -428,7 +760,7 @@
 
 
 " Now, when we finally know which, we define the colors and styles
-if exists("html_use_css")
+if exists("s:html_use_css")
   1;/<style type="text/+1
 endif
 
@@ -445,7 +777,7 @@
 " Normal/global attributes
 " For Netscape 4, set <body> attributes too, though, strictly speaking, it's
 " incorrect.
-if exists("html_use_css")
+if exists("s:html_use_css")
   if exists("html_no_pre")
     execute "normal! A\nbody { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }\e"
   else
@@ -455,12 +787,12 @@
     execute "normal! ^cwbody\e"
   endif
 else
-    execute '%s:<body>:<body bgcolor="' . s:bgc . '" text="' . s:fgc . '"><font face="'. s:htmlfont .'">'
+  execute '%s:<body>:<body bgcolor="' . s:bgc . '" text="' . s:fgc . '"><font face="'. s:htmlfont .'">'
 endif
 
 " Line numbering attributes
 if s:numblines
-  if exists("html_use_css")
+  if exists("s:html_use_css")
     execute "normal! A\n.lnr { " . s:CSS1(hlID("LineNr")) . "}\e"
   else
     execute '%s+^<span class="lnr">\([^<]*\)</span>+' . s:HtmlOpening(hlID("LineNr")) . '\1' . s:HtmlClosing(hlID("LineNr")) . '+g'
@@ -479,14 +811,14 @@
   " If the class has some attributes, export the style, otherwise DELETE all
   " its occurences to make the HTML shorter
   if s:attr != ""
-    if exists("html_use_css")
+    if exists("s:html_use_css")
       execute "normal! A\n." . s:id_name . " { " . s:attr . "}"
     else
       execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '\1' . s:HtmlClosing(s:id) . '+g'
     endif
   else
     execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+ge'
-    if exists("html_use_css")
+    if exists("s:html_use_css")
       1;/<style type="text/+1
     endif
   endif
@@ -531,16 +863,28 @@
 " Save a little bit of memory (worth doing?)
 unlet s:htmlfont
 unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
-unlet s:whatterm s:idlist s:lnum s:end s:fgc s:bgc s:old_magic
+unlet s:whatterm s:idlist s:lnum s:end s:margin s:fgc s:bgc s:old_magic
 unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:numblines
-unlet s:orgwin s:newwin s:orgbufnr
+unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset
 if !v:profiling
   delfunc s:HtmlColor
   delfunc s:HtmlFormat
   delfunc s:CSS1
-  if !exists("html_use_css")
+  if !exists("s:html_use_css")
     delfunc s:HtmlOpening
     delfunc s:HtmlClosing
   endif
 endif
-silent! unlet s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace s:LeadingSpace s:HtmlEndline
+silent! unlet s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace s:LeadingSpace s:HtmlEndline s:firstfold s:foldcolumn
+unlet s:foldstack s:allfolds s:foldId s:numcol
+
+if exists("s:html_dynamic_folds")
+  delfunc s:FoldCompare
+endif
+
+silent! unlet s:html_dynamic_folds s:html_hover_unfold s:html_use_css
+
+let &cpo = s:cpo_sav
+unlet s:cpo_sav
+
+" vim: noet sw=2 sts=2
diff --git a/runtime/syntax/ada.vim b/runtime/syntax/ada.vim
index 8d76fb8..4f04bd0 100644
--- a/runtime/syntax/ada.vim
+++ b/runtime/syntax/ada.vim
@@ -1,16 +1,16 @@
 "----------------------------------------------------------------------------
 "  Description: Vim Ada syntax file
 "     Language: Ada (2005)
-"	   $Id$
+"	   $Id: ada.vim 887 2008-07-08 14:29:01Z krischik $
 "    Copyright: Copyright (C) 2006 Martin Krischik
 "   Maintainer: Martin Krischik
 "		David A. Wheeler <dwheeler@dwheeler.com>
 "		Simon Bradley <simon.bradley@pitechnology.com>
 " Contributors: Preben Randhol.
-"      $Author$
-"	 $Date$
+"      $Author: krischik $
+"	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
 "      Version: 4.6
-"    $Revision$
+"    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/syntax/ada.vim $
 "		http://www.dwheeler.com/vim
 "      History: 24.05.2006 MK Unified Headers
diff --git a/runtime/syntax/ant.vim b/runtime/syntax/ant.vim
index 6846ec6..6696f96 100644
--- a/runtime/syntax/ant.vim
+++ b/runtime/syntax/ant.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 " Last Change:	Tue Apr 27 13:05:59 CEST 2004
 " Filenames:	build.xml
-" $Id$
+" $Id: ant.vim,v 1.1 2004/06/13 18:13:18 vimboss Exp $
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
diff --git a/runtime/syntax/aspvbs.vim b/runtime/syntax/aspvbs.vim
index e73d674..07c129e 100644
--- a/runtime/syntax/aspvbs.vim
+++ b/runtime/syntax/aspvbs.vim
@@ -4,7 +4,7 @@
 " URL:		http://tritarget.com/pub/vim/syntax/aspvbs.vim (broken)
 " Last Change:	2006 Jun 19
 " 		by Dan Casey
-" Version:	$Revision$
+" Version:	$Revision: 1.3 $
 " Thanks to Jay-Jay <vim@jay-jay.net> for a syntax sync hack, hungarian
 " notation, and extra highlighting.
 " Thanks to patrick dehne <patrick@steidle.net> for the folding code.
diff --git a/runtime/syntax/bindzone.vim b/runtime/syntax/bindzone.vim
index 9facdbe..8db83f9 100644
--- a/runtime/syntax/bindzone.vim
+++ b/runtime/syntax/bindzone.vim
@@ -7,7 +7,7 @@
 " Based on an earlier version by Вячеслав Горбанев (Slava Gorbanev), with
 " heavy modifications.
 " 
-" $Id$
+" $Id: bindzone.vim,v 1.2 2006/04/20 22:06:21 vimboss Exp $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/bst.vim b/runtime/syntax/bst.vim
index 8fdcd43..e7836d7 100644
--- a/runtime/syntax/bst.vim
+++ b/runtime/syntax/bst.vim
@@ -2,7 +2,7 @@
 " Language:     BibTeX Bibliography Style
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.info>
 " Filenames:    *.bst
-" $Id$
+" $Id: bst.vim,v 1.2 2007/05/05 18:24:42 vimboss Exp $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/bzr.vim b/runtime/syntax/bzr.vim
index 2968f79..82ab1d8 100644
--- a/runtime/syntax/bzr.vim
+++ b/runtime/syntax/bzr.vim
@@ -2,9 +2,14 @@
 " Language:     Bazaar (bzr) commit file
 " Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
 " URL:          http://www.hlabs.spb.ru/vim/bzr.vim
-" Revision:     $Id$
+" Last Change:  2009-01-27
 " Filenames:    bzr_log.*
-" Version:      1.1
+" Version:      1.2.1
+"
+" Thanks:
+"
+"    Gioele Barabucci
+"       for idea of diff highlighting
 
 " For version 5.x: Clear all syntax items.
 " For version 6.x: Quit when a syntax file was already loaded.
@@ -14,13 +19,21 @@
   finish
 endif
 
-syn region bzrRegion   start="^-\{14} This line and the following will be ignored -\{14}$" end="\%$" contains=ALL contains=@NoSpell
+if exists("bzr_highlight_diff")
+  syn include @Diff syntax/diff.vim
+endif
+
 syn match bzrRemoved   "^removed:$" contained
 syn match bzrAdded     "^added:$" contained
 syn match bzrRenamed   "^renamed:$" contained
 syn match bzrModified  "^modified:$" contained
 syn match bzrUnchanged "^unchanged:$" contained
 syn match bzrUnknown   "^unknown:$" contained
+syn cluster Statuses contains=bzrRemoved,bzrAdded,bzrRenamed,bzrModified,bzrUnchanged,bzrUnknown
+if exists("bzr_highlight_diff")
+  syn cluster Statuses add=@Diff
+endif
+syn region bzrRegion   start="^-\{14} This line and the following will be ignored -\{14}$" end="\%$" contains=@NoSpell,@Statuses
 
 " Synchronization.
 syn sync clear
@@ -37,7 +50,6 @@
     command -nargs=+ HiLink hi def link <args>
   endif
 
-  HiLink bzrRegion     Comment
   HiLink bzrRemoved    Constant
   HiLink bzrAdded      Identifier
   HiLink bzrModified   Special
diff --git a/runtime/syntax/c.vim b/runtime/syntax/c.vim
index 07df36b..9456212 100644
--- a/runtime/syntax/c.vim
+++ b/runtime/syntax/c.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2008 Mar 19
+" Last Change:	2009 Nov 17
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -16,8 +16,13 @@
 
 syn keyword	cTodo		contained TODO FIXME XXX
 
+" It's easy to accidentally add a space after a backslash that was intended
+" for line continuation.  Some compilers allow it, which makes it
+" unpredicatable and should be avoided.
+syn match	cBadContinuation contained "\\\s\+$"
+
 " cCommentGroup allows adding matches for special things in comments
-syn cluster	cCommentGroup	contains=cTodo
+syn cluster	cCommentGroup	contains=cTodo,cBadContinuation
 
 " String and Character constants
 " Highlight special characters (those which have a backslash) differently
@@ -265,7 +270,7 @@
 endif
 
 " Accept %: for # (C99)
-syn region	cPreCondit	start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=cComment,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
+syn region	cPreCondit	start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$"  contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
 syn match	cPreCondit	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
 if !exists("c_no_if0")
   if !exists("c_no_if0_fold")
@@ -281,7 +286,7 @@
 syn match	cInclude	display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
 "syn match cLineSkip	"\\$"
 syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti
-syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 keepend contains=ALLBUT,@cPreProcGroup,@Spell
+syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
 syn region	cPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
 
 " Highlight User Labels
@@ -359,6 +364,7 @@
 hi def link cComment		Comment
 hi def link cSpecial		SpecialChar
 hi def link cTodo		Todo
+hi def link cBadContinuation	Error
 hi def link cCppSkip		cCppOut
 hi def link cCppOut2		cCppOut
 hi def link cCppOut		Comment
diff --git a/runtime/syntax/catalog.vim b/runtime/syntax/catalog.vim
index 4dbff00..0a1d511 100644
--- a/runtime/syntax/catalog.vim
+++ b/runtime/syntax/catalog.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 " Last Change:	Fr, 04 Nov 2005 12:46:45 CET
 " Filenames:	/etc/sgml.catalog
-" $Id$
+" $Id: catalog.vim,v 1.2 2005/11/23 21:11:10 vimboss Exp $
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
diff --git a/runtime/syntax/cl.vim b/runtime/syntax/cl.vim
index 750cfde..b278eca 100644
--- a/runtime/syntax/cl.vim
+++ b/runtime/syntax/cl.vim
@@ -3,7 +3,7 @@
 " Filename extensions: *.ent, *.eni
 " Maintainer:	Philip Uren <philuSPAX@ieee.org> - Remove SPAX spam block
 " Last update:	Wed Apr 12 08:47:18 EST 2006
-" $Id$
+" $Id: cl.vim,v 1.3 2006/04/12 21:43:28 vimboss Exp $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/cmake.vim b/runtime/syntax/cmake.vim
index 4dd5c3a..ab96329 100644
--- a/runtime/syntax/cmake.vim
+++ b/runtime/syntax/cmake.vim
@@ -1,10 +1,10 @@
 " =============================================================================
 "
 "   Program:   CMake - Cross-Platform Makefile Generator
-"   Module:    $RCSfile$
+"   Module:    $RCSfile: cmake-syntax.vim,v $
 "   Language:  VIM
-"   Date:      $Date$
-"   Version:   $Revision$
+"   Date:      $Date: 2006/09/23 21:09:08 $
+"   Version:   $Revision: 1.6 $
 "
 " =============================================================================
 
@@ -12,8 +12,8 @@
 " Language:     CMake
 " Author:       Andy Cedilnik <andy.cedilnik@kitware.com>
 " Maintainer:   Andy Cedilnik <andy.cedilnik@kitware.com>
-" Last Change:  $Date$
-" Version:      $Revision$
+" Last Change:  $Date: 2006/09/23 21:09:08 $
+" Version:      $Revision: 1.6 $
 "
 " Licence:      The CMake license applies to this file. See
 "               http://www.cmake.org/HTML/Copyright.html
diff --git a/runtime/syntax/cobol.vim b/runtime/syntax/cobol.vim
index dce2d36..5315e75 100644
--- a/runtime/syntax/cobol.vim
+++ b/runtime/syntax/cobol.vim
@@ -4,7 +4,7 @@
 "     (formerly Davyd Ondrejko <vondraco@columbus.rr.com>)
 "     (formerly Sitaram Chamarty <sitaram@diac.com> and
 "		    James Mitchell <james_mitchell@acm.org>)
-" $Id$
+" $Id: cobol.vim,v 1.2 2007/05/05 18:23:43 vimboss Exp $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/config.vim b/runtime/syntax/config.vim
index c02799d..20ca19c 100644
--- a/runtime/syntax/config.vim
+++ b/runtime/syntax/config.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:		configure.in script: M4 with sh
 " Maintainer:	Christian Hammesr <ch@lathspell.westend.com>
-" Last Change:	2001 May 09
+" Last Change:	2008 Sep 03
 
 " Well, I actually even do not know much about m4. This explains why there
 " is probably very much missing here, yet !
@@ -26,7 +26,7 @@
 syn keyword configkeyword   if then else fi test for in do done
 syn keyword configspecial   cat rm eval
 syn region  configstring    start=+"+ skip=+\\"+ end=+"+
-syn region  configstring    start=+`+ skip=+\\'+ end=+'+
+syn region  configstring    start=+'+ skip=+\\'+ end=+'+
 syn region  configstring    start=+`+ skip=+\\'+ end=+`+
 
 " Define the default highlighting.
diff --git a/runtime/syntax/cs.vim b/runtime/syntax/cs.vim
index 8b63e48..2ba629f 100644
--- a/runtime/syntax/cs.vim
+++ b/runtime/syntax/cs.vim
@@ -2,9 +2,9 @@
 " Language:	C#
 " Maintainer:	Anduin Withers <awithers@anduin.com>
 " Former Maintainer:	Johannes Zellner <johannes@zellner.org>
-" Last Change:	Sun Apr 30 19:26:18 PDT 2006
+" Last Change:	Fri Aug 14 13:56:37 PDT 2009
 " Filenames:	*.cs
-" $Id$
+" $Id: cs.vim,v 1.4 2006/05/03 21:20:02 vimboss Exp $
 "
 " REFERENCES:
 " [1] ECMA TC39: C# Language Specification (WD13Oct01.doc)
@@ -78,8 +78,8 @@
 syn cluster xmlTagHook add=csXmlTag
 
 syn match   csXmlCommentLeader	+\/\/\/+    contained
-syn match   csXmlComment	+\/\/\/.*$+ contains=csXmlCommentLeader,@csXml
-syntax include @csXml <sfile>:p:h/xml.vim
+syn match   csXmlComment	+\/\/\/.*$+ contains=csXmlCommentLeader,@csXml,@Spell
+syntax include @csXml syntax/xml.vim
 hi def link xmlRegion Comment
 
 
@@ -100,7 +100,7 @@
 " unicode characters
 syn match   csUnicodeNumber	+\\\(u\x\{4}\|U\x\{8}\)+ contained contains=csUnicodeSpecifier
 syn match   csUnicodeSpecifier	+\\[uU]+ contained
-syn region  csVerbatimString	start=+@"+ end=+"+ end=+$+ skip=+""+ contains=csVerbatimSpec,@Spell
+syn region  csVerbatimString	start=+@"+ end=+"+ skip=+""+ contains=csVerbatimSpec,@Spell
 syn match   csVerbatimSpec	+@"+he=s+1 contained
 syn region  csString		start=+"+  end=+"+ end=+$+ contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell
 syn match   csCharacter		"'[^']*'" contains=csSpecialChar,csSpecialCharError
diff --git a/runtime/syntax/debchangelog.vim b/runtime/syntax/debchangelog.vim
index e751fbc..040d48d 100644
--- a/runtime/syntax/debchangelog.vim
+++ b/runtime/syntax/debchangelog.vim
@@ -3,7 +3,7 @@
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2008-01-16
+" Last Change: 2009 Jun 05
 " URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/syntax/debchangelog.vim;hb=debian
 
 " Standard syntax initialization
@@ -17,9 +17,9 @@
 syn case ignore
 
 " Define some common expressions we can use later on
-syn match debchangelogName	contained "^[[:alpha:]][[:alnum:].+-]\+ "
+syn match debchangelogName	contained "^[[:alnum:]][[:alnum:].+-]\+ "
 syn match debchangelogUrgency	contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
-syn match debchangelogTarget	contained "\v %(%(old)=stable|frozen|unstable|%(testing-|%(old)=stable-)=proposed-updates|experimental|%(sarge|etch|lenny)-%(backports|volatile)|%(testing|%(old)=stable)-security|%(dapper|feisty|gutsy|hardy|intrepid)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
+syn match debchangelogTarget	contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|%(etch|lenny)-%(backports|volatile)|%(dapper|hardy|intrepid|jaunty|karmic)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
 syn match debchangelogVersion	contained "(.\{-})"
 syn match debchangelogCloses	contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
 syn match debchangelogLP	contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"
diff --git a/runtime/syntax/debcontrol.vim b/runtime/syntax/debcontrol.vim
index d56a342..e886f01 100644
--- a/runtime/syntax/debcontrol.vim
+++ b/runtime/syntax/debcontrol.vim
@@ -3,7 +3,7 @@
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2008-02-23
+" Last Change: 2009 July 14
 " URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/ftplugin/debcontrol.vim;hb=debian
 
 " Comments are very welcome - but please make sure that you are commenting on
@@ -28,10 +28,10 @@
 syn match debControlSpace " "
 
 " Define some common expressions we can use later on
-syn match debcontrolArchitecture contained "\(all\|any\|alpha\|amd64\|arm\(e[bl]\)\=\|hppa\|i386\|ia64\|m32r\|m68k\|mipsel\|mips\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc64\|sparc\|hurd-i386\|kfreebsd-\(i386\|gnu\)\|knetbsd-i386\|netbsd-\(alpha\|i386\)\)"
+syn match debcontrolArchitecture contained "\(all\|any\|alpha\|amd64\|arm\(e[bl]\)\=\|avr32\|hppa\|i386\|ia64\|m32r\|m68k\|mipsel\|mips\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc64\|sparc\|hurd-i386\|kfreebsd-\(i386\|amd64\|gnu\)\|knetbsd-i386\|netbsd-\(alpha\|i386\)\)"
 syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
 syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
-syn match debcontrolSection contained "\(\(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\(admin\|base\|comm\|devel\|doc\|editors\|electronics\|embedded\|games\|gnome\|graphics\|hamradio\|interpreters\|kde\|libs\|libdevel\|mail\|math\|misc\|net\|news\|oldlibs\|otherosfs\|perl\|python\|science\|shells\|sound\|text\|tex\|utils\|web\|x11\|debian-installer\)"
+syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
 syn match debcontrolPackageType contained "u\?deb"
 syn match debcontrolVariable contained "\${.\{-}}"
 syn match debcontrolDmUpload contained "\cyes"
@@ -41,7 +41,7 @@
 syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
 syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
 syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
-syn match debcontrolVcsGit contained "\vgit://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
+syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
 
 " An email address
 syn match	debcontrolEmail	"[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
@@ -53,7 +53,7 @@
 syn case ignore
 
 " List of all legal keys
-syn match debcontrolKey contained "^\(Source\|Package\|Section\|Priority\|Maintainer\|Uploaders\|Build-Depends\|Build-Conflicts\|Build-Depends-Indep\|Build-Conflicts-Indep\|Standards-Version\|Pre-Depends\|Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Essential\|Architecture\|Description\|Bugs\|Origin\|Enhances\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
+syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Essential\|Architecture\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
 
 " Fields for which we do strict syntax checking
 syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
@@ -62,15 +62,15 @@
 syn region debcontrolStrictField start="^Section" end="$" contains=debcontrolKey,debcontrolSection oneline
 syn region debcontrolStrictField start="^XC-Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
 syn region debcontrolStrictField start="^Homepage" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
-syn region debcontrolStrictField start="^\%(XS-\)\?Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
-syn region debcontrolStrictField start="^\%(XS-\)\?Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
-syn region debcontrolStrictField start="^\%(XS-\)\?Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
-syn region debcontrolStrictField start="^\%(XS-\)\?Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
-syn region debcontrolStrictField start="^\%(XS-\)\?DM-Upload-Allowed" end="$" contains=debcontrolKey,debcontrolDmUpload oneline
+syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
+syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
+syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
+syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
+syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolKey,debcontrolDmUpload oneline
 
 " Catch-all for the other legal fields
-syn region debcontrolField start="^\(Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X\(S\|B\)-Python-Version\|XSBC-Original-Maintainer\|\(XS-\)\?Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
-syn region debcontrolMultiField start="^\(Build-\(Conflicts\|Depends\)\(-Indep\)\=\|\(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ ]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable
+syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
+syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
 
 " Associate our matches and regions with pretty colours
 if version >= 508 || !exists("did_debcontrol_syn_inits")
diff --git a/runtime/syntax/debsources.vim b/runtime/syntax/debsources.vim
index 0ae05ab..52ce6d7 100644
--- a/runtime/syntax/debsources.vim
+++ b/runtime/syntax/debsources.vim
@@ -2,7 +2,7 @@
 " Language:     Debian sources.list
 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2008-04-25
+" Last Change: 2009 Apr 17
 " URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/syntax/debsources.vim;hb=debian
 
 " Standard syntax initialization
@@ -19,11 +19,11 @@
 syn match debsourcesKeyword        /\(deb-src\|deb\|main\|contrib\|non-free\|restricted\|universe\|multiverse\)/
 
 " Match comments
-syn match debsourcesComment        /#.*/
+syn match debsourcesComment        /#.*/  contains=@Spell
 
 " Match uri's
 syn match debsourcesUri            +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' 	<>"]\++
-syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(sarge\|etch\|lenny\|\(old\)\=stable\|testing\|unstable\|sid\|experimental\|dapper\|feisty\|gutsy\|hardy\|intrepid\)\([-[:alnum:]_./]*\)+
+syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(etch\|lenny\|squeeze\|\(old\)\=stable\|testing\|unstable\|sid\|experimental\|dapper\|hardy\|intrepid\|jaunty\|karmic\)\([-[:alnum:]_./]*\)+
 
 " Associate our matches and regions with pretty colours
 hi def link debsourcesLine            Error
diff --git a/runtime/syntax/def.vim b/runtime/syntax/def.vim
index 48518d7..5efb41b 100644
--- a/runtime/syntax/def.vim
+++ b/runtime/syntax/def.vim
@@ -2,8 +2,8 @@
 " Language:	Microsoft Module-Definition (.def) File
 " Orig Author:	Rob Brady <robb@datatone.com>
 " Maintainer:	Wu Yongwei <wuyongwei@gmail.com>
-" Last Change:	$Date$
-" $Revision$
+" Last Change:	$Date: 2007/10/02 13:51:24 $
+" $Revision: 1.2 $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/django.vim b/runtime/syntax/django.vim
index 3ad4816..da35406 100644
--- a/runtime/syntax/django.vim
+++ b/runtime/syntax/django.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Django template
 " Maintainer:	Dave Hodder <dmh@dmh.org.uk>
-" Last Change:	2007 Apr 21
+" Last Change:	2008 Dec 18
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -18,8 +18,9 @@
 
 " Django template built-in tags and parameters
 " 'comment' doesn't appear here because it gets special treatment
+syn keyword djangoStatement contained autoescape on off endautoescape
 syn keyword djangoStatement contained and as block endblock by cycle debug else
-syn keyword djangoStatement contained extends filter endfilter firstof for
+syn keyword djangoStatement contained extends filter endfilter firstof for empty
 syn keyword djangoStatement contained endfor if endif ifchanged endifchanged
 syn keyword djangoStatement contained ifequal endifequal ifnotequal
 syn keyword djangoStatement contained endifnotequal in include load not now or
@@ -35,15 +36,15 @@
 " Django templete built-in filters
 syn keyword djangoFilter contained add addslashes capfirst center cut date
 syn keyword djangoFilter contained default default_if_none dictsort
-syn keyword djangoFilter contained dictsortreversed divisibleby escape
+syn keyword djangoFilter contained dictsortreversed divisibleby escape escapejs
 syn keyword djangoFilter contained filesizeformat first fix_ampersands
-syn keyword djangoFilter contained floatformat get_digit join length length_is
+syn keyword djangoFilter contained floatformat force_escape get_digit iriencode join last length length_is
 syn keyword djangoFilter contained linebreaks linebreaksbr linenumbers ljust
 syn keyword djangoFilter contained lower make_list phone2numeric pluralize
-syn keyword djangoFilter contained pprint random removetags rjust slice slugify
+syn keyword djangoFilter contained pprint random removetags rjust safe slice slugify
 syn keyword djangoFilter contained stringformat striptags
 syn keyword djangoFilter contained time timesince timeuntil title
-syn keyword djangoFilter contained truncatewords unordered_list upper urlencode
+syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode
 syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno
 
 " Keywords to highlight within comments
diff --git a/runtime/syntax/docbk.vim b/runtime/syntax/docbk.vim
index b763fb0..73c1cb4 100644
--- a/runtime/syntax/docbk.vim
+++ b/runtime/syntax/docbk.vim
@@ -2,8 +2,8 @@
 " Language:	DocBook
 " Maintainer:	Devin Weaver <vim@tritarget.com>
 " URL:		http://tritarget.com/pub/vim/syntax/docbk.vim
-" Last Change:	$Date$
-" Version:	$Revision$
+" Last Change:	$Date: 2005/06/23 22:31:01 $
+" Version:	$Revision: 1.2 $
 " Thanks to Johannes Zellner <johannes@zellner.org> for the default to XML
 " suggestion.
 
diff --git a/runtime/syntax/dosbatch.vim b/runtime/syntax/dosbatch.vim
index 8c01299..d9b1aa6 100644
--- a/runtime/syntax/dosbatch.vim
+++ b/runtime/syntax/dosbatch.vim
@@ -2,7 +2,7 @@
 " Language:	MSDOS batch file (with NT command extensions)
 " Maintainer:	Mike Williams <mrw@eandem.co.uk>
 " Filenames:    *.bat
-" Last Change:	10th May 2008
+" Last Change:	6th September 2009
 " Web Page:     http://www.eandem.co.uk/mrw/vim
 "
 " Options Flags:
@@ -36,7 +36,7 @@
 syn case match
 syn keyword dosbatchOperator    EQU NEQ LSS LEQ GTR GEQ
 syn case ignore
-syn match dosbatchOperator      "\s[-+\*/%]\s"
+syn match dosbatchOperator      "\s[-+\*/%!~]\s"
 syn match dosbatchOperator      "="
 syn match dosbatchOperator      "[-+\*/%]="
 syn match dosbatchOperator      "\s\(&\||\|^\|<<\|>>\)=\=\s"
@@ -51,10 +51,10 @@
 syn match dosbatchCmd		"(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator
 
 " Numbers - surround with ws to not include in dir and filenames
-syn match dosbatchInteger       "[[:space:]=(/:]\d\+"lc=1
-syn match dosbatchHex		"[[:space:]=(/:]0x\x\+"lc=1
-syn match dosbatchBinary	"[[:space:]=(/:]0b[01]\+"lc=1
-syn match dosbatchOctal		"[[:space:]=(/:]0\o\+"lc=1
+syn match dosbatchInteger       "[[:space:]=(/:,!~-]\d\+"lc=1
+syn match dosbatchHex		"[[:space:]=(/:,!~-]0x\x\+"lc=1
+syn match dosbatchBinary	"[[:space:]=(/:,!~-]0b[01]\+"lc=1
+syn match dosbatchOctal		"[[:space:]=(/:,!~-]0\o\+"lc=1
 syn cluster dosbatchNumber      contains=dosbatchInteger,dosbatchHex,dosbatchBinary,dosbatchOctal
 
 " Command line switches
@@ -69,15 +69,15 @@
 syn match dosbatchIdentifier    contained "\s\h\w*\>"
 syn match dosbatchVariable	"%\h\w*%"
 syn match dosbatchVariable	"%\h\w*:\*\=[^=]*=[^%]*%"
-syn match dosbatchVariable	"%\h\w*:\~\d\+,\d\+%" contains=dosbatchInteger
+syn match dosbatchVariable	"%\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=%" contains=dosbatchInteger
 syn match dosbatchVariable	"!\h\w*!"
-syn match dosbatchVariable	"!\h\w*:\*\=[^=]*=[^%]*!"
-syn match dosbatchVariable	"!\h\w*:\~\d\+,\d\+!" contains=dosbatchInteger
+syn match dosbatchVariable	"!\h\w*:\*\=[^=]*=[^!]*!"
+syn match dosbatchVariable	"!\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=!" contains=dosbatchInteger
 syn match dosbatchSet		"\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatchOperator
 
 " Args to bat files and for loops, etc
 syn match dosbatchArgument	"%\(\d\|\*\)"
-syn match dosbatchArgument	"%%[a-z]\>"
+syn match dosbatchArgument	"%[a-z]\>"
 if dosbatch_cmdextversion == 1
   syn match dosbatchArgument	"%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>"
 else
@@ -92,7 +92,9 @@
 
 " Comments - usual rem but also two colons as first non-space is an idiom
 syn match dosbatchComment	"^rem\($\|\s.*$\)"lc=3 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
+syn match dosbatchComment	"^@rem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
 syn match dosbatchComment	"\srem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
+syn match dosbatchComment	"\s@rem\($\|\s.*$\)"lc=5 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
 syn match dosbatchComment	"\s*:\s*:.*$" contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell
 
 " Comments in ()'s - still to handle spaces before rem
diff --git a/runtime/syntax/doxygen.vim b/runtime/syntax/doxygen.vim
index fb4d3cc..1aea3bf 100644
--- a/runtime/syntax/doxygen.vim
+++ b/runtime/syntax/doxygen.vim
@@ -2,8 +2,8 @@
 " Language:     doxygen on top of c, cpp, idl, java, php
 " Maintainer:   Michael Geddes <vimmer@frog.wheelycreek.net>
 " Author:       Michael Geddes
-" Last Change:  July 2008
-" Version:      1.22
+" Last Change:  Jan 2009
+" Version:      1.23
 "
 " Copyright 2004-2008 Michael Geddes
 " Please feel free to use, modify & distribute all or part of this script,
@@ -239,7 +239,7 @@
   " #Link hilighting.
   syn match doxygenHashLink /\([a-zA-Z_][0-9a-zA-Z_]*\)\?#\(\.[0-9a-zA-Z_]\@=\|[a-zA-Z0-9_]\+\|::\|()\)\+/ contained contains=doxygenHashSpecial
   syn match doxygenHashSpecial /#/ contained
-  syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@]\+/ contained
+  syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@~]\+/ contained
 
   " Handle \page.  This does not use doxygenBrief.
   syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage
diff --git a/runtime/syntax/dsl.vim b/runtime/syntax/dsl.vim
index 9b3cb56..95c7843 100644
--- a/runtime/syntax/dsl.vim
+++ b/runtime/syntax/dsl.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 " Last Change:	Tue, 27 Apr 2004 14:54:59 CEST
 " Filenames:	*.dsl
-" $Id$
+" $Id: dsl.vim,v 1.1 2004/06/13 19:13:31 vimboss Exp $
 
 if exists("b:current_syntax") | finish | endif
 
diff --git a/runtime/syntax/elf.vim b/runtime/syntax/elf.vim
index 6780489..621e063 100644
--- a/runtime/syntax/elf.vim
+++ b/runtime/syntax/elf.vim
@@ -4,7 +4,7 @@
 " Last Change: Son 22 Jun 2003 20:43:14 CEST
 " Filenames:   *.ab,*.am
 " URL:	       http://www.cvjb.de/comp/vim/elf.vim
-" $Id$
+" $Id: elf.vim,v 1.1 2004/06/13 19:52:27 vimboss Exp $
 "
 " ELF: Extensible Language Facility
 "      This is the Applix Inc., Macro and Builder programming language.
diff --git a/runtime/syntax/erlang.vim b/runtime/syntax/erlang.vim
index e3d6836..2f39d61 100644
--- a/runtime/syntax/erlang.vim
+++ b/runtime/syntax/erlang.vim
@@ -50,7 +50,7 @@
     " Operators
     syn match   erlangOperator         "+\|-\|\*\|\/"
     syn keyword erlangOperator         div rem or xor bor bxor bsl bsr
-    syn keyword erlangOperator         and band not bnot
+    syn keyword erlangOperator         and band not bnot andalso orelse
     syn match   erlangOperator         "==\|/=\|=:=\|=/=\|<\|=<\|>\|>="
     syn match   erlangOperator         "++\|--\|=\|!\|<-"
 
@@ -123,7 +123,7 @@
 
 if ! exists ("erlang_keywords")
     " Constants and Directives
-    syn match   erlangDirective  "-behaviour\|-behaviour"
+    syn match   erlangDirective  "-behaviour\|-behavior"
     syn match   erlangDirective  "-compile\|-define\|-else\|-endif\|-export\|-file"
     syn match   erlangDirective  "-ifdef\|-ifndef\|-import\|-include_lib\|-include"
     syn match   erlangDirective  "-module\|-record\|-undef"
diff --git a/runtime/syntax/eruby.vim b/runtime/syntax/eruby.vim
index 46e5704..1e45ffd 100644
--- a/runtime/syntax/eruby.vim
+++ b/runtime/syntax/eruby.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.info>
-" Info:			$Id$
+" Info:			$Id: eruby.vim,v 1.23 2008/06/29 04:18:43 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/syntax/focexec.vim b/runtime/syntax/focexec.vim
index 884c37e..8be1b65 100644
--- a/runtime/syntax/focexec.vim
+++ b/runtime/syntax/focexec.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:	Focus Executable
 " Maintainer:	Rob Brady <robb@datatone.com>
-" Last Change:	$Date$
+" Last Change:	$Date: 2004/06/13 15:38:04 $
 " URL:		http://www.datatone.com/~robb/vim/syntax/focexec.vim
-" $Revision$
+" $Revision: 1.1 $
 
 " this is a very simple syntax file - I will be improving it
 " one thing is how to do computes
diff --git a/runtime/syntax/form.vim b/runtime/syntax/form.vim
index 726bf47..19a47ed 100644
--- a/runtime/syntax/form.vim
+++ b/runtime/syntax/form.vim
@@ -1,7 +1,10 @@
 " Vim syntax file
 " Language:	FORM
+" Version: 2.0
 " Maintainer:	Michael M. Tung <michael.tung@uni-mainz.de>
-" Last Change:	2001 May 10
+" Last Change: <Thu Oct 23 13:11:21 CEST 2008>
+" Past Change: <October 2008 Thomas Reiter thomasr@nikhef.nl>
+" Past Change: <Wed, 2005/05/25 09:24:58 arwagner wptx44>
 
 " First public release based on 'Symbolic Manipulation with FORM'
 " by J.A.M. Vermaseren, CAN, Netherlands, 1991.
@@ -18,30 +21,73 @@
 
 syn case ignore
 
-" A bunch of useful FORM keywords
+" a bunch of useful FORM keywords
 syn keyword formType		global local
 syn keyword formHeaderStatement	symbol symbols cfunction cfunctions
 syn keyword formHeaderStatement	function functions vector vectors
-syn keyword formHeaderStatement	set sets index indices
+syn keyword formHeaderStatement tensor tensors ctensor ctensors
+syn keyword formHeaderStatement	set sets index indices table ctable
 syn keyword formHeaderStatement	dimension dimensions unittrace
-syn keyword formStatement	id identify drop skip
-syn keyword formStatement	write nwrite
-syn keyword formStatement	format print nprint load save
-syn keyword formStatement	bracket brackets
-syn keyword formStatement	multiply count match only discard
-syn keyword formStatement	trace4 traceN contract symmetrize antisymmetrize
-syn keyword formConditional	if else endif while
+syn keyword formConditional	if else elseif endif while
 syn keyword formConditional	repeat endrepeat label goto
+syn keyword formConditional     argument endargument exit
+syn keyword formConditional     inexpression inside term
+syn keyword formConditional     endinexpression endinside endterm
+syn keyword formStatement       abrackets also antibrackets antisymmetrize
+syn keyword formStatement       argexplode argimplode apply auto autodeclare
+syn keyword formStatement       brackets chainin chainout chisholm cleartable
+syn keyword formStatement       collect commuting compress contract
+syn keyword formStatement       cyclesymmetrize deallocatetable delete
+syn keyword formStatement       dimension discard disorder drop factarg fill
+syn keyword formStatement       fillexpression fixindex format funpowers hide
+syn keyword formStatement       identify idnew idold ifmatch inparallel
+syn keyword formStatement       insidefirst keep load makeinteger many metric
+syn keyword formStatement       moduleoption modulus multi multiply ndrop
+syn keyword formStatement       nfunctions nhide normalize notinparallel
+syn keyword formStatement       nprint nskip ntable ntensors nunhide nwrite
+syn keyword formStatement       off on once only polyfun pophide print
+syn keyword formStatement       printtable propercount pushhide ratio
+syn keyword formStatement       rcyclesymmetrize redefine renumber
+syn keyword formStatement       replaceinarg replaceloop save select
+syn keyword formStatement       setexitflag skip slavepatchsize sort splitarg
+syn keyword formStatement       splitfirstarg splitlastarg sum symmetrize
+syn keyword formStatement       tablebase testuse threadbucketsize totensor
+syn keyword formStatement       tovector trace4 tracen tryreplace unhide
+syn keyword formStatement       unittrace vectors write
+" for compatibility with older FORM versions:
+syn keyword formStatement       id bracket count match traceN
 
 " some special functions
-syn keyword formStatement	g_ gi_ g5_ g6_ g7_ 5_ 6_ 7_
-syn keyword formStatement	e_ d_ delta_ theta_ sum_ sump_
+syn keyword formStatement       abs_ bernoulli_ binom_ conjg_ count_
+syn keyword formStatement       d_ dd_ delta_ deltap_ denom_ distrib_
+syn keyword formStatement       dum_ dummy_ dummyten_ e_ exp_ fac_
+syn keyword formStatement       factorin_ firstbracket_ g5_ g6_ g7_
+syn keyword formStatement       g_ gcd_ gi_ integer_ invfac_ match_
+syn keyword formStatement       max_ maxpowerof_ min_ minpowerof_
+syn keyword formStatement       mod_ nargs_ nterms_ pattern_ poly_
+syn keyword formStatement       polyadd_ polydiv_ polygcd_ polyintfac_
+syn keyword formStatement       polymul_ polynorm_ polyrem_ polysub_
+syn keyword formStatement       replace_ reverse_ root_ setfun_ sig_
+syn keyword formStatement       sign_ sum_ sump_ table_ tbl_ term_
+syn keyword formStatement       termsin_ termsinbracket_ theta_ thetap_ 
+syn keyword formStatement	5_ 6_ 7_
+
+syn keyword formReserved        sqrt_ ln_ sin_ cos_ tan_ asin_ acos_
+syn keyword formReserved        atan_ atan2_ sinh_ cosh_ tanh_ asinh_
+syn keyword formReserved        acosh_ atanh_ li2_ lin_ 
+
+syn keyword formTodo            contained TODO FIXME XXX
+
+syn match   formSpecial         display contained "\\\(n\|t\|b\|\\\|\"\)"
+syn match   formSpecial         display contained "%\(%\|e\|E\|s\|f\|\$\)"
+syn match   formSpecial         "\<N\d\+_[?]"
 
 " pattern matching for keywords
-syn match   formComment		"^\ *\*.*$"
-syn match   formComment		"\;\ *\*.*$"
-syn region  formString		start=+"+  end=+"+
+syn match   formComment		"^\ *\*.*$" contains=formTodo
+syn match   formComment		"\;\ *\*.*$" contains=formTodo
+syn region  formString		start=+"+  end=+"+ contains=formSpecial
 syn region  formString		start=+'+  end=+'+
+syn region  formNestedString	start=+`+  end=+'+ contains=formNestedString
 syn match   formPreProc		"^\=\#[a-zA-z][a-zA-Z0-9]*\>"
 syn match   formNumber		"\<\d\+\>"
 syn match   formNumber		"\<\d\+\.\d*\>"
@@ -50,6 +96,13 @@
 syn match   formNumber		"-\.\d" contains=Number
 syn match   formNumber		"i_\+\>"
 syn match   formNumber		"fac_\+\>"
+" pattern matching wildcards
+syn match   formNumber		"?[A-z0-9]*"
+" dollar-variables (new in 3.x)
+syn match   formNumber		"\\$[A-z0-9]*"
+" scalar products
+syn match   formNumber		"^\=[a-zA-z][a-zA-Z0-9]*\.[a-zA-z][a-zA-Z0-9]*\>"
+
 syn match   formDirective	"^\=\.[a-zA-z][a-zA-Z0-9]*\>"
 
 " hi User Labels
@@ -74,6 +127,10 @@
   HiLink formDirective		PreProc
   HiLink formType		Type
   HiLink formString		String
+  HiLink formNestedString	String
+  HiLink formReserved           Error
+  HiLink formTodo               Todo
+  HiLink formSpecial            SpecialChar
 
   if !exists("form_enhanced_color")
     HiLink formHeaderStatement	Statement
diff --git a/runtime/syntax/forth.vim b/runtime/syntax/forth.vim
index 8713a72..e0e8b77 100644
--- a/runtime/syntax/forth.vim
+++ b/runtime/syntax/forth.vim
@@ -5,7 +5,7 @@
 " Filenames:   *.fs,*.ft
 " URL:	       http://www.cvjb.de/comp/vim/forth.vim
 
-" $Id$
+" $Id: forth.vim,v 1.11 2008/02/09 13:17:01 bruessow Exp $
 
 " The list of keywords is incomplete, compared with the offical ANS
 " wordlist. If you use this language, please improve it, and send me
diff --git a/runtime/syntax/fortran.vim b/runtime/syntax/fortran.vim
index 1d160f2..3d323fb 100644
--- a/runtime/syntax/fortran.vim
+++ b/runtime/syntax/fortran.vim
@@ -2,7 +2,7 @@
 " Language:	Fortran95 (and Fortran90, Fortran77, F and elf90)
 " Version:	0.88
 " URL:		http://www.unb.ca/chem/ajit/syntax/fortran.vim
-" Last Change:	2006 Apr. 22
+" Last Change:	2008 Nov 01
 " Maintainer:	Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
 " Usage:	Do :help fortran-syntax from Vim
 " Credits:
@@ -300,7 +300,7 @@
     syn match fortranLabelError	"^.\{-,4}[^0-9 ]" contains=fortranTab
     syn match fortranLabelError	"^.\{4}\d\S"
   endif
-  syn match fortranComment		excludenl "^[!c*].*$" contains=@fortranCommentGroup
+  syn match fortranComment		excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell
   syn match fortranLeftMargin		transparent "^ \{5}"
   syn match fortranContinueMark		display "^.\{5}\S"lc=5
 else
diff --git a/runtime/syntax/fstab.vim b/runtime/syntax/fstab.vim
index 830b8d0..9bee894 100644
--- a/runtime/syntax/fstab.vim
+++ b/runtime/syntax/fstab.vim
@@ -2,14 +2,15 @@
 " Language: fstab file
 " Maintaner: Radu Dineiu <radu.dineiu@gmail.com>
 " URL: http://ld.yi.org/vim/fstab.vim
-" Last Change: 2008 Jan 16
-" Version: 0.92
+" Last Change: 2009 Feb 04
+" Version: 0.93
 "
 " Credits:
 "   David Necas (Yeti) <yeti@physics.muni.cz>
 "   Stefano Zacchiroli <zack@debian.org>
 "   Georgi Georgiev <chutz@gg3.net>
 "   James Vega <jamessan@debian.org>
+"   Elias Probst <mail@eliasprobst.eu>
 "
 " Options:
 "   let fstab_unknown_fs_errors = 1
@@ -46,7 +47,7 @@
 " Type
 syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown
 syn match fsTypeUnknown /\s\+\zs\w\+/ contained
-syn keyword fsTypeKeyword contained adfs ados affs atfs audiofs auto autofs befs bfs cd9660 cfs cifs coda cramfs devfs devpts e2compr efs ext2 ext2fs ext3 fdesc ffs filecore fuse hfs hpfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix msdos ncpfs nfs none ntfs null nwfs overlay ovlfs portal proc procfs ptyfs qnx4 reiserfs romfs shm smbfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xfs zisofs
+syn keyword fsTypeKeyword contained adfs ados affs atfs audiofs auto autofs befs bfs cd9660 cfs cifs coda cramfs devfs devpts e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse hfs hpfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix msdos ncpfs nfs none ntfs null nwfs overlay ovlfs portal proc procfs ptyfs qnx4 reiserfs romfs shm smbfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xfs zisofs
 
 " Options
 " -------
@@ -91,7 +92,21 @@
 syn match fsOptionsKeywords contained /\<commit=/ nextgroup=fsOptionsNumber
 syn keyword fsOptionsExt3Journal contained update inum
 syn keyword fsOptionsExt3Data contained journal ordered writeback
-syn keyword fsOptionsKeywords contained noload
+syn keyword fsOptionsKeywords contained noload user_xattr nouser_xattr acl noacl
+
+" Options: ext4
+syn match fsOptionsKeywords contained /\<journal=/ nextgroup=fsOptionsExt4Journal
+syn match fsOptionsKeywords contained /\<data=/ nextgroup=fsOptionsExt4Data
+syn match fsOptionsKeywords contained /\<barrier=/ nextgroup=fsOptionsExt4Barrier
+syn match fsOptionsKeywords contained /\<journal_dev=/ nextgroup=fsOptionsNumber
+syn match fsOptionsKeywords contained /\<resuid=/ nextgroup=fsOptionsNumber
+syn match fsOptionsKeywords contained /\<resgid=/ nextgroup=fsOptionsNumber
+syn match fsOptionsKeywords contained /\<sb=/ nextgroup=fsOptionsNumber
+syn match fsOptionsKeywords contained /\<commit=/ nextgroup=fsOptionsNumber
+syn keyword fsOptionsExt4Journal contained update inum
+syn keyword fsOptionsExt4Data contained journal ordered writeback
+syn match fsOptionsExt4Barrier /[0-1]/
+syn keyword fsOptionsKeywords contained noload extents orlov oldalloc user_xattr nouser_xattr acl noacl reservation noreservation bsddf minixdf check=none nocheck debug grpid nogroupid sysvgroups bsdgroups quota noquota grpquota usrquota bh nobh
 
 " Options: fat
 syn match fsOptionsKeywords contained /\<blocksize=/ nextgroup=fsOptionsSize
@@ -241,6 +256,9 @@
 	HiLink fsOptionsExt2Errors String
 	HiLink fsOptionsExt3Journal String
 	HiLink fsOptionsExt3Data String
+	HiLink fsOptionsExt4Journal String
+	HiLink fsOptionsExt4Data String
+	HiLink fsOptionsExt4Barrier Number
 	HiLink fsOptionsFatCheck String
 	HiLink fsOptionsConv String
 	HiLink fsOptionsFatType Number
diff --git a/runtime/syntax/gdb.vim b/runtime/syntax/gdb.vim
index c874a04..aada70e 100644
--- a/runtime/syntax/gdb.vim
+++ b/runtime/syntax/gdb.vim
@@ -2,7 +2,7 @@
 " Language:	GDB command files
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/gdb.vim
-" Last Change:	2003 Jan 04
+" Last Change:	2009 May 25
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -35,7 +35,7 @@
 " some commonly used abreviations
 syn keyword gdbStatement c disp undisp disas p
 
-syn region gdbDocument matchgroup=gdbFuncDef start="\<document\>.*$" matchgroup=gdbFuncDef end="^end$"
+syn region gdbDocument matchgroup=gdbFuncDef start="\<document\>.*$" matchgroup=gdbFuncDef end="^end\s*$"
 
 syn match gdbStatement "\<add-shared-symbol-files\>"
 syn match gdbStatement "\<add-symbol-file\>"
diff --git a/runtime/syntax/git.vim b/runtime/syntax/git.vim
index fd76b73..feb7084 100644
--- a/runtime/syntax/git.vim
+++ b/runtime/syntax/git.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	generic git output
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
-" Last Change:	2008 Mar 21
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2009 Dec 24
 
 if exists("b:current_syntax")
     finish
@@ -13,14 +13,19 @@
 syn include @gitDiff syntax/diff.vim
 
 syn region gitHead start=/\%^/ end=/^$/
-syn region gitHead start=/\%(^commit \x\{40\}$\)\@=/ end=/^$/
+syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/
 
 " For git reflog and git show ...^{tree}, avoid sync issues
 syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/
 syn match gitHead /^\x\{40\} \x\{40}\t.*/
 
-syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --git \|$\)\@=/ contains=@gitDiff fold
-syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --git \|$\)\@=/ contains=@gitDiff
+syn region gitDiff start=/^\%(diff --git \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff fold
+syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) \|$\)\@=/ contains=@gitDiff
+
+syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
+syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff
+syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge
+syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge
 
 syn match  gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite
 syn match  gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite
@@ -29,8 +34,6 @@
 syn match  gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
 syn match  gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite
 syn match  gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite
-syn match  gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite
-syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity
 
 syn match  gitReflogHeader /^Reflog:/ contained containedin=gitHead nextgroup=gitReflogMiddle skipwhite
 syn match  gitReflogHeader /^Reflog message:/ contained containedin=gitHead skipwhite
@@ -42,14 +45,20 @@
 syn match  gitType      /\<\%(tag\|commit\|tree\|blob\)\>/     contained nextgroup=gitHash skipwhite
 syn match  gitStage     /\<\d\t\@=/                            contained
 syn match  gitReference /\S\+\S\@!/                            contained
-syn match  gitHash      /\<\x\{40\}\>/                         contained nextgroup=gitIdentity,gitStage skipwhite
+syn match  gitHash      /\<\x\{40\}\>/                         contained nextgroup=gitIdentity,gitStage,gitHash skipwhite
 syn match  gitHash      /^\<\x\{40\}\>/ containedin=gitHead contained nextgroup=gitHash skipwhite
+syn match  gitHashAbbrev /\<\x\{4,40\}\>/           contained nextgroup=gitHashAbbrev skipwhite
 syn match  gitHashAbbrev /\<\x\{4,39\}\.\.\./he=e-3 contained nextgroup=gitHashAbbrev skipwhite
-syn match  gitHashAbbrev /\<\x\{40\}\>/             contained nextgroup=gitHashAbbrev skipwhite
+
+syn match  gitIdentity /\S.\{-\} <[^>]*>/ contained nextgroup=gitDate skipwhite
+syn region gitEmail matchgroup=gitEmailDelimiter start=/</ end=/>/ keepend oneline contained containedin=gitIdentity
+
+syn match  gitNotesHeader /^Notes:\ze\n    /
 
 hi def link gitDateHeader        gitIdentityHeader
 hi def link gitIdentityHeader    gitIdentityKeyword
 hi def link gitIdentityKeyword   Label
+hi def link gitNotesHeader       gitKeyword
 hi def link gitReflogHeader      gitKeyword
 hi def link gitKeyword           Keyword
 hi def link gitIdentity          String
@@ -63,5 +72,7 @@
 hi def link gitReference         Function
 hi def link gitStage             gitType
 hi def link gitType              Type
+hi def link gitDiffAdded         diffAdded
+hi def link gitDiffRemoved       diffRemoved
 
 let b:current_syntax = "git"
diff --git a/runtime/syntax/gitcommit.vim b/runtime/syntax/gitcommit.vim
index e75d044..12db0a4 100644
--- a/runtime/syntax/gitcommit.vim
+++ b/runtime/syntax/gitcommit.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	git commit file
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	*.git/COMMIT_EDITMSG
-" Last Change:	2008 Apr 09
+" Last Change:	2009 Dec 24
 
 if exists("b:current_syntax")
     finish
@@ -16,48 +16,66 @@
 endif
 
 syn include @gitcommitDiff syntax/diff.vim
-syn region gitcommitDiff start=/\%(^diff --git \)\@=/ end=/^$\|^#\@=/ contains=@gitcommitDiff
+syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^$\|^#\@=/ contains=@gitcommitDiff
 
 syn match   gitcommitFirstLine	"\%^[^#].*"  nextgroup=gitcommitBlank skipnl
-syn match   gitcommitSummary  	"^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
+syn match   gitcommitSummary	"^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
 syn match   gitcommitOverflow	".*" contained contains=@Spell
 syn match   gitcommitBlank	"^[^#].*" contained contains=@Spell
 syn match   gitcommitComment	"^#.*"
-syn region  gitcommitHead	start=/^#   / end=/^#$/ contained transparent
+syn match   gitcommitHead	"^\%(#   .*\n\)\+#$" contained transparent
 syn match   gitcommitOnBranch	"\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
-syn match   gitcommitBranch	"\S\+" contained
+syn match   gitcommitOnBranch	"\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
+syn match   gitcommitBranch	"[^ \t']\+" contained
+syn match   gitcommitNoBranch	"\%(^# \)\@<=Not currently on any branch." contained containedin=gitcommitComment
 syn match   gitcommitHeader	"\%(^# \)\@<=.*:$"	contained containedin=gitcommitComment
+syn region  gitcommitAuthor	matchgroup=gitCommitHeader start=/\%(^# \)\@<=Author:/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
+syn match   gitcommitNoChanges	"\%(^# \)\@<=No changes$" contained containedin=gitcommitComment
 
 syn region  gitcommitUntracked	start=/^# Untracked files:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUntrackedFile fold
 syn match   gitcommitUntrackedFile  "\t\@<=.*"	contained
 
 syn region  gitcommitDiscarded	start=/^# Changed but not updated:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
 syn region  gitcommitSelected	start=/^# Changes to be committed:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitSelectedType fold
+syn region  gitcommitUnmerged	start=/^# Unmerged paths:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUnmergedType fold
 
 syn match   gitcommitDiscardedType	"\t\@<=[a-z][a-z ]*[a-z]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitDiscardedFile skipwhite
 syn match   gitcommitSelectedType	"\t\@<=[a-z][a-z ]*[a-z]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitSelectedFile skipwhite
+syn match   gitcommitUnmergedType	"\t\@<=[a-z][a-z ]*[a-z]: "he=e-2	contained containedin=gitcommitComment nextgroup=gitcommitUnmergedFile skipwhite
 syn match   gitcommitDiscardedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitDiscardedArrow
 syn match   gitcommitSelectedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
+syn match   gitcommitUnmergedFile	".\{-\}\%($\| -> \)\@=" contained nextgroup=gitcommitSelectedArrow
 syn match   gitcommitDiscardedArrow	" -> " contained nextgroup=gitcommitDiscardedFile
 syn match   gitcommitSelectedArrow	" -> " contained nextgroup=gitcommitSelectedFile
+syn match   gitcommitUnmergedArrow	" -> " contained nextgroup=gitcommitSelectedFile
+
+syn match   gitcommitWarning		"\%^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl
+syn match   gitcommitWarning		"^[^#].*: needs merge$" nextgroup=gitcommitWarning skipnl contained
+syn match   gitcommitWarning		"^\%(no changes added to commit\|nothing \%(added \)\=to commit\)\>.*\%$"
 
 hi def link gitcommitSummary		Keyword
 hi def link gitcommitComment		Comment
 hi def link gitcommitUntracked		gitcommitComment
 hi def link gitcommitDiscarded		gitcommitComment
 hi def link gitcommitSelected		gitcommitComment
+hi def link gitcommitUnmerged		gitcommitComment
 hi def link gitcommitOnBranch		Comment
 hi def link gitcommitBranch		Special
+hi def link gitcommitNoBranch		gitCommitBranch
 hi def link gitcommitDiscardedType	gitcommitType
 hi def link gitcommitSelectedType	gitcommitType
+hi def link gitcommitUnmergedType	gitcommitType
 hi def link gitcommitType		Type
+hi def link gitcommitNoChanges		gitcommitHeader
 hi def link gitcommitHeader		PreProc
 hi def link gitcommitUntrackedFile	gitcommitFile
 hi def link gitcommitDiscardedFile	gitcommitFile
 hi def link gitcommitSelectedFile	gitcommitFile
+hi def link gitcommitUnmergedFile	gitcommitFile
 hi def link gitcommitFile		Constant
 hi def link gitcommitDiscardedArrow	gitcommitArrow
 hi def link gitcommitSelectedArrow	gitcommitArrow
+hi def link gitcommitUnmergedArrow	gitcommitArrow
 hi def link gitcommitArrow		gitcommitComment
 "hi def link gitcommitOverflow		Error
 hi def link gitcommitBlank		Error
diff --git a/runtime/syntax/gitconfig.vim b/runtime/syntax/gitconfig.vim
index f44ce2b..dc14adc 100644
--- a/runtime/syntax/gitconfig.vim
+++ b/runtime/syntax/gitconfig.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	git config file
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	gitconfig, .gitconfig, *.git/config
-" Last Change:	2008 Jun 04
+" Last Change:	2009 Dec 24
 
 if exists("b:current_syntax")
     finish
diff --git a/runtime/syntax/gitrebase.vim b/runtime/syntax/gitrebase.vim
index 080252f..94361c1 100644
--- a/runtime/syntax/gitrebase.vim
+++ b/runtime/syntax/gitrebase.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	git rebase --interactive
-" Maintainer:	Tim Pope <vimNOSPAM@tpope.info>
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	git-rebase-todo
-" Last Change:	2008 Apr 16
+" Last Change:	2009 Dec 24
 
 if exists("b:current_syntax")
     finish
@@ -14,6 +14,7 @@
 syn match   gitrebaseCommit "\v<\x{7,40}>"  nextgroup=gitrebaseSummary skipwhite
 syn match   gitrebasePick   "\v^p%(ick)=>"   nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseEdit   "\v^e%(dit)=>"   nextgroup=gitrebaseCommit skipwhite
+syn match   gitrebaseReword "\v^r%(eword)=>" nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained
 syn match   gitrebaseComment "^#.*"             contains=gitrebaseHash
@@ -23,9 +24,10 @@
 hi def link gitrebaseHash           Identifier
 hi def link gitrebasePick           Statement
 hi def link gitrebaseEdit           PreProc
+hi def link gitrebaseReword         Special
 hi def link gitrebaseSquash         Type
 hi def link gitrebaseSummary        String
 hi def link gitrebaseComment        Comment
-hi def link gitrebaseSquashError     Error
+hi def link gitrebaseSquashError    Error
 
 let b:current_syntax = "gitrebase"
diff --git a/runtime/syntax/groovy.vim b/runtime/syntax/groovy.vim
index 5f96dfb..d2f3496 100644
--- a/runtime/syntax/groovy.vim
+++ b/runtime/syntax/groovy.vim
@@ -228,6 +228,7 @@
   " syntax include @groovyHtml <sfile>:p:h/html.vim
    syntax include @groovyHtml runtime! syntax/html.vim
   unlet b:current_syntax
+  syntax spell default  " added by Bram
   syn region  groovyDocComment    start="/\*\*"  end="\*/" keepend contains=groovyCommentTitle,@groovyHtml,groovyDocTags,groovyTodo,@Spell
   syn region  groovyCommentTitle  contained matchgroup=groovyDocComment start="/\*\*"   matchgroup=groovyCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@groovyHtml,groovyCommentStar,groovyTodo,@Spell,groovyDocTags
 
diff --git a/runtime/syntax/haskell.vim b/runtime/syntax/haskell.vim
index 21fcf81..8afca04 100644
--- a/runtime/syntax/haskell.vim
+++ b/runtime/syntax/haskell.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:		Haskell
 " Maintainer:		Haskell Cafe mailinglist <haskell-cafe@haskell.org>
-" Last Change:		2004 Feb 23
+" Last Change:		2008 Dec 15
 " Original Author:	John Williams <jrw@pobox.com>
 "
 " Thanks to Ryan Crumley for suggestions and John Meacham for
@@ -30,6 +30,7 @@
 "	       in eol comment character class
 " 2004 Feb 23: Made the leading comments somewhat clearer where it comes
 "	       to attribution of work.
+" 2008 Dec 15: Added comments as contained element in import statements
 
 " Remove any old syntax stuff hanging around
 if version < 600
@@ -67,7 +68,7 @@
 " because otherwise they would match as keywords at the start of a
 " "literate" comment (see lhs.vim).
 syn match hsModule		"\<module\>"
-syn match hsImport		"\<import\>.*"he=s+6 contains=hsImportMod
+syn match hsImport		"\<import\>.*"he=s+6 contains=hsImportMod,hsLineComment,hsBlockComment
 syn match hsImportMod		contained "\<\(as\|qualified\|hiding\)\>"
 syn match hsInfix		"\<\(infix\|infixl\|infixr\)\>"
 syn match hsStructure		"\<\(class\|data\|deriving\|instance\|default\|where\)\>"
diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim
index e600de7..d0f447f 100644
--- a/runtime/syntax/help.vim
+++ b/runtime/syntax/help.vim
@@ -1,14 +1,14 @@
 " Vim syntax file
 " Language:	Vim help file
 " Maintainer:	Bram Moolenaar (Bram@vim.org)
-" Last Change:	2006 May 13
+" Last Change:	2009 May 18
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
-syn match helpHeadline		"^[-A-Z .]\+[ \t]\+\*"me=e-1
+syn match helpHeadline		"^[-A-Z .][-A-Z0-9 .()]*[ \t]\+\*"me=e-1
 syn match helpSectionDelim	"^=\{3,}.*===$"
 syn match helpSectionDelim	"^-\{3,}.*--$"
 syn region helpExample		matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<"
diff --git a/runtime/syntax/hog.vim b/runtime/syntax/hog.vim
index f39c171..7f01d7f 100644
--- a/runtime/syntax/hog.vim
+++ b/runtime/syntax/hog.vim
@@ -1,7 +1,7 @@
 " Snort syntax file
 " Language:	  Snort Configuration File (see: http://www.snort.org)
 " Maintainer:	  Phil Wood, cornett@arpa.net
-" Last Change:	  $Date$
+" Last Change:	  $Date: 2004/06/13 17:41:17 $
 " Filenames:	  *.hog *.rules snort.conf vision.conf
 " URL:		  http://home.lanl.gov/cpw/vim/syntax/hog.vim
 " Snort Version:  1.8 By Martin Roesch (roesch@clark.net, www.snort.org)
diff --git a/runtime/syntax/initng.vim b/runtime/syntax/initng.vim
index 2b7bc3b..1a912c1 100644
--- a/runtime/syntax/initng.vim
+++ b/runtime/syntax/initng.vim
@@ -4,7 +4,7 @@
 " URL:		http://glen.alkohol.ee/pld/initng/
 " License:	GPL v2
 " Version:	0.13
-" Last Change:	$Date$
+" Last Change:	$Date: 2007/05/05 17:17:40 $
 "
 " Syntax highlighting for initng .i files. Inherits from sh.vim and adds
 " in the hiliting to start/stop {} blocks. Requires vim 6.3 or later.
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index d5e32fa..18e4532 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -2,7 +2,7 @@
 " Language:     Java
 " Maintainer:   Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/java.vim
-" Last Change:  2007 Dec 21
+" Last Change:  2009 Mar 14
 
 " Please check :help java.vim for comments on some of the options available.
 
@@ -15,6 +15,7 @@
   endif
   " we define it here so that included files can test for it
   let main_syntax='java'
+  syn region javaFold start="{" end="}" transparent fold
 endif
 
 " don't use standard HiLink, it will not work with included syntax files
@@ -58,7 +59,7 @@
 syn keyword javaClassDecl	enum
 syn match   javaClassDecl	"^class\>"
 syn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1
-syn match   javaAnnotation      "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
+syn match   javaAnnotation      "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
 syn match   javaClassDecl       "@interface\>"
 syn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
 syn match   javaUserLabelRef	"\k\+" contained
@@ -121,11 +122,6 @@
 syn keyword javaLabel		default
 
 if !exists("java_allow_cpp_keywords")
-  " The default used to be to highlight C++ keywords.  But several people
-  " don't like that, so default to not highlighting these.
-  let java_allow_cpp_keywords = 1
-endif
-if !java_allow_cpp_keywords
   syn keyword javaError auto delete extern friend inline redeclared
   syn keyword javaError register signed sizeof struct template typedef union
   syn keyword javaError unsigned operator
@@ -161,6 +157,11 @@
   " syntax coloring for javadoc comments (HTML)
   syntax include @javaHtml <sfile>:p:h/html.vim
   unlet b:current_syntax
+  " HTML enables spell checking for all text that is not in a syntax item. This
+  " is wrong for Java (all identifiers would be spell-checked), so it's undone
+  " here.
+  syntax spell default
+
   syn region  javaDocComment    start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
   syn region  javaCommentTitle  contained matchgroup=javaDocComment start="/\*\*"   matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
 
@@ -179,7 +180,7 @@
 " Strings and constants
 syn match   javaSpecialError     contained "\\."
 syn match   javaSpecialCharError contained "[^']"
-syn match   javaSpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
+syn match   javaSpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\+\x\{4\}\)"
 syn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
 " next line disabled, it can cause a crash for a long line
 "syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
@@ -192,7 +193,7 @@
 syn match   javaNumber		 "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
 
 " unicode characters
-syn match   javaSpecial "\\u\d\{4\}"
+syn match   javaSpecial "\\u\+\d\{4\}"
 
 syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
 
diff --git a/runtime/syntax/kconfig.vim b/runtime/syntax/kconfig.vim
index a68592e..a6ceb17 100644
--- a/runtime/syntax/kconfig.vim
+++ b/runtime/syntax/kconfig.vim
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-14
+" Latest Revision:  2009-05-25
 
 if exists("b:current_syntax")
   finish
@@ -666,9 +666,9 @@
 
 syn match   kconfigComment            display '#.*$' contains=kconfigTodo
 
-syn keyword kconfigKeyword            config menuconfig comment menu mainmenu
+syn keyword kconfigKeyword            config menuconfig comment mainmenu
 
-syn keyword kconfigConditional        choice endchoice if endif
+syn keyword kconfigConditional        menu endmenu choice endchoice if endif
 
 syn keyword kconfigPreProc            source
                                       \ nextgroup=kconfigPath
diff --git a/runtime/syntax/kscript.vim b/runtime/syntax/kscript.vim
index 903f847..cefbe39 100644
--- a/runtime/syntax/kscript.vim
+++ b/runtime/syntax/kscript.vim
@@ -2,7 +2,7 @@
 " Language:	kscript
 " Maintainer:	Thomas Capricelli <orzel@yalbi.com>
 " URL:		http://aquila.rezel.enst.fr/thomas/vim/kscript.vim
-" CVS:		$Id$
+" CVS:		$Id: kscript.vim,v 1.1 2004/06/13 17:40:02 vimboss Exp $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/lex.vim b/runtime/syntax/lex.vim
index f7144b9..68ae632 100644
--- a/runtime/syntax/lex.vim
+++ b/runtime/syntax/lex.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Lex
-" Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Sep 06, 2005
-" Version:	7
+" Maintainer:	Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change:	Sep 11, 2009
+" Version:	10
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Option:
@@ -16,7 +16,7 @@
   finish
 endif
 
-" Read the C syntax to start with
+" Read the C/C++ syntax to start with
 if version >= 600
   if exists("lex_uses_cpp")
     runtime! syntax/cpp.vim
@@ -36,32 +36,60 @@
 " --- Lex stuff ---
 " --- ========= ---
 
-"I'd prefer to use lex.* , but it doesn't handle forward definitions yet
+"I'd prefer to use lex.* , but vim doesn't handle forward definitions yet
 syn cluster lexListGroup		contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatString,lexPatTag,lexPatTag,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,lexPatCode,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
-syn cluster lexListPatCodeGroup	contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatTag,lexPatTag,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
+syn cluster lexListPatCodeGroup	contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatTag,lexPatTag,lexPatTagZoneStart,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
 
 " Abbreviations Section
-syn region lexAbbrvBlock	start="^\(\h\+\s\|%{\)" end="^\ze%%$"	skipnl	nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState
+if has("folding")
+ syn region lexAbbrvBlock	fold start="^\(\h\+\s\|%{\)"	end="^\ze%%$"	skipnl	nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState
+else
+ syn region lexAbbrvBlock	start="^\(\h\+\s\|%{\)"	end="^\ze%%$"	skipnl	nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState
+endif
 syn match  lexAbbrv		"^\I\i*\s"me=e-1			skipwhite	contained nextgroup=lexAbbrvRegExp
 syn match  lexAbbrv		"^%[sx]"					contained
 syn match  lexAbbrvRegExp	"\s\S.*$"lc=1				contained nextgroup=lexAbbrv,lexInclude
-syn region lexInclude	matchgroup=lexSep	start="^%{" end="%}"	contained	contains=ALLBUT,@lexListGroup
-syn region lexAbbrvComment	start="^\s\+/\*"	end="\*/"			contains=@Spell
-syn region lexStartState	matchgroup=lexAbbrv	start="^%\a\+"	end="$"			contained
+if has("folding")
+ syn region lexInclude	fold matchgroup=lexSep	start="^%{"	end="%}"	contained	contains=ALLBUT,@lexListGroup
+ syn region lexAbbrvComment	fold			start="^\s\+/\*"	end="\*/"	contains=@Spell
+ syn region lexStartState	fold matchgroup=lexAbbrv	start="^%\a\+"	end="$"	contained
+else
+ syn region lexInclude	matchgroup=lexSep		start="^%{"	end="%}"	contained	contains=ALLBUT,@lexListGroup
+ syn region lexAbbrvComment				start="^\s\+/\*"	end="\*/"	contains=@Spell
+ syn region lexStartState	matchgroup=lexAbbrv		start="^%\a\+"	end="$"	contained
+endif
 
 "%% : Patterns {Actions}
-syn region lexPatBlock	matchgroup=Todo	start="^%%$" matchgroup=Todo end="^%%$"	skipnl skipwhite contains=lexPat,lexPatTag,lexPatComment
-syn region lexPat		start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1	contained nextgroup=lexMorePat,lexPatSep contains=lexPatString,lexSlashQuote,lexBrace
-syn region lexBrace	start="\[" skip=+\\\\\|\\+		end="]"		contained
-syn region lexPatString	matchgroup=String start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
-syn match  lexPatTag	"^<\I\i*\(,\I\i*\)*>*"			contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
+if has("folding")
+ syn region lexPatBlock	fold matchgroup=Todo	start="^%%$" matchgroup=Todo	end="^%%$"	skipnl skipwhite	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
+ syn region lexPat		fold			start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1		contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexBrace	fold			start="\[" skip=+\\\\\|\\+	end="]"			contained
+ syn region lexPatString	fold matchgroup=String	start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
+else
+ syn region lexPatBlock	matchgroup=Todo		start="^%%$" matchgroup=Todo	end="^%%$"	skipnl skipwhite	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
+ syn region lexPat					start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1		contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexBrace				start="\[" skip=+\\\\\|\\+	end="]"			contained
+ syn region lexPatString	matchgroup=String		start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
+endif
+syn match  lexPatTag	"^<\I\i*\(,\I\i*\)*>"			contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
+syn match  lexPatTagZone	"^<\I\i*\(,\I\i*\)*>\s*\ze{"		contained nextgroup=lexPatTagZoneStart
 syn match  lexPatTag	+^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+		contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
-syn region lexPatComment	start="^\s*/\*" end="\*/"		skipnl	contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
+if has("folding")
+ syn region  lexPatTagZoneStart matchgroup=lexPatTag	fold	start='{' end='}'	contained contains=lexPat,lexPatComment
+ syn region lexPatComment	start="\s\+/\*" end="\*/"	fold	skipnl	contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
+else
+ syn region  lexPatTagZoneStart matchgroup=lexPatTag		start='{' end='}'	contained contains=lexPat,lexPatComment
+ syn region lexPatComment	start="\s\+/\*" end="\*/"		skipnl	contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
+endif
 syn match  lexPatCodeLine	".*$"					contained contains=ALLBUT,@lexListGroup
 syn match  lexMorePat	"\s*|\s*$"			skipnl	contained nextgroup=lexPat,lexPatTag,lexPatComment
 syn match  lexPatSep	"\s\+"					contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
 syn match  lexSlashQuote	+\(\\\\\)*\\"+				contained
-syn region lexPatCode matchgroup=Delimiter start="{" matchgroup=Delimiter end="}"	skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+if has("folding")
+ syn region lexPatCode matchgroup=Delimiter start="{" end="}"	fold	skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+else
+ syn region lexPatCode matchgroup=Delimiter start="{" end="}"		skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+endif
 
 syn keyword lexCFunctions	BEGIN	input	unput	woutput	yyleng	yylook	yytext
 syn keyword lexCFunctions	ECHO	output	winput	wunput	yyless	yymore	yywrap
@@ -80,9 +108,10 @@
 syn sync match lexSyncPat	groupthere lexPatBlock	"^%%$"
 
 " The default highlighting.
-hi def link lexSlashQuote	lexPat
-hi def link lexBrace	lexPat
 hi def link lexAbbrvComment	lexPatComment
+hi def link lexBrace	lexPat
+hi def link lexPatTagZone	lexPatTag
+hi def link lexSlashQuote	lexPat
 
 hi def link lexAbbrvRegExp	Macro
 hi def link lexAbbrv	SpecialChar
diff --git a/runtime/syntax/lhaskell.vim b/runtime/syntax/lhaskell.vim
index 7ff09e7..8cc1ded 100644
--- a/runtime/syntax/lhaskell.vim
+++ b/runtime/syntax/lhaskell.vim
@@ -4,8 +4,8 @@
 "			\begin{code} \end{code} blocks
 " Maintainer:		Haskell Cafe mailinglist <haskell-cafe@haskell.org>
 " Original Author:	Arthur van Leeuwen <arthurvl@cs.uu.nl>
-" Last Change:		2008 Jul 01
-" Version:		1.02
+" Last Change:		2009 May 08
+" Version:		1.04
 "
 " Thanks to Ian Lynagh for thoughtful comments on initial versions and
 " for the inspiration for writing this in the first place.
@@ -29,8 +29,10 @@
 " 2004 February 20: Cleaned up the guessing and overriding a bit
 " 2004 February 23: Cleaned up syntax highlighting for \begin{code} and
 "		    \end{code}, added some clarification to the attributions
-" 2008 July 1:      Removed % from guess list, as it totally breaks  plain
-"		    text markup guessing
+" 2008 July 1:      Removed % from guess list, as it totally breaks plain
+"                   text markup guessing
+" 2009 April 29:    Fixed highlighting breakage in TeX mode, 
+"                   thanks to Kalman Noel
 "
 
 
@@ -73,14 +75,14 @@
 "   - \begin{env}       (for env != code)
 "   - \part, \chapter, \section, \subsection, \subsubsection, etc
 if b:lhs_markup == "unknown"
-    if search('\\documentclass\|\\begin{\(code}\)\@!\|\\\(sub \)*section\|\\chapter|\\part','W') != 0
+    if search('\\documentclass\|\\begin{\(code}\)\@!\|\\\(sub\)*section\|\\chapter|\\part','W') != 0
 	let b:lhs_markup = "tex"
     else
 	let b:lhs_markup = "plain"
     endif
 endif
 
-" If user wants us to highlight TeX syntax or guess thinks it's TeX,  read it.
+" If user wants us to highlight TeX syntax or guess thinks it's TeX, read it.
 if b:lhs_markup == "tex"
     if version < 600
 	source <sfile>:p:h/tex.vim
@@ -91,6 +93,9 @@
 	" Tex.vim removes "_" from 'iskeyword', but we need it for Haskell.
 	setlocal isk+=_
     endif
+    syntax cluster lhsTeXContainer contains=tex.*Zone,texAbstract
+else
+    syntax cluster lhsTeXContainer contains=.*
 endif
 
 " Literate Haskell is Haskell in between text, so at least read Haskell
@@ -101,8 +106,8 @@
     syntax include @haskellTop syntax/haskell.vim
 endif
 
-syntax region lhsHaskellBirdTrack start="^>" end="\%(^[^>]\)\@=" contains=@haskellTop,lhsBirdTrack
-syntax region lhsHaskellBeginEndBlock start="^\\begin{code}\s*$" matchgroup=NONE end="\%(^\\end{code}.*$\)\@=" contains=@haskellTop,@beginCode
+syntax region lhsHaskellBirdTrack start="^>" end="\%(^[^>]\)\@=" contains=@haskellTop,lhsBirdTrack containedin=@lhsTeXContainer
+syntax region lhsHaskellBeginEndBlock start="^\\begin{code}\s*$" matchgroup=NONE end="\%(^\\end{code}.*$\)\@=" contains=@haskellTop,@beginCode containedin=@lhsTeXContainer
 
 syntax match lhsBirdTrack "^>" contained
 
diff --git a/runtime/syntax/lilo.vim b/runtime/syntax/lilo.vim
index e3ba2af..14bd940 100644
--- a/runtime/syntax/lilo.vim
+++ b/runtime/syntax/lilo.vim
@@ -1,10 +1,8 @@
 " Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
 " Language: lilo configuration (lilo.conf)
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2004-07-20
-" URL: http://trific.ath.cx/Ftp/vim/syntax/lilo.vim
-
+" Maintainer: help wanted!
+" Previous Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2009-01-27
 
 " Setup
 if version >= 600
@@ -64,7 +62,7 @@
 
 " String
 syn keyword liloOption menu-title nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
-syn keyword liloKernelOpt append nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
+syn keyword liloKernelOpt append addappend nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
 syn keyword liloImageOpt fallback literal nextgroup=liloEqString,liloEqStringComment,liloError skipwhite skipempty
 
 " Hex number
diff --git a/runtime/syntax/lisp.vim b/runtime/syntax/lisp.vim
index 55390aa..fd44f60 100644
--- a/runtime/syntax/lisp.vim
+++ b/runtime/syntax/lisp.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    Lisp
 " Maintainer:  Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: Oct 19, 2007
-" Version:     20
+" Last Change: Mar 05, 2009
+" Version:     21
 " URL:	       http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 "  Thanks to F Xavier Noria for a list of 978 Common Lisp symbols
@@ -534,7 +534,8 @@
 
 " ---------------------------------------------------------------------
 " Numbers: supporting integers and floating point numbers {{{1
-syn match lispNumber		"-\=\(\.\d\+\|\d\+\(\.\d*\)\=\)\(e[-+]\=\d\+\)\="
+syn match lispNumber		"-\=\(\.\d\+\|\d\+\(\.\d*\)\=\)\([dDeEfFlL][-+]\=\d\+\)\="
+syn match lispNumber		"-\=\(\d\+/\d\+\)"
 
 syn match lispSpecial		"\*\w[a-z_0-9-]*\*"
 syn match lispSpecial		!#|[^()'`,"; \t]\+|#!
diff --git a/runtime/syntax/logtalk.vim b/runtime/syntax/logtalk.vim
index 5fcbb09..7d90cd8 100644
--- a/runtime/syntax/logtalk.vim
+++ b/runtime/syntax/logtalk.vim
@@ -2,7 +2,7 @@
 "
 " Language:	Logtalk
 " Maintainer:	Paulo Moura <pmoura@logtalk.org>
-" Last Change:	June 16, 2008
+" Last Change:	Oct 31, 2008
 
 
 " Quit when a syntax file was already loaded:
@@ -51,9 +51,9 @@
 
 " Logtalk opening entity directives
 
-syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- object("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom,logtalkEntityRel
-syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- protocol("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel
-syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- category("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel
+syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- object("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkString,logtalkAtom,logtalkEntityRel,logtalkLineComment
+syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- protocol("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment
+syn region	logtalkOpenEntityDir	matchgroup=logtalkOpenEntityDirTag	start=":- category("	matchgroup=logtalkOpenEntityDirTag	end=")\."	contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel,logtalkLineComment
 
 
 " Logtalk closing entity directives
diff --git a/runtime/syntax/lout.vim b/runtime/syntax/lout.vim
index ea4cb00..2a0a72c 100644
--- a/runtime/syntax/lout.vim
+++ b/runtime/syntax/lout.vim
@@ -4,7 +4,7 @@
 " Last Change: Son 22 Jun 2003 20:43:26 CEST
 " Filenames:   *.lout,*.lt
 " URL:			http://www.cvjb.de/comp/vim/lout.vim
-" $Id$
+" $Id: lout.vim,v 1.1 2004/06/13 17:52:18 vimboss Exp $
 "
 " Lout: Basser Lout document formatting system.
 
diff --git a/runtime/syntax/mail.vim b/runtime/syntax/mail.vim
index 1157517..c89d2de 100644
--- a/runtime/syntax/mail.vim
+++ b/runtime/syntax/mail.vim
@@ -2,7 +2,7 @@
 " Language:		Mail file
 " Previous Maintainer:	Felix von Leitner <leitner@math.fu-berlin.de>
 " Maintainer:		Gautam Iyer <gi1242@users.sourceforge.net>
-" Last Change:		Thu 17 Jan 2008 11:25:44 AM PST
+" Last Change:		Thu 06 Nov 2008 10:10:55 PM PST
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -24,28 +24,35 @@
 " emails
 " According to RFC 2822 any printable ASCII character can appear in a field
 " name, except ':'.
-syn region	mailHeader	contains=@mailHeaderFields,@NoSpell start="^From .*\d\d\d\d$" skip="^\s" end="\v^[!-9;-~]*([^!-~]|$)"me=s-1
+syn region	mailHeader	contains=@mailHeaderFields,@NoSpell start="^From .*\d\d\d\d$" skip="^\s" end="\v^[!-9;-~]*([^!-~]|$)"me=s-1 fold
 syn match	mailHeaderKey	contained contains=mailEmail,@NoSpell "^From\s.*\d\d\d\d$"
+
+" Nothing else depends on case. 
+syn case ignore
+
+" Headers in properly quoted (with "> " or ">") emails are matched
+syn region	mailHeader	keepend contains=@mailHeaderFields,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)*\)\v(newsgroups|x-([a-z\-])*|path|xref|message-id|from|((in-)?reply-)?to|b?cc|subject|return-path|received|date|replied):" skip="^\z1\s" end="\v^\z1[!-9;-~]*([^!-~]|$)"me=s-1 end="\v^\z1@!"me=s-1 end="\v^\z1(\> ?)+"me=s-1 fold
+
 " Usenet headers
 syn match	mailHeaderKey	contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(Newsgroups|Followup-To|Message-ID|Supersedes|Control):.*$"
 
-syn case ignore
-" Nothing else depends on case. Headers in properly quoted (with "> " or ">")
-" emails are matched
-syn region	mailHeader	keepend contains=@mailHeaderFields,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)*\)\v(newsgroups|x-([a-z\-])*|path|xref|message-id|from|((in-)?reply-)?to|b?cc|subject|return-path|received|date|replied):" skip="^\z1\s" end="\v^\z1[!-9;-~]*([^!-~]|$)"me=s-1 end="\v^\z1@!"me=s-1 end="\v^\z1(\> ?)+"me=s-1
 
 syn region	mailHeaderKey	contained contains=mailHeaderEmail,mailEmail,@mailQuoteExps,@NoSpell start="\v(^(\> ?)*)@<=(to|b?cc):" skip=",$" end="$"
-syn match	mailHeaderKey	contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(from|reply-to):.*$"
+syn match	mailHeaderKey	contained contains=mailHeaderEmail,mailEmail,@NoSpell "\v(^(\> ?)*)@<=(from|reply-to):.*$" fold
 syn match	mailHeaderKey	contained contains=@NoSpell "\v(^(\> ?)*)@<=date:"
-syn match	mailSubject	contained "\v^subject:.*$"
+syn match	mailSubject	contained "\v^subject:.*$" fold
 syn match	mailSubject	contained contains=@NoSpell "\v(^(\> ?)+)@<=subject:.*$"
 
 " Anything in the header between < and > is an email address
 syn match	mailHeaderEmail	contained contains=@NoSpell "<.\{-}>"
 
 " Mail Signatures. (Begin with "-- ", end with change in quote level)
-syn region	mailSignature	keepend contains=@mailLinks,@mailQuoteExps start="^--\s$" end="^$" end="^\(> \?\)\+"me=s-1
-syn region	mailSignature	keepend contains=@mailLinks,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)\+\)--\s$" end="^\z1$" end="^\z1\@!"me=s-1 end="^\z1\(> \?\)\+"me=s-1
+syn region	mailSignature	keepend contains=@mailLinks,@mailQuoteExps start="^--\s$" end="^$" end="^\(> \?\)\+"me=s-1 fold
+syn region	mailSignature	keepend contains=@mailLinks,@mailQuoteExps,@NoSpell start="^\z(\(> \?\)\+\)--\s$" end="^\z1$" end="^\z1\@!"me=s-1 end="^\z1\(> \?\)\+"me=s-1 fold
+
+" Treat verbatim Text special.
+syn region	mailVerbatim	contains=@NoSpell keepend start="^#v+$" end="^#v-$" fold 
+syn region	mailVerbatim	contains=@mailQuoteExps,@NoSpell start="^\z(\(> \?\)\+\)#v+$" end="\z1#v-$" fold 
 
 " URLs start with a known protocol or www,web,w3.
 syn match mailURL contains=@NoSpell `\v<(((https?|ftp|gopher)://|(mailto|file|news):)[^' 	<>"]+|(www|web|w3)[a-z0-9_-]*\.[a-z0-9._-]+\.[^' 	<>"]+)[a-z0-9/]`
@@ -59,13 +66,13 @@
 syn match mailQuoteExp5	contained "\v^(\> ?){5}"
 syn match mailQuoteExp6	contained "\v^(\> ?){6}"
 
-" Even and odd quoted lines. order is imporant here!
-syn match mailQuoted1	contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\([a-z]\+>\|[]|}>]\).*$"
-syn match mailQuoted2	contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{2}.*$"
-syn match mailQuoted3	contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{3}.*$"
-syn match mailQuoted4	contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{4}.*$"
-syn match mailQuoted5	contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{5}.*$"
-syn match mailQuoted6	contains=mailHeader,@mailLinks,mailSignature,@NoSpell "^\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{6}.*$"
+" Even and odd quoted lines. Order is important here!
+syn region	mailQuoted6	keepend contains=mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{5}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold
+syn region	mailQuoted5	keepend contains=mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{4}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold
+syn region	mailQuoted4	keepend contains=mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{3}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold
+syn region	mailQuoted3	keepend contains=mailQuoted4,mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{2}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold
+syn region	mailQuoted2	keepend contains=mailQuoted3,mailQuoted4,mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z(\(\([a-z]\+>\|[]|}>]\)[ \t]*\)\{1}\([a-z]\+>\|[]|}>]\)\)" end="^\z1\@!" fold
+syn region	mailQuoted1	keepend contains=mailQuoted2,mailQuoted3,mailQuoted4,mailQuoted5,mailQuoted6,mailVerbatim,mailHeader,@mailLinks,mailSignature,@NoSpell start="^\z([a-z]\+>\|[]|}>]\)" end="^\z1\@!" fold
 
 " Need to sync on the header. Assume we can do that within 100 lines
 if exists("mail_minlines")
@@ -75,6 +82,7 @@
 endif
 
 " Define the default highlighting.
+hi def link mailVerbatim	Special
 hi def link mailHeader		Statement
 hi def link mailHeaderKey	Type
 hi def link mailSignature	PreProc
diff --git a/runtime/syntax/man.vim b/runtime/syntax/man.vim
index 6167b23..4172a02 100644
--- a/runtime/syntax/man.vim
+++ b/runtime/syntax/man.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:	Man page
-" Maintainer:	Nam SungHyun <namsh@kldp.org>
+" Maintainer:	SungHyun Nam <goweol@gmail.com>
 " Previous Maintainer:	Gautam H. Mudunuri <gmudunur@informatica.com>
 " Version Info:
-" Last Change:	2007 Dec 30
+" Last Change:	2008 Sep 17
 
 " Additional highlighting by Johannes Tanzler <johannes.tanzler@aon.at>:
 "	* manSubHeading
diff --git a/runtime/syntax/masm.vim b/runtime/syntax/masm.vim
index efd5fe0..4ffd22b 100644
--- a/runtime/syntax/masm.vim
+++ b/runtime/syntax/masm.vim
@@ -2,8 +2,8 @@
 " Language:	Microsoft Macro Assembler (80x86)
 " Orig Author:	Rob Brady <robb@datatone.com>
 " Maintainer:	Wu Yongwei <wuyongwei@gmail.com>
-" Last Change:	$Date$
-" $Revision$
+" Last Change:	$Date: 2007/04/21 13:20:15 $
+" $Revision: 1.44 $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/master.vim b/runtime/syntax/master.vim
index c2125c1..40d644e 100644
--- a/runtime/syntax/master.vim
+++ b/runtime/syntax/master.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:	Focus Master File
 " Maintainer:	Rob Brady <robb@datatone.com>
-" Last Change:	$Date$
+" Last Change:	$Date: 2004/06/13 15:54:03 $
 " URL: http://www.datatone.com/~robb/vim/syntax/master.vim
-" $Revision$
+" $Revision: 1.1 $
 
 " this is a very simple syntax file - I will be improving it
 " add entire DEFINE syntax
diff --git a/runtime/syntax/matlab.vim b/runtime/syntax/matlab.vim
index 9bba975..0e281c1 100644
--- a/runtime/syntax/matlab.vim
+++ b/runtime/syntax/matlab.vim
@@ -1,8 +1,15 @@
 " Vim syntax file
 " Language:	Matlab
-" Maintainer:	Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
+" Maintainer:	Maurizio Tranchero - maurizio.tranchero@gmail.com
+" Credits:	Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
 "		Original author: Mario Eusebio
-" Last Change:	30 May 2003
+" Change History:
+" 		Sat Jul 25 16:14:55 CEST 2009
+"		- spell check enabled only for comments (thanks to James Vega)
+"
+" 		Tue Apr 21 10:03:31 CEST 2009
+"		- added object oriented support
+"		- added multi-line comments %{ ...\n... %}
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -16,6 +23,9 @@
 syn keyword matlabLabel			case switch
 syn keyword matlabConditional		else elseif end if otherwise
 syn keyword matlabRepeat		do for while
+" MT_ADDON - added exception-specific keywords
+syn keyword matlabExceptions		try catch
+syn keyword matlabOO			classdef properties events methods
 
 syn keyword matlabTodo			contained  TODO
 
@@ -31,7 +41,8 @@
 "syn match matlabIdentifier		"\<\a\w*\>"
 
 " String
-syn region matlabString			start=+'+ end=+'+	oneline
+" MT_ADDON - added 'skip' in order to deal with 'tic' escaping sequence 
+syn region matlabString			start=+'+ end=+'+	oneline skip=+''+ contains=@Spell
 
 " If you don't like tabs
 syn match matlabTab			"\t"
@@ -50,7 +61,10 @@
 
 syn match matlabSemicolon		";"
 
-syn match matlabComment			"%.*$"	contains=matlabTodo,matlabTab
+syn match matlabComment			"%.*$"	contains=matlabTodo,matlabTab,@Spell
+" MT_ADDON - correctly highlights words after '...' as comments
+syn match matlabComment			"\.\.\..*$"	contains=matlabTodo,matlabTab,@Spell
+syn region matlabMultilineComment	start=+%{+ end=+%}+ contains=matlabTodo,matlabTab,@Spell
 
 syn keyword matlabOperator		break zeros default margin round ones rand
 syn keyword matlabOperator		ceil floor size clear zeros eye mean std cov
@@ -75,10 +89,11 @@
   endif
 
   HiLink matlabTransposeOperator	matlabOperator
-  HiLink matlabOperator		Operator
-  HiLink matlabLineContinuation	Special
+  HiLink matlabOperator			Operator
+  HiLink matlabLineContinuation		Special
   HiLink matlabLabel			Label
   HiLink matlabConditional		Conditional
+  HiLink matlabExceptions		Conditional
   HiLink matlabRepeat			Repeat
   HiLink matlabTodo			Todo
   HiLink matlabString			String
@@ -86,12 +101,14 @@
   HiLink matlabTransposeOther		Identifier
   HiLink matlabNumber			Number
   HiLink matlabFloat			Float
-  HiLink matlabFunction		Function
+  HiLink matlabFunction			Function
   HiLink matlabError			Error
-  HiLink matlabImplicit		matlabStatement
+  HiLink matlabImplicit			matlabStatement
   HiLink matlabStatement		Statement
+  HiLink matlabOO			Statement
   HiLink matlabSemicolon		SpecialChar
   HiLink matlabComment			Comment
+  HiLink matlabMultilineComment		Comment
 
   HiLink matlabArithmeticOperator	matlabOperator
   HiLink matlabRelationalOperator	matlabOperator
diff --git a/runtime/syntax/maxima.vim b/runtime/syntax/maxima.vim
index ca982d7..27dcc18 100644
--- a/runtime/syntax/maxima.vim
+++ b/runtime/syntax/maxima.vim
@@ -227,7 +227,7 @@
 " Comments:
 " maxima supports /* ... */ (like C)
 syn keyword maximaTodo contained	TODO Todo DEBUG
-syn region  maximaCommentBlock	start="/\*" end="\*/"	contains=maximaString,maximaTodo
+syn region  maximaCommentBlock	start="/\*" end="\*/"	contains=maximaString,maximaTodo,maximaCommentBlock
 
 " synchronizing
 syn sync match maximaSyncComment	grouphere maximaCommentBlock "/*"
diff --git a/runtime/syntax/mgl.vim b/runtime/syntax/mgl.vim
index 6049e8a..55ae137 100644
--- a/runtime/syntax/mgl.vim
+++ b/runtime/syntax/mgl.vim
@@ -4,7 +4,7 @@
 " Last Change:	2006 Feb 21
 " Maintainer:  Gero Kuhlmann <gero@gkminix.han.de>
 "
-" $Id$
+" $Id: mgl.vim,v 1.1 2006/02/21 22:08:20 vimboss Exp $
 "
 if version < 600
   syntax clear
diff --git a/runtime/syntax/mma.vim b/runtime/syntax/mma.vim
index 12aac9c..f48dcce 100644
--- a/runtime/syntax/mma.vim
+++ b/runtime/syntax/mma.vim
@@ -4,7 +4,7 @@
 " Last Change:  Thu May 19 21:36:04 CDT 2005
 " Source:       http://members.wri.com/layland/vim/syntax/mma.vim
 "               http://vim.sourceforge.net/scripts/script.php?script_id=1273
-" Id:           $Id$
+" Id:           $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
 " NOTE:
 " 
 " Empty .m files will automatically be presumed as Matlab files
diff --git a/runtime/syntax/mysql.vim b/runtime/syntax/mysql.vim
index 79cf4b5..86a6c07 100644
--- a/runtime/syntax/mysql.vim
+++ b/runtime/syntax/mysql.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     mysql
 " Maintainer:   Kenneth J. Pronovici <pronovic@ieee.org>
-" Last Change:  $LastChangedDate: 2007-12-19 10:59:39 -0600 (Wed, 19 Dec 2007) $
+" Last Change:  $LastChangedDate: 2009-06-29 23:08:37 -0500 (Mon, 29 Jun 2009) $
 " Filenames:    *.mysql
 " URL:          ftp://cedar-solutions.com/software/mysql.vim
 " Note:         The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
@@ -36,7 +36,7 @@
 syn keyword mysqlKeyword         natural no
 syn keyword mysqlKeyword         on optimize option optionally order outer outfile
 syn keyword mysqlKeyword         pack_keys partial password primary privileges procedure process processlist
-syn keyword mysqlKeyword         read references reload rename replace restrict returns revoke row rows
+syn keyword mysqlKeyword         read references reload rename replace restrict returns revoke right row rows
 syn keyword mysqlKeyword         second select show shutdown soname sql_big_result sql_big_selects sql_big_tables sql_log_off
 syn keyword mysqlKeyword         sql_log_update sql_low_priority_updates sql_select_limit sql_small_result sql_warnings starting
 syn keyword mysqlKeyword         status straight_join string
@@ -57,7 +57,7 @@
 " Numbers and hexidecimal values
 syn match mysqlNumber            "-\=\<[0-9]*\>"
 syn match mysqlNumber            "-\=\<[0-9]*\.[0-9]*\>"
-syn match mysqlNumber            "-\=\<[0-9]*e[+-]\=[0-9]*\>"
+syn match mysqlNumber            "-\=\<[0-9][0-9]*e[+-]\=[0-9]*\>"
 syn match mysqlNumber            "-\=\<[0-9]*\.[0-9]*e[+-]\=[0-9]*\>"
 syn match mysqlNumber            "\<0x[abcdefABCDEF0-9]*\>"
 
diff --git a/runtime/syntax/ncf.vim b/runtime/syntax/ncf.vim
index 15c74c8..2019c03 100644
--- a/runtime/syntax/ncf.vim
+++ b/runtime/syntax/ncf.vim
@@ -2,7 +2,7 @@
 " Language:     Novell "NCF" Batch File
 " Maintainer:   Jonathan J. Miner <miner@doit.wisc.edu>
 " Last Change:	Tue, 04 Sep 2001 16:20:33 CDT
-" $Id$
+" $Id: ncf.vim,v 1.1 2004/06/13 16:31:58 vimboss Exp $
 
 " Remove any old syntax stuff hanging around
 if version < 600
diff --git a/runtime/syntax/netrc.vim b/runtime/syntax/netrc.vim
index d8eba30..9f15d16 100644
--- a/runtime/syntax/netrc.vim
+++ b/runtime/syntax/netrc.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         netrc(5) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2010-01-03
 
 if exists("b:current_syntax")
   finish
@@ -11,12 +11,13 @@
 set cpo&vim
 
 syn keyword netrcKeyword    machine nextgroup=netrcMachine skipwhite skipnl
-syn keyword netrcKeyword    login nextgroup=netrcLogin,netrcSpecial
-                            \ skipwhite skipnl
+syn keyword netrcKeyword    account
+                          \ login
+                          \ nextgroup=netrcLogin,netrcSpecial skipwhite skipnl
 syn keyword netrcKeyword    password nextgroup=netrcPassword skipwhite skipnl
 syn keyword netrcKeyword    default
-syn keyword netrcKeyword    macdef nextgroup=netrcInit,netrcMacroName
-                            \ skipwhite skipnl
+syn keyword netrcKeyword    macdef
+                          \ nextgroup=netrcInit,netrcMacroName skipwhite skipnl
 syn region  netrcMacro      contained start='.' end='^$'
 
 syn match   netrcMachine    contained display '\S\+'
@@ -25,14 +26,14 @@
 syn match   netrcLogin      contained display '"[^\\"]*\(\\.[^\\"]*\)*"'
 syn match   netrcPassword   contained display '\S\+'
 syn match   netrcPassword   contained display '"[^\\"]*\(\\.[^\\"]*\)*"'
-syn match   netrcMacroName  contained display '\S\+' nextgroup=netrcMacro
-                            \ skipwhite skipnl
+syn match   netrcMacroName  contained display '\S\+'
+                          \ nextgroup=netrcMacro skipwhite skipnl
 syn match   netrcMacroName  contained display '"[^\\"]*\(\\.[^\\"]*\)*"'
-                            \ nextgroup=netrcMacro skipwhite skipnl
+                          \ nextgroup=netrcMacro skipwhite skipnl
 
 syn keyword netrcSpecial    contained anonymous
-syn match   netrcInit       contained '\<init$' nextgroup=netrcMacro
-                            \ skipwhite skipnl
+syn match   netrcInit       contained '\<init$'
+                          \ nextgroup=netrcMacro skipwhite skipnl
 
 syn sync fromstart
 
diff --git a/runtime/syntax/netrw.vim b/runtime/syntax/netrw.vim
index 62dab3f..f6fd66c 100644
--- a/runtime/syntax/netrw.vim
+++ b/runtime/syntax/netrw.vim
@@ -1,7 +1,7 @@
 " Language   : Netrw Remote-Directory Listing Syntax
 " Maintainer : Charles E. Campbell, Jr.
-" Last change: Feb 06, 2008
-" Version    : 12
+" Last change: Jan 14, 2009
+" Version    : 16
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -16,85 +16,91 @@
 syn cluster NetrwGroup		contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion,netrwCopyTgt
 syn cluster NetrwTreeGroup	contains=netrwDir,netrwSymLink,netrwExe
 
-syn match  netrwSpecial		"\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)"		contains=netrwClassify
-syn match  netrwDir		"\.\{1,2}/"						contains=netrwClassify
-syn match  netrwDir		"\%(\S\+ \)*\S\+/"					contains=netrwClassify
-syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"			contains=netrwDateSep skipwhite nextgroup=netrwTime
-syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  			contains=netrwClassify
-syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" 			contains=netrwClassify
-syn match  netrwTreeBar		"^\%(| \)*"						contains=netrwTreeBarSpace	nextgroup=@netrwTreeGroup
-syn match  netrwTreeBarSpace	" "				contained
+syn match  netrwPlain		"\(\S\+ \)*\S\+"					contains=@NoSpell
+syn match  netrwSpecial		"\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)"		contains=netrwClassify,@NoSpell
+syn match  netrwDir		"\.\{1,2}/"						contains=netrwClassify,@NoSpell
+syn match  netrwDir		"\%(\S\+ \)*\S\+/"					contains=netrwClassify,@NoSpell
+syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"	skipwhite	contains=netrwDateSep,@NoSpell	nextgroup=netrwTime
+syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  			contains=netrwClassify,@NoSpell
+syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" 			contains=netrwClassify,@NoSpell
+syn match  netrwTreeBar		"^\%([-+|] \)\+"					contains=netrwTreeBarSpace	nextgroup=@netrwTreeGroup
+syn match  netrwTreeBarSpace	" "					contained
 
-syn match  netrwClassify	"[*=|@/]\ze\%(\s\{2,}\|$\)"	contained
-syn match  netrwDateSep		"/"				contained
-syn match  netrwTime		"\d\{1,2}:\d\{2}:\d\{2}"	contained		contains=netrwTimeSep
+syn match  netrwClassify	"[*=|@/]\ze\%(\s\{2,}\|$\)"		contained
+syn match  netrwDateSep		"/"					contained
+syn match  netrwTime		"\d\{1,2}:\d\{2}:\d\{2}"		contained	contains=netrwTimeSep
 syn match  netrwTimeSep		":"
 
-syn match  netrwComment		'".*\%(\t\|$\)'						contains=@NetrwGroup
-syn match  netrwHide		'^"\s*\(Hid\|Show\)ing:'	skipwhite nextgroup=netrwHidePat
+syn match  netrwComment		'".*\%(\t\|$\)'						contains=@NetrwGroup,@NoSpell
+syn match  netrwHide		'^"\s*\(Hid\|Show\)ing:'	skipwhite		contains=@NoSpell		nextgroup=netrwHidePat
 syn match  netrwSlash		"/"				contained
-syn match  netrwHidePat		"[^,]\+"			contained skipwhite nextgroup=netrwHideSep
-syn match  netrwHideSep		","				contained transparent skipwhite nextgroup=netrwHidePat
-syn match  netrwSortBy		"Sorted by"			contained transparent skipwhite nextgroup=netrwList
-syn match  netrwSortSeq		"Sort sequence:"		contained transparent skipwhite nextgroup=netrwList
-syn match  netrwCopyTgt		"Copy/Move Tgt:"		contained transparent skipwhite nextgroup=netrwList
-syn match  netrwList		".*$"				contained		contains=netrwComma
+syn match  netrwHidePat		"[^,]\+"			contained skipwhite	contains=@NoSpell		nextgroup=netrwHideSep
+syn match  netrwHideSep		","				contained skipwhite					nextgroup=netrwHidePat
+syn match  netrwSortBy		"Sorted by"			contained transparent skipwhite				nextgroup=netrwList
+syn match  netrwSortSeq		"Sort sequence:"		contained transparent skipwhite			 	nextgroup=netrwList
+syn match  netrwCopyTgt		"Copy/Move Tgt:"		contained transparent skipwhite				nextgroup=netrwList
+syn match  netrwList		".*$"				contained		contains=netrwComma,@NoSpell
 syn match  netrwComma		","				contained
-syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$"	contains=netrwHelpCmd keepend contained
-syn match  netrwHelpCmd		"\S\ze:"			contained skipwhite nextgroup=netrwCmdSep
+syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$"	contains=netrwHelpCmd,@NoSpell	keepend contained
+syn match  netrwHelpCmd		"\S\ze:"			contained skipwhite	contains=@NoSpell		nextgroup=netrwCmdSep
 syn match  netrwCmdSep		":"				contained nextgroup=netrwCmdNote
-syn match  netrwCmdNote		".\{-}\ze  "			contained
-syn match  netrwVersion		"(netrw.*)"			contained
+syn match  netrwCmdNote		".\{-}\ze  "			contained		contains=@NoSpell
+syn match  netrwVersion		"(netrw.*)"			contained		contains=@NoSpell
 
 " -----------------------------
 " Special filetype highlighting {{{1
 " -----------------------------
 if exists("g:netrw_special_syntax") && netrw_special_syntax
- syn match netrwBak		"\(\S\+ \)*\S\+\.bak\>"				contains=netrwTreeBar
- syn match netrwCompress	"\(\S\+ \)*\S\+\.\%(gz\|bz2\|Z\|zip\)\>"	contains=netrwTreeBar
- syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar
- syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar
- syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar
- syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar
- syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar
- syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar
- syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar
- syn match netrwTilde		"\(\S\+ \)*\S\+\~\>"				contains=netrwTreeBar
- syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar
+ syn match netrwBak		"\(\S\+ \)*\S\+\.bak\>"				contains=netrwTreeBar,@NoSpell
+ syn match netrwCompress	"\(\S\+ \)*\S\+\.\%(gz\|bz2\|Z\|zip\)\>"	contains=netrwTreeBar,@NoSpell
+ if has("unix")
+  syn match netrwCoreDump	"\<core\%(\.\d\+\)\=\>"				contains=netrwTreeBar,@NoSpell
+ endif
+ syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar,@NoSpell
+ syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar,@NoSpell
+ syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar,@NoSpell
+ syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar,@NoSpell
+ syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar,@NoSpell
+ syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar,@NoSpell
+ syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar,@NoSpell
+ syn match netrwTilde		"\(\S\+ \)*\S\+\~\>"				contains=netrwTreeBar,@NoSpell
+ syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar,@NoSpell
 endif
 
 " ---------------------------------------------------------------------
 " Highlighting Links: {{{1
 if !exists("did_drchip_netrwlist_syntax")
  let did_drchip_netrwlist_syntax= 1
- hi link netrwClassify	Function
- hi link netrwCmdSep	Delimiter
- hi link netrwComment	Comment
- hi link netrwDir	Directory
- hi link netrwHelpCmd	Function
- hi link netrwHidePat	Statement
- hi link netrwList	Statement
- hi link netrwVersion	Identifier
- hi link netrwSymLink	Question
- hi link netrwExe	PreProc
- hi link netrwDateSep	Delimiter
+ hi default link netrwClassify	Function
+ hi default link netrwCmdSep	Delimiter
+ hi default link netrwComment	Comment
+ hi default link netrwDir	Directory
+ hi default link netrwHelpCmd	Function
+ hi default link netrwHidePat	Statement
+ hi default link netrwHideSep	netrwComment
+ hi default link netrwList	Statement
+ hi default link netrwVersion	Identifier
+ hi default link netrwSymLink	Question
+ hi default link netrwExe	PreProc
+ hi default link netrwDateSep	Delimiter
 
- hi link netrwTreeBar	Special
- hi link netrwTimeSep	netrwDateSep
- hi link netrwComma	netrwComment
- hi link netrwHide	netrwComment
- hi link netrwMarkFile	Identifier
+ hi default link netrwTreeBar	Special
+ hi default link netrwTimeSep	netrwDateSep
+ hi default link netrwComma	netrwComment
+ hi default link netrwHide	netrwComment
+ hi default link netrwMarkFile	Identifier
 
  " special syntax highlighting (see :he g:netrw_special_syntax)
- hi link netrwBak	NonText
- hi link netrwCompress	Folded
- hi link netrwData	DiffChange
- hi link netrwLib	DiffChange
- hi link netrwMakefile	DiffChange
- hi link netrwObj	Folded
- hi link netrwTilde	Folded
- hi link netrwTmp	Folded
- hi link netrwTags	Folded
+ hi default link netrwBak	NonText
+ hi default link netrwCompress	Folded
+ hi default link netrwCoreDump	WarningMsg
+ hi default link netrwData	DiffChange
+ hi default link netrwLib	DiffChange
+ hi default link netrwMakefile	DiffChange
+ hi default link netrwObj	Folded
+ hi default link netrwTilde	Folded
+ hi default link netrwTmp	Folded
+ hi default link netrwTags	Folded
 endif
 
 " Current Syntax: {{{1
diff --git a/runtime/syntax/opl.vim b/runtime/syntax/opl.vim
index 1914a05..aa3cb9e 100644
--- a/runtime/syntax/opl.vim
+++ b/runtime/syntax/opl.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	OPL
 " Maintainer:	Czo <Olivier.Sirol@lip6.fr>
-" $Id$
+" $Id: opl.vim,v 1.1 2004/06/13 17:34:11 vimboss Exp $
 
 " Open Psion Language... (EPOC16/EPOC32)
 
diff --git a/runtime/syntax/papp.vim b/runtime/syntax/papp.vim
index 0d84d80..d86dce6 100644
--- a/runtime/syntax/papp.vim
+++ b/runtime/syntax/papp.vim
@@ -2,7 +2,7 @@
 "
 " Language:	papp
 " Maintainer:	Marc Lehmann <pcg@goof.com>
-" Last Change:	2003 May 11
+" Last Change:	2009 Nov 11
 " Filenames:    *.papp *.pxml *.pxsl
 " URL:		http://papp.plan9.de/
 
@@ -37,6 +37,7 @@
     syn include @PAppHtml syntax/html.vim
   endif
   unlet b:current_syntax
+  syntax spell default  " added by Bram
 endif
 
 if version < 600
diff --git a/runtime/syntax/po.vim b/runtime/syntax/po.vim
index 124d524..4475417 100644
--- a/runtime/syntax/po.vim
+++ b/runtime/syntax/po.vim
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:	po (gettext)
 " Maintainer:	Dwayne Bailey <dwayne@translate.org.za>
-" Last Change:	2008 Jan 08
+" Last Change:	2008 Sep 17
 " Contributors: Dwayne Bailey (Most advanced syntax highlighting)
 "               Leonardo Fontenelle (Spell checking)
-"               Nam SungHyun <namsh@kldp.org> (Original maintainer)
+"               SungHyun Nam <goweol@gmail.com> (Original maintainer)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/progress.vim b/runtime/syntax/progress.vim
index fb2b161..6816548 100644
--- a/runtime/syntax/progress.vim
+++ b/runtime/syntax/progress.vim
@@ -8,7 +8,7 @@
 "			Mikhail Kuperblum	<mikhail@whasup.com>
 "			John Florian		<jflorian@voyager.net>
 " Last Change:		Wed Apr 12 08:55:35 EST 2006
-" $Id$
+" $Id: progress.vim,v 1.3 2006/04/12 21:48:47 vimboss Exp $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/prolog.vim b/runtime/syntax/prolog.vim
index 68b08be..58de71f 100644
--- a/runtime/syntax/prolog.vim
+++ b/runtime/syntax/prolog.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    PROLOG
 " Maintainers: Thomas Koehler <jean-luc@picard.franken.de>
-" Last Change: 2008 April 5
-" URL:	       http://gott-gehabt/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
+" Last Change: 2009 Dec 04
+" URL:	       http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
 
 " There are two sets of highlighting in here:
 " If the "prolog_highlighting_clean" variable exists, it is rather sparse.
@@ -63,7 +63,7 @@
   syn match   prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|<\|>\|="
   syn match   prologAsIs     "===\|\\===\|<=\|=>"
 
-  syn match   prologNumber	      "\<[0123456789]*\>"
+  syn match   prologNumber	      "\<[0123456789]*\>'\@!"
   syn match   prologCommentError      "\*/"
   syn match   prologSpecialCharacter  ";"
   syn match   prologSpecialCharacter  "!"
diff --git a/runtime/syntax/pyrex.vim b/runtime/syntax/pyrex.vim
index f06b2d3..7dc9b95 100644
--- a/runtime/syntax/pyrex.vim
+++ b/runtime/syntax/pyrex.vim
@@ -2,7 +2,7 @@
 " Language:	Pyrex
 " Maintainer:	Marco Barisione <marco.bari@people.it>
 " URL:		http://marcobari.altervista.org/pyrex_vim.html
-" Last Change:	2004 May 16
+" Last Change:	2009 Nov 09
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -25,7 +25,7 @@
 syn keyword pyrexType		int long short float double char object void
 syn keyword pyrexType		signed unsigned
 syn keyword pyrexStructure	struct union enum
-syn keyword pyrexPrecondit	include cimport
+syn keyword pyrexInclude	include cimport
 syn keyword pyrexAccess		public private property readonly extern
 " If someome wants Python's built-ins highlighted probably he
 " also wants Pyrex's built-ins highlighted
@@ -35,9 +35,9 @@
 
 " This deletes "from" from the keywords and re-adds it as a
 " match with lower priority than pyrexForFrom
-syn clear   pythonPreCondit
-syn keyword pythonPreCondit     import
-syn match   pythonPreCondit     "from"
+syn clear   pythonInclude
+syn keyword pythonInclude     import
+syn match   pythonInclude     "from"
 
 " With "for[^:]*\zsfrom" VIM does not match "for" anymore, so
 " I used the slower "\@<=" form
@@ -54,7 +54,7 @@
   HiLink pyrexStatement		Statement
   HiLink pyrexType		Type
   HiLink pyrexStructure		Structure
-  HiLink pyrexPrecondit		PreCondit
+  HiLink pyrexInclude		PreCondit
   HiLink pyrexAccess		pyrexStatement
   if exists("python_highlight_builtins") || exists("pyrex_highlight_builtins")
       HiLink pyrexBuiltin	Function
diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim
index 5288d9b..d590743 100644
--- a/runtime/syntax/python.vim
+++ b/runtime/syntax/python.vim
@@ -1,143 +1,252 @@
 " Vim syntax file
 " Language:	Python
 " Maintainer:	Neil Schemenauer <nas@python.ca>
-" Updated:	2006-10-15
-"		Added Python 2.4 features 2006 May 4 (Dmitry Vasiliev)
+" Last Change:	2009-10-13
+" Credits:	Zvezdan Petkovic <zpetkovic@acm.org>
+"		Neil Schemenauer <nas@python.ca>
+"		Dmitry Vasiliev
 "
-" Options to control Python syntax highlighting:
+"		This version is a major rewrite by Zvezdan Petkovic.
 "
-" For highlighted numbers:
+"		- introduced highlighting of doctests
+"		- updated keywords, built-ins, and exceptions
+"		- corrected regular expressions for
 "
-"    let python_highlight_numbers = 1
+"		  * functions
+"		  * decorators
+"		  * strings
+"		  * escapes
+"		  * numbers
+"		  * space error
 "
-" For highlighted builtin functions:
+"		- corrected synchronization
+"		- more highlighting is ON by default, except
+"		- space error highlighting is OFF by default
 "
-"    let python_highlight_builtins = 1
+" Optional highlighting can be controlled using these variables.
 "
-" For highlighted standard exceptions:
+"   let python_no_builtin_highlight = 1
+"   let python_no_doctest_code_highlight = 1
+"   let python_no_doctest_highlight = 1
+"   let python_no_exception_highlight = 1
+"   let python_no_number_highlight = 1
+"   let python_space_error_highlight = 1
 "
-"    let python_highlight_exceptions = 1
+" All the options above can be switched on together.
 "
-" Highlight erroneous whitespace:
-"
-"    let python_highlight_space_errors = 1
-"
-" If you want all possible Python highlighting (the same as setting the
-" preceding options):
-"
-"    let python_highlight_all = 1
+"   let python_highlight_all = 1
 "
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
+" For version 5.x: Clear all syntax items.
+" For version 6.x: Quit when a syntax file was already loaded.
 if version < 600
   syntax clear
 elseif exists("b:current_syntax")
   finish
 endif
 
-
-syn keyword pythonStatement	break continue del
-syn keyword pythonStatement	except exec finally
-syn keyword pythonStatement	pass print raise
-syn keyword pythonStatement	return try with
-syn keyword pythonStatement	global assert
-syn keyword pythonStatement	lambda yield
-syn keyword pythonStatement	def class nextgroup=pythonFunction skipwhite
-syn match   pythonFunction	"[a-zA-Z_][a-zA-Z0-9_]*" contained
+" Keep Python keywords in alphabetical order inside groups for easy
+" comparison with the table in the 'Python Language Reference'
+" http://docs.python.org/reference/lexical_analysis.html#keywords.
+" Groups are in the order presented in NAMING CONVENTIONS in syntax.txt.
+" Exceptions come last at the end of each group (class and def below).
+"
+" Keywords 'with' and 'as' are new in Python 2.6
+" (use 'from __future__ import with_statement' in Python 2.5).
+"
+" Some compromises had to be made to support both Python 3.0 and 2.6.
+" We include Python 3.0 features, but when a definition is duplicated,
+" the last definition takes precedence.
+"
+" - 'False', 'None', and 'True' are keywords in Python 3.0 but they are
+"   built-ins in 2.6 and will be highlighted as built-ins below.
+" - 'exec' is a built-in in Python 3.0 and will be highlighted as
+"   built-in below.
+" - 'nonlocal' is a keyword in Python 3.0 and will be highlighted.
+" - 'print' is a built-in in Python 3.0 and will be highlighted as
+"   built-in below (use 'from __future__ import print_function' in 2.6)
+"
+syn keyword pythonStatement	False, None, True
+syn keyword pythonStatement	as assert break continue del exec global
+syn keyword pythonStatement	lambda nonlocal pass print return with yield
+syn keyword pythonStatement	class def nextgroup=pythonFunction skipwhite
+syn keyword pythonConditional	elif else if
 syn keyword pythonRepeat	for while
-syn keyword pythonConditional	if elif else
 syn keyword pythonOperator	and in is not or
-" AS will be a keyword in Python 3
-syn keyword pythonPreCondit	import from as
-syn match   pythonComment	"#.*$" contains=pythonTodo,@Spell
-syn keyword pythonTodo		TODO FIXME XXX contained
+syn keyword pythonException	except finally raise try
+syn keyword pythonInclude	from import
 
 " Decorators (new in Python 2.4)
 syn match   pythonDecorator	"@" display nextgroup=pythonFunction skipwhite
+" The zero-length non-grouping match before the function name is
+" extremely important in pythonFunction.  Without it, everything is
+" interpreted as a function inside the contained environment of
+" doctests.
+" A dot must be allowed because of @MyClass.myfunc decorators.
+syn match   pythonFunction
+      \ "\%(\%(def\s\|class\s\|@\)\s*\)\@<=\h\%(\w\|\.\)*" contained
 
-" strings
-syn region pythonString		matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape,@Spell
-syn region pythonString		matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape,@Spell
-syn region pythonString		matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape,@Spell
-syn region pythonString		matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape,@Spell
-syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+ contains=@Spell
-syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+ contains=@Spell
-syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+ contains=@Spell
-syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+ contains=@Spell
-syn match  pythonEscape		+\\[abfnrtv'"\\]+ contained
-syn match  pythonEscape		"\\\o\{1,3}" contained
-syn match  pythonEscape		"\\x\x\{2}" contained
-syn match  pythonEscape		"\(\\u\x\{4}\|\\U\x\{8}\)" contained
-syn match  pythonEscape		"\\$"
+syn match   pythonComment	"#.*$" contains=pythonTodo,@Spell
+syn keyword pythonTodo		FIXME NOTE NOTES TODO XXX contained
+
+" Triple-quoted strings can contain doctests.
+syn region  pythonString
+      \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
+      \ contains=pythonEscape,@Spell
+syn region  pythonString
+      \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
+      \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell
+syn region  pythonRawString
+      \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
+      \ contains=@Spell
+syn region  pythonRawString
+      \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
+      \ contains=pythonSpaceError,pythonDoctest,@Spell
+
+syn match   pythonEscape	+\\[abfnrtv'"\\]+ contained
+syn match   pythonEscape	"\\\o\{1,3}" contained
+syn match   pythonEscape	"\\x\x\{2}" contained
+syn match   pythonEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained
+" Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
+syn match   pythonEscape	"\\N{\a\+\%(\s\a\+\)*}" contained
+syn match   pythonEscape	"\\$"
 
 if exists("python_highlight_all")
-  let python_highlight_numbers = 1
-  let python_highlight_builtins = 1
-  let python_highlight_exceptions = 1
-  let python_highlight_space_errors = 1
+  if exists("python_no_builtin_highlight")
+    unlet python_no_builtin_highlight
+  endif
+  if exists("python_no_doctest_code_highlight")
+    unlet python_no_doctest_code_highlight
+  endif
+  if exists("python_no_doctest_highlight")
+    unlet python_no_doctest_highlight
+  endif
+  if exists("python_no_exception_highlight")
+    unlet python_no_exception_highlight
+  endif
+  if exists("python_no_number_highlight")
+    unlet python_no_number_highlight
+  endif
+  let python_space_error_highlight = 1
 endif
 
-if exists("python_highlight_numbers")
+" It is very important to understand all details before changing the
+" regular expressions below or their order.
+" The word boundaries are *not* the floating-point number boundaries
+" because of a possible leading or trailing decimal point.
+" The expressions below ensure that all valid number literals are
+" highlighted, and invalid number literals are not.  For example,
+"
+" - a decimal point in '4.' at the end of a line is highlighted,
+" - a second dot in 1.0.0 is not highlighted,
+" - 08 is not highlighted,
+" - 08e0 or 08j are highlighted,
+"
+" and so on, as specified in the 'Python Language Reference'.
+" http://docs.python.org/reference/lexical_analysis.html#numeric-literals
+if !exists("python_no_number_highlight")
   " numbers (including longs and complex)
-  syn match   pythonNumber	"\<0x\x\+[Ll]\=\>"
-  syn match   pythonNumber	"\<\d\+[LljJ]\=\>"
-  syn match   pythonNumber	"\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"
-  syn match   pythonNumber	"\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>"
-  syn match   pythonNumber	"\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"
+  syn match   pythonNumber	"\<0[oO]\=\o\+[Ll]\=\>"
+  syn match   pythonNumber	"\<0[xX]\x\+[Ll]\=\>"
+  syn match   pythonNumber	"\<0[bB][01]\+[Ll]\=\>"
+  syn match   pythonNumber	"\<\%([1-9]\d*\|0\)[Ll]\=\>"
+  syn match   pythonNumber	"\<\d\+[jJ]\>"
+  syn match   pythonNumber	"\<\d\+[eE][+-]\=\d\+[jJ]\=\>"
+  syn match   pythonNumber
+	\ "\<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@="
+  syn match   pythonNumber
+	\ "\%(^\|\W\)\@<=\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>"
 endif
 
-if exists("python_highlight_builtins")
-  " builtin functions, types and objects, not really part of the syntax
-  syn keyword pythonBuiltin	True False bool enumerate set frozenset help
-  syn keyword pythonBuiltin	reversed sorted sum
-  syn keyword pythonBuiltin	Ellipsis None NotImplemented __import__ abs
-  syn keyword pythonBuiltin	apply buffer callable chr classmethod cmp
-  syn keyword pythonBuiltin	coerce compile complex delattr dict dir divmod
-  syn keyword pythonBuiltin	eval execfile file filter float getattr globals
-  syn keyword pythonBuiltin	hasattr hash hex id input int intern isinstance
-  syn keyword pythonBuiltin	issubclass iter len list locals long map max
-  syn keyword pythonBuiltin	min object oct open ord pow property range
-  syn keyword pythonBuiltin	raw_input reduce reload repr round setattr
-  syn keyword pythonBuiltin	slice staticmethod str super tuple type unichr
-  syn keyword pythonBuiltin	unicode vars xrange zip
+" Group the built-ins in the order in the 'Python Library Reference' for
+" easier comparison.
+" http://docs.python.org/library/constants.html
+" http://docs.python.org/library/functions.html
+" http://docs.python.org/library/functions.html#non-essential-built-in-functions
+" Python built-in functions are in alphabetical order.
+if !exists("python_no_builtin_highlight")
+  " built-in constants
+  " 'False', 'True', and 'None' are also reserved words in Python 3.0
+  syn keyword pythonBuiltin	False True None
+  syn keyword pythonBuiltin	NotImplemented Ellipsis __debug__
+  " built-in functions
+  syn keyword pythonBuiltin	abs all any bin bool chr classmethod
+  syn keyword pythonBuiltin	compile complex delattr dict dir divmod
+  syn keyword pythonBuiltin	enumerate eval filter float format
+  syn keyword pythonBuiltin	frozenset getattr globals hasattr hash
+  syn keyword pythonBuiltin	help hex id input int isinstance
+  syn keyword pythonBuiltin	issubclass iter len list locals map max
+  syn keyword pythonBuiltin	min next object oct open ord pow print
+  syn keyword pythonBuiltin	property range repr reversed round set
+  syn keyword pythonBuiltin	setattr slice sorted staticmethod str
+  syn keyword pythonBuiltin	sum super tuple type vars zip __import__
+  " Python 2.6 only
+  syn keyword pythonBuiltin	basestring callable cmp execfile file
+  syn keyword pythonBuiltin	long raw_input reduce reload unichr
+  syn keyword pythonBuiltin	unicode xrange
+  " Python 3.0 only
+  syn keyword pythonBuiltin	ascii bytearray bytes exec memoryview
+  " non-essential built-in functions; Python 2.6 only
+  syn keyword pythonBuiltin	apply buffer coerce intern
 endif
 
-if exists("python_highlight_exceptions")
-  " builtin exceptions and warnings
-  syn keyword pythonException	ArithmeticError AssertionError AttributeError
-  syn keyword pythonException	DeprecationWarning EOFError EnvironmentError
-  syn keyword pythonException	Exception FloatingPointError IOError
-  syn keyword pythonException	ImportError IndentationError IndexError
-  syn keyword pythonException	KeyError KeyboardInterrupt LookupError
-  syn keyword pythonException	MemoryError NameError NotImplementedError
-  syn keyword pythonException	OSError OverflowError OverflowWarning
-  syn keyword pythonException	ReferenceError RuntimeError RuntimeWarning
-  syn keyword pythonException	StandardError StopIteration SyntaxError
-  syn keyword pythonException	SyntaxWarning SystemError SystemExit TabError
-  syn keyword pythonException	TypeError UnboundLocalError UnicodeError
-  syn keyword pythonException	UnicodeEncodeError UnicodeDecodeError
-  syn keyword pythonException	UnicodeTranslateError
-  syn keyword pythonException	UserWarning ValueError Warning WindowsError
-  syn keyword pythonException	ZeroDivisionError
+" From the 'Python Library Reference' class hierarchy at the bottom.
+" http://docs.python.org/library/exceptions.html
+if !exists("python_no_exception_highlight")
+  " builtin base exceptions (only used as base classes for other exceptions)
+  syn keyword pythonExceptions	BaseException Exception
+  syn keyword pythonExceptions	ArithmeticError EnvironmentError
+  syn keyword pythonExceptions	LookupError
+  " builtin base exception removed in Python 3.0
+  syn keyword pythonExceptions	StandardError
+  " builtin exceptions (actually raised)
+  syn keyword pythonExceptions	AssertionError AttributeError BufferError
+  syn keyword pythonExceptions	EOFError FloatingPointError GeneratorExit
+  syn keyword pythonExceptions	IOError ImportError IndentationError
+  syn keyword pythonExceptions	IndexError KeyError KeyboardInterrupt
+  syn keyword pythonExceptions	MemoryError NameError NotImplementedError
+  syn keyword pythonExceptions	OSError OverflowError ReferenceError
+  syn keyword pythonExceptions	RuntimeError StopIteration SyntaxError
+  syn keyword pythonExceptions	SystemError SystemExit TabError TypeError
+  syn keyword pythonExceptions	UnboundLocalError UnicodeError
+  syn keyword pythonExceptions	UnicodeDecodeError UnicodeEncodeError
+  syn keyword pythonExceptions	UnicodeTranslateError ValueError VMSError
+  syn keyword pythonExceptions	WindowsError ZeroDivisionError
+  " builtin warnings
+  syn keyword pythonExceptions	BytesWarning DeprecationWarning FutureWarning
+  syn keyword pythonExceptions	ImportWarning PendingDeprecationWarning
+  syn keyword pythonExceptions	RuntimeWarning SyntaxWarning UnicodeWarning
+  syn keyword pythonExceptions	UserWarning Warning
 endif
 
-if exists("python_highlight_space_errors")
+if exists("python_space_error_highlight")
   " trailing whitespace
-  syn match   pythonSpaceError   display excludenl "\S\s\+$"ms=s+1
+  syn match   pythonSpaceError	display excludenl "\s\+$"
   " mixed tabs and spaces
-  syn match   pythonSpaceError   display " \+\t"
-  syn match   pythonSpaceError   display "\t\+ "
+  syn match   pythonSpaceError	display " \+\t"
+  syn match   pythonSpaceError	display "\t\+ "
 endif
 
-" This is fast but code inside triple quoted strings screws it up. It
-" is impossible to fix because the only way to know if you are inside a
-" triple quoted string is to start from the beginning of the file. If
-" you have a fast machine you can try uncommenting the "sync minlines"
-" and commenting out the rest.
-syn sync match pythonSync grouphere NONE "):$"
-syn sync maxlines=200
-"syn sync minlines=2000
+" Do not spell doctests inside strings.
+" Notice that the end of a string, either ''', or """, will end the contained
+" doctest too.  Thus, we do *not* need to have it as an end pattern.
+if !exists("python_no_doctest_highlight")
+  if !exists("python_no_doctest_code_higlight")
+    syn region pythonDoctest
+	  \ start="^\s*>>>\s" end="^\s*$"
+	  \ contained contains=ALLBUT,pythonDoctest,@Spell
+    syn region pythonDoctestValue
+	  \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
+	  \ contained
+  else
+    syn region pythonDoctest
+	  \ start="^\s*>>>" end="^\s*$"
+	  \ contained contains=@NoSpell
+  endif
+endif
+
+" Sync at the beginning of class, function, or method definition.
+syn sync match pythonSync grouphere NONE "^\s*\%(def\|class\)\s\+\h\w*\s*("
 
 if version >= 508 || !exists("did_python_syn_inits")
   if version <= 508
@@ -147,35 +256,40 @@
     command -nargs=+ HiLink hi def link <args>
   endif
 
-  " The default methods for highlighting.  Can be overridden later
+  " The default highlight links.  Can be overridden later.
   HiLink pythonStatement	Statement
-  HiLink pythonFunction		Function
   HiLink pythonConditional	Conditional
   HiLink pythonRepeat		Repeat
+  HiLink pythonOperator		Operator
+  HiLink pythonException	Exception
+  HiLink pythonInclude		Include
+  HiLink pythonDecorator	Define
+  HiLink pythonFunction		Function
+  HiLink pythonComment		Comment
+  HiLink pythonTodo		Todo
   HiLink pythonString		String
   HiLink pythonRawString	String
   HiLink pythonEscape		Special
-  HiLink pythonOperator		Operator
-  HiLink pythonPreCondit	PreCondit
-  HiLink pythonComment		Comment
-  HiLink pythonTodo		Todo
-  HiLink pythonDecorator	Define
-  if exists("python_highlight_numbers")
-    HiLink pythonNumber	Number
+  if !exists("python_no_number_highlight")
+    HiLink pythonNumber		Number
   endif
-  if exists("python_highlight_builtins")
+  if !exists("python_no_builtin_highlight")
     HiLink pythonBuiltin	Function
   endif
-  if exists("python_highlight_exceptions")
-    HiLink pythonException	Exception
+  if !exists("python_no_exception_highlight")
+    HiLink pythonExceptions	Structure
   endif
-  if exists("python_highlight_space_errors")
+  if exists("python_space_error_highlight")
     HiLink pythonSpaceError	Error
   endif
+  if !exists("python_no_doctest_highlight")
+    HiLink pythonDoctest	Special
+    HiLink pythonDoctestValue	Define
+  endif
 
   delcommand HiLink
 endif
 
 let b:current_syntax = "python"
 
-" vim: ts=8
+" vim:set sw=2 sts=2 ts=8 noet:
diff --git a/runtime/syntax/rcs.vim b/runtime/syntax/rcs.vim
index 0b56011..04a2cce 100644
--- a/runtime/syntax/rcs.vim
+++ b/runtime/syntax/rcs.vim
@@ -2,7 +2,7 @@
 " Language:     RCS file
 " Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
 " URL:          http://www.hlabs.spb.ru/vim/rcs.vim
-" Revision:     $Id$
+" Revision:     $Id: rcs.vim,v 1.2 2006/03/27 16:41:00 vimboss Exp $
 " Filenames:    *,v
 " Version:      1.11
 
diff --git a/runtime/syntax/readline.vim b/runtime/syntax/readline.vim
index 1972e5a..91094c7 100644
--- a/runtime/syntax/readline.vim
+++ b/runtime/syntax/readline.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         readline(3) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2007-06-17
+" Latest Revision:  2009-05-25
 "   readline_has_bash - if defined add support for bash specific
 "                       settings/functions
 
@@ -128,6 +128,7 @@
                                 \ arrow-key-prefix vi-back-to-indent vi-bword
                                 \ vi-bWord vi-eword vi-eWord vi-fword vi-fWord
                                 \ vi-next-word
+                                \ vi-movement-mode
 
 if exists("readline_has_bash")
   syn keyword readlineFunctions contained
diff --git a/runtime/syntax/remind.vim b/runtime/syntax/remind.vim
index 001868e..93a7178 100644
--- a/runtime/syntax/remind.vim
+++ b/runtime/syntax/remind.vim
@@ -1,12 +1,13 @@
 " Vim syntax file
 " Language:	Remind
 " Maintainer:	Davide Alberani <alberanid@libero.it>
-" Last Change:	10 May 2006
-" Version:	0.3
+" Last Change:	18 Sep 2009
+" Version:	0.5
 " URL:		http://erlug.linux.it/~da/vim/syntax/remind.vim
 "
-" remind is a sophisticated reminder service; you can download remind from:
-" http://www.roaringpenguin.com/penguin/open_source_remind.php
+" remind is a sophisticated reminder service
+" you can download remind from:
+"   http://www.roaringpenguin.com/penguin/open_source_remind.php
 
 if version < 600
   syntax clear
@@ -14,24 +15,30 @@
   finish
 endif
 
-" shut case off
+" shut case off.
 syn case ignore
 
 syn keyword remindCommands	REM OMIT SET FSET UNSET
-syn keyword remindExpiry	UNTIL SCANFROM SCAN WARN SCHED
+syn keyword remindExpiry	UNTIL FROM SCANFROM SCAN WARN SCHED
 syn keyword remindTag		PRIORITY TAG
 syn keyword remindTimed		AT DURATION
 syn keyword remindMove		ONCE SKIP BEFORE AFTER
-syn keyword remindSpecial	INCLUDE INC BANNER PUSH-OMIT-CONTEXT PUSH CLEAR-OMIT-CONTEXT CLEAR POP-OMIT-CONTEXT POP
+syn keyword remindSpecial	INCLUDE INC BANNER PUSH-OMIT-CONTEXT PUSH CLEAR-OMIT-CONTEXT CLEAR POP-OMIT-CONTEXT POP COLOR
 syn keyword remindRun		MSG MSF RUN CAL SATISFY SPECIAL PS PSFILE SHADE MOON
 syn keyword remindConditional	IF ELSE ENDIF IFTRIG
+syn keyword remindDebug		DEBUG DUMPVARS DUMP ERRMSG FLUSH PRESERVE
 syn match remindComment		"#.*$"
 syn region remindString		start=+'+ end=+'+ skip=+\\\\\|\\'+ oneline
 syn region remindString		start=+"+ end=+"+ skip=+\\\\\|\\"+ oneline
-syn keyword remindDebug		DEBUG DUMPVARS DUMP ERRMSG FLUSH PRESERVE
 syn match remindVar		"\$[_a-zA-Z][_a-zA-Z0-9]*"
 syn match remindSubst		"%[^ ]"
 syn match remindAdvanceNumber	"\(\*\|+\|-\|++\|--\)[0-9]\+"
+" XXX: use different separators for dates and times?
+syn match remindDateSeparators	"[/:@\.-]" contained
+syn match remindTimes		"[0-9]\{1,2}[:\.][0-9]\{1,2}" contains=remindDateSeparators
+" XXX: why not match only valid dates?  Ok, checking for 'Feb the 30' would
+"       be impossible, but at least check for valid months and times.
+syn match remindDates		"'[0-9]\{4}[/-][0-9]\{1,2}[/-][0-9]\{1,2}\(@[0-9]\{1,2}[:\.][0-9]\{1,2}\)\?'" contains=remindDateSeparators
 " This will match trailing whitespaces that seem to break rem2ps.
 " Courtesy of Michael Dunn.
 syn match remindWarning		display excludenl "\S\s\+$"ms=s+1
@@ -54,11 +61,14 @@
   HiLink remindRun		Function
   HiLink remindConditional	Conditional
   HiLink remindComment		Comment
+  HiLink remindTimes		String
   HiLink remindString		String
   HiLink remindDebug		Debug
   HiLink remindVar		Identifier
   HiLink remindSubst		Constant
   HiLink remindAdvanceNumber	Number
+  HiLink remindDateSeparators	Comment
+  HiLink remindDates		String
   HiLink remindWarning		Error
 
   delcommand HiLink
diff --git a/runtime/syntax/rhelp.vim b/runtime/syntax/rhelp.vim
index f1b8d88..fa585b2 100644
--- a/runtime/syntax/rhelp.vim
+++ b/runtime/syntax/rhelp.vim
@@ -1,13 +1,14 @@
 " Vim syntax file
 " Language:    R Help File
 " Maintainer:  Johannes Ranke <jranke@uni-bremen.de>
-" Last Change: 2008 Apr 10
-" Version:     0.7.1
-" SVN:		   $Id$
+" Last Change: 2009 Mai 12
+" Version:     0.7.2
+" SVN:		   $Id: rhelp.vim 86 2009-05-12 19:23:47Z ranke $
 " Remarks:     - Now includes R syntax highlighting in the appropriate
 "                sections if an r.vim file is in the same directory or in the
 "                default debian location.
 "              - There is no Latex markup in equations
+"              - Thanks to Will Gray for finding and fixing a bug
 
 " Version Clears: {{{1
 " For version 5.x: Clear all syntax items
@@ -57,7 +58,7 @@
 
 " Links {{{1
 syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend
-syn region rhelpLink matchgroup=rhelpSection start="\\link\[.*\]{" end="}" contained keepend
+syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend
 syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend
 
 " Type Styles {{{1
diff --git a/runtime/syntax/rnoweb.vim b/runtime/syntax/rnoweb.vim
index 9b1dfc7..7d42395 100644
--- a/runtime/syntax/rnoweb.vim
+++ b/runtime/syntax/rnoweb.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:    R noweb Files
 " Maintainer:  Johannes Ranke <jranke@uni-bremen.de>
-" Last Change: 2007 Mär 30
-" Version:     0.8
-" SVN:	       $Id$
+" Last Change: 2009 May 05
+" Version:     0.9
+" SVN:	       $Id: rnoweb.vim 84 2009-05-03 19:52:47Z ranke $
 " Remarks:     - This file is inspired by the proposal of 
 "				 Fernando Henrique Ferraz Pereira da Rosa <feferraz@ime.usp.br>
 "			     http://www.ime.usp.br/~feferraz/en/sweavevim.html
@@ -25,6 +25,7 @@
 unlet b:current_syntax
 
 syn cluster texMatchGroup add=@rnoweb
+syn cluster texMathMatchGroup add=rnowebSexpr
 syn cluster texEnvGroup add=@rnoweb
 syn cluster texFoldGroup add=@rnoweb
 syn cluster texDocGroup		add=@rnoweb
diff --git a/runtime/syntax/rst.vim b/runtime/syntax/rst.vim
index d5a76a2..245c3ae 100644
--- a/runtime/syntax/rst.vim
+++ b/runtime/syntax/rst.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         reStructuredText documentation format
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-07-04
+" Latest Revision:  2009-05-25
 
 if exists("b:current_syntax")
   finish
@@ -12,12 +12,9 @@
 
 syn case ignore
 
-" FIXME: The problem with these two is that Vim doesn’t seem to like
-" matching across line boundaries.
-"
-" syn match   rstSections /^.*\n[=`:.'"~^_*+#-]\+$/
+syn match   rstSections "^\%(\([=`:.'"~^_*+#-]\)\1\+\n\)\=.\+\n\([=`:.'"~^_*+#-]\)\2\+$"
 
-" syn match   rstTransition  /^\s*[=`:.'"~^_*+#-]\{4,}\s*$/
+syn match   rstTransition  /^[=`:.'"~^_*+#-]\{4,}\s*$/
 
 syn cluster rstCruft                contains=rstEmphasis,rstStrongEmphasis,
       \ rstInterpretedText,rstInlineLiteral,rstSubstitutionReference,
@@ -144,8 +141,8 @@
 
 hi def link rstTodo                         Todo
 hi def link rstComment                      Comment
-"hi def link rstSections                     Type
-"hi def link rstTransition                   Type
+hi def link rstSections                     Type
+hi def link rstTransition                   Type
 hi def link rstLiteralBlock                 String
 hi def link rstQuotedLiteralBlock           String
 hi def link rstDoctestBlock                 PreProc
diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim
index a5a118e..f82b4c2 100644
--- a/runtime/syntax/ruby.vim
+++ b/runtime/syntax/ruby.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:		Ruby
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Info:			$Id$
+" Info:			$Id: ruby.vim,v 1.152 2008/06/29 04:33:41 tpope Exp $
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
diff --git a/runtime/syntax/samba.vim b/runtime/syntax/samba.vim
index 31570e0..dae4040 100644
--- a/runtime/syntax/samba.vim
+++ b/runtime/syntax/samba.vim
@@ -2,8 +2,10 @@
 " Language:	samba configuration files (smb.conf)
 " Maintainer:	Rafael Garcia-Suarez <rgarciasuarez@free.fr>
 " URL:		http://rgarciasuarez.free.fr/vim/syntax/samba.vim
-" Last change:	2004 September 21
-
+" Last change:	2009 Aug 06
+"
+"               New maintainer wanted!
+"
 " Don't forget to run your config file through testparm(1)!
 
 " For version 5.x: Clear all syntax items
@@ -51,7 +53,7 @@
 syn keyword sambaKeyword contained netbios nis notify nt null offset ok ole
 syn keyword sambaKeyword contained only open oplock oplocks options order os
 syn keyword sambaKeyword contained output packet page panic passwd password
-syn keyword sambaKeyword contained passwords path permissions pipe port
+syn keyword sambaKeyword contained passwords path permissions pipe port ports
 syn keyword sambaKeyword contained postexec postscript prediction preexec
 syn keyword sambaKeyword contained prefered preferred preload preserve print
 syn keyword sambaKeyword contained printable printcap printer printers
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim
index 6f6927f..f987034 100644
--- a/runtime/syntax/scheme.vim
+++ b/runtime/syntax/scheme.vim
@@ -1,6 +1,6 @@
 " Vim syntax file
-" Language:	Scheme (R5RS)
-" Last Change:	2007 Jun 16
+" Language:	Scheme (R5RS + some R6RS extras)
+" Last Change:	2009 Nov 27
 " Maintainer:	Sergey Khorev <sergey.khorev@gmail.com>
 " Original author:	Dirk van Deun <dirk@igwe.vub.ac.be>
 
@@ -26,8 +26,8 @@
 
 " Fascist highlighting: everything that doesn't fit the rules is an error...
 
-syn match	schemeError	oneline    ![^ \t()\[\]";]*!
-syn match	schemeError	oneline    ")"
+syn match	schemeError	![^ \t()\[\]";]*!
+syn match	schemeError	")"
 
 " Quoted and backquoted stuff
 
@@ -71,6 +71,8 @@
 syn keyword schemeSyntax begin do delay set! else =>
 syn keyword schemeSyntax quote quasiquote unquote unquote-splicing
 syn keyword schemeSyntax define-syntax let-syntax letrec-syntax syntax-rules
+" R6RS
+syn keyword schemeSyntax define-record-type fields protocol
 
 syn keyword schemeFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
 syn keyword schemeFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
@@ -109,30 +111,39 @@
 syn keyword schemeFunc dynamic-wind port? values call-with-values
 syn keyword schemeFunc scheme-report-environment null-environment
 syn keyword schemeFunc interaction-environment
+" R6RS
+syn keyword schemeFunc make-eq-hashtable make-eqv-hashtable make-hashtable
+syn keyword schemeFunc hashtable? hashtable-size hashtable-ref hashtable-set!
+syn keyword schemeFunc hashtable-delete! hashtable-contains? hashtable-update!
+syn keyword schemeFunc hashtable-copy hashtable-clear! hashtable-keys
+syn keyword schemeFunc hashtable-entries hashtable-equivalence-function hashtable-hash-function
+syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash 
+syn keyword schemeFunc find for-all exists filter partition fold-left fold-right
+syn keyword schemeFunc remp remove remv remq memp assp cons*
 
 " ... so that a single + or -, inside a quoted context, would not be
 " interpreted as a number (outside such contexts, it's a schemeFunc)
 
-syn match	schemeDelimiter	oneline    !\.[ \t\[\]()";]!me=e-1
-syn match	schemeDelimiter	oneline    !\.$!
+syn match	schemeDelimiter	!\.[ \t\[\]()";]!me=e-1
+syn match	schemeDelimiter	!\.$!
 " ... and a single dot is not a number but a delimiter
 
 " This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
 
-syn match	schemeOther	oneline    ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*,
-syn match	schemeError	oneline    ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
+syn match	schemeOther	,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*,
+syn match	schemeError	,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
 
-syn match	schemeOther	oneline    "\.\.\."
-syn match	schemeError	oneline    !\.\.\.[^ \t\[\]()";]\+!
+syn match	schemeOther	"\.\.\."
+syn match	schemeError	!\.\.\.[^ \t\[\]()";]\+!
 " ... a special identifier
 
-syn match	schemeConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t\[\]()";],me=e-1
-syn match	schemeConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
-syn match	schemeError	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
+syn match	schemeConstant	,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*[ \t\[\]()";],me=e-1
+syn match	schemeConstant	,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*$,
+syn match	schemeError	,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
 
-syn match	schemeConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1
-syn match	schemeConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
-syn match	schemeError	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
+syn match	schemeConstant	,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1
+syn match	schemeConstant	,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
+syn match	schemeError	,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
 
 " Non-quoted lists, and strings:
 
@@ -153,23 +164,27 @@
 " Writing out the complete description of Scheme numerals without
 " using variables is a day's work for a trained secretary...
 
-syn match	schemeOther	oneline    ![+-][ \t\[\]()";]!me=e-1
-syn match	schemeOther	oneline    ![+-]$!
+syn match	schemeOther	![+-][ \t\[\]()";]!me=e-1
+syn match	schemeOther	![+-]$!
 "
 " This is a useful lax approximation:
-syn match	schemeNumber	oneline    "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
-syn match	schemeError	oneline    ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t\[\]()";][^ \t\[\]()";]*!
+syn match	schemeNumber	"[-#+.]\=[0-9][-#+/0-9a-f@i.boxesfdl]*"
+syn match	schemeError	![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t\[\]()";][^ \t\[\]()";]*!
 
-syn match	schemeBoolean	oneline    "#[tf]"
-syn match	schemeError	oneline    !#[tf][^ \t\[\]()";]\+!
+syn match	schemeBoolean	"#[tf]"
+syn match	schemeError	!#[tf][^ \t\[\]()";]\+!
 
-syn match	schemeChar	oneline    "#\\"
-syn match	schemeChar	oneline    "#\\."
-syn match       schemeError	oneline    !#\\.[^ \t\[\]()";]\+!
-syn match	schemeChar	oneline    "#\\space"
-syn match	schemeError	oneline    !#\\space[^ \t\[\]()";]\+!
-syn match	schemeChar	oneline    "#\\newline"
-syn match	schemeError	oneline    !#\\newline[^ \t\[\]()";]\+!
+syn match	schemeCharacter	"#\\"
+syn match	schemeCharacter	"#\\."
+syn match       schemeError	!#\\.[^ \t\[\]()";]\+!
+syn match	schemeCharacter	"#\\space"
+syn match	schemeError	!#\\space[^ \t\[\]()";]\+!
+syn match	schemeCharacter	"#\\newline"
+syn match	schemeError	!#\\newline[^ \t\[\]()";]\+!
+
+" R6RS
+syn match schemeCharacter "#\\x[0-9a-fA-F]\+"
+
 
 if exists("b:is_mzscheme") || exists("is_mzscheme")
     " MzScheme extensions
@@ -177,11 +192,11 @@
     syn region	schemeComment start="#|" end="|#"
 
     " #%xxx are the special MzScheme identifiers
-    syn match schemeOther oneline    "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+    syn match schemeOther "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
     " anything limited by |'s is identifier
-    syn match schemeOther oneline    "|[^|]\+|"
+    syn match schemeOther "|[^|]\+|"
 
-    syn match	schemeChar	oneline    "#\\\%(return\|tab\)"
+    syn match	schemeCharacter	"#\\\%(return\|tab\)"
 
     " Modules require stmt
     syn keyword schemeExtSyntax module require dynamic-require lib prefix all-except prefix-all-except rename
@@ -234,8 +249,8 @@
     " multiline comment
     syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment
 
-    syn match schemeOther oneline    "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
-    syn match schemeExtSyntax oneline    "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+    syn match schemeOther "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+    syn match schemeExtSyntax "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
 
     syn keyword schemeExtSyntax unit uses declare hide foreign-declare foreign-parse foreign-parse/spec
     syn keyword schemeExtSyntax foreign-lambda foreign-lambda* define-external define-macro load-library
@@ -266,7 +281,7 @@
     endif
 
     " suggested by Alex Queiroz
-    syn match schemeExtSyntax oneline    "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+    syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
     syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ 
 endif
 
@@ -290,7 +305,7 @@
   HiLink schemeFunc		Function
 
   HiLink schemeString		String
-  HiLink schemeChar		Character
+  HiLink schemeCharacter	Character
   HiLink schemeNumber		Number
   HiLink schemeBoolean		Boolean
 
diff --git a/runtime/syntax/sdc.vim b/runtime/syntax/sdc.vim
new file mode 100644
index 0000000..0ca9bec
--- /dev/null
+++ b/runtime/syntax/sdc.vim
@@ -0,0 +1,41 @@
+" Vim syntax file
+" Language:     SDC - Synopsys Design Constraints
+" Maintainer:   Maurizio Tranchero - maurizio.tranchero@gmail.com
+" Last Change:  Thu Mar  25 17:35:16 CET 2009
+" Credits:      based on TCL Vim syntax file
+" Version:	0.3
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Read the TCL syntax to start with
+runtime! syntax/tcl.vim
+
+" SDC-specific keywords
+syn keyword sdcCollections	foreach_in_collection
+syn keyword sdcObjectsQuery	get_clocks get_ports
+syn keyword sdcObjectsInfo	get_point_info get_node_info get_path_info
+syn keyword sdcObjectsInfo	get_timing_paths set_attribute
+syn keyword sdcConstraints	set_false_path
+syn keyword sdcNonIdealities	set_min_delay set_max_delay
+syn keyword sdcNonIdealities	set_input_delay set_output_delay
+syn keyword sdcNonIdealities	set_load set_min_capacitance set_max_capacitance
+syn keyword sdcCreateOperations	create_clock create_timing_netlist update_timing_netlist
+
+" command flags highlighting
+syn match sdcFlags		"[[:space:]]-[[:alpha:]]*\>"
+
+" Define the default highlighting.
+hi def link sdcCollections      Repeat
+hi def link sdcObjectsInfo      Operator
+hi def link sdcCreateOperations	Operator
+hi def link sdcObjectsQuery	Operator
+hi def link sdcConstraints	Operator
+hi def link sdcNonIdealities	Operator
+hi def link sdcFlags		Special
+
+let b:current_syntax = "sdc"
+
+" vim: ts=8
diff --git a/runtime/syntax/sgml.vim b/runtime/syntax/sgml.vim
index bcc46c3..c0c3643 100644
--- a/runtime/syntax/sgml.vim
+++ b/runtime/syntax/sgml.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 " Last Change:	Tue, 27 Apr 2004 15:05:21 CEST
 " Filenames:	*.sgml,*.sgm
-" $Id$
+" $Id: sgml.vim,v 1.1 2004/06/13 17:52:57 vimboss Exp $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/sgmllnx.vim b/runtime/syntax/sgmllnx.vim
index 419e904..99e6ea2 100644
--- a/runtime/syntax/sgmllnx.vim
+++ b/runtime/syntax/sgmllnx.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	SGML-linuxdoc (supported by old sgmltools-1.x)
 "		(for more information, visit www.sgmltools.org)
-" Maintainer:	Nam SungHyun <namsh@kldp.org>
-" Last Change:	2001 Apr 26
+" Maintainer:	SungHyun Nam <goweol@gmail.com>
+" Last Change:	2008 Sep 17
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim
index 5fa8d93..6ef4fba 100644
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -2,8 +2,8 @@
 " Language:		shell (sh) Korn shell (ksh) bash (sh)
 " Maintainer:		Dr. Charles E. Campbell, Jr.  <NdrOchipS@PcampbellAfamily.Mbiz>
 " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:		Jul 11, 2008
-" Version:		102
+" Last Change:		Nov 17, 2009
+" Version:		110
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 " For options and settings, please use:      :help ft-sh-syntax
 " This file includes many ideas from Éric Brunet (eric.brunet@ens.fr)
@@ -67,13 +67,13 @@
 
 " Clusters: contains=@... clusters {{{1
 "==================================
-syn cluster shErrorList	contains=shDoError,shIfError,shInError,shCaseError,shEsacError,shCurlyError,shParenError,shTestError
+syn cluster shErrorList	contains=shDoError,shIfError,shInError,shCaseError,shEsacError,shCurlyError,shParenError,shTestError,shOK
 if exists("b:is_kornshell")
  syn cluster ErrorList add=shDTestError
 endif
-syn cluster shArithParenList	contains=shArithmetic,shDeref,shDerefSimple,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen
+syn cluster shArithParenList	contains=shArithmetic,shCaseEsac,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement
 syn cluster shArithList	contains=@shArithParenList,shParenError
-syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial
+syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
 syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
 syn cluster shColonList	contains=@shCaseList
 syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial
@@ -84,7 +84,7 @@
 syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shExSingleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
 syn cluster shExprList1	contains=shCharClass,shNumber,shOperator,shExSingleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq
 syn cluster shExprList2	contains=@shExprList1,@shCaseList,shTest
-syn cluster shFunctionList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
+syn cluster shFunctionList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn cluster shFunctionList	add=shRepeat
  syn cluster shFunctionList	add=shDblBrace,shDblParen
@@ -94,19 +94,18 @@
 syn cluster shHereListDQ	contains=shBeginHere,@shDblQuoteList,shHerePayload
 syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial
 syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet
-syn cluster shSubShList	contains=@shCaseList,shOperator
+syn cluster shSubShList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
 syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
 
-
 " Echo: {{{1
 " ====
 " This one is needed INSIDE a CommandSub, so that `echo bla` be correct
-syn region shEcho matchgroup=shStatement start="\<echo\>"  skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment
-syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment
-syn match  shEchoQuote contained	'\%(\\\\\)*\\["`']'
+syn region shEcho matchgroup=shStatement start="\<echo\>"  skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
+syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
+syn match  shEchoQuote contained	'\%(\\\\\)*\\["`'()]'
 
 " This must be after the strings, so that ... \" will be correct
-syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=shNumber,shExSingleQuote,shSingleQuote,shDeref,shDerefSimple,shSpecialVar,shOperator,shDoubleQuote,shCharClass,shCtrlSeq
+syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shOperator end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=shNumber,shExSingleQuote,shSingleQuote,shDeref,shDerefSimple,shSpecialVar,shOperator,shDoubleQuote,shCharClass,shCtrlSeq
 
 " Alias: {{{1
 " =====
@@ -125,6 +124,7 @@
 syn match   shEsacError "\<esac\>"
 syn match   shCurlyError "}"
 syn match   shParenError ")"
+syn match   shOK	'\.\(done\|fi\|in\|esac\)'
 if exists("b:is_kornshell")
  syn match     shDTestError "]]"
 endif
@@ -152,14 +152,13 @@
 
 " Subshells: {{{1
 " ==========
-syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"	contains=@shExprList2
-syn region shSubSh transparent matchgroup=shSubShRegion start="(" end=")"	contains=@shSubShList
+syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"	contains=@shExprList2 nextgroup=shMoreSpecial
+syn region shSubSh transparent matchgroup=shSubShRegion start="(" end=")"	contains=@shSubShList nextgroup=shMoreSpecial
 
 " Tests: {{{1
 "=======
-"syn region  shExpr transparent matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList
-syn region shExpr	matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList
-syn region shTest	transparent matchgroup=shStatement start="\<test\>" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=@shExprList1
+syn region shExpr	matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList,shSpecial
+syn region shTest	transparent matchgroup=shStatement start="\<test\s" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=@shExprList1
 syn match  shTestOpr	contained	"<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!<>]"
 syn match  shTestOpr	contained	'=' skipwhite nextgroup=shTestDoubleQuote,shTestSingleQuote,shTestPattern
 syn match  shTestPattern	contained	'\w\+'
@@ -203,10 +202,11 @@
 " ====
 syn match   shCaseBar	contained skipwhite "\(^\|[^\\]\)\(\\\\\)*\zs|"		nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
 syn match   shCaseStart	contained skipwhite skipnl "("			nextgroup=shCase,shCaseBar
-syn region  shCase	contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)"  end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
 if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
+ syn region  shCase	fold contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)"  end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
  syn region  shCaseEsac	fold matchgroup=shConditional start="\<case\>" end="\<esac\>"	contains=@shCaseEsacList
 else
+ syn region  shCase	contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)"  end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
  syn region  shCaseEsac	matchgroup=shConditional start="\<case\>" end="\<esac\>"	contains=@shCaseEsacList
 endif
 syn keyword shCaseIn	contained skipwhite skipnl in			nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
@@ -218,6 +218,7 @@
 syn region  shCaseSingleQuote	matchgroup=shOperator start=+'+ end=+'+		contains=shStringSpecial		skipwhite skipnl nextgroup=shCaseBar	contained
 syn region  shCaseDoubleQuote	matchgroup=shOperator start=+"+ skip=+\\\\\|\\.+ end=+"+	contains=@shDblQuoteList,shStringSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
 syn region  shCaseCommandSub	start=+`+ skip=+\\\\\|\\.+ end=+`+		contains=@shCommandSubList		skipwhite skipnl nextgroup=shCaseBar	contained
+syn region  shCaseRange	matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+]+	contained
 
 " Misc: {{{1
 "======
@@ -256,34 +257,36 @@
 
 syn match   shSource	"^\.\s"
 syn match   shSource	"\s\.\s"
-syn region  shColon	start="^\s*:" end="$\|" end="#"me=e-1 contains=@shColonList
+"syn region  shColon	start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList
+syn region  shColon	start="^\s*\zs:" end="$" end="\s#"me=e-2
 
 " String And Character Constants: {{{1
 "================================
 syn match   shNumber	"-\=\<\d\+\>#\="
 syn match   shCtrlSeq	"\\\d\d\d\|\\[abcfnrtv0]"		contained
 if exists("b:is_bash")
- syn match   shSpecial	"\\\o\o\o\|\\x\x\x\|\\c.\|\\[abefnrtv]"	contained
+ syn match   shSpecial	"\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]"	contained
 endif
 if exists("b:is_bash")
  syn region  shExSingleQuote	matchgroup=shOperator start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial
 else
  syn region  shExSingleQuote	matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial
 endif
-syn region  shSingleQuote	matchgroup=shOperator start=+'+ end=+'+		contains=shStringSpecial,@Spell
+syn region  shSingleQuote	matchgroup=shOperator start=+'+ end=+'+		contains=@Spell
 syn region  shDoubleQuote	matchgroup=shOperator start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
 syn match   shStringSpecial	"[^[:print:] \t]"	contained
 syn match   shStringSpecial	"\%(\\\\\)*\\[\\"'`$()#]"
-syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"
+syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial
 syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"
+syn match   shMoreSpecial	"\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial contained
 
 " Comments: {{{1
 "==========
-syn cluster    shCommentGroup	contains=shTodo,@Spell
-syn keyword    shTodo	contained	COMBAK FIXME TODO XXX
-syn match      shComment	"^\s*\zs#.*$"	contains=@shCommentGroup
-syn match      shComment	"\s\zs#.*$"	contains=@shCommentGroup
-syn match      shQuickComment	contained	"#.*$"
+syn cluster	shCommentGroup	contains=shTodo,@Spell
+syn keyword	shTodo	contained		COMBAK FIXME TODO XXX
+syn match	shComment		"^\s*\zs#.*$"	contains=@shCommentGroup
+syn match	shComment		"\s\zs#.*$"	contains=@shCommentGroup
+syn match	shQuickComment	contained	"#.*$"
 
 " Here Documents: {{{1
 " =========================================
@@ -338,13 +341,13 @@
 syn match  shVariable	"\<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze="	nextgroup=shSetIdentifier
 syn match  shSetIdentifier	"="		contained	nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shSingleQuote,shExSingleQuote
 if exists("b:is_bash")
- syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"	matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze#\|=" contains=@shIdList
- syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"			matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"	matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|=" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"			matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
 elseif exists("b:is_kornshell")
- syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze[#=]" contains=@shIdList
- syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$"				matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$"				matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
 else
- syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shOperator end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
 endif
 
 " Functions: {{{1
@@ -492,7 +495,7 @@
 hi def link shCaseSingleQuote	shSingleQuote
 hi def link shCaseStart	shConditional
 hi def link shCmdSubRegion	shShellVariables
-hi def link shColon	shStatement
+hi def link shColon	shComment
 hi def link shDerefOp	shOperator
 hi def link shDerefPOL	shDerefOp
 hi def link shDerefPPS	shDerefOp
@@ -511,6 +514,7 @@
 hi def link shHereDoc	shString
 hi def link shHerePayload	shHereDoc
 hi def link shLoop	shStatement
+hi def link shMoreSpecial	shSpecial
 hi def link shOption	shCommandSub
 hi def link shPattern	shString
 hi def link shParen	shArithmetic
diff --git a/runtime/syntax/sisu.vim b/runtime/syntax/sisu.vim
index f29bc26..c7cdf2d 100644
--- a/runtime/syntax/sisu.vim
+++ b/runtime/syntax/sisu.vim
@@ -1,6 +1,6 @@
 "SiSU Vim syntax file
 "SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
-"SiSU Markup:     SiSU (sisu-0.66.0, 2008-02-24)
+"SiSU Markup:     SiSU (sisu-0.69.0, 2008-09-16)
 "(originally looked at Ruby Vim by Mirko Nasato)
 
 if version < 600
@@ -81,6 +81,7 @@
 syn region sisu_comment matchgroup=sisu_comment start="^%\{1,2\} " end="$"
 "font face curly brackets
 "syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline
+syn region sisu_index matchgroup=sisu_index_block start="^={" end="}"
 syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*"
 syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!"
 syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_"
@@ -162,7 +163,6 @@
 hi def link sisu_fontface         Include
 hi def link sisu_strikeout        DiffDelete
 hi def link sisu_content_alt      Special
-hi def link sisu_sem_content      String
 hi def link sisu_sem_content      SpecialKey
 hi def link sisu_sem_block        Special
 hi def link sisu_sem_marker       Visual
@@ -173,6 +173,8 @@
 hi def link sisu_sem_ex_content   Comment
 "hi def link sisu_sem_ex_content   SpecialKey
 hi def link sisu_sem_ex_block     Comment
+hi def link sisu_index            SpecialKey
+hi def link sisu_index_block      Visual
 hi def link sisu_content_endnote  Special
 hi def link sisu_control          Define
 hi def link sisu_ocn              Include
diff --git a/runtime/syntax/spec.vim b/runtime/syntax/spec.vim
index cb2f304..8c9dd1f 100644
--- a/runtime/syntax/spec.vim
+++ b/runtime/syntax/spec.vim
@@ -1,8 +1,7 @@
 " Filename:    spec.vim
 " Purpose:     Vim syntax file
 " Language:    SPEC: Build/install scripts for Linux RPM packages
-" Maintainer:  Donovan Rebbechi elflord@pegasus.rutgers.edu
-" URL:	       http://pegasus.rutgers.edu/~elflord/vim/syntax/spec.vim
+" Maintainer:  Donovan Rebbechi elflord@panix.com
 " Last Change: Fri Dec 3 11:54 EST 2004 Marcin Dalecki
 
 " For version 5.x: Clear all syntax items
diff --git a/runtime/syntax/splint.vim b/runtime/syntax/splint.vim
index 2f28380..dc09d8b 100644
--- a/runtime/syntax/splint.vim
+++ b/runtime/syntax/splint.vim
@@ -2,8 +2,8 @@
 " Language:	splint (C with lclint/splint Annotations)
 " Maintainer:	Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
 " Splint Home:	http://www.splint.org/
-" Last Change:	$Date$
-" $Revision$
+" Last Change:	$Date: 2004/06/13 20:08:47 $
+" $Revision: 1.1 $
 
 " Note:		Splint annotated files are not detected by default.
 "		If you want to use this file for highlighting C code,
diff --git a/runtime/syntax/spyce.vim b/runtime/syntax/spyce.vim
index 641aa86..e76cb1a 100644
--- a/runtime/syntax/spyce.vim
+++ b/runtime/syntax/spyce.vim
@@ -2,7 +2,7 @@
 " Language:	   SPYCE
 " Maintainer:	 Rimon Barr <rimon AT acm DOT org>
 " URL:		     http://spyce.sourceforge.net
-" Last Change: 2003 May 11
+" Last Change: 2009 Nov 11
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -25,6 +25,7 @@
 else
   runtime! syntax/html.vim
   unlet b:current_syntax
+  syntax spell default  " added by Bram
 endif
 
 " include python
diff --git a/runtime/syntax/sqlanywhere.vim b/runtime/syntax/sqlanywhere.vim
index 81fa060..5abab38 100644
--- a/runtime/syntax/sqlanywhere.vim
+++ b/runtime/syntax/sqlanywhere.vim
@@ -2,10 +2,11 @@
 " Vim syntax file
 " Language:    SQL, Adaptive Server Anywhere
 " Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Tue 29 Jan 2008 12:54:19 PM Eastern Standard Time
-" Version:     10.0.1
+" Last Change: 2009 Mar 15
+" Version:     11.0.1
 
-" Description: Updated to Adaptive Server Anywhere 10.0.1
+" Description: Updated to Adaptive Server Anywhere 11.0.1
+"              Updated to Adaptive Server Anywhere 10.0.1
 "              Updated to Adaptive Server Anywhere  9.0.2
 "              Updated to Adaptive Server Anywhere  9.0.1
 "              Updated to Adaptive Server Anywhere  9.0.0
@@ -54,20 +55,24 @@
 syn keyword sqlFunction	 strtouuid varexists
 
 " 9.0.1 functions
-syn keyword sqlFunction	 acos asin atan atn2 cast ceiling convert cos cot 
+syn keyword sqlFunction	 acos asin atan atn2 cast ceiling convert cos cot
 syn keyword sqlFunction	 char_length coalesce dateformat datetime degrees exp
-syn keyword sqlFunction	 floor getdate insertstr 
+syn keyword sqlFunction	 floor getdate insertstr
 syn keyword sqlFunction	 log log10 lower mod pi power
-syn keyword sqlFunction	 property radians replicate round sign sin 
+syn keyword sqlFunction	 property radians replicate round sign sin
 syn keyword sqlFunction	 sqldialect tan truncate truncnum
 syn keyword sqlFunction	 base64_encode base64_decode
 syn keyword sqlFunction	 hash compress decompress encrypt decrypt
 
+" 11.0.1 functions
+syn keyword sqlFunction	 connection_extended_property text_handle_vector_match
+syn keyword sqlFunction	 read_client_file write_client_file
+
 " string functions
 syn keyword sqlFunction	 ascii char left ltrim repeat
 syn keyword sqlFunction	 space right rtrim trim lcase ucase
 syn keyword sqlFunction	 locate charindex patindex replace
-syn keyword sqlFunction	 errormsg csconvert 
+syn keyword sqlFunction	 errormsg csconvert
 
 " property functions
 syn keyword sqlFunction	 db_id db_name property_name
@@ -358,125 +363,135 @@
 syn keyword sqlFunction	 sa_set_http_header sa_set_http_option
 syn keyword sqlFunction	 sa_http_variable_info sa_http_header_info
 
-" http functions 9.0.1 
+" http functions 9.0.1
 syn keyword sqlFunction	 http_encode http_decode
 syn keyword sqlFunction	 html_encode html_decode
 
 " keywords
-syn keyword sqlKeyword	 absolute accent action activ add address after
-syn keyword sqlKeyword	 algorithm allow_dup_row
-syn keyword sqlKeyword	 alter and any as append asc ascii ase at atomic
-syn keyword sqlKeyword	 attach attended audit authorization 
+syn keyword sqlKeyword	 absolute accent action active add address aes_decrypt
+syn keyword sqlKeyword	 after aggregate algorithm allow_dup_row allowed
+syn keyword sqlKeyword	 alter and ansi_substring any as append apply asc ascii ase
+syn keyword sqlKeyword	 assign at atan2 atomic attach attended audit authorization
 syn keyword sqlKeyword	 autoincrement autostop batch bcp before
-syn keyword sqlKeyword	 between blank blanks block
-syn keyword sqlKeyword	 both bottom unbounded break bufferpool
+syn keyword sqlKeyword	 between bit_and bit_length bit_or bit_substr bit_xor
+syn keyword sqlKeyword	 blank blanks block
+syn keyword sqlKeyword	 both bottom unbounded break breaker bufferpool
 syn keyword sqlKeyword	 build bulk by byte bytes cache calibrate calibration
 syn keyword sqlKeyword	 cancel capability cascade cast
-syn keyword sqlKeyword	 catalog changes char char_convert check checksum
+syn keyword sqlKeyword	 catalog ceil changes char char_convert check checksum
 syn keyword sqlKeyword	 class classes client cmp
-syn keyword sqlKeyword	 cluster clustered collation column columns
+syn keyword sqlKeyword	 cluster clustered collation
+syn keyword sqlKeyword	 column columns
 syn keyword sqlKeyword	 command comment committed comparisons
 syn keyword sqlKeyword	 compatible component compressed compute computes
-syn keyword sqlKeyword	 concat confirm conflict connection
+syn keyword sqlKeyword	 concat configuration confirm conflict connection
 syn keyword sqlKeyword	 console consolidate consolidated
-syn keyword sqlKeyword	 constraint constraints continue
-syn keyword sqlKeyword	 convert copy count crc cross cube
+syn keyword sqlKeyword	 constraint constraints content continue
+syn keyword sqlKeyword	 convert coordinator copy count count_set_bits
+syn keyword sqlKeyword	 crc createtime cross cube cume_dist
 syn keyword sqlKeyword	 current cursor data data database
 syn keyword sqlKeyword	 current_timestamp current_user
-syn keyword sqlKeyword	 datatype dba dbfile
-syn keyword sqlKeyword	 dbspace dbspacename debug decoupled
-syn keyword sqlKeyword	 decrypted default defaults deferred definition
+syn keyword sqlKeyword	 databases datatype dba dbfile
+syn keyword sqlKeyword	 dbspace dbspaces dbspacename debug decoupled
+syn keyword sqlKeyword	 decrypted default defaults default_dbspace deferred
+syn keyword sqlKeyword	 definer definition
 syn keyword sqlKeyword	 delay deleting delimited dependencies desc
 syn keyword sqlKeyword	 description detach deterministic directory
-syn keyword sqlKeyword	 disable disabled distinct do domain download
+syn keyword sqlKeyword	 disable disabled distinct do domain download duplicate
 syn keyword sqlKeyword	 dsetpass dttm dynamic each editproc ejb
-syn keyword sqlKeyword	 else elseif enable encapsulated encrypted end 
-syn keyword sqlKeyword	 encoding endif engine erase error escape escapes event
-syn keyword sqlKeyword	 every except exception exclude exclusive exec 
-syn keyword sqlKeyword	 existing exists expanded express
+syn keyword sqlKeyword	 else elseif empty enable encapsulated encrypted end
+syn keyword sqlKeyword	 encoding endif engine environment erase error escape escapes event
+syn keyword sqlKeyword	 event_parameter every except exception exclude excluded exclusive exec
+syn keyword sqlKeyword	 existing exists expanded expiry express exprtype extended_property
 syn keyword sqlKeyword	 external externlogin factor failover false
-syn keyword sqlKeyword	 fastfirstrow fieldproc file filler
-syn keyword sqlKeyword	 fillfactor finish first first_keyword 
-syn keyword sqlKeyword	 following force foreign format 
-syn keyword sqlKeyword	 freepage french fresh full function go global
-syn keyword sqlKeyword	 group handler hash having header hexadecimal 
-syn keyword sqlKeyword	 hidden high history hold holdlock
-syn keyword sqlKeyword	 hours id identified identity ignore
+syn keyword sqlKeyword	 fastfirstrow fieldproc file files filler
+syn keyword sqlKeyword	 fillfactor finish first first_keyword first_value
+syn keyword sqlKeyword	 following force foreign format forxml forxml_sep fp frame
+syn keyword sqlKeyword	 freepage french fresh full function gb get_bit go global
+syn keyword sqlKeyword	 group handler hash having header hexadecimal
+syn keyword sqlKeyword	 hidden high history hg hng hold holdlock host
+syn keyword sqlKeyword	 hours http_body http_session_timeout id identified identity ignore
 syn keyword sqlKeyword	 ignore_dup_key ignore_dup_row immediate
-syn keyword sqlKeyword	 in inactive inactivity incremental index info 
+syn keyword sqlKeyword	 in inactiv inactive inactivity included incremental
+syn keyword sqlKeyword	 index index_enabled index_lparen indexonly info
 syn keyword sqlKeyword	 inline inner inout insensitive inserting
 syn keyword sqlKeyword	 instead integrated
-syn keyword sqlKeyword	 internal into introduced iq is isolation jar java
+syn keyword sqlKeyword	 internal intersection into introduced invoker iq is isolation
+syn keyword sqlKeyword	 jar java java_location java_main_userid java_vm_options
 syn keyword sqlKeyword	 jconnect jdk join kb key keep kerberos language last
-syn keyword sqlKeyword	 last_keyword lateral left level like
-syn keyword sqlKeyword	 limit local location log 
-syn keyword sqlKeyword	 logging login logscan long low lru main
-syn keyword sqlKeyword	 match materialized max maximum membership 
-syn keyword sqlKeyword	 minutes mirror mode modify monitor  mru
-syn keyword sqlKeyword	 name named national native natural new next no
+syn keyword sqlKeyword	 last_keyword last_value lateral ld left len lf ln level like
+syn keyword sqlKeyword	 limit local location log
+syn keyword sqlKeyword	 logging login logscan long low lru main manual mark
+syn keyword sqlKeyword	 match matched materialized max maximum mb membership
+syn keyword sqlKeyword	 merge metadata methods minimum minutes mirror mode modify monitor move mru
+syn keyword sqlKeyword	 multiplex name named national native natural new next no
 syn keyword sqlKeyword	 noholdlock nolock nonclustered none not
-syn keyword sqlKeyword	 notify null nulls of off old on
-syn keyword sqlKeyword	 only optimization optimizer option
+syn keyword sqlKeyword	 notify null nullable_constant nulls object oem_string of off offline
+syn keyword sqlKeyword	 old on online only openstring optimization optimizer option
 syn keyword sqlKeyword	 or order others out outer over
 syn keyword sqlKeyword	 package packetsize padding page pages
-syn keyword sqlKeyword	 paglock parallel part partition partner password path
-syn keyword sqlKeyword	 pctfree plan preceding precision prefetch prefix
-syn keyword sqlKeyword	 preserve preview primary 
-syn keyword sqlKeyword	 prior priqty private privileges procedure profile
-syn keyword sqlKeyword	 public publication publish publisher
-syn keyword sqlKeyword	 quote quotes range readcommitted readonly
+syn keyword sqlKeyword	 paglock parallel part partial partition partitions partner password path
+syn keyword sqlKeyword	 pctfree plan policy populate port postfilter preceding precision
+syn keyword sqlKeyword	 prefetch prefilter prefix preserve preview primary
+syn keyword sqlKeyword	 prior priority priqty private privileges procedure profile
+syn keyword sqlKeyword	 property_is_cumulative property_is_numeric public publication publish publisher
+syn keyword sqlKeyword	 quiesce quote quotes range readclientfile readcommitted reader readfile readonly
 syn keyword sqlKeyword	 readpast readuncommitted readwrite rebuild
 syn keyword sqlKeyword	 received recompile recover recursive references
-syn keyword sqlKeyword	 referencing refresh relative relocate
+syn keyword sqlKeyword	 referencing refresh regex regexp regexp_substr relative relocate
 syn keyword sqlKeyword	 rename repeatable repeatableread
-syn keyword sqlKeyword	 replicate rereceive resend reserve reset
+syn keyword sqlKeyword	 replicate request_timeout required rereceive resend reserve reset
 syn keyword sqlKeyword	 resizing resolve resource respect
 syn keyword sqlKeyword	 restrict result retain
-syn keyword sqlKeyword	 returns right 
-syn keyword sqlKeyword	 rollup root row rowlock rows save 
-syn keyword sqlKeyword	 schedule schema scripted scroll seconds secqty
+syn keyword sqlKeyword	 returns reverse right role
+syn keyword sqlKeyword	 rollup root row row_number rowlock rows save
+syn keyword sqlKeyword	 sa_index_hash sa_internal_fk_verify sa_internal_termbreak
+syn keyword sqlKeyword	 sa_order_preserving_hash sa_order_preserving_hash_big sa_order_preserving_hash_prefix
+syn keyword sqlKeyword	 schedule schema scope scripted scroll seconds secqty security
 syn keyword sqlKeyword	 send sensitive sent serializable
-syn keyword sqlKeyword	 server server session sets 
+syn keyword sqlKeyword	 server server session set_bit set_bits sets
 syn keyword sqlKeyword	 share simple since site size skip
-syn keyword sqlKeyword	 snapshot soapheader some sorted_data 
-syn keyword sqlKeyword	 sqlcode sqlid sqlstate stacker stale statement
-syn keyword sqlKeyword	 statistics status stogroup store
-syn keyword sqlKeyword	 strip subpages subscribe subscription
-syn keyword sqlKeyword	 subtransaction synchronization
+syn keyword sqlKeyword	 snapshot soapheader soap_header split some sorted_data
+syn keyword sqlKeyword	 sqlcode sqlid sqlflagger sqlstate sqrt square
+syn keyword sqlKeyword	 stacker stale statement statistics status stddev_pop stddev_samp
+syn keyword sqlKeyword	 stemmer stogroup stoplist store
+syn keyword sqlKeyword	 strip stripesizekb striping subpages subscribe subscription
+syn keyword sqlKeyword	 subtransaction suser_id suser_name synchronization
 syn keyword sqlKeyword	 syntax_error table tablock
-syn keyword sqlKeyword	 tablockx tb temp template temporary then
-syn keyword sqlKeyword	 ties timezone to top tracing
-syn keyword sqlKeyword	 transaction transactional tries true 
+syn keyword sqlKeyword	 tablockx tb temp template temporary term then
+syn keyword sqlKeyword	 ties timezone to to_char to_nchar top traced_plan tracing
+syn keyword sqlKeyword	 transfer transaction transactional tries true
 syn keyword sqlKeyword	 tsequal type tune uncommitted unconditionally
-syn keyword sqlKeyword	 unenforced unique union unknown unload 
-syn keyword sqlKeyword	 updating updlock upgrade upload use user
+syn keyword sqlKeyword	 unenforced unicode unique union unistr unknown unlimited unload
+syn keyword sqlKeyword	 unpartition unquiesce updatetime updating updlock upgrade upload
+syn keyword sqlKeyword	 upper use user
 syn keyword sqlKeyword	 using utc utilities validproc
 syn keyword sqlKeyword	 value values varchar variable
-syn keyword sqlKeyword	 varying vcat verify view virtual wait 
-syn keyword sqlKeyword	 warning web when where window with with_auto
+syn keyword sqlKeyword	 varying var_pop var_samp vcat verify versions view virtual wait
+syn keyword sqlKeyword	 warning wd web when where window with with_auto
 syn keyword sqlKeyword	 with_auto with_cube with_rollup without
-syn keyword sqlKeyword	 with_lparen within word work workload writefile 
-syn keyword sqlKeyword	 writers writeserver xlock zeros
+syn keyword sqlKeyword	 with_lparen within word work workload write writefile
+syn keyword sqlKeyword	 writeclientfile writer writers writeserver xlock zeros
 " XML function support
-syn keyword sqlFunction	 openxml xmlelement xmlforest xmlgen xmlconcat xmlagg 
-syn keyword sqlFunction	 xmlattributes 
+syn keyword sqlFunction	 openxml xmlelement xmlforest xmlgen xmlconcat xmlagg
+syn keyword sqlFunction	 xmlattributes
 syn keyword sqlKeyword	 raw auto elements explicit
 " HTTP support
-syn keyword sqlKeyword	 authorization secure url service
+syn keyword sqlKeyword	 authorization secure url service next_soap_header
 " HTTP 9.0.2 new procedure keywords
 syn keyword sqlKeyword	 namespace certificate clientport proxy
 " OLAP support 9.0.0
-syn keyword sqlKeyword	 covar_pop covar_samp corr regr_slope regr_intercept 
+syn keyword sqlKeyword	 covar_pop covar_samp corr regr_slope regr_intercept
 syn keyword sqlKeyword	 regr_count regr_r2 regr_avgx regr_avgy
 syn keyword sqlKeyword	 regr_sxx regr_syy regr_sxy
 
 " Alternate keywords
 syn keyword sqlKeyword	 character dec options proc reference
-syn keyword sqlKeyword	 subtrans tran syn keyword 
+syn keyword sqlKeyword	 subtrans tran syn keyword
 
 
 syn keyword sqlOperator	 in any some all between exists
-syn keyword sqlOperator	 like escape not is and or 
+syn keyword sqlOperator	 like escape not is and or
 syn keyword sqlOperator  intersect minus
 syn keyword sqlOperator  prior distinct
 
@@ -496,43 +511,38 @@
 
 
 syn keyword sqlType	 char long varchar text
-syn keyword sqlType	 bigint decimal double float int integer numeric 
+syn keyword sqlType	 bigint decimal double float int integer numeric
 syn keyword sqlType	 smallint tinyint real
 syn keyword sqlType	 money smallmoney
-syn keyword sqlType	 bit 
-syn keyword sqlType	 date datetime smalldate time timestamp 
+syn keyword sqlType	 bit
+syn keyword sqlType	 date datetime smalldate time timestamp
 syn keyword sqlType	 binary image varbinary uniqueidentifier
 syn keyword sqlType	 xml unsigned
 " New types 10.0.0
 syn keyword sqlType	 varbit nchar nvarchar
 
 syn keyword sqlOption    Allow_nulls_by_default
+syn keyword sqlOption    Allow_read_client_file
+syn keyword sqlOption    Allow_snapshot_isolation
+syn keyword sqlOption    Allow_write_client_file
 syn keyword sqlOption    Ansi_blanks
 syn keyword sqlOption    Ansi_close_cursors_on_rollback
-syn keyword sqlOption    Ansi_integer_overflow
 syn keyword sqlOption    Ansi_permissions
+syn keyword sqlOption    Ansi_substring
 syn keyword sqlOption    Ansi_update_constraints
 syn keyword sqlOption    Ansinull
-syn keyword sqlOption    Assume_distinct_servers
 syn keyword sqlOption    Auditing
 syn keyword sqlOption    Auditing_options
-syn keyword sqlOption    Auto_commit
-syn keyword sqlOption    Auto_refetch
-syn keyword sqlOption    Automatic_timestamp
 syn keyword sqlOption    Background_priority
-syn keyword sqlOption    Bell
-syn keyword sqlOption    Blob_threshold
 syn keyword sqlOption    Blocking
 syn keyword sqlOption    Blocking_timeout
 syn keyword sqlOption    Chained
-syn keyword sqlOption    Char_OEM_Translation
 syn keyword sqlOption    Checkpoint_time
 syn keyword sqlOption    Cis_option
 syn keyword sqlOption    Cis_rowset_size
 syn keyword sqlOption    Close_on_endtrans
-syn keyword sqlOption    Command_delimiter
-syn keyword sqlOption    Commit_on_exit
-syn keyword sqlOption    Compression
+syn keyword sqlOption    Collect_statistics_on_dml_updates
+syn keyword sqlOption    Conn_auditing
 syn keyword sqlOption    Connection_authentication
 syn keyword sqlOption    Continue_after_raiserror
 syn keyword sqlOption    Conversion_error
@@ -543,125 +553,90 @@
 syn keyword sqlOption    Date_order
 syn keyword sqlOption    Debug_messages
 syn keyword sqlOption    Dedicated_task
+syn keyword sqlOption    Default_dbspace
 syn keyword sqlOption    Default_timestamp_increment
 syn keyword sqlOption    Delayed_commit_timeout
 syn keyword sqlOption    Delayed_commits
-syn keyword sqlOption    Delete_old_logs
-syn keyword sqlOption    Describe_Java_Format
-syn keyword sqlOption    Divide_by_zero_error
-syn keyword sqlOption    Echo
 syn keyword sqlOption    Escape_character
 syn keyword sqlOption    Exclude_operators
 syn keyword sqlOption    Extended_join_syntax
-syn keyword sqlOption    External_remote_options
 syn keyword sqlOption    Fire_triggers
 syn keyword sqlOption    First_day_of_week
-syn keyword sqlOption    Float_as_double
 syn keyword sqlOption    For_xml_null_treatment
 syn keyword sqlOption    Force_view_creation
 syn keyword sqlOption    Global_database_id
-syn keyword sqlOption    Headings
-syn keyword sqlOption    Input_format
+syn keyword sqlOption    Http_session_timeout
 syn keyword sqlOption    Integrated_server_name
 syn keyword sqlOption    Isolation_level
-syn keyword sqlOption    ISQL_command_timing
-syn keyword sqlOption    ISQL_escape_character
-syn keyword sqlOption    ISQL_field_separator
-syn keyword sqlOption    ISQL_log
-syn keyword sqlOption    ISQL_plan
-syn keyword sqlOption    ISQL_plan_cursor_sensitivity
-syn keyword sqlOption    ISQL_plan_cursor_writability
-syn keyword sqlOption    ISQL_quote
-syn keyword sqlOption    Java_heap_size
-syn keyword sqlOption    Java_input_output
-syn keyword sqlOption    Java_namespace_size
-syn keyword sqlOption    Java_page_buffer_size
+syn keyword sqlOption    Java_location
+syn keyword sqlOption    Java_main_userid
+syn keyword sqlOption    Java_vm_options
 syn keyword sqlOption    Lock_rejected_rows
 syn keyword sqlOption    Log_deadlocks
-syn keyword sqlOption    Log_detailed_plans
-syn keyword sqlOption    Log_max_requests
 syn keyword sqlOption    Login_mode
 syn keyword sqlOption    Login_procedure
+syn keyword sqlOption    Materialized_view_optimization
+syn keyword sqlOption    Max_client_statements_cached
 syn keyword sqlOption    Max_cursor_count
 syn keyword sqlOption    Max_hash_size
 syn keyword sqlOption    Max_plans_cached
+syn keyword sqlOption    Max_priority
+syn keyword sqlOption    Max_query_tasks
 syn keyword sqlOption    Max_recursive_iterations
 syn keyword sqlOption    Max_statement_count
-syn keyword sqlOption    Max_work_table_hash_size
+syn keyword sqlOption    Max_temp_space
 syn keyword sqlOption    Min_password_length
 syn keyword sqlOption    Nearest_century
 syn keyword sqlOption    Non_keywords
-syn keyword sqlOption    NULLS
-syn keyword sqlOption    ODBC_describe_binary_as_varbinary
-syn keyword sqlOption    ODBC_distinguish_char_and_varchar
-syn keyword sqlOption    On_Charset_conversion_failure
-syn keyword sqlOption    On_error
+syn keyword sqlOption    Odbc_describe_binary_as_varbinary
+syn keyword sqlOption    Odbc_distinguish_char_and_varchar
+syn keyword sqlOption    Oem_string
+syn keyword sqlOption    On_charset_conversion_failure
 syn keyword sqlOption    On_tsql_error
-syn keyword sqlOption    Optimistic_wait_for_commit
 syn keyword sqlOption    Optimization_goal
 syn keyword sqlOption    Optimization_level
-syn keyword sqlOption    Optimization_logging
 syn keyword sqlOption    Optimization_workload
-syn keyword sqlOption    Output_format
-syn keyword sqlOption    Output_length
-syn keyword sqlOption    Output_nulls
-syn keyword sqlOption    Percent_as_comment
 syn keyword sqlOption    Pinned_cursor_percent_of_cache
+syn keyword sqlOption    Post_login_procedure
 syn keyword sqlOption    Precision
 syn keyword sqlOption    Prefetch
 syn keyword sqlOption    Preserve_source_format
 syn keyword sqlOption    Prevent_article_pkey_update
-syn keyword sqlOption    Qualify_owners
-syn keyword sqlOption    Query_plan_on_open
-syn keyword sqlOption    Quiet
-syn keyword sqlOption    Quote_all_identifiers
+syn keyword sqlOption    Priority
+syn keyword sqlOption    Query_mem_timeout
 syn keyword sqlOption    Quoted_identifier
 syn keyword sqlOption    Read_past_deleted
 syn keyword sqlOption    Recovery_time
 syn keyword sqlOption    Remote_idle_timeout
 syn keyword sqlOption    Replicate_all
-syn keyword sqlOption    Replication_error
-syn keyword sqlOption    Replication_error_piece
+syn keyword sqlOption    Request_timeout
 syn keyword sqlOption    Return_date_time_as_string
-syn keyword sqlOption    Return_java_as_string
-syn keyword sqlOption    RI_Trigger_time
 syn keyword sqlOption    Rollback_on_deadlock
 syn keyword sqlOption    Row_counts
-syn keyword sqlOption    Save_remote_passwords
 syn keyword sqlOption    Scale
-syn keyword sqlOption    Screen_format
-syn keyword sqlOption    Sort_Collation
-syn keyword sqlOption    SQL_flagger_error_level
-syn keyword sqlOption    SQL_flagger_warning_level
-syn keyword sqlOption    SQLConnect
-syn keyword sqlOption    SQLStart
-syn keyword sqlOption    SR_Date_Format
-syn keyword sqlOption    SR_Time_Format
-syn keyword sqlOption    SR_TimeStamp_Format
-syn keyword sqlOption    Statistics
+syn keyword sqlOption    Secure_feature_key
+syn keyword sqlOption    Sort_collation
+syn keyword sqlOption    Sql_flagger_error_level
+syn keyword sqlOption    Sql_flagger_warning_level
 syn keyword sqlOption    String_rtruncation
-syn keyword sqlOption    Subscribe_by_remote
 syn keyword sqlOption    Subsume_row_locks
-syn keyword sqlOption    Suppress_TDS_debugging
-syn keyword sqlOption    TDS_Empty_string_is_null
+syn keyword sqlOption    Suppress_tds_debugging
+syn keyword sqlOption    Synchronize_mirror_on_commit
+syn keyword sqlOption    Tds_empty_string_is_null
 syn keyword sqlOption    Temp_space_limit_check
-syn keyword sqlOption    Thread_count
-syn keyword sqlOption    Thread_stack
-syn keyword sqlOption    Thread_swaps
 syn keyword sqlOption    Time_format
 syn keyword sqlOption    Time_zone_adjustment
 syn keyword sqlOption    Timestamp_format
-syn keyword sqlOption    Truncate_date_values
 syn keyword sqlOption    Truncate_timestamp_values
-syn keyword sqlOption    Truncate_with_auto_commit
-syn keyword sqlOption    Truncation_length
-syn keyword sqlOption    Tsql_hex_constant
+syn keyword sqlOption    Tsql_outer_joins
 syn keyword sqlOption    Tsql_variables
+syn keyword sqlOption    Updatable_statement_isolation
 syn keyword sqlOption    Update_statistics
+syn keyword sqlOption    Upgrade_database_capability
 syn keyword sqlOption    User_estimates
-syn keyword sqlOption    Verify_all_columns
-syn keyword sqlOption    Verify_threshold
+syn keyword sqlOption    Verify_password_function
 syn keyword sqlOption    Wait_for_commit
+syn keyword sqlOption    Webservice_namespace_host
 
 " Strings and characters:
 syn region sqlString		start=+"+    end=+"+ contains=@Spell
diff --git a/runtime/syntax/sshconfig.vim b/runtime/syntax/sshconfig.vim
index 44f23d7..45947f2 100644
--- a/runtime/syntax/sshconfig.vim
+++ b/runtime/syntax/sshconfig.vim
@@ -1,23 +1,21 @@
 " Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
-" Language: OpenSSH server configuration file (ssh_config)
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2006-03-05
-" URL: http://trific.ath.cx/Ftp/vim/syntax/sshconfig.vim
+" Language: OpenSSH client configuration file (ssh_config)
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2009-07-09
 
 " Setup
 if version >= 600
-	if exists("b:current_syntax")
-		finish
-	endif
+  if exists("b:current_syntax")
+    finish
+  endif
 else
-	syntax clear
+  syntax clear
 endif
 
 if version >= 600
-	setlocal iskeyword=_,-,a-z,A-Z,48-57
+  setlocal iskeyword=_,-,a-z,A-Z,48-57
 else
-	set iskeyword=_,-,a-z,A-Z,48-57
+  set iskeyword=_,-,a-z,A-Z,48-57
 endif
 
 syn case ignore
@@ -28,19 +26,21 @@
 
 " Constants
 syn keyword sshconfigYesNo yes no ask
-syn keyword sshconfigCipher blowfish des 3des
+syn keyword sshconfigYesNo any auto
 syn keyword sshconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
 syn keyword sshconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
 syn keyword sshconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
 syn keyword sshconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
 syn keyword sshconfigMAC hmac-md5-96
+syn match sshconfigMAC "\<umac-64@openssh\.com\>"
 syn keyword sshconfigHostKeyAlg ssh-rsa ssh-dss
 syn keyword sshconfigPreferredAuth hostbased publickey password
 syn keyword sshconfigPreferredAuth keyboard-interactive
 syn keyword sshconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
 syn keyword sshconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
-syn keyword sshconfigSysLogFacility DAEMON USER AUTH LOCAL0 LOCAL1 LOCAL2
-syn keyword sshconfigSysLogFacility LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+syn keyword sshconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
+syn keyword sshconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+syn match sshconfigVar "%[rhpldun]\>"
 syn match sshconfigSpecial "[*?]"
 syn match sshconfigNumber "\d\+"
 syn match sshconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
@@ -49,57 +49,68 @@
 
 " Keywords
 syn keyword sshconfigHostSect Host
-syn keyword sshconfigKeyword AddressFamily BatchMode BindAddress
+syn keyword sshconfigKeyword AddressFamily
+syn keyword sshconfigKeyword BatchMode BindAddress
 syn keyword sshconfigKeyword ChallengeResponseAuthentication CheckHostIP
 syn keyword sshconfigKeyword Cipher Ciphers ClearAllForwardings
 syn keyword sshconfigKeyword Compression CompressionLevel ConnectTimeout
 syn keyword sshconfigKeyword ConnectionAttempts ControlMaster
-syn keyword sshconfigKeyword ControlPath DynamicForward EnableSSHKeysign
-syn keyword sshconfigKeyword EscapeChar ForwardAgent ForwardX11
-syn keyword sshconfigKeyword ForwardX11Trusted GSSAPIAuthentication
+syn keyword sshconfigKeyword ControlPath DynamicForward
+syn keyword sshconfigKeyword EnableSSHKeysign EscapeChar ExitOnForwardFailure
+syn keyword sshconfigKeyword ForwardAgent ForwardX11
+syn keyword sshconfigKeyword ForwardX11Trusted
+syn keyword sshconfigKeyword GSSAPIAuthentication
 syn keyword sshconfigKeyword GSSAPIDelegateCredentials GatewayPorts
-syn keyword sshconfigKeyword GlobalKnownHostsFile HostKeyAlgorithms
-syn keyword sshconfigKeyword HashKnownHosts KbdInteractiveDevices
+syn keyword sshconfigKeyword GlobalKnownHostsFile
+syn keyword sshconfigKeyword HostKeyAlgorithms HashKnownHosts
 syn keyword sshconfigKeyword HostKeyAlias HostName HostbasedAuthentication
-syn keyword sshconfigKeyword IdentitiesOnly IdentityFile LocalForward
-syn keyword sshconfigKeyword LogLevel MACs NoHostAuthenticationForLocalhost
-syn keyword sshconfigKeyword NumberOfPasswordPrompts PasswordAuthentication
+syn keyword sshconfigKeyword IdentitiesOnly IdentityFile
+syn keyword sshconfigKeyword KbdInteractiveAuthentication KbdInteractiveDevices
+syn keyword sshconfigKeyword LocalCommand LocalForward LogLevel
+syn keyword sshconfigKeyword MACs
+syn keyword sshconfigKeyword NoHostAuthenticationForLocalhost
+syn keyword sshconfigKeyword NumberOfPasswordPrompts
+syn keyword sshconfigKeyword PasswordAuthentication PermitLocalCommand
 syn keyword sshconfigKeyword Port PreferredAuthentications Protocol
 syn keyword sshconfigKeyword ProxyCommand PubkeyAuthentication
-syn keyword sshconfigKeyword RSAAuthentication RemoteForward
-syn keyword sshconfigKeyword RhostsAuthentication RhostsRSAAuthentication
+syn keyword sshconfigKeyword PermitLocalCommand
+syn keyword sshconfigKeyword RSAAuthentication RemoteForward RekeyLimit
+syn keyword sshconfigKeyword RhostsRSAAuthentication
 syn keyword sshconfigKeyword SendEnv ServerAliveCountMax ServerAliveInterval
 syn keyword sshconfigKeyword SmartcardDevice StrictHostKeyChecking
+syn keyword sshconfigKeyword Tunnel TunnelDevice
 syn keyword sshconfigKeyword TCPKeepAlive UsePrivilegedPort User
-syn keyword sshconfigKeyword UserKnownHostsFile VerifyHostKeyDNS XAuthLocation
+syn keyword sshconfigKeyword UserKnownHostsFile
+syn keyword sshconfigKeyword VerifyHostKeyDNS VisualHostKey
+syn keyword sshconfigKeyword XAuthLocation
 
 " Define the default highlighting
 if version >= 508 || !exists("did_sshconfig_syntax_inits")
-	if version < 508
-		let did_sshconfig_syntax_inits = 1
-		command -nargs=+ HiLink hi link <args>
-	else
-		command -nargs=+ HiLink hi def link <args>
-	endif
+  if version < 508
+    let did_sshconfig_syntax_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
 
-	HiLink sshconfigComment Comment
-	HiLink sshconfigTodo Todo
-	HiLink sshconfigHostPort sshconfigConstant
-	HiLink sshconfigNumber sshconfigConstant
-	HiLink sshconfigConstant Constant
-	HiLink sshconfigYesNo sshconfigEnum
-	HiLink sshconfigCipher sshconfigEnum
-	HiLink sshconfigMAC sshconfigEnum
-	HiLink sshconfigHostKeyAlg sshconfigEnum
-	HiLink sshconfigLogLevel sshconfigEnum
-	HiLink sshconfigSysLogFacility sshconfigEnum
-	HiLink sshconfigPreferredAuth sshconfigEnum
-	HiLink sshconfigEnum Function
-	HiLink sshconfigSpecial Special
-	HiLink sshconfigKeyword Keyword
-	HiLink sshconfigHostSect Type
-	delcommand HiLink
+  HiLink sshconfigComment        Comment
+  HiLink sshconfigTodo           Todo
+  HiLink sshconfigHostPort       sshconfigConstant
+  HiLink sshconfigNumber         sshconfigConstant
+  HiLink sshconfigConstant       Constant
+  HiLink sshconfigYesNo          sshconfigEnum
+  HiLink sshconfigCipher         sshconfigEnum
+  HiLink sshconfigMAC            sshconfigEnum
+  HiLink sshconfigHostKeyAlg     sshconfigEnum
+  HiLink sshconfigLogLevel       sshconfigEnum
+  HiLink sshconfigSysLogFacility sshconfigEnum
+  HiLink sshconfigPreferredAuth  sshconfigEnum
+  HiLink sshconfigVar            sshconfigEnum
+  HiLink sshconfigEnum           Identifier
+  HiLink sshconfigSpecial        Special
+  HiLink sshconfigKeyword        Keyword
+  HiLink sshconfigHostSect       Type
+  delcommand HiLink
 endif
 
 let b:current_syntax = "sshconfig"
-
diff --git a/runtime/syntax/sshdconfig.vim b/runtime/syntax/sshdconfig.vim
index 2217e09..97ee8f8 100644
--- a/runtime/syntax/sshdconfig.vim
+++ b/runtime/syntax/sshdconfig.vim
@@ -1,23 +1,21 @@
 " Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
 " Language: OpenSSH server configuration file (sshd_config)
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2006-03-05
-" URL: http://trific.ath.cx/Ftp/vim/syntax/sshdconfig.vim
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2009-07-09
 
 " Setup
 if version >= 600
-	if exists("b:current_syntax")
-		finish
-	endif
+  if exists("b:current_syntax")
+    finish
+  endif
 else
-	syntax clear
+  syntax clear
 endif
 
 if version >= 600
-	setlocal iskeyword=_,-,a-z,A-Z,48-57
+  setlocal iskeyword=_,-,a-z,A-Z,48-57
 else
-	set iskeyword=_,-,a-z,A-Z,48-57
+  set iskeyword=_,-,a-z,A-Z,48-57
 endif
 
 syn case ignore
@@ -27,78 +25,87 @@
 syn keyword sshdconfigTodo TODO FIXME NOT contained
 
 " Constants
-syn keyword sshdconfigYesNo yes no
+syn keyword sshdconfigYesNo yes no none
+syn keyword sshdconfigAddressFamily any inet inet6
 syn keyword sshdconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
 syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
 syn keyword sshdconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
 syn keyword sshdconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
 syn keyword sshdconfigMAC hmac-md5-96
+syn match sshdconfigMAC "\<umac-64@openssh\.com\>"
 syn keyword sshdconfigRootLogin without-password forced-commands-only
 syn keyword sshdconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
 syn keyword sshdconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
-syn keyword sshdconfigSysLogFacility DAEMON USER AUTH LOCAL0 LOCAL1 LOCAL2
-syn keyword sshdconfigSysLogFacility LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+syn keyword sshdconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
+syn keyword sshdconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
 syn match sshdconfigSpecial "[*?]"
 syn match sshdconfigNumber "\d\+"
 syn match sshdconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
 syn match sshdconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>"
+" FIXME: this matches quite a few things which are NOT valid IPv6 addresses
 syn match sshdconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}:\d\+\>"
 syn match sshdconfigTime "\<\(\d\+[sSmMhHdDwW]\)\+\>"
 
 " Keywords
-syn keyword sshdconfigKeyword AcceptEnv AddressFamily
+syn keyword sshdconfigMatch Host User Group Address
+syn keyword sshdconfigKeyword AcceptEnv AddressFamily AllowAgentForwarding
 syn keyword sshdconfigKeyword AllowGroups AllowTcpForwarding
-syn keyword sshdconfigKeyword AllowUsers AuthorizedKeysFile Banner
-syn keyword sshdconfigKeyword ChallengeResponseAuthentication
+syn keyword sshdconfigKeyword AllowUsers AuthorizedKeysFile
+syn keyword sshdconfigKeyword Banner
+syn keyword sshdconfigKeyword ChallengeResponseAuthentication ChrootDirectory
 syn keyword sshdconfigKeyword Ciphers ClientAliveCountMax
 syn keyword sshdconfigKeyword ClientAliveInterval Compression
-syn keyword sshdconfigKeyword DenyGroups DenyUsers GSSAPIAuthentication
-syn keyword sshdconfigKeyword GSSAPICleanupCredentials GatewayPorts
-syn keyword sshdconfigKeyword HostKey HostbasedAuthentication
+syn keyword sshdconfigKeyword DenyGroups DenyUsers
+syn keyword sshdconfigKeyword ForceCommand
+syn keyword sshdconfigKeyword GatewayPorts GSSAPIAuthentication
+syn keyword sshdconfigKeyword GSSAPICleanupCredentials
+syn keyword sshdconfigKeyword HostbasedAuthentication HostKey
 syn keyword sshdconfigKeyword IgnoreRhosts IgnoreUserKnownHosts
-syn keyword sshdconfigKeyword KerberosAuthentication KerberosOrLocalPasswd
-syn keyword sshdconfigKeyword KerberosTgtPassing KerberosTicketCleanup
-syn keyword sshdconfigKeyword KerberosGetAFSToken
-syn keyword sshdconfigKeyword KeyRegenerationInterval ListenAddress
-syn keyword sshdconfigKeyword LogLevel LoginGraceTime MACs MaxAuthTries
-syn keyword sshdconfigKeyword MaxStartups PasswordAuthentication
-syn keyword sshdconfigKeyword PermitEmptyPasswords PermitRootLogin
+syn keyword sshdconfigKeyword KerberosAuthentication KerberosGetAFSToken
+syn keyword sshdconfigKeyword KerberosOrLocalPasswd KerberosTicketCleanup
+syn keyword sshdconfigKeyword KeyRegenerationInterval
+syn keyword sshdconfigKeyword ListenAddress LoginGraceTime LogLevel
+syn keyword sshdconfigKeyword MACs Match MaxAuthTries MaxSessions MaxStartups
+syn keyword sshdconfigKeyword PasswordAuthentication PermitEmptyPasswords
+syn keyword sshdconfigKeyword PermitRootLogin PermitOpen PermitTunnel
 syn keyword sshdconfigKeyword PermitUserEnvironment PidFile Port
 syn keyword sshdconfigKeyword PrintLastLog PrintMotd Protocol
-syn keyword sshdconfigKeyword PubkeyAuthentication RSAAuthentication
-syn keyword sshdconfigKeyword RhostsAuthentication RhostsRSAAuthentication
-syn keyword sshdconfigKeyword ServerKeyBits StrictModes Subsystem
-syn keyword sshdconfigKeyword ShowPatchLevel
-syn keyword sshdconfigKeyword SyslogFacility TCPKeepAlive UseDNS
-syn keyword sshdconfigKeyword UseLogin UsePAM UsePrivilegeSeparation
+syn keyword sshdconfigKeyword PubkeyAuthentication
+syn keyword sshdconfigKeyword RhostsRSAAuthentication RSAAuthentication
+syn keyword sshdconfigKeyword ServerKeyBits ShowPatchLevel StrictModes
+syn keyword sshdconfigKeyword Subsystem SyslogFacility
+syn keyword sshdconfigKeyword TCPKeepAlive
+syn keyword sshdconfigKeyword UseDNS UseLogin UsePAM UsePrivilegeSeparation
 syn keyword sshdconfigKeyword X11DisplayOffset X11Forwarding
 syn keyword sshdconfigKeyword X11UseLocalhost XAuthLocation
 
 " Define the default highlighting
 if version >= 508 || !exists("did_sshdconfig_syntax_inits")
-	if version < 508
-		let did_sshdconfig_syntax_inits = 1
-		command -nargs=+ HiLink hi link <args>
-	else
-		command -nargs=+ HiLink hi def link <args>
-	endif
+  if version < 508
+    let did_sshdconfig_syntax_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
 
-	HiLink sshdconfigComment Comment
-	HiLink sshdconfigTodo Todo
-	HiLink sshdconfigHostPort sshdconfigConstant
-	HiLink sshdconfigTime sshdconfigConstant
-	HiLink sshdconfigNumber sshdconfigConstant
-	HiLink sshdconfigConstant Constant
-	HiLink sshdconfigYesNo sshdconfigEnum
-	HiLink sshdconfigCipher sshdconfigEnum
-	HiLink sshdconfigMAC sshdconfigEnum
-	HiLink sshdconfigRootLogin sshdconfigEnum
-	HiLink sshdconfigLogLevel sshdconfigEnum
-	HiLink sshdconfigSysLogFacility sshdconfigEnum
-	HiLink sshdconfigEnum Function
-	HiLink sshdconfigSpecial Special
-	HiLink sshdconfigKeyword Keyword
-	delcommand HiLink
+  HiLink sshdconfigComment        Comment
+  HiLink sshdconfigTodo           Todo
+  HiLink sshdconfigHostPort       sshdconfigConstant
+  HiLink sshdconfigTime           sshdconfigConstant
+  HiLink sshdconfigNumber         sshdconfigConstant
+  HiLink sshdconfigConstant       Constant
+  HiLink sshdconfigYesNo          sshdconfigEnum
+  HiLink sshdconfigAddressFamily  sshdconfigEnum
+  HiLink sshdconfigCipher         sshdconfigEnum
+  HiLink sshdconfigMAC            sshdconfigEnum
+  HiLink sshdconfigRootLogin      sshdconfigEnum
+  HiLink sshdconfigLogLevel       sshdconfigEnum
+  HiLink sshdconfigSysLogFacility sshdconfigEnum
+  HiLink sshdconfigEnum           Function
+  HiLink sshdconfigSpecial        Special
+  HiLink sshdconfigKeyword        Keyword
+  HiLink sshdconfigMatch          Type
+  delcommand HiLink
 endif
 
 let b:current_syntax = "sshdconfig"
diff --git a/runtime/syntax/svn.vim b/runtime/syntax/svn.vim
index bb4f594..0cd770a 100644
--- a/runtime/syntax/svn.vim
+++ b/runtime/syntax/svn.vim
@@ -2,7 +2,7 @@
 " Language:     Subversion (svn) commit file
 " Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
 " URL:          http://www.hlabs.spb.ru/vim/svn.vim
-" Revision:     $Id$
+" Revision:     $Id: svn.vim 683 2008-07-30 11:52:38Z hdima $
 " Filenames:    svn-commit*.tmp
 " Version:      1.6
 
diff --git a/runtime/syntax/tads.vim b/runtime/syntax/tads.vim
index 70ffe6f..260ff36 100644
--- a/runtime/syntax/tads.vim
+++ b/runtime/syntax/tads.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	TADS
 " Maintainer:	Amir Karger <karger@post.harvard.edu>
-" $Date$
-" $Revision$
+" $Date: 2004/06/13 19:28:45 $
+" $Revision: 1.1 $
 " Stolen from: Bram Moolenaar's C language file
 " Newest version at: http://www.hec.utah.edu/~karger/vim/syntax/tads.vim
 " History info at the bottom of the file
diff --git a/runtime/syntax/taskdata.vim b/runtime/syntax/taskdata.vim
new file mode 100644
index 0000000..79186e0
--- /dev/null
+++ b/runtime/syntax/taskdata.vim
@@ -0,0 +1,43 @@
+" Vim syntax file
+" Language:	task data
+" Maintainer:	John Florian <jflorian@doubledog.org>
+" Updated:	Wed Jul  8 19:46:20 EDT 2009
+
+
+" For version 5.x: Clear all syntax items.
+" For version 6.x: Quit when a syntax file was already loaded.
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" Key Names for values.
+syn keyword taskdataKey		description due end entry imask mask parent
+syn keyword taskdataKey		priority project recur start status tags uuid
+syn match taskdataKey		"annotation_\d\+"
+syn match taskdataUndo		"^time.*$"
+syn match taskdataUndo		"^\(old \|new \|---\)"
+
+" Values associated with key names.
+"
+" Strings
+syn region taskdataString	matchgroup=Normal start=+"+ end=+"+
+			\	contains=taskdataEncoded,taskdataUUID,@Spell
+"
+" Special Embedded Characters (e.g., "&comma;")
+syn match taskdataEncoded	"&\a\+;" contained
+" UUIDs
+syn match taskdataUUID		"\x\{8}-\(\x\{4}-\)\{3}\x\{12}" contained
+
+
+" The default methods for highlighting.  Can be overridden later.
+hi def link taskdataEncoded	Function
+hi def link taskdataKey		Statement
+hi def link taskdataString 	String
+hi def link taskdataUUID 	Special
+hi def link taskdataUndo 	Type
+
+let b:current_syntax = "taskdata"
+
+" vim:noexpandtab
diff --git a/runtime/syntax/taskedit.vim b/runtime/syntax/taskedit.vim
new file mode 100644
index 0000000..c7e0ea7
--- /dev/null
+++ b/runtime/syntax/taskedit.vim
@@ -0,0 +1,35 @@
+" Vim syntax file
+" Language:	support for 'task 42 edit'
+" Maintainer:	John Florian <jflorian@doubledog.org>
+" Updated:	Wed Jul  8 19:46:32 EDT 2009
+
+
+" For version 5.x: Clear all syntax items.
+" For version 6.x: Quit when a syntax file was already loaded.
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syn match taskeditHeading	"^\s*#\s*Name\s\+Editable details\s*$" contained
+syn match taskeditHeading	"^\s*#\s*-\+\s\+-\+\s*$" contained
+syn match taskeditReadOnly	"^\s*#\s*\(UU\)\?ID:.*$" contained
+syn match taskeditReadOnly	"^\s*#\s*Status:.*$" contained
+syn match taskeditReadOnly	"^\s*#\s*i\?Mask:.*$" contained
+syn match taskeditKey		"^ *.\{-}:" nextgroup=taskeditString
+syn match taskeditComment	"^\s*#.*$"
+			\	contains=taskeditReadOnly,taskeditHeading
+syn match taskeditString	".*$" contained contains=@Spell
+
+
+" The default methods for highlighting.  Can be overridden later.
+hi def link taskeditComment	Comment
+hi def link taskeditHeading	Function
+hi def link taskeditKey		Statement
+hi def link taskeditReadOnly	Special
+hi def link taskeditString	String
+
+let b:current_syntax = "taskedit"
+
+" vim:noexpandtab
diff --git a/runtime/syntax/tcl.vim b/runtime/syntax/tcl.vim
index e9562d6..d15422d 100644
--- a/runtime/syntax/tcl.vim
+++ b/runtime/syntax/tcl.vim
@@ -1,13 +1,16 @@
 " Vim syntax file
-" Language:	TCL/TK
-" Maintainer:	Brett Cannon <brett@python.org>
+" Language:	Tcl/Tk
+" Maintainer:	Taylor Venable <taylor@metasyntax.net>
+" 		(previously Brett Cannon <brett@python.org>)
 " 		(previously Dean Copsey <copsey@cs.ucdavis.edu>)
 "		(previously Matt Neumann <mattneu@purpleturtle.com>)
 "		(previously Allan Kelly <allan@fruitloaf.co.uk>)
 " Original:	Robin Becker <robin@jessikat.demon.co.uk>
-" Last Change:	2006 Nov 17
+" Last Change:	2009/04/06 02:38:36
+" Version:	1.13
+" URL:		http://real.metasyntax.net:2357/cvs/cvsweb.cgi/Config/vim/syntax/tcl.vim
 "
-" Keywords TODO: format clock click anchor
+" Keywords TODO: click anchor
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -17,19 +20,40 @@
   finish
 endif
 
-" A bunch of useful keywords
-syn keyword tclStatement  tell socket subst open eof pwd glob list exec pid
-syn keyword tclStatement  auto_load_index time unknown eval lrange fblocked
-syn keyword tclStatement  lsearch auto_import gets lappend proc variable llength
-syn keyword tclStatement  auto_execok return linsert error catch clock info
-syn keyword tclStatement  split array fconfigure concat join lreplace source
-syn keyword tclStatement  fcopy global auto_qualify update close cd auto_load
-syn keyword tclStatement  file append format read package set binary namespace
-syn keyword tclStatement  scan trace seek flush after vwait uplevel lset rename
-syn keyword tclStatement  fileevent regexp upvar unset encoding expr load regsub
-syn keyword tclStatement interp exit puts incr lindex lsort tclLog string
+" Basic Tcl commands: http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm
+syn keyword tclCommand		after append apply array bgerror binary catch cd chan clock
+syn keyword tclCommand		close concat dde dict encoding eof error eval exec exit
+syn keyword tclCommand		expr fblocked fconfigure fcopy file fileevent filename flush
+syn keyword tclCommand		format gets glob global history incr info interp join
+syn keyword tclCommand		lappend lassign lindex linsert list llength load lrange lrepeat
+syn keyword tclCommand		lreplace lreverse lsearch lset lsort memory namespace open package
+syn keyword tclCommand		pid proc puts pwd read regexp registry regsub rename return
+syn keyword tclCommand		scan seek set socket source split string subst tell time
+syn keyword tclCommand		trace unknown unload unset update uplevel upvar variable vwait
+
+" The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.5/TclCmd/library.htm
+syn keyword tclCommand		auto_execok auto_import auto_load auto_mkindex auto_mkindex_old
+syn keyword tclCommand		auto_qualify auto_reset parray tcl_endOfWord tcl_findLibrary
+syn keyword tclCommand		tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter
+syn keyword tclCommand		tcl_wordBreakBefore
+
+" Commands that were added in Tcl 8.6
+
+syn keyword tclCommand		my oo::copy oo::define oo::objdefine self
+syn keyword tclCommand		coroutine tailcall throw yield
+
+" Global variables used by Tcl: http://www.tcl.tk/man/tcl8.5/TclCmd/tclvars.htm
+syn keyword tclVars		env errorCode errorInfo tcl_library tcl_patchLevel tcl_pkgPath
+syn keyword tclVars		tcl_platform tcl_precision tcl_rcFileName tcl_traceCompile
+syn keyword tclVars		tcl_traceExec tcl_wordchars tcl_nonwordchars tcl_version argc argv
+syn keyword tclVars		argv0 tcl_interactive geometry
+
+" Strings which expr accepts as boolean values, aside from zero / non-zero.
+syn keyword tclBoolean		true false on off yes no
+
 syn keyword tclLabel		case default
 syn keyword tclConditional	if then else elseif switch
+syn keyword tclConditional	try finally
 syn keyword tclRepeat		while for foreach break continue
 syn keyword tcltkSwitch	contained	insert create polygon fill outline tag
 
@@ -63,9 +87,14 @@
 syn keyword tcltkWidgetSwitch contained delete names types create
 " variable reference
 	" ::optional::namespaces
-syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_.]*::\)*\)\a[a-zA-Z0-9_.]*"
+syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_]*::\)*\)\a[[:alnum:]_]*"
 	" ${...} may contain any character except '}'
 syn match tclVarRef "${[^}]*}"
+
+" The syntactic unquote-splicing replacement for [expand].
+syn match tclExpand '\s{\*}'
+syn match tclExpand '^{\*}'
+
 " menu, mane add
 syn keyword tcltkWidgetSwitch contained active end last none cascade checkbutton command radiobutton separator
 syn keyword tcltkWidgetSwitch contained activebackground actveforeground accelerator background bitmap columnbreak
@@ -130,11 +159,10 @@
 
 " EXPR
 " commands associated with expr
-syn keyword tcltkMaths	contained	acos	cos	hypot	sinh
-syn keyword tcltkMaths	contained	asin	cosh	log	sqrt
-syn keyword tcltkMaths	contained	atan	exp	log10	tan
-syn keyword tcltkMaths	contained	atan2	floor	pow	tanh
-syn keyword tcltkMaths	contained	ceil	fmod	sin
+syn keyword tcltkMaths contained	abs acos asin atan atan2 bool ceil cos cosh double entier
+syn keyword tcltkMaths contained	exp floor fmod hypot int isqrt log log10 max min pow rand
+syn keyword tcltkMaths contained	round sin sinh sqrt srand tan tanh wide
+
 syn region tcltkCommand matchgroup=tcltkCommandColor start="\<expr\>" matchgroup=NONE skip="^\s*$" end="]\|[^\\]*\s*$"me=e-1  contains=tclLineContinue,tcltkMaths,tclNumber,tclVarRef,tclString,tcltlWidgetSwitch,tcltkCommand,tcltkPackConf
 
 " format
@@ -165,17 +193,26 @@
 
 syn keyword tclTodo contained	TODO
 
+" Sequences which are backslash-escaped: http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M16
+" Octal, hexadecimal, unicode codepoints, and the classics.
+" Tcl takes as many valid characters in a row as it can, so \xAZ in a string is newline followed by 'Z'.
+syn match   tclSpecial contained '\\\([0-7]\{1,3}\|x\x\{1,2}\|u\x\{1,4}\|[abfnrtv]\)'
+syn match   tclSpecial contained '\\[\[\]\{\}\"\$]'
 
-" String and Character contstants
-" Highlight special characters (those which have a backslash) differently
-syn match   tclSpecial contained "\\\d\d\d\=\|\\."
+" Command appearing inside another command or inside a string.
+syn region tclEmbeddedStatement	start='\[' end='\]' contained contains=tclCommand,tclNumber,tclLineContinue,tclString,tclVarRef,tclEmbeddedStatement
 " A string needs the skip argument as it may legitimately contain \".
 " Match at start of line
 syn region  tclString		  start=+^"+ end=+"+ contains=tclSpecial skip=+\\\\\|\\"+
 "Match all other legal strings.
-syn region  tclString		  start=+[^\\]"+ms=s+1  end=+"+ contains=tclSpecial skip=+\\\\\|\\"+
+syn region  tclString		  start=+[^\\]"+ms=s+1  end=+"+ contains=tclSpecial,tclVarRef,tclEmbeddedStatement skip=+\\\\\|\\"+
 
-syn match   tclLineContinue "\\\s*$"
+" Line continuation is backslash immediately followed by newline.
+syn match tclLineContinue '\\$'
+
+if exists('g:tcl_warn_continuation')
+    syn match tclNotLineContinue '\\\s\+$'
+endif
 
 "integer number, or floating point number without a dot and with "f".
 syn case ignore
@@ -208,13 +245,13 @@
   endif
 
   HiLink tcltkSwitch		Special
+  HiLink tclExpand		Special
   HiLink tclLabel		Label
   HiLink tclConditional		Conditional
   HiLink tclRepeat		Repeat
   HiLink tclNumber		Number
   HiLink tclError		Error
-  HiLink tclStatement		Statement
-  "HiLink tclStatementColor	Statement
+  HiLink tclCommand		Statement
   HiLink tclString		String
   HiLink tclComment		Comment
   HiLink tclSpecial		Special
@@ -223,6 +260,9 @@
   HiLink tcltkCommandColor	Statement
   HiLink tcltkWidgetColor	Structure
   HiLink tclLineContinue	WarningMsg
+if exists('g:tcl_warn_continuation')
+  HiLink tclNotLineContinue	ErrorMsg
+endif
   HiLink tcltkStringSwitch	Special
   HiLink tcltkArraySwitch	Special
   HiLink tcltkLsortSwitch	Special
@@ -232,7 +272,6 @@
   HiLink tcltkNamespaceSwitch	Special
   HiLink tcltkWidgetSwitch	Special
   HiLink tcltkPackConfColor	Identifier
-  "HiLink tcltkLsort		Statement
   HiLink tclVarRef		Identifier
 
   delcommand HiLink
@@ -240,4 +279,4 @@
 
 let b:current_syntax = "tcl"
 
-" vim: ts=8
+" vim: ts=8 noet
diff --git a/runtime/syntax/tcsh.vim b/runtime/syntax/tcsh.vim
index 94c4181..b535d11 100644
--- a/runtime/syntax/tcsh.vim
+++ b/runtime/syntax/tcsh.vim
@@ -1,6 +1,6 @@
 " tcsh.vim: Vim syntax file for tcsh scripts
-" Maintainer:	Gautam Iyer <gi1242@users.sourceforge.net>
-" Modified:	Sat 16 Jun 2007 04:52:12 PM PDT
+" Maintainer:	Gautam Iyer <gi1242@gmail.com>
+" Modified:	Thu 17 Dec 2009 06:05:07 PM EST
 "
 " Description: We break up each statement into a "command" and an "end" part.
 " All groups are either a "command" or part of the "end" of a statement (ie
@@ -60,7 +60,7 @@
 " alias and unalias (contains special aliases)
 syn keyword tcshAliases contained beepcmd cwdcmd jobcmd helpcommand periodic precmd postcmd shell
 syn keyword tcshBuiltin	nextgroup=tcshAliCmd skipwhite alias unalias
-syn match   tcshAliCmd	contained nextgroup=tcshAliEnd skipwhite '\v[\w-]+' contains=tcshAliases
+syn match   tcshAliCmd	contained nextgroup=tcshAliEnd skipwhite '\v(\w|-)+' contains=tcshAliases
 syn region  tcshAliEnd	contained transparent matchgroup=tcshBuiltin start='' skip='\\$' end='$\|;' contains=@tcshStatementEnds
 
 " if statements
@@ -197,7 +197,11 @@
 
 " ----- Synchronising -----
 if exists('tcsh_minlines')
-    exec 'syn sync minlines=' . tcsh_minlines
+    if tcsh_minlines == 'fromstart'
+	syn sync fromstart
+    else
+	exec 'syn sync minlines=' . tcsh_minlines
+    endif
 else
     syn sync minlines=100	" Some completions can be quite long
 endif
diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim
index 1393a58..ff171d3 100644
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	TeX
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change:	Jun 03, 2008
-" Version:	41
+" Last Change:	Dec 28, 2009
+" Version:	46
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Notes: {{{1
@@ -103,6 +103,7 @@
 syn cluster texEnvGroup		contains=texMatcher,texMathDelim,texSpecialChar,texStatement
 syn cluster texFoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texSectionMarker,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract
 syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
+syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
 syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
 if !exists("tex_no_math")
  syn cluster texMathZones	contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
@@ -179,24 +180,24 @@
 
 " \begin{}/\end{} section markers: {{{1
 syn match  texSectionMarker	"\\begin\>\|\\end\>" nextgroup=texSectionName
-syn region texSectionName	matchgroup=Delimiter start="{" end="}"  contained nextgroup=texSectionModifier
-syn region texSectionModifier	matchgroup=Delimiter start="\[" end="]" contained
+syn region texSectionName	matchgroup=Delimiter start="{" end="}"  contained	nextgroup=texSectionModifier	contains=texComment
+syn region texSectionModifier	matchgroup=Delimiter start="\[" end="]" contained	contains=texComment
 
 " \documentclass, \documentstyle, \usepackage: {{{1
 syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texSectionName,texDocTypeArgs
-syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texSectionName
+syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texSectionName	contains=texComment
 
 " Preamble syntax-based folding support: {{{1
 if g:tex_fold_enabled && has("folding")
- syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=@texMatchGroup
+ syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texMatchGroup
 endif
 
 " TeX input: {{{1
 syn match texInput		"\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7				contains=texStatement
-syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies
+syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies,texInputFileOpt
 syn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
 syn match texInputCurlies	"[{}]"								contained
-syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained
+syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
 
 " Type Styles (LaTeX 2.09): {{{1
 syn match texTypeStyle		"\\rm\>"
@@ -309,7 +310,7 @@
    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
-   exe 'HiLink '.grpname.' texMath'
+   exe 'hi def link '.grpname.' texMath'
    if a:starform
     let grpname  = "texMathZone".a:sfx.'S'
     let syncname = "texSyncMathZone".a:sfx.'S'
@@ -317,7 +318,7 @@
     exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
-    exe 'HiLink '.grpname.' texMath'
+    exe 'hi def link '.grpname.' texMath'
    endif
  endfun
 
@@ -399,7 +400,7 @@
 " Separate lines used for verb` and verb# so that the end conditions {{{1
 " will appropriately terminate.  Ideally vim would let me save a
 " character from the start pattern and re-use it in the end-pattern.
-syn region texZone		start="\\begin{verbatim}"		end="\\end{verbatim}\|%stopzone\>"	contains=@Spell
+syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
 " listings package:
 syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
 " moreverb package:
@@ -456,6 +457,14 @@
 " TeX String Delimiters: {{{1
 syn match texString		"\(``\|''\|,,\)"
 
+" makeatletter -- makeatother sections
+if !exists("g:tex_no_error")
+ syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
+ syn match  texStyleStatement		"\\[a-zA-Z@]\+"	contained
+ syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
+ syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
+endif
+
 " LaTeX synchronization: {{{1
 syn sync maxlines=200
 syn sync minlines=50
@@ -507,6 +516,7 @@
    HiLink texMathDelimSet2	texMathDelim
    HiLink texMathDelimKey	texMathDelim
    HiLink texMathMatcher	texMath
+   HiLink texMathZoneV		texMath
    HiLink texMathZoneW		texMath
    HiLink texMathZoneX		texMath
    HiLink texMathZoneY		texMath
@@ -516,6 +526,7 @@
   HiLink texSectionMarker	texCmdName
   HiLink texSectionName		texSection
   HiLink texSpaceCode		texStatement
+  HiLink texStyleStatement	texStatement
   HiLink texTypeSize		texType
   HiLink texTypeStyle		texType
 
diff --git a/runtime/syntax/tilde.vim b/runtime/syntax/tilde.vim
index 5688050..3fdebf1 100644
--- a/runtime/syntax/tilde.vim
+++ b/runtime/syntax/tilde.vim
@@ -3,7 +3,7 @@
 " Language:	Tilde
 " Maintainer:	Tobias Rundström <tobi@tildesoftware.net>
 " URL:		http://www.tildesoftware.net
-" CVS:		$Id$
+" CVS:		$Id: tilde.vim,v 1.1 2004/06/13 19:31:51 vimboss Exp $
 
 if exists("b:current_syntax")
   finish
diff --git a/runtime/syntax/uil.vim b/runtime/syntax/uil.vim
index bdc4e95..a439984 100644
--- a/runtime/syntax/uil.vim
+++ b/runtime/syntax/uil.vim
@@ -1,8 +1,9 @@
 " Vim syntax file
 " Language:	Motif UIL (User Interface Language)
 " Maintainer:	Thomas Koehler <jean-luc@picard.franken.de>
-" Last Change:	2002 Sep 20
-" URL:		http://jeanluc-picard.de/vim/syntax/uil.vim
+" Last Change:	2009 Dec 04
+" URL:		http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/uil.vim
+
 
 " Quit when a syntax file was already loaded
 if version < 600
diff --git a/runtime/syntax/updatedb.vim b/runtime/syntax/updatedb.vim
index 4f912d4..7c082d6 100644
--- a/runtime/syntax/updatedb.vim
+++ b/runtime/syntax/updatedb.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         updatedb.conf(5) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2007-10-25
+" Latest Revision:  2009-05-25
 
 if exists("b:current_syntax")
   finish
@@ -18,7 +18,11 @@
 syn match   updatedbBegin   display '^'
                             \ nextgroup=updatedbName,updatedbComment skipwhite
 
-syn keyword updatedbName    contained PRUNEFS PRUNEPATHS PRUNE_BIND_MOUNTS
+syn keyword updatedbName    contained
+                            \ PRUNEFS
+                            \ PRUNENAMES
+                            \ PRUNEPATHS
+                            \ PRUNE_BIND_MOUNTS
                             \ nextgroup=updatedbNameEq
 
 syn match   updatedbNameEq  contained display '=' nextgroup=updatedbValue
diff --git a/runtime/syntax/vhdl.vim b/runtime/syntax/vhdl.vim
index 96fbcd6..4ac3b6d 100644
--- a/runtime/syntax/vhdl.vim
+++ b/runtime/syntax/vhdl.vim
@@ -2,7 +2,7 @@
 " Language:	VHDL
 " Maintainer:	Czo <Olivier.Sirol@lip6.fr>
 " Credits:	Stephan Hegel <stephan.hegel@snc.siemens.com.cn>
-" $Id$
+" $Id: vhdl.vim,v 1.1 2004/06/13 15:34:56 vimboss Exp $
 
 " VHSIC Hardware Description Language
 " Very High Scale Integrated Circuit
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 5bfcd66..22afcf4 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 7.2 script
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	July 29, 2008
-" Version:	7.2-82
+" Last Change:	Nov 18, 2009
+" Version:	7.2-95
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
@@ -16,11 +16,11 @@
 syn cluster vimCommentGroup	contains=vimTodo,@Spell
 
 " regular vim commands {{{2
-syn keyword vimCommand contained	abc[lear] argdo argu[ment] bel[owright] bN[ext] breakd[el] b[uffer] caddb[uffer] cb[uffer] cex[pr] cg[etfile] checkt[ime] cnew[er] col[der] con[tinue] cq[uit] delc[ommand] diffoff diffu[pdate] dr[op] echom[sg] em[enu] endt[ry] exu[sage] fin[d] foldc[lose] fu[nction] ha[rdcopy] helpt[ags] if is[earch] ju[mps] kee[pmarks] lan[guage] lc[d] lefta[bove] lgetb[uffer] lgrepa[dd] lla[st] lmapc[lear] lnf[ile] loc[kmarks] lpf[ile] lt[ag] mak[e] menut[ranslate] mkvie[w] mzf[ile] n[ext] nu[mber] opt[ions] perld[o] pp[op] P[rint] promptr[epl] ptj[ump] ptp[revious] pw[d] q[uit] redi[r] reg[isters] rew[ind] rubyd[o] sal[l] sba[ll] sbn[ext] sb[uffer] setf[iletype] sfir[st] sim[alt] sm[ap] sn[ext] snor[emap] so[urce] spellr[epall] spr[evious] star[tinsert] stopi[nsert] sunmenu t tabe[dit] tabm[ove] tabo[nly] ta[g] tclf[ile] tj[ump] tn[ext] tr[ewind] tu[nmenu] undol[ist] verb[ose] vim[grep] vmapc[lear] wh[ile] win[size] wq wv[iminfo] xm[ap] XMLent xnoremenu
-syn keyword vimCommand contained	abo[veleft] arge[dit] as[cii] bf[irst] bo[tright] breakl[ist] buffers cad[dexpr] cc cf[ile] c[hange] cla[st] cn[ext] colo[rscheme] cope[n] cr[ewind] d[elete] diffpatch dig[raphs] ds[earch] echon emenu* endw[hile] f[ile] fini[sh] folddoc[losed] go[to] h[elp] hid[e] ij[ump] isp[lit] k laddb[uffer] la[st] lch[dir] lex[pr] lgete[xpr] lh[elpgrep] lli[st] lnew[er] lNf[ile] lockv[ar] lp[revious] lv[imgrep] ma[rk] mk[exrc] mkv[imrc] mz[scheme] N[ext] omapc[lear] pc[lose] po[p] pre[serve] profd[el] ps[earch] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red[o] res[ize] ri[ght] rubyf[ile] san[dbox] sbf[irst] sbN[ext] scripte[ncoding] setg[lobal] sh[ell] sla[st] smapc[lear] sN[ext] snoreme spelld[ump] spellu[ndo] sre[wind] startr[eplace] sts[elect] sus[pend] tab tabf[ind] tabnew tabp[revious] tags te[aroff] tl[ast] tN[ext] try una[bbreviate] unh[ide] ve[rsion] vimgrepa[dd] vne[w] winc[md] wn[ext] wqa[ll] X xmapc[lear] XMLns xunme
-syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bl[ast] bp[revious] br[ewind] bun[load] caddf[ile] ccl[ose] cfir[st] changes cl[ist] cN[ext] comc[lear] co[py] cuna[bbrev] delf[unction] diffpu[t] di[splay] dsp[lit] e[dit] endfo[r] ene[w] files fir[st] foldd[oopen] gr[ep] helpf[ind] his[tory] il[ist] iuna[bbrev] keepalt lad[dexpr] later lcl[ose] lf[ile] lg[etfile] l[ist] lmak[e] lne[xt] ln[oremap] lol[der] lr[ewind] lvimgrepa[dd] marks mks[ession] mod[e] nbkey nmapc[lear] on[ly] ped[it] popu prev[ious] prof[ile] pta[g] ptn[ext] pts[elect] py[thon] r[ead] redr[aw] ret[ab] rightb[elow] ru[ntime] sa[rgument] sbl[ast] sbp[revious] scrip[tnames] setl[ocal] sign sl[eep] sme sni[ff] snoremenu spe[llgood] spellw[rong] sta[g] stj[ump] sun[hide] sv[iew] tabc[lose] tabfir[st] tabn[ext] tabr[ewind] tc[l] tf[irst] tm to[pleft] ts[elect] u[ndo] unlo[ckvar] vert[ical] vi[sual] vs[plit] windo wN[ext] w[rite] xa[ll] xme xn[oremap] xunmenu
-syn keyword vimCommand contained	arga[dd] argl[ocal] ba[ll] bm[odified] brea[k] bro[wse] bw[ipeout] cal[l] cd cgetb[uffer] chd[ir] clo[se] cnf[ile] comp[iler] cpf[ile] cw[indow] delm[arks] diffsplit dj[ump] earlier el[se] endf[unction] ex filetype fix[del] foldo[pen] grepa[dd] helpg[rep] iabc[lear] imapc[lear] j[oin] keepj[umps] laddf[ile] lb[uffer] le[ft] lfir[st] lgr[ep] ll lm[ap] lN[ext] lo[adview] lop[en] ls lw[indow] mat[ch] mksp[ell] m[ove] new noh[lsearch] o[pen] pe[rl] popu[p] p[rint] promptf[ind] ptf[irst] ptN[ext] pu[t] qa[ll] rec[over] redraws[tatus] retu[rn] rub[y] rv[iminfo] sav[eas] sbm[odified] sbr[ewind] se[t] sf[ind] sil[ent] sm[agic] smenu sno[magic] sor[t] spelli[nfo] sp[lit] startg[replace] st[op] sunme syncbind tabd[o] tabl[ast] tabN[ext] tabs tcld[o] th[row] tm[enu] tp[revious] tu undoj[oin] up[date] vie[w] viu[sage] wa[ll] winp[os] wp[revious] ws[verb] x[it] xmenu xnoreme y[ank]
-syn keyword vimCommand contained	argd[elete] ar[gs] bd[elete] bn[ext] breaka[dd] bufdo cabc[lear] cat[ch] ce[nter] cgete[xpr] che[ckpath] cmapc[lear] cNf[ile] conf[irm] cp[revious] debugg[reedy] diffg[et] diffthis dl[ist] echoe[rr] elsei[f] en[dif] exi[t] fina[lly] fo[ld] for 
+syn keyword vimCommand contained	abc[lear] argdo argu[ment] bel[owright] bN[ext] breakd[el] b[uffer] caddb[uffer] cb[uffer] cex[pr] cg[etfile] checkt[ime] cnew[er] col[der] con[tinue] cq[uit] delc[ommand] diffoff diffu[pdate] dr[op] echom[sg] em[enu] en[dif] ex files fini[sh] foldc[lose] for grepa[dd] helpg[rep] iabc[lear] imapc[lear] j[oin] keepj[umps] laddf[ile] lb[uffer] le[ft] lfir[st] lgr[ep] ll lmapc[lear] lnf[ile] lockv[ar] lp[revious] lv[imgrep] ma[rk] mk[exrc] mkv[imrc] mz[scheme] N[ext] ol[dfiles] opt[ions] perld[o] pp[op] P[rint] promptr[epl] ptj[ump] ptp[revious] pw[d] q[uit] redi[r] reg[isters] rew[ind] rubyd[o] sal[l] sba[ll] sbn[ext] sb[uffer] setf[iletype] sfir[st] sim[alt] sm[ap] sN[ext] snoremenu spe[llgood] spellw[rong] sta[g] stj[ump] sun[hide] sv[iew] tabc[lose] tabfir[st] tabn[ext] tabr[ewind] tc[l] tf[irst] tm to[pleft] ts[elect] u[ndo] unlo[ckvar] vert[ical] vi[sual] vs[plit] windo wN[ext] w[rite] xa[ll] xmenu xnoremenu
+syn keyword vimCommand contained	abo[veleft] arge[dit] as[cii] bf[irst] bo[tright] breakl[ist] buffers cad[dexpr] cc cf[ile] c[hange] cla[st] cn[ext] colo[rscheme] cope[n] cr[ewind] d[elete] diffpatch dig[raphs] ds[earch] echon emenu* endt[ry] exi[t] filetype fir[st] folddoc[losed] fu[nction] ha[rdcopy] helpt[ags] if is[earch] ju[mps] kee[pmarks] lan[guage] lc[d] lefta[bove] lgetb[uffer] lgrepa[dd] lla[st] lnew[er] lNf[ile] lol[der] lr[ewind] lvimgrepa[dd] marks mks[ession] mod[e] nbkey nmapc[lear] omapc[lear] pc[lose] po[p] pre[serve] profd[el] ps[earch] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red[o] res[ize] ri[ght] rubyf[ile] san[dbox] sbf[irst] sbN[ext] scripte[ncoding] setg[lobal] sh[ell] sla[st] sme sni[ff] sor[t] spelli[nfo] sp[lit] startg[replace] st[op] sunme syncbind tabd[o] tabl[ast] tabN[ext] tabs tcld[o] th[row] tm[enu] tp[revious] tu undoj[oin] up[date] vie[w] viu[sage] wa[ll] winp[os] wp[revious] ws[verb] x[it] XMLent xunme
+syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bl[ast] bp[revious] br[ewind] bun[load] caddf[ile] ccl[ose] cfir[st] changes cl[ist] cN[ext] comc[lear] co[py] cuna[bbrev] delf[unction] diffpu[t] di[splay] dsp[lit] e[dit] endfo[r] endw[hile] exu[sage] fina[lly] fix[del] foldd[oopen] go[to] h[elp] hid[e] ij[ump] isp[lit] k laddb[uffer] la[st] lch[dir] lex[pr] lgete[xpr] lh[elpgrep] lli[st] lne[xt] lo[adview] lop[en] ls lw[indow] mat[ch] mksp[ell] m[ove] new noh[lsearch] on[ly] ped[it] popu prev[ious] prof[ile] pta[g] ptn[ext] pts[elect] py[thon] r[ead] redr[aw] ret[ab] rightb[elow] ru[ntime] sa[rgument] sbl[ast] sbp[revious] scrip[tnames] setl[ocal] sign sl[eep] smenu sno[magic] so[urce] spellr[epall] spr[evious] star[tinsert] stopi[nsert] sunmenu t tabe[dit] tabm[ove] tabo[nly] ta[g] tclf[ile] tj[ump] tn[ext] tr[ewind] tu[nmenu] undol[ist] verb[ose] vim[grep] vmapc[lear] wh[ile] win[size] wq wv[iminfo] xmapc[lear] XMLns xunmenu
+syn keyword vimCommand contained	arga[dd] argl[ocal] ba[ll] bm[odified] brea[k] bro[wse] bw[ipeout] cal[l] cd cgetb[uffer] chd[ir] clo[se] cnf[ile] comp[iler] cpf[ile] cw[indow] delm[arks] diffsplit dj[ump] earlier el[se] endf[unction] ene[w] f[ile] fin[d] fo[ld] foldo[pen] gr[ep] helpf[ind] his[tory] il[ist] iuna[bbrev] keepalt lad[dexpr] later lcl[ose] lf[ile] lg[etfile] l[ist] lmak[e] lN[ext] loc[kmarks] lpf[ile] lt[ag] mak[e] menut[ranslate] mkvie[w] mzf[ile] n[ext] nu[mber] o[pen] pe[rl] popu[p] p[rint] promptf[ind] ptf[irst] ptN[ext] pu[t] qa[ll] rec[over] redraws[tatus] retu[rn] rub[y] rv[iminfo] sav[eas] sbm[odified] sbr[ewind] se[t] sf[ind] sil[ent] sm[agic] sn[ext] snoreme spelld[ump] spellu[ndo] sre[wind] startr[eplace] sts[elect] sus[pend] tab tabf[ind] tabnew tabp[revious] tags te[aroff] tl[ast] tN[ext] try una[bbreviate] unh[ide] ve[rsion] vimgrepa[dd] vne[w] winc[md] wn[ext] wqa[ll] X xme xnoreme y[ank]
+syn keyword vimCommand contained	argd[elete] ar[gs] bd[elete] bn[ext] breaka[dd] bufdo cabc[lear] cat[ch] ce[nter] cgete[xpr] che[ckpath] cmapc[lear] cNf[ile] conf[irm] cp[revious] debugg[reedy] diffg[et] diffthis dl[ist] echoe[rr] elsei[f] 
 syn match   vimCommand contained	"\<z[-+^.=]"
 
 " vimOptions are caught only when contained in a vimSet {{{2
@@ -33,7 +33,7 @@
 syn keyword vimOption contained	altkeymap arabic autowrite backupcopy bdir bin bomb bt cd ci cinw co completefunc cp cscopetag csto debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt ri 
 
 " vimOptions: These are the turn-off setting variants {{{2
-syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopeverbose nocuc nocursorline nodg nodisable noeb noedcompatible noendofline noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw noremap norevins norightleft norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowinfixheight nowiv nowrap nowrite nowritebackup
+syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopeverbose nocuc nocursorline nodg noimdisable noeb noedcompatible noendofline noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw noremap norevins norightleft norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowinfixheight nowiv nowrap nowrite nowritebackup
 syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocst nocul nodeco nodiff noea noed noek noeol noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly norestorescreen nori norightleftcmd norlc nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
 syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocscopetag nocsverb nocursorcolumn nodelcombine nodigraph 
 
@@ -62,7 +62,7 @@
 syn keyword vimAutoEvent contained	BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
 
 " Highlight commonly used Groupnames {{{2
-syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo 
+syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo None
 
 " Default highlighting groups {{{2
 syn keyword vimHLGroup contained	Cursor CursorColumn CursorIM CursorLine DiffAdd DiffChange DiffDelete DiffText Directory ErrorMsg FoldColumn Folded IncSearch LineNr MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC TabLine TabLineFill TabLineSel Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu 
@@ -99,8 +99,9 @@
 syn match vimCmdSep	"[:|]\+"	skipwhite nextgroup=vimAddress,vimAutoCmd,vimCommand,vimExtCmd,vimFilter,vimLet,vimMap,vimMark,vimSet,vimSyntax,vimUserCmd
 syn match vimIsCommand	"\<\h\w*\>"	contains=vimCommand
 syn match vimVar		"\<[bwglsav]:\K\k*\>"
-syn match vimVar contained	"\<\K\k*\>"
-syn keyword vimCommand contained	in
+syn match vimVar        contained	"\<\K\k*\>"
+syn match vimFBVar      contained   "\<[bwglsav]:\K\k*\>"
+syn keyword vimCommand  contained	in
 
 " Insertions And Appends: insert append {{{2
 " =======================
@@ -127,7 +128,7 @@
 
 " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
-syn cluster vimAugroupList	contains=vimIsCommand,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+syn cluster vimAugroupList	contains=vimIsCommand,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
 if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'a'
  syn region  vimAugroup	fold start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
 else
@@ -141,156 +142,154 @@
 
 " Operators: {{{2
 " =========
-syn cluster vimOperGroup	contains=vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
-syn match  vimOper	"\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}"	skipwhite nextgroup=vimString,vimSpecFile
-syn match  vimOper	"||\|&&\|[-+.]"	skipwhite nextgroup=vimString,vimSpecFile
-syn region vimOperParen 	oneline matchgroup=vimOper start="(" end=")" contains=@vimOperGroup
-syn region vimOperParen	oneline matchgroup=vimSep  start="{" end="}" contains=@vimOperGroup nextgroup=vimVar
+syn cluster	vimOperGroup	contains=vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
+syn match	vimOper	"\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}"	skipwhite nextgroup=vimString,vimSpecFile
+syn match	vimOper	"||\|&&\|[-+.]"	skipwhite nextgroup=vimString,vimSpecFile
+syn region	vimOperParen 	oneline matchgroup=vimParenSep	start="(" end=")" contains=@vimOperGroup
+syn region	vimOperParen	oneline matchgroup=vimSep	start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
 if !exists("g:vimsyn_noerror")
- syn match  vimOperError	")"
+ syn match	vimOperError	")"
 endif
 
 " Functions : Tag is provided for those who wish to highlight tagged functions {{{2
 " =========
-syn cluster vimFuncList	contains=vimCommand,vimFuncKey,Tag,vimFuncSID
-syn cluster vimFuncBodyList	contains=vimAddress,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimFunc,vimFunction,vimFunctionError,vimFuncVar,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUserCommand
-if !exists("g:vimsyn_noerror")
- syn match   vimFunctionError	"\<fu\%[nction]!\=\s\+\zs\U\i\{-}\ze\s*("                	contains=vimFuncKey,vimFuncBlank nextgroup=vimFuncBody
-endif
-syn match   vimFunction	"\<fu\%[nction]!\=\s\+\(\(<[sS][iI][dD]>\|[Ss]:\|\u\|\i\+#\)\i*\|\(g:\)\=\(\I\i*\.\)\+\I\i*\)\ze\s*("	contains=@vimFuncList nextgroup=vimFuncBody
-if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'f'
- syn region  vimFuncBody  contained	fold start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
-else                                                                                                          
- syn region  vimFuncBody  contained	start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
-endif
-syn match   vimFuncVar   contained	"a:\(\I\i*\|\d\+\)"
-syn match   vimFuncSID   contained	"\c<sid>\|\<s:"
-syn keyword vimFuncKey   contained	fu[nction]
-syn match   vimFuncBlank contained	"\s\+"
+syn cluster	vimFuncList	contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
+syn cluster	vimFuncBodyList	contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUserCommand
+syn match	vimFunction	"\<fu\%[nction]!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*("	contains=@vimFuncList nextgroup=vimFuncBody
 
-syn keyword vimPattern   contained	start	skip	end
+if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'f'
+ syn region	vimFuncBody  contained	fold start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
+else                                                                                                          
+ syn region	vimFuncBody  contained	start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
+endif
+syn match	vimFuncVar   contained	"a:\(\K\k*\|\d\+\)"
+syn match	vimFuncSID   contained	"\c<sid>\|\<s:"
+syn keyword	vimFuncKey   contained	fu[nction]
+syn match	vimFuncBlank contained	"\s\+"
+
+syn keyword	vimPattern   contained	start	skip	end
 
 " Special Filenames, Modifiers, Extension Removal: {{{2
 " ===============================================
-syn match vimSpecFile	"<c\(word\|WORD\)>"	nextgroup=vimSpecFileMod,vimSubst
-syn match vimSpecFile	"<\([acs]file\|amatch\|abuf\)>"	nextgroup=vimSpecFileMod,vimSubst
-syn match vimSpecFile	"\s%[ \t:]"ms=s+1,me=e-1	nextgroup=vimSpecFileMod,vimSubst
-syn match vimSpecFile	"\s%$"ms=s+1	nextgroup=vimSpecFileMod,vimSubst
-syn match vimSpecFile	"\s%<"ms=s+1,me=e-1	nextgroup=vimSpecFileMod,vimSubst
-syn match vimSpecFile	"#\d\+\|[#%]<\>"	nextgroup=vimSpecFileMod,vimSubst
-syn match vimSpecFileMod	"\(:[phtre]\)\+"	contained
+syn match	vimSpecFile	"<c\(word\|WORD\)>"	nextgroup=vimSpecFileMod,vimSubst
+syn match	vimSpecFile	"<\([acs]file\|amatch\|abuf\)>"	nextgroup=vimSpecFileMod,vimSubst
+syn match	vimSpecFile	"\s%[ \t:]"ms=s+1,me=e-1	nextgroup=vimSpecFileMod,vimSubst
+syn match	vimSpecFile	"\s%$"ms=s+1	nextgroup=vimSpecFileMod,vimSubst
+syn match	vimSpecFile	"\s%<"ms=s+1,me=e-1	nextgroup=vimSpecFileMod,vimSubst
+syn match	vimSpecFile	"#\d\+\|[#%]<\>"	nextgroup=vimSpecFileMod,vimSubst
+syn match	vimSpecFileMod	"\(:[phtre]\)\+"	contained
 
 " User-Specified Commands: {{{2
 " =======================
-syn cluster vimUserCmdList	contains=vimAddress,vimSyntax,vimHighlight,vimAutoCmd,vimCmplxRepeat,vimComment,vimCtrlChar,vimEscapeBrace,vimFilter,vimFunc,vimFunction,vimIsCommand,vimMark,vimNotation,vimNumber,vimOper,vimRegion,vimRegister,vimLet,vimSet,vimSetEqual,vimSetString,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange,vimSynLine
-syn keyword vimUserCommand	contained	com[mand]
-syn match   vimUserCmd	"\<com\%[mand]!\=\>.*$"	contains=vimUserAttrb,vimUserCommand,@vimUserCmdList
-syn match   vimUserAttrb	contained	"-n\%[args]=[01*?+]"	contains=vimUserAttrbKey,vimOper
-syn match   vimUserAttrb	contained	"-com\%[plete]="	contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
-syn match   vimUserAttrb	contained	"-ra\%[nge]\(=%\|=\d\+\)\="	contains=vimNumber,vimOper,vimUserAttrbKey
-syn match   vimUserAttrb	contained	"-cou\%[nt]=\d\+"	contains=vimNumber,vimOper,vimUserAttrbKey
-syn match   vimUserAttrb	contained	"-bang\=\>"	contains=vimOper,vimUserAttrbKey
-syn match   vimUserAttrb	contained	"-bar\>"	contains=vimOper,vimUserAttrbKey
-syn match   vimUserAttrb	contained	"-re\%[gister]\>"	contains=vimOper,vimUserAttrbKey
+syn cluster	vimUserCmdList	contains=vimAddress,vimSyntax,vimHighlight,vimAutoCmd,vimCmplxRepeat,vimComment,vimCtrlChar,vimEscapeBrace,vimFilter,vimFunc,vimFuncName,vimFunction,vimFunctionError,vimIsCommand,vimMark,vimNotation,vimNumber,vimOper,vimRegion,vimRegister,vimLet,vimSet,vimSetEqual,vimSetString,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange,vimSynLine
+syn keyword	vimUserCommand	contained	com[mand]
+syn match	vimUserCmd	"\<com\%[mand]!\=\>.*$"	contains=vimUserAttrb,vimUserCommand,@vimUserCmdList
+syn match	vimUserAttrb	contained	"-n\%[args]=[01*?+]"	contains=vimUserAttrbKey,vimOper
+syn match	vimUserAttrb	contained	"-com\%[plete]="	contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError
+syn match	vimUserAttrb	contained	"-ra\%[nge]\(=%\|=\d\+\)\="	contains=vimNumber,vimOper,vimUserAttrbKey
+syn match	vimUserAttrb	contained	"-cou\%[nt]=\d\+"	contains=vimNumber,vimOper,vimUserAttrbKey
+syn match	vimUserAttrb	contained	"-bang\=\>"	contains=vimOper,vimUserAttrbKey
+syn match	vimUserAttrb	contained	"-bar\>"	contains=vimOper,vimUserAttrbKey
+syn match	vimUserAttrb	contained	"-re\%[gister]\>"	contains=vimOper,vimUserAttrbKey
 if !exists("g:vimsyn_noerror")
- syn match   vimUserCmdError	contained	"\S\+\>"
+ syn match	vimUserCmdError	contained	"\S\+\>"
 endif
 syn case ignore
-syn keyword vimUserAttrbKey   contained	bar	ban[g]	cou[nt]	ra[nge] com[plete]	n[args]	re[gister]
-syn keyword vimUserAttrbCmplt contained	augroup buffer command dir environment event expression file function help highlight mapping menu option something tag tag_listfiles var
-syn keyword vimUserAttrbCmplt contained	custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
-syn match   vimUserAttrbCmpltFunc contained	",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%(#\u\w*\)\+\|\u\w*\)"hs=s+1 nextgroup=vimUserCmdError
+syn keyword	vimUserAttrbKey   contained	bar	ban[g]	cou[nt]	ra[nge] com[plete]	n[args]	re[gister]
+syn keyword	vimUserAttrbCmplt contained	augroup buffer command dir environment event expression file function help highlight mapping menu option shellcmd something tag tag_listfiles var
+syn keyword	vimUserAttrbCmplt contained	custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
+syn match	vimUserAttrbCmpltFunc contained	",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%(#\u\w*\)\+\|\u\w*\)"hs=s+1 nextgroup=vimUserCmdError
 
 syn case match
-syn match   vimUserAttrbCmplt contained	"custom,\u\w*"
+syn match	vimUserAttrbCmplt contained	"custom,\u\w*"
 
 " Lower Priority Comments: after some vim commands... {{{2
 " =======================
-syn match  vimComment	excludenl +\s"[^\-:.%#=*].*$+lc=1	contains=@vimCommentGroup,vimCommentString
-syn match  vimComment	+\<endif\s\+".*$+lc=5	contains=@vimCommentGroup,vimCommentString
-syn match  vimComment	+\<else\s\+".*$+lc=4	contains=@vimCommentGroup,vimCommentString
-syn region vimCommentString	contained oneline start='\S\s\+"'ms=e	end='"'
+syn match	vimComment	excludenl +\s"[^\-:.%#=*].*$+lc=1	contains=@vimCommentGroup,vimCommentString
+syn match	vimComment	+\<endif\s\+".*$+lc=5	contains=@vimCommentGroup,vimCommentString
+syn match	vimComment	+\<else\s\+".*$+lc=4	contains=@vimCommentGroup,vimCommentString
+syn region	vimCommentString	contained oneline start='\S\s\+"'ms=e	end='"'
 
 " Environment Variables: {{{2
 " =====================
-syn match vimEnvvar	"\$\I\i*"
-syn match vimEnvvar	"\${\I\i*}"
+syn match	vimEnvvar	"\$\I\i*"
+syn match	vimEnvvar	"\${\I\i*}"
 
 " In-String Specials: {{{2
 " Try to catch strings, if nothing else matches (therefore it must precede the others!)
 "  vimEscapeBrace handles ["]  []"] (ie. "s don't terminate string inside [])
-syn region vimEscapeBrace	oneline   contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
-syn match  vimPatSepErr	contained	"\\)"
-syn match  vimPatSep	contained	"\\|"
-syn region vimPatSepZone	oneline   contained   matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\]['"]"	contains=@vimStringGroup
-syn region vimPatRegion	contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)"	contains=@vimSubstList oneline
-syn match  vimNotPatSep	contained	"\\\\"
-syn cluster vimStringGroup	contains=vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
-syn region vimString	oneline keepend	start=+[^:a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ end=+"+	contains=@vimStringGroup
-syn region vimString	oneline keepend	start=+[^:a-zA-Z>!\\@]'+lc=1 end=+'+
-syn region vimString	oneline	start=+=!+lc=1	skip=+\\\\\|\\!+ end=+!+	contains=@vimStringGroup
-syn region vimString	oneline	start="=+"lc=1	skip="\\\\\|\\+" end="+"	contains=@vimStringGroup
-syn region vimString	oneline	start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/"	contains=@vimStringGroup
-syn match  vimString	contained	+"[^"]*\\$+	skipnl nextgroup=vimStringCont
-syn match  vimStringCont	contained	+\(\\\\\|.\)\{-}[^\\]"+
+syn region	vimEscapeBrace	oneline   contained transparent start="[^\\]\(\\\\\)*\[\zs\^\=\]\=" skip="\\\\\|\\\]" end="]"me=e-1
+syn match	vimPatSepErr	contained	"\\)"
+syn match	vimPatSep	contained	"\\|"
+syn region	vimPatSepZone	oneline   contained   matchgroup=vimPatSepZ start="\\%\=\ze(" skip="\\\\" end="\\)\|[^\]['"]"	contains=@vimStringGroup
+syn region	vimPatRegion	contained transparent matchgroup=vimPatSepR start="\\[z%]\=(" end="\\)"	contains=@vimSubstList oneline
+syn match	vimNotPatSep	contained	"\\\\"
+syn cluster	vimStringGroup	contains=vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
+syn region	vimString	oneline keepend	start=+[^:a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\"+ end=+"+	contains=@vimStringGroup
+syn region	vimString	oneline keepend	start=+[^:a-zA-Z>!\\@]'+lc=1 end=+'+
+syn region	vimString	oneline	start=+=!+lc=1	skip=+\\\\\|\\!+ end=+!+	contains=@vimStringGroup
+syn region	vimString	oneline	start="=+"lc=1	skip="\\\\\|\\+" end="+"	contains=@vimStringGroup
+syn region	vimString	oneline	start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/"	contains=@vimStringGroup
+syn match	vimString	contained	+"[^"]*\\$+	skipnl nextgroup=vimStringCont
+syn match	vimStringCont	contained	+\(\\\\\|.\)\{-}[^\\]"+
 
 " Substitutions: {{{2
 " =============
-syn cluster vimSubstList	contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
-syn cluster vimSubstRepList	contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
-syn cluster vimSubstList	add=vimCollection
-syn match   vimSubst	"\(:\+\s*\|^\s*\||\s*\)\<s\%[ubstitute][:[:alpha:]]\@!" nextgroup=vimSubstPat
-syn match   vimSubst	"s\%[ubstitute][:[:alpha:]]\@!"	nextgroup=vimSubstPat contained
-syn match   vimSubst	"/\zss\%[ubstitute]\ze/"	nextgroup=vimSubstPat
-syn match   vimSubst1       contained	"s\%[ubstitute]\>"	nextgroup=vimSubstPat
-syn region  vimSubstPat     contained	matchgroup=vimSubstDelim start="\z([^a-zA-Z( \t[\]&]\)"rs=s+1 skip="\\\\\|\\\z1" end="\z1"re=e-1,me=e-1	 contains=@vimSubstList	nextgroup=vimSubstRep4	oneline
-syn region  vimSubstRep4    contained	matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList	nextgroup=vimSubstFlagErr	oneline
-syn region  vimCollection   contained transparent	start="\\\@<!\[" skip="\\\[" end="\]"	contains=vimCollClass
-syn match   vimCollClassErr contained	"\[:.\{-\}:\]"
-syn match   vimCollClass    contained transparent	"\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|return\|tab\|escape\|backspace\):\]"
-syn match   vimSubstSubstr  contained	"\\z\=\d"
-syn match   vimSubstTwoBS   contained	"\\\\"
-syn match   vimSubstFlagErr contained	"[^< \t\r|]\+" contains=vimSubstFlags
-syn match   vimSubstFlags   contained	"[&cegiIpr]\+"
+syn cluster	vimSubstList	contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
+syn cluster	vimSubstRepList	contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
+syn cluster	vimSubstList	add=vimCollection
+syn match	vimSubst	"\(:\+\s*\|^\s*\||\s*\)\<s\%[ubstitute][:[:alpha:]]\@!" nextgroup=vimSubstPat
+syn match	vimSubst	"s\%[ubstitute][:#[:alpha:]]\@!"	nextgroup=vimSubstPat contained
+syn match	vimSubst	"/\zss\%[ubstitute]\ze/"	nextgroup=vimSubstPat
+syn match	vimSubst1       contained	"s\%[ubstitute]\>"	nextgroup=vimSubstPat
+syn region	vimSubstPat     contained	matchgroup=vimSubstDelim start="\z([^a-zA-Z( \t[\]&]\)"rs=s+1 skip="\\\\\|\\\z1" end="\z1"re=e-1,me=e-1	 contains=@vimSubstList	nextgroup=vimSubstRep4	oneline
+syn region	vimSubstRep4    contained	matchgroup=vimSubstDelim start="\z(.\)" skip="\\\\\|\\\z1" end="\z1" matchgroup=vimNotation end="<[cC][rR]>" contains=@vimSubstRepList	nextgroup=vimSubstFlagErr	oneline
+syn region	vimCollection   contained transparent	start="\\\@<!\[" skip="\\\[" end="\]"	contains=vimCollClass
+syn match	vimCollClassErr contained	"\[:.\{-\}:\]"
+syn match	vimCollClass    contained transparent	"\[:\(alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\|return\|tab\|escape\|backspace\):\]"
+syn match	vimSubstSubstr  contained	"\\z\=\d"
+syn match	vimSubstTwoBS   contained	"\\\\"
+syn match	vimSubstFlagErr contained	"[^< \t\r|]\+" contains=vimSubstFlags
+syn match	vimSubstFlags   contained	"[&cegiIpr]\+"
 
 " 'String': {{{2
-syn match  vimString	"[^(,]'[^']\{-}\zs'"
+syn match	vimString	"[^(,]'[^']\{-}\zs'"
 
 " Marks, Registers, Addresses, Filters: {{{2
-syn match  vimMark	"'[a-zA-Z0-9]\ze[-+,!]"	nextgroup=vimOper,vimMarkNumber,vimSubst
-syn match  vimMark	"'[<>]\ze[-+,!]"		nextgroup=vimOper,vimMarkNumber,vimSubst
-syn match  vimMark	",\zs'[<>]\ze"		nextgroup=vimOper,vimMarkNumber,vimSubst
-syn match  vimMark	"[!,:]\zs'[a-zA-Z0-9]"	nextgroup=vimOper,vimMarkNumber,vimSubst
-syn match  vimMark	"\<norm\%[al]\s\zs'[a-zA-Z0-9]"	nextgroup=vimOper,vimMarkNumber,vimSubst
-syn match  vimMarkNumber	"[-+]\d\+"		nextgroup=vimSubst contained contains=vimOper
-syn match  vimPlainMark contained	"'[a-zA-Z0-9]"
+syn match	vimMark	"'[a-zA-Z0-9]\ze[-+,!]"	nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match	vimMark	"'[<>]\ze[-+,!]"		nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match	vimMark	",\zs'[<>]\ze"		nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match	vimMark	"[!,:]\zs'[a-zA-Z0-9]"	nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match	vimMark	"\<norm\%[al]\s\zs'[a-zA-Z0-9]"	nextgroup=vimOper,vimMarkNumber,vimSubst
+syn match	vimMarkNumber	"[-+]\d\+"		nextgroup=vimSubst contained contains=vimOper
+syn match	vimPlainMark contained	"'[a-zA-Z0-9]"
 
-syn match  vimRegister	'[^,;]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":]'
-syn match  vimRegister	'\<norm\s\+\zs"[a-zA-Z0-9]'
-syn match  vimRegister	'\<normal\s\+\zs"[a-zA-Z0-9]'
-syn match  vimRegister	'@"'
-syn match  vimPlainRegister contained	'"[a-zA-Z0-9\-:.%#*+=]'
+syn match	vimRegister	'[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":]'
+syn match	vimRegister	'\<norm\s\+\zs"[a-zA-Z0-9]'
+syn match	vimRegister	'\<normal\s\+\zs"[a-zA-Z0-9]'
+syn match	vimRegister	'@"'
+syn match	vimPlainRegister contained	'"[a-zA-Z0-9\-:.%#*+=]'
 
-syn match  vimAddress	",\zs[.$]"	skipwhite nextgroup=vimSubst1
-syn match  vimAddress	"%\ze\a"	skipwhite nextgroup=vimString,vimSubst1
+syn match	vimAddress	",\zs[.$]"	skipwhite nextgroup=vimSubst1
+syn match	vimAddress	"%\ze\a"	skipwhite nextgroup=vimString,vimSubst1
 
-syn match  vimFilter contained	"^!.\{-}\(|\|$\)"		contains=vimSpecFile
-syn match  vimFilter contained	"\A!.\{-}\(|\|$\)"ms=s+1	contains=vimSpecFile
+syn match	vimFilter contained	"^!.\{-}\(|\|$\)"		contains=vimSpecFile
+syn match	vimFilter contained	"\A!.\{-}\(|\|$\)"ms=s+1	contains=vimSpecFile
 
 " Complex repeats (:h complex-repeat) {{{2
-"syn match  vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]'lc=1
-"syn match  vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\)'
+syn match	vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]'lc=1
+syn match	vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\)'
 
 " Set command and associated set-options (vimOptions) with comment {{{2
-syn region vimSet		matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|set\)\>" skip="\%(\\\\\)*\\." end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod
-syn region vimSetEqual  contained	start="="	skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation oneline
-syn region vimSetString contained	start=+="+hs=s+1	skip=+\\\\\|\\"+  end=+"+	contains=vimCtrlChar
-syn match  vimSetSep    contained	"[,:]"
-syn match  vimSetMod	contained	"&vim\|[!&]\|all&"
+syn region	vimSet		matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|set\)\>" skip="\%(\\\\\)*\\." end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod
+syn region	vimSetEqual	contained	start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation oneline
+syn region	vimSetString	contained	start=+="+hs=s+1	skip=+\\\\\|\\"+  end=+"+	contains=vimCtrlChar
+syn match	vimSetSep	contained	"[,:]"
+syn match	vimSetMod	contained	"&vim\=\|[!&?<]\|all&"
 
 " Let {{{2
 " ===
-syn keyword vimLet	let	unl[et]	skipwhite nextgroup=vimVar
+syn keyword	vimLet	let	unl[et]	skipwhite nextgroup=vimVar,vimFuncVar
 
 " Abbreviations {{{2
 " =============
@@ -298,232 +297,235 @@
 
 " Autocmd {{{2
 " =======
-syn match   vimAutoEventList	contained	"\(!\s\+\)\=\(\a\+,\)*\a\+"	contains=vimAutoEvent nextgroup=vimAutoCmdSpace
-syn match   vimAutoCmdSpace	contained	"\s\+"	nextgroup=vimAutoCmdSfxList
-syn match   vimAutoCmdSfxList	contained	"\S*"
-syn keyword vimAutoCmd	au[tocmd] do[autocmd] doautoa[ll]	skipwhite nextgroup=vimAutoEventList
+syn match	vimAutoEventList	contained	"\(!\s\+\)\=\(\a\+,\)*\a\+"	contains=vimAutoEvent nextgroup=vimAutoCmdSpace
+syn match	vimAutoCmdSpace	contained	"\s\+"	nextgroup=vimAutoCmdSfxList
+syn match	vimAutoCmdSfxList	contained	"\S*"
+syn keyword	vimAutoCmd	au[tocmd] do[autocmd] doautoa[ll]	skipwhite nextgroup=vimAutoEventList
 
 " Echo and Execute -- prefer strings! {{{2
 " ================
-syn region  vimEcho	oneline excludenl matchgroup=vimCommand start="\<ec\%[ho]\>" skip="\(\\\\\)*\\|" end="$\||" contains=vimFunc,vimString,varVar
-syn region  vimExecute	oneline excludenl matchgroup=vimCommand start="\<exe\%[cute]\>" skip="\(\\\\\)*\\|" end="$\||\|<[cC][rR]>" contains=vimIsCommand,vimString,vimOper,vimVar,vimNotation,vimOperParen
-syn match   vimEchoHL	"echohl\="	skipwhite nextgroup=vimGroup,vimHLGroup,vimEchoHLNone
+syn region	vimEcho	oneline excludenl matchgroup=vimCommand start="\<ec\%[ho]\>" skip="\(\\\\\)*\\|" end="$\||" contains=vimFunc,vimFuncVar,vimString,vimVar
+syn region	vimExecute	oneline excludenl matchgroup=vimCommand start="\<exe\%[cute]\>" skip="\(\\\\\)*\\|" end="$\||\|<[cC][rR]>" contains=vimFuncVar,vimIsCommand,vimOper,vimNotation,vimOperParen,vimString,vimVar
+syn match	vimEchoHL	"echohl\="	skipwhite nextgroup=vimGroup,vimHLGroup,vimEchoHLNone
 syn case ignore
-syn keyword vimEchoHLNone	none
+syn keyword	vimEchoHLNone	none
 syn case match
 
 " Maps {{{2
 " ====
-syn match   vimMap	"\<map\>!\=\ze\s*[^(]" skipwhite nextgroup=vimMapMod,vimMapLhs
-syn keyword vimMap	cm[ap] cno[remap] im[ap] ino[remap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] snor[emap] vm[ap] vn[oremap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
-syn keyword vimMap	mapc[lear]
-syn match   vimMapLhs    contained	"\S\+"	contains=vimNotation,vimCtrlChar skipwhite nextgroup=vimMapRhs
-syn match   vimMapBang   contained	"!"	skipwhite nextgroup=vimMapMod,vimMapLhs
-syn match   vimMapMod    contained	"\c<\(buffer\|expr\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
-syn match   vimMapRhs    contained  ".*" contains=vimNotation,vimCtrlChar skipnl nextgroup=vimMapRhsExtend
-syn match   vimMapRhsExtend contained "^\s*\\.*$" contains=vimContinue
+syn match	vimMap		"\<map\>!\=\ze\s*[^(]" skipwhite nextgroup=vimMapMod,vimMapLhs
+syn keyword	vimMap		cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] smap snor[emap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn keyword	vimMap		mapc[lear]
+syn keyword	vimUnmap		cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] unm[ap] unm[ap] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+syn match	vimMapLhs	contained	"\S\+"			contains=vimNotation,vimCtrlChar skipwhite nextgroup=vimMapRhs
+syn match	vimMapBang	contained	"!"			skipwhite nextgroup=vimMapMod,vimMapLhs
+syn match	vimMapMod	contained	"\c<\(buffer\|expr\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
+syn match	vimMapRhs	contained	".*" contains=vimNotation,vimCtrlChar	skipnl nextgroup=vimMapRhsExtend
+syn match	vimMapRhsExtend	contained	"^\s*\\.*$"			contains=vimContinue
 syn case ignore
-syn keyword vimMapModKey contained	buffer	expr	leader	localleader	plug	script	sid	silent	unique
+syn keyword	vimMapModKey	contained	buffer	expr	leader	localleader	plug	script	sid	silent	unique
 syn case match
 
 " Menus {{{2
 " =====
-syn cluster vimMenuList contains=vimMenuBang,vimMenuPriority,vimMenuName,vimMenuMod
-syn keyword vimCommand	am[enu] an[oremenu] aun[menu] cme[nu] cnoreme[nu] cunme[nu] ime[nu] inoreme[nu] iunme[nu] me[nu] nme[nu] nnoreme[nu] noreme[nu] nunme[nu] ome[nu] onoreme[nu] ounme[nu] unme[nu] vme[nu] vnoreme[nu] vunme[nu] skipwhite nextgroup=@vimMenuList
-syn match   vimMenuName	"[^ \t\\<]\+"	contained nextgroup=vimMenuNameMore,vimMenuMap
-syn match   vimMenuPriority	"\d\+\(\.\d\+\)*"	contained skipwhite nextgroup=vimMenuName
-syn match   vimMenuNameMore	"\c\\\s\|<tab>\|\\\."	contained nextgroup=vimMenuName,vimMenuNameMore contains=vimNotation
-syn match   vimMenuMod    contained	"\c<\(script\|silent\)\+>"  skipwhite contains=vimMapModKey,vimMapModErr nextgroup=@vimMenuList
-syn match   vimMenuMap	"\s"	contained skipwhite nextgroup=vimMenuRhs
-syn match   vimMenuRhs	".*$"	contained contains=vimString,vimComment,vimIsCommand
-syn match   vimMenuBang	"!"	contained skipwhite nextgroup=@vimMenuList
+syn cluster	vimMenuList contains=vimMenuBang,vimMenuPriority,vimMenuName,vimMenuMod
+syn keyword	vimCommand	am[enu] an[oremenu] aun[menu] cme[nu] cnoreme[nu] cunme[nu] ime[nu] inoreme[nu] iunme[nu] me[nu] nme[nu] nnoreme[nu] noreme[nu] nunme[nu] ome[nu] onoreme[nu] ounme[nu] unme[nu] vme[nu] vnoreme[nu] vunme[nu] skipwhite nextgroup=@vimMenuList
+syn match	vimMenuName	"[^ \t\\<]\+"	contained nextgroup=vimMenuNameMore,vimMenuMap
+syn match	vimMenuPriority	"\d\+\(\.\d\+\)*"	contained skipwhite nextgroup=vimMenuName
+syn match	vimMenuNameMore	"\c\\\s\|<tab>\|\\\."	contained nextgroup=vimMenuName,vimMenuNameMore contains=vimNotation
+syn match	vimMenuMod    contained	"\c<\(script\|silent\)\+>"  skipwhite contains=vimMapModKey,vimMapModErr nextgroup=@vimMenuList
+syn match	vimMenuMap	"\s"	contained skipwhite nextgroup=vimMenuRhs
+syn match	vimMenuRhs	".*$"	contained contains=vimString,vimComment,vimIsCommand
+syn match	vimMenuBang	"!"	contained skipwhite nextgroup=@vimMenuList
 
 " Angle-Bracket Notation (tnx to Michael Geddes) {{{2
 " ======================
 syn case ignore
-syn match vimNotation	"\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|space\|k\=\(page\)\=\(\|down\|up\)\)>" contains=vimBracket
-syn match vimNotation	"\(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>"	contains=vimBracket
-syn match vimNotation	"\(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>"		contains=vimBracket
-syn match vimNotation	'\(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1			contains=vimBracket
-syn match vimNotation	'\(\\\|<lt>\)\=<\%(q-\)\=\(line[12]\|count\|bang\|reg\|args\|f-args\|lt\)>'	contains=vimBracket
-syn match vimNotation	"\(\\\|<lt>\)\=<\([cas]file\|abuf\|amatch\|cword\|cWORD\|client\)>"		contains=vimBracket
-syn match vimBracket contained	"[\\<>]"
+syn match	vimNotation	"\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|space\|k\=\(page\)\=\(\|down\|up\)\)>" contains=vimBracket
+syn match	vimNotation	"\(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>"	contains=vimBracket
+syn match	vimNotation	"\(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>"		contains=vimBracket
+syn match	vimNotation	'\(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1			contains=vimBracket
+syn match	vimNotation	'\(\\\|<lt>\)\=<\%(q-\)\=\(line[12]\|count\|bang\|reg\|args\|f-args\|lt\)>'	contains=vimBracket
+syn match	vimNotation	"\(\\\|<lt>\)\=<\([cas]file\|abuf\|amatch\|cword\|cWORD\|client\)>"		contains=vimBracket
+syn match	vimBracket contained	"[\\<>]"
 syn case match
 
 " User Function Highlighting {{{2
 " (following Gautam Iyer's suggestion)
 " ==========================
-syn match vimFunc		"\%(\%([gGsS]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimFuncName,vimUserFunc,vimExecute
-syn match vimUserFunc contained	"\%(\%([gGsS]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimNotation
-syn match vimNotFunc	"\<if\>\|\<el\%[seif]\>"
+syn match vimFunc		"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimFuncName,vimUserFunc,vimExecute
+syn match vimUserFunc contained	"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimNotation
+syn match vimNotFunc	"\<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>"
 
 " Errors And Warnings: {{{2
 " ====================
 if !exists("g:vimsyn_noerror")
- syn match vimElseIfErr	"\<else\s\+if\>"
- syn match vimBufnrWarn	/\<bufnr\s*(\s*["']\.['"]\s*)/
+ syn match	vimFunctionError	"\s\zs[a-z0-9]\i\{-}\ze\s*("			contained contains=vimFuncKey,vimFuncBlank
+" syn match	vimFunctionError	"\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)[0-9]\i\{-}\ze\s*("	contained contains=vimFuncKey,vimFuncBlank
+ syn match	vimElseIfErr	"\<else\s\+if\>"
+ syn match	vimBufnrWarn	/\<bufnr\s*(\s*["']\.['"]\s*)/
 endif
 
 " Norm {{{2
 " ====
-syn match vimNorm		"\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
-syn match vimNormCmds contained	".*$"
+syn match	vimNorm		"\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds
+syn match	vimNormCmds contained	".*$"
 
 " Syntax {{{2
 "=======
-syn match   vimGroupList	contained	"@\=[^ \t,]*"	contains=vimGroupSpecial,vimPatSep
-syn match   vimGroupList	contained	"@\=[^ \t,]*,"	nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
-syn keyword vimGroupSpecial	contained	ALL	ALLBUT
+syn match	vimGroupList	contained	"@\=[^ \t,]*"	contains=vimGroupSpecial,vimPatSep
+syn match	vimGroupList	contained	"@\=[^ \t,]*,"	nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
+syn keyword	vimGroupSpecial	contained	ALL	ALLBUT	CONTAINED	TOP
 if !exists("g:vimsyn_noerror")
- syn match   vimSynError	contained	"\i\+"
- syn match   vimSynError	contained	"\i\+="	nextgroup=vimGroupList
+ syn match	vimSynError	contained	"\i\+"
+ syn match	vimSynError	contained	"\i\+="	nextgroup=vimGroupList
 endif
-syn match   vimSynContains	contained	"\<contain\(s\|edin\)="	nextgroup=vimGroupList
-syn match   vimSynKeyContainedin	contained	"\<containedin="	nextgroup=vimGroupList
-syn match   vimSynNextgroup	contained	"nextgroup="	nextgroup=vimGroupList
+syn match	vimSynContains	contained	"\<contain\(s\|edin\)="	nextgroup=vimGroupList
+syn match	vimSynKeyContainedin	contained	"\<containedin="	nextgroup=vimGroupList
+syn match	vimSynNextgroup	contained	"nextgroup="	nextgroup=vimGroupList
 
-syn match   vimSyntax	"\<sy\%[ntax]\>"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
-syn match   vimAuSyntax	contained	"\s+sy\%[ntax]"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
+syn match	vimSyntax	"\<sy\%[ntax]\>"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
+syn match	vimAuSyntax	contained	"\s+sy\%[ntax]"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
 
 " Syntax: case {{{2
-syn keyword vimSynType	contained	case	skipwhite nextgroup=vimSynCase,vimSynCaseError
+syn keyword	vimSynType	contained	case	skipwhite nextgroup=vimSynCase,vimSynCaseError
 if !exists("g:vimsyn_noerror")
- syn match   vimSynCaseError	contained	"\i\+"
+ syn match	vimSynCaseError	contained	"\i\+"
 endif
-syn keyword vimSynCase	contained	ignore	match
+syn keyword	vimSynCase	contained	ignore	match
 
 " Syntax: clear {{{2
-syn keyword vimSynType	contained	clear	skipwhite nextgroup=vimGroupList
+syn keyword	vimSynType	contained	clear	skipwhite nextgroup=vimGroupList
 
 " Syntax: cluster {{{2
-syn keyword vimSynType	contained	cluster	skipwhite nextgroup=vimClusterName
-syn region  vimClusterName	contained	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
-syn match   vimGroupAdd	contained	"add="	nextgroup=vimGroupList
-syn match   vimGroupRem	contained	"remove="	nextgroup=vimGroupList
+syn keyword	vimSynType	contained	cluster	skipwhite nextgroup=vimClusterName
+syn region	vimClusterName	contained	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
+syn match	vimGroupAdd	contained	"add="	nextgroup=vimGroupList
+syn match	vimGroupRem	contained	"remove="	nextgroup=vimGroupList
 
 " Syntax: include {{{2
-syn keyword vimSynType	contained	include	skipwhite nextgroup=vimGroupList
+syn keyword	vimSynType	contained	include	skipwhite nextgroup=vimGroupList
 
 " Syntax: keyword {{{2
-syn cluster vimSynKeyGroup	contains=vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
-syn keyword vimSynType	contained	keyword	skipwhite nextgroup=vimSynKeyRegion
-syn region  vimSynKeyRegion	contained oneline keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
-syn match   vimSynKeyOpt	contained	"\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
+syn cluster	vimSynKeyGroup	contains=vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
+syn keyword	vimSynType	contained	keyword	skipwhite nextgroup=vimSynKeyRegion
+syn region	vimSynKeyRegion	contained oneline keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
+syn match	vimSynKeyOpt	contained	"\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
 
 " Syntax: match {{{2
-syn cluster vimSynMtchGroup	contains=vimMtchComment,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation
-syn keyword vimSynType	contained	match	skipwhite nextgroup=vimSynMatchRegion
-syn region  vimSynMatchRegion	contained keepend	matchgroup=vimGroupName start="\k\+" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
-syn match   vimSynMtchOpt	contained	"\<\(conceal\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
+syn cluster	vimSynMtchGroup	contains=vimMtchComment,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation
+syn keyword	vimSynType	contained	match	skipwhite nextgroup=vimSynMatchRegion
+syn region	vimSynMatchRegion	contained keepend	matchgroup=vimGroupName start="\k\+" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
+syn match	vimSynMtchOpt	contained	"\<\(conceal\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
 if has("conceal")
- syn match   vimSynMtchOpt	contained	"\<cchar="	nextgroup=VimSynMtchCchar
- syn match   vimSynMtchCchar	contained	"."
+ syn match	vimSynMtchOpt	contained	"\<cchar="	nextgroup=VimSynMtchCchar
+ syn match	vimSynMtchCchar	contained	"\S"
 endif
 
 " Syntax: off and on {{{2
-syn keyword vimSynType	contained	enable	list	manual	off	on	reset
+syn keyword	vimSynType	contained	enable	list	manual	off	on	reset
 
 " Syntax: region {{{2
-syn cluster vimSynRegPatGroup	contains=vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
-syn cluster vimSynRegGroup	contains=vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
-syn keyword vimSynType	contained	region	skipwhite nextgroup=vimSynRegion
-syn region  vimSynRegion	contained keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
-syn match   vimSynRegOpt	contained	"\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
-syn match   vimSynReg	contained	"\(start\|skip\|end\)="he=e-1	nextgroup=vimSynRegPat
-syn match   vimSynMtchGrp	contained	"matchgroup="	nextgroup=vimGroup,vimHLGroup
-syn region  vimSynRegPat	contained extend	start="\z([-`~!@#$%^&*_=+;:'",./?]\)"  skip="\\\\\|\\\z1"  end="\z1"  contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
-syn match   vimSynPatMod	contained	"\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
-syn match   vimSynPatMod	contained	"\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
-syn match   vimSynPatMod	contained	"lc=\d\+"
-syn match   vimSynPatMod	contained	"lc=\d\+," nextgroup=vimSynPatMod
-syn region  vimSynPatRange	contained	start="\["	skip="\\\\\|\\]"   end="]"
-syn match   vimSynNotPatRange	contained	"\\\\\|\\\["
-syn match   vimMtchComment	contained	'"[^"]\+$'
+syn cluster	vimSynRegPatGroup	contains=vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
+syn cluster	vimSynRegGroup	contains=vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
+syn keyword	vimSynType	contained	region	skipwhite nextgroup=vimSynRegion
+syn region	vimSynRegion	contained keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
+syn match	vimSynRegOpt	contained	"\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
+syn match	vimSynReg	contained	"\(start\|skip\|end\)="he=e-1	nextgroup=vimSynRegPat
+syn match	vimSynMtchGrp	contained	"matchgroup="	nextgroup=vimGroup,vimHLGroup
+syn region	vimSynRegPat	contained extend	start="\z([-`~!@#$%^&*_=+;:'",./?]\)"  skip="\\\\\|\\\z1"  end="\z1"  contains=@vimSynRegPatGroup skipwhite nextgroup=vimSynPatMod,vimSynReg
+syn match	vimSynPatMod	contained	"\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\="
+syn match	vimSynPatMod	contained	"\(hs\|ms\|me\|hs\|he\|rs\|re\)=[se]\([-+]\d\+\)\=," nextgroup=vimSynPatMod
+syn match	vimSynPatMod	contained	"lc=\d\+"
+syn match	vimSynPatMod	contained	"lc=\d\+," nextgroup=vimSynPatMod
+syn region	vimSynPatRange	contained	start="\["	skip="\\\\\|\\]"   end="]"
+syn match	vimSynNotPatRange	contained	"\\\\\|\\\["
+syn match	vimMtchComment	contained	'"[^"]\+$'
 
 " Syntax: sync {{{2
 " ============
 syn keyword vimSynType	contained	sync	skipwhite	nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
 if !exists("g:vimsyn_noerror")
- syn match   vimSyncError	contained	"\i\+"
+ syn match	vimSyncError	contained	"\i\+"
 endif
-syn keyword vimSyncC	contained	ccomment	clear	fromstart
-syn keyword vimSyncMatch	contained	match	skipwhite	nextgroup=vimSyncGroupName
-syn keyword vimSyncRegion	contained	region	skipwhite	nextgroup=vimSynReg
-syn match   vimSyncLinebreak	contained	"\<linebreaks="	skipwhite	nextgroup=vimNumber
-syn keyword vimSyncLinecont	contained	linecont	skipwhite	nextgroup=vimSynRegPat
-syn match   vimSyncLines	contained	"\(min\|max\)\=lines="	nextgroup=vimNumber
-syn match   vimSyncGroupName	contained	"\k\+"	skipwhite	nextgroup=vimSyncKey
-syn match   vimSyncKey	contained	"\<groupthere\|grouphere\>"	skipwhite nextgroup=vimSyncGroup
-syn match   vimSyncGroup	contained	"\k\+"	skipwhite	nextgroup=vimSynRegPat,vimSyncNone
-syn keyword vimSyncNone	contained	NONE
+syn keyword	vimSyncC	contained	ccomment	clear	fromstart
+syn keyword	vimSyncMatch	contained	match	skipwhite	nextgroup=vimSyncGroupName
+syn keyword	vimSyncRegion	contained	region	skipwhite	nextgroup=vimSynReg
+syn match	vimSyncLinebreak	contained	"\<linebreaks="	skipwhite	nextgroup=vimNumber
+syn keyword	vimSyncLinecont	contained	linecont	skipwhite	nextgroup=vimSynRegPat
+syn match	vimSyncLines	contained	"\(min\|max\)\=lines="	nextgroup=vimNumber
+syn match	vimSyncGroupName	contained	"\k\+"	skipwhite	nextgroup=vimSyncKey
+syn match	vimSyncKey	contained	"\<groupthere\|grouphere\>"	skipwhite nextgroup=vimSyncGroup
+syn match	vimSyncGroup	contained	"\k\+"	skipwhite	nextgroup=vimSynRegPat,vimSyncNone
+syn keyword	vimSyncNone	contained	NONE
 
 " Additional IsCommand, here by reasons of precedence {{{2
 " ====================
-syn match vimIsCommand	"<Bar>\s*\a\+"	transparent contains=vimCommand,vimNotation
+syn match	vimIsCommand	"<Bar>\s*\a\+"	transparent contains=vimCommand,vimNotation
 
 " Highlighting {{{2
 " ============
-syn cluster vimHighlightCluster	contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment
-syn match   vimHighlight	"\<hi\%[ghlight]\>" skipwhite nextgroup=vimHiBang,@vimHighlightCluster
-syn match   vimHiBang	contained	"!"	  skipwhite nextgroup=@vimHighlightCluster
-
-syn match   vimHiGroup	contained	"\i\+"
+syn cluster	vimHighlightCluster		contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment
+syn match	vimHighlight	"\<hi\%[ghlight]\>"	skipwhite nextgroup=vimHiBang,@vimHighlightCluster
+syn match	vimHiBang	contained	"!"	skipwhite nextgroup=@vimHighlightCluster
+       	
+syn match	vimHiGroup	contained	"\i\+"
 syn case ignore
-syn keyword vimHiAttrib	contained	none bold inverse italic reverse standout underline undercurl
-syn keyword vimFgBgAttrib	contained	none bg background fg foreground
+syn keyword	vimHiAttrib	contained	none bold inverse italic reverse standout underline undercurl
+syn keyword	vimFgBgAttrib	contained	none bg background fg foreground
 syn case match
-syn match   vimHiAttribList	contained	"\i\+"	contains=vimHiAttrib
-syn match   vimHiAttribList	contained	"\i\+,"he=e-1	contains=vimHiAttrib nextgroup=vimHiAttribList
+syn match	vimHiAttribList	contained	"\i\+"	contains=vimHiAttrib
+syn match	vimHiAttribList	contained	"\i\+,"he=e-1	contains=vimHiAttrib nextgroup=vimHiAttribList
 syn case ignore
-syn keyword vimHiCtermColor	contained	black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
+syn keyword	vimHiCtermColor	contained	black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
 
 syn case match
-syn match   vimHiFontname	contained	"[a-zA-Z\-*]\+"
-syn match   vimHiGuiFontname	contained	"'[a-zA-Z\-* ]\+'"
-syn match   vimHiGuiRgb	contained	"#\x\{6}"
+syn match	vimHiFontname	contained	"[a-zA-Z\-*]\+"
+syn match	vimHiGuiFontname	contained	"'[a-zA-Z\-* ]\+'"
+syn match	vimHiGuiRgb	contained	"#\x\{6}"
 if !exists("g:vimsyn_noerror")
- syn match   vimHiCtermError	contained	"[^0-9]\i*"
+ syn match	vimHiCtermError	contained	"[^0-9]\i*"
 endif
 
 " Highlighting: hi group key=arg ... {{{2
-syn cluster vimHiCluster contains=vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
-syn region vimHiKeyList	contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"	contains=@vimHiCluster
+syn cluster	vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
+syn region	vimHiKeyList	contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"	contains=@vimHiCluster
 if !exists("g:vimsyn_noerror")
- syn match  vimHiKeyError	contained	"\i\+="he=e-1
+ syn match	vimHiKeyError	contained	"\i\+="he=e-1
 endif
-syn match  vimHiTerm	contained	"\cterm="he=e-1		nextgroup=vimHiAttribList
-syn match  vimHiStartStop	contained	"\c\(start\|stop\)="he=e-1	nextgroup=vimHiTermcap,vimOption
-syn match  vimHiCTerm	contained	"\ccterm="he=e-1		nextgroup=vimHiAttribList
-syn match  vimHiCtermFgBg	contained	"\ccterm[fb]g="he=e-1	nextgroup=vimNumber,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
-syn match  vimHiGui	contained	"\cgui="he=e-1		nextgroup=vimHiAttribList
-syn match  vimHiGuiFont	contained	"\cfont="he=e-1		nextgroup=vimHiFontname
-syn match  vimHiGuiFgBg	contained	"\cgui\%([fb]g\|sp\)="he=e-1	nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
-syn match  vimHiTermcap	contained	"\S\+"		contains=vimNotation
+syn match	vimHiTerm	contained	"\cterm="he=e-1		nextgroup=vimHiAttribList
+syn match	vimHiStartStop	contained	"\c\(start\|stop\)="he=e-1	nextgroup=vimHiTermcap,vimOption
+syn match	vimHiCTerm	contained	"\ccterm="he=e-1		nextgroup=vimHiAttribList
+syn match	vimHiCtermFgBg	contained	"\ccterm[fb]g="he=e-1	nextgroup=vimNumber,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
+syn match	vimHiGui	contained	"\cgui="he=e-1		nextgroup=vimHiAttribList
+syn match	vimHiGuiFont	contained	"\cfont="he=e-1		nextgroup=vimHiFontname
+syn match	vimHiGuiFgBg	contained	"\cgui\%([fb]g\|sp\)="he=e-1	nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
+syn match	vimHiTermcap	contained	"\S\+"		contains=vimNotation
 
 " Highlight: clear {{{2
-syn keyword vimHiClear	contained	clear	nextgroup=vimHiGroup
+syn keyword	vimHiClear	contained	clear	nextgroup=vimHiGroup
 
 " Highlight: link {{{2
-syn region vimHiLink	contained oneline matchgroup=vimCommand start="\<\(def\s\+\)\=link\>\|\<def\>" end="$"	contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
+syn region	vimHiLink	contained oneline matchgroup=vimCommand start="\<\(def\s\+\)\=link\>\|\<def\>" end="$"	contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
 
 " Control Characters {{{2
 " ==================
-syn match vimCtrlChar	"[--]"
+syn match	vimCtrlChar	"[--]"
 
 " Beginners - Patterns that involve ^ {{{2
 " =========
-syn match  vimLineComment	+^[ \t:]*".*$+	contains=@vimCommentGroup,vimCommentString,vimCommentTitle
-syn match  vimCommentTitle	'"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1	contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
-syn match  vimContinue	"^\s*\\"
-syn region vimString	start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
-syn match  vimCommentTitleLeader	'"\s\+'ms=s+1	contained
+syn match	vimLineComment	+^[ \t:]*".*$+	contains=@vimCommentGroup,vimCommentString,vimCommentTitle
+syn match	vimCommentTitle	'"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1	contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
+syn match	vimContinue	"^\s*\\"
+syn region	vimString	start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue
+syn match	vimCommentTitleLeader	'"\s\+'ms=s+1	contained
 
 " Searches And Globals: {{{2
 " ====================
-syn match vimSearch	'^\s*[/?].*'		contains=vimSearchDelim
-syn match vimSearchDelim	'^\s*\zs[/?]\|[/?]$'	contained
-syn region vimGlobal	matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/'
-syn region vimGlobal	matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'
+syn match	vimSearch	'^\s*[/?].*'		contains=vimSearchDelim
+syn match	vimSearchDelim	'^\s*\zs[/?]\|[/?]$'	contained
+syn region	vimGlobal	matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/'
+syn region	vimGlobal	matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'
 
 " Scripts  : perl,ruby : Benoit Cerrina {{{2
 " =======    python,tcl: Johannes Zellner
@@ -541,94 +543,127 @@
 endif
 
 " [-- perl --] {{{3
-if (g:vimsyn_embed =~ 'p' && has("perl")) && filereadable(expand("<sfile>:p:h")."/perl.vim")
+let s:perlpath= expand("<sfile>:p:h")."/perl.vim"
+if !filereadable(s:perlpath)
+ let s:perlpath= globpath(&rtp,"syntax/perl.vim")
+endif
+if (g:vimsyn_embed =~ 'p' && has("perl")) && filereadable(s:perlpath)
  unlet! b:current_syntax
- syn include @vimPerlScript <sfile>:p:h/perl.vim
+ exe "syn include @vimPerlScript ".s:perlpath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'p'
-  syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimPerlScript
-  syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
+  syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimPerlScript
+  syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+	contains=@vimPerlScript
  else
-  syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimPerlScript
-  syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+ contains=@vimPerlScript
+  syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimPerlScript
+  syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]\s*<<\s*$+ end=+\.$+		contains=@vimPerlScript
  endif
+ syn cluster vimFuncBodyList	add=vimPerlRegion
 else
  syn region vimEmbedError start=+pe\%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+
  syn region vimEmbedError start=+pe\%[rl]\s*<<\s*$+ end=+\.$+
 endif
+unlet s:perlpath
 
 " [-- ruby --] {{{3
-if (g:vimsyn_embed =~ 'r' && has("ruby")) && filereadable(expand("<sfile>:p:h")."/ruby.vim")
+let s:rubypath= expand("<sfile>:p:h")."/ruby.vim"
+if !filereadable(s:rubypath)
+ let s:rubypath= globpath(&rtp,"syntax/ruby.vim")
+endif
+if (g:vimsyn_embed =~ 'r' && has("ruby")) && filereadable(s:rubypath)
  unlet! b:current_syntax
- syn include @vimRubyScript <sfile>:p:h/ruby.vim
+ exe "syn include @vimRubyScript ".s:rubypath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'r'
-  syn region vimRubyRegion fold matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimRubyScript
+  syn region vimRubyRegion fold matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimRubyScript
  else
-  syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimRubyScript
+  syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimRubyScript
  endif
- syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+ contains=@vimRubyScript
+ syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]\s*<<\s*$+ end=+\.$+		contains=@vimRubyScript
+ syn cluster vimFuncBodyList	add=vimRubyRegion
 else
  syn region vimEmbedError start=+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+
  syn region vimEmbedError start=+rub[y]\s*<<\s*$+ end=+\.$+
 endif
+unlet s:rubypath
 
 " [-- python --] {{{3
-if (g:vimsyn_embed =~ 'P' && has("python")) && filereadable(expand("<sfile>:p:h")."/python.vim")
+let s:pythonpath= expand("<sfile>:p:h")."/python.vim"
+if !filereadable(s:pythonpath)
+ let s:pythonpath= globpath(&rtp,"syntax/python.vim")
+endif
+if (g:vimsyn_embed =~ 'P' && has("python")) && filereadable(s:pythonpath)
  unlet! b:current_syntax
- syn include @vimPythonScript <sfile>:p:h/python.vim
+ exe "syn include @vimPythonScript ".s:pythonpath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
-  syn region vimPythonRegion fold matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimPythonScript
-  syn region vimPythonRegion fold matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*$+ end=+\.$+ contains=@vimPythonScript
+  syn region vimPythonRegion fold matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimPythonScript
+  syn region vimPythonRegion fold matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*$+ end=+\.$+	contains=@vimPythonScript
  else
-  syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimPythonScript
-  syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*$+ end=+\.$+ contains=@vimPythonScript
+  syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimPythonScript
+  syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]\s*<<\s*$+ end=+\.$+	contains=@vimPythonScript
  endif
+ syn cluster vimFuncBodyList	add=vimPythonRegion
 else
  syn region vimEmbedError start=+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+
  syn region vimEmbedError start=+py\%[thon]\s*<<\s*$+ end=+\.$+
 endif
+unlet s:pythonpath
 
 " [-- tcl --] {{{3
 if has("win32") || has("win95") || has("win64") || has("win16")
  " apparently has("tcl") has been hanging vim on some windows systems with cygwin
- let trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
+ let s:trytcl= (&shell !~ '\<\%(bash\>\|4[nN][tT]\|\<zsh\)\>\%(\.exe\)\=$')
 else
- let trytcl= 1
+ let s:trytcl= 1
 endif
-if trytcl
- if (g:vimsyn_embed =~ 't' && has("tcl")) && filereadable(expand("<sfile>:p:h")."/tcl.vim")
-  unlet! b:current_syntax
-  syn include @vimTclScript <sfile>:p:h/tcl.vim
-  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
-   syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
-   syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
-  else
-   syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimTclScript
-   syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=@vimTclScript
-  endif
+if s:trytcl
+ let s:tclpath= expand("<sfile>:p:h")."/tcl.vim"
+ if !filereadable(s:tclpath)
+  let s:tclpath= globpath(&rtp,"syntax/tcl.vim")
  endif
+ if (g:vimsyn_embed =~ 't' && has("tcl")) && filereadable(s:tclpath)
+  unlet! b:current_syntax
+  exe "syn include @vimTclScript ".s:tclpath
+  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
+   syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimTclScript
+   syn region vimTclRegion fold matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+	contains=@vimTclScript
+  else
+   syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimTclScript
+   syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=\s*<<\s*$+ end=+\.$+		contains=@vimTclScript
+  endif
+  syn cluster vimFuncBodyList	add=vimTclScript
+ else
+  syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
+  syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
+ endif
+ unlet s:tclpath
 else
  syn region vimEmbedError start=+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+
  syn region vimEmbedError start=+tc[l]\=\s*<<\s*$+ end=+\.$+
 endif
-unlet trytcl
+unlet s:trytcl
 
 " [-- mzscheme --] {{{3
-if (g:vimsyn_embed =~ 'm' && has("mzscheme")) && filereadable(expand("<sfile>:p:h")."/scheme.vim")
+let s:mzschemepath= expand("<sfile>:p:h")."/scheme.vim"
+if !filereadable(s:mzschemepath)
+ let s:mzschemepath= globpath(&rtp,"syntax/scheme.vim")
+endif
+if (g:vimsyn_embed =~ 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
  unlet! b:current_syntax
  let iskKeep= &isk
- syn include @vimMzSchemeScript <sfile>:p:h/scheme.vim
+ exe "syn include @vimMzSchemeScript ".s:mzschemepath
  let &isk= iskKeep
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'm'
-  syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
-  syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
+  syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+	contains=@vimMzSchemeScript
+  syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+		contains=@vimMzSchemeScript
  else
-  syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
-  syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
+  syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+		contains=@vimMzSchemeScript
+  syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+		contains=@vimMzSchemeScript
  endif
+ syn cluster vimFuncBodyList	add=vimMzSchemeRegion
 else
  syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+
  syn region vimEmbedError start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+
 endif
+unlet s:mzschemepath
 
 " Synchronize (speed) {{{2
 "============
@@ -643,6 +678,7 @@
 syn sync linecont	"^\s\+\\"
 syn sync match vimAugroupSyncA	groupthere NONE	"\<aug\%[roup]\>\s\+[eE][nN][dD]"
 
+" ====================
 " Highlighting Settings {{{2
 " ====================
 
@@ -709,15 +745,15 @@
 hi def link vimMenuNameMore	vimMenuName
 hi def link vimMtchComment	vimComment
 hi def link vimNorm	vimCommand
+hi def link vimNotFunc	vimCommand
 hi def link vimNotPatSep	vimString
-hi def link vimPatSepR	vimPatSep
-hi def link vimPatSepZ	vimPatSep
 hi def link vimPatSepErr	vimPatSep
+hi def link vimPatSepR	vimPatSep
 hi def link vimPatSepZone	vimString
+hi def link vimPatSepZ	vimPatSep
 hi def link vimPlainMark	vimMark
 hi def link vimPlainRegister	vimRegister
 hi def link vimSearch	vimString
-hi def link vimSearchDelim	Statement
 hi def link vimSetMod	vimOption
 hi def link vimSetString	vimString
 hi def link vimSpecFileMod	vimSpecFile
@@ -738,11 +774,11 @@
 hi def link vimSynRegPat	vimString
 hi def link vimSyntax	vimCommand
 hi def link vimSynType	vimSpecial
+hi def link vimUnmap	vimMap
 hi def link vimUserAttrbCmplt	vimSpecial
 hi def link vimUserAttrbKey	vimOption
 hi def link vimUserAttrb	vimSpecial
 hi def link vimUserCommand	vimCommand
-hi def link vimUserFunc	Normal
 
 hi def link vimAutoEvent	Type
 hi def link vimBracket	Delimiter
@@ -759,24 +795,25 @@
 hi def link vimFuncName	Function
 hi def link vimFuncSID	Special
 hi def link vimFuncVar	Identifier
-hi def link vimGroup	Type
 hi def link vimGroupSpecial	Special
-hi def link vimHLMod	PreProc
+hi def link vimGroup	Type
 hi def link vimHiAttrib	PreProc
 hi def link vimHiTerm	Type
+hi def link vimHLMod	PreProc
 hi def link vimKeyword	Statement
 hi def link vimMark	Number
 hi def link vimMenuName	PreProc
 hi def link vimNotation	Special
-hi def link vimNotFunc	vimCommand
 hi def link vimNumber	Number
+hi def link vimOperError	Error
 hi def link vimOper	Operator
 hi def link vimOption	PreProc
-hi def link vimOperError	Error
+hi def link vimParenSep	Delimiter
 hi def link vimPatSep	SpecialChar
 hi def link vimPattern	Type
 hi def link vimRegister	SpecialChar
 hi def link vimScriptDelim	Comment
+hi def link vimSearchDelim	Statement
 hi def link vimSep	Delimiter
 hi def link vimSetSep	Statement
 hi def link vimSpecFile	Identifier
@@ -786,18 +823,19 @@
 hi def link vimSubstDelim	Delimiter
 hi def link vimSubstFlags	Special
 hi def link vimSubstSubstr	SpecialChar
-hi def link vimSynCase	Type
 hi def link vimSynCaseError	Error
-hi def link vimSynError	Error
-hi def link vimSynOption	Special
-hi def link vimSynReg	Type
+hi def link vimSynCase	Type
 hi def link vimSyncC	Type
 hi def link vimSyncError	Error
 hi def link vimSyncKey	Type
 hi def link vimSyncNone	Type
+hi def link vimSynError	Error
+hi def link vimSynOption	Special
+hi def link vimSynReg	Type
 hi def link vimTodo	Todo
-hi def link vimUserCmdError	Error
 hi def link vimUserAttrbCmpltFunc	Special
+hi def link vimUserCmdError	Error
+hi def link vimUserFunc	Normal
 hi def link vimWarn	WarningMsg
 
 " Current Syntax Variable: {{{2
diff --git a/runtime/syntax/xdefaults.vim b/runtime/syntax/xdefaults.vim
index cd3fed4..d7f1172 100644
--- a/runtime/syntax/xdefaults.vim
+++ b/runtime/syntax/xdefaults.vim
@@ -4,7 +4,7 @@
 "		Author and previous maintainer:
 "		Gautam H. Mudunuri <gmudunur@informatica.com>
 " Last Change:	Di, 09 Mai 2006 23:10:23 CEST
-" $Id$
+" $Id: xdefaults.vim,v 1.2 2007/05/05 17:19:40 vimboss Exp $
 "
 " REFERENCES:
 "   xrdb manual page
diff --git a/runtime/syntax/xml.vim b/runtime/syntax/xml.vim
index 8f8e155..58d6db0 100644
--- a/runtime/syntax/xml.vim
+++ b/runtime/syntax/xml.vim
@@ -3,9 +3,9 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 "		Author and previous maintainer:
 "		Paul Siegmann <pauls@euronet.nl>
-" Last Change:	Mi, 13 Apr 2005 22:40:09 CEST
+" Last Change:	2009-07-13 21:26:55
 " Filenames:	*.xml
-" $Id$
+" $Id: xml.vim,v 1.3 2006/04/11 21:32:00 vimboss Exp $
 
 " CONFIGURATION:
 "   syntax folding can be turned on by
@@ -216,7 +216,7 @@
     syn region  xmlComment
 	\ start=+<!+
 	\ end=+>+
-	\ contains=xmlCommentPart,xmlCommentError
+	\ contains=xmlCommentStart,xmlCommentError
 	\ extend
 	\ fold
 
@@ -228,11 +228,12 @@
     syn region  xmlComment
 	\ start=+<!+
 	\ end=+>+
-	\ contains=xmlCommentPart,xmlCommentError
+	\ contains=xmlCommentStart,xmlCommentError
 	\ extend
 
 endif
 
+syn match xmlCommentStart   contained "<!" nextgroup=xmlCommentPart
 syn keyword xmlTodo         contained TODO FIXME XXX
 syn match   xmlCommentError contained "[^><!]"
 syn region  xmlCommentPart
@@ -320,6 +321,7 @@
 
 hi def link xmlString		String
 hi def link xmlComment		Comment
+hi def link xmlCommentStart	xmlComment
 hi def link xmlCommentPart	Comment
 hi def link xmlCommentError	Error
 hi def link xmlError		Error
diff --git a/runtime/syntax/xquery.vim b/runtime/syntax/xquery.vim
index 67593b2..dcb2685 100644
--- a/runtime/syntax/xquery.vim
+++ b/runtime/syntax/xquery.vim
@@ -4,7 +4,7 @@
 " Last Change:	mar jui 12 18:04:05 CEST 2005
 " Filenames:	*.xq
 " URL:		http://jmvanel.free.fr/vim/xquery.vim
-" $Id$
+" $Id: xquery.vim,v 1.1 2005/07/18 21:44:56 vimboss Exp $
 
 " REFERENCES:
 "   [1] http://www.w3.org/TR/xquery/
diff --git a/runtime/syntax/xsd.vim b/runtime/syntax/xsd.vim
index c3431f4..5ba6b44 100644
--- a/runtime/syntax/xsd.vim
+++ b/runtime/syntax/xsd.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 " Last Change:	Tue, 27 Apr 2004 14:54:59 CEST
 " Filenames:	*.xsd
-" $Id$
+" $Id: xsd.vim,v 1.1 2004/06/13 18:20:48 vimboss Exp $
 
 " REFERENCES:
 "   [1] http://www.w3.org/TR/xmlschema-0
diff --git a/runtime/syntax/xslt.vim b/runtime/syntax/xslt.vim
index 98dd869..3e0df6a 100644
--- a/runtime/syntax/xslt.vim
+++ b/runtime/syntax/xslt.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 " Last Change:	Sun, 28 Oct 2001 21:22:24 +0100
 " Filenames:	*.xsl
-" $Id$
+" $Id: xslt.vim,v 1.1 2004/06/13 15:52:10 vimboss Exp $
 
 " REFERENCES:
 "   [1] http://www.w3.org/TR/xslt
diff --git a/runtime/syntax/yacc.vim b/runtime/syntax/yacc.vim
index d4bd019..1797b7a 100644
--- a/runtime/syntax/yacc.vim
+++ b/runtime/syntax/yacc.vim
@@ -1,95 +1,85 @@
 " Vim syntax file
 " Language:	Yacc
 " Maintainer:	Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Jan 09, 2008
-" Version:	5
+" Last Change:	Oct 21, 2008
+" Version:	7
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Options: {{{1
 "   g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
-"   g:yacc_minlines : see :help :he syn-sync-minlines -- default 50
-"   g:yacc_maxlines : see :help :he syn-sync-maxlines -- default 200
 
 " ---------------------------------------------------------------------
-" For version 5.x: Clear all syntax items {{{1
-" For version 6.x: Quit when a syntax file was already loaded
+" this version of syntax/yacc.vim requires 6.0 or later
 if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
-  finish
+ finish
+endif
+if exists("b:current_syntax")
+ syntax clear
+endif
+
+" ---------------------------------------------------------------------
+"  Folding Support {{{1
+if has("folding")
+ com! -nargs=+ HiFold	<args> fold
+else
+ com! -nargs=+ HiFold	<args>
 endif
 
 " ---------------------------------------------------------------------
 " Read the C syntax to start with {{{1
-if version >= 600
-  if exists("g:yacc_uses_cpp")
-    runtime! syntax/cpp.vim
-  else
-    runtime! syntax/c.vim
-  endif
-elseif exists("g:yacc_uses_cpp")
-  so <sfile>:p:h/cpp.vim
+if exists("g:yacc_uses_cpp")
+ syn include @yaccCode	<sfile>:p:h/cpp.vim
 else
-  so <sfile>:p:h/c.vim
+ syn include @yaccCode	<sfile>:p:h/c.vim
 endif
 
 " ---------------------------------------------------------------------
-" Clusters {{{1
-syn cluster	yaccActionGroup	contains=yaccDelim,cInParen,cTodo,cIncluded,yaccDelim,yaccCurlyError,yaccUnionCurly,yaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCommentStartError,cParenError
-syn cluster	yaccUnionGroup	contains=yaccKey,cComment,yaccCurly,cType,cStructure,cStorageClass,yaccUnionCurly
+"  Yacc Clusters: {{{1
+syn cluster yaccInitCluster	contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment
+syn cluster yaccRulesCluster	contains=yaccNonterminal,yaccString
 
 " ---------------------------------------------------------------------
-" Yacc stuff {{{1
-syn match	yaccDelim	"^\s*[:|;]"
-syn match	yaccOper	"@\d\+"
-
-syn match	yaccKey	"^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"
-syn match	yaccKey	"\s%\(prec\|expect\)\>"
-syn match	yaccKey	"\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"
-syn keyword	yaccKeyActn	yyerrok yyclearin
-
-syn match	yaccUnionStart	"^%union"	skipwhite skipnl nextgroup=yaccUnion
-syn region	yaccUnion	contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}"	contains=@yaccUnionGroup
-syn region	yaccUnionCurly	contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
-syn match	yaccBrkt	contained "[<>]"
-syn match	yaccType	"<[a-zA-Z_][a-zA-Z0-9_]*>"	contains=yaccBrkt
-syn match	yaccDefinition	"^[A-Za-z][A-Za-z0-9_]*\_s*:"
+"  Yacc Sections: {{{1
+HiFold syn	region	yaccInit	start='.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty contained
+HiFold syn	region	yaccInit2      start='\%^.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty
+HiFold syn	region	yaccHeader2	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty contained
+HiFold syn	region	yaccHeader	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty
+HiFold syn	region	yaccRules	matchgroup=yaccSectionSep	start='^%%$'		end='^%%$'me=e-2,re=e-2	contains=@yaccRulesCluster	nextgroup=yaccEndCode	skipwhite skipempty contained
+HiFold syn	region	yaccEndCode	matchgroup=yaccSectionSep	start='^%%$'		end='\%$'		contains=@yaccCode	contained
 
 " ---------------------------------------------------------------------
-" special Yacc separators {{{1
-syn match	yaccSectionSep	"^[ \t]*%%"
-syn match	yaccSep	"^[ \t]*%{"
-syn match	yaccSep	"^[ \t]*%}"
+" Yacc Commands: {{{1
+syn	match	yaccDelim	"[:|]"	contained
+syn	match	yaccOper	"@\d\+"	contained
+
+syn	match	yaccKey	"^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"	contained
+syn	match	yaccKey	"\s%\(prec\|expect\)\>"	contained
+syn	match	yaccKey	"\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"	contained
+syn	keyword	yaccKeyActn	yyerrok yyclearin	contained
+
+syn	match	yaccUnionStart	"^%union"	skipwhite skipnl nextgroup=yaccUnion	contained
+HiFold syn	region	yaccUnion	matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode	contained
+syn	match	yaccBrkt	"[<>]"	contained
+syn	match	yaccType	"<[a-zA-Z_][a-zA-Z0-9_]*>"	contains=yaccBrkt	contained
+
+HiFold syn	region	yaccNonterminal	start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:"	matchgroup=yaccDelim end=";"	matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment	contained
+syn	region	yaccComment	start="/\*"	end="\*/"
+syn	match	yaccString	"'[^']*'"	contained
+
 
 " ---------------------------------------------------------------------
 " I'd really like to highlight just the outer {}.  Any suggestions??? {{{1
-syn match	yaccCurlyError	"[{}]"
-syn region	yaccAction	matchgroup=yaccCurly start="{" end="}" contains=ALLBUT,@yaccActionGroup
+syn	match	yaccCurlyError	"[{}]"
+HiFold syn	region	yaccAction	matchgroup=yaccCurly start="{" end="}" contains=@yaccCode	contained
 
 " ---------------------------------------------------------------------
 " Yacc synchronization: {{{1
-if exists("g:yacc_maxlines")
- exe "syn sync maxlines=".g:yacc_maxlines
-else
- syn sync maxlines=200
-endif
-if exists("g:yacc_minlines")
- exe "syn sync minlines=".g:yacc_minlines
-else
- syn sync minlines=50
-endif
+syn sync fromstart
 
 " ---------------------------------------------------------------------
 " Define the default highlighting. {{{1
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_yacc_syn_inits")
-  if version < 508
-    let did_yacchdl_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
+if !exists("did_yacc_syn_inits")
+  command -nargs=+ HiLink hi def link <args>
 
   " Internal yacc highlighting links {{{2
   HiLink yaccBrkt	yaccStmt
@@ -98,13 +88,15 @@
   HiLink yaccUnionStart	yaccKey
 
   " External yacc highlighting links {{{2
+  HiLink yaccComment	Comment
   HiLink yaccCurly	Delimiter
   HiLink yaccCurlyError	Error
-  HiLink yaccDefinition	Function
-  HiLink yaccDelim	Function
+  HiLink yaccNonterminal	Function
+  HiLink yaccDelim	Delimiter
   HiLink yaccKeyActn	Special
   HiLink yaccSectionSep	Todo
   HiLink yaccSep	Delimiter
+  HiLink yaccString	String
   HiLink yaccStmt	Statement
   HiLink yaccType	Type
 
@@ -113,6 +105,10 @@
 
   delcommand HiLink
 endif
+
+" ---------------------------------------------------------------------
+"  Cleanup: {{{1
+delcommand HiFold
 let b:current_syntax = "yacc"
 
 " ---------------------------------------------------------------------
diff --git a/runtime/tutor/Makefile b/runtime/tutor/Makefile
index 45f468f..7f4df75 100644
--- a/runtime/tutor/Makefile
+++ b/runtime/tutor/Makefile
@@ -6,9 +6,11 @@
 # Similarly for Russian and Korean
 
 all: tutor.utf-8 \
+	tutor.bj \
 	tutor.ca.utf-8 \
 	tutor.de.utf-8 \
 	tutor.el tutor.el.cp737 \
+	tutor.eo \
 	tutor.es.utf-8 \
 	tutor.fr.utf-8 \
 	tutor.hr tutor.hr.cp1250 \
@@ -17,6 +19,8 @@
 	tutor.ja.sjis tutor.ja.euc \
 	tutor.ko.euc \
 	tutor.no.utf-8 \
+	tutor.nb \
+	tutor.nb.utf-8 \
 	tutor.ru tutor.ru.cp1251 \
 	tutor.sv.utf-8 \
 	tutor.zh.utf-8
@@ -24,9 +28,15 @@
 tutor.utf-8: tutor
 	iconv -f ISO-8859-1 -t UTF-8 tutor > tutor.utf-8
 
+tutor.bj: tutor.bj.utf-8
+	iconv -f UTF-8 -t ISO-8859-1 tutor.bj.utf-8 > tutor.bj
+
 tutor.ca.utf-8: tutor.ca
 	iconv -f ISO-8859-1 -t UTF-8 tutor.ca > tutor.ca.utf-8
 
+tutor.eo: tutor.eo.utf-8
+	iconv -f UTF-8 -t ISO-8859-3 tutor.eo.utf-8 > tutor.eo
+
 tutor.de.utf-8: tutor.de
 	iconv -f ISO-8859-1 -t UTF-8 tutor.de > tutor.de.utf-8
 
@@ -66,6 +76,13 @@
 tutor.no.utf-8: tutor.no
 	iconv -f ISO-8859-1 -t UTF-8 tutor.no > tutor.no.utf-8
 
+# nb is an alias for no
+tutor.nb: tutor.no
+	cp tutor.no tutor.nb
+
+tutor.nb.utf-8: tutor.no.utf-8
+	cp tutor.no.utf-8 tutor.nb.utf-8
+
 tutor.ru: tutor.ru.utf-8
 	iconv -f UTF-8 -t KOI8-R tutor.ru.utf-8 > tutor.ru
 
diff --git a/runtime/tutor/tutor.bj b/runtime/tutor/tutor.bj
new file mode 100644
index 0000000..642a8f3
--- /dev/null
+++ b/runtime/tutor/tutor.bj
@@ -0,0 +1,987 @@
+===============================================================================
+=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
+===============================================================================
+
+   Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
+   vil,  däß myn s allsand  in aynn Schainer  wie dönn daader  unterbräng.  Der
+   Schainer ist yso aufbaut,  däß yr halt netty die Befelh allsand bringt, wost
+   brauchst, däßst mit iem für s Eerste wirklich öbbs anfangen kanst.
+   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dös haisst,
+   wennst di nit grooß mit n Pröbln und Tüftln aufhaltst.
+
+   OBACHT:
+   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort öndern.  Dösswögn
+   machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
+   dös Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
+   ayn Aamum.
+   Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Üebn
+   ghoert.  Also muesst schoon aau die Befelh ausfüern,  wennst ys gscheid ler-
+   nen willst. Mit n Lösn yllain ist s +nit taan!
+
+   Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
+   glei aynmaal mit dyr j-Tastn abwärts (yso laaufft dös nömlich),  hinst däßst
+   de gantze Letzn 1.1 auf n Bildschirm haast.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
+
+**  Dyrmitst mit n Mörkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
+            ^            Ayn Öslsbrugg:
+            k            De Tastn  h  ist winster und +geet aau gan winster.
+   < h             l >   S  l  leit zesm und richtt si gan zesm.
+            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
+            v            Mit n  k  kimmst gan n KOPF.            
+  1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
+     di sicher füelst.
+  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+     kimmst gan dyr naehstn Letzn.
+     
+  3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
+
+Non öbbs: Allweil, wenn dyr niemer ganz wol ist, wasst öbbenn druckt haast, aft
+          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
+
+      
+          Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
+          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hörtn" seind ganz dyr-
+          für, däß myn bei +dene bleibt. Pröblt s ainfach aus!
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 1.2: ÖNN WIMM AUSSCHALTTN
+
+
+  ALSO, EE WENNST ÖBBS VON DAA UNT AUSFÜERST,  LIS LIEBER ZEERST DE GANTZE LET-
+  ZN!
+
+  1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
+  
+  2. Demmlt  :q! <EIN>.
+     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst öbbenn  göndert
+     haast.
+
+  3. Balst önn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
+     gen haat, also    vimtutor bj <EIN>.
+
+  4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
+     wasst ys Blat verlaasst und aft wider einhinkimmst.
+
+Anmörkung: Mit  :q! <EIN> verwirffst allss, wasst göndert older enther gschribn
+           haast. In aynn Öttlych Letznen lernst acht, wiest dös allss in ayner
+           Dautticht speichertst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.3: GWORT BARECHTN - LÖSCHN 
+
+         
+         ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
+
+  1. Bewög di mit n Mörkl auf de mit  ---> angmörkte Zeil unt.
+
+  2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
+     glöscht ghoert.
+
+  3. Druck de Tastn  x  , däßst dös überflüssige Zaichen löschst.
+
+  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst däß dyr Saz stimmt.
+
+---> De Kkuue sprangg übber nn Maanad.
+
+  5. Wenn ietz de Zeil verbössert ist, geest gan dyr Letzn 1.4. weiter.
+
+Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit öbbenn,
+                   allss auswendig z lernen;  nän, lern ainfach mit n Anwenddn!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.4: GWORT BARECHTN - EINFÜEGN
+
+
+                  **  Druck  i  , dyrmitst öbbs einfüegst. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
+
+  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög önn Mörkl  auf dös
+     eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
+
+  3. Druck  i  und gib dös ein, was abgeet.
+
+  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
+     gan dyr Befelhsartweis zrugg.
+     So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
+
+---> Daader gt dd öbbs b.
+---> Daader geet diend öbbs ab.
+
+  5. Balst mainst,  däßst ys Gwort-Einfüegn kanst, aft geest gan dyr Letzn 1.5.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.5: GWORT BARECHTN - ANFÜEGN
+
+
+                      ** Druck  A  gan n Gwort Anfüegn. **
+
+  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
+     Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
+
+  2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
+
+  3. Wennst  mit n Anfüegn förtig bist,  aft druckst <ESC>,  däßst wider eyn de
+     Befelhsartweis zruggkimmst.
+
+  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmörktn Zeil;  und
+     daadl machst ys netty yso.
+
+---> In derer Zeil gee  
+     In derer Zeil geet ayn Weeng ayn Gwort ab.
+---> Aau daader stee
+     Aau daader steet öbbs Unvollstöndigs. 
+
+  5. Wennst s Anfüegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.6: AYN DAUTTICHT BARECHTN
+
+
+     ** Mit  :wq  speichertst ayn Dautticht und verlaasst önn Wimm ganz. **
+
+  !! OBACHT:  Ee wennst mit dönn alln daa unt weitertuest, lis zeerst de gantze
+     Letzn durch!!
+
+  1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
+
+  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
+     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
+     haast also ayn Dautticht, dö wost barechtn kanst.
+
+  3. Ietz  füegst öbbs ein older löschst öbbs,  wiest ys in de vorignen Letznen
+     glernt haast.
+
+  4. Speichert de gönderte Dautticht und verlaaß önn Wimm mit  :wq  <EIN>  .
+
+  5. Schmeiß önn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
+
+  6. Aft däßst  de obignen Schritt glösn und käppt haast,  kanst ys durchfüern.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 1
+
+
+  1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
+              h (winst)     j (ab)        k (auf)       l (zes)
+
+  2. Um önn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
+
+  3. Willst önn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
+                <ESC>  :q!  <EIN> .
+     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
+
+  4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
+
+  5. Willst öbbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
+     Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
+     Und ainfach naach n Mörkl füegst ys mit  a  ein  .
+
+Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
+            Faudung ab, dö wo dyr schiefgangen ist.
+
+     Ietz tue mit dyr Letzn 2 weiter.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 2.1.: LÖSHFAUDUNGEN
+
+
+                 ** Demmlt  dw  , dyrmitst ayn Wort löschst **
+
+  1. Druck  <ESC>, dyrmit s aau gwiß ist, däßst in dyr Befelhsartweis bist.
+
+  2. Bewög önn Mörkl zo dyr mit ---> angmörktn Zeil unt.
+
+  3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
+
+  4. Zipf  dw  , däßst dös gantze Wort löschst.
+
+  Nöbnbei:  Dyr Buechstabn  d  erscheint auf dyr lösstn Zeil  von n Bildschirm,
+            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, däß öbbs kimmt, al-
+            so  daader ayn  w  .  Seghst  freilich  öbbs Anderts  wie ayn  d  ,
+            naacherd haast  öbbs Falschs  demmlt.  Druck aft  <ESC>  und pröblt
+            s non aynmaal.
+---> Ayn Öttlych Wörter lustig ghoernd nit Fisper eyn dönn Saz einhin.
+
+  5. Äfert  d Schritt  3 und 4,  hinst däß  dyr Saz pässt,  und gee aft gan dyr
+     Letzn 2.2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 2.2.: NON MEERER LÖSHFAUDUNGEN
+
+
+            ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
+
+  1. Druck <ESC> , dyrmitst aau gwiß in dyr Befelhsartweis bist.
+
+  2. Bewög önn Mörkl hinst eyn de mit ---> angmörkte Zeil untn.
+
+  3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
+
+  4. Zipf  d$  , däßst hinst eyn s End von dyr Zeil löschst.
+  
+---> Öbber haat s End von dyr Zeil doplt eingöbn. doplt eingöbn.
+
+
+  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 2.3: PFEMERER UND WOLENDER
+
+
+  Vil Faudungen,   wo s Gwort öndernd, sötznd si aus aynn Pfemerer und aynn Wo-
+  lend zamm. Bal i also öbbs löschn will, schreib i ainsting  d  und aft s "Wo-
+  lend", dös haisst also, "wolend", "wohin" däß i will - older was i halt gnaun
+  löschn will.
+
+
+
+
+
+
+  Daader also, was i wie löschn kan:
+    w - hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
+    e - gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
+    $ - zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
+
+  Also löscht de Tastnfolg  de  umbb n Mörkl hinst eyn s Wortend.
+Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
+             entspröchet weiter.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Letzn 2.4: MIT AYNN ZÖLER D WOLENDER ÄFERN
+
+
+      ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel halt widerholt. **
+
+  1. Bewög önn Mörkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
+
+  2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
+
+  3. Zipf  3e  , däßst mit n Mörkl auf s End von n drittn Wort kimmst.
+
+  4. Zipf  0  (aynn Nuller), däßst eyn n Anfang von dyr Zeil hinkimmst.
+
+  5. Widerhol d Schritt 2 und 3 mit verschaidne Zöler.
+
+  ---> Dös ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
+
+  6. Gee weiter gan dyr Letzn 2.5.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
+
+
+              ** Ayn Zal vor aynn Pfemerer äfert dönn um seln Werd. **
+
+  Also, i mecht löschn,  und zwaar öbbs Bestimmts,  und dös so und so oft:  Daa
+  dyrzue benutz i aynn Zöler:
+                              d  Zöler  Wolend (also önn Bewögungsschrit)
+
+  1. Bewög önn Mörkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
+     gmörktn Zeil.
+
+  2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
+
+  3. Äfert  d Schritt 1 und 2  mit dönn entspröchetn Zöler,  dyrmitst de drauf-
+     folgetn  ganz großgschribnen Wörter  mit ayner ainzignen Faudung  löschst:
+
+
+--->  Dö ABC DE Zeil FGHI JK LMN OP mit Wörter ist Q RS TUV ietz berichtigt.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 2.6: ARECHTN AUF ZEILN
+
+
+               ** Zipf  dd  , um ayn gantze Zeil z löschn. **
+
+  Weil s gro oft vürkimmt,  däß myn gantze Zeiln löscht,  kaamend schoon d Ent-
+  wickler von n Urwimm daa drauf,  däß myn ainfach  dd  gan dönn Zwök schreibt.
+
+
+  1. Bewög önn Mörkl gan dyr zwaittn Zeil in n untignen "Gedicht".
+  2. Zipf  dd  ,  um dö Zeil z löschn.
+  3. Ietz bewögst di gan dyr viertn Zeil.
+  4. Zipf  2dd  , um zwo Zeiln zo n Löschn.
+
+--->  1)  Roosn seind root;
+--->  2)  Drunter ist s Koot.
+--->  3)  Veigerln seind blau.
+--->  4)  Umgrabn tuet s d Sau.
+--->  5)  D Ur sait de Zeit,
+--->  6)  Sait, däß s mi freut,
+--->  7)  Dirndl, dein Gschau.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Letzn 2.7: RUGGGÖNGIG MACHEN (RUGGLN) 
+
+
+             ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
+              ** older  U  , um ayn gantze Zeil widerherzstölln. **
+
+  1. Bewög önn Mörkl  gan dyr mit ---> angmörktn Zeil unt  und gee dyrmit auf n
+     eerstn Faeler.
+  2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
+  3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
+  4. Ietz behöb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
+  5. Aft gibst ayn  U  (grooß) ein,  däßst de Zeil wider yso hinbringst,  wie s
+     gwösn ist.
+  6. So,  und ietz  demmltst  so oft  u  , hinst däßst s  U  und de andern Fau-
+     dungen rugggöngig gmacht haast.
+  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst däßst  allsand Be-
+     felh widerhergstöllt, z haissn allsse rugg-grugglt haast  (also d Rugggön-
+     gigmachungen rugggöngig gmacht).
+---> Beerichtig d Faeller voon dehrer Zeiil  und sttöll s mitt n Ruggruggln wi-
+     der her.
+  8. Die Faudungen seind gro wichtig; sö helffend ainn närrisch weiter.
+     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 2
+
+
+  1. Um von n Mörkl aus hinst eyn s naehste Wort zo n Löschn, zipf:  dw
+  2. Um umbb n Mörkl hinst eyn s End von dyr Zeil zo n Löschn, demmlt  d$
+  3. Dyrmitst ayn gantze Zeil löschst, gib ein:  dd
+  4. Mechst ayn Bewögung, ayn "Wolend", öfters,  stöll de entspröchete Zal dyr-
+     vor:  3dw  older aau:  d3w
+  5. Dyr Pfueg für ayn Önderungsfaudung lautt yso:
+               Pfemerer   [Zal]   Bewögungsschrit (Wolend)
+     Und dös haisst:
+      Dyr PFEMERER gibt an, WAS taan ghoert, öbbenn   d   =  löschn (»delete«).
+      [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend öfter habn will.
+      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  öbbenn
+      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+
+  6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
+
+  7. Um öbbs Vorigs wider z ruggln, gib ein:                u (klain also)
+     Um allsand Önderungen in ayner Zeil z ruggln, haast:   U (also grooß)
+     Um "rugg-z-ruggln", also allss wider herzstölln, zipf: <STRG>r   
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 3.1: ANFÜEGN (»put«) 
+
+
+     ** Zipf  p  , dyrmitst öbbs gnetty Glöschts naach n Mörkl anfüegst. **
+
+  1. Bewög önn Mörkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
+
+  2. Zipf  dd  , um sele Zeil z löschn  und dyrmit  in aynn Wimm-"Roster"  zo n
+     speichern.
+
+  3. Bewög önn Mörkl gan dyr Zeil c),  ÜBER derer, daa wo de glöschte Zeil ein-
+     hinkemmen sollt.
+
+  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dö Zeil unter derer
+     mit n Mörkl drinn.
+  5. Äfert  d Schritt 2 hinst 4,  hinst däßst  allsand Zeiln  yso naachynaynand
+     haast, wie s hinghoernd.
+
+---> d) Kanst du dös aau?
+---> b) Veigerln seind blau.
+---> c) Bedachtn kan myn lernen.
+---> a) Roosn seind root.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Letzn 3.2: ERSÖTZN (»replace«)
+
+
+      ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
+
+  2. Bewög önn Mörkl, hinst däß yr auf n eerstn Faeler steet.
+
+  3. Zipf  r  und drafter dös Zaichen, wo dyrfür daa hinghoert.
+
+  4. Widerhol d Schritt 2 und 3,  hinst däßst de eerste Zeil  gmaeß dyr zwaittn
+     berichtigt haast:
+--->  Wie dö Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
+--->  Wie dö Zeil eingöbn wurd, wurdnd ainige falsche Tastnen zipft!
+
+  5. Ietz tue mit dyr Letzn 3.3 weiter.
+
+Anmörkung: Vergiß nit drauf, däßst mit n Anwenddn lernen solltst und nit öbbenn
+           mit n Auswendiglernen!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 3.3: ÖNDERN (»change«)
+
+
+              ** Um hinst eyn s Wortend z öndern, zipf  ce  . **
+
+  1. Gee mit n Mörkl auf de eerste mit ---> angmörkte Zeil.
+
+  2. Ietz farst netty auf s  "s"  von Wstwr hin.
+
+  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  örter  .
+
+  4. Druck <ESC> und bewög önn Mörkl gan n naehstn Zaichen,  wo göndert ghoert.
+
+  5. Äfert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
+
+---> Ainige Wstwr von derer Zlww ghhnnd mit n Öndern-Pfemerer gaauu.
+---> Ainige Wörter von derer Zeil ghoernd mit n Öndern-Pfemerer göndert.
+
+ce  löscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  Letzn 3.4.: NON MEERER ÖNDERUNGEN PFELFS  c
+
+
+   ** D Löshfaudung  c  arechtt mit de nömlichnen Wolender wie dö mit  d  **
+
+  1. Dyr Önder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
+     yso:
+         c    [Zal]   Bewögungsschritt (Wolend)
+
+  2. D Wolender  seind  de gleichn,  öbbenn  w  für Wort und  $ für s Zeilnend.
+
+
+  3. Bewög di zo dyr eerstn untignen Zeil mit ---> .
+
+  4. Ietz geest auf dönn eerstn Faeler.
+
+  5. Zipf  c$  , gib önn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
+     <ESC>.
+---> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
+---> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
+
+Denk allweil dran,  däßst iederzeit  mit dyr Ruggtastn Faeler ausbössern kanst.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 3
+
+
+  1. Um ayn  vorher glöschts Gwort  anzfüegn,  zipf  p  .  Daa dyrmit  werd dös
+     gantze Gwort  NAACH n Mörkl  angfüegt.  Wenn s ayn gantze Zeil  gwösn ist,
+     werd dö sel als de Zeil unterhalb n Mörkl eingfüegt.
+
+  2. Um dös Zaichen  unter n Mörkl,  also wo dyr Mörkl ist,  z ersötzn, zipf  r
+     und aft dös Zaichen, wost daadl habn willst.
+
+  3. Dyr Önderungspfemerer ( c = »change«) laasst ainn umbb n Mörkl hinst eyn s
+     End von n Wolend öndern. Zipf  ce  , dyrmitst umbb n Mörkl hinst eyn s End
+     von n Wort öndertst, und  c$  hinst eyn s End von dyr Zeil.
+
+  4. Für d Önderung lautt dyr Pfueg:
+
+     c   [Zal]   Wolend
+
+Ietz tue mit dyr naehstn Letzn weiter.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.1: MÖRKLSTÖLLUNG UND DAUTTICHTDARSTAND
+
+** Demmlt <STRG>g, däßst önn Befand und Darstand von dyr Dautticht anzaigst. **
+  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
+
+Anmörkung: Lis dö gantze Letzn daader durch, ee wennst iewign öbbs unternimmst!
+
+  1. Druck  <STRG>g  .  Auf dös hin erscheint auf derer Seitt ganz unt ayn Dar-
+     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
+     Mörk dyr de Zeilnnummer für n Schrit 3.
+
+Anmörkung:  Müglicherweis  seghst aau önn Mörklbefand  in n zesmen untern Bild-
+            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt; schau dyrzue mit
+            n Befelh   :help 'ruler'   naach.
+  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
+     gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
+
+  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
+     Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
+     Maal <STRG>g gadruckst.
+
+  4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
+               
+
+  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
+
+  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
+     Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
+
+  2. Ietz zipf 'Faeeler' <EIN>. Netty um dös 'Faeeler' willst ietz suechen.
+
+  3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie »next«).
+     Willst hinzrugg suechen, aft gibst  N  ein.
+
+  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
+
+  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und dös
+     öfter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwärts.
+
+--->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
+
+Anmörkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
+            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wär auf aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.3: DE GÖGNKLAMMERN FINDDN
+
+
+   ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
+
+  1. Sötz önn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
+     in dyr untignen Zeil, wo mit ---> angmörkt ist.
+
+  2. Ietzet zipf s Zaichen  %  .
+
+  3. Dyr Mörkl geet ietz auf de pässete schliessete Klammer.
+
+  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr öffneretn Klammer zrugg.
+
+  5. Sötz önn Mörkl auf ayn anderne Klammer von   ({[]})   und pröblt   %  aus.
+
+---> Dös ( ist  blooß ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
+
+Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
+            Spaichgwort verzweiflt ayn faelete Gögnklammer suechst!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.4: D ERSÖTZUNGSFAUDUNG (»substitute«)
+
+
+        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
+
+  1. Gee mit n Mörkl zo dyr unt steehetn mit ---> angmörktn Zeil.
+
+  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
+     wo vürkimmt.
+
+  3. Ietz pröblt s mit  :s/dee/de/g  . Dös zuesötzliche  g  ("Pflok"  nennt myn
+     öbbs Sölchers) bewirkt, däß allss, was dyrmit kennzaichnet ist,  innerhalb
+     von dyr ainn Zeil ersötzt werd.
+
+---> Dee schoenste Zeit, däß myn dee Blüemln anschaut, ist dee schoene Lan-
+     gesszeit.
+  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Öndern,  zipf
+     :#,#s/alt/neu/g  ,  wobei # ieweils für de eerste und lösste Zeil von dönn
+     Pfraich steet.
+     :%s/alt/neu/g  zipfst, däßst d Vürkemmen in dyr gantzn Dautticht öndertst.
+        Mit  :%s/alt/neu/gc  finddst allsand Vürkemmen in dyr gsamtn Dautticht;
+     daa werst aber zeerst non gfraagt, obst ys ersötzn willst older nity.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 4
+                        
+  1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und önn Darstand dyrvon an.
+           G  bringt di an s End von dyr Dautticht.
+     <Zal> G  bringt di gan dyr entspröchetn Zeilnnummer.
+          gg  bringt di zo dyr eerstn Zeil.
+          
+  2. D Eingaab von  /  mit aynn Ausdruk suecht VÜRSHLING um dönn Ausdruk.
+     Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn ÄRSHLING.
+     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
+     gsuecht. Mit  N geet s umkeerter weiter.
+     <STRG>o bringt di zo ölterne Befändd zrugg, <STRG>i zo neuerne.
+
+  3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
+     )]}  , bringt di zo dyr Gögnklammer.
+
+  4. Um dös eerste Vürkemmen  von "alt"  in ayner Zeil  durch "neu"  z ersötzn,
+     zipf   :s/alt/neu   .
+     Um allsand in ayner Zeil z ersötzn, zipf   :s/alt/neu/g   .
+     Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
+     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:   :%s/alt/neu/g   .
+     Willst ayn ieds Maal bstaetln, höng 'c' wie »confirm« hint anhin.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÜERN 
+            
+
+  ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach   :!   ein. **
+ 
+  1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
+     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
+
+  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de Müglich-
+     keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
+
+  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
+     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
+     aus iewign aynn Grund nit, aft pröblt s mit  :!dir <EIN>  .
+
+Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
+                  gfüert werdn, aau mit Auerwerdd.
+
+Und wolgmörkt:    Allsand Befelh, wo mit  :  angeend,  müessend mit <EIN> bstö-
+                  tigt werdn. Dös dyrsagn myr vürbaß niemer.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+           Letzn 5.2: NON MEERER DRÜBER, WIE MYN DAUTTICHTN SCHREIBT
+
+
+      ** Um öbbs Gönderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
+
+  1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
+     niss ausherlaasst.  Däßst dyrnaach <EIN> eingöbn muesst, waisst ee schoon.
+
+  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, öbbenn POCH.
+
+  3. Ietz demmlt:  :w POCH   (also mit POCH als dönn neuen Dauttichtnam).
+
+  4. Dös speichert ietz de gantze Dautticht, also önn Wimmschainer,  unter dönn
+     Nam POCH. Dös kanst leicht überprüeffen, indem däßst ainfach  :!ls   older
+     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
+
+Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH  ,
+            naacherd wär dö Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
+            wiest n gspeichert haast.
+
+  5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
+     beziehungsweis bei aynn Ainslgebäu mit   :!rm POCH   .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
+
+** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
+
+  1. Ruck önn Mörkl auf netty dö Zeil daader.
+
+  2. Demmlt  v  und gee mit n Mörkl  auf dönn fümftn Auflistungspunt untet.  Du
+     seghst glei, däß s Gwort vürherghöbt erscheint.
+
+  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
+
+  4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
+     däßst dös  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
+
+  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
+     :!dir  older  :!ls  ,  däßst dös überprüeffst. Lösh s fein nit öbbenn! Mir
+     brauchend s nömlich für de naehste Letzn.
+
+Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
+            aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
+            Pfemerer  mit dönn Gwort  öbbs machen.  Zo n Beispil löscht  d  dös
+            Gwort.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+               Letzn 5.4: EINLÖSN UND ZAMMENFÜERN VON DAUTTICHTN   
+
+
+    ** Um önn Inhalt von ayner Dautticht einzlösn, zipf  :r DAUTTICHTNAM  **
+
+  1. Sötz önn Mörkl über dö Zeil daader.
+
+OBACHT:  Aft däßst önn Schrit 2  ausgfüert haast,  seghst auf aynmaal  öbbs aus
+         dyr Letzn 5.3.  Bewög di naacherd wider abwärts, dyrmitst dö Letzn wi-
+         derfinddst.
+  2. Ietz  lis  dein Dautticht  POCH ein,  indem däßst d Faudung   :r POCH aus-
+     füerst,  wobei wie gsait POCH  für dönn  von dir  ausgsuechtn Dauttichtnam
+     steet. De einglösne Dautticht werd unterhalb dyr Mörklzeil eingfüegt.
+
+  3. Um zo n Überprüeffen,  ob de Dautticht  aau gwiß einglösn ist,  gee zrugg;
+     und du seghst,  däß s ietz zwo Ausförtigungen  von dyr Letzn 5.3. geit,  s
+     Urniss und de eingfüegte Dauttichtfassung.
+
+Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei-
+            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und füegt s
+            unterhalb n Mörkl ein.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 5
+
+
+  1. :!FAUDUNG füert aynn ausserignen Befelh aus.
+
+      Daader ayn Öttlych gwänddte Beispiler:
+      (Fenstl)              (Ainsl - Leinsl)
+      :!dir                 :!ls                - listt s Verzaichniss auf.
+      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
+
+  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dönn besagtn Nam.
+
+  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
+     Dautticht mit seln Nam.
+
+  4. :r DAUTTICHTNAM  ladt sele Dautticht  und füegt s  unterhalb n Mörklbefand
+     ein.
+
+  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und füegt s  unterhalb n
+     Mörklbefand ein.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 6.1: ZEIL ÖFFNEN (»open«)
+
+
+        ** Zipf o, um ayn Zeil unterhalb n Mörkl z öffnen und eyn d **
+                        ** Einfüegartweis z kemmen. **
+
+  1. Bewög önn Mörkl zo dyr eerstn mit ---> angmörktn Zeil unt.
+
+  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n Mörkl z öffnen  und mit dyr Ein-
+     füegartweis weiterztuen.
+
+  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d Einfüegartweis z ver-
+     laassn.
+---> Mit  o  werd dyr Mörkl auf de offene Zeil in dyr Einfüegartweis gsötzt.
+
+  4. Um ayn Zeil OBERHALB n Mörkl aufzmachen,  gib ainfach aynn groosss O statt
+     yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
+
+---> Öffnet ayn Zeil über derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
+     ist.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.2: GWORT ANFÜEGN (»append«)
+
+
+                ** Zipf  a  , um öbbs NAACH n Mörkl einzfüegn. **
+
+  1. Bewög önn Mörkl gan n Anfang von dyr eerstn Üebungszeil mit ---> unt.
+
+  2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
+
+  3. Zipf ayn klains  a  , um öbbs NAACH n Mörkl anzfüegn.
+
+  4. Vergöntz dös Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
+     weis z verlaassn.
+
+  5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
+     4.
+
+---> Dö Ze biett ayn Glögn , ayn Gwort in ayner Zeil anzfü.
+---> Dö Zeil biett ayn Glögnet, ayn Gwort in ayner Zeil anzfüegn.
+
+Anmörkung:   a  ,  i  und  A  bringend ainn gleichermaaßn eyn d Einfüegartweis;
+             dyr ainzige Unterschaid ist, WO mit n Einfüegn angfangt werd.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÖTZN (»replace«)
+
+
+ ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen, mit ---> angmörktn Zeil.
+     Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
+
+  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
+     yso däß de sel s xxx ersötzt.
+
+  3. Druck <ESC> ,  um d Ersötzungsartweis  z verlaassn.  Du gspannst,  däß dyr
+     Rest von dyr Zeil unveröndert bleibt.
+
+  4. Äfert die Schritt, um dös überblibne xxx z ersötzn.
+
+---> S Zunddn von 123 zo xxx ergibt xxx.
+---> S Zunddn von 123 zo 456 ergibt 579.
+
+Anmörkung: D Ersötzungsartweis ist wie d Einfüegartweis,  aber ayn ieds eindem-
+           mlte Zaichen löscht ayn vorhanddns.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.4: GWORT AAMEN UND EINFÜEGN
+
+ ** Benutz önn Pfemerer  y  , um öbbs z aamen, und  p  , um öbbs einzfüegn. **
+
+  1. Gee zo dyr mit  --->  angmörktn Zeil unt  und sötz önn Mörkl  hinter "a)".
+
+  2. Ginn d Sichtisch-Artweis mit   v   und bewög önn Mörkl gnaun vor "eerste".
+  
+  3. Zipf  y  , um dönn vürherghöbtn Tail z aamen.
+
+  4. Bewög önn Mörkl gan n End von dyr naehstn Zeil:  j$
+
+  5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
+
+  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
+     wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
+     p  an.
+
+--->  a) dös ist dyr eerste Eintrag.
+      b)
+
+Anmörkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 6.5: SCHALTTER SÖTZN
+
+** Sötz aynn Schaltter yso,  däß ayn Suech older Ersötzung Grooß- und Klain- **
+                            ** schreibung übergeet. **
+                            
+  1. Suech um 'übergee", indem däßst   /übergee   eingibst.
+     Widerhol d Suech ayn Öttlych Maal, indem däßst de Tastn  n  druckst.
+
+  2. Sötz de Zwisl - önn Schaltter - 'ic' (»ignore case«), indem däßst  :set ic
+     eingibst.
+  3. Ietz suech wider um 'übergee' und tue aau wider mit  n  weiter.  Daa fallt
+     dyr auf, däß ietz öbbenn aau  Übergee  und  ÜBERGEE  hergeet.
+
+  4. Sötz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
+
+  5. Widerhol d Suech und bobacht, was ietz gschieght:   /übergee <EIN>
+
+  6. Däßst grooß und klain wider gwon unterscheidst, zipf:   :set noic
+
+Anmörkung:  Mechst de Tröffer niemer vürherghöbt seghn,  gib ein:   :nohlsearch
+Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \c
+            in n Suechausdruk:   /übergee\c <EIN>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 6
+
+  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n Mörkl z öffnen und d Einfüegartweis z
+                 ginnen.
+     Zipf  O  ,  um ayn Zeil OBERHALB n Mörkl z öffnen.
+
+  2. Zipf  a  ,  um NAACH n Mörkl ayn Gwort einzfüegn.
+     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfüegn.
+
+  3. D Faudung  e  bringt di gan n End von aynn Wort.
+
+  4. Dyr Pfemerer  y  (»yank«) aamt öbbs,  p  (»put«) füegt dös ein.
+
+  5. Ayn groosss  R  geet eyn d Ersötzungsartweis,  hinst däß myn <ESC> druckt.
+
+  6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Öttlych Zwisln seind:
+     'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
+     'is' 'incsearch'    Zaig aau schoon ayn Tailüberainstimmung
+     'hls' 'hlsearch'    Höb allsand pässetn Ausdrück vürher
+     Dyr Schaltternam kan in dyr Kurz- older Langform angöbn werdn.
+
+  7. Stöll yn ayner Zwisl "no" voran, däßst ys abschalttst:   :set noic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
+
+
+            ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung" **
+
+  Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
+  pröblt ainfach ains von dene dreu aus:
+    - Druck d <HILF>-Tastn, wennst öbbenn aine haast.
+    - Druck de Tastn <F1>, fallsst ys haast.
+    - Zipf   :help <EIN>
+
+  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dös mit dyr Hilf geet.
+  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
+  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
+
+  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
+  :help   aynn Auerwerd naachstöllst und istig <EIN> nit vergisst.  Pröblt dös:
+
+     :help w
+     :help c_CTRL-D
+     :help insert-index
+     :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
+
+
+            ** Mutz önn Wimm mit de einbautn Faehigkeitn auf **
+
+  Dyr Wimm besitzt ayn Wösn Schäftungen,  wo über n Urwimm aushingeend, aber de
+  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
+  ausherholst, erstöllst ayn "vimrc"-Dautticht.
+
+  1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
+     :e ~/.vimrc     für s Ainsl
+     :e $VIM/_vimrc  bei n Fenstl
+
+  2. Ietz lis önn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
+     :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Speichert de Dautticht mit:
+     :w
+
+  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung  zuegschaltt.
+     Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
+     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              Letzn 7.3: VERGÖNTZN
+
+
+               ** Befelhszeilnvergöntzung mit <STRG>d und <TAB> **
+
+  1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
+
+  2. Schaug naach, wölcherne Dauttichtn däß s in n Verzaichniss geit:   :!ls
+     older   :!dir
+  3. Zipf önn Anfang von ayner Faudung:   :e
+
+  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
+     angeend.
+  5. Druck  <TAB>  ,  und dyr Wimm vervollstöndigt  önn Faudungsnam zo ":edit".
+
+  6. Füeg  ayn Laerzaichen  und önn Anfang  von ayner  besteehetn Dautticht an:
+     :edit DAU
+
+  7. Druck <TAB>.  Dyr Wimm vergöntzt önn Nam,  dös haisst,  wenn yr aindeuttig
+     ist.
+Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
+           <STRG>d  und  <TAB>.  Bsunders nützlich ist dös bei   :help  .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 7
+
+
+  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z öffnen.
+
+  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
+
+  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
+
+  4. Zipf  :q  , um s Hilffenster z schliessn.
+
+  5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
+
+  6. Druck <STRG>d, aft däßst naach  :  mit ayner Faudung angfangt haast,  dyr-
+     mitst mügliche Vergöntzungen anzaigt kriegst.
+     Druck <TAB> für ain Vervollstöndigung yllain.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
+  und bündignen Überblik über s Blat  WIMM z lifern,  netty vil gnueg,  däß myn
+  für s Eerste  wirklich öbbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
+  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
+  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
+
+  Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
+    Vim - Vi Improved - von n OUALLINE Steve
+    Verlaag: New Riders
+  Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
+  Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
+  See http://iccf-holland.org/click5.html
+
+  Dös folgete Buech  ist schoon ölter und meerer  über n Urwimm  als wie über n
+  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
+  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
+  3897211262
+  In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
+  De söxte Ausgaab enthaltt aau schoon öbbs über n Wimm.
+  Als ietzunde Bezugniss  für d Fassung  6.2  und ayn pfrenge Einfüerung  dient
+  dös folgete Buech:
+    vim ge-packt  von n WOBST Reinhard
+    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
+  Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
+  spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
+  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
+
+  Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
+  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
+  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
+  zuer Verfüegung gstöllt haat. Gundpost: bware@mines.colorado.edu.
+  Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
+  De bairische Übersötzung stammt von n HELL Sepp 2009. Sein Gundpostbrächt ist
+  sturmibund@t-online.de 
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  
+
+ 
+
+
+
diff --git a/runtime/tutor/tutor.bj.utf-8 b/runtime/tutor/tutor.bj.utf-8
new file mode 100644
index 0000000..80c3ade
--- /dev/null
+++ b/runtime/tutor/tutor.bj.utf-8
@@ -0,0 +1,987 @@
+===============================================================================
+=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
+===============================================================================
+
+   Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
+   vil,  däß myn s allsand  in aynn Schainer  wie dönn daader  unterbräng.  Der
+   Schainer ist yso aufbaut,  däß yr halt netty die Befelh allsand bringt, wost
+   brauchst, däßst mit iem für s Eerste wirklich öbbs anfangen kanst.
+   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dös haisst,
+   wennst di nit grooß mit n Pröbln und Tüftln aufhaltst.
+
+   OBACHT:
+   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort öndern.  Dösswögn
+   machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
+   dös Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
+   ayn Aamum.
+   Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Üebn
+   ghoert.  Also muesst schoon aau die Befelh ausfüern,  wennst ys gscheid ler-
+   nen willst. Mit n Lösn yllain ist s +nit taan!
+
+   Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
+   glei aynmaal mit dyr j-Tastn abwärts (yso laaufft dös nömlich),  hinst däßst
+   de gantze Letzn 1.1 auf n Bildschirm haast.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
+
+**  Dyrmitst mit n Mörkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
+            ^            Ayn Öslsbrugg:
+            k            De Tastn  h  ist winster und +geet aau gan winster.
+   < h             l >   S  l  leit zesm und richtt si gan zesm.
+            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
+            v            Mit n  k  kimmst gan n KOPF.            
+  1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
+     di sicher füelst.
+  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+     kimmst gan dyr naehstn Letzn.
+     
+  3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
+
+Non öbbs: Allweil, wenn dyr niemer ganz wol ist, wasst öbbenn druckt haast, aft
+          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
+
+      
+          Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
+          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hörtn" seind ganz dyr-
+          für, däß myn bei +dene bleibt. Pröblt s ainfach aus!
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 1.2: ÖNN WIMM AUSSCHALTTN
+
+
+  ALSO, EE WENNST ÖBBS VON DAA UNT AUSFÜERST,  LIS LIEBER ZEERST DE GANTZE LET-
+  ZN!
+
+  1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
+  
+  2. Demmlt  :q! <EIN>.
+     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst öbbenn  göndert
+     haast.
+
+  3. Balst önn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
+     gen haat, also    vimtutor bj <EIN>.
+
+  4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
+     wasst ys Blat verlaasst und aft wider einhinkimmst.
+
+Anmörkung: Mit  :q! <EIN> verwirffst allss, wasst göndert older enther gschribn
+           haast. In aynn Öttlych Letznen lernst acht, wiest dös allss in ayner
+           Dautticht speichertst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.3: GWORT BARECHTN - LÖSCHN 
+
+         
+         ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
+
+  1. Bewög di mit n Mörkl auf de mit  ---> angmörkte Zeil unt.
+
+  2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
+     glöscht ghoert.
+
+  3. Druck de Tastn  x  , däßst dös überflüssige Zaichen löschst.
+
+  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst däß dyr Saz stimmt.
+
+---> De Kkuue sprangg übber nn Maanad.
+
+  5. Wenn ietz de Zeil verbössert ist, geest gan dyr Letzn 1.4. weiter.
+
+Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit öbbenn,
+                   allss auswendig z lernen;  nän, lern ainfach mit n Anwenddn!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.4: GWORT BARECHTN - EINFÜEGN
+
+
+                  **  Druck  i  , dyrmitst öbbs einfüegst. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
+
+  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög önn Mörkl  auf dös
+     eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
+
+  3. Druck  i  und gib dös ein, was abgeet.
+
+  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
+     gan dyr Befelhsartweis zrugg.
+     So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
+
+---> Daader gt dd öbbs b.
+---> Daader geet diend öbbs ab.
+
+  5. Balst mainst,  däßst ys Gwort-Einfüegn kanst, aft geest gan dyr Letzn 1.5.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.5: GWORT BARECHTN - ANFÜEGN
+
+
+                      ** Druck  A  gan n Gwort Anfüegn. **
+
+  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
+     Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
+
+  2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
+
+  3. Wennst  mit n Anfüegn förtig bist,  aft druckst <ESC>,  däßst wider eyn de
+     Befelhsartweis zruggkimmst.
+
+  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmörktn Zeil;  und
+     daadl machst ys netty yso.
+
+---> In derer Zeil gee  
+     In derer Zeil geet ayn Weeng ayn Gwort ab.
+---> Aau daader stee
+     Aau daader steet öbbs Unvollstöndigs. 
+
+  5. Wennst s Anfüegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.6: AYN DAUTTICHT BARECHTN
+
+
+     ** Mit  :wq  speichertst ayn Dautticht und verlaasst önn Wimm ganz. **
+
+  !! OBACHT:  Ee wennst mit dönn alln daa unt weitertuest, lis zeerst de gantze
+     Letzn durch!!
+
+  1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
+
+  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
+     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
+     haast also ayn Dautticht, dö wost barechtn kanst.
+
+  3. Ietz  füegst öbbs ein older löschst öbbs,  wiest ys in de vorignen Letznen
+     glernt haast.
+
+  4. Speichert de gönderte Dautticht und verlaaß önn Wimm mit  :wq  <EIN>  .
+
+  5. Schmeiß önn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
+
+  6. Aft däßst  de obignen Schritt glösn und käppt haast,  kanst ys durchfüern.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 1
+
+
+  1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
+              h (winst)     j (ab)        k (auf)       l (zes)
+
+  2. Um önn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
+
+  3. Willst önn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
+                <ESC>  :q!  <EIN> .
+     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
+
+  4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
+
+  5. Willst öbbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
+     Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
+     Und ainfach naach n Mörkl füegst ys mit  a  ein  .
+
+Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
+            Faudung ab, dö wo dyr schiefgangen ist.
+
+     Ietz tue mit dyr Letzn 2 weiter.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 2.1.: LÖSHFAUDUNGEN
+
+
+                 ** Demmlt  dw  , dyrmitst ayn Wort löschst **
+
+  1. Druck  <ESC>, dyrmit s aau gwiß ist, däßst in dyr Befelhsartweis bist.
+
+  2. Bewög önn Mörkl zo dyr mit ---> angmörktn Zeil unt.
+
+  3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
+
+  4. Zipf  dw  , däßst dös gantze Wort löschst.
+
+  Nöbnbei:  Dyr Buechstabn  d  erscheint auf dyr lösstn Zeil  von n Bildschirm,
+            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, däß öbbs kimmt, al-
+            so  daader ayn  w  .  Seghst  freilich  öbbs Anderts  wie ayn  d  ,
+            naacherd haast  öbbs Falschs  demmlt.  Druck aft  <ESC>  und pröblt
+            s non aynmaal.
+---> Ayn Öttlych Wörter lustig ghoernd nit Fisper eyn dönn Saz einhin.
+
+  5. Äfert  d Schritt  3 und 4,  hinst däß  dyr Saz pässt,  und gee aft gan dyr
+     Letzn 2.2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 2.2.: NON MEERER LÖSHFAUDUNGEN
+
+
+            ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
+
+  1. Druck <ESC> , dyrmitst aau gwiß in dyr Befelhsartweis bist.
+
+  2. Bewög önn Mörkl hinst eyn de mit ---> angmörkte Zeil untn.
+
+  3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
+
+  4. Zipf  d$  , däßst hinst eyn s End von dyr Zeil löschst.
+  
+---> Öbber haat s End von dyr Zeil doplt eingöbn. doplt eingöbn.
+
+
+  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 2.3: PFEMERER UND WOLENDER
+
+
+  Vil Faudungen,   wo s Gwort öndernd, sötznd si aus aynn Pfemerer und aynn Wo-
+  lend zamm. Bal i also öbbs löschn will, schreib i ainsting  d  und aft s "Wo-
+  lend", dös haisst also, "wolend", "wohin" däß i will - older was i halt gnaun
+  löschn will.
+
+
+
+
+
+
+  Daader also, was i wie löschn kan:
+    w - hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
+    e - gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
+    $ - zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
+
+  Also löscht de Tastnfolg  de  umbb n Mörkl hinst eyn s Wortend.
+Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
+             entspröchet weiter.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Letzn 2.4: MIT AYNN ZÖLER D WOLENDER ÄFERN
+
+
+      ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel halt widerholt. **
+
+  1. Bewög önn Mörkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
+
+  2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
+
+  3. Zipf  3e  , däßst mit n Mörkl auf s End von n drittn Wort kimmst.
+
+  4. Zipf  0  (aynn Nuller), däßst eyn n Anfang von dyr Zeil hinkimmst.
+
+  5. Widerhol d Schritt 2 und 3 mit verschaidne Zöler.
+
+  ---> Dös ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
+
+  6. Gee weiter gan dyr Letzn 2.5.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
+
+
+              ** Ayn Zal vor aynn Pfemerer äfert dönn um seln Werd. **
+
+  Also, i mecht löschn,  und zwaar öbbs Bestimmts,  und dös so und so oft:  Daa
+  dyrzue benutz i aynn Zöler:
+                              d  Zöler  Wolend (also önn Bewögungsschrit)
+
+  1. Bewög önn Mörkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
+     gmörktn Zeil.
+
+  2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
+
+  3. Äfert  d Schritt 1 und 2  mit dönn entspröchetn Zöler,  dyrmitst de drauf-
+     folgetn  ganz großgschribnen Wörter  mit ayner ainzignen Faudung  löschst:
+
+
+--->  Dö ABC DE Zeil FGHI JK LMN OP mit Wörter ist Q RS TUV ietz berichtigt.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 2.6: ARECHTN AUF ZEILN
+
+
+               ** Zipf  dd  , um ayn gantze Zeil z löschn. **
+
+  Weil s gro oft vürkimmt,  däß myn gantze Zeiln löscht,  kaamend schoon d Ent-
+  wickler von n Urwimm daa drauf,  däß myn ainfach  dd  gan dönn Zwök schreibt.
+
+
+  1. Bewög önn Mörkl gan dyr zwaittn Zeil in n untignen "Gedicht".
+  2. Zipf  dd  ,  um dö Zeil z löschn.
+  3. Ietz bewögst di gan dyr viertn Zeil.
+  4. Zipf  2dd  , um zwo Zeiln zo n Löschn.
+
+--->  1)  Roosn seind root;
+--->  2)  Drunter ist s Koot.
+--->  3)  Veigerln seind blau.
+--->  4)  Umgrabn tuet s d Sau.
+--->  5)  D Ur sait de Zeit,
+--->  6)  Sait, däß s mi freut,
+--->  7)  Dirndl, dein Gschau.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Letzn 2.7: RUGGGÖNGIG MACHEN (RUGGLN) 
+
+
+             ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
+              ** older  U  , um ayn gantze Zeil widerherzstölln. **
+
+  1. Bewög önn Mörkl  gan dyr mit ---> angmörktn Zeil unt  und gee dyrmit auf n
+     eerstn Faeler.
+  2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
+  3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
+  4. Ietz behöb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
+  5. Aft gibst ayn  U  (grooß) ein,  däßst de Zeil wider yso hinbringst,  wie s
+     gwösn ist.
+  6. So,  und ietz  demmltst  so oft  u  , hinst däßst s  U  und de andern Fau-
+     dungen rugggöngig gmacht haast.
+  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst däßst  allsand Be-
+     felh widerhergstöllt, z haissn allsse rugg-grugglt haast  (also d Rugggön-
+     gigmachungen rugggöngig gmacht).
+---> Beerichtig d Faeller voon dehrer Zeiil  und sttöll s mitt n Ruggruggln wi-
+     der her.
+  8. Die Faudungen seind gro wichtig; sö helffend ainn närrisch weiter.
+     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 2
+
+
+  1. Um von n Mörkl aus hinst eyn s naehste Wort zo n Löschn, zipf:  dw
+  2. Um umbb n Mörkl hinst eyn s End von dyr Zeil zo n Löschn, demmlt  d$
+  3. Dyrmitst ayn gantze Zeil löschst, gib ein:  dd
+  4. Mechst ayn Bewögung, ayn "Wolend", öfters,  stöll de entspröchete Zal dyr-
+     vor:  3dw  older aau:  d3w
+  5. Dyr Pfueg für ayn Önderungsfaudung lautt yso:
+               Pfemerer   [Zal]   Bewögungsschrit (Wolend)
+     Und dös haisst:
+      Dyr PFEMERER gibt an, WAS taan ghoert, öbbenn   d   =  löschn (»delete«).
+      [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend öfter habn will.
+      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  öbbenn
+      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+
+  6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
+
+  7. Um öbbs Vorigs wider z ruggln, gib ein:                u (klain also)
+     Um allsand Önderungen in ayner Zeil z ruggln, haast:   U (also grooß)
+     Um "rugg-z-ruggln", also allss wider herzstölln, zipf: <STRG>r   
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 3.1: ANFÜEGN (»put«) 
+
+
+     ** Zipf  p  , dyrmitst öbbs gnetty Glöschts naach n Mörkl anfüegst. **
+
+  1. Bewög önn Mörkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
+
+  2. Zipf  dd  , um sele Zeil z löschn  und dyrmit  in aynn Wimm-"Roster"  zo n
+     speichern.
+
+  3. Bewög önn Mörkl gan dyr Zeil c),  ÜBER derer, daa wo de glöschte Zeil ein-
+     hinkemmen sollt.
+
+  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dö Zeil unter derer
+     mit n Mörkl drinn.
+  5. Äfert  d Schritt 2 hinst 4,  hinst däßst  allsand Zeiln  yso naachynaynand
+     haast, wie s hinghoernd.
+
+---> d) Kanst du dös aau?
+---> b) Veigerln seind blau.
+---> c) Bedachtn kan myn lernen.
+---> a) Roosn seind root.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Letzn 3.2: ERSÖTZN (»replace«)
+
+
+      ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
+
+  2. Bewög önn Mörkl, hinst däß yr auf n eerstn Faeler steet.
+
+  3. Zipf  r  und drafter dös Zaichen, wo dyrfür daa hinghoert.
+
+  4. Widerhol d Schritt 2 und 3,  hinst däßst de eerste Zeil  gmaeß dyr zwaittn
+     berichtigt haast:
+--->  Wie dö Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
+--->  Wie dö Zeil eingöbn wurd, wurdnd ainige falsche Tastnen zipft!
+
+  5. Ietz tue mit dyr Letzn 3.3 weiter.
+
+Anmörkung: Vergiß nit drauf, däßst mit n Anwenddn lernen solltst und nit öbbenn
+           mit n Auswendiglernen!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 3.3: ÖNDERN (»change«)
+
+
+              ** Um hinst eyn s Wortend z öndern, zipf  ce  . **
+
+  1. Gee mit n Mörkl auf de eerste mit ---> angmörkte Zeil.
+
+  2. Ietz farst netty auf s  "s"  von Wstwr hin.
+
+  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  örter  .
+
+  4. Druck <ESC> und bewög önn Mörkl gan n naehstn Zaichen,  wo göndert ghoert.
+
+  5. Äfert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
+
+---> Ainige Wstwr von derer Zlww ghhnnd mit n Öndern-Pfemerer gaauu.
+---> Ainige Wörter von derer Zeil ghoernd mit n Öndern-Pfemerer göndert.
+
+ce  löscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  Letzn 3.4.: NON MEERER ÖNDERUNGEN PFELFS  c
+
+
+   ** D Löshfaudung  c  arechtt mit de nömlichnen Wolender wie dö mit  d  **
+
+  1. Dyr Önder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
+     yso:
+         c    [Zal]   Bewögungsschritt (Wolend)
+
+  2. D Wolender  seind  de gleichn,  öbbenn  w  für Wort und  $ für s Zeilnend.
+
+
+  3. Bewög di zo dyr eerstn untignen Zeil mit ---> .
+
+  4. Ietz geest auf dönn eerstn Faeler.
+
+  5. Zipf  c$  , gib önn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
+     <ESC>.
+---> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
+---> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
+
+Denk allweil dran,  däßst iederzeit  mit dyr Ruggtastn Faeler ausbössern kanst.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 3
+
+
+  1. Um ayn  vorher glöschts Gwort  anzfüegn,  zipf  p  .  Daa dyrmit  werd dös
+     gantze Gwort  NAACH n Mörkl  angfüegt.  Wenn s ayn gantze Zeil  gwösn ist,
+     werd dö sel als de Zeil unterhalb n Mörkl eingfüegt.
+
+  2. Um dös Zaichen  unter n Mörkl,  also wo dyr Mörkl ist,  z ersötzn, zipf  r
+     und aft dös Zaichen, wost daadl habn willst.
+
+  3. Dyr Önderungspfemerer ( c = »change«) laasst ainn umbb n Mörkl hinst eyn s
+     End von n Wolend öndern. Zipf  ce  , dyrmitst umbb n Mörkl hinst eyn s End
+     von n Wort öndertst, und  c$  hinst eyn s End von dyr Zeil.
+
+  4. Für d Önderung lautt dyr Pfueg:
+
+     c   [Zal]   Wolend
+
+Ietz tue mit dyr naehstn Letzn weiter.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.1: MÖRKLSTÖLLUNG UND DAUTTICHTDARSTAND
+
+** Demmlt <STRG>g, däßst önn Befand und Darstand von dyr Dautticht anzaigst. **
+  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
+
+Anmörkung: Lis dö gantze Letzn daader durch, ee wennst iewign öbbs unternimmst!
+
+  1. Druck  <STRG>g  .  Auf dös hin erscheint auf derer Seitt ganz unt ayn Dar-
+     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
+     Mörk dyr de Zeilnnummer für n Schrit 3.
+
+Anmörkung:  Müglicherweis  seghst aau önn Mörklbefand  in n zesmen untern Bild-
+            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt; schau dyrzue mit
+            n Befelh   :help 'ruler'   naach.
+  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
+     gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
+
+  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
+     Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
+     Maal <STRG>g gadruckst.
+
+  4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
+               
+
+  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
+
+  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
+     Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
+
+  2. Ietz zipf 'Faeeler' <EIN>. Netty um dös 'Faeeler' willst ietz suechen.
+
+  3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie »next«).
+     Willst hinzrugg suechen, aft gibst  N  ein.
+
+  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
+
+  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und dös
+     öfter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwärts.
+
+--->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
+
+Anmörkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
+            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wär auf aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.3: DE GÖGNKLAMMERN FINDDN
+
+
+   ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
+
+  1. Sötz önn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
+     in dyr untignen Zeil, wo mit ---> angmörkt ist.
+
+  2. Ietzet zipf s Zaichen  %  .
+
+  3. Dyr Mörkl geet ietz auf de pässete schliessete Klammer.
+
+  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr öffneretn Klammer zrugg.
+
+  5. Sötz önn Mörkl auf ayn anderne Klammer von   ({[]})   und pröblt   %  aus.
+
+---> Dös ( ist  blooß ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
+
+Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
+            Spaichgwort verzweiflt ayn faelete Gögnklammer suechst!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.4: D ERSÖTZUNGSFAUDUNG (»substitute«)
+
+
+        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
+
+  1. Gee mit n Mörkl zo dyr unt steehetn mit ---> angmörktn Zeil.
+
+  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
+     wo vürkimmt.
+
+  3. Ietz pröblt s mit  :s/dee/de/g  . Dös zuesötzliche  g  ("Pflok"  nennt myn
+     öbbs Sölchers) bewirkt, däß allss, was dyrmit kennzaichnet ist,  innerhalb
+     von dyr ainn Zeil ersötzt werd.
+
+---> Dee schoenste Zeit, däß myn dee Blüemln anschaut, ist dee schoene Lan-
+     gesszeit.
+  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Öndern,  zipf
+     :#,#s/alt/neu/g  ,  wobei # ieweils für de eerste und lösste Zeil von dönn
+     Pfraich steet.
+     :%s/alt/neu/g  zipfst, däßst d Vürkemmen in dyr gantzn Dautticht öndertst.
+        Mit  :%s/alt/neu/gc  finddst allsand Vürkemmen in dyr gsamtn Dautticht;
+     daa werst aber zeerst non gfraagt, obst ys ersötzn willst older nity.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 4
+                        
+  1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und önn Darstand dyrvon an.
+           G  bringt di an s End von dyr Dautticht.
+     <Zal> G  bringt di gan dyr entspröchetn Zeilnnummer.
+          gg  bringt di zo dyr eerstn Zeil.
+          
+  2. D Eingaab von  /  mit aynn Ausdruk suecht VÜRSHLING um dönn Ausdruk.
+     Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn ÄRSHLING.
+     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
+     gsuecht. Mit  N geet s umkeerter weiter.
+     <STRG>o bringt di zo ölterne Befändd zrugg, <STRG>i zo neuerne.
+
+  3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
+     )]}  , bringt di zo dyr Gögnklammer.
+
+  4. Um dös eerste Vürkemmen  von "alt"  in ayner Zeil  durch "neu"  z ersötzn,
+     zipf   :s/alt/neu   .
+     Um allsand in ayner Zeil z ersötzn, zipf   :s/alt/neu/g   .
+     Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
+     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:   :%s/alt/neu/g   .
+     Willst ayn ieds Maal bstaetln, höng 'c' wie »confirm« hint anhin.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÜERN 
+            
+
+  ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach   :!   ein. **
+ 
+  1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
+     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
+
+  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de Müglich-
+     keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
+
+  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
+     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
+     aus iewign aynn Grund nit, aft pröblt s mit  :!dir <EIN>  .
+
+Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
+                  gfüert werdn, aau mit Auerwerdd.
+
+Und wolgmörkt:    Allsand Befelh, wo mit  :  angeend,  müessend mit <EIN> bstö-
+                  tigt werdn. Dös dyrsagn myr vürbaß niemer.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+           Letzn 5.2: NON MEERER DRÜBER, WIE MYN DAUTTICHTN SCHREIBT
+
+
+      ** Um öbbs Gönderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
+
+  1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
+     niss ausherlaasst.  Däßst dyrnaach <EIN> eingöbn muesst, waisst ee schoon.
+
+  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, öbbenn POCH.
+
+  3. Ietz demmlt:  :w POCH   (also mit POCH als dönn neuen Dauttichtnam).
+
+  4. Dös speichert ietz de gantze Dautticht, also önn Wimmschainer,  unter dönn
+     Nam POCH. Dös kanst leicht überprüeffen, indem däßst ainfach  :!ls   older
+     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
+
+Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH  ,
+            naacherd wär dö Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
+            wiest n gspeichert haast.
+
+  5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
+     beziehungsweis bei aynn Ainslgebäu mit   :!rm POCH   .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
+
+** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
+
+  1. Ruck önn Mörkl auf netty dö Zeil daader.
+
+  2. Demmlt  v  und gee mit n Mörkl  auf dönn fümftn Auflistungspunt untet.  Du
+     seghst glei, däß s Gwort vürherghöbt erscheint.
+
+  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
+
+  4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
+     däßst dös  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
+
+  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
+     :!dir  older  :!ls  ,  däßst dös überprüeffst. Lösh s fein nit öbbenn! Mir
+     brauchend s nömlich für de naehste Letzn.
+
+Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
+            aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
+            Pfemerer  mit dönn Gwort  öbbs machen.  Zo n Beispil löscht  d  dös
+            Gwort.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+               Letzn 5.4: EINLÖSN UND ZAMMENFÜERN VON DAUTTICHTN   
+
+
+    ** Um önn Inhalt von ayner Dautticht einzlösn, zipf  :r DAUTTICHTNAM  **
+
+  1. Sötz önn Mörkl über dö Zeil daader.
+
+OBACHT:  Aft däßst önn Schrit 2  ausgfüert haast,  seghst auf aynmaal  öbbs aus
+         dyr Letzn 5.3.  Bewög di naacherd wider abwärts, dyrmitst dö Letzn wi-
+         derfinddst.
+  2. Ietz  lis  dein Dautticht  POCH ein,  indem däßst d Faudung   :r POCH aus-
+     füerst,  wobei wie gsait POCH  für dönn  von dir  ausgsuechtn Dauttichtnam
+     steet. De einglösne Dautticht werd unterhalb dyr Mörklzeil eingfüegt.
+
+  3. Um zo n Überprüeffen,  ob de Dautticht  aau gwiß einglösn ist,  gee zrugg;
+     und du seghst,  däß s ietz zwo Ausförtigungen  von dyr Letzn 5.3. geit,  s
+     Urniss und de eingfüegte Dauttichtfassung.
+
+Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei-
+            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und füegt s
+            unterhalb n Mörkl ein.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 5
+
+
+  1. :!FAUDUNG füert aynn ausserignen Befelh aus.
+
+      Daader ayn Öttlych gwänddte Beispiler:
+      (Fenstl)              (Ainsl - Leinsl)
+      :!dir                 :!ls                - listt s Verzaichniss auf.
+      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
+
+  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dönn besagtn Nam.
+
+  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
+     Dautticht mit seln Nam.
+
+  4. :r DAUTTICHTNAM  ladt sele Dautticht  und füegt s  unterhalb n Mörklbefand
+     ein.
+
+  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und füegt s  unterhalb n
+     Mörklbefand ein.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 6.1: ZEIL ÖFFNEN (»open«)
+
+
+        ** Zipf o, um ayn Zeil unterhalb n Mörkl z öffnen und eyn d **
+                        ** Einfüegartweis z kemmen. **
+
+  1. Bewög önn Mörkl zo dyr eerstn mit ---> angmörktn Zeil unt.
+
+  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n Mörkl z öffnen  und mit dyr Ein-
+     füegartweis weiterztuen.
+
+  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d Einfüegartweis z ver-
+     laassn.
+---> Mit  o  werd dyr Mörkl auf de offene Zeil in dyr Einfüegartweis gsötzt.
+
+  4. Um ayn Zeil OBERHALB n Mörkl aufzmachen,  gib ainfach aynn groosss O statt
+     yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
+
+---> Öffnet ayn Zeil über derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
+     ist.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.2: GWORT ANFÜEGN (»append«)
+
+
+                ** Zipf  a  , um öbbs NAACH n Mörkl einzfüegn. **
+
+  1. Bewög önn Mörkl gan n Anfang von dyr eerstn Üebungszeil mit ---> unt.
+
+  2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
+
+  3. Zipf ayn klains  a  , um öbbs NAACH n Mörkl anzfüegn.
+
+  4. Vergöntz dös Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
+     weis z verlaassn.
+
+  5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
+     4.
+
+---> Dö Ze biett ayn Glögn , ayn Gwort in ayner Zeil anzfü.
+---> Dö Zeil biett ayn Glögnet, ayn Gwort in ayner Zeil anzfüegn.
+
+Anmörkung:   a  ,  i  und  A  bringend ainn gleichermaaßn eyn d Einfüegartweis;
+             dyr ainzige Unterschaid ist, WO mit n Einfüegn angfangt werd.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÖTZN (»replace«)
+
+
+ ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen, mit ---> angmörktn Zeil.
+     Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
+
+  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
+     yso däß de sel s xxx ersötzt.
+
+  3. Druck <ESC> ,  um d Ersötzungsartweis  z verlaassn.  Du gspannst,  däß dyr
+     Rest von dyr Zeil unveröndert bleibt.
+
+  4. Äfert die Schritt, um dös überblibne xxx z ersötzn.
+
+---> S Zunddn von 123 zo xxx ergibt xxx.
+---> S Zunddn von 123 zo 456 ergibt 579.
+
+Anmörkung: D Ersötzungsartweis ist wie d Einfüegartweis,  aber ayn ieds eindem-
+           mlte Zaichen löscht ayn vorhanddns.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.4: GWORT AAMEN UND EINFÜEGN
+
+ ** Benutz önn Pfemerer  y  , um öbbs z aamen, und  p  , um öbbs einzfüegn. **
+
+  1. Gee zo dyr mit  --->  angmörktn Zeil unt  und sötz önn Mörkl  hinter "a)".
+
+  2. Ginn d Sichtisch-Artweis mit   v   und bewög önn Mörkl gnaun vor "eerste".
+  
+  3. Zipf  y  , um dönn vürherghöbtn Tail z aamen.
+
+  4. Bewög önn Mörkl gan n End von dyr naehstn Zeil:  j$
+
+  5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
+
+  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
+     wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
+     p  an.
+
+--->  a) dös ist dyr eerste Eintrag.
+      b)
+
+Anmörkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 6.5: SCHALTTER SÖTZN
+
+** Sötz aynn Schaltter yso,  däß ayn Suech older Ersötzung Grooß- und Klain- **
+                            ** schreibung übergeet. **
+                            
+  1. Suech um 'übergee", indem däßst   /übergee   eingibst.
+     Widerhol d Suech ayn Öttlych Maal, indem däßst de Tastn  n  druckst.
+
+  2. Sötz de Zwisl - önn Schaltter - 'ic' (»ignore case«), indem däßst  :set ic
+     eingibst.
+  3. Ietz suech wider um 'übergee' und tue aau wider mit  n  weiter.  Daa fallt
+     dyr auf, däß ietz öbbenn aau  Übergee  und  ÜBERGEE  hergeet.
+
+  4. Sötz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
+
+  5. Widerhol d Suech und bobacht, was ietz gschieght:   /übergee <EIN>
+
+  6. Däßst grooß und klain wider gwon unterscheidst, zipf:   :set noic
+
+Anmörkung:  Mechst de Tröffer niemer vürherghöbt seghn,  gib ein:   :nohlsearch
+Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \c
+            in n Suechausdruk:   /übergee\c <EIN>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 6
+
+  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n Mörkl z öffnen und d Einfüegartweis z
+                 ginnen.
+     Zipf  O  ,  um ayn Zeil OBERHALB n Mörkl z öffnen.
+
+  2. Zipf  a  ,  um NAACH n Mörkl ayn Gwort einzfüegn.
+     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfüegn.
+
+  3. D Faudung  e  bringt di gan n End von aynn Wort.
+
+  4. Dyr Pfemerer  y  (»yank«) aamt öbbs,  p  (»put«) füegt dös ein.
+
+  5. Ayn groosss  R  geet eyn d Ersötzungsartweis,  hinst däß myn <ESC> druckt.
+
+  6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Öttlych Zwisln seind:
+     'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
+     'is' 'incsearch'    Zaig aau schoon ayn Tailüberainstimmung
+     'hls' 'hlsearch'    Höb allsand pässetn Ausdrück vürher
+     Dyr Schaltternam kan in dyr Kurz- older Langform angöbn werdn.
+
+  7. Stöll yn ayner Zwisl "no" voran, däßst ys abschalttst:   :set noic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
+
+
+            ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung" **
+
+  Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
+  pröblt ainfach ains von dene dreu aus:
+    - Druck d <HILF>-Tastn, wennst öbbenn aine haast.
+    - Druck de Tastn <F1>, fallsst ys haast.
+    - Zipf   :help <EIN>
+
+  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dös mit dyr Hilf geet.
+  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
+  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
+
+  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
+  :help   aynn Auerwerd naachstöllst und istig <EIN> nit vergisst.  Pröblt dös:
+
+     :help w
+     :help c_CTRL-D
+     :help insert-index
+     :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
+
+
+            ** Mutz önn Wimm mit de einbautn Faehigkeitn auf **
+
+  Dyr Wimm besitzt ayn Wösn Schäftungen,  wo über n Urwimm aushingeend, aber de
+  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
+  ausherholst, erstöllst ayn "vimrc"-Dautticht.
+
+  1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
+     :e ~/.vimrc     für s Ainsl
+     :e $VIM/_vimrc  bei n Fenstl
+
+  2. Ietz lis önn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
+     :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Speichert de Dautticht mit:
+     :w
+
+  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung  zuegschaltt.
+     Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
+     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              Letzn 7.3: VERGÖNTZN
+
+
+               ** Befelhszeilnvergöntzung mit <STRG>d und <TAB> **
+
+  1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
+
+  2. Schaug naach, wölcherne Dauttichtn däß s in n Verzaichniss geit:   :!ls
+     older   :!dir
+  3. Zipf önn Anfang von ayner Faudung:   :e
+
+  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
+     angeend.
+  5. Druck  <TAB>  ,  und dyr Wimm vervollstöndigt  önn Faudungsnam zo ":edit".
+
+  6. Füeg  ayn Laerzaichen  und önn Anfang  von ayner  besteehetn Dautticht an:
+     :edit DAU
+
+  7. Druck <TAB>.  Dyr Wimm vergöntzt önn Nam,  dös haisst,  wenn yr aindeuttig
+     ist.
+Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
+           <STRG>d  und  <TAB>.  Bsunders nützlich ist dös bei   :help  .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 7
+
+
+  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z öffnen.
+
+  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
+
+  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
+
+  4. Zipf  :q  , um s Hilffenster z schliessn.
+
+  5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
+
+  6. Druck <STRG>d, aft däßst naach  :  mit ayner Faudung angfangt haast,  dyr-
+     mitst mügliche Vergöntzungen anzaigt kriegst.
+     Druck <TAB> für ain Vervollstöndigung yllain.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
+  und bündignen Überblik über s Blat  WIMM z lifern,  netty vil gnueg,  däß myn
+  für s Eerste  wirklich öbbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
+  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
+  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
+
+  Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
+    Vim - Vi Improved - von n OUALLINE Steve
+    Verlaag: New Riders
+  Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
+  Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
+  See http://iccf-holland.org/click5.html
+
+  Dös folgete Buech  ist schoon ölter und meerer  über n Urwimm  als wie über n
+  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
+  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
+  3897211262
+  In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
+  De söxte Ausgaab enthaltt aau schoon öbbs über n Wimm.
+  Als ietzunde Bezugniss  für d Fassung  6.2  und ayn pfrenge Einfüerung  dient
+  dös folgete Buech:
+    vim ge-packt  von n WOBST Reinhard
+    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
+  Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
+  spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
+  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
+
+  Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
+  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
+  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
+  zuer Verfüegung gstöllt haat. Gundpost: bware@mines.colorado.edu.
+  Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
+  De bairische Übersötzung stammt von n HELL Sepp 2009. Sein Gundpostbrächt ist
+  sturmibund@t-online.de 
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  
+
+ 
+
+
+
diff --git a/runtime/tutor/tutor.eo b/runtime/tutor/tutor.eo
new file mode 100644
index 0000000..2ac0689
--- /dev/null
+++ b/runtime/tutor/tutor.eo
@@ -0,0 +1,989 @@
+==============================================================================
+=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.2 =
+==============================================================================
+
+   Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
+   por æion klarigi en instruilo kiel æi tiu. Æi tiu instruilo estas
+   fasonita por priskribi sufiæajn komandojn, por ke vi kapablu uzi Vim
+   kun sufiæa facileco.
+
+   La tempo bezonata por plenumi la kurson estas 25-30 minutoj, kaj dependas
+   de kiom da tempo estas uzata por eksperimenti.
+
+   ATENTU:
+   La komandoj en la lecionoj þanøos la tekston. Kopiu tiun æi dosieron
+   por ekzerci vin (se vi lanæis "vimtutor", tiam estas jam kopio).
+
+   Gravas memori, ke æi tiu instruilo estas organizata por instrui per
+   la uzo. Tio signifas, ke vi devas plenumi la komandojn por bone lerni
+   ilin. Se vi nur legas la tekston, vi forgesos la komandojn!
+
+   Nun, certigu, ke la majuskla baskulo NE estas en reøimo majuskla,
+   kaj premu la klavon  j  sufiæe da fojoj por movi la kursoron, kaj por
+   ke la leciono 1.1 plenigu la ekranon.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leciono 1.1:  MOVI LA KURSORON
+
+
+  ** Por movi la kursoron, premu la h,j,k,l klavojn kiel montrite. **
+         ^
+         k        Konsilo: La klavo h estas la plej liva kaj movas liven.
+   < h       l >           La klavo l estas la plej dekstra kaj movas dekstren.
+         j                 La klavo j aspektas kiel malsuprena sago.
+         v
+  1. Movu la kursoron sur la ekrano øis kiam vi sentas vin komforta.
+
+  2. Premu la klavon (j) øis kiam øi ripetas.
+     Vi nun scias, kiel moviøi al la sekvanta leciono
+
+  3. Uzante la malsuprenan klavon, moviøu al la leciono 1.2.
+
+RIMARKO: Se vi dubas pri tio, kion vi premis, premu <ESK> por reiri al
+         la normala reøimo. Tiam repremu la deziratan komandon.
+
+RIMARKO: La klavoj de la kursoro devus ankaý funkcii. Sed uzante hjkl,
+         vi kapablos moviøi pli rapide post kiam vi kutimiøos.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Leciono 1.2:  ELIRI EL VIM
+
+
+  !! RIMARKO: Antaý ol plenumi iujn subajn paþojn ajn, legu la tutan lecionon!!
+
+  1. Premu la klavon <ESK> (por certigi, ke vi estas en normala reøimo).
+
+  2. Tajpu:       :q! <Enenklavo>.
+     Tio eliras el la rekdaktilo, SEN konservi la þanøojn, kiujn vi faris.
+
+  3. Kiam vi vidas la þelinviton, tajpu la komandon kiun vi uzis por eniri
+     en æi tiu instruilo. Tio estus:   vimtutor <Enenklavo>
+
+  4. Se vi memoris tiujn paþojn kaj sentas vin memfida, plenumu la paþojn
+     1 øis 3 por eliri kaj reeniri la redaktilon.
+
+RIMARKO: :q! <Enenklavo> eliras sen konservi la þanøojn, kiujn vi faris.
+         Post kelkaj lecionoj, vi lernos kiel konservi la þanøojn al dosiero.
+
+  5. Movu la kursoron suben øis la leciono 1.3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Leciono 1.3:  REDAKTO DE TEKSTO - FORVIÞO
+
+
+             ** Premu  x  por forviþi la signon sub la kursoro. **
+
+  1. Movu la kursoron al la suba linio markita per --->.
+
+  2. Por korekti la erarojn, movu la kursoron øis kiam øi estas sur la
+     forviþenda signo.
+
+  3. Premu la klavon  x  por forviþi la nedeziratan signon.
+
+  4. Ripetu paþojn 2 øis 4 øis kiam la frazo estas øusta.
+
+
+---> La boovinno saaltiss ssur laa luuno.
+
+  5. Post kiam la linio estas øusta, iru al la leciono 1.4
+
+RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    Leciono 1.4:  REDAKTO DE TEKSTO - ENMETO
+
+
+                      ** Premu  i  por enmeti tekston. **
+
+  1. Movu la kursoron al la unua suba linio markita per --->.
+
+  2. Por igi la unuan linion sama kiel la dua, movu la kursoron sur la unuan
+     signon post kie la teksto estas enmetenda.
+
+  3. Premu  i  kaj tajpu la bezonatajn aldonojn.
+
+  4. Premu <ESK> kiam la eraroj estas korektitaj por reiri al la normala
+     reøimo. Ripetu la paþojn 2 øis 4 por korekti la frazon.
+
+---> Mank en æi linio.
+---> Mankas tekston en æi tiu linio.
+
+  5. Kiam vi sentas vin komforta pri enmeto de teksto, moviøu al la
+     leciono 1.5.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  Leciono 1.5:  REDAKTO DE TEKSTO - POSTALDONO
+
+
+                    ** Premu  A  por postaldoni tekston. **
+
+  1. Movu la kursoron al la unua suba linio markita per --->.
+     Ne gravas sur kiu signo estas la kursoro.
+
+  2. Premu majusklan  A  kaj tajpu la bezonatajn aldonojn.
+
+  3. Post kiam la teksto estas aldonita, premu <ESK> por reiri al la normala
+     reøimo.
+
+  4. Movu la kursoron al la dua linio markita per ---> kaj ripetu la
+     paþojn 2 kaj 3 por korekti la frazon.
+
+---> Mankas teksto el ti
+     Mankas teksto el tiu linio.
+---> Mankas ankaý teks
+     Mankas ankaý teksto æi tie.
+
+  5 Kiam vi sentas vin komforta pri postaldono de teksto, moviøu al la
+    leciono 1.6
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leciono 1.6:  REDAKTI DOSIERON
+
+                ** Uzu  :wq  por konservi dosieron kaj eliri. **
+
+  !! RIMARKO: Antaý ol plenumi iun suban paþon ajn, legu la tutan lecionon!!
+
+  1. Eliru el la instruilo kiel vi faris en la leciono 1.2:  :q!
+
+  2. Æe la þelinvito, tajpu æi tiun komandon:  vim tutor <Enenklavo>
+     'vim' estas la komando por lanæi la redaktilon Vim, 'tutor' estas la
+     dosiernomo de la dosiero, kiun vi volas redakti.  Uzu dosieron, kiu
+     þanøeblas.
+
+  3. Enmetu kaj forviþu tekston, kiel vi lernis en la antaýaj lecionoj.
+
+  4. Konservu la dosieron kun þanøoj kaj eliru el Vim per:  :wq  <Enenklavo>
+
+  5. Relanæu la instruilon vimtutor kaj moviøu suben al la sekvanta resumo.
+
+  6. Post kiam vi legis la suprajn paþojn, kaj komprenis ilin: faru ilin.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                Leciono 1 RESUMO
+
+
+  1. La kursoro moviøas aý per la sagoklavoj, aý per la klavoj hjkl.
+        h (liven)     j (suben)      k (supren)     l (dekstren)
+
+  2. Por lanæi Vim el la þelinvito, tajpu:  vim DOSIERNOMO <Enenklavo>
+
+  3. Por eliri el Vim, tajpu:  <ESK>  :q! <Enenklavo>  por rezigni la þanøojn
+
+  4. Por forviþi la signojn æe la pozicio de la kursoro, tajpu:  x
+
+  5. Por enmeti aý postaldoni tekston, tajpu:
+          i  tajpu enmetendan tekston        <ESK>
+             enmetas tekston antaý la kursoro
+
+          A  tajpu la postaldonendan tekston <ESK>
+             postaldonas post la kursoro
+
+RIMARKO: Premo de <ESK> iras al la normala reøimo, aý rezignas la
+         nedeziratan aý parte plenumita komando.
+
+Nun daýrigu al la leciono 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Leciono 2.1: KOMANDOJ DE FORVIÞO
+
+
+                      ** Tajpu  dw  por forviþi vorton. **
+
+  1. Premu  <ESK>  por certigi, ke vi estas en normala reøimo.
+
+  2. Movu la kursoron al la linio markita per --->.
+
+  3. Movu la kursoron al la komenco de vorto, kiu forviþendas.
+
+  4. Tajpu   dw   por forviþi la vorton.
+
+  RIMARKO: La litero  d  aperos en la lasta linio sur la ekrano kiam vi
+           tajpas øin. Vim atendas øis kiam vi tajpas  w .  Se vi vidas
+           alian signon ol  d  vi tajpis ion mise; premu  <ESK>  kaj
+           rekomencu.
+
+---> Estas iuj vortoj kiuj Zamenhof ne devus esti akuzativo en æi tiu frazo.
+
+  5. Ripetu paþojn 3 kaj 4 øis kiam la frazo estas øusta kaj moviøu al la
+     leciono 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Leciono 2.2: PLIAJ KOMANDOJ DE FORVIÞO
+
+
+               ** Tajpu  d$  por forviþi la finon de la linio. **
+
+  1. Premu  <ESK>  por certigi, ke vi estas en normala reøimo.
+
+  2. Movu la kursoron sur la suban linion markita per --->.
+
+  3. Movu la kursoron æe la fino de la øusta linio (POST la unua . ).
+
+  4. Tajpu   d$   por forivþi øis la fino de la linio.
+
+---> Iu tajpis la finon de æi tiu linio dufoje. fino de æi tiu linio dufoje.
+
+
+  5. Moviøu al la leciono 2.3 por kompreni kio okazas.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Leciono 2.3: PRI OPERATOROJ KAJ MOVOJ
+
+
+  Multaj komandoj, kiuj þanøas la tekston, estas faritaj de operatoro kaj
+  movo. La formato de komando de forviþo per la operatoro de forviþo  d
+  estas kiel sekvas:
+
+       d   movo
+
+  Kie:
+    d      - estas la operatoro de movo
+    movo   - estas tio, pri kio la operatoro operacios (listigita sube)
+
+  Mallonga listo de movoj:
+    w - øis la komenco de la sekvanta vorto, krom øia unua signo.
+    e - øis la fino de la nuna vorto, krom la lasta signo.
+    $ - øis la fino de la linio, krom la lasta signo.
+
+  Do tajpo de   'de'   forviþos ekde la kursoro øis la fino de la vorto.
+
+RIMARKO: Premo de nur la movo en Normala reøimo sen operatoro movos
+         la kursoron kiel specifite.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leciono 2.4: UZI NOMBRON POR MOVO
+
+             ** Tajpo de nombro antaý movo ripetas øin laýfoje. **
+
+  1. Movu la kursoron æe la komenco de la suba linio markita per --->.
+
+  2. Tajpu  2w  por movi la kursoron je du vortoj antaýen.
+
+  3. Tajpu  3e  por movi la kursoron æe la fino de la tria vorto antaýen.
+
+  4. Tajpu  0  (nul) por moviøi æe la komenco de la linio.
+
+
+  5. Ripetu paþojn 2 øis 3 kun malsamaj nombroj.
+
+---> Tio estas nur linio kun vortoj, kie vi povas moviøi.
+
+  6. Moviøu al la leciono 2.5.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    Leciono 2.5: UZI NOMBRON POR FORVIÞI PLI
+
+
+            ** Tajpo de nombro kun operatoro ripetas øin laýfoje. **
+
+  En la kombina¼o de la operatoro de forviþo, kaj movo kiel menciita
+  æi-supre, eblas aldoni nombron antaý la movo por pli forviþi:
+        d  nombro   movo
+
+  1. Movu la kursoron æe la unua MAJUSKLA vorto en la linio markita per --->.
+
+  2. Tajpu  d2w  por forviþi la du MAJUSKLAJN vortojn
+
+  3. Ripetu paþojn 1 øis 2 per malsama nombro por forviþi la sinsekvajn
+     MAJUSKLAJN vortojn per unu komando
+
+---> Tiu AB CDE linio FGHI JK LMN OP de vortoj estas Q RS TUV purigita.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    Leciono 2.6: OPERACII SUR LINIOJ
+
+
+                   ** Tajpu  dd  por forviþi tutan linion. **
+
+  Pro la ofteco de forviþo de tuta linio, la verkisto de Vi decidis, ke
+  estus pli facile simple tajpi du d-ojn  por forviþi linion.
+
+  1. Movu la kursoron sur la duan linion en la suba frazo.
+  2. Tajpu  dd  por forviþi la linion.
+  3. Nun moviøu al la kvara linio.
+  4. Tajpu   2dd   por forviþi du liniojn.
+
+---> 1)  Rozoj estas ruøaj,
+---> 2)  Þlimo estas amuza,
+---> 3)  Violoj estas bluaj,
+---> 4)  Mi havas aýton,
+---> 5)  Horloøoj diras kioma horo estas,
+---> 6)  Sukero estas dolæa,
+---> 7)  Kaj tiel vi estas.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leciono 2.7: LA KOMANDO DE MALFARO
+
+
+ ** Premu u por malfari la lastajn komandojn, U por ripari la tutan linion. **
+
+  1. Movu la kursoron æe la suba linio markita per ---> kaj metu øin sur
+     la unuan eraron.
+  2. Tajpu  x  por forviþi la unuan nedeziratan signon.
+  3. Nun tajpu  u  por malfari la lastan plenumitan komandon.
+  4. Æi-foje, riparu æiujn erarojn en la linio kaj øia originala stato.
+  5. Nun tajpu majusklan  U  por igi la linion al øia antaýa stato.
+  6. Nun tajpu  u  kelkfoje por malfari la  U  kaj antaýajn komandojn.
+  7. Nun tajpu CTRL-R (premante la CTRL klavon dum vi premas R) kelkfoje
+     por refari la komandojn (malfari la malfarojn).
+
+---> Koorektii la erarojn sur tiuu æi liniio kaj remettu illlin per malfaro.
+
+  8. Tiuj estas tre utilaj komandoj.  Nun moviøu al la leciono 2 RESUMO.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                Leciono 2 RESUMO
+
+
+  1. Por forviþi ekde la kursoro øis la sekvanta vorto, tajpu:    dw
+  2. Por forviþi ekde la kursoro øis la fino de la linio, tajpu:  d$
+  3. Por forviþi tutan linion, tajpu:                             dd
+
+  4. Por ripeti movon, antaýmetu nombron:                         2w
+  5. La formato de þanøa komando estas:
+           operatoro   [nombro]   movo
+
+     kie:
+       operatoro - estas tio, kio farendas, kiel  d  por forviþi
+       [nombro]  - estas opcia nombro por ripeti la movon
+       movo      - movas sur la teksto por operacii, kiel ekzemple  w (vorto),
+                   $ (øis fino de linio), ktp.
+
+  6. Por moviøi al la komenco de la linio, uzu nul:  0
+
+  7. Por malfari antaýajn agojn, tajpu:               u (minuskla u)
+     Por malfari æiujn þanøojn sur la linio, tajpu:   U (majuskla U)
+     Por refari la malfarojn, tajpu:                  CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leciono 3.1 LA KOMANDO DE METO
+
+
+    ** Tajpu  p  por meti tekston forviþitan antaýe post la kursoro. **
+
+  1. Movu la kursoron æe la unua ---> suba linio.
+
+  2. Tajpu  dd  por forviþi la linion kaj konservi øin ene de reøistro de Vim.
+
+  3. Movu la kursoron æe la linio c), SUPER kie la forviþita linio devus esti.
+
+  4. Tajpu  p  por meti la linion sub la kursoron.
+
+  5. Ripetu la paþojn 2 øis 4 por meti æiujn liniojn en la øusta ordo.
+
+---> d) Æu ankaý vi povas lerni?
+---> b) Violoj estas bluaj,
+---> c) Inteligenteco lerneblas,
+---> a) Rozoj estas ruøaj,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Leciono 3.2 LA KOMANDO DE ANSTATAÝIGO
+
+
+       ** Tajpu  rx  por anstataýigi la signon æe la kursoro per  x . **
+
+
+  1. Movu la kursoron æe la unua suba linio markita per --->.
+
+  2. Movu la kursoron øis la unua eraro.
+
+  3. Tajpu  r  kaj la signon, kiu devus esti tie.
+
+  4. Ripetu paþojn 2 kaj 3 øis kiam la unua linio egalas la duan.
+
+---> Kiem tiu lanio estis tajpita, iu pramis la naøuftajn klovojn!
+---> Kiam tiu linio estis tajpita, iu premis la neøustajn klavojn!
+
+  5. Nun moviøu al la leciono 3.3.
+
+Rimarko: Memoru, ke vi devus lerni per uzo, kaj ne per memorado.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leciono 3.3 LA OPERATORO DE ÞANØO
+
+
+              ** Por þanøi øis la fino de la vorto, tajpu  ce . **
+
+  1. Movu la kursoron æe la unua suba linio markita per --->.
+
+  2. Metu la kursoron sur la  d  en  lduzw
+
+  3. Tajpu  ce  kaj la øustan vorton (en tiu æi kazo, tajpu inio ).
+
+  4. Premu <ESK> kaj moviøu al la sekvanta signo, kiu bezonas þanøon.
+
+  5. Ripetu la paþojn 3 kaj 4 øis kiam la unua frazo egalas la duan.
+
+---> Tiu lduzw havas kelkajn vortojn, kiii bezas þanøon per la þanøooto.
+---> Tiu linio havas kelkajn vortojn, kiuj bezonas þanøon per la þanøoperatoro.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leciono 3.4 PLIAJ ÞANØOJ PER c
+
+
+       ** La operatoro de þanøo uzeblas kun la sama movo kiel forviþo. **
+
+  1. La operatoro de þanøo funkcias sammaniere kiel forviþo. La formato estas:
+
+       c    [nombro]   movo
+
+  2. La movoj estas samaj, kiel ekzemple   w (vorto) kaj $ (fino de linio).
+
+  3. Moviøu æe la unua suba linio markita per --->.
+
+  4. Movu la kursoron al la unua eraro.
+
+  5. Tajpu  c$  kaj tajpu la reston de la linio kiel la dua kaj premu <ESK>.
+
+---> La fino de æi tiu linio bezonas helpon por igi øin same kiel la dua.
+---> La fino de æi tiu linio bezonas korektojn per uzo de la komando  c$
+
+RIMARKO:  Vi povas uzi la klavon Retropaþo por korekti erarojn dum vi tajpas.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                Leciono 3 RESUMO
+
+
+  1. Por remeti tekston, kiun vi ¼us forviþis, tajpu  p. Tio metas la
+     forviþitan tekston POST la kursoro (se linio estis forviþita, øi
+     iros en la linion sub la kursoro).
+
+  2. Por anstataýigi la signon sub la kursoro, tajpu  r  kaj tiam la signon
+     kion vi deziras havi tie.
+
+  3. La operatoro de þanøo ebligas al vi þanøi ekde la kursoro, øis kie
+     la movo iras.  Ekz. tajpu  ce  por þanøi ekde la kursoro øis la fino
+     de la vorto,  c$  por þanøi øis la fino de la linio.
+
+  4. La formato de þanøo estas:
+
+         c    [nombro]   movo
+
+Nun daýrigu al la sekvanta leciono.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+              Leciono 4.1: POZICIO DE KURSORO KAJ STATO DE DOSIERO
+
+
+  ** Tajpu CTRL-G por montri vian pozicion en la dosiero kaj la dosierstaton.
+     Tajpu  G  por moviøi al linio en la dosiero. **
+
+  RIMARKO: Legu la tutan lecionon antaý ol plenumi iun paþon ajn!!
+
+  1. Premu la klavon Ctrl kaj premu  g . Oni nomas tion CTRL-G.
+     Mesaøo aperos æe la suba parto de la paøo kun la dosiernomo kaj la
+     pozicio en la dosiero. Memoru la numeron de la linio por paþo 3.
+
+  RIMARKO: Vi eble vidas la pozicion de la kursoro æe la suba dekstra
+           angulo de la ekrano. Tio okazas kiam la agordo 'ruler' estas
+           þaltita (vidu  :help 'ruler')
+
+  2. Premu  G  por moviøi æe la subo de la dosiero.
+     Tajpu gg  por moviøi æe la komenco de la dosiero.
+
+  3. Tajpu la numeron de la linio kie vi estis kaj poste G .  Tio removos
+     vin al la linio, kie vi estis kiam vi unue premis CTRL-G.
+
+  4. Se vi sentas vin komforta, plenumu paþojn 1 øis 3.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Leciono 4.2 LA KOMANDO DE SERÆO
+
+
+             ** Tajpu  /  kaj poste frazon por seræi la frazon. **
+
+  1. En normala reøimo, tajpu la  /  signon.  Rimarku, ke øi kaj la kursoro
+     aperas æe la suba parto de la ekrano kiel por la  :  komando.
+
+  2. Nun tajpu 'errarro' <Enenklavo>.
+     Tio estas la vorto, kion vi volas seræi.
+
+  3. Por seræi la saman frazon denove, simple tajpu  n .
+     Por seræi la saman frazon denove en la retrodirekto, tajpu  N .
+
+  4. Por seræi frazon en la retrodirekto, uzu  ?  anstataý  / .
+
+  5. Por reiri tien, el kie vi venis, premu  CTRL-O (Premu Ctrl kaj o
+     literon o).  Ripetu por pli retroiri.  CTRL-I iras antaýen.
+
+---> "errarro" ne estas maniero por literumi eraro; errarro estas eraro.
+
+RIMARKO: Kiam la seræo atingas la finon de la dosiero, øi daýras æe la
+         komenco, krom se la agordo 'wrapscan' estas malþaltita.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Leciono 4.3 SERÆO DE KONGRUAJ KRAMPOJ
+
+
+                 ** Tajpu  %  por trovi kongruan ), ] aý  } **
+
+  1. Poziciu la kursoron sur iun (, [ aý { en la linio markita per --->.
+
+  2. Nun tajpu la  %  signon.
+
+  3. La kursoro moviøas al la kongrua krampo.
+
+  4. Tajpu  %  por movi la kursoron al la alia kongrua krampo.
+
+  5. Movu la kursoron al la alia (, ), [, ], {, } kaj observu tion,
+     kion  %  faras.
+
+---> Æi tiu ( estas testa linio kun (-oj, [-oj, ]-oj kaj {-oj, }-oj en øi. ))
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Leciono 4.4 LA KOMANDO DE ANSTATAýIGO
+
+
+     ** Tajpu  :s/malnova/nova/g  por anstataýigi 'nova' per 'malnova'. **
+
+  1. Movu la kursoron al la suba linio markita per --->.
+
+  2. Tajpu  :s/laa/la <Enenklavo> .  Rimarku, ke la komando þanøas nur la
+     unuan okaza¼on de "laa" en la linio.
+
+  3. Nun tajpu  :s/laa/la/g .  Aldono de  g  opcio signifas mallokan
+     anstataýigon en la linio. Øi þanøas æiujn okaza¼ojn de "laa" en la
+     linio.
+
+---> laa plej bona tempo por vidi florojn estas en laa printempo.
+
+  4. Por þanøi æiujn okaza¼ojn de iu æena signo inter du linioj,
+     tajpu    :#,#s/malnova/nova/g   kie #,# estas la numeroj de linioj de la
+                                     intervalo de la linioj kie la anstataýigo
+                                     okazos.
+     Tajpu    :%s/malnova/nova/g     por þanøi æiujn okaza¼ojn en la tuta
+                                     dosiero.
+     Tajpu    :s/malnova/nova/gc     por trovi æiujn okaza¼ojn en la tuta
+                                     dosiero, kun invitilo æu anstataýigi
+                                     aý ne.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                Leciono 4 RESUMO
+
+  1. CTRL-G  vidigas vian pozicion en la dosiero kaj la staton de la dosiero.
+            G  movas la kursoron al la fino de la dosiero.
+     numero G  movas la kursoron al numero de tiu linio.
+           gg  movas la kursoron al la unua linio.
+
+  2. Tajpo de  /  kaj frazon seræas la frazon antaýen.
+     Tajpo de  ?  kaj frazon seræas la frazon malantaýen.
+     Post seræo, tajpu n por trovi la sekvantan okaza¼on en la sama direkto aý
+     N por seræi en la mala direkto.
+     CTRL-O movas vin al la antaýaj pozicioj, CTRL-I al la novaj pozicioj.
+
+  3. Tajpo de  %  kiam la kursoro estas sur (,),[,],{ aý } moviøas al øia
+     kongruo.
+
+  4. Por anstataýigi 'nova' en la unua 'malnova' en linio :s/malnova/nova
+     Por anstataýigi 'nova' en æiuj 'malnova'-oj en linio :s/malnova/nova/g
+     Por anstataýigi frazon inter du #-aj linioj          :#,#s/malnova/nova/g
+     Por anstataýigi æiujn okaza¼ojn en la dosiero        :%s/malnova/nova/g
+     Por demandi konfirmon æiu-foje, aldonu 'c'           :%s/malnova/nova/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Leciono 5.1 KIEL PLENUMI EKSTERAN KOMANDON
+
+
+     ** Tajpu  :!  sekvata de ekstera komando por plenumi la komandon. **
+
+  1. Tajpu la konatan komandon  :  por pozicii la kursoron æe la suba parto
+     de la ekrano. Tio ebligas tajpadon de komando en komanda linio.
+
+  2. Nun tajpu la  !  (krisigno) signon. Tio ebligas al vi plenumi iun
+     eksteran þelan komandon ajn.
+
+  3. Ekzemple, tajpu  ls  post ! kaj tajpu <Enenklavo>. Tio listigos la
+     enhavon de la dosierujo, same kiel se vi estis en þela invito.
+     Aý uzu  :!dir  se ls ne funkcias.
+
+RIMARKO: Eblas plenumi iun eksteran komandon ajn tiamaniere, ankaý kun
+         argumentoj.
+
+RIMARKO: Æiuj  :  komandoj devas finiøi per tajpo de <Enenklavo>
+         Ekde nun, ni ne plu mencios tion.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    Leciono 5.2 PLI PRI KONSERVO DE DOSIERO
+
+
+   ** Por konservi la faritajn þanøojn en la teksto, tajpu  :w DOSIERNOMO. **
+
+  1. Tajpu  !dir  aý  !ls  por akiri liston de via dosierujo.
+     Vi jam scias, ke vi devas tajpi <Enenklavo> post tio.
+
+  2. Elektu dosieron, kiu ne jam ekzistas, kiel ekzemple TESTO.
+
+  3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
+
+  4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
+     Por kontroli tion, tajpu   :!dir   aý   !ls   denove por vidigi vian
+     dosierujon.
+
+RIMARKO: Se vi volus eliri el Vim kaj restartigi øin denove per  vim TESTO,
+         la dosiero estus precize same kiel kopio de la instruilo kiam vi
+         konservis øin.
+
+  5. Nun forviþu la dosieron tajpante (MS-DOS):     :!del TESTO
+                                   aý (UNIKSO):     :!rm TESTO
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    Leciono 5.3 APARTIGI KONSERVENDAN TESTON
+
+
+    ** Por konservi parton de la dosiero, tajpu   v  movo  :w DOSIERNOMO **
+
+  1. Movu la kursoron al tiu linio.
+
+  2. Premu  v  kaj movu la kursoron al la kvina suba ero.  Rimarku, ke la
+     teksto emfaziøas.
+
+  3. Premu la  :  signon.  Æe la fino de la ekrano  :'<,'>  aperos.
+
+  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ne jam ekzistas.
+     Kontrolu, ke vi vidas  :'<,'>w TESTO  antaý premi <Enenklavo>.
+
+  5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
+     aý  :!ls  por vidigi øin.  Ne forviþu øin.  Ni uzos øin en la sekvanta
+     leciono.
+
+RIMARKO: Premo de  v  komencas Viduman apartigon.  Vi povas movi la kursoron
+         por pligrandigi aý malpligrandigi la apartigon. Tiam vi povas uzi
+         operatoron por plenumi ion kun la teksto.  Ekzemple,  d  forviþas
+         la tekston.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Leciono 5.4 AKIRI KAJ KUNFANDI DOSIEROJN
+
+
+         ** Por enmeti la enhavon de dosiero, tajpu  :r DOSIERNOMON **
+
+  1. Movu la kursoron ¼us super æi tiu linio.
+
+RIMARKO: Post plenumo de paþo 2, vi vidos tekston el la leciono 5.3.  Tiam
+         moviøu SUBEN por vidi tiun lecionon denove.
+
+  2. Nun akiru vian dosieron TESTO uzante la komandon   :r TESTO   kie TESTO
+     estas la nomo de la dosiero, kiun vi uzis.
+     La dosiero, kion vi akiras, estas metita sub la linio de la kursoro.
+
+  3. Por kontroli, æu la dosiero akiriøis, retromovu la kursoron kaj rimarku,
+     ke estas nun du kopioj de la leciono 5.3, la originala kaj la versio mem
+     de la dosiero.
+
+RIMARKO: Vi nun povas legi la eliron de ekstera komando. Ekzemple,
+        :r !ls  legas la eliron de la komando ls kaj metas øin sub la
+        kursoron.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                Leciono 5 RESUMO
+
+
+  1.  :!komando  plenumas eksteran komandon.
+
+      Iuj utilaj ekzemploj estas:
+        (MS-DOS)           (UNIKSO)
+         :!dir              :!ls            - listigas dosierujon
+         :!del DOSIERNOMO   :!rm DOSIERNOMO - forviþas la dosieron DOSIERNOMO
+
+  2.  :w DOSIERNOMO  konservas la nunan dosieron de Vim al disko kun la
+      nomo DOSIERNOMO.
+
+  3.  v  movo  :w DOSIERNOMO  konservas la Viduman apartigon de linioj en
+      dosiero DOSIERNOMO.
+
+  4. :r DOSIERNOMO  akiras la dosieron DOSIERNOMO el la disko kaj metas
+     øin sub la pozicion de la kursoro.
+
+  5. :r !dir  legas la eligon de la komando dir kaj metas øin sub la
+     pozicion de la kursoro.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leciono 6.1 LA KOMANDO DE MALFERMO
+
+
+  ** Tajpu o por malfermi linion sub la kursoro kaj eniri Enmetan reøimon. **
+
+  1. Movu la kursoron al la suba linio markita per --->.
+
+  2. Tajpu la minusklan literon  o  por malfermi linion SUB la kursoro kaj
+     eniri la Enmetan reøimon.
+
+  3. Nun tajpu tekston kaj premu <ESK> por eliri la Enmetan reøimon.
+
+---> Post tajpo de  o  la kursoro moviøas al la malfermata linio en
+     Enmeta reøimo.
+
+  4. Por malfermi linion SUPER la kursoro, nur tajpu majusklan  O  ,
+     anstataý minusklan  o.  Provu tion per la suba linio.
+
+---> Malfermu linion SUPER tiu tajpante O dum la kursoro estas sur tiu linio.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Leciono 6.2 LA KOMANDO DE POSTALDONO
+
+
+                  ** Tajpu  a  por enmeti POST la kursoro. **
+
+  1. Movu la kursoron æe la komenco de la linio markita per --->.
+
+  2. Premu  e  øis kiam la kursoro estas æe la fino de  li.
+
+  3. Tajpu  a  (minuskle) por aldoni tekston POST la kursoro.
+
+  4. Kompletigu la vorton same kiel la linio sub øi.  Premu <ESK> por
+     eliri la Enmetan reøimon.
+
+  5. Uzu  e  por moviøi al la sekvanta nekompleta vorto kaj ripetu
+     paþojn 3 kaj 4.
+
+---> Æi tiu lin ebligos vin ekz vin postal tekston al linio.
+---> Æi tiu linio ebligos vin ekzerci vin postaldoni tekston al linio.
+
+RIMARKO: Æiu  a, i kaj A  iras al la sama Enmeta reøimo, la nura malsamo
+         estas tie, kie la signoj estas enmetitaj.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    Leciono 6.3 ALIA MANIERO POR ANSTATAÝIGI
+
+
+          ** Tajpu majusklan  R  por anstataýigi pli ol unu signo. **
+
+  1. Movu la kursoron al la unua suba linio markita per --->.  Movu la
+     kursoron al la komenco de la unua  xxx .
+
+  2. Nun premu  R  kaj tajpu la nombron sub øi en la dua linio, por ke øi
+     anstataýigu la xxx .
+
+  3. Premu <ESK> por foriri la Anstataýigan reøimon. Rimarku, ke la cetera
+     parto de la linio restas neþanøata.
+
+  4. Ripetu la paþojn por anstataýigi la restantajn xxx.
+
+---> Aldono de 123 al xxx donas al vi xxx.
+---> Aldono de 123 al 456 donas al vi 579.
+
+RIMARKO: Anstataýiga reøimo estas same kiel Enmeta reøimo, sed æiu signo
+         tajpita forviþas ekzistan signon.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Leciono 6.4 KOPII KAJ ALGLUI TEKSTON
+
+
+     ** Uzu la  y  operatoron por kopii tekston, kaj  p  por alglui øin **
+
+
+  1. Iru al la linio markita per ---> sube kaj poziciu la kursoron post "a)".
+
+  2. Komencu la Viduman reøimon per  v  kaj movu la kursoron ¼us antaý "unua".
+
+  3. Tajpu  y  por kopii la emfazitan tekston.
+
+  4. Movu la kursoron æe la fino de la linio:  j$
+
+  5. Tajpu  p  por alglui la tekston.  Tiam tajpu:  a dua <ESK> .
+
+  6. Uzu Viduman reøimon por apartigi " ero.", kopiu øin per  y , moviøu
+     æe la fino de la sekvanta linio per  j$  kaj algluu la tekston tie
+     per  p .
+
+---> a) tio estas la unua ero.
+     b)
+
+RIMARKO: vi povas ankaý uzi  y  kiel operatoro;  yw  kopias unu vorton.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Leciono 6.5 AGORDI OPCION
+
+
+         ** Agordu opcion por ke seræo aý anstataýigo ignoru usklecon **
+
+  1. Seræu 'ignori' per tajpo de /ignori <Enenklavo>
+     Ripetu plurfoje premante  n .
+
+  2. Þaltu la opcion 'ic' (ignori usklecon) per:   :set ic
+
+  3. Nun seræu 'ignori' denove premante  n
+     Rimarku, ke Ignori kaj IGNORI estas nun troveblas.
+
+  4. Þaltu la opciojn 'hlsearch' kaj 'incsearch':   :set hls is
+
+  5. Nun retajpu la seræan komandon kaj vidu kio okazas:  /ignore <Enenklavo>
+
+  6. Por malþalti ignoron de uskleco:  :set noic
+
+RIMARKO: Por forigi emfazon de kongruo, tajpu:   :nohlsearch
+RIMARKO: Se vi deziras ignori usklecon por nur unu seræa komando, uzu  \c
+         en la frazo:  /ignore\c  <Enenklavo>
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                Leciono 6 RESUMO
+
+  1. Tajpu  o  por malfermi linion SUB la kursoro kaj eki en Enmeta reøimo.
+  1. Tajpu  O  por malfermi linion SUPER la kursoro.
+
+  2. Tajpu  a  por enmeti tekston POST la kursoro.
+     Tajpu  A  por enmeti tekston post la fino de la linio.
+
+  3. La  e  komando movas la kursoron al la fino de vorto.
+
+  4. la  y  operatoro kopias tekston,  p  algluas øin.
+
+  5. Tajpo de majuskla  R  eniras la Anstataýigan reøimon øis kiam
+     <ESK> estas premita.
+
+  6. Tajpo de ":set xxx" þaltas la opcion "xxx".  Iuj opcioj estas:
+        'ic' 'ignorecase'     ignori usklecon dum seræo
+        'is' 'incsearch'      montru partan kongruon dum seræo
+        'hls' 'hlsearch'      emfazas æiujn kongruajn frazojn
+     Vi povas uzi aý la longan, aý la mallongan nomon de opcio.
+
+  7. Antaýaldonu "no" por malþalti la opcion:  :set noic
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                            Leciono 7.1 AKIRI HELPON
+
+
+                          ** Uzu la helpan sistemon **
+
+  Vim havas ampleksan helpan sistemon. Por komenciøi, provu unu el la tiuj
+  tri:
+        - premu la klavon <HELPO> (se vi havas øin)
+        - premu la klavon <F1> (se vi havas øin)
+        - tajpu   :help <Enenklavo>
+
+  Legu la tekston en la helpfenestro por trovi kiel helpo funkcias.
+  Tajpu  CTRL-W CTRL-W      por salti de unu fenestro al la alia.
+  Tajpu    :q <Enenklavo>   por fermi la helpan fenestron.
+
+  Vi povas trovi helpon pri io ajn aldonante argumenton al la komando
+  ":help".  Provu tiujn (ne forgesu premi <Enenklavo>):
+
+        :help w
+        :help c_CTRL-D
+        :help insert-index
+        :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leciono 7.2 KREI STARTAN SKRIPTON
+
+
+                         ** Ebligu kapablojn de Vim **
+
+  Vim havas multe pli da kapabloj ol Vi, sed la plej multaj estas defaýlte
+  malþaltitaj.  Por ekuzi la kapablojn, vi devas krei dosieron "vimrc.
+
+  1. Ekredaktu la dosieron "vimrc".  Tio dependas de via sistemo:
+      :e ~/.vimrc          por Unikso
+      :e $VIM/_vimrc       por MS-Vindozo
+
+  2. Nun legu la enhavon de la ekzempla "vimrc"
+      :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Konservu la dosieron per:
+      :w
+
+  La sekvantan fojon, kiam vi lanæas Vim, øi uzos sintaksan emfazon.
+  Vi povas aldoni æiujn viajn preferatajn agordojn al tiu dosiero "vimrc".
+  Por pli da informoj, tajpu  :help vimrc-intro
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                             Leciono 7.3 KOMPLETIGO
+
+
+             ** Kompletigo de komanda linio per CTRL-D kaj <TAB> **
+
+  1. Certigu ke Vim estas en kongrua reøimo:  :set nocp
+
+  2. Rigardu tiujn dosierojn, kiuj ekzistas en la dosierujo:  :!ls  aý  :!dir
+
+  3. Tajpu la komencon de komando:  :e
+
+  4. Premu  CTRL-D  kaj Vim montros liston de komandoj, kiuj komencas per "e".
+
+  5. Premu <TAB>  kaj Vim kompletigos la nomon de la komando al ":edit".
+
+  6. Nun aldonu spaceton kaj la komencon de ekzistanta nomo:  :edit DOSI
+
+  7. Premu <TAB>.  Vim kompletigos la nomon (se øi estas unika)
+
+RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
+         <TAB>.  Estas aparte utila por  :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                Leciono 7 RESUMO
+
+
+  1. Tajpu  :help  aý premu <F1> aý <Helpo>  por malfermi helpan fenestron.
+
+  2. Tajpu  :help kmd  por trovi helpon pri  kmd.
+
+  3. Tajpu  CTRL-W CTRL-W  por salti al alia fenestro.
+
+  4. Tajpu  :q  to fermi la helpan fenestron.
+
+  5. Kreu komencan skripton vimrc por konservi viajn agordojn.
+
+  6. Kiam vi tajpas  :  komandon, premu CTRL-D por vidi æiujn kompleteblojn.
+     Premu <TAB> por uzi unu kompletigon.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Tio konkludas la instruilon de Vim.  Øi celis doni mallongan superrigardon
+  de la redaktilo Vim, nur tio kio sufiæas por ebligi al vi facilan uzon de
+  la redaktilo. Estas nepre nekompleta, æar Vim havas multajn multajn pliajn
+  komandojn. Legu la manlibron: ":help user-manual".
+
+  Tiu instruilo estis verkita de Michael C. Pierce kaj Robert K. Ware,
+  el la Koloradia Lernejo de Minejoj (Colorado School of Mines) uzante
+  ideojn provizitajn de Charles Smith el la Stata Universitato de Koloradio
+  (Colorado State University)
+
+  Retpoþto: bware@mines.colorado.edu.
+
+  Modifita por Vim de Bram Moolenaar.
+
+  Tradukita en Esperanto de Dominique Pellé, 2008-04-01
+  Retpoþto: dominique.pelle@gmail.com
+  Lasta þanøo: 2009-02-01
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.eo.utf-8 b/runtime/tutor/tutor.eo.utf-8
index 8f67b20..5adad39 100644
--- a/runtime/tutor/tutor.eo.utf-8
+++ b/runtime/tutor/tutor.eo.utf-8
@@ -1,5 +1,5 @@
 ==============================================================================
-=   B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.0.eo  =
+=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.2 =
 ==============================================================================
 
    Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
@@ -54,15 +54,15 @@
   1. Premu la klavon <ESK> (por certigi, ke vi estas en normala reĝimo).
 
   2. Tajpu:       :q! <Enenklavo>.
-     Tio eliras el la rekdaktilo, SEN konservi la ŝanĝojn, kion vi faris.
+     Tio eliras el la rekdaktilo, SEN konservi la ŝanĝojn, kiujn vi faris.
 
-  3. Kiam vi vidas la ŝelinviton, tajpu la komandon kiun vi uzis por eniri 
+  3. Kiam vi vidas la ŝelinviton, tajpu la komandon kiun vi uzis por eniri
      en ĉi tiu instruilo. Tio estus:   vimtutor <Enenklavo>
 
   4. Se vi memoris tiujn paŝojn kaj sentas vin memfida, plenumu la paŝojn
      1 ĝis 3 por eliri kaj reeniri la redaktilon.
 
-RIMARKO: :q! <Enenklavo> eliras sen konservi la ŝanĝojn kion vi faris. 
+RIMARKO: :q! <Enenklavo> eliras sen konservi la ŝanĝojn, kiujn vi faris.
          Post kelkaj lecionoj, vi lernos kiel konservi la ŝanĝojn al dosiero.
 
   5. Movu la kursoron suben ĝis la leciono 1.3.
@@ -79,7 +79,7 @@
      forviŝenda signo.
 
   3. Premu la klavon  x  por forviŝi la nedeziratan signon.
- 
+
   4. Ripetu paŝojn 2 ĝis 4 ĝis kiam la frazo estas ĝusta.
 
 
@@ -99,7 +99,7 @@
 
   1. Movu la kursoron al la unua suba linio markita per --->.
 
-  2. Por igi la unuan linion sama ol la dua, movu la kursoron sur la unuan
+  2. Por igi la unuan linion sama kiel la dua, movu la kursoron sur la unuan
      signon post kie la teksto estas enmetenda.
 
   3. Premu  i  kaj tajpu la bezonatajn aldonojn.
@@ -124,12 +124,12 @@
   1. Movu la kursoron al la unua suba linio markita per --->.
      Ne gravas sur kiu signo estas la kursoro.
 
-  2. Premu  A  kaj tajpu la bezonatajn aldonojn.
+  2. Premu majusklan  A  kaj tajpu la bezonatajn aldonojn.
 
   3. Post kiam la teksto estas aldonita, premu <ESK> por reiri al la normala
      reĝimo.
 
-  4. Movu la kursoron al la dua linio markita per ---> kaj ripetu la 
+  4. Movu la kursoron al la dua linio markita per ---> kaj ripetu la
      paŝojn 2 kaj 3 por korekti la frazon.
 
 ---> Mankas teksto el ti
@@ -157,7 +157,7 @@
 
   3. Enmetu kaj forviŝu tekston, kiel vi lernis en la antaŭaj lecionoj.
 
-  4. Konservu la dosieron kun ŝanĝoj kaj eliru el Vim per:  :qw  <Enenklavo>
+  4. Konservu la dosieron kun ŝanĝoj kaj eliru el Vim per:  :wq  <Enenklavo>
 
   5. Relanĉu la instruilon vimtutor kaj moviĝu suben al la sekvanta resumo.
 
@@ -167,6 +167,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                 Leciono 1 RESUMO
 
+
   1. La kursoro moviĝas aŭ per la sagoklavoj, aŭ per la klavoj hjkl.
         h (liven)     j (suben)      k (supren)     l (dekstren)
 
@@ -217,6 +218,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      Leciono 2.2: PLIAJ KOMANDOJ DE FORVIŜO
 
+
                ** Tajpu  d$  por forviŝi la finon de la linio. **
 
   1. Premu  <ESK>  por certigi, ke vi estas en normala reĝimo.
@@ -249,7 +251,7 @@
     movo   - estas tio, pri kio la operatoro operacios (listigita sube)
 
   Mallonga listo de movoj:
-    w - ĝis la komenco de la sekvanta vorto, krom ĝian unuan signon.
+    w - ĝis la komenco de la sekvanta vorto, krom ĝia unua signo.
     e - ĝis la fino de la nuna vorto, krom la lasta signo.
     $ - ĝis la fino de la linio, krom la lasta signo.
 
@@ -283,6 +285,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     Leciono 2.5: UZI NOMBRON POR FORVIŜI PLI
 
+
             ** Tajpo de nombro kun operatoro ripetas ĝin laŭfoje. **
 
   En la kombinaĵo de la operatoro de forviŝo, kaj movo kiel menciita
@@ -302,6 +305,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     Leciono 2.6: OPERACII SUR LINIOJ
 
+
                    ** Tajpu  dd  por forviŝi tutan linion. **
 
   Pro la ofteco de forviŝo de tuta linio, la verkisto de Vi decidis, ke
@@ -324,6 +328,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        Leciono 2.7: LA KOMANDO DE MALFARO
 
+
  ** Premu u por malfari la lastajn komandojn, U por ripari la tutan linion. **
 
   1. Movu la kursoron ĉe la suba linio markita per ---> kaj metu ĝin sur
@@ -344,6 +349,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                 Leciono 2 RESUMO
 
+
   1. Por forviŝi ekde la kursoro ĝis la sekvanta vorto, tajpu:    dw
   2. Por forviŝi ekde la kursoro ĝis la fino de la linio, tajpu:  d$
   3. Por forviŝi tutan linion, tajpu:                             dd
@@ -368,6 +374,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          Leciono 3.1 LA KOMANDO DE METO
 
+
     ** Tajpu  p  por meti tekston forviŝitan antaŭe post la kursoro. **
 
   1. Movu la kursoron ĉe la unua ---> suba linio.
@@ -389,6 +396,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      Leciono 3.2 LA KOMANDO DE ANSTATAŬIGO
 
+
        ** Tajpu  rx  por anstataŭigi la signon ĉe la kursoro per  x . **
 
 
@@ -402,7 +410,7 @@
 
 ---> Kiem tiu lanio estis tajpita, iu pramis la naĝuftajn klovojn!
 ---> Kiam tiu linio estis tajpita, iu premis la neĝustajn klavojn!
-  
+
   5. Nun moviĝu al la leciono 3.3.
 
 Rimarko: Memoru, ke vi devus lerni per uzo, kaj ne per memorado.
@@ -411,6 +419,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        Leciono 3.3 LA OPERATORO DE ŜANĜO
 
+
               ** Por ŝanĝi ĝis la fino de la vorto, tajpu  ce . **
 
   1. Movu la kursoron ĉe la unua suba linio markita per --->.
@@ -430,7 +439,8 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          Leciono 3.4 PLIAJ ŜANĜOJ PER c
 
-        ** La operatoro de ŝanĝo uzeblas kun la sama movo ol forviŝo. **
+
+       ** La operatoro de ŝanĝo uzeblas kun la sama movo kiel forviŝo. **
 
   1. La operatoro de ŝanĝo funkcias sammaniere kiel forviŝo. La formato estas:
 
@@ -453,6 +463,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                 Leciono 3 RESUMO
 
+
   1. Por remeti tekston, kiun vi ĵus forviŝis, tajpu  p. Tio metas la
      forviŝitan tekston POST la kursoro (se linio estis forviŝita, ĝi
      iros en la linion sub la kursoro).
@@ -474,6 +485,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               Leciono 4.1: POZICIO DE KURSORO KAJ STATO DE DOSIERO
 
+
   ** Tajpu CTRL-G por montri vian pozicion en la dosiero kaj la dosierstaton.
      Tajpu  G  por moviĝi al linio en la dosiero. **
 
@@ -483,7 +495,7 @@
      Mesaĝo aperos ĉe la suba parto de la paĝo kun la dosiernomo kaj la
      pozicio en la dosiero. Memoru la numeron de la linio por paŝo 3.
 
-  RIMARKO: Vi eble vidas la pozicion de la kursoro ĉe la suba dekstra 
+  RIMARKO: Vi eble vidas la pozicion de la kursoro ĉe la suba dekstra
            angulo de la ekrano. Tio okazas kiam la agordo 'ruler' estas
            ŝaltita (vidu  :help 'ruler')
 
@@ -499,6 +511,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                         Leciono 4.2 LA KOMANDO DE SERĈO
 
+
              ** Tajpu  /  kaj poste frazon por serĉi la frazon. **
 
   1. En normala reĝimo, tajpu la  /  signon.  Rimarku, ke ĝi kaj la kursoro
@@ -524,7 +537,8 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      Leciono 4.3 SERĈO DE KONGRUAJ KRAMPOJ
 
-                 ** Tajpu  %  por trovi kongruan ), [ aŭ  } **
+
+                 ** Tajpu  %  por trovi kongruan ), ] aŭ  } **
 
   1. Poziciu la kursoron sur iun (, [ aŭ { en la linio markita per --->.
 
@@ -548,7 +562,7 @@
 
   1. Movu la kursoron al la suba linio markita per --->.
 
-  2. Tajpu  :s/laa/la <Enenklavo> .  Rimarku, ke la komando ŝanĝas nur la 
+  2. Tajpu  :s/laa/la <Enenklavo> .  Rimarku, ke la komando ŝanĝas nur la
      unuan okazaĵon de "laa" en la linio.
 
   3. Nun tajpu  :s/laa/la/g .  Aldono de  g  opcio signifas mallokan
@@ -573,7 +587,7 @@
 
   1. CTRL-G  vidigas vian pozicion en la dosiero kaj la staton de la dosiero.
             G  movas la kursoron al la fino de la dosiero.
-     numero G  movas la kursoron al tiu numero de linio.
+     numero G  movas la kursoron al numero de tiu linio.
            gg  movas la kursoron al la unua linio.
 
   2. Tajpo de  /  kaj frazon serĉas la frazon antaŭen.
@@ -595,6 +609,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    Leciono 5.1 KIEL PLENUMI EKSTERAN KOMANDON
 
+
      ** Tajpu  :!  sekvata de ekstera komando por plenumi la komandon. **
 
   1. Tajpu la konatan komandon  :  por pozicii la kursoron ĉe la suba parto
@@ -603,7 +618,7 @@
   2. Nun tajpu la  !  (krisigno) signon. Tio ebligas al vi plenumi iun
      eksteran ŝelan komandon ajn.
 
-  3. Ekzemple, tajpu  ls  post ! kaj tajpu <Enenklavo>. Tio listigos la 
+  3. Ekzemple, tajpu  ls  post ! kaj tajpu <Enenklavo>. Tio listigos la
      enhavon de la dosierujo, same kiel se vi estis en ŝela invito.
      Aŭ uzu  :!dir  se ls ne funkcias.
 
@@ -617,6 +632,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     Leciono 5.2 PLI PRI KONSERVO DE DOSIERO
 
+
    ** Por konservi la faritajn ŝanĝojn en la teksto, tajpu  :w DOSIERNOMO. **
 
   1. Tajpu  !dir  aŭ  !ls  por akiri liston de via dosierujo.
@@ -626,7 +642,7 @@
 
   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
 
-  4. Tio konservas la tutan dosieron (instruilo de Vim) per la nomo TESTO.
+  4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
      Por kontroli tion, tajpu   :!dir   aŭ   !ls   denove por vidigi vian
      dosierujon.
 
@@ -641,11 +657,12 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     Leciono 5.3 APARTIGI KONSERVENDAN TESTON
 
+
     ** Por konservi parton de la dosiero, tajpu   v  movo  :w DOSIERNOMO **
 
   1. Movu la kursoron al tiu linio.
-  
-  2. Premu  v  kaj movu la kursoron al la kvina suba ero.  Rimarku, ke la 
+
+  2. Premu  v  kaj movu la kursoron al la kvina suba ero.  Rimarku, ke la
      teksto emfaziĝas.
 
   3. Premu la  :  signon.  Ĉe la fino de la ekrano  :'<,'>  aperos.
@@ -654,10 +671,10 @@
      Kontrolu, ke vi vidas  :'<,'>w TESTO  antaŭ premi <Enenklavo>.
 
   5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
-     aŭ  :!ls  por vidigi ĝin.  Ne jam forviŝu ĝin.  Ni uzos ĝin en la
-     sekvanta leciono.
+     aŭ  :!ls  por vidigi ĝin.  Ne forviŝu ĝin.  Ni uzos ĝin en la sekvanta
+     leciono.
 
-RIMARKO: PREMO DE  v  komencas Viduman apartigon.  Vi povas movi la kursoron
+RIMARKO: Premo de  v  komencas Viduman apartigon.  Vi povas movi la kursoron
          por pligrandigi aŭ malpligrandigi la apartigon. Tiam vi povas uzi
          operatoron por plenumi ion kun la teksto.  Ekzemple,  d  forviŝas
          la tekston.
@@ -682,7 +699,7 @@
      ke estas nun du kopioj de la leciono 5.3, la originala kaj la versio mem
      de la dosiero.
 
-RIMARKO: Vi nun povas legi la eliron de ekstera komando. Ekzemple, 
+RIMARKO: Vi nun povas legi la eliron de ekstera komando. Ekzemple,
         :r !ls  legas la eliron de la komando ls kaj metas ĝin sub la
         kursoron.
 
@@ -701,7 +718,7 @@
   2.  :w DOSIERNOMO  konservas la nunan dosieron de Vim al disko kun la
       nomo DOSIERNOMO.
 
-  3.  v  movo  :w DOSIERNOMO  konservas la Viduman apartigo de linioj en
+  3.  v  movo  :w DOSIERNOMO  konservas la Viduman apartigon de linioj en
       dosiero DOSIERNOMO.
 
   4. :r DOSIERNOMO  akiras la dosieron DOSIERNOMO el la disko kaj metas
@@ -748,7 +765,7 @@
   4. Kompletigu la vorton same kiel la linio sub ĝi.  Premu <ESK> por
      eliri la Enmetan reĝimon.
 
-  5. Uzu  e  por moviĝi al la sekvanta nekompleta vorto kaj ripetu   
+  5. Uzu  e  por moviĝi al la sekvanta nekompleta vorto kaj ripetu
      paŝojn 3 kaj 4.
 
 ---> Ĉi tiu lin ebligos vin ekz vin postal tekston al linio.
@@ -804,7 +821,7 @@
      per  p .
 
 ---> a) tio estas la unua ero.
-     b) 
+     b)
 
 RIMARKO: vi povas ankaŭ uzi  y  kiel operatoro;  yw  kopias unu vorton.
 
@@ -812,7 +829,8 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Leciono 6.5 AGORDI OPCION
 
-         ** Agordu opcion por ke serĉo aŭ anstataŭgo ignoru usklecon **
+
+         ** Agordu opcion por ke serĉo aŭ anstataŭigo ignoru usklecon **
 
   1. Serĉu 'ignori' per tajpo de /ignori <Enenklavo>
      Ripetu plurfoje premante  n .
@@ -857,9 +875,11 @@
 
   7. Antaŭaldonu "no" por malŝalti la opcion:  :set noic
 
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                             Leciono 7.1 AKIRI HELPON
 
+
                           ** Uzu la helpan sistemon **
 
   Vim havas ampleksan helpan sistemon. Por komenciĝi, provu unu el la tiuj
@@ -884,22 +904,23 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        Leciono 7.2 KREI STARTAN SKRIPTON
 
-                          ** Ebligu eblecojn de Vim **
 
-  Vim havas multe pli da eblecoj ol Vi, sed la plej multaj estas defaŭlte
-  malŝaltitaj.  Por ekuzi la eblecojn, vi devas krei dosieron "vimrc.
+                         ** Ebligu kapablojn de Vim **
+
+  Vim havas multe pli da kapabloj ol Vi, sed la plej multaj estas defaŭlte
+  malŝaltitaj.  Por ekuzi la kapablojn, vi devas krei dosieron "vimrc.
 
   1. Ekredaktu la dosieron "vimrc".  Tio dependas de via sistemo:
       :e ~/.vimrc          por Unikso
       :e $VIM/_vimrc       por MS-Vindozo
 
-  2. Nun legu la enhavon de la ekzempla "vimrc" 
+  2. Nun legu la enhavon de la ekzempla "vimrc"
       :r $VIMRUNTIME/vimrc_example.vim
 
   3. Konservu la dosieron per:
       :w
 
-  La sekvanta fojo, kiam vi lanĉas Vim, ĝi uzos sintaksan emfazon.
+  La sekvantan fojon, kiam vi lanĉas Vim, ĝi uzos sintaksan emfazon.
   Vi povas aldoni ĉiujn viajn preferatajn agordojn al tiu dosiero "vimrc".
   Por pli da informoj, tajpu  :help vimrc-intro
 
@@ -907,6 +928,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              Leciono 7.3 KOMPLETIGO
 
+
              ** Kompletigo de komanda linio per CTRL-D kaj <TAB> **
 
   1. Certigu ke Vim estas en kongrua reĝimo:  :set nocp
@@ -962,6 +984,6 @@
 
   Tradukita en Esperanto de Dominique Pellé, 2008-04-01
   Retpoŝto: dominique.pelle@gmail.com
-  Lasta ŝanĝo: 2008-04-02
+  Lasta ŝanĝo: 2009-02-01
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.es b/runtime/tutor/tutor.es
index bbdb13d..bfb42e4 100644
--- a/runtime/tutor/tutor.es
+++ b/runtime/tutor/tutor.es
@@ -117,7 +117,7 @@
 			    RESUMEN DE LA LECCIÓN 1
 
 
-  1. El cursor se mueve utilizamdo las teclas de las flechas o las teclas hjkl.
+  1. El cursor se mueve utilizando las teclas de las flechas o las teclas hjkl.
 	 h (izquierda)	   j (abajo)	  k (arriba)	  l (derecha)
 
   2. Para acceder a Vim (desde el símbolo del sistema %) escriba:
diff --git a/runtime/tutor/tutor.es.utf-8 b/runtime/tutor/tutor.es.utf-8
index 7495619..84db8fd 100644
--- a/runtime/tutor/tutor.es.utf-8
+++ b/runtime/tutor/tutor.es.utf-8
@@ -117,7 +117,7 @@
 			    RESUMEN DE LA LECCIÓN 1
 
 
-  1. El cursor se mueve utilizamdo las teclas de las flechas o las teclas hjkl.
+  1. El cursor se mueve utilizando las teclas de las flechas o las teclas hjkl.
 	 h (izquierda)	   j (abajo)	  k (arriba)	  l (derecha)
 
   2. Para acceder a Vim (desde el símbolo del sistema %) escriba:
diff --git a/runtime/tutor/tutor.fr b/runtime/tutor/tutor.fr
index bc56689..e321754 100644
--- a/runtime/tutor/tutor.fr
+++ b/runtime/tutor/tutor.fr
@@ -1,5 +1,5 @@
 ===============================================================================
-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.5.fr.2 =
+= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.1 =
 ===============================================================================
 
      Vim est un éditeur très puissant qui a trop de commandes pour pouvoir
@@ -7,93 +7,100 @@
      décrire suffisamment afin de vous permettre d'utiliser simplement Vim.
 
      Le temps requis pour suivre ce cours est d'environ 25 à 30 minutes, selon
-     le temps que vous passerez à expérimenter.  Les commandes utilisées dans
-     les leçons modifieront le texte. Faites une copie de ce fichier afin de
-     vous entraîner dessus (si vous avez lancé "vimtutor" ceci est déjà une
-     copie).
+     le temps que vous passerez à expérimenter.
+
+     ATTENTION :
+     Les commandes utilisées dans les leçons modifieront le texte. Faites une
+     copie de ce fichier afin de vous entraîner dessus (si vous avez lancé
+     "vimtutor" ceci est déjà une copie).
 
      Il est important de garder en tête que ce cours est conçu pour apprendre
-     par la pratique.  Cela signifie que vous devez exécuter les commandes
-     pour les apprendre correctement.  Si vous vous contentez de lire le
-     texte, vous oublierez les commandes !
+     par la pratique. Cela signifie que vous devez exécuter les commandes
+     pour les apprendre correctement. Si vous vous contentez de lire le texte,
+     vous oublierez les commandes !
 
-     Maintenant, vérifiez que votre clavier n'est PAS verouillé en majuscules,
-     et appuyez la touche  j  le nombre de fois suffisant pour que la leçon
-     1.1 remplisse complètement l'écran.
+     Maintenant, vérifiez que votre clavier n'est PAS verrouillé en
+     majuscules, et appuyez la touche  j  le nombre de fois suffisant pour
+     que la Leçon 1.1 remplisse complètement l'écran.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      Leçon 1.1 : DÉPLACEMENT DU CURSEUR
+                      Leçon 1.1 : DÉPLACEMENT DU CURSEUR
 
 
   ** Pour déplacer le curseur, appuyez les touches h,j,k,l comme indiqué. **
-	    ^
-	    k	     Astuce:  La touche h est à gauche et déplace à gauche.
-      < h      l >	      La touche l est à droite et déplace à droite.
-	   j		      La touche j ressemble à une flèche vers le bas.
-	   v
+          ^
+          k        Astuce :  La touche h est à gauche et déplace à gauche.
+    < h       l >            La touche l est à droite et déplace à droite.
+          j                  La touche j ressemble à une flèche vers le bas.
+          v
   1. Déplacez le curseur sur l'écran jusqu'à vous sentir à l'aise.
 
   2. Maintenez la touche Bas (j) enfoncée jusqu'à ce qu'elle se répète.
----> Maintenant vous êtes capable de vous déplacer jusqu'à la leçon suivante.
+     Maintenant vous êtes capable de vous déplacer jusqu'à la leçon suivante.
 
   3. En utilisant la touche Bas, allez à la Leçon 1.2.
 
-Note: Si jamais vous doutez de ce que vous venez de taper, appuyez <Échap>
-      pour revenir en mode Normal. Puis retapez la commande que vous vouliez.
+NOTE : Si jamais vous doutez de ce que vous venez de taper, appuyez <Échap>
+       pour revenir en mode Normal. Puis retapez la commande que vous vouliez.
 
-Note: Les touches fléchées devraient également fonctionner. Mais en utilisant
-      hjkl vous pourrez vous déplacer beaucoup plus rapidement, une fois que
-      vous aurez pris l'habitude.
+NOTE : Les touches fléchées devraient également fonctionner. Mais en utilisant
+       hjkl vous pourrez vous déplacer beaucoup plus rapidement, une fois que
+       vous aurez pris l'habitude.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Leçon 1.2 : ENTRÉE ET SORTIE DE VIM
+                     Leçon 1.2 : SORTIR DE VIM
 
 
- !! NOTE: Avant d'effectuer les étapes ci-dessous, lisez toute cette leçon !!
+ !! NOTE : Avant d'effectuer les étapes ci-dessous, lisez toute cette leçon !!
 
-  1. Appuyez la touche	<Échap>  (pour être sûr d'être en mode Normal).
+  1. Appuyez la touche  <Échap>  (pour être sûr d'être en mode Normal).
 
-  2. Tapez:			:q! <Entrée>
+  2. Tapez :  :q! <Entrée>
+     Ceci quitte l'éditeur SANS enregistrer les changements que vous avez
+     faits.
 
----> Ceci quitte l'éditeur SANS sauver les changements que vous avez faits.
-     Si vous voulez enregistrer les changements et sortir, tapez:
-				:wq <Entrée>
-
-  3. Lorsque l'invite du 'shell' vous sera présentée, tapez la commande qui
-     vous a amené dans ce tutoriel.  Cela pourrait être:    vimtutor <Entrée>
-     Normalement, vous utiliseriez:			    vim tutor <Entrée>
-
----> 'vim' lance l'éditeur, 'tutor' est le fichier que vous souhaitez éditer.
+  3. Lorsque l'invite du shell vous sera présentée, tapez la commande qui
+     vous a mené dans ce tutoriel. Cela pourrait être :    vimtutor <Entrée>
 
   4. Si vous avez mémorisé ces étapes et êtes confiant, effectuez les étapes
-     1 à 3 pour sortir puis rentrer dans l'éditeur.  Déplacez ensuite le
-      curseur jusqu'à la Leçon 1.3.
+     1 à 3 pour sortir puis rentrer dans l'éditeur.
+
+NOTE :  :q! <Entrée> annule tous le changements que vous avez fait. Dans
+         quelques leçons, vous apprendrez à enregistrer les changements.
+
+  5. Déplacez le curseur à la Leçon 1.3.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Leçon 1.3 : ÉDITION DE TEXTE - EFFACEMENT
+                  Leçon 1.3 : ÉDITION DE TEXTE - EFFACEMENT
 
 
- ** En mode Normal, appuyez  x	pour effacer le caractère sous le curseur. **
+         ** Appuyez   x   pour effacer le caractère sous le curseur. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
   2. Pour corriger les erreurs, déplacez le curseur jusqu'à ce qu'il soit
      sur un caractère à effacer.
 
-  3. Appuyez la touche	x  pour effacer le caractère redondant.
+  3. Appuyez la touche  x  pour effacer le caractère redondant.
 
   4. Répétez les étapes 2 à 4 jusqu'à ce que la phrase soit correcte.
 
 ---> La vvache à sautéé au-ddessus dde la luune.
 
-  5. Maintenant que la ligne est correcte, passez à la leçon 1.4.
+  5. Maintenant que la ligne est correcte, passez à la Leçon 1.4.
 
-NOTE: En avançant dans ce cours, n'essayez pas de mémoriser, apprenez par
-      la pratique.
+NOTE : En avançant dans ce cours, n'essayez pas de mémoriser, apprenez par
+       la pratique.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Leçon 1.4 : ÉDITION DE TEXTE - INSERTION
+                    Leçon 1.4 : ÉDITION DE TEXTE - INSERTION
 
 
-	   ** En mode Normal, appuyez  i  pour insérer du texte. **
+                    ** Appuyez  i  pour insérer du texte. **
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
 
@@ -108,38 +115,94 @@
 ---> Il mnqe caractères cette .
 ---> Il manque des caractères dans cette ligne.
 
-  5. Une fois que vous êtes à l'aise avec l'insertion de texte, allez au
-     résumé ci-dessous.
+  5. Une fois que vous êtes à l'aise avec l'insertion de texte, allez à la
+     Leçon 1.5.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 1
+                     Leçon 1.5 : ÉDITION DE TEXTE - AJOUTER
+
+
+                    ** Appuyez  A  pour ajouter du text. **
+
+  1. Déplacez le curseur sur la première ligne ci-dessous marquée --->.
+     Peu importe sur quel caractère se trouve le curseur sur cette ligne.
+
+  2. Appuyez  A  et tapez les ajouts nécessaires.
+
+  3. Quand le texte a été ajouté, appuyez <Échap> pour revenir en mode
+     Normal.
+
+  4. Déplacez le curseur sur la seconde ligne marquée ---> et répétez les
+     étapes 2 et 3 pour corriger la phrase.
+
+---> Il manque du texte à partir de cet
+     Il manque du texte à partir de cette ligne.
+---> Il manque aussi du te
+     Il manque aussi du texte ici.
+
+  5. Quand vous vous sentez suffisamment à l'aise pour ajouter du texte,
+     allez à la Leçon 1.6.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leçon 1.6 : ÉDITER UN FICHIER
+
+
+          ** Utilisez  :wq  pour enregistrer un fichier et sortir. **
+
+!! NOTE : Lisez toute la leçon avant d'exécuter les instructions ci-dessous !!
+
+  1. Sortez de ce tutoriel comme vous l'avez fait dans la Leçon 1.2 :  :q!
+     Ou, si vous avez accès à un autre terminal, exécutez y les actions
+     qui suivent.
+
+  2. À l'invite du shell, tapez cette commande :  vim tutor <Entrée>
+     'vim' est la commande pour démarrer l'éditeur Vim, 'tutor' est le
+     nom du fichier que vous souhaitez éditer. Utilisez un fichier qui peut
+     être modifié.
+
+  3. Insérez et effacez du texte comme vous l'avez appris dans les leçons
+     précédentes.
+
+  4. Enregistrez le fichier avec les changements et sortez de Vim avec :
+       :wq <Entrée>
+
+  5. Si vous avez quitté vimtutor à l'étape 1, recommencez vimtutor et
+     déplacez-vous en bas vers le résumé suivant.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                             RÉSUMÉ DE LA LEÇON 1
+
 
   1. Le curseur se déplace avec les touches fléchées ou les touches hjkl.
-	 h (gauche)	j (bas)        k (haut)       l (droite)
+           h (gauche)      j (bas)      k (haut)      l (droite)
 
-  2. Pour entrer dans Vim (à l'invite %) tapez:  vim FICHIER <Entrée>
+  2. Pour démarrer Vim à l'invite du shell tapez :  vim FICHIER <Entrée>
 
-  3. Pour quitter Vim tapez:  <Échap> :q! <Entrée>  pour perdre tous les
-						    changements.
-		   OU tapez:  <Échap> :wq <Entrée>  pour enregistrer les
-						    changements.
+  3. Pour quitter Vim tapez :  <Échap> :q! <Entrée>  pour perdre tous les
+                                                     changements.
+                   OU tapez :  <Échap> :wq <Entrée>  pour enregistrer les
+                                                     changements.
 
-  4. Pour effacer un caractère sous le curseur en mode Normal tapez:  x
+  4. Pour effacer un caractère sous le curseur tapez :  x
 
-  5. Pour insérer du texte au niveau du curseur en mode Normal tapez:
-	 i   tapez le texte   <Échap>
+  5. Pour insérer ou ajouter du texte tapez :
+         i   tapez le texte à insérer avant le curseur   <Échap>
+         A   tapez le texte à ajouter après le curseur   <Échap>
 
-NOTE: Appuyer  <Échap>	vous place en mode Normal ou annule une commande
-      partiellement tapée dont vous ne voudriez plus.
+NOTE : Appuyer  <Échap>  vous place en mode Normal ou annule une commande
+       partiellement tapée dont vous ne voulez plus.
 
-Passez maintenant à la Leçon 2.
+Passez maintenant à la leçon 2.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			   Leçon 2.1 : EFFACEMENTS
+                       Leçon 2.1 : COMMANDES D'EFFACEMENT
 
 
-	    ** Tapez  dw  pour effacer jusqu'à la fin d'un mot. **
+                     ** Tapez  dw  pour effacer un mot. **
 
   1. Appuyez  <Échap>  pour être sûr d'être en mode Normal.
 
@@ -147,91 +210,139 @@
 
   3. Placez le curseur sur le début d'un mot qui a besoin d'être effacé.
 
-  4. Tapez  dw	pour faire disparaître ce mot.
+  4. Tapez  dw  pour faire disparaître ce mot.
 
-NOTE: Les lettres  dw  apparaîtront sur la dernière ligne de l'écran lors de
-      votre frappe. Si vous avez mal tapé quelque chose, appuyez <Échap> et
-      recommencez.
+NOTE : La lettre  d  apparaîtra sur la dernière ligne de l'écran lors de
+       votre frappe. Vim attend que vous tapiez  w . Si vous voyez un autre
+       caractère que  d  vous avez tapé autre chose ; appuyez <Échap> et
+       recommencez.
 
 ---> Il y a quelques drôle mots qui n'ont rien à faire papier sur cette ligne.
 
   5. Répétez les étapes 3 et 4 jusqu'à ce que la phrase soit correcte et allez
      à la Leçon 2.2.
 
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Leçon 2.2 : PLUS D'EFFACEMENTS
+                  Leçon 2.2 : PLUS DE COMMANDES D'EFFACEMENTS
 
 
-	  ** Tapez  d$	pour effacer jusqu'à la fin de la ligne. **
+          ** Tapez  d$  pour effacer jusqu'à la fin de la ligne. **
 
   1. Appuyez  <Échap>  pour être sûr d'être en mode Normal.
 
   2. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
-  3. Déplacez le curseur jusqu'à la fin correcte de la ligne
-     (APRÈS le premier . ).
+  3. Déplacez le curseur jusqu'à la fin de la ligne correcte (APRÈS le
+     premier . ).
 
-  4. Tapez  d$	pour effacer jusqu'à la fin de la ligne.
+  4. Tapez  d$  pour effacer jusqu'à la fin de la ligne.
 
 ---> Quelqu'un a tapé la fin de cette ligne deux fois. cette ligne deux fois.
 
   5. Allez à la Leçon 2.3 pour comprendre ce qui se passe.
 
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+             Leçon 2.3 : À PROPOS DES OPÉRATEURS ET DES MOUVEMENTS
 
 
+  Plusieurs commandes qui changent le texte sont constituées d'un opérateur
+  et d'un mouvement. Le format pour une commande d'effacement avec l'opérateur
+  d  d'effacement est le suivant :
+
+        d   mouvement
+
+  Où :
+    d         - est l'opérateur d'effacement
+    mouvement - est le mouvement sur lequel agit l'opérateur (listés
+                ci-dessous)
+
+  Une courte liste de mouvements :
+    w - jusqu'au début du prochain mot, en EXCLUANT son premier caractère.
+    e - jusqu'à la fin du mot courant, en EXCLUANT son denier caractère.
+    $ - jusqu'à la fin de la ligne, en INCLUANT son dernier caractère.
+
+  Ainsi, taper  de  va effacer depuis le curseur jusqu'à la fin du mot.
+
+NOTE : Le seul appui d'un mouvement en mode Normal, sans commande, déplace le
+       curseur comme indiqué.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Leçon 2.3 : DES COMMANDES ET DES OBJETS
+            Leçon 2.4 : UTILISER UN QUANTIFICATEUR AVEC UN MOUVEMENT
 
 
-  Le format de la commande d'effacement  d  est le suivant:
+       ** Taper un nombre avant un mouvement le répète autant de fois. **
 
-	 [nombre]  d  objet	   OU	     d	[nombre]  objet
-  où:
-    nombre - est combien de fois exécuter la commande (optionnel, défaut: 1).
-    d - est la commande d'effacement.
-    objet - est ce sur quoi la commande va opérer (liste ci-dessous).
+  1. Déplacez le curseur au début de la ligne marquée ---> ci-dessous.
 
-  Une courte liste d'objets:
-    w - du curseur jusqu'à la fin du mot, y compris l'espace qui suit.
-    e - du curseur jusqu'à la fin du mot, SANS l'espace qui suit.
-    $ - du curseur jusqu'à la fin de la ligne.
+  2. Tapez  2w  pour déplacer le curseur de 2 mots vers l'avant.
 
-NOTE: Pour les aventureux, le seul appui d' objet  en mode Normal, sans
-      commande, déplace le curseur comme indiqué dans la liste des objets.
+  3. Tapez  3e  pour déplacer le curseur à la fin du troisième mot vers
+     l'avant.
 
+  4. Tapez  0  (zéro) pour déplacer au début de la ligne.
 
+  5. Répétez les étapes 2 et 3 avec des quantificateurs différents.
+
+---> Ceci est juste une ligne avec des mots où vous pouvez vous déplacer.
+
+  6. Déplacez-vous à la Leçon 2.5.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		 Leçon 2.4 : UNE EXCEPTION À 'COMMANDE-OBJET'
+            Leçon 2.5 : UTILISER UN QUANTIFICATEUR POUR EFFACER PLUS
 
-	      ** Tapez	dd  pour effacer une ligne complète. **
+
+       ** Taper un nombre avec un opérateur le répète autant de fois. **
+
+  Outre la combinaison de l'opérateur d'effacement avec un déplacement
+  mentionné ci-dessus, vous pouvez insérer un nombre (quantificateur)
+  pour effacez encore plus :
+       d   nombre   déplacement
+
+  1. Déplacez le curseur vers le premier mot en MAJUSCULES dans la ligne
+     marquée --->.
+
+  2. Tapez  d2w  pour effacer les deux mots en MAJUSCULES.
+
+  3. Répétez les étapes 1 et 2 avec des quantificateurs différents pour
+     effacer les mots suivants en MAJUSCULES à l'aide d'une commande.
+
+---> Cette ABC DE ligne FGHI JK LMN OP de mots est Q RS TUV nettoyée.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leçon 2.6 : OPÉREZ SUR DES LIGNES
+
+
+              ** Tapez   dd   pour effacer une ligne complète. **
 
   Vu le nombre de fois où l'on efface des lignes complètes, les concepteurs
-  de Vi ont décidé qu'il serait plus facile de taper simplement deux d à la
-  suite pour effacer une ligne.
+  de Vi ont décidé qu'il serait plus facile de taper simplement deux  d
+  pour effacer une ligne.
 
   1. Placez le curseur sur la seconde ligne de la phrase ci-dessous.
-  2. Tapez  dd	pour effacer la ligne.
+  2. Tapez  dd  pour effacer la ligne.
   3. Maintenant allez à la quatrième ligne.
-  4. Tapez  2dd  (rappelez-vous, nombre-commande-objet) pour effacer les
-     deux lignes.
+  4. Tapez   2dd   pour effacer deux lignes.
 
-      1)  Les roses sont rouges,
-      2)  La boue c'est drôle,
-      3)  Les violettes sont bleues,
-      4)  J'ai une voiture,
-      5)  Les horloges donnent l'heure,
-      6)  Le sucre est doux
-      7)  Tout comme vous.
+--->  1)  Les roses sont rouges,
+--->  2)  La boue c'est drôle,
+--->  3)  Les violettes sont bleues,
+--->  4)  J'ai une voiture,
+--->  5)  Les horloges donnent l'heure,
+--->  6)  Le sucre est doux
+--->  7)  Tout comme vous.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			    Leçon 2.5 : L'ANNULATION
+                            Leçon 2.7 : L'ANNULATION
 
-	    ** Tapez  u  pour annuler les dernières commandes. **
-	       ** Tapez  U  pour récupérer toute une ligne. **
+
+            ** Tapez  u  pour annuler les dernières commandes. **
+               ** Tapez  U  pour récupérer toute une ligne. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous et placez-le sur
      la première erreur.
@@ -239,10 +350,10 @@
   3. Puis tapez  u  pour annuler la dernière commande exécutée.
   4. Cette fois, corrigez toutes les erreurs de la ligne avec la commande  x .
   5. Puis tapez un  U  majuscule pour remettre la ligne dans son état initial.
-  6. Puis tapez  u  deux-trois fois pour annuler le  U	et les commandes
+  6. Puis tapez  u  deux-trois fois pour annuler le  U  et les commandes
      précédentes.
-  7. Maintenant tapez  Ctrl-R  (maintenez la touche Ctrl enfoncée pendant que
-     vous appuyez sur R) deux-trois fois pour refaire les commandes (annuler
+  7. Maintenant tapez  CTRL-R  (maintenez la touche CTRL enfoncée pendant que
+     vous appuyez R) deux-trois fois pour refaire les commandes (annuler
      les annulations).
 
 ---> Coorrigez les erreurs suur ccette ligne et reemettez-les avvec 'annuler'.
@@ -250,57 +361,64 @@
   8. Ce sont des commandes très utiles. Maintenant, allez au résumé de la
      Leçon 2.
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 2
-
-
-  1. Pour effacer du curseur jusqu'à la fin d'un mot tapez:	dw
-
-  2. Pour effacer du curseur jusqu'à la fin d'une ligne tapez:	d$
-
-  3. Pour effacer toute une ligne tapez:  dd
-
-  4. Le format d'une commande en mode Normal est:
-
-       [nombre]  commande  objet     OU     commande  [nombre]	objet
-     où:
-       nombre - est combien de fois répéter la commande
-       commande - est ce qu'il faut faire, par exemple	d  pour effacer
-       objet - est ce sur quoi la commande devrait agir, par exemple w (mot),
-	       $ (jusqu'à la fin de la ligne), etc.
-
-  5. Pour annuler des actions précédentes, tapez:	     u	(u minuscule)
-     Pour annuler tous les changements sur une ligne tapez:  U	(U majuscule)
-     Pour annuler l'annulation tapez:			     Ctrl-R
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     Leçon 3.1 : LE COLLAGE
+                             RÉSUMÉ DE LA LEÇON 2
 
 
-   ** Tapez  p	pour placer après le curseur ce qui vient d'être effacé. **
+  1. Pour effacer du curseur jusqu'au mot suivant tapez :         dw
 
-  1. Placez le curseur sur la première ligne du "poème" ci-dessous.
+  2. Pour effacer du curseur jusqu'à la fin d'une ligne tapez :   d$
 
-  2. Tapez  dd	pour effacer la ligne et la placer dans le tampon de Vim.
+  3. Pour effacer toute une ligne tapez :                         dd
 
-  3. Déplacez le curseur sur la ligne qui PRÉCÈDE l'endroit où vous voulez
-     remettre la ligne effacée.
+  4. Pour répéter un déplacement ajoutez un quantificateur :      2w
 
-  4. En mode Normal, tapez  p  pour remettre la ligne.
+  5. Le format d'une commande de changement est :
+
+       opérateur   [nombre]   déplacement
+
+     Où :
+       opérateur   - est ce qu'il faut faire, comme  d  pour effacer.
+       [nombre]    - un quantificateur optionnel pour répéter le déplacement.
+       déplacement - déplace le long du texte à opérer, tel que  w  (mot),
+                     $ (jusqu'à la fin de ligne), etc.
+
+  6. Pour se déplacer au début de ligne, utilisez un zéro :  0
+
+  5. Pour annuler des actions précédentes, tapez :            u (u minuscule)
+     Pour annuler tous les changements sur une ligne tapez :  U (U majuscule)
+     Pour annuler l'annulation tapez :                        CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                             Leçon 3.1 : LE COLLAGE
+
+
+   ** Tapez  p  pour placer après le curseur ce qui vient d'être effacé. **
+
+  1. Placez le curseur sur la première ligne ci-dessous marquée --->.
+
+  2. Tapez  dd  pour effacer la ligne et la placer dans un registre de Vim.
+
+  3. Déplacez le curseur sur la ligne c) au dessus où vous voulez remettre la
+     ligne effacée.
+
+  4. En mode Normal, tapez   p   pour remettre la ligne en dessous du curseur.
 
   5. Répétez les étapes 2 à 4 pour mettre toutes les lignes dans le bon ordre.
 
-     d) Et vous, qu'apprenez-vous ?
-     b) Les violettes sont bleues,
-     c) L'intelligence s'apprend,
-     a) Les roses sont rouges,
+---> d) Et vous, qu'apprenez-vous ?
+---> b) Les violettes sont bleues,
+---> c) L'intelligence s'apprend,
+---> a) Les roses sont rouges,
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Leçon 3.2 : LE REMPLACEMENT
+                    Leçon 3.2 : LA COMMANDE DE REMPLACEMENT
 
 
- ** Tapez  r  et un caractère pour remplacer le caractère sous le curseur. **
+     ** Tapez  rx  pour remplacer un caractère sous le curseur par  x . **
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
 
@@ -308,31 +426,32 @@
 
   3. Tapez  r  suivi du caractère qui doit corriger l'erreur.
 
-  4. Répétez les étapes 2 et 3 jusqu'à ce que la première ligne soit correcte.
+  4. Répétez les étapes 2 et 3 jusqu'à ce que la première ligne soit égale
+     à la seconde.
 
 --->  Quand cette ligne a été sauvie, quelqu'un a lait des faunes de frappe !
 --->  Quand cette ligne a été saisie, quelqu'un a fait des fautes de frappe !
 
   5. Maintenant, allez à la Leçon 3.3.
 
-NOTE: N'oubliez pas que vous devriez apprendre par la pratique, pas par
-      mémorisation.
+NOTE : N'oubliez pas que vous devriez apprendre par la pratique, pas par
+       mémorisation.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			  Leçon 3.3 : LE CHANGEMENT
+                     Leçon 3.3 : L'OPÉRATEUR DE CHANGEMENT
 
 
-	    ** Pour changer tout ou partie d'un mot, tapez  cw .**
+            ** Pour changer jusqu'à la fin d'un mot, tapez  ce .**
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
 
-  2. Placez le curseur sur le u de luhko.
+  2. Placez le curseur sur le  u  de luhko.
 
-  3. Tapez  cw	et corrigez le mot (dans notre cas, tapez  'igne'.)
+  3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
 
-  4. Appuyez <Échap> et placez-vous sur l'erreur suivante (le premier
-     caractère qui doit être changé).
+  4. Appuyez <Échap> et placez-vous sur le prochain caractère qui doit
+     être changé).
 
   5. Répétez les étapes 3 et 4 jusqu'à ce que la première phrase soit
      identique à la seconde.
@@ -340,171 +459,189 @@
 ---> Cette luhko contient quelques myqa qui ont ricne d'être chantufip.
 ---> Cette ligne contient quelques mots qui ont besoin d'être changés.
 
-Notez que  cw  efface le mot et vous place ensuite en mode Insertion.
+Notez que  ce  efface le mot et vous place ensuite en mode Insertion.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Leçon 3.4 : PLUS DE CHANGEMENTS AVEC c
+                    Leçon 3.4 : PLUS DE CHANGEMENTS AVEC c
 
 
-    ** Le changement fonctionne avec les mêmes objets que l'effacement. **
+    ** L'opérateur de changement fonctionne avec les mêmes déplacements
+       que l'effacement. **
 
-  1. Le changement fonctionne de la même manière que l'effacement.
-     Le format est:
+  1. L'opérateur de changement fonctionne de la même manière que
+     l'effacement. Le format est :
 
-	 [nombre]  c  objet	   OU	     c	[nombre]  objet
+         c   [nombre]   déplacement
 
-  2. Les objets sont également les mêmes:  w (mot), $ (fin de ligne), etc.
+  2. Les déplacements sont identiques :  w (mot) et  $ (fin de ligne).
 
-  3. Déplacez-vous à la première ligne marquée ---> ci-dessous.
+  3. Déplacez-vous sur la première ligne marquée ---> ci-dessous.
 
   4. Placez le curseur sur la première erreur.
 
-  5. Tapez  c$	pour changer la fin de la ligne, rendez-là identique à la
-     seconde ligne, puis tapez <Échap>.
+  5. Tapez  c$  et tapez le reste de la ligne afin qu'elle soit identique
+     à la seconde ligne, puis tapez <Échap>.
 
 ---> La fin de cette ligne doit être rendue identique à la seconde.
----> La fin de cette ligne doit être corrigée avec la commande	c$ .
+---> La fin de cette ligne doit être corrigée avec la commande  c$ .
+
+NOTE :  Vous pouvez utilisez la touche Retour Arrière pour corriger les
+        erreurs lorsque vous tapez.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 3
+                             RÉSUMÉ DE LA LEÇON 3
 
 
-  1. Pour remettre du texte qui vient d'être effacé, tapez  p . Cela Place le
+  1. Pour remettre le texte qui a déjà été effacé, tapez  p . Cela Place le
      texte effacé APRÈS le curseur (si une ligne complète a été effacée, elle
      sera placée sous la ligne du curseur).
 
   2. Pour remplacer le caractère sous le curseur, tapez  r  suivi du caractère
      qui remplacera l'original.
 
-  3. Le changement vous permet de changer l'objet spécifié, du curseur jusqu'à
-     la fin de l'objet. Par exemple, tapez  cw	pour changer du curseur
-     jusqu'à la fin du mot,  c$  pour changer jusqu'à la fin d'une ligne.
+  3. L'opérateur de changement vous permet de changer depuis la position du
+     curseur jusqu'où le déplacement vous amène. Par exemple, tapez  ce
+     pour changer du curseur jusqu'à la fin du mot,  c$  pour changer jusqu'à
+     la fin d'une ligne.
 
-  4. Le format pour le changement est:
+  4. Le format pour le changement est :
 
-	 [nombre]  c  objet	   OU	     c	[nombre]  objet
+         c   [nombre]   déplacement
 
 Passez maintenant à la leçon suivante.
 
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Leçon 4.1 : POSITION ET ÉTAT DU FICHIER
+               Leçon 4.1 : POSITION DU CURSEUR ET ÉTAT DU FICHIER
 
 
-  ** Tapez Ctrl-G pour afficher votre position dans le fichier et son état.
-     Utilisez Maj-G pour vous rendre à une ligne donnée du fichier. **
+  ** Tapez CTRL-G pour afficher votre position dans le fichier et son état.
+     Tapez  G  pour vous rendre à une ligne donnée du fichier. **
 
-  Note: Lisez toute cette leçon avant d'effectuer l'une des étapes !
+NOTE : Lisez toute cette leçon avant d'effectuer l'une des étapes !!
 
-  1. Maintenez enfoncée la touche Ctrl et appuyez sur  G .  Une ligne d'état
-     va apparaître en bas de l'écran avec le nom du fichier et le numéro de la
-     ligne où vous êtes.  Notez ce numéro, il servira lors de l'étape 3.
+  1. Maintenez enfoncée la touche CTRL et appuyez sur  g . On appelle cela
+     CTRL-G. Une ligne d'état va apparaître en bas de l'écran avec le nom
+     du fichier et le numéro de la ligne où vous êtes. Notez ce numéro, il
+     servira lors de l'étape 3.
 
-  2. Tapez  G  majuscule (Maj-G) pour vous rendre à la fin du fichier.
+NOTE : Vous pouvez peut-être voir le curseur en bas à droite de l'écran.
+       Ceci arrive quand l'option 'ruler' est activée (voir  :help 'ruler')
 
-  3. Tapez le numéro de la ligne où vous étiez suivi de Maj-G.	Cela vous
-     ramènera à la ligne où vous étiez au départ.
-     (Lorsque vous tapez les chiffres, ils n'apparaissent PAS à l'écran).
+  2. Tapez  G   pour vous déplacer à la fin du fichier.
+     Tapez  gg  pour vous déplacer au début du fichier.
+
+  3. Tapez le numéro de la ligne où vous étiez suivi de   G . Cela vous
+     ramènera à la ligne où vous étiez au départ quand vous aviez appuyé
+     CTRL-G.
 
   4. Si vous vous sentez prêt à faire ceci, effectuez les étapes 1 à 3.
 
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			    Leçon 4.2 : LA RECHERCHE
+                            Leçon 4.2 : LA RECHERCHE
 
 
-	  ** Tapez  /  suivi d'un texte pour rechercher ce texte. **
+          ** Tapez  /  suivi d'un texte pour rechercher ce texte. **
 
   1. Tapez le caractère  /  en mode Normal. Notez que celui-ci et le curseur
      apparaissent en bas de l'écran, comme lorsque l'on utilise  : .
 
-  2. Puis tapez 'errreuur' <Entrée>.  C'est le mot que vous voulez rechercher.
+  2. Puis tapez 'errreuur' <Entrée>. C'est le mot que vous voulez rechercher.
 
-  3. Pour rechercher à nouveau le même texte, tapez simplement	n .
-     Pour rechercher le même texte dans la direction opposée, tapez  Maj-N .
+  3. Pour rechercher à nouveau le même texte, tapez simplement  n .
+     Pour rechercher le même texte dans la direction opposée, tapez  N .
 
-  4. Si vous voulez rechercher un texte vers le haut du fichier, utilisez  ?
-     à la place de  / .
+  4. Pour rechercher une phrase dans la direction opposée, utilisez  ?
+     au lieu de  / .
 
----> erreur ne s'écrit pas "errreuur"; errreuur est une erreur.
+---> erreur ne s'écrit pas "errreuur" ; errreuur est une erreur.
 
-Note: Quand la recherche atteint la fin du fichier, elle reprend au début.
-
+NOTE : Quand la recherche atteint la fin du fichier, elle reprend au début
+       sauf si l'option 'wrapscan' est déactivée.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	    Leçon 4.3 : RECHERCHE DES PARENTHÈSES CORRESPONDANTES
+            Leçon 4.3 : RECHERCHE DES PARENTHÈSES CORRESPONDANTES
 
 
-	   ** Tapez  %	pour trouver des ), ] ou } correspondants. **
+           ** Tapez  %  pour trouver des ), ] ou } correspondants. **
 
   1. Placez le curseur sur l'un des (, [ ou { de la ligne marquée --->
      ci-dessous.
 
   2. Puis tapez le caractère  % .
 
-  3. Le curseur devrait se placer sur la parenthèse correspondante.
+  3. Le curseur se déplacera sur la parenthèse out crochet correspondant.
 
-  4. Tapez  %  pour replacer le curseur sur l'autre parenthèse.
+  4. Tapez  %  pour replacer le curseur sur la parenthèse ou crochet
+     correspondant.
+
+  5. Déplacez le curseur sur un autre (,),[,],{ ou } et regardez ce que
+     fait  % .
 
 ---> Voici ( une ligne de test contenant des (, des [ ] et des { } )).
 
-Note: Cette fonctionnalité est très utile lors du débogage d'un programme qui
-      contient des parenthèses déséquilibrées !
-
-
+NOTE : Cette fonctionnalité est très utile lors du débogage d'un programme qui
+       contient des parenthèses déséquilibrées !
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Leçon 4.4 : UNE MANIÈRE DE CORRIGER LES ERREURS
+                    Leçon 4.4 : LA COMMANDE DE SUBSTITUTION
 
 
-  ** Tapez  :s/ancien/nouveau/g  pour remplacer 'ancien' par 'nouveau'.  **
+    ** Tapez  :s/ancien/nouveau/g  pour remplacer 'ancien' par 'nouveau'. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
   2. Tapez  :s/lee/le <Entrée> . Notez que cette commande change seulement la
-     première occurence sur la ligne.
+     première occurrence de "lee" dans la ligne.
 
-  3. Puis tapez  :s/lee/le/g  qui ordonne de faire une substitution globale
-     sur la ligne. Cela change toutes les occurences sur la ligne
+  3. Puis tapez  :s/lee/le/g . L'ajout du drapeau  g  ordonne de faire une
+     substitution globale sur la ligne, et change toutes les occurrences de
+     "lee" sur la ligne.
 
----> lee meilleur moment pour regarder lees fleurs est pendant lee Printemps.
+---> lee meilleur moment pour regarder lees fleurs est pendant lee printemps.
 
-  4. Pour changer toutes les occurences d'un texte, entre deux lignes,
-     tapez  :#,#s/ancien/nouveau/g  où #,# sont les numéros des deux lignes.
-     Tapez  :%s/ancien/nouveau/g    pour changer chaque occurence dans tout
-				    le fichier.
+  4. Pour changer toutes les occurrences d'un texte, entre deux lignes,
+     tapez  :#,#s/ancien/nouveau/g  où #,# sont les numéros de lignes de la
+                                    plage où la substitution doit être faite.
+     Tapez  :%s/ancien/nouveau/g    pour changer toutes les occurrences dans
+                                    tout le fichier.
+     Tapez  :%s/ancien/nouveau/gc   pour trouver toutes les occurrences dans
+                                    tout le fichier avec une invite pour
+                                    confirmer ou infirmer chaque substitution.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 4
+                             RÉSUMÉ DE LA LEÇON 4
 
 
-  1. Ctrl-G  affiche votre position dans le fichier et l'état de celui-ci.
-     Maj-G  vous place à la fin du fichier. Un numéro de ligne suivi de Maj-G
-     vous place à cette ligne.
+  1. CTRL-G       affiche la position dans le fichier et l'état de celui-ci.
+               G  déplace à la fin du fichier.
+     nombre    G  déplace au numéro de ligne.
+              gg  déplace à la première ligne.
 
   2. Taper  /  suivi d'un texte recherche ce texte vers l'AVANT.
      Taper  ?  suivi d'un texte recherche ce texte vers l'ARRIÈRE.
-     Après une recherche tapez	n  pour trouver l'occurence suivante dans la
-     même direction ou	Maj-N  pour rechercher dans la direction opposée.
+     Après une recherche tapez  n  pour trouver l'occurrence suivante dans la
+     même direction ou  Maj-N  pour rechercher dans la direction opposée.
 
   3. Taper  %  lorsque le curseur est sur  (, ), [, ], { ou }  déplace
      celui-ci sur le caractère correspondant.
 
-  4. Pour remplacer le premier aa par bb sur une ligne tapez	 :s/aa/bb
-     Pour remplacer tous les aa par bb sur une ligne tapez	 :s/aa/bb/g
-     Pour remplacer du texte entre deux numéros de ligne tapez	 :#,#s/aa/bb/g
-     Pour remplacer toutes les occurences dans le fichier tapez  :%s/aa/bb/g
-     Pour demander une confirmation à chaque fois ajoutez 'c'	 :%s/aa/bb/gc
+  4. Pour remplacer le premier aa par bb sur une ligne tapez     :s/aa/bb
+     Pour remplacer tous les aa par bb sur une ligne tapez       :s/aa/bb/g
+     Pour remplacer du texte entre deux numéros de ligne tapez   :#,#s/aa/bb/g
+     Pour remplacer toutes les occurrences dans le fichier tapez :%s/aa/bb/g
+     Pour demander une confirmation à chaque fois ajoutez 'c'    :%s/aa/bb/gc
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	      Leçon 5.1 : COMMENT EXÉCUTER UNE COMMANDE EXTERNE
+              Leçon 5.1 : COMMENT EXÉCUTER UNE COMMANDE EXTERNE
 
 
  ** Tapez  :!  suivi d'une commande externe pour exécuter cette commande. **
@@ -516,294 +653,386 @@
      n'importe quelle commande valide pour votre interpréteur (shell).
 
   3. Par exemple, tapez  ls  après le  !  et appuyez <Entrée>. Ceci affichera
-     la liste des fichiers du dossier courant, comme si vous aviez tapé la
-     commande à l'invite du shell. Utilisez  :!dir  si	:!ls  ne marche pas.
+     la liste des fichiers du répertoire courant, comme si vous aviez tapé la
+     commande à l'invite du shell. Utilisez  :!dir  si  :!ls  ne marche pas.
 
-Note:  Il est possible d'exécuter n'importe quelle commande externe de cette
-       manière.
+NOTE :  Il est possible d'exécuter n'importe quelle commande externe de cette
+        manière, avec ou sans argument.
 
-Note:  Toutes les commandes  :  doivent finir par la frappe de <Entrée>.
-
+NOTE :  Toutes les commandes  :  doivent finir par la frappe de <Entrée>.
+        À partir de maintenant, nous ne le mentionnerons plus.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	 Leçon 5.2 : PLUS DE DÉTAILS SUR L'ENREGISTREMENT DE FICHIERS
+         Leçon 5.2 : PLUS DE DÉTAILS SUR L'ENREGISTREMENT DE FICHIERS
 
 
- ** Pour enregistrer les changements faits au fichier, tapez  :w FICHIER . **
+ ** Pour enregistrer les changements faits au texte, tapez  :w FICHIER . **
 
-  1. Tapez  :!dir  ou  :!ls  pour avoir la liste des fichiers du dossier
-     courant. Vous savez déjà qu'il faut appuyer <Entrée> après cela.
+  1. Tapez  :!dir  ou  :!ls  pour avoir la liste des fichiers dans le
+     répertoire courant. Vous savez déjà qu'il faut appuyer <Entrée> après
+     cela.
 
   2. Choisissez un nom de fichier qui n'existe pas encore, par exemple TEST.
 
   3. Puis tapez  :w TEST  (où TEST est le nom que vous avez choisi).
 
-  4. Cela sauvegarde tout le fichier (Tutoriel Vim) sous le nom TEST.
-     Pour le vérifier, tapez  :!dir  pour revisualiser le contenu du dossier.
+  4. Cela enregistre tout le fichier (Tutoriel Vim) sous le nom TEST.
+     Pour le vérifier, tapez  :!dir  ou  :!ls  de nouveau pour revisualiser
+     votre répertoire.
 
-Notez que si vous quittez Vim et y retournez avec le fichier TEST, celui-ci
-sera une copie exacte du cours au moment où vous l'avez sauvé.
+NOTE : Si vous quittez Vim et le redémarrez de nouveau avec le fichier TEST,
+       celui-ci sera une copie exacte de ce cours au moment où vous l'avez
+       enregistré.
 
-  5. Maintenant, effacez le fichier en tapant (MS-DOS):    :!del TEST
-					   ou (Unix):	   :!rm TEST
+  5. Maintenant, effacez le fichier en tapant (MS-DOS) :   :!del TEST
+                                           ou (Unix) :     :!rm TEST
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Leçon 5.3 : UN ENREGISTREMENT SÉLECTIF
+                  Leçon 5.3 : SÉLECTION DU TEXTE À ENREGISTRER
 
 
-     ** Pour enregistrer une portion de fichier, tapez	:#,#w FICHIER **
+                  ** Pour enregistrer une portion du fichier,
+                      tapez :   v  déplacement  :w FICHIER  **
 
-  1. Tapez à nouveau  :!dir  ou  :!ls  pour visualiser le contenu du dossier
-     courant et choisissez un nom de fichier, tel que TEST.
+  1. Déplacez le curseur sur cette ligne.
 
-  2. Déplacez le curseur jusqu'en haut de cette page et tapez  Ctrl-G  pour
-     connaître le numéro de cette ligne. NOTEZ CE NUMÉRO !
+  2. Appuyez  v  et déplacez le curseur vers la cinquième ligne plus bas.
+     Remarquez que le texte est en surbrillance.
 
-  3. Puis rendez-vous au bas de cette page et tapez à nouveau  Ctrl-G .
-     NOTEZ ÉGALEMENT CE NUMÉRO !
+  3. Appuyez  :  . En bas de l'écran  :'<,'> va apparaître.
 
-  4. Pour enregistrer SEULEMENT une portion d'un fichier, tapez  :#,#w TEST
-     où #,# sont les deux numéros que vous avez notés (haut,bas) et TEST est
-     le nom du fichier.
+  4. Tapez   w TEST  , où TEST est un nom de fichier qui n'existe pas.
+     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur Entrée.
 
-  5. Une fois encore, vérifiez la présence du fichier avec  :!dir  mais NE
-     L'EFFACEZ PAS.
+  5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST.
+     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
+     Nous allons l'utiliser dans la leçon suivante.
+
+NOTE : L'appui de  v  démarre la sélection Visuelle. Vous pouvez déplacer le
+       curseur pour agrandir ou rétrécir la sélection. Puis vous pouvez
+       utiliser un opérateur pour faire quelque chose sur le texte. Par
+       exemple,  d  efface le texte.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		 Leçon 5.4 : RÉCUPÉRATION ET FUSION DE FICHIERS
+                 Leçon 5.4 : RÉCUPÉRATION ET FUSION DE FICHIERS
 
 
-	** Pour insérer le contenu d'un fichier, tapez	:r FICHIER **
+        ** Pour insérer le contenu d'un fichier, tapez  :r FICHIER **
 
-  1. Tapez  :!dir  pour vérifier que votre fichier TEST est encore là.
+  1. Placez le curseur juste au dessus de cette ligne.
 
-  2. Placez le curseur en haut de cette page.
+NOTE :  Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3.
+        Puis déplacez vous vers le bas pour voir cette leçon à nouveau.
 
-NOTE:  Après avoir suivi l'étape 3 vous verrez à l'écran la Leçon 5.3.
-       Déplacez-vous vers le bas jusqu'à revenir à cette leçon.
-
-  3. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
+  2. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
      où TEST est le nom de votre fichier.
-
-NOTE:  Le fichier que vous récupérez est placé là où se trouve le curseur.
+     Le fichier que vous récupérez est placé au dessous de la ligne du curseur.
 
   4. Pour vérifier que le fichier a bien été inséré, remontez et vérifiez
      qu'il y a maintenant deux copies de la Leçon 5.3, l'originale et celle
      contenue dans le fichier.
 
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 5
-
-
-  1.  :!commande  exécute une commande externe.
-
-      Quelques exemples pratiques:
-	(MS-DOS)	(Unix)
-	 :!dir		 :!ls		 affiche le contenu du dossier courant.
-	 :!del FICHIER   :!rm FICHIER    efface FICHIER.
-
-  2.  :w FICHIER  enregistre le fichier Vim courant sur le disque avec pour
-		  nom FICHIER.
-
-  3.  :#,#w FICHIER  enregistre les lignes # à # dans le fichier FICHIER.
-
-  4.  :r FICHIER  récupère le fichier FICHIER et l'insère dans le fichier
-		  courant à partir de la position du curseur.
-
-
-
+NOTE :  Vous pouvez aussi lire la sortie d'une commande externe. Par exemple,
+        :r !ls  lit la sortie de la commande ls et la place sous la ligne du
+        curseur.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			    Leçon 6.1 : L'OUVERTURE
+                             RÉSUMÉ DE LA LEÇON 5
+
+
+  1. :!commande  exécute une commande externe.
+
+     Quelques exemples pratiques :
+      (MS-DOS)        (Unix)
+       :!dir           :!ls          affiche le contenu du répertoire courant.
+       :!del FICHIER   :!rm FICHIER  efface FICHIER.
+
+  2. :w FICHIER  enregistre le fichier Vim courant sur le disque avec pour
+                  nom FICHIER.
+
+  3. v  déplacement  :w FICHIER sauvegarde les lignes de la sélection Visuelle
+     dans le fichier FICHIER.
+
+  4. :r FICHIER  récupère le contenu du fichier FICHIER et l'insère sous la
+     position du curseur.
+
+  5. :r !dir  lit la sortie de la commande dir et l'insère sous la position
+     du curseur.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Leçon 6.1 : LA COMMANDE D'OUVERTURE
 
 
 ** Tapez  o  pour ouvrir une ligne sous le curseur et y aller en Insertion. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
-  2. Tapez  o  (minuscule) pour ouvrir une ligne SOUS le curseur et vous y
-     placer en mode Insertion.
+  2. Tapez la lettre   o   minuscule pour ouvrir une ligne SOUS le curseur et
+     vous y placer en mode Insertion.
 
-  3. Puis recopiez la ligne marquée ---> et appuyez sur <Échap> pour quitter
-     le mode Insertion.
+  3. Puis tapez du texte et appuyez <Échap> pour sortir du mode Insertion.
 
----> En tapant	o  le curseur se met sur la ligne ouverte, en mode Insertion.
+---> En tapant  o  le curseur se met sur la ligne ouverte, en mode Insertion.
 
   4. Pour ouvrir une ligne au DESSUS du curseur, tapez simplement un  O
      majuscule, plutôt qu'un  o  minuscule. Faites un essai sur la ligne
      ci-dessous.
-Ouvrez une ligne ci-dessus en tapant MAJ-O lorsque le curseur est ici.
 
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			      Leçon 6.2 : L'AJOUT
-
-
-	    ** Tapez  a  pour insérer du texte APRÈS le curseur. **
-
-  1. Placez le curseur à la fin de la première ligne marquée ---> ci-dessous
-     en tapant	$  en mode Normal.
-
-  2. Tapez un  a  (minuscule) pour ajouter du texte APRÈS le caractère situé
-     sous le curseur. ( A  majuscule ajoute du texte à la fin de la ligne).
-
-Note: Ceci évite de taper  i , le dernier caractère, le texte à insérer,
-      <Échap>, curseur-à-droite, et finalement	x , juste pour ajouter du
-      texte à la fin d'une ligne !
-
-  3. Maintenant, complétez la première ligne. Notez également que l'ajout est
-     identique au mode Insertion, hormis la position où le texte est inséré.
-
----> Cette ligne vous permet de pratiquer
----> Cette ligne vous permet de pratiquer l'ajout de texte en fin de ligne.
+---> Ouvrez une ligne ci-dessus en tapant O lorsque le curseur est ici.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Leçon 6.3 : UNE AUTRE VERSION DU REMPLACEMENT
+                        Leçon 6.2 : LA COMMANDE D'AJOUT
+
+
+            ** Tapez  a  pour insérer du texte APRÈS le curseur. **
+
+  1. Placez le curseur au début de la ligne marquée ---> ci-dessous.
+
+  2. Appuyez  e  jusqu'à ce que le curseur soit sur la fin de  li .
+
+  3. Appuyez  a  (minuscule) pour ajouter du texte APRÈS le curseur.
+
+  4. Complétez le mot comme dans la ligne dessous. Appuyez <Échap> pour
+     sortir du mode Insertion.
+
+  5. Utilisez  e  pour vous déplacer vers le mot incomplet suivant et
+     répétez les étapes 3 et 4.
+
+---> Cette li vous perm de pratiq l'ajout de t dans une ligne.
+---> Cette ligne vous permet de pratiquer l'ajout de texte dans une ligne.
+
+NOTE :  a, i, A vont tous dans le même mode Insertion, la seule différence
+        est l'endroit où les caractères sont insérés.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Leçon 6.3 : UNE AUTRE MANIÈRE DE REMPLACER
 
 
        ** Tapez un  R  majuscule pour remplacer plus d'un caractère. **
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
+     Déplacez le curseur sur le début du premier xxx .
 
-  2. Placez le curseur au début du premier mot qui diffère de la seconde ligne
-     marquée ---> (le mot 'celle').
+  2. Appuyez maintenant  R  et tapez le nombre dessous dans la deuxième ligne,
+     de manière à remplacer le xxx .
 
-  3. Puis tapez  R  et remplacez le reste du texte de la première ligne en
-     tapant par dessus celui-ci, de manière à rendre la première ligne
-     identique à la seconde.
+  3. Appuyez <Échap> pour quitter le mode Remplacement. Notez que le reste de
+     la ligne demeure inchangé.
 
----> Pour rendre cette ligne identique à celle du dessous utilisez le clavier.
----> Pour rendre cette ligne identique à la seconde, tapez R et la correction.
+  4. Répétez les étapes pour remplacer les xxx restants.
 
-  4. Notez que lorsque vous appuyez <Échap>, le texte qui n'a pas encore été
-     remplacé reste.
 
+---> L'ajout de 123 à xxx donne xxx.
+---> L'ajout de 123 à 456 donne 579.
+
+NOTE : Le mode Remplacement est comme le mode Insertion, mais tous les
+       caractères tapés effacent un caractère existant.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Leçon 6.4 : RÉGLAGE DES OPTIONS
+                     Leçon 6.4 : COPIER ET COLLER DU TEXTE
 
 
-  ** Réglons une option afin que la recherche et la substitution ignorent la
-     casse des caractères. **
+   ** Utilisez l'opérateur  y  pour copier du texte et  p  pour le coller **
 
-  1. Recherchez 'ignore' en tapant  /ignore .
+  1. Allez à la ligne marquée ---> ci-dessous et placez le curseur après "a)".
+
+  2. Démarrez le mode Visuel avec  v  et déplacez le curseur juste devant
+     "premier".
+
+  3. Tapez  y  pour copier le texte en surbrillance.
+
+  4. Déplacez la curseur à la fin de la ligne suivante :   j$
+
+  5. Tapez  p  pour coller le texte. Puis tapez :  un second <Échap> .
+
+  6. Utilisez le mode Visuel pour sélectionner "élément", copiez le avec  y  ,
+     déplacez vous à la fin de la ligne suivant avec  j$  et collez le texte
+     à cet endroit avec  p .
+
+--->  a) ceci est le premier élément.
+      b)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leçon 6.4 : RÉGLAGE DES OPTIONS
+
+
+    ** Réglons une option afin que la recherche et la substitution ignore la
+       casse des caractères. **
+
+  1. Recherchez 'ignore' en tapant :   /ignore <Entrée>
      Répétez ceci plusieurs fois en utilisant la touche  n .
 
-  2. Activez l'option 'ic' (Ignorer casse) en tapant  :set ic .
+  2. Activez l'option 'ic' (ignorer casse) en tapant  :set ic .
 
-  3. Puis poursuivez votre recherche en utilisant  n .
-     Répétez cette recherche plusieurs fois avec la touche  n .
+  3. Puis cherchez 'ignore' de nouveau en utilisant  n .
+     Remarquez que Ignore et IGNORE sont maintenant aussi trouvés.
 
   4. Activez les options 'hlsearch' et 'incsearch' avec  :set hls is .
 
   5. Puis recommencez une recherche, et faites bien attention à ce qui se
-     produit:  /ignore .
+     produit :  /ignore <Entrée>
 
-  6. Pour interrompre la mise en surbrillance des résultats, tapez:
-     :nohlsearch
+  6. Pour désactiver 'ignorer casse', entrez :  :set noic
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 6
+NOTE : Pour enlever la surbrillance des résultats, entrez :   :nohlsearch
 
-
-  1. Taper  o  ouvre une ligne SOUS le curseur et y place celui-ci en mode
-     Insertion. Taper un  O  majuscule ouvre une ligne au DESSUS de la ligne
-     où se trouve le curseur.
-
-  2. Tapez un  a  pour insérer du texte APRÈS le caractère où se trouve le
-     curseur. Taper un	A  majuscule ajoute du texte automatiquement à la fin
-     de la ligne.
-
-  3. Taper un  R  majuscule active le mode Remplacement jusqu'à ce que la
-     touche  <Échap>  soit appuyée pour en sortir.
-
-  4. Taper  :set xxx  active l'option 'xxx'.
-
-
-
-
-
+NOTE : Si vous voulez ignorer la casse uniquement pour une recherche, utilisez
+       \c  dans la phrase :   /ignore\c  <Entrée>
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Leçon 7 : ACCÉDER À L'AIDE EN LIGNE
+                             RÉSUMÉ DE LA LEÇON 6
 
-		  ** Utiliser le système d'aide en ligne. **
 
-  Vim a un système complet d'aide en ligne.  Pour y accéder, essayez l'une de
-  ces trois méthodes:
-	- appuyez la touche <Help> (si vous en avez une)
-	- appuyez la touche <F1> (si vous en avez une)
-	- tapez  :help <Entrée>
+  1. Taper  o  ouvre une ligne SOUS le curseur et démarre le mode Insertion.
+     Taper  O  ouvre une ligne au DESSUS du curseur.
 
-  Tapez  :q <Entrée>  pour fermer la fenêtre d'aide.
+  2. Taper  a  pour insérer du texte APRÈS le curseur.
+     Taper  A  pour insérer du texte après la fin de ligne.
+
+  3. Taper  e  déplace à la fin du mot.
+
+  4. Taper  y  copie du texte,  p  le colle.
+
+  5. Taper  R  majuscule active le mode Remplacement jusqu'à ce qu' <Échap>
+     soit appuyé.
+
+  6. Taper  ":set xxx"  active l'option "xxx". Quelques options sont :
+        'ic'  'ingnorecase' pour ignorer la casse lors des recherches.
+        'is'  'incsearch'   pour montrer les appariements partiels.
+        'hls' 'hlsearch'    pour mettre en surbrillance les appariements.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leçon 7.1 : OBTENIR DE L'AIDE
+
+
+                  ** Utiliser le système d'aide en ligne. **
+
+  Vim a un système complet d'aide en ligne. Pour y accéder, essayez l'une de
+  ces trois méthodes :
+        - appuyez la touche <Help> (si vous en avez une)
+        - appuyez la touche <F1> (si vous en avez une)
+        - tapez  :help <Entrée>
+
+
+  Lisez le texte dans la fenêtre d'aide pour savoir comment fonctionne l'aide.
+  Tapez  CTRL-W CTRL-W   pour sauter d'une fenêtre à l'autre.
+  Tapez  :q <Entrée>     pour fermer la fenêtre d'aide.
 
   Vous pouvez accéder à l'aide sur à peu près n'importe quel sujet en donnant
   des arguments à la commande  :help . Essayez par exemple (n'oubliez pas
-  d'appuyer sur <Entrée>):
+  d'appuyer sur <Entrée>) :
 
-	:help w
-	:help c_<T
-	:help insert-index
-	:help user-manual
+        :help w
+        :help c_CTRL-D
+        :help c_<T
+        :help insert-index
+        :help user-manual
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Leçon 8 : CRÉER UN SCRIPT DE DÉMARRAGE
+                    Leçon 7.2 : CRÉER UN SCRIPT DE DÉMARRAGE
 
-		  ** Activer les fonctionnalités de Vim. **
+                   ** Activer les fonctionnalités de Vim. **
 
   Vim a beaucoup plus de fonctionnalités que Vi, mais la plupart de celles-ci
-  sont désactivées par défaut.  Pour commencer à les utiliser, vous devez
+  sont désactivées par défaut. Pour commencer à les utiliser, vous devez
   créer un fichier "vimrc".
 
-  1. Commencez à éditer le fichier "vimrc". Ceci dépend de votre système:
-	:edit ~/.vimrc			pour Unix
-	:edit $VIM/_vimrc		pour MS-Windows
+  1. Commencez à éditer le fichier "vimrc". Ceci dépend de votre système :
+        :edit ~/.vimrc         pour Unix
+        :edit $VIM/_vimrc      pour MS-Windows
 
-  2. Intégrez maintenant le texte du fichier "vimrc" d'exemple:
-	:read $VIMRUNTIME/vimrc_example.vim
+  2. Lisez maintenant le fichier d'exemple "vimrc" :
+        :r $VIMRUNTIME/vimrc_example.vim
 
-  3. Enregistrez le fichier avec:
-	:write
+  3. Enregistrez le fichier avec :
+        :w
 
-  La prochaine fois que vous démarrerez Vim, le surlignage syntactique sera
-  activé. Vous pouvez ajouter tous vos réglages préférés dans ce fichier.
+  La prochaine fois que vous démarrerez Vim, la coloration syntaxique sera
+  activée. Vous pouvez ajouter tous vos réglages préférés dans ce fichier
+  "vimrc". Pour plus d'informations, tapez  :help vimrc-intro
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                            Leçon 7.3 : COMPLÈTEMENT
+
+
+          ** Complètement de ligne de commande avec CTRL-D et <TAB> **
+
+  1. Mettez Vim soit en mode non compatible :   set nocp
+
+  2. Regardez quels fichiers existent dans le répertoire :  !ls  ou  !dir
+
+  3. Tapez le début d'une commande :   :e
+
+  4. Appuyez  CTRL-D  et Vim affichera une liste de commandes qui commencent
+     par "e".
+
+  5. Appuyez  <TAB>  et Vim complétera le nom de la commande :  ":edit"
+
+  6. Ajoutez maintenant un espace et le début d'un fichier existant :
+     :edit  FIC
+
+  7  Appuyez  <TAB>. Vim va compléter le nom (s'il est unique).
+
+NOTE : Le complètement fonctionne pour de nombreuse commandes. Essayez
+       d'appuyer CTRL-D et <TAB>. C'est utile en particulier pour  :help .
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              RÉSUMÉ DE LA LEÇON 7
+
+
+  1. Tapez  :help  ou appuyez <F1> ou <Aide> pour ouvrir la fenêtre d'aide.
+
+  2. Tapez  :help cmd  pour trouver l'aide sur  cmd .
+
+  3. Tapez  CTRL-W CTRL-W  pour sauter à une autre fenêtre.
+
+  4. Tapez  :q  pour fermer la fenêtre d'aide.
+
+  5. Créez un script de démarrage vimrc pour conserver vos réglages préférés.
+
+  6. Quand vous tapez une commande  :  appuyez CTRL-D pour voir les
+     complètements possibles. Appuyez <TAB> pour utiliser un complètement.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-  Ceci conclut le Tutoriel Vim.  Le but était de vous donner un bref aperçu de
+  Ceci conclut le Tutoriel Vim. Le but était de vous donner un bref aperçu de
   l'éditeur Vim, juste assez pour vous permettre d'utiliser l'éditeur
-  relativement facilement.  Il est loin d'être complet, vu que Vim a beaucoup
-  beaucoup plus de commandes.  Un Manuel de l'utilisateur est disponible en
-  anglais:  :help user-manual .
+  relativement facilement. Il est loin d'être complet, vu que Vim a beaucoup
+  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
+  anglais :  :help user-manual .
 
   Pour continuer à découvrir et à apprendre Vim, il existe un livre traduit en
   français. Il parle plus de Vi que de Vim, mais pourra vous être utile.
-	L'éditeur Vi - Collection Précis et concis - par Arnold Robbins
-	Éditeur: O'Reilly France
-	ISBN: 2-84177-102-4
+        L'éditeur Vi - Collection Précis et concis - par Arnold Robbins
+        Éditeur : O'Reilly France
+        ISBN : 2-84177-102-4
 
   Deux livres en anglais sont également mentionnés dans la version originale
   de ce tutoriel, dont un qui traite spécifiquement de Vim. Merci de vous y
-  référer si vous êtes intéressé.
+  référer si vous êtes intéressés.
 
   Ce tutoriel a été écrit par Michael C. Pierce et Robert K. Ware de l'École
   des Mines du Colorado et reprend des idées fournies par Charles Smith,
-  Universté d'État du Colorado.  E-mail: bware@mines.colorado.edu.
+  Université d'État du Colorado. E-mail : bware@mines.colorado.edu.
 
   Modifié pour Vim par Bram Moolenar.
-
   Traduit en Français par Adrien Beau, en avril 2001.
-  E-mail:	version.francaise@free.fr
-  Last Change:	2003 May 29
+  Dernières mises à jour par Dominique Pellé.
+
+  E-mail :      dominique.pelle@gmail.com
+  Last Change : 2008 Nov 23
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.fr.utf-8 b/runtime/tutor/tutor.fr.utf-8
index 5ab14cd..1b01510 100644
--- a/runtime/tutor/tutor.fr.utf-8
+++ b/runtime/tutor/tutor.fr.utf-8
@@ -1,5 +1,5 @@
 ===============================================================================
-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.5.fr.2 =
+= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.1 =
 ===============================================================================
 
      Vim est un éditeur très puissant qui a trop de commandes pour pouvoir
@@ -7,93 +7,100 @@
      décrire suffisamment afin de vous permettre d'utiliser simplement Vim.
 
      Le temps requis pour suivre ce cours est d'environ 25 à 30 minutes, selon
-     le temps que vous passerez à expérimenter.  Les commandes utilisées dans
-     les leçons modifieront le texte. Faites une copie de ce fichier afin de
-     vous entraîner dessus (si vous avez lancé "vimtutor" ceci est déjà une
-     copie).
+     le temps que vous passerez à expérimenter.
+
+     ATTENTION :
+     Les commandes utilisées dans les leçons modifieront le texte. Faites une
+     copie de ce fichier afin de vous entraîner dessus (si vous avez lancé
+     "vimtutor" ceci est déjà une copie).
 
      Il est important de garder en tête que ce cours est conçu pour apprendre
-     par la pratique.  Cela signifie que vous devez exécuter les commandes
-     pour les apprendre correctement.  Si vous vous contentez de lire le
-     texte, vous oublierez les commandes !
+     par la pratique. Cela signifie que vous devez exécuter les commandes
+     pour les apprendre correctement. Si vous vous contentez de lire le texte,
+     vous oublierez les commandes !
 
-     Maintenant, vérifiez que votre clavier n'est PAS verouillé en majuscules,
-     et appuyez la touche  j  le nombre de fois suffisant pour que la leçon
-     1.1 remplisse complètement l'écran.
+     Maintenant, vérifiez que votre clavier n'est PAS verrouillé en
+     majuscules, et appuyez la touche  j  le nombre de fois suffisant pour
+     que la Leçon 1.1 remplisse complètement l'écran.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      Leçon 1.1 : DÉPLACEMENT DU CURSEUR
+                      Leçon 1.1 : DÉPLACEMENT DU CURSEUR
 
 
   ** Pour déplacer le curseur, appuyez les touches h,j,k,l comme indiqué. **
-	    ^
-	    k	     Astuce:  La touche h est à gauche et déplace à gauche.
-      < h      l >	      La touche l est à droite et déplace à droite.
-	   j		      La touche j ressemble à une flèche vers le bas.
-	   v
+          ^
+          k        Astuce :  La touche h est à gauche et déplace à gauche.
+    < h       l >            La touche l est à droite et déplace à droite.
+          j                  La touche j ressemble à une flèche vers le bas.
+          v
   1. Déplacez le curseur sur l'écran jusqu'à vous sentir à l'aise.
 
   2. Maintenez la touche Bas (j) enfoncée jusqu'à ce qu'elle se répète.
----> Maintenant vous êtes capable de vous déplacer jusqu'à la leçon suivante.
+     Maintenant vous êtes capable de vous déplacer jusqu'à la leçon suivante.
 
   3. En utilisant la touche Bas, allez à la Leçon 1.2.
 
-Note: Si jamais vous doutez de ce que vous venez de taper, appuyez <Échap>
-      pour revenir en mode Normal. Puis retapez la commande que vous vouliez.
+NOTE : Si jamais vous doutez de ce que vous venez de taper, appuyez <Échap>
+       pour revenir en mode Normal. Puis retapez la commande que vous vouliez.
 
-Note: Les touches fléchées devraient également fonctionner. Mais en utilisant
-      hjkl vous pourrez vous déplacer beaucoup plus rapidement, une fois que
-      vous aurez pris l'habitude.
+NOTE : Les touches fléchées devraient également fonctionner. Mais en utilisant
+       hjkl vous pourrez vous déplacer beaucoup plus rapidement, une fois que
+       vous aurez pris l'habitude.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Leçon 1.2 : ENTRÉE ET SORTIE DE VIM
+                     Leçon 1.2 : SORTIR DE VIM
 
 
- !! NOTE: Avant d'effectuer les étapes ci-dessous, lisez toute cette leçon !!
+ !! NOTE : Avant d'effectuer les étapes ci-dessous, lisez toute cette leçon !!
 
-  1. Appuyez la touche	<Échap>  (pour être sûr d'être en mode Normal).
+  1. Appuyez la touche  <Échap>  (pour être sûr d'être en mode Normal).
 
-  2. Tapez:			:q! <Entrée>
+  2. Tapez :  :q! <Entrée>
+     Ceci quitte l'éditeur SANS enregistrer les changements que vous avez
+     faits.
 
----> Ceci quitte l'éditeur SANS sauver les changements que vous avez faits.
-     Si vous voulez enregistrer les changements et sortir, tapez:
-				:wq <Entrée>
-
-  3. Lorsque l'invite du 'shell' vous sera présentée, tapez la commande qui
-     vous a amené dans ce tutoriel.  Cela pourrait être:    vimtutor <Entrée>
-     Normalement, vous utiliseriez:			    vim tutor <Entrée>
-
----> 'vim' lance l'éditeur, 'tutor' est le fichier que vous souhaitez éditer.
+  3. Lorsque l'invite du shell vous sera présentée, tapez la commande qui
+     vous a mené dans ce tutoriel. Cela pourrait être :    vimtutor <Entrée>
 
   4. Si vous avez mémorisé ces étapes et êtes confiant, effectuez les étapes
-     1 à 3 pour sortir puis rentrer dans l'éditeur.  Déplacez ensuite le
-      curseur jusqu'à la Leçon 1.3.
+     1 à 3 pour sortir puis rentrer dans l'éditeur.
+
+NOTE :  :q! <Entrée> annule tous le changements que vous avez fait. Dans
+         quelques leçons, vous apprendrez à enregistrer les changements.
+
+  5. Déplacez le curseur à la Leçon 1.3.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Leçon 1.3 : ÉDITION DE TEXTE - EFFACEMENT
+                  Leçon 1.3 : ÉDITION DE TEXTE - EFFACEMENT
 
 
- ** En mode Normal, appuyez  x	pour effacer le caractère sous le curseur. **
+         ** Appuyez   x   pour effacer le caractère sous le curseur. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
   2. Pour corriger les erreurs, déplacez le curseur jusqu'à ce qu'il soit
      sur un caractère à effacer.
 
-  3. Appuyez la touche	x  pour effacer le caractère redondant.
+  3. Appuyez la touche  x  pour effacer le caractère redondant.
 
   4. Répétez les étapes 2 à 4 jusqu'à ce que la phrase soit correcte.
 
 ---> La vvache à sautéé au-ddessus dde la luune.
 
-  5. Maintenant que la ligne est correcte, passez à la leçon 1.4.
+  5. Maintenant que la ligne est correcte, passez à la Leçon 1.4.
 
-NOTE: En avançant dans ce cours, n'essayez pas de mémoriser, apprenez par
-      la pratique.
+NOTE : En avançant dans ce cours, n'essayez pas de mémoriser, apprenez par
+       la pratique.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Leçon 1.4 : ÉDITION DE TEXTE - INSERTION
+                    Leçon 1.4 : ÉDITION DE TEXTE - INSERTION
 
 
-	   ** En mode Normal, appuyez  i  pour insérer du texte. **
+                    ** Appuyez  i  pour insérer du texte. **
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
 
@@ -108,38 +115,94 @@
 ---> Il mnqe caractères cette .
 ---> Il manque des caractères dans cette ligne.
 
-  5. Une fois que vous êtes à l'aise avec l'insertion de texte, allez au
-     résumé ci-dessous.
+  5. Une fois que vous êtes à l'aise avec l'insertion de texte, allez à la
+     Leçon 1.5.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 1
+                     Leçon 1.5 : ÉDITION DE TEXTE - AJOUTER
+
+
+                    ** Appuyez  A  pour ajouter du text. **
+
+  1. Déplacez le curseur sur la première ligne ci-dessous marquée --->.
+     Peu importe sur quel caractère se trouve le curseur sur cette ligne.
+
+  2. Appuyez  A  et tapez les ajouts nécessaires.
+
+  3. Quand le texte a été ajouté, appuyez <Échap> pour revenir en mode
+     Normal.
+
+  4. Déplacez le curseur sur la seconde ligne marquée ---> et répétez les
+     étapes 2 et 3 pour corriger la phrase.
+
+---> Il manque du texte à partir de cet
+     Il manque du texte à partir de cette ligne.
+---> Il manque aussi du te
+     Il manque aussi du texte ici.
+
+  5. Quand vous vous sentez suffisamment à l'aise pour ajouter du texte,
+     allez à la Leçon 1.6.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leçon 1.6 : ÉDITER UN FICHIER
+
+
+          ** Utilisez  :wq  pour enregistrer un fichier et sortir. **
+
+!! NOTE : Lisez toute la leçon avant d'exécuter les instructions ci-dessous !!
+
+  1. Sortez de ce tutoriel comme vous l'avez fait dans la Leçon 1.2 :  :q!
+     Ou, si vous avez accès à un autre terminal, exécutez y les actions
+     qui suivent.
+
+  2. À l'invite du shell, tapez cette commande :  vim tutor <Entrée>
+     'vim' est la commande pour démarrer l'éditeur Vim, 'tutor' est le
+     nom du fichier que vous souhaitez éditer. Utilisez un fichier qui peut
+     être modifié.
+
+  3. Insérez et effacez du texte comme vous l'avez appris dans les leçons
+     précédentes.
+
+  4. Enregistrez le fichier avec les changements et sortez de Vim avec :
+       :wq <Entrée>
+
+  5. Si vous avez quitté vimtutor à l'étape 1, recommencez vimtutor et
+     déplacez-vous en bas vers le résumé suivant.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                             RÉSUMÉ DE LA LEÇON 1
+
 
   1. Le curseur se déplace avec les touches fléchées ou les touches hjkl.
-	 h (gauche)	j (bas)        k (haut)       l (droite)
+           h (gauche)      j (bas)      k (haut)      l (droite)
 
-  2. Pour entrer dans Vim (à l'invite %) tapez:  vim FICHIER <Entrée>
+  2. Pour démarrer Vim à l'invite du shell tapez :  vim FICHIER <Entrée>
 
-  3. Pour quitter Vim tapez:  <Échap> :q! <Entrée>  pour perdre tous les
-						    changements.
-		   OU tapez:  <Échap> :wq <Entrée>  pour enregistrer les
-						    changements.
+  3. Pour quitter Vim tapez :  <Échap> :q! <Entrée>  pour perdre tous les
+                                                     changements.
+                   OU tapez :  <Échap> :wq <Entrée>  pour enregistrer les
+                                                     changements.
 
-  4. Pour effacer un caractère sous le curseur en mode Normal tapez:  x
+  4. Pour effacer un caractère sous le curseur tapez :  x
 
-  5. Pour insérer du texte au niveau du curseur en mode Normal tapez:
-	 i   tapez le texte   <Échap>
+  5. Pour insérer ou ajouter du texte tapez :
+         i   tapez le texte à insérer avant le curseur   <Échap>
+         A   tapez le texte à ajouter après le curseur   <Échap>
 
-NOTE: Appuyer  <Échap>	vous place en mode Normal ou annule une commande
-      partiellement tapée dont vous ne voudriez plus.
+NOTE : Appuyer  <Échap>  vous place en mode Normal ou annule une commande
+       partiellement tapée dont vous ne voulez plus.
 
-Passez maintenant à la Leçon 2.
+Passez maintenant à la leçon 2.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			   Leçon 2.1 : EFFACEMENTS
+                       Leçon 2.1 : COMMANDES D'EFFACEMENT
 
 
-	    ** Tapez  dw  pour effacer jusqu'à la fin d'un mot. **
+                     ** Tapez  dw  pour effacer un mot. **
 
   1. Appuyez  <Échap>  pour être sûr d'être en mode Normal.
 
@@ -147,91 +210,139 @@
 
   3. Placez le curseur sur le début d'un mot qui a besoin d'être effacé.
 
-  4. Tapez  dw	pour faire disparaître ce mot.
+  4. Tapez  dw  pour faire disparaître ce mot.
 
-NOTE: Les lettres  dw  apparaîtront sur la dernière ligne de l'écran lors de
-      votre frappe. Si vous avez mal tapé quelque chose, appuyez <Échap> et
-      recommencez.
+NOTE : La lettre  d  apparaîtra sur la dernière ligne de l'écran lors de
+       votre frappe. Vim attend que vous tapiez  w . Si vous voyez un autre
+       caractère que  d  vous avez tapé autre chose ; appuyez <Échap> et
+       recommencez.
 
 ---> Il y a quelques drôle mots qui n'ont rien à faire papier sur cette ligne.
 
   5. Répétez les étapes 3 et 4 jusqu'à ce que la phrase soit correcte et allez
      à la Leçon 2.2.
 
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Leçon 2.2 : PLUS D'EFFACEMENTS
+                  Leçon 2.2 : PLUS DE COMMANDES D'EFFACEMENTS
 
 
-	  ** Tapez  d$	pour effacer jusqu'à la fin de la ligne. **
+          ** Tapez  d$  pour effacer jusqu'à la fin de la ligne. **
 
   1. Appuyez  <Échap>  pour être sûr d'être en mode Normal.
 
   2. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
-  3. Déplacez le curseur jusqu'à la fin correcte de la ligne
-     (APRÈS le premier . ).
+  3. Déplacez le curseur jusqu'à la fin de la ligne correcte (APRÈS le
+     premier . ).
 
-  4. Tapez  d$	pour effacer jusqu'à la fin de la ligne.
+  4. Tapez  d$  pour effacer jusqu'à la fin de la ligne.
 
 ---> Quelqu'un a tapé la fin de cette ligne deux fois. cette ligne deux fois.
 
   5. Allez à la Leçon 2.3 pour comprendre ce qui se passe.
 
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+             Leçon 2.3 : À PROPOS DES OPÉRATEURS ET DES MOUVEMENTS
 
 
+  Plusieurs commandes qui changent le texte sont constituées d'un opérateur
+  et d'un mouvement. Le format pour une commande d'effacement avec l'opérateur
+  d  d'effacement est le suivant :
+
+        d   mouvement
+
+  Où :
+    d         - est l'opérateur d'effacement
+    mouvement - est le mouvement sur lequel agit l'opérateur (listés
+                ci-dessous)
+
+  Une courte liste de mouvements :
+    w - jusqu'au début du prochain mot, en EXCLUANT son premier caractère.
+    e - jusqu'à la fin du mot courant, en EXCLUANT son denier caractère.
+    $ - jusqu'à la fin de la ligne, en INCLUANT son dernier caractère.
+
+  Ainsi, taper  de  va effacer depuis le curseur jusqu'à la fin du mot.
+
+NOTE : Le seul appui d'un mouvement en mode Normal, sans commande, déplace le
+       curseur comme indiqué.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Leçon 2.3 : DES COMMANDES ET DES OBJETS
+            Leçon 2.4 : UTILISER UN QUANTIFICATEUR AVEC UN MOUVEMENT
 
 
-  Le format de la commande d'effacement  d  est le suivant:
+       ** Taper un nombre avant un mouvement le répète autant de fois. **
 
-	 [nombre]  d  objet	   OU	     d	[nombre]  objet
-  où:
-    nombre - est combien de fois exécuter la commande (optionnel, défaut: 1).
-    d - est la commande d'effacement.
-    objet - est ce sur quoi la commande va opérer (liste ci-dessous).
+  1. Déplacez le curseur au début de la ligne marquée ---> ci-dessous.
 
-  Une courte liste d'objets:
-    w - du curseur jusqu'à la fin du mot, y compris l'espace qui suit.
-    e - du curseur jusqu'à la fin du mot, SANS l'espace qui suit.
-    $ - du curseur jusqu'à la fin de la ligne.
+  2. Tapez  2w  pour déplacer le curseur de 2 mots vers l'avant.
 
-NOTE: Pour les aventureux, le seul appui d' objet  en mode Normal, sans
-      commande, déplace le curseur comme indiqué dans la liste des objets.
+  3. Tapez  3e  pour déplacer le curseur à la fin du troisième mot vers
+     l'avant.
 
+  4. Tapez  0  (zéro) pour déplacer au début de la ligne.
 
+  5. Répétez les étapes 2 et 3 avec des quantificateurs différents.
+
+---> Ceci est juste une ligne avec des mots où vous pouvez vous déplacer.
+
+  6. Déplacez-vous à la Leçon 2.5.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		 Leçon 2.4 : UNE EXCEPTION À 'COMMANDE-OBJET'
+            Leçon 2.5 : UTILISER UN QUANTIFICATEUR POUR EFFACER PLUS
 
-	      ** Tapez	dd  pour effacer une ligne complète. **
+
+       ** Taper un nombre avec un opérateur le répète autant de fois. **
+
+  Outre la combinaison de l'opérateur d'effacement avec un déplacement
+  mentionné ci-dessus, vous pouvez insérer un nombre (quantificateur)
+  pour effacez encore plus :
+       d   nombre   déplacement
+
+  1. Déplacez le curseur vers le premier mot en MAJUSCULES dans la ligne
+     marquée --->.
+
+  2. Tapez  d2w  pour effacer les deux mots en MAJUSCULES.
+
+  3. Répétez les étapes 1 et 2 avec des quantificateurs différents pour
+     effacer les mots suivants en MAJUSCULES à l'aide d'une commande.
+
+---> Cette ABC DE ligne FGHI JK LMN OP de mots est Q RS TUV nettoyée.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leçon 2.6 : OPÉREZ SUR DES LIGNES
+
+
+              ** Tapez   dd   pour effacer une ligne complète. **
 
   Vu le nombre de fois où l'on efface des lignes complètes, les concepteurs
-  de Vi ont décidé qu'il serait plus facile de taper simplement deux d à la
-  suite pour effacer une ligne.
+  de Vi ont décidé qu'il serait plus facile de taper simplement deux  d
+  pour effacer une ligne.
 
   1. Placez le curseur sur la seconde ligne de la phrase ci-dessous.
-  2. Tapez  dd	pour effacer la ligne.
+  2. Tapez  dd  pour effacer la ligne.
   3. Maintenant allez à la quatrième ligne.
-  4. Tapez  2dd  (rappelez-vous, nombre-commande-objet) pour effacer les
-     deux lignes.
+  4. Tapez   2dd   pour effacer deux lignes.
 
-      1)  Les roses sont rouges,
-      2)  La boue c'est drôle,
-      3)  Les violettes sont bleues,
-      4)  J'ai une voiture,
-      5)  Les horloges donnent l'heure,
-      6)  Le sucre est doux
-      7)  Tout comme vous.
+--->  1)  Les roses sont rouges,
+--->  2)  La boue c'est drôle,
+--->  3)  Les violettes sont bleues,
+--->  4)  J'ai une voiture,
+--->  5)  Les horloges donnent l'heure,
+--->  6)  Le sucre est doux
+--->  7)  Tout comme vous.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			    Leçon 2.5 : L'ANNULATION
+                            Leçon 2.7 : L'ANNULATION
 
-	    ** Tapez  u  pour annuler les dernières commandes. **
-	       ** Tapez  U  pour récupérer toute une ligne. **
+
+            ** Tapez  u  pour annuler les dernières commandes. **
+               ** Tapez  U  pour récupérer toute une ligne. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous et placez-le sur
      la première erreur.
@@ -239,10 +350,10 @@
   3. Puis tapez  u  pour annuler la dernière commande exécutée.
   4. Cette fois, corrigez toutes les erreurs de la ligne avec la commande  x .
   5. Puis tapez un  U  majuscule pour remettre la ligne dans son état initial.
-  6. Puis tapez  u  deux-trois fois pour annuler le  U	et les commandes
+  6. Puis tapez  u  deux-trois fois pour annuler le  U  et les commandes
      précédentes.
-  7. Maintenant tapez  Ctrl-R  (maintenez la touche Ctrl enfoncée pendant que
-     vous appuyez sur R) deux-trois fois pour refaire les commandes (annuler
+  7. Maintenant tapez  CTRL-R  (maintenez la touche CTRL enfoncée pendant que
+     vous appuyez R) deux-trois fois pour refaire les commandes (annuler
      les annulations).
 
 ---> Coorrigez les erreurs suur ccette ligne et reemettez-les avvec 'annuler'.
@@ -250,57 +361,64 @@
   8. Ce sont des commandes très utiles. Maintenant, allez au résumé de la
      Leçon 2.
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 2
-
-
-  1. Pour effacer du curseur jusqu'à la fin d'un mot tapez:	dw
-
-  2. Pour effacer du curseur jusqu'à la fin d'une ligne tapez:	d$
-
-  3. Pour effacer toute une ligne tapez:  dd
-
-  4. Le format d'une commande en mode Normal est:
-
-       [nombre]  commande  objet     OU     commande  [nombre]	objet
-     où:
-       nombre - est combien de fois répéter la commande
-       commande - est ce qu'il faut faire, par exemple	d  pour effacer
-       objet - est ce sur quoi la commande devrait agir, par exemple w (mot),
-	       $ (jusqu'à la fin de la ligne), etc.
-
-  5. Pour annuler des actions précédentes, tapez:	     u	(u minuscule)
-     Pour annuler tous les changements sur une ligne tapez:  U	(U majuscule)
-     Pour annuler l'annulation tapez:			     Ctrl-R
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     Leçon 3.1 : LE COLLAGE
+                             RÉSUMÉ DE LA LEÇON 2
 
 
-   ** Tapez  p	pour placer après le curseur ce qui vient d'être effacé. **
+  1. Pour effacer du curseur jusqu'au mot suivant tapez :         dw
 
-  1. Placez le curseur sur la première ligne du "poème" ci-dessous.
+  2. Pour effacer du curseur jusqu'à la fin d'une ligne tapez :   d$
 
-  2. Tapez  dd	pour effacer la ligne et la placer dans le tampon de Vim.
+  3. Pour effacer toute une ligne tapez :                         dd
 
-  3. Déplacez le curseur sur la ligne qui PRÉCÈDE l'endroit où vous voulez
-     remettre la ligne effacée.
+  4. Pour répéter un déplacement ajoutez un quantificateur :      2w
 
-  4. En mode Normal, tapez  p  pour remettre la ligne.
+  5. Le format d'une commande de changement est :
+
+       opérateur   [nombre]   déplacement
+
+     Où :
+       opérateur   - est ce qu'il faut faire, comme  d  pour effacer.
+       [nombre]    - un quantificateur optionnel pour répéter le déplacement.
+       déplacement - déplace le long du texte à opérer, tel que  w  (mot),
+                     $ (jusqu'à la fin de ligne), etc.
+
+  6. Pour se déplacer au début de ligne, utilisez un zéro :  0
+
+  5. Pour annuler des actions précédentes, tapez :            u (u minuscule)
+     Pour annuler tous les changements sur une ligne tapez :  U (U majuscule)
+     Pour annuler l'annulation tapez :                        CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                             Leçon 3.1 : LE COLLAGE
+
+
+   ** Tapez  p  pour placer après le curseur ce qui vient d'être effacé. **
+
+  1. Placez le curseur sur la première ligne ci-dessous marquée --->.
+
+  2. Tapez  dd  pour effacer la ligne et la placer dans un registre de Vim.
+
+  3. Déplacez le curseur sur la ligne c) au dessus où vous voulez remettre la
+     ligne effacée.
+
+  4. En mode Normal, tapez   p   pour remettre la ligne en dessous du curseur.
 
   5. Répétez les étapes 2 à 4 pour mettre toutes les lignes dans le bon ordre.
 
-     d) Et vous, qu'apprenez-vous ?
-     b) Les violettes sont bleues,
-     c) L'intelligence s'apprend,
-     a) Les roses sont rouges,
+---> d) Et vous, qu'apprenez-vous ?
+---> b) Les violettes sont bleues,
+---> c) L'intelligence s'apprend,
+---> a) Les roses sont rouges,
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Leçon 3.2 : LE REMPLACEMENT
+                    Leçon 3.2 : LA COMMANDE DE REMPLACEMENT
 
 
- ** Tapez  r  et un caractère pour remplacer le caractère sous le curseur. **
+     ** Tapez  rx  pour remplacer un caractère sous le curseur par  x . **
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
 
@@ -308,31 +426,32 @@
 
   3. Tapez  r  suivi du caractère qui doit corriger l'erreur.
 
-  4. Répétez les étapes 2 et 3 jusqu'à ce que la première ligne soit correcte.
+  4. Répétez les étapes 2 et 3 jusqu'à ce que la première ligne soit égale
+     à la seconde.
 
 --->  Quand cette ligne a été sauvie, quelqu'un a lait des faunes de frappe !
 --->  Quand cette ligne a été saisie, quelqu'un a fait des fautes de frappe !
 
   5. Maintenant, allez à la Leçon 3.3.
 
-NOTE: N'oubliez pas que vous devriez apprendre par la pratique, pas par
-      mémorisation.
+NOTE : N'oubliez pas que vous devriez apprendre par la pratique, pas par
+       mémorisation.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			  Leçon 3.3 : LE CHANGEMENT
+                     Leçon 3.3 : L'OPÉRATEUR DE CHANGEMENT
 
 
-	    ** Pour changer tout ou partie d'un mot, tapez  cw .**
+            ** Pour changer jusqu'à la fin d'un mot, tapez  ce .**
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
 
-  2. Placez le curseur sur le u de luhko.
+  2. Placez le curseur sur le  u  de luhko.
 
-  3. Tapez  cw	et corrigez le mot (dans notre cas, tapez  'igne'.)
+  3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
 
-  4. Appuyez <Échap> et placez-vous sur l'erreur suivante (le premier
-     caractère qui doit être changé).
+  4. Appuyez <Échap> et placez-vous sur le prochain caractère qui doit
+     être changé).
 
   5. Répétez les étapes 3 et 4 jusqu'à ce que la première phrase soit
      identique à la seconde.
@@ -340,171 +459,189 @@
 ---> Cette luhko contient quelques myqa qui ont ricne d'être chantufip.
 ---> Cette ligne contient quelques mots qui ont besoin d'être changés.
 
-Notez que  cw  efface le mot et vous place ensuite en mode Insertion.
+Notez que  ce  efface le mot et vous place ensuite en mode Insertion.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Leçon 3.4 : PLUS DE CHANGEMENTS AVEC c
+                    Leçon 3.4 : PLUS DE CHANGEMENTS AVEC c
 
 
-    ** Le changement fonctionne avec les mêmes objets que l'effacement. **
+    ** L'opérateur de changement fonctionne avec les mêmes déplacements
+       que l'effacement. **
 
-  1. Le changement fonctionne de la même manière que l'effacement.
-     Le format est:
+  1. L'opérateur de changement fonctionne de la même manière que
+     l'effacement. Le format est :
 
-	 [nombre]  c  objet	   OU	     c	[nombre]  objet
+         c   [nombre]   déplacement
 
-  2. Les objets sont également les mêmes:  w (mot), $ (fin de ligne), etc.
+  2. Les déplacements sont identiques :  w (mot) et  $ (fin de ligne).
 
-  3. Déplacez-vous à la première ligne marquée ---> ci-dessous.
+  3. Déplacez-vous sur la première ligne marquée ---> ci-dessous.
 
   4. Placez le curseur sur la première erreur.
 
-  5. Tapez  c$	pour changer la fin de la ligne, rendez-là identique à la
-     seconde ligne, puis tapez <Échap>.
+  5. Tapez  c$  et tapez le reste de la ligne afin qu'elle soit identique
+     à la seconde ligne, puis tapez <Échap>.
 
 ---> La fin de cette ligne doit être rendue identique à la seconde.
----> La fin de cette ligne doit être corrigée avec la commande	c$ .
+---> La fin de cette ligne doit être corrigée avec la commande  c$ .
+
+NOTE :  Vous pouvez utilisez la touche Retour Arrière pour corriger les
+        erreurs lorsque vous tapez.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 3
+                             RÉSUMÉ DE LA LEÇON 3
 
 
-  1. Pour remettre du texte qui vient d'être effacé, tapez  p . Cela Place le
+  1. Pour remettre le texte qui a déjà été effacé, tapez  p . Cela Place le
      texte effacé APRÈS le curseur (si une ligne complète a été effacée, elle
      sera placée sous la ligne du curseur).
 
   2. Pour remplacer le caractère sous le curseur, tapez  r  suivi du caractère
      qui remplacera l'original.
 
-  3. Le changement vous permet de changer l'objet spécifié, du curseur jusqu'à
-     la fin de l'objet. Par exemple, tapez  cw	pour changer du curseur
-     jusqu'à la fin du mot,  c$  pour changer jusqu'à la fin d'une ligne.
+  3. L'opérateur de changement vous permet de changer depuis la position du
+     curseur jusqu'où le déplacement vous amène. Par exemple, tapez  ce
+     pour changer du curseur jusqu'à la fin du mot,  c$  pour changer jusqu'à
+     la fin d'une ligne.
 
-  4. Le format pour le changement est:
+  4. Le format pour le changement est :
 
-	 [nombre]  c  objet	   OU	     c	[nombre]  objet
+         c   [nombre]   déplacement
 
 Passez maintenant à la leçon suivante.
 
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Leçon 4.1 : POSITION ET ÉTAT DU FICHIER
+               Leçon 4.1 : POSITION DU CURSEUR ET ÉTAT DU FICHIER
 
 
-  ** Tapez Ctrl-G pour afficher votre position dans le fichier et son état.
-     Utilisez Maj-G pour vous rendre à une ligne donnée du fichier. **
+  ** Tapez CTRL-G pour afficher votre position dans le fichier et son état.
+     Tapez  G  pour vous rendre à une ligne donnée du fichier. **
 
-  Note: Lisez toute cette leçon avant d'effectuer l'une des étapes !
+NOTE : Lisez toute cette leçon avant d'effectuer l'une des étapes !!
 
-  1. Maintenez enfoncée la touche Ctrl et appuyez sur  G .  Une ligne d'état
-     va apparaître en bas de l'écran avec le nom du fichier et le numéro de la
-     ligne où vous êtes.  Notez ce numéro, il servira lors de l'étape 3.
+  1. Maintenez enfoncée la touche CTRL et appuyez sur  g . On appelle cela
+     CTRL-G. Une ligne d'état va apparaître en bas de l'écran avec le nom
+     du fichier et le numéro de la ligne où vous êtes. Notez ce numéro, il
+     servira lors de l'étape 3.
 
-  2. Tapez  G  majuscule (Maj-G) pour vous rendre à la fin du fichier.
+NOTE : Vous pouvez peut-être voir le curseur en bas à droite de l'écran.
+       Ceci arrive quand l'option 'ruler' est activée (voir  :help 'ruler')
 
-  3. Tapez le numéro de la ligne où vous étiez suivi de Maj-G.	Cela vous
-     ramènera à la ligne où vous étiez au départ.
-     (Lorsque vous tapez les chiffres, ils n'apparaissent PAS à l'écran).
+  2. Tapez  G   pour vous déplacer à la fin du fichier.
+     Tapez  gg  pour vous déplacer au début du fichier.
+
+  3. Tapez le numéro de la ligne où vous étiez suivi de   G . Cela vous
+     ramènera à la ligne où vous étiez au départ quand vous aviez appuyé
+     CTRL-G.
 
   4. Si vous vous sentez prêt à faire ceci, effectuez les étapes 1 à 3.
 
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			    Leçon 4.2 : LA RECHERCHE
+                            Leçon 4.2 : LA RECHERCHE
 
 
-	  ** Tapez  /  suivi d'un texte pour rechercher ce texte. **
+          ** Tapez  /  suivi d'un texte pour rechercher ce texte. **
 
   1. Tapez le caractère  /  en mode Normal. Notez que celui-ci et le curseur
      apparaissent en bas de l'écran, comme lorsque l'on utilise  : .
 
-  2. Puis tapez 'errreuur' <Entrée>.  C'est le mot que vous voulez rechercher.
+  2. Puis tapez 'errreuur' <Entrée>. C'est le mot que vous voulez rechercher.
 
-  3. Pour rechercher à nouveau le même texte, tapez simplement	n .
-     Pour rechercher le même texte dans la direction opposée, tapez  Maj-N .
+  3. Pour rechercher à nouveau le même texte, tapez simplement  n .
+     Pour rechercher le même texte dans la direction opposée, tapez  N .
 
-  4. Si vous voulez rechercher un texte vers le haut du fichier, utilisez  ?
-     à la place de  / .
+  4. Pour rechercher une phrase dans la direction opposée, utilisez  ?
+     au lieu de  / .
 
----> erreur ne s'écrit pas "errreuur"; errreuur est une erreur.
+---> erreur ne s'écrit pas "errreuur" ; errreuur est une erreur.
 
-Note: Quand la recherche atteint la fin du fichier, elle reprend au début.
-
+NOTE : Quand la recherche atteint la fin du fichier, elle reprend au début
+       sauf si l'option 'wrapscan' est déactivée.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	    Leçon 4.3 : RECHERCHE DES PARENTHÈSES CORRESPONDANTES
+            Leçon 4.3 : RECHERCHE DES PARENTHÈSES CORRESPONDANTES
 
 
-	   ** Tapez  %	pour trouver des ), ] ou } correspondants. **
+           ** Tapez  %  pour trouver des ), ] ou } correspondants. **
 
   1. Placez le curseur sur l'un des (, [ ou { de la ligne marquée --->
      ci-dessous.
 
   2. Puis tapez le caractère  % .
 
-  3. Le curseur devrait se placer sur la parenthèse correspondante.
+  3. Le curseur se déplacera sur la parenthèse out crochet correspondant.
 
-  4. Tapez  %  pour replacer le curseur sur l'autre parenthèse.
+  4. Tapez  %  pour replacer le curseur sur la parenthèse ou crochet
+     correspondant.
+
+  5. Déplacez le curseur sur un autre (,),[,],{ ou } et regardez ce que
+     fait  % .
 
 ---> Voici ( une ligne de test contenant des (, des [ ] et des { } )).
 
-Note: Cette fonctionnalité est très utile lors du débogage d'un programme qui
-      contient des parenthèses déséquilibrées !
-
-
+NOTE : Cette fonctionnalité est très utile lors du débogage d'un programme qui
+       contient des parenthèses déséquilibrées !
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Leçon 4.4 : UNE MANIÈRE DE CORRIGER LES ERREURS
+                    Leçon 4.4 : LA COMMANDE DE SUBSTITUTION
 
 
-  ** Tapez  :s/ancien/nouveau/g  pour remplacer 'ancien' par 'nouveau'.  **
+    ** Tapez  :s/ancien/nouveau/g  pour remplacer 'ancien' par 'nouveau'. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
   2. Tapez  :s/lee/le <Entrée> . Notez que cette commande change seulement la
-     première occurence sur la ligne.
+     première occurrence de "lee" dans la ligne.
 
-  3. Puis tapez  :s/lee/le/g  qui ordonne de faire une substitution globale
-     sur la ligne. Cela change toutes les occurences sur la ligne
+  3. Puis tapez  :s/lee/le/g . L'ajout du drapeau  g  ordonne de faire une
+     substitution globale sur la ligne, et change toutes les occurrences de
+     "lee" sur la ligne.
 
----> lee meilleur moment pour regarder lees fleurs est pendant lee Printemps.
+---> lee meilleur moment pour regarder lees fleurs est pendant lee printemps.
 
-  4. Pour changer toutes les occurences d'un texte, entre deux lignes,
-     tapez  :#,#s/ancien/nouveau/g  où #,# sont les numéros des deux lignes.
-     Tapez  :%s/ancien/nouveau/g    pour changer chaque occurence dans tout
-				    le fichier.
+  4. Pour changer toutes les occurrences d'un texte, entre deux lignes,
+     tapez  :#,#s/ancien/nouveau/g  où #,# sont les numéros de lignes de la
+                                    plage où la substitution doit être faite.
+     Tapez  :%s/ancien/nouveau/g    pour changer toutes les occurrences dans
+                                    tout le fichier.
+     Tapez  :%s/ancien/nouveau/gc   pour trouver toutes les occurrences dans
+                                    tout le fichier avec une invite pour
+                                    confirmer ou infirmer chaque substitution.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 4
+                             RÉSUMÉ DE LA LEÇON 4
 
 
-  1. Ctrl-G  affiche votre position dans le fichier et l'état de celui-ci.
-     Maj-G  vous place à la fin du fichier. Un numéro de ligne suivi de Maj-G
-     vous place à cette ligne.
+  1. CTRL-G       affiche la position dans le fichier et l'état de celui-ci.
+               G  déplace à la fin du fichier.
+     nombre    G  déplace au numéro de ligne.
+              gg  déplace à la première ligne.
 
   2. Taper  /  suivi d'un texte recherche ce texte vers l'AVANT.
      Taper  ?  suivi d'un texte recherche ce texte vers l'ARRIÈRE.
-     Après une recherche tapez	n  pour trouver l'occurence suivante dans la
-     même direction ou	Maj-N  pour rechercher dans la direction opposée.
+     Après une recherche tapez  n  pour trouver l'occurrence suivante dans la
+     même direction ou  Maj-N  pour rechercher dans la direction opposée.
 
   3. Taper  %  lorsque le curseur est sur  (, ), [, ], { ou }  déplace
      celui-ci sur le caractère correspondant.
 
-  4. Pour remplacer le premier aa par bb sur une ligne tapez	 :s/aa/bb
-     Pour remplacer tous les aa par bb sur une ligne tapez	 :s/aa/bb/g
-     Pour remplacer du texte entre deux numéros de ligne tapez	 :#,#s/aa/bb/g
-     Pour remplacer toutes les occurences dans le fichier tapez  :%s/aa/bb/g
-     Pour demander une confirmation à chaque fois ajoutez 'c'	 :%s/aa/bb/gc
+  4. Pour remplacer le premier aa par bb sur une ligne tapez     :s/aa/bb
+     Pour remplacer tous les aa par bb sur une ligne tapez       :s/aa/bb/g
+     Pour remplacer du texte entre deux numéros de ligne tapez   :#,#s/aa/bb/g
+     Pour remplacer toutes les occurrences dans le fichier tapez :%s/aa/bb/g
+     Pour demander une confirmation à chaque fois ajoutez 'c'    :%s/aa/bb/gc
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	      Leçon 5.1 : COMMENT EXÉCUTER UNE COMMANDE EXTERNE
+              Leçon 5.1 : COMMENT EXÉCUTER UNE COMMANDE EXTERNE
 
 
  ** Tapez  :!  suivi d'une commande externe pour exécuter cette commande. **
@@ -516,294 +653,386 @@
      n'importe quelle commande valide pour votre interpréteur (shell).
 
   3. Par exemple, tapez  ls  après le  !  et appuyez <Entrée>. Ceci affichera
-     la liste des fichiers du dossier courant, comme si vous aviez tapé la
-     commande à l'invite du shell. Utilisez  :!dir  si	:!ls  ne marche pas.
+     la liste des fichiers du répertoire courant, comme si vous aviez tapé la
+     commande à l'invite du shell. Utilisez  :!dir  si  :!ls  ne marche pas.
 
-Note:  Il est possible d'exécuter n'importe quelle commande externe de cette
-       manière.
+NOTE :  Il est possible d'exécuter n'importe quelle commande externe de cette
+        manière, avec ou sans argument.
 
-Note:  Toutes les commandes  :  doivent finir par la frappe de <Entrée>.
-
+NOTE :  Toutes les commandes  :  doivent finir par la frappe de <Entrée>.
+        À partir de maintenant, nous ne le mentionnerons plus.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	 Leçon 5.2 : PLUS DE DÉTAILS SUR L'ENREGISTREMENT DE FICHIERS
+         Leçon 5.2 : PLUS DE DÉTAILS SUR L'ENREGISTREMENT DE FICHIERS
 
 
- ** Pour enregistrer les changements faits au fichier, tapez  :w FICHIER . **
+ ** Pour enregistrer les changements faits au texte, tapez  :w FICHIER . **
 
-  1. Tapez  :!dir  ou  :!ls  pour avoir la liste des fichiers du dossier
-     courant. Vous savez déjà qu'il faut appuyer <Entrée> après cela.
+  1. Tapez  :!dir  ou  :!ls  pour avoir la liste des fichiers dans le
+     répertoire courant. Vous savez déjà qu'il faut appuyer <Entrée> après
+     cela.
 
   2. Choisissez un nom de fichier qui n'existe pas encore, par exemple TEST.
 
   3. Puis tapez  :w TEST  (où TEST est le nom que vous avez choisi).
 
-  4. Cela sauvegarde tout le fichier (Tutoriel Vim) sous le nom TEST.
-     Pour le vérifier, tapez  :!dir  pour revisualiser le contenu du dossier.
+  4. Cela enregistre tout le fichier (Tutoriel Vim) sous le nom TEST.
+     Pour le vérifier, tapez  :!dir  ou  :!ls  de nouveau pour revisualiser
+     votre répertoire.
 
-Notez que si vous quittez Vim et y retournez avec le fichier TEST, celui-ci
-sera une copie exacte du cours au moment où vous l'avez sauvé.
+NOTE : Si vous quittez Vim et le redémarrez de nouveau avec le fichier TEST,
+       celui-ci sera une copie exacte de ce cours au moment où vous l'avez
+       enregistré.
 
-  5. Maintenant, effacez le fichier en tapant (MS-DOS):    :!del TEST
-					   ou (Unix):	   :!rm TEST
+  5. Maintenant, effacez le fichier en tapant (MS-DOS) :   :!del TEST
+                                           ou (Unix) :     :!rm TEST
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Leçon 5.3 : UN ENREGISTREMENT SÉLECTIF
+                  Leçon 5.3 : SÉLECTION DU TEXTE À ENREGISTRER
 
 
-     ** Pour enregistrer une portion de fichier, tapez	:#,#w FICHIER **
+                  ** Pour enregistrer une portion du fichier,
+                      tapez :   v  déplacement  :w FICHIER  **
 
-  1. Tapez à nouveau  :!dir  ou  :!ls  pour visualiser le contenu du dossier
-     courant et choisissez un nom de fichier, tel que TEST.
+  1. Déplacez le curseur sur cette ligne.
 
-  2. Déplacez le curseur jusqu'en haut de cette page et tapez  Ctrl-G  pour
-     connaître le numéro de cette ligne. NOTEZ CE NUMÉRO !
+  2. Appuyez  v  et déplacez le curseur vers la cinquième ligne plus bas.
+     Remarquez que le texte est en surbrillance.
 
-  3. Puis rendez-vous au bas de cette page et tapez à nouveau  Ctrl-G .
-     NOTEZ ÉGALEMENT CE NUMÉRO !
+  3. Appuyez  :  . En bas de l'écran  :'<,'> va apparaître.
 
-  4. Pour enregistrer SEULEMENT une portion d'un fichier, tapez  :#,#w TEST
-     où #,# sont les deux numéros que vous avez notés (haut,bas) et TEST est
-     le nom du fichier.
+  4. Tapez   w TEST  , où TEST est un nom de fichier qui n'existe pas.
+     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur Entrée.
 
-  5. Une fois encore, vérifiez la présence du fichier avec  :!dir  mais NE
-     L'EFFACEZ PAS.
+  5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST.
+     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
+     Nous allons l'utiliser dans la leçon suivante.
+
+NOTE : L'appui de  v  démarre la sélection Visuelle. Vous pouvez déplacer le
+       curseur pour agrandir ou rétrécir la sélection. Puis vous pouvez
+       utiliser un opérateur pour faire quelque chose sur le texte. Par
+       exemple,  d  efface le texte.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		 Leçon 5.4 : RÉCUPÉRATION ET FUSION DE FICHIERS
+                 Leçon 5.4 : RÉCUPÉRATION ET FUSION DE FICHIERS
 
 
-	** Pour insérer le contenu d'un fichier, tapez	:r FICHIER **
+        ** Pour insérer le contenu d'un fichier, tapez  :r FICHIER **
 
-  1. Tapez  :!dir  pour vérifier que votre fichier TEST est encore là.
+  1. Placez le curseur juste au dessus de cette ligne.
 
-  2. Placez le curseur en haut de cette page.
+NOTE :  Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3.
+        Puis déplacez vous vers le bas pour voir cette leçon à nouveau.
 
-NOTE:  Après avoir suivi l'étape 3 vous verrez à l'écran la Leçon 5.3.
-       Déplacez-vous vers le bas jusqu'à revenir à cette leçon.
-
-  3. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
+  2. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
      où TEST est le nom de votre fichier.
-
-NOTE:  Le fichier que vous récupérez est placé là où se trouve le curseur.
+     Le fichier que vous récupérez est placé au dessous de la ligne du curseur.
 
   4. Pour vérifier que le fichier a bien été inséré, remontez et vérifiez
      qu'il y a maintenant deux copies de la Leçon 5.3, l'originale et celle
      contenue dans le fichier.
 
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 5
-
-
-  1.  :!commande  exécute une commande externe.
-
-      Quelques exemples pratiques:
-	(MS-DOS)	(Unix)
-	 :!dir		 :!ls		 affiche le contenu du dossier courant.
-	 :!del FICHIER   :!rm FICHIER    efface FICHIER.
-
-  2.  :w FICHIER  enregistre le fichier Vim courant sur le disque avec pour
-		  nom FICHIER.
-
-  3.  :#,#w FICHIER  enregistre les lignes # à # dans le fichier FICHIER.
-
-  4.  :r FICHIER  récupère le fichier FICHIER et l'insère dans le fichier
-		  courant à partir de la position du curseur.
-
-
-
+NOTE :  Vous pouvez aussi lire la sortie d'une commande externe. Par exemple,
+        :r !ls  lit la sortie de la commande ls et la place sous la ligne du
+        curseur.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			    Leçon 6.1 : L'OUVERTURE
+                             RÉSUMÉ DE LA LEÇON 5
+
+
+  1. :!commande  exécute une commande externe.
+
+     Quelques exemples pratiques :
+      (MS-DOS)        (Unix)
+       :!dir           :!ls          affiche le contenu du répertoire courant.
+       :!del FICHIER   :!rm FICHIER  efface FICHIER.
+
+  2. :w FICHIER  enregistre le fichier Vim courant sur le disque avec pour
+                  nom FICHIER.
+
+  3. v  déplacement  :w FICHIER sauvegarde les lignes de la sélection Visuelle
+     dans le fichier FICHIER.
+
+  4. :r FICHIER  récupère le contenu du fichier FICHIER et l'insère sous la
+     position du curseur.
+
+  5. :r !dir  lit la sortie de la commande dir et l'insère sous la position
+     du curseur.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Leçon 6.1 : LA COMMANDE D'OUVERTURE
 
 
 ** Tapez  o  pour ouvrir une ligne sous le curseur et y aller en Insertion. **
 
   1. Déplacez le curseur sur la ligne marquée ---> ci-dessous.
 
-  2. Tapez  o  (minuscule) pour ouvrir une ligne SOUS le curseur et vous y
-     placer en mode Insertion.
+  2. Tapez la lettre   o   minuscule pour ouvrir une ligne SOUS le curseur et
+     vous y placer en mode Insertion.
 
-  3. Puis recopiez la ligne marquée ---> et appuyez sur <Échap> pour quitter
-     le mode Insertion.
+  3. Puis tapez du texte et appuyez <Échap> pour sortir du mode Insertion.
 
----> En tapant	o  le curseur se met sur la ligne ouverte, en mode Insertion.
+---> En tapant  o  le curseur se met sur la ligne ouverte, en mode Insertion.
 
   4. Pour ouvrir une ligne au DESSUS du curseur, tapez simplement un  O
      majuscule, plutôt qu'un  o  minuscule. Faites un essai sur la ligne
      ci-dessous.
-Ouvrez une ligne ci-dessus en tapant MAJ-O lorsque le curseur est ici.
 
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			      Leçon 6.2 : L'AJOUT
-
-
-	    ** Tapez  a  pour insérer du texte APRÈS le curseur. **
-
-  1. Placez le curseur à la fin de la première ligne marquée ---> ci-dessous
-     en tapant	$  en mode Normal.
-
-  2. Tapez un  a  (minuscule) pour ajouter du texte APRÈS le caractère situé
-     sous le curseur. ( A  majuscule ajoute du texte à la fin de la ligne).
-
-Note: Ceci évite de taper  i , le dernier caractère, le texte à insérer,
-      <Échap>, curseur-à-droite, et finalement	x , juste pour ajouter du
-      texte à la fin d'une ligne !
-
-  3. Maintenant, complétez la première ligne. Notez également que l'ajout est
-     identique au mode Insertion, hormis la position où le texte est inséré.
-
----> Cette ligne vous permet de pratiquer
----> Cette ligne vous permet de pratiquer l'ajout de texte en fin de ligne.
+---> Ouvrez une ligne ci-dessus en tapant O lorsque le curseur est ici.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Leçon 6.3 : UNE AUTRE VERSION DU REMPLACEMENT
+                        Leçon 6.2 : LA COMMANDE D'AJOUT
+
+
+            ** Tapez  a  pour insérer du texte APRÈS le curseur. **
+
+  1. Placez le curseur au début de la ligne marquée ---> ci-dessous.
+
+  2. Appuyez  e  jusqu'à ce que le curseur soit sur la fin de  li .
+
+  3. Appuyez  a  (minuscule) pour ajouter du texte APRÈS le curseur.
+
+  4. Complétez le mot comme dans la ligne dessous. Appuyez <Échap> pour
+     sortir du mode Insertion.
+
+  5. Utilisez  e  pour vous déplacer vers le mot incomplet suivant et
+     répétez les étapes 3 et 4.
+
+---> Cette li vous perm de pratiq l'ajout de t dans une ligne.
+---> Cette ligne vous permet de pratiquer l'ajout de texte dans une ligne.
+
+NOTE :  a, i, A vont tous dans le même mode Insertion, la seule différence
+        est l'endroit où les caractères sont insérés.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Leçon 6.3 : UNE AUTRE MANIÈRE DE REMPLACER
 
 
        ** Tapez un  R  majuscule pour remplacer plus d'un caractère. **
 
   1. Déplacez le curseur sur la première ligne marquée ---> ci-dessous.
+     Déplacez le curseur sur le début du premier xxx .
 
-  2. Placez le curseur au début du premier mot qui diffère de la seconde ligne
-     marquée ---> (le mot 'celle').
+  2. Appuyez maintenant  R  et tapez le nombre dessous dans la deuxième ligne,
+     de manière à remplacer le xxx .
 
-  3. Puis tapez  R  et remplacez le reste du texte de la première ligne en
-     tapant par dessus celui-ci, de manière à rendre la première ligne
-     identique à la seconde.
+  3. Appuyez <Échap> pour quitter le mode Remplacement. Notez que le reste de
+     la ligne demeure inchangé.
 
----> Pour rendre cette ligne identique à celle du dessous utilisez le clavier.
----> Pour rendre cette ligne identique à la seconde, tapez R et la correction.
+  4. Répétez les étapes pour remplacer les xxx restants.
 
-  4. Notez que lorsque vous appuyez <Échap>, le texte qui n'a pas encore été
-     remplacé reste.
 
+---> L'ajout de 123 à xxx donne xxx.
+---> L'ajout de 123 à 456 donne 579.
+
+NOTE : Le mode Remplacement est comme le mode Insertion, mais tous les
+       caractères tapés effacent un caractère existant.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Leçon 6.4 : RÉGLAGE DES OPTIONS
+                     Leçon 6.4 : COPIER ET COLLER DU TEXTE
 
 
-  ** Réglons une option afin que la recherche et la substitution ignorent la
-     casse des caractères. **
+   ** Utilisez l'opérateur  y  pour copier du texte et  p  pour le coller **
 
-  1. Recherchez 'ignore' en tapant  /ignore .
+  1. Allez à la ligne marquée ---> ci-dessous et placez le curseur après "a)".
+
+  2. Démarrez le mode Visuel avec  v  et déplacez le curseur juste devant
+     "premier".
+
+  3. Tapez  y  pour copier le texte en surbrillance.
+
+  4. Déplacez la curseur à la fin de la ligne suivante :   j$
+
+  5. Tapez  p  pour coller le texte. Puis tapez :  un second <Échap> .
+
+  6. Utilisez le mode Visuel pour sélectionner "élément", copiez le avec  y  ,
+     déplacez vous à la fin de la ligne suivant avec  j$  et collez le texte
+     à cet endroit avec  p .
+
+--->  a) ceci est le premier élément.
+      b)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Leçon 6.4 : RÉGLAGE DES OPTIONS
+
+
+    ** Réglons une option afin que la recherche et la substitution ignore la
+       casse des caractères. **
+
+  1. Recherchez 'ignore' en tapant :   /ignore <Entrée>
      Répétez ceci plusieurs fois en utilisant la touche  n .
 
-  2. Activez l'option 'ic' (Ignorer casse) en tapant  :set ic .
+  2. Activez l'option 'ic' (ignorer casse) en tapant  :set ic .
 
-  3. Puis poursuivez votre recherche en utilisant  n .
-     Répétez cette recherche plusieurs fois avec la touche  n .
+  3. Puis cherchez 'ignore' de nouveau en utilisant  n .
+     Remarquez que Ignore et IGNORE sont maintenant aussi trouvés.
 
   4. Activez les options 'hlsearch' et 'incsearch' avec  :set hls is .
 
   5. Puis recommencez une recherche, et faites bien attention à ce qui se
-     produit:  /ignore .
+     produit :  /ignore <Entrée>
 
-  6. Pour interrompre la mise en surbrillance des résultats, tapez:
-     :nohlsearch
+  6. Pour désactiver 'ignorer casse', entrez :  :set noic
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			     RÉSUMÉ DE LA LEÇON 6
+NOTE : Pour enlever la surbrillance des résultats, entrez :   :nohlsearch
 
-
-  1. Taper  o  ouvre une ligne SOUS le curseur et y place celui-ci en mode
-     Insertion. Taper un  O  majuscule ouvre une ligne au DESSUS de la ligne
-     où se trouve le curseur.
-
-  2. Tapez un  a  pour insérer du texte APRÈS le caractère où se trouve le
-     curseur. Taper un	A  majuscule ajoute du texte automatiquement à la fin
-     de la ligne.
-
-  3. Taper un  R  majuscule active le mode Remplacement jusqu'à ce que la
-     touche  <Échap>  soit appuyée pour en sortir.
-
-  4. Taper  :set xxx  active l'option 'xxx'.
-
-
-
-
-
+NOTE : Si vous voulez ignorer la casse uniquement pour une recherche, utilisez
+       \c  dans la phrase :   /ignore\c  <Entrée>
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Leçon 7 : ACCÉDER À L'AIDE EN LIGNE
+                             RÉSUMÉ DE LA LEÇON 6
 
-		  ** Utiliser le système d'aide en ligne. **
 
-  Vim a un système complet d'aide en ligne.  Pour y accéder, essayez l'une de
-  ces trois méthodes:
-	- appuyez la touche <Help> (si vous en avez une)
-	- appuyez la touche <F1> (si vous en avez une)
-	- tapez  :help <Entrée>
+  1. Taper  o  ouvre une ligne SOUS le curseur et démarre le mode Insertion.
+     Taper  O  ouvre une ligne au DESSUS du curseur.
 
-  Tapez  :q <Entrée>  pour fermer la fenêtre d'aide.
+  2. Taper  a  pour insérer du texte APRÈS le curseur.
+     Taper  A  pour insérer du texte après la fin de ligne.
+
+  3. Taper  e  déplace à la fin du mot.
+
+  4. Taper  y  copie du texte,  p  le colle.
+
+  5. Taper  R  majuscule active le mode Remplacement jusqu'à ce qu' <Échap>
+     soit appuyé.
+
+  6. Taper  ":set xxx"  active l'option "xxx". Quelques options sont :
+        'ic'  'ingnorecase' pour ignorer la casse lors des recherches.
+        'is'  'incsearch'   pour montrer les appariements partiels.
+        'hls' 'hlsearch'    pour mettre en surbrillance les appariements.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Leçon 7.1 : OBTENIR DE L'AIDE
+
+
+                  ** Utiliser le système d'aide en ligne. **
+
+  Vim a un système complet d'aide en ligne. Pour y accéder, essayez l'une de
+  ces trois méthodes :
+        - appuyez la touche <Help> (si vous en avez une)
+        - appuyez la touche <F1> (si vous en avez une)
+        - tapez  :help <Entrée>
+
+
+  Lisez le texte dans la fenêtre d'aide pour savoir comment fonctionne l'aide.
+  Tapez  CTRL-W CTRL-W   pour sauter d'une fenêtre à l'autre.
+  Tapez  :q <Entrée>     pour fermer la fenêtre d'aide.
 
   Vous pouvez accéder à l'aide sur à peu près n'importe quel sujet en donnant
   des arguments à la commande  :help . Essayez par exemple (n'oubliez pas
-  d'appuyer sur <Entrée>):
+  d'appuyer sur <Entrée>) :
 
-	:help w
-	:help c_<T
-	:help insert-index
-	:help user-manual
+        :help w
+        :help c_CTRL-D
+        :help c_<T
+        :help insert-index
+        :help user-manual
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Leçon 8 : CRÉER UN SCRIPT DE DÉMARRAGE
+                    Leçon 7.2 : CRÉER UN SCRIPT DE DÉMARRAGE
 
-		  ** Activer les fonctionnalités de Vim. **
+                   ** Activer les fonctionnalités de Vim. **
 
   Vim a beaucoup plus de fonctionnalités que Vi, mais la plupart de celles-ci
-  sont désactivées par défaut.  Pour commencer à les utiliser, vous devez
+  sont désactivées par défaut. Pour commencer à les utiliser, vous devez
   créer un fichier "vimrc".
 
-  1. Commencez à éditer le fichier "vimrc". Ceci dépend de votre système:
-	:edit ~/.vimrc			pour Unix
-	:edit $VIM/_vimrc		pour MS-Windows
+  1. Commencez à éditer le fichier "vimrc". Ceci dépend de votre système :
+        :edit ~/.vimrc         pour Unix
+        :edit $VIM/_vimrc      pour MS-Windows
 
-  2. Intégrez maintenant le texte du fichier "vimrc" d'exemple:
-	:read $VIMRUNTIME/vimrc_example.vim
+  2. Lisez maintenant le fichier d'exemple "vimrc" :
+        :r $VIMRUNTIME/vimrc_example.vim
 
-  3. Enregistrez le fichier avec:
-	:write
+  3. Enregistrez le fichier avec :
+        :w
 
-  La prochaine fois que vous démarrerez Vim, le surlignage syntactique sera
-  activé. Vous pouvez ajouter tous vos réglages préférés dans ce fichier.
+  La prochaine fois que vous démarrerez Vim, la coloration syntaxique sera
+  activée. Vous pouvez ajouter tous vos réglages préférés dans ce fichier
+  "vimrc". Pour plus d'informations, tapez  :help vimrc-intro
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                            Leçon 7.3 : COMPLÈTEMENT
+
+
+          ** Complètement de ligne de commande avec CTRL-D et <TAB> **
+
+  1. Mettez Vim soit en mode non compatible :   set nocp
+
+  2. Regardez quels fichiers existent dans le répertoire :  !ls  ou  !dir
+
+  3. Tapez le début d'une commande :   :e
+
+  4. Appuyez  CTRL-D  et Vim affichera une liste de commandes qui commencent
+     par "e".
+
+  5. Appuyez  <TAB>  et Vim complétera le nom de la commande :  ":edit"
+
+  6. Ajoutez maintenant un espace et le début d'un fichier existant :
+     :edit  FIC
+
+  7  Appuyez  <TAB>. Vim va compléter le nom (s'il est unique).
+
+NOTE : Le complètement fonctionne pour de nombreuse commandes. Essayez
+       d'appuyer CTRL-D et <TAB>. C'est utile en particulier pour  :help .
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              RÉSUMÉ DE LA LEÇON 7
+
+
+  1. Tapez  :help  ou appuyez <F1> ou <Aide> pour ouvrir la fenêtre d'aide.
+
+  2. Tapez  :help cmd  pour trouver l'aide sur  cmd .
+
+  3. Tapez  CTRL-W CTRL-W  pour sauter à une autre fenêtre.
+
+  4. Tapez  :q  pour fermer la fenêtre d'aide.
+
+  5. Créez un script de démarrage vimrc pour conserver vos réglages préférés.
+
+  6. Quand vous tapez une commande  :  appuyez CTRL-D pour voir les
+     complètements possibles. Appuyez <TAB> pour utiliser un complètement.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-  Ceci conclut le Tutoriel Vim.  Le but était de vous donner un bref aperçu de
+  Ceci conclut le Tutoriel Vim. Le but était de vous donner un bref aperçu de
   l'éditeur Vim, juste assez pour vous permettre d'utiliser l'éditeur
-  relativement facilement.  Il est loin d'être complet, vu que Vim a beaucoup
-  beaucoup plus de commandes.  Un Manuel de l'utilisateur est disponible en
-  anglais:  :help user-manual .
+  relativement facilement. Il est loin d'être complet, vu que Vim a beaucoup
+  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
+  anglais :  :help user-manual .
 
   Pour continuer à découvrir et à apprendre Vim, il existe un livre traduit en
   français. Il parle plus de Vi que de Vim, mais pourra vous être utile.
-	L'éditeur Vi - Collection Précis et concis - par Arnold Robbins
-	Éditeur: O'Reilly France
-	ISBN: 2-84177-102-4
+        L'éditeur Vi - Collection Précis et concis - par Arnold Robbins
+        Éditeur : O'Reilly France
+        ISBN : 2-84177-102-4
 
   Deux livres en anglais sont également mentionnés dans la version originale
   de ce tutoriel, dont un qui traite spécifiquement de Vim. Merci de vous y
-  référer si vous êtes intéressé.
+  référer si vous êtes intéressés.
 
   Ce tutoriel a été écrit par Michael C. Pierce et Robert K. Ware de l'École
   des Mines du Colorado et reprend des idées fournies par Charles Smith,
-  Universté d'État du Colorado.  E-mail: bware@mines.colorado.edu.
+  Université d'État du Colorado. E-mail : bware@mines.colorado.edu.
 
   Modifié pour Vim par Bram Moolenar.
-
   Traduit en Français par Adrien Beau, en avril 2001.
-  E-mail:	version.francaise@free.fr
-  Last Change:	2003 May 29
+  Dernières mises à jour par Dominique Pellé.
+
+  E-mail :      dominique.pelle@gmail.com
+  Last Change : 2008 Nov 23
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.hu b/runtime/tutor/tutor.hu
index 84e6bd4..6fb3270 100644
--- a/runtime/tutor/tutor.hu
+++ b/runtime/tutor/tutor.hu
@@ -1,5 +1,5 @@
 ===============================================================================
-=    Ü d v ö z ö l j ü k   a   V I M   T u t o r b a n  -    1.5-ös  verzió ===
+== Ü d v ö z ö l j ü k   a   V I M - o k t a t ó b a n  -    1.5-ös  verzió  ==
 ===============================================================================
 
      A Vim egy nagyon hatékony szerkesztõ, amelnyek rengeteg utasítása
@@ -38,7 +38,7 @@
   2. Tartsa lenyomva a lefelét (j), akkor ismétlõdik!
 ---> Most tudja, hogyan mehet a következõ leckére.
 
-  3. A lefelé fomb használatával menjen a 1.2. leckére!
+  3. A lefelé gomb használatával menjen a 1.2. leckére!
 
 Megj: Ha nem biztos benne, mit nyomott meg, nyomja meg az <ESC>-et, hogy
       normál módba kerüljön, és ismételje meg a parancsot!
@@ -60,8 +60,8 @@
      Ha menteni szeretné a változásokat és kilépni, írja:
 				:wq  <ENTER>
 
-  3. Amikor a shell promptot látja, írja be a parancsot, amely ebbe a
-     tutorba hozza:
+  3. Amikor a shell promptot látja, írja be a parancsot, amely ebbe az
+     oktatóba hozza:
      Ez valószínûleg:	vimtutor <ENTER>
      Normális esetben ezt írná:	vim tutor.hu <ENTER>
 
@@ -230,7 +230,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 2.5.  lecke: A VISSZAVONÁS (UNDO) PARANCS
+		   2.5.  lecke: A VISSZAVONÁS (UNDO) PARANCS
 
 
 ** u gépelésével visszavonható az utolsó parancs, U az egész sort helyreállítja. **
@@ -245,9 +245,9 @@
   7. CTRL-R (CTRL gomb lenyomása mellett üssön R-t) párszor csinálja újra a
      visszavont parancsokat (redo)!
 
----> Javíítsd a hhibákaat ebbben a sooorban majd állítsa visszaaa az eredetit.
+---> Javíítsa a hhibákaat ebbben a sooorban majd állítsa visszaaa az eredetit.
 
-  8. Ezek nagyon hasznos parancsok. Most ugarjon a 2. lecke összefoglalójára.
+  8. Ezek nagyon hasznos parancsok. Most ugorjon a 2. lecke összefoglalójára.
 
 
 
@@ -257,7 +257,7 @@
 
   1. Törlés a kurzortól a szó végéig:    dw
 
-  2. Törlés a kurzortól a szó végéig:    d$
+  2. Törlés a kurzortól a sor végéig:    d$
 
   3. Egész sor törlése:    dd
 
@@ -275,7 +275,7 @@
      Visszavonások visszavonása:	     CTRL-R
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 3.1.  lecke: A PUT PARANCS
+		3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
 
 
   ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
@@ -284,8 +284,8 @@
 
   2. dd leütésével töröljük a sort és eltérolódik a Vim pufferében.
 
-  3. Mozgassuk a kurzort AFÖLÉ a sor fölé, ahová mozgatni szeretnénk a
-     törölt sort.
+  3. Mozgassuk a kurzort azelõtt a  sor ELÕTTI sorba, ahová mozgatni
+     szeretnénk a törölt sort.
 
   4. Normál módban írjunk  p   betût a törölt sor beillesztéséhez.
 
@@ -299,7 +299,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       3.2.  lecke: A REPLACE PARANCS
+		       3.2.  lecke: AZ ÁTÍRÁS (REPLACE) PARANCS
 
 
 ** r  és  a karakterek leütésével a kurzor alatti karaktert megváltoztatjuk. **
@@ -321,7 +321,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			3.3.  lecke: A CHANGE PARANCS
+			3.3.  lecke: A CSERE (CHANGE) PARANCS
 
 
 	   ** A szó egy részének megváltoztatásához írjuk:  cw . **
@@ -415,7 +415,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			4.2.  lecke: A SEARCH PARANCS
+			4.2.  lecke: A KERESÉS (SEARCH) PARANCS
 
 
   ** / majd a kívánt kifejezés beírásával kereshetjük meg a kifejezést. **
@@ -459,7 +459,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
+		  4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
 
 
     ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
@@ -470,10 +470,10 @@
      sorban.
 
   3. Most ezt írjuk:	 :s/eggy/egg/g	   amely globálisan helyettesít
-     a sorban.
+     a sorban, azaz minden elõfordulást.
      Ez a sorban minden elõfordulást helyettesít.
 
----> eggy hegy meggy, szembe jön eggy másik heggy.
+---> eggy heggy meggy, szembe jön eggy másik heggy.
 
   4. Két sor között a karaktersor minden elõfordulásának helyettesítése:
      :#,#s/régi/új/g    ahol #,# a két sor sorszáma.
@@ -530,7 +530,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      5.2.  lecke: BÕVEBBEN A FÁJLOK ÍRÁSÁRÓL
+		 5.2.  lecke: BÕVEBBEN A FÁJLOK ÍRÁSÁRÓL
 
 
      ** A fájlok változásait így írhatjuk ki  :w FÁJLNÉV. **
@@ -542,12 +542,12 @@
 
   3. Írja:	:w TESZT   (ahol TESZT a választott fájlnév)!
 
-  4. Ez elmenti a teljes fájlt (a Vim Tutort) TESZT néven.
+  4. Ez elmenti a teljes fájlt (a Vim oktatóját) TESZT néven.
      Ellenõrzésképp írjuk ismét    :!dir   hogy lássuk a könyvtárat!
      (Felfelé gombbal : után az elõzõ utasítások visszahozhatóak.)
 
 Megj: Ha Ön kilépne a Vimbõl és és visszatérne a TESZT fájlnévvel, akkor a
-      fájl a tutor mentéskori pontos másolata lenne.
+      fájl az oktató mentéskori pontos másolata lenne.
 
   5. Távolítsa el a fájlt  (MS-DOS):	:!del TESZT
 			vagy (Unix):	:!rm TESZT
@@ -626,7 +626,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 6.1.  lecke: A OPEN PARANCS
+		   6.1.  lecke: A MEGNYITÁS (OPEN) PARANCS
 
 
 ** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
@@ -684,16 +684,17 @@
 
   1. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
 
-  2. Place the cursor at the beginning of the first word that is different
-     from the second line marked ---> (the word 'last').
+  2. Helyezze a kurzort az elsõ szó elejére amely eltér a második
+     ---> kezdetû sor tartalmától (a 'az utolsóval' résztõl).
 
-  3. Now type  R  and replace the remainder of the text on the first line by
-     typing over the old text to make the first line the same as the second.
+  3. Nyomjon R karaktert és írja ét a szöveg maradékát az elsõ sorban
+     úgy, hogy a  két sor egyezõ legyen.
 
----> To make the first line the same as the last on this page use the keys.
----> To make the first line the same as the second, type R and the new text.
+---> Az elsõ sort tegye azonossá az utolsóval: használja a gombokat.
+---> Az elsõ sort tegye azonossá a másodikkal: írjon R-t és az új szöveget.
 
-  4. Note that when you press <ESC> to exit, any unaltered text remains.
+  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
+     szövegek változatlanok maradnak.
 
 
 
@@ -726,16 +727,16 @@
 			       6. LECKE ÖSSZEFOGLALÓJA
 
 
-  1. Typing  o	opens a line BELOW the cursor and places the cursor on the open
-     line in Insert mode.
-     Typing a capital  O  opens the line ABOVE the line the cursor is on.
+  1. o	beírásával új sort nyitunk meg a sor ALATT és a kurzor az új
+     sorban lesz beszúrás-módban.
+     Nagy  O  a sor FELETT nyit új sort, és oda kerül a kurzor.
 
-  2. Type an  a  to insert text AFTER the character the cursor is on.
-     Typing a capital  A  automatically appends text to the end of the line.
+  2. a  beírásával az aktuális karaktertõl UTÁN (jobbra) szúrhatunk be szöveget.
+     Nagy A  automatikusan a sor legvégéhez adja hozzá a szöveget.
 
-  3. Typing a capital  R  enters Replace mode until  <ESC>  is pressed to exit.
+  3. A nagy  R  beütésével átíró (replace) módba kerülünk  <ESC> lenyomásáig.
 
-  4. Typing ":set xxx" sets the option "xxx"
+  4. ":set xxx" beírásával az "xxx" opció állítható be.
 
 
 
@@ -746,7 +747,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       7. lecke: ON-LINE HELP PARANCSOK
+		     7. lecke: AZ ON-LINE SÚGÓ PARANCSAI
 
 
 		    ** Az online súgórendszer használata **
@@ -801,8 +802,9 @@
   tudóknak: ":help user-manual". (egyelõre nem tud magyarul)
 
   További magyar olvasnivalók érhetõek el az alábbi oldalról.
-  http://ubuntu.hu/index.php?title=Vim
+  http://wiki.hup.hu/index.php/Vim
 
+  Angol olvasmányok:
   For further reading and studying, this book is recommended:
 	Vim - Vi Improved - by Steve Oualline
 	Publisher: New Riders
@@ -816,8 +818,13 @@
   It is a good book to get to know almost anything you want to do with Vi.
   The sixth edition also includes information on Vim.
 
-  This tutorial was written by Michael C. Pierce and Robert K. Ware,
-  Colorado School of Mines using ideas supplied by Charles Smith,
-  Colorado State University.  E-mail: bware@mines.colorado.edu.
+  Ezt az oktatót Michael C. Pierce és Robert K. Ware írta, a Colorado
+  School of Mines dolgozói Charles Smith (Colorado State University)
+  támogatásával.
 
-  Modified for Vim by Bram Moolenaar.
+  E-mail: bware@mines.colorado.edu.
+
+  A Vimhez idomította Bram Moolenaar.
+
+  Magyarította: Horváth Árpád <horvath.arpad@roik.bmf.hu>, 2006-2008
+
diff --git a/runtime/tutor/tutor.hu.cp1250 b/runtime/tutor/tutor.hu.cp1250
index 84e6bd4..6fb3270 100644
--- a/runtime/tutor/tutor.hu.cp1250
+++ b/runtime/tutor/tutor.hu.cp1250
@@ -1,5 +1,5 @@
 ===============================================================================
-=    Ü d v ö z ö l j ü k   a   V I M   T u t o r b a n  -    1.5-ös  verzió ===
+== Ü d v ö z ö l j ü k   a   V I M - o k t a t ó b a n  -    1.5-ös  verzió  ==
 ===============================================================================
 
      A Vim egy nagyon hatékony szerkesztõ, amelnyek rengeteg utasítása
@@ -38,7 +38,7 @@
   2. Tartsa lenyomva a lefelét (j), akkor ismétlõdik!
 ---> Most tudja, hogyan mehet a következõ leckére.
 
-  3. A lefelé fomb használatával menjen a 1.2. leckére!
+  3. A lefelé gomb használatával menjen a 1.2. leckére!
 
 Megj: Ha nem biztos benne, mit nyomott meg, nyomja meg az <ESC>-et, hogy
       normál módba kerüljön, és ismételje meg a parancsot!
@@ -60,8 +60,8 @@
      Ha menteni szeretné a változásokat és kilépni, írja:
 				:wq  <ENTER>
 
-  3. Amikor a shell promptot látja, írja be a parancsot, amely ebbe a
-     tutorba hozza:
+  3. Amikor a shell promptot látja, írja be a parancsot, amely ebbe az
+     oktatóba hozza:
      Ez valószínûleg:	vimtutor <ENTER>
      Normális esetben ezt írná:	vim tutor.hu <ENTER>
 
@@ -230,7 +230,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 2.5.  lecke: A VISSZAVONÁS (UNDO) PARANCS
+		   2.5.  lecke: A VISSZAVONÁS (UNDO) PARANCS
 
 
 ** u gépelésével visszavonható az utolsó parancs, U az egész sort helyreállítja. **
@@ -245,9 +245,9 @@
   7. CTRL-R (CTRL gomb lenyomása mellett üssön R-t) párszor csinálja újra a
      visszavont parancsokat (redo)!
 
----> Javíítsd a hhibákaat ebbben a sooorban majd állítsa visszaaa az eredetit.
+---> Javíítsa a hhibákaat ebbben a sooorban majd állítsa visszaaa az eredetit.
 
-  8. Ezek nagyon hasznos parancsok. Most ugarjon a 2. lecke összefoglalójára.
+  8. Ezek nagyon hasznos parancsok. Most ugorjon a 2. lecke összefoglalójára.
 
 
 
@@ -257,7 +257,7 @@
 
   1. Törlés a kurzortól a szó végéig:    dw
 
-  2. Törlés a kurzortól a szó végéig:    d$
+  2. Törlés a kurzortól a sor végéig:    d$
 
   3. Egész sor törlése:    dd
 
@@ -275,7 +275,7 @@
      Visszavonások visszavonása:	     CTRL-R
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 3.1.  lecke: A PUT PARANCS
+		3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
 
 
   ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
@@ -284,8 +284,8 @@
 
   2. dd leütésével töröljük a sort és eltérolódik a Vim pufferében.
 
-  3. Mozgassuk a kurzort AFÖLÉ a sor fölé, ahová mozgatni szeretnénk a
-     törölt sort.
+  3. Mozgassuk a kurzort azelõtt a  sor ELÕTTI sorba, ahová mozgatni
+     szeretnénk a törölt sort.
 
   4. Normál módban írjunk  p   betût a törölt sor beillesztéséhez.
 
@@ -299,7 +299,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       3.2.  lecke: A REPLACE PARANCS
+		       3.2.  lecke: AZ ÁTÍRÁS (REPLACE) PARANCS
 
 
 ** r  és  a karakterek leütésével a kurzor alatti karaktert megváltoztatjuk. **
@@ -321,7 +321,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			3.3.  lecke: A CHANGE PARANCS
+			3.3.  lecke: A CSERE (CHANGE) PARANCS
 
 
 	   ** A szó egy részének megváltoztatásához írjuk:  cw . **
@@ -415,7 +415,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			4.2.  lecke: A SEARCH PARANCS
+			4.2.  lecke: A KERESÉS (SEARCH) PARANCS
 
 
   ** / majd a kívánt kifejezés beírásával kereshetjük meg a kifejezést. **
@@ -459,7 +459,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
+		  4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
 
 
     ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
@@ -470,10 +470,10 @@
      sorban.
 
   3. Most ezt írjuk:	 :s/eggy/egg/g	   amely globálisan helyettesít
-     a sorban.
+     a sorban, azaz minden elõfordulást.
      Ez a sorban minden elõfordulást helyettesít.
 
----> eggy hegy meggy, szembe jön eggy másik heggy.
+---> eggy heggy meggy, szembe jön eggy másik heggy.
 
   4. Két sor között a karaktersor minden elõfordulásának helyettesítése:
      :#,#s/régi/új/g    ahol #,# a két sor sorszáma.
@@ -530,7 +530,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      5.2.  lecke: BÕVEBBEN A FÁJLOK ÍRÁSÁRÓL
+		 5.2.  lecke: BÕVEBBEN A FÁJLOK ÍRÁSÁRÓL
 
 
      ** A fájlok változásait így írhatjuk ki  :w FÁJLNÉV. **
@@ -542,12 +542,12 @@
 
   3. Írja:	:w TESZT   (ahol TESZT a választott fájlnév)!
 
-  4. Ez elmenti a teljes fájlt (a Vim Tutort) TESZT néven.
+  4. Ez elmenti a teljes fájlt (a Vim oktatóját) TESZT néven.
      Ellenõrzésképp írjuk ismét    :!dir   hogy lássuk a könyvtárat!
      (Felfelé gombbal : után az elõzõ utasítások visszahozhatóak.)
 
 Megj: Ha Ön kilépne a Vimbõl és és visszatérne a TESZT fájlnévvel, akkor a
-      fájl a tutor mentéskori pontos másolata lenne.
+      fájl az oktató mentéskori pontos másolata lenne.
 
   5. Távolítsa el a fájlt  (MS-DOS):	:!del TESZT
 			vagy (Unix):	:!rm TESZT
@@ -626,7 +626,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 6.1.  lecke: A OPEN PARANCS
+		   6.1.  lecke: A MEGNYITÁS (OPEN) PARANCS
 
 
 ** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
@@ -684,16 +684,17 @@
 
   1. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
 
-  2. Place the cursor at the beginning of the first word that is different
-     from the second line marked ---> (the word 'last').
+  2. Helyezze a kurzort az elsõ szó elejére amely eltér a második
+     ---> kezdetû sor tartalmától (a 'az utolsóval' résztõl).
 
-  3. Now type  R  and replace the remainder of the text on the first line by
-     typing over the old text to make the first line the same as the second.
+  3. Nyomjon R karaktert és írja ét a szöveg maradékát az elsõ sorban
+     úgy, hogy a  két sor egyezõ legyen.
 
----> To make the first line the same as the last on this page use the keys.
----> To make the first line the same as the second, type R and the new text.
+---> Az elsõ sort tegye azonossá az utolsóval: használja a gombokat.
+---> Az elsõ sort tegye azonossá a másodikkal: írjon R-t és az új szöveget.
 
-  4. Note that when you press <ESC> to exit, any unaltered text remains.
+  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
+     szövegek változatlanok maradnak.
 
 
 
@@ -726,16 +727,16 @@
 			       6. LECKE ÖSSZEFOGLALÓJA
 
 
-  1. Typing  o	opens a line BELOW the cursor and places the cursor on the open
-     line in Insert mode.
-     Typing a capital  O  opens the line ABOVE the line the cursor is on.
+  1. o	beírásával új sort nyitunk meg a sor ALATT és a kurzor az új
+     sorban lesz beszúrás-módban.
+     Nagy  O  a sor FELETT nyit új sort, és oda kerül a kurzor.
 
-  2. Type an  a  to insert text AFTER the character the cursor is on.
-     Typing a capital  A  automatically appends text to the end of the line.
+  2. a  beírásával az aktuális karaktertõl UTÁN (jobbra) szúrhatunk be szöveget.
+     Nagy A  automatikusan a sor legvégéhez adja hozzá a szöveget.
 
-  3. Typing a capital  R  enters Replace mode until  <ESC>  is pressed to exit.
+  3. A nagy  R  beütésével átíró (replace) módba kerülünk  <ESC> lenyomásáig.
 
-  4. Typing ":set xxx" sets the option "xxx"
+  4. ":set xxx" beírásával az "xxx" opció állítható be.
 
 
 
@@ -746,7 +747,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       7. lecke: ON-LINE HELP PARANCSOK
+		     7. lecke: AZ ON-LINE SÚGÓ PARANCSAI
 
 
 		    ** Az online súgórendszer használata **
@@ -801,8 +802,9 @@
   tudóknak: ":help user-manual". (egyelõre nem tud magyarul)
 
   További magyar olvasnivalók érhetõek el az alábbi oldalról.
-  http://ubuntu.hu/index.php?title=Vim
+  http://wiki.hup.hu/index.php/Vim
 
+  Angol olvasmányok:
   For further reading and studying, this book is recommended:
 	Vim - Vi Improved - by Steve Oualline
 	Publisher: New Riders
@@ -816,8 +818,13 @@
   It is a good book to get to know almost anything you want to do with Vi.
   The sixth edition also includes information on Vim.
 
-  This tutorial was written by Michael C. Pierce and Robert K. Ware,
-  Colorado School of Mines using ideas supplied by Charles Smith,
-  Colorado State University.  E-mail: bware@mines.colorado.edu.
+  Ezt az oktatót Michael C. Pierce és Robert K. Ware írta, a Colorado
+  School of Mines dolgozói Charles Smith (Colorado State University)
+  támogatásával.
 
-  Modified for Vim by Bram Moolenaar.
+  E-mail: bware@mines.colorado.edu.
+
+  A Vimhez idomította Bram Moolenaar.
+
+  Magyarította: Horváth Árpád <horvath.arpad@roik.bmf.hu>, 2006-2008
+
diff --git a/runtime/tutor/tutor.hu.utf-8 b/runtime/tutor/tutor.hu.utf-8
index b64155f..ec486d9 100644
--- a/runtime/tutor/tutor.hu.utf-8
+++ b/runtime/tutor/tutor.hu.utf-8
@@ -1,5 +1,5 @@
 ===============================================================================
-=    Ü d v ö z ö l j ü k   a   V I M   T u t o r b a n  -    1.5-ös  verzió ===
+== Ü d v ö z ö l j ü k   a   V I M - o k t a t ó b a n  -    1.5-ös  verzió  ==
 ===============================================================================
 
      A Vim egy nagyon hatékony szerkesztő, amelnyek rengeteg utasítása
@@ -38,7 +38,7 @@
   2. Tartsa lenyomva a lefelét (j), akkor ismétlődik!
 ---> Most tudja, hogyan mehet a következő leckére.
 
-  3. A lefelé fomb használatával menjen a 1.2. leckére!
+  3. A lefelé gomb használatával menjen a 1.2. leckére!
 
 Megj: Ha nem biztos benne, mit nyomott meg, nyomja meg az <ESC>-et, hogy
       normál módba kerüljön, és ismételje meg a parancsot!
@@ -60,8 +60,8 @@
      Ha menteni szeretné a változásokat és kilépni, írja:
 				:wq  <ENTER>
 
-  3. Amikor a shell promptot látja, írja be a parancsot, amely ebbe a
-     tutorba hozza:
+  3. Amikor a shell promptot látja, írja be a parancsot, amely ebbe az
+     oktatóba hozza:
      Ez valószínűleg:	vimtutor <ENTER>
      Normális esetben ezt írná:	vim tutor.hu <ENTER>
 
@@ -230,7 +230,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 2.5.  lecke: A VISSZAVONÁS (UNDO) PARANCS
+		   2.5.  lecke: A VISSZAVONÁS (UNDO) PARANCS
 
 
 ** u gépelésével visszavonható az utolsó parancs, U az egész sort helyreállítja. **
@@ -245,9 +245,9 @@
   7. CTRL-R (CTRL gomb lenyomása mellett üssön R-t) párszor csinálja újra a
      visszavont parancsokat (redo)!
 
----> Javíítsd a hhibákaat ebbben a sooorban majd állítsa visszaaa az eredetit.
+---> Javíítsa a hhibákaat ebbben a sooorban majd állítsa visszaaa az eredetit.
 
-  8. Ezek nagyon hasznos parancsok. Most ugarjon a 2. lecke összefoglalójára.
+  8. Ezek nagyon hasznos parancsok. Most ugorjon a 2. lecke összefoglalójára.
 
 
 
@@ -257,7 +257,7 @@
 
   1. Törlés a kurzortól a szó végéig:    dw
 
-  2. Törlés a kurzortól a szó végéig:    d$
+  2. Törlés a kurzortól a sor végéig:    d$
 
   3. Egész sor törlése:    dd
 
@@ -275,7 +275,7 @@
      Visszavonások visszavonása:	     CTRL-R
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 3.1.  lecke: A PUT PARANCS
+		3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
 
 
   ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
@@ -284,8 +284,8 @@
 
   2. dd leütésével töröljük a sort és eltérolódik a Vim pufferében.
 
-  3. Mozgassuk a kurzort AFÖLÉ a sor fölé, ahová mozgatni szeretnénk a
-     törölt sort.
+  3. Mozgassuk a kurzort azelőtt a  sor ELŐTTI sorba, ahová mozgatni
+     szeretnénk a törölt sort.
 
   4. Normál módban írjunk  p   betűt a törölt sor beillesztéséhez.
 
@@ -299,7 +299,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       3.2.  lecke: A REPLACE PARANCS
+		       3.2.  lecke: AZ ÁTÍRÁS (REPLACE) PARANCS
 
 
 ** r  és  a karakterek leütésével a kurzor alatti karaktert megváltoztatjuk. **
@@ -321,7 +321,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			3.3.  lecke: A CHANGE PARANCS
+			3.3.  lecke: A CSERE (CHANGE) PARANCS
 
 
 	   ** A szó egy részének megváltoztatásához írjuk:  cw . **
@@ -415,7 +415,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			4.2.  lecke: A SEARCH PARANCS
+			4.2.  lecke: A KERESÉS (SEARCH) PARANCS
 
 
   ** / majd a kívánt kifejezés beírásával kereshetjük meg a kifejezést. **
@@ -459,7 +459,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
+		  4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
 
 
     ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
@@ -470,10 +470,10 @@
      sorban.
 
   3. Most ezt írjuk:	 :s/eggy/egg/g	   amely globálisan helyettesít
-     a sorban.
+     a sorban, azaz minden előfordulást.
      Ez a sorban minden előfordulást helyettesít.
 
----> eggy hegy meggy, szembe jön eggy másik heggy.
+---> eggy heggy meggy, szembe jön eggy másik heggy.
 
   4. Két sor között a karaktersor minden előfordulásának helyettesítése:
      :#,#s/régi/új/g    ahol #,# a két sor sorszáma.
@@ -530,7 +530,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      5.2.  lecke: BŐVEBBEN A FÁJLOK ÍRÁSÁRÓL
+		 5.2.  lecke: BŐVEBBEN A FÁJLOK ÍRÁSÁRÓL
 
 
      ** A fájlok változásait így írhatjuk ki  :w FÁJLNÉV. **
@@ -542,12 +542,12 @@
 
   3. Írja:	:w TESZT   (ahol TESZT a választott fájlnév)!
 
-  4. Ez elmenti a teljes fájlt (a Vim Tutort) TESZT néven.
+  4. Ez elmenti a teljes fájlt (a Vim oktatóját) TESZT néven.
      Ellenőrzésképp írjuk ismét    :!dir   hogy lássuk a könyvtárat!
      (Felfelé gombbal : után az előző utasítások visszahozhatóak.)
 
 Megj: Ha Ön kilépne a Vimből és és visszatérne a TESZT fájlnévvel, akkor a
-      fájl a tutor mentéskori pontos másolata lenne.
+      fájl az oktató mentéskori pontos másolata lenne.
 
   5. Távolítsa el a fájlt  (MS-DOS):	:!del TESZT
 			vagy (Unix):	:!rm TESZT
@@ -626,7 +626,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 6.1.  lecke: A OPEN PARANCS
+		   6.1.  lecke: A MEGNYITÁS (OPEN) PARANCS
 
 
 ** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
@@ -684,16 +684,17 @@
 
   1. Mozgassuk a kurzort az első ---> kezdetű sorra!
 
-  2. Place the cursor at the beginning of the first word that is different
-     from the second line marked ---> (the word 'last').
+  2. Helyezze a kurzort az első szó elejére amely eltér a második
+     ---> kezdetű sor tartalmától (a 'az utolsóval' résztől).
 
-  3. Now type  R  and replace the remainder of the text on the first line by
-     typing over the old text to make the first line the same as the second.
+  3. Nyomjon R karaktert és írja ét a szöveg maradékát az első sorban
+     úgy, hogy a  két sor egyező legyen.
 
----> To make the first line the same as the last on this page use the keys.
----> To make the first line the same as the second, type R and the new text.
+---> Az első sort tegye azonossá az utolsóval: használja a gombokat.
+---> Az első sort tegye azonossá a másodikkal: írjon R-t és az új szöveget.
 
-  4. Note that when you press <ESC> to exit, any unaltered text remains.
+  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
+     szövegek változatlanok maradnak.
 
 
 
@@ -726,16 +727,16 @@
 			       6. LECKE ÖSSZEFOGLALÓJA
 
 
-  1. Typing  o	opens a line BELOW the cursor and places the cursor on the open
-     line in Insert mode.
-     Typing a capital  O  opens the line ABOVE the line the cursor is on.
+  1. o	beírásával új sort nyitunk meg a sor ALATT és a kurzor az új
+     sorban lesz beszúrás-módban.
+     Nagy  O  a sor FELETT nyit új sort, és oda kerül a kurzor.
 
-  2. Type an  a  to insert text AFTER the character the cursor is on.
-     Typing a capital  A  automatically appends text to the end of the line.
+  2. a  beírásával az aktuális karaktertől UTÁN (jobbra) szúrhatunk be szöveget.
+     Nagy A  automatikusan a sor legvégéhez adja hozzá a szöveget.
 
-  3. Typing a capital  R  enters Replace mode until  <ESC>  is pressed to exit.
+  3. A nagy  R  beütésével átíró (replace) módba kerülünk  <ESC> lenyomásáig.
 
-  4. Typing ":set xxx" sets the option "xxx"
+  4. ":set xxx" beírásával az "xxx" opció állítható be.
 
 
 
@@ -746,7 +747,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       7. lecke: ON-LINE HELP PARANCSOK
+		     7. lecke: AZ ON-LINE SÚGÓ PARANCSAI
 
 
 		    ** Az online súgórendszer használata **
@@ -801,8 +802,9 @@
   tudóknak: ":help user-manual". (egyelőre nem tud magyarul)
 
   További magyar olvasnivalók érhetőek el az alábbi oldalról.
-  http://ubuntu.hu/index.php?title=Vim
+  http://wiki.hup.hu/index.php/Vim
 
+  Angol olvasmányok:
   For further reading and studying, this book is recommended:
 	Vim - Vi Improved - by Steve Oualline
 	Publisher: New Riders
@@ -816,8 +818,13 @@
   It is a good book to get to know almost anything you want to do with Vi.
   The sixth edition also includes information on Vim.
 
-  This tutorial was written by Michael C. Pierce and Robert K. Ware,
-  Colorado School of Mines using ideas supplied by Charles Smith,
-  Colorado State University.  E-mail: bware@mines.colorado.edu.
+  Ezt az oktatót Michael C. Pierce és Robert K. Ware írta, a Colorado
+  School of Mines dolgozói Charles Smith (Colorado State University)
+  támogatásával.
 
-  Modified for Vim by Bram Moolenaar.
+  E-mail: bware@mines.colorado.edu.
+
+  A Vimhez idomította Bram Moolenaar.
+
+  Magyarította: Horváth Árpád <horvath.arpad@roik.bmf.hu>, 2006-2008
+
diff --git a/runtime/tutor/tutor.ja.euc b/runtime/tutor/tutor.ja.euc
index f043e42..5134393 100644
--- a/runtime/tutor/tutor.ja.euc
+++ b/runtime/tutor/tutor.ja.euc
@@ -257,7 +257,7 @@
 
       ** ²¿²ó¤â¹Ô¤¤¤¿¤¤·«¤êÊÖ¤·¤Î¥â¡¼¥·¥ç¥ó¤ÎÁ°¤Ë¿ôÃͤò¥¿¥¤¥×¤·¤Þ¤¹¡£ **
 
-  1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿¶È¤ÎÀèÆ¬¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¤Þ¤¹¡£
+  1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿¹Ô¤ÎÀèÆ¬¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¤Þ¤¹¡£
 
   2. 2dw ¤ò¥¿¥¤¥×¤·¤ÆÃ±¸ì2¤Äʬ°Üư¤·¤Þ¤¹¡£
 
@@ -741,7 +741,7 @@
 
       ** ¥«¡¼¥½¥ë¤Î¼¡¤Î°ÌÃÖ¤«¤é¥Æ¥­¥¹¥È¤òÄɲ乤ë¤Ë¤Ï a ¤È¥¿¥¤¥×¤·¤Þ¤¹ **
 
-  1. ¥«¡¼¥½¥ë¤ò ---> ¤Ç¼¨¤µ¤ì¤¿¶È¤Ø°Üư¤·¤Þ¤·¤ç¤¦¡£
+  1. ¥«¡¼¥½¥ë¤ò ---> ¤Ç¼¨¤µ¤ì¤¿¹Ô¤Ø°Üư¤·¤Þ¤·¤ç¤¦¡£
 
   2. e ¤ò²¡¤·¤Æ li ¤Î½ªÃ¼Éô¤Þ¤Ç¥«¡¼¥½¥ë¤ò°Üư¤·¤Þ¤¹¡£
 
@@ -764,7 +764,7 @@
 
 	  ** 1ʸ»ú°Ê¾å¤òÃÖ¤­´¹¤¨¤ë¤Ë¤ÏÂçʸ»ú¤Î R ¤È¥¿¥¤¥×¤·¤Þ¤·¤ç¤¦ **
 
-  1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿¶È¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¤Þ¤¹¡£ºÇ½é¤Î xxx ¤ÎÀèÆ¬¤Ë°Üư¤·
+  1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¤Þ¤¹¡£ºÇ½é¤Î xxx ¤ÎÀèÆ¬¤Ë°Üư¤·
      ¤Þ¤¹¡£
 
   2. R ¤ò²¡¤·¤Æ¡¢2¹ÔÌܤοôÃͤò¥¿¥¤¥×¤¹¤ë¤³¤È¤Ç¡¢xxx ¤¬ÃÖ´¹¤µ¤ì¤Þ¤¹¡£
diff --git a/runtime/tutor/tutor.ja.sjis b/runtime/tutor/tutor.ja.sjis
index 3bb3c2c..7be2120 100644
--- a/runtime/tutor/tutor.ja.sjis
+++ b/runtime/tutor/tutor.ja.sjis
@@ -257,7 +257,7 @@
 
       ** ‰½‰ñ‚às‚¢‚½‚¢ŒJ‚è•Ô‚µ‚̃‚[ƒVƒ‡ƒ“‚Ì‘O‚ɐ”’l‚ðƒ^ƒCƒv‚µ‚Ü‚·B **
 
-  1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽ‹Æ‚̐擪‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·B
+  1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽs‚̐擪‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·B
 
   2. 2dw ‚ðƒ^ƒCƒv‚µ‚Ä’PŒê2‚•ªˆÚ“®‚µ‚Ü‚·B
 
@@ -741,7 +741,7 @@
 
       ** ƒJ[ƒ\ƒ‹‚ÌŽŸ‚̈ʒu‚©‚çƒeƒLƒXƒg‚ð’ljÁ‚·‚é‚É‚Í a ‚ƃ^ƒCƒv‚µ‚Ü‚· **
 
-  1. ƒJ[ƒ\ƒ‹‚ð ---> ‚ÅŽ¦‚³‚ꂽ‹Æ‚ÖˆÚ“®‚µ‚Ü‚µ‚傤B
+  1. ƒJ[ƒ\ƒ‹‚ð ---> ‚ÅŽ¦‚³‚ꂽs‚ÖˆÚ“®‚µ‚Ü‚µ‚傤B
 
   2. e ‚ð‰Ÿ‚µ‚Ä li ‚̏I’[•”‚܂ŃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·B
 
@@ -764,7 +764,7 @@
 
 	  ** 1•¶ŽšˆÈã‚ð’u‚«Š·‚¦‚é‚É‚Í‘å•¶Žš‚Ì R ‚ƃ^ƒCƒv‚µ‚Ü‚µ‚傤 **
 
-  1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽ‹Æ‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·BÅ‰‚Ì xxx ‚̐擪‚Ɉړ®‚µ
+  1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·BÅ‰‚Ì xxx ‚̐擪‚Ɉړ®‚µ
      ‚Ü‚·B
 
   2. R ‚ð‰Ÿ‚µ‚āA2s–ڂ̐”’l‚ðƒ^ƒCƒv‚·‚邱‚ƂŁAxxx ‚ª’uŠ·‚³‚ê‚Ü‚·B
diff --git a/runtime/tutor/tutor.ja.utf-8 b/runtime/tutor/tutor.ja.utf-8
index e12cd69..95e108e 100644
--- a/runtime/tutor/tutor.ja.utf-8
+++ b/runtime/tutor/tutor.ja.utf-8
@@ -257,7 +257,7 @@
 
       ** 何回も行いたい繰り返しのモーションの前に数値をタイプします。 **
 
-  1. 以下の ---> と示された業の先頭にカーソルを移動します。
+  1. 以下の ---> と示された行の先頭にカーソルを移動します。
 
   2. 2dw をタイプして単語2つ分移動します。
 
@@ -741,7 +741,7 @@
 
       ** カーソルの次の位置からテキストを追加するには a とタイプします **
 
-  1. カーソルを ---> で示された業へ移動しましょう。
+  1. カーソルを ---> で示された行へ移動しましょう。
 
   2. e を押して li の終端部までカーソルを移動します。
 
@@ -764,7 +764,7 @@
 
 	  ** 1文字以上を置き換えるには大文字の R とタイプしましょう **
 
-  1. 以下の ---> と示された業にカーソルを移動します。最初の xxx の先頭に移動し
+  1. 以下の ---> と示された行にカーソルを移動します。最初の xxx の先頭に移動し
      ます。
 
   2. R を押して、2行目の数値をタイプすることで、xxx が置換されます。
diff --git a/runtime/tutor/tutor.nb b/runtime/tutor/tutor.nb
new file mode 100644
index 0000000..17178df
--- /dev/null
+++ b/runtime/tutor/tutor.nb
@@ -0,0 +1,973 @@
+===============================================================================
+= V e l k o m m e n   t i l   i n n f ø r i n g e n   i   V i m  --  Ver. 1.7 =
+===============================================================================
+
+     Vim er en meget kraftig editor med mange kommandoer, alt for mange til å
+     kunne gå gjennom alle i en innføring som denne. Den er beregnet på å
+     sette deg inn i bruken av nok kommandoer så du vil være i stand til lett
+     å kunne bruke Vim som en editor til alle formål.
+
+     Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30
+     minutter, avhengig av hvor mye tid du bruker til eksperimentering.
+
+     MERK:
+     Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne
+     filen som du kan øve deg på (hvis du kjørte «vimtutor»-kommandoen, er
+     dette allerede en kopi).
+
+     Det er viktig å huske at denne innføringen er beregnet på læring gjennom
+     bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig.
+     Hvis du bare leser teksten, vil du glemme kommandoene!
+
+     Først av alt, sjekk at «Caps Lock» IKKE er aktiv og trykk «j»-tasten for
+     å flytte markøren helt til leksjon 1.1 fyller skjermen.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 1.1:  FLYTTING AV MARKØREN
+
+
+       ** For å flytte markøren, trykk tastene h, j, k, l som vist. **
+	     ^
+	     k		Tips: h-tasten er til venstre og flytter til venstre.
+       < h	 l >	      l-tasten er til høyre og flytter til høyre.
+	     j		      j-tasten ser ut som en pil som peker nedover.
+	     v
+  1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene.
+
+  2. Hold inne nedovertasten (j) til den repeterer.
+     Nå vet du hvordan du beveger deg til neste leksjon.
+
+  3. Gå til leksjon 1.2 ved hjelp av nedovertasten.
+
+Merk: Hvis du blir usikker på noe du har skrevet, trykk <ESC> for å gå til
+      normalmodus. Skriv deretter kommandoen du ønsket på nytt.
+
+Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til
+      å bevege markøren mye raskere når du er blitt vant til det. Helt sant!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Leksjon 1.2: AVSLUTTE VIM
+
+
+  !! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!!
+
+  1. Trykk <ESC>-tasten (for å forsikre deg om at du er i normalmodus).
+
+  2. Skriv:	:q! <ENTER>.
+     Dette avslutter editoren og FORKASTER alle forandringer som du har gjort.
+
+  3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne
+     innføringen. Den er:   vimtutor <ENTER>
+
+  4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å
+     avslutte og starte editoren på nytt.
+
+MERK:  :q! <ENTER>  forkaster alle forandringer som du gjorde. I løpet av noen
+       få leksjoner vil du lære hvordan du lagrer forandringene til en fil.
+
+  5. Flytt markøren ned til leksjon 1.3.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Leksjon 1.3: REDIGERING AV TEKST -- SLETTING
+
+
+	     ** Trykk  x  for å slette tegnet under markøren. **
+
+  1. Flytt markøren til den første linjen merket med  --->.
+
+  2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som
+     skal slettes.
+
+  3. Trykk tasten  x  for å slette det uønskede tegnet.
+
+  4. Repeter punkt 2 til 4 til setningen er lik den som er under.
+
+---> Hessstennnn brrråsnudddde ii gaaata.
+---> Hesten bråsnudde i gata.
+
+  5. Nå som linjen er korrekt, gå til leksjon 1.4.
+
+MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men
+      bruk dem helt til de sitter.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING
+
+
+		    ** Trykk  i  for å sette inn tekst. **
+
+  1. Flytt markøren til den første linjen som er merket med --->.
+
+  2. For å gjøre den første linjen lik den andre, flytt markøren til den står
+     på tegnet ETTER posisjonen der teksten skal settes inn.
+
+  3. Trykk  i  og skriv inn teksten som mangler.
+
+  4. Etterhvert som hver feil er fikset, trykk <ESC> for å returnere til
+     normalmodus. Repeter punkt 2 til 4 til setningen er korrekt.
+
+---> Det er tkst som mnglr .
+---> Det er ganske mye tekst som mangler her.
+
+  5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen
+     nedenfor.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL
+
+
+		    ** Trykk  A  for å legge til tekst. **
+
+  1. Flytt markøren til den første linjen nedenfor merket --->.
+     Det har ikke noe å si hvor markøren er plassert på den linjen.
+
+  2. Trykk  A  og skriv inn det som skal legges til.
+
+  3. Når teksten er lagt til, trykk <ESC> for å returnere til normalmodusen.
+
+  4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og
+     3 for å reparere denne setningen.
+
+---> Det mangler noe tekst p
+     Det mangler noe tekst på denne linjen.
+---> Det mangler også litt tek
+     Det mangler også litt tekst på denne linjen.
+
+  5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Leksjon 1.6: REDIGERE EN FIL
+
+
+	       ** Bruk	:wq  for å lagre en fil og avslutte. **
+
+  !! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!!
+
+  1. Avslutt denne innføringen som du gjorde i leksjon 1.2:  :q!
+
+  2. Skriv denne kommandoen på kommandolinja:  vim tutor <ENTER>
+     «vim» er kommandoen for å starte Vim-editoren, «tutor» er navnet på fila
+     som du vil redigere. Bruk en fil som kan forandres.
+
+  3. Sett inn og slett tekst som du lærte i de foregående leksjonene.
+
+  4. Lagre filen med forandringene og avslutt Vim med:	:wq <ENTER>
+
+  5. Start innføringen på nytt og flytt ned til oppsummeringen som følger.
+
+  6. Etter å ha lest og forstått stegene ovenfor: Sett i gang.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 1
+
+
+  1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene.
+	 h (venstre)	 j (ned)     k (opp)	 l (høyre)
+
+  2. For å starte Vim fra skall-kommandolinjen, skriv:	vim FILNAVN <ENTER>
+
+  3. For å avslutte Vim, skriv:  <ESC> :q! <ENTER>  for å forkaste endringer.
+		   ELLER skriv:  <ESC> :wq <ENTER>  for å lagre forandringene.
+
+  4. For å slette tegnet under markøren, trykk:  x
+
+  5. For å sette inn eller legge til tekst, trykk:
+	 i    skriv innsatt tekst  <ESC>	sett inn før markøren
+	 A    skriv tillagt tekst  <ESC>	legg til på slutten av linjen
+
+MERK: Når du trykker <ESC> går du til normalmodus eller du avbryter en uønsket
+      og delvis fullført kommando.
+
+  Nå kan du gå videre til leksjon 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Leksjon 2.1: SLETTEKOMMANDOER
+
+
+		    ** Trykk  dw  for å slette et ord. **
+
+  1. Trykk <ESC> for å være sikker på at du er i normalmodus.
+
+  2. Flytt markøren til den første linjen nedenfor merket --->.
+
+  3. Flytt markøren til begynnelsen av ordet som skal slettes.
+
+  4. Trykk  dw	og ordet vil forsvinne.
+
+MERK: Bokstaven  d  vil komme til syne på den nederste linjen på skjermen når
+      du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet
+      tegn enn	d  har du skrevet noe feil; trykk <ESC> og start på nytt.
+
+---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen.
+---> Det er tre ord som ikke hører hjemme i denne setningen.
+
+  5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå
+     deretter til leksjon 2.2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 2.2: FLERE SLETTEKOMMANDOER
+
+
+	     ** Trykk  d$  for å slette til slutten av linjen. **
+
+  1. Trykk <ESC> for å være sikker på at du er i normalmodus.
+
+  2. Flytt markøren til linjen nedenfor merket --->.
+
+  3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum).
+
+  4. Trykk  d$	for å slette alt til slutten av linjen.
+
+---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye.
+
+  5. Gå til leksjon 2.3 for å forstå hva som skjer.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 2.3: OM OPERATORER OG BEVEGELSER
+
+
+  Mange kommandoer som forandrer teksten er laget ut i fra en operator og en
+  bevegelse. Formatet for en slettekommando med sletteoperatoren  d  er:
+
+	d   bevegelse
+
+  Der:
+    d	      - er sletteoperatoren.
+    bevegelse - er hva operatoren vil opere på (listet nedenfor).
+
+  En kort liste med bevegelser:
+    w - til starten av det neste ordet, UNNTATT det første tegnet.
+    e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet.
+    $ - til slutten av linjen, INKLUDERT det siste tegnet.
+
+  Ved å skrive	de  vil altså alt fra markøren til slutten av ordet bli
+  slettet.
+
+MERK:  Ved å skrive kun bevegelsen i normalmodusen uten en operator vil
+       markøren flyttes som spesifisert.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE
+
+
+ ** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. **
+
+  1. Flytt markøren til starten av linjen markert ---> nedenfor.
+
+  2. Skriv  2w	for å flytte markøren to ord framover.
+
+  3. Skriv  3e	for å flytte markøren framover til slutten av det tredje
+     ordet.
+
+  4. Skriv  0  (null) for å flytte til starten av linjen.
+
+  5. Repeter steg 2 og 3 med forskjellige tall.
+
+---> Dette er en linje med noen ord som du kan bevege deg rundt på.
+
+  6. Gå videre til leksjon 2.5.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER
+
+
+     ** Et tall sammen med en operator repeterer den så mange ganger. **
+
+  I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du
+  inn antall før bevegelsen for å slette mer:
+	 d  nummer  bevegelse
+
+  1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert
+     med --->.
+
+  2. Skriv  2dw  for å slette de to ordene med store bokstaver.
+
+  3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende
+     ordene som har store bokstaver.
+
+---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar.
+
+MERK: Et antall mellom operatoren  d  og bevegelsen virker på samme måte som å
+      bruke bevegelsen uten en operator.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Leksjon 2.6: OPERERE PÅ LINJER
+
+
+		 ** Trykk  dd  for å slette en hel linje. **
+
+  På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at
+  det vil være lettere å rett og slett trykke to d-er for å slette en linje.
+
+  1. Flytt markøren til den andre linjen i verset nedenfor.
+  2. Trykk  dd	 å slette linjen.
+  3. Flytt deretter til den fjerde linjen.
+  4. Trykk  2dd  for å slette to linjer.
+
+--->  1) Roser er røde,
+--->  2) Gjørme er gøy,
+--->  3) Fioler er blå,
+--->  4) Jeg har en bil,
+--->  5) Klokker viser tiden,
+--->  6) Druer er søte
+--->  7) Og du er likeså.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Leksjon 2.7: ANGRE-KOMMANDOEN
+
+
+  ** Trykk  u  for å angre siste kommando,  U  for å fikse en hel linje. **
+
+  1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den
+     første feilen.
+  2. Trykk  x  for å slette det første uønskede tegnet.
+  3. Trykk så  u  for å angre den siste utførte kommandoen.
+  4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen	x  .
+  5. Trykk nå en stor  U  for å sette linjen tilbake til det den var
+     originalt.
+  6. Trykk  u  noen ganger for å angre	U  og foregående kommandoer.
+  7. Deretter trykker du  CTRL-R  (hold CTRL nede mens du trykker R) noen
+     ganger for å gjenopprette kommandoene (omgjøre angrekommandoene).
+
+---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre.
+
+  8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av
+     leksjon 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 2
+
+
+  1. For å slette fra markøren fram til det neste ordet, trykk:  dw
+  2. For å slette fra markøren til slutten av en linje, trykk:	d$
+  3. For å slette en hel linje, trykk:	dd
+
+  4. For å repetere en bevegelse, sett et nummer foran:  2w
+  5. Formatet for en forandringskommando er:
+	       operator  [nummer]  bevegelse
+     der:
+       operator  - hva som skal gjøres, f.eks.	d  for å slette
+       [nummer]  - et valgfritt antall for å repetere bevegelsen
+       bevegelse - hva kommandoen skal operere på, eksempelvis	w  (ord),
+		   $  (til slutten av linjen) og så videre.
+
+  6. For å gå til starten av en linje, bruk en null:  0
+
+  7. For å angre tidligere endringer, skriv:		u  (liten u)
+     For å angre alle forandringer på en linje, skriv:	U  (stor U)
+     For å omgjøre angringen, trykk:			CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 3.1: «LIM INN»-KOMMANDOEN
+
+
+    ** Trykk  p  for å lime inn tidligere slettet tekst etter markøren **
+
+  1. Flytt markøren til den første linjen med ---> nedenfor.
+
+  2. Trykk  dd	for å slette linjen og lagre den i et Vim-register.
+
+  3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn.
+
+  4. Trykk  p  for å legge linjen under markøren.
+
+  5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge.
+
+---> d) Kan du også lære?
+---> b) Fioler er blå,
+---> c) Intelligens må læres,
+---> a) Roser er røde,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 3.2: «ERSTATT»-KOMMANDOEN
+
+
+	 ** Trykk  rx  for å erstatte tegnet under markøren med x. **
+
+  1. Flytt markøren til den første linjen nedenfor merket --->.
+
+  2. Flytt markøren så den står oppå den første feilen.
+
+  3. Trykk  r  og deretter tegnet som skal være der.
+
+  4. Repeter punkt 2 og 3 til den første linjen er lik den andre.
+
+---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster!
+---> Da denne linjen ble skrevet, var det noen som trykket feile taster!
+
+  5. Gå videre til leksjon 3.2.
+
+MERK: Husk at du bør lære ved å BRUKE, ikke pugge.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 3.3: «FORANDRE»-OPERATOREN
+
+
+	   ** For å forandre til slutten av et ord, trykk  ce . **
+
+  1. Flytt markøren til den første linjen nedenfor som er merket --->.
+
+  2. Plasser markøren på  u  i «lubjwr».
+
+  3. Trykk  ce	og det korrekte ordet (i dette tilfellet, skriv «injen»).
+
+  4. Trykk <ESC> og gå til det neste tegnet som skal forandres.
+
+  5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre.
+
+---> Denne lubjwr har noen wgh som må forkwåp med «forækzryas»-kommandoen.
+---> Denne linjen har noen ord som må forandres med «forandre»-kommandoen.
+
+Vær oppmerksom på at  ce  sletter ordet og går inn i innsettingsmodus.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c
+
+
+ ** Forandringskommandoen blir brukt med de samme bevegelser som «slett». **
+
+  1. Forandringsoperatoren fungerer på samme måte som «slett». Formatet er:
+
+	 c    [nummer]	 bevegelse
+
+  2. Bevegelsene er de samme, som for eksempel	w  (ord) og  $	(slutten av en
+     linje).
+
+  3. Gå til den første linjen nedenfor som er merket --->.
+
+  4. Flytt markøren til den første feilen.
+
+  5. Skriv  c$	og skriv resten av linjen lik den andre og trykk <ESC>.
+
+---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste.
+---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen.
+
+MERK: Du kan bruke slettetasten for å rette feil mens du skriver.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 3
+
+
+  1. For å legge tilbake tekst som nettopp er blitt slettet, trykk  p  . Dette
+     limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet
+     vil den bli limt inn på linjen under markøren).
+
+  2. For å erstatte et tegn under markøren, trykk  r  og deretter tegnet som
+     du vil ha der.
+
+  3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen
+     tar deg. Det vil si, skriv  ce  for å forandre fra markøren til slutten
+     av ordet,	c$  for å forandre til slutten av linjen.
+
+  4. Formatet for «forandre» er:
+
+	 c   [nummer]	bevegelse
+
+Nå kan du gå til neste leksjon.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	     Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS
+
+	** Trykk CTRL-G for å vise posisjonen i filen og filstatusen.
+	   Trykk  G  for å gå til en spesifikk linje i filen. **
+
+  Merk: Les hele leksjonen før du utfører noen av punktene!
+
+  1. Hold nede Ctrl-tasten og trykk  g	. Vi kaller dette CTRL-G. En melding
+     vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i
+     filen. Husk linjenummeret for bruk i steg 3.
+
+Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette
+      skjer når «ruler»-valget er satt (forklart i leksjon 6).
+
+  2. Trykk  G  for å gå til bunnen av filen.
+     Skriv  gg	for å gå til begynnelsen av filen.
+
+  3. Skriv inn linjenummeret du var på og deretter  G . Dette vil føre deg
+     tilbake til linjen du var på da du først trykket CTRL-G.
+
+  4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Leksjon 4.2: SØKEKOMMANDOEN
+
+      ** Skriv	/  etterfulgt av en søkestreng som du vil lete etter. **
+
+  1. Trykk  /  når du er i normalmodusen. Legg merke til at skråstreken og
+     markøren kommer til syne på bunnen av skjermen i likhet med
+     «:»-kommandoene.
+
+  2. Skriv «feeeiil» og trykk <ENTER>. Dette er teksten du vil lete etter.
+
+  3. For å finne neste forekomst av søkestrengen, trykk  n .
+     For å lete etter samme søketeksten i motsatt retning, trykk  N .
+
+  4. For å lete etter en tekst bakover i filen, bruk  ?  istedenfor  /	.
+
+  5. For å gå tilbake til der du kom fra, trykk  CTRL-O  (Hold Ctrl nede mens
+     du trykker bokstaven  o ). Repeter for å gå enda lengre tilbake. CTRL-I
+     går framover.
+
+---> «feeeiil» er ikke måten å skrive «feil» på, feeeiil er helt feil.
+Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt
+      hvis «wrapscan»-valget er resatt.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 4.3: FINN SAMSVARENDE PARENTESER
+
+
+	  ** Trykk  %  for å finne en samsvarende ), ] eller } . **
+
+  1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->.
+
+  2. Trykk  %  .
+
+  3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen.
+
+  4. Trykk  %  for å flytte markøren til den andre samsvarende parentesen.
+
+  5. Flytt markøren til en annen (, ), [, ], { eller } og se hva  %  gjør.
+
+---> Dette ( er en testlinje med (, [ ] og { } i den )).
+
+Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert
+      antall parenteser!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Leksjon 4.4: ERSTATT-KOMMANDOEN
+
+
+	** Skriv  :s/gammel/ny/g  for å erstatte «gammel» med «ny». **
+
+  1. Flytt markøren til linjen nedenfor som er merket med --->.
+
+  2. Skriv  :s/deen/den/ <ENTER>  . Legg merke til at denne kommandoen bare
+     forandrer den første forekomsten av «deen» på linjen.
+
+  3. Skriv  :s/deen/den/g . Når g-flagget legges til, betyr dette global
+     erstatning på linjen og erstatter alle forekomster av «deen» på linjen.
+
+---> deen som kan kaste deen tyngste steinen lengst er deen beste
+
+  4. For å erstatte alle forekomster av en tekststreng mellom to linjer,
+     skriv  :#,#s/gammel/ny/g  der #,# er linjenumrene på de to linjene for
+			       linjeområdet erstatningen skal gjøres.
+     Skriv  :%s/gammel/ny/g    for å erstatte tekst i hele filen.
+     Skriv  :%s/gammel/ny/gc   for å finne alle forekomster i hele filen, og
+			       deretter spørre om teksten skal erstattes eller
+			       ikke.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 4
+
+
+  1. Ctrl-G viser nåværende posisjon i filen og filstatusen.
+	     G	går til slutten av filen.
+     nummer  G	går til det linjenummeret.
+	    gg	går til den første linjen.
+
+  2. Skriv  /  etterfulgt av en søketekst for å lete FRAMOVER etter teksten.
+     Skriv  ?  etterfulgt av en søketekst for å lete BAKOVER etter teksten.
+     Etter et søk kan du trykke  n  for å finne neste forekomst i den samme
+     retningen eller  N  for å lete i motsatt retning.
+     CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner.
+
+  3. Skriv  %  når markøren står på en (, ), [, ], { eller } for å finne den
+     som samsvarer.
+
+  4. Erstatte «gammel» med første «ny» på en linje:  :s/gammel/ny
+     Erstatte alle «gammel» med «ny» på en linje:    :s/gammel/ny/g
+     Erstatte tekst mellom to linjenumre:	     :#,#s/gammel/ny/g
+     Erstatte alle forekomster i en fil:	     :%s/gammel/ny/g
+     For å godkjenne hver erstatning, legg til «c»:  :%s/gammel/ny/gc
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	       Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO
+
+
+    ** Skriv  :!  etterfulgt av en ekstern kommando for å utføre denne. **
+
+  1. Skriv den velkjente kommandoen  :	 for å plassere markøren på bunnen av
+     skjermen. Dette lar deg skrive en kommandolinjekommando.
+
+  2. Nå kan du skrive tegnet  !  . Dette lar deg utføre en hvilken som helst
+     ekstern kommando.
+
+  3. Som et eksempel, skriv  ls  etter utropstegnet og trykk <ENTER>. Du vil
+     nå få en liste over filene i katalogen, akkurat som om du hadde kjørt
+     kommandoen direkte fra kommandolinjen i skallet. Eller bruk  :!dir  hvis
+     «ls» ikke virker.
+
+MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med
+      parametere.
+
+MERK: Alle «:»-kommandoer må avsluttes med <ENTER>. Fra dette punktet er det
+      ikke alltid vi nevner det.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 5.2: MER OM LAGRING AV FILER
+
+
+      ** For å lagre endringene gjort i en tekst, skriv  :w FILNAVN. **
+
+  1. Skriv  :!dir  eller  :!ls	for å få en liste over filene i katalogen. Du
+     vet allerede at du må trykke <ENTER> etter dette.
+
+  2. Velg et filnavn på en fil som ikke finnes, som for eksempel  TEST .
+
+  3. Skriv  :w TEST  (der TEST er filnavnet du velger).
+
+  4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å
+     sjekke dette, skriv  :!dir  eller	:!ls  igjen for å se innholdet av
+     katalogen.
+
+Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med «vim TEST»,
+      ville filen vært en eksakt kopi av innføringen da du lagret den.
+
+  5. Fjern filen ved å skrive  :!rm TEST  hvis du er på et Unix-lignende
+     operativsystem, eller  :!del TEST	hvis du bruker MS-DOS.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES
+
+
+     ** For å lagre en del av en fil, skriv  v	bevegelse  :w FILNAVN **
+
+  1. Flytt markøren til denne linjen.
+
+  2. Trykk  v  og flytt markøren til det femte elementet nedenfor. Legg merke
+     til at teksten blir markert.
+
+  3. Trykk  :  (kolon). På bunnen av skjermen vil  :'<,'>  komme til syne.
+
+  4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
+     at du ser	:'<,'>w TEST  før du trykker Enter.
+
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+     for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
+
+MERK: Ved å trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
+      å gjøre det valgte området større eller mindre. Deretter kan du bruke en
+      operator for å gjøre noe med teksten. For eksempel sletter  d  teksten.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER
+
+
+ ** For å lese inn en annen fil inn i nåværende buffer, skriv  :r FILNAVN  **
+
+  1. Plasser markøren like over denne linjen.
+
+MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter
+      NED for å se denne leksjonen igjen.
+
+  2. Hent TEST-filen ved å bruke kommandoen  :r TEST  der TEST er navnet på
+     filen du brukte. Filen du henter blir plassert nedenfor markørlinjen.
+
+  3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av
+     leksjon 5.3, originalen og denne versjonen.
+
+MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel,	:r !ls
+      leser utdataene av ls-kommandoen og legger dem nedenfor markøren.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 5
+
+
+  1.  :!kommando  utfører en ekstern kommandio.
+
+      Noen nyttige eksempler er:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		  - List filene i katalogen.
+	  :!del FILNAVN    :!rm FILNAVN   - Slett filen FILNAVN.
+
+  2.  :w FILNAVN  skriver den nåværende Vim-filen disken med navnet FILNAVN .
+
+  3.  v  bevegelse  :w FILNAVN	lagrer de visuelt valgte linjene til filen
+     FILNAVN.
+
+  4.  :r FILNAVN  henter filen FILNAVN og legger den inn nedenfor markøren.
+
+  5.  :r !dir  leser utdataene fra «dir»-kommandoen og legger dem nedenfor
+     markørposisjonen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 6.1: «ÅPNE LINJE»-KOMMANDOEN
+
+
+    ** Skriv  o  for å «åpne opp» for en ny linje etter markøren og gå til
+       innsettingsmodus **
+
+  1. Flytt markøren til linjen nedenfor merket --->.
+
+  2. Skriv  o  (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i
+     innsettingsmodus.
+
+  3. Skriv litt tekst og trykk <ESC> for å gå ut av innsettingsmodusen.
+
+---> Etter at  o  er skrevet blir markøren plassert på den tomme linjen.
+
+  4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor	O
+     istedenfor en liten  o . Prøv dette på linjen nedenfor.
+
+---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 6.2: «LEGG TIL»-KOMMANDOEN
+
+
+	    ** Skriv  a  for å legge til tekst ETTER markøren. **
+
+  1. Flytt markøren til starten av linjen merket ---> nedenfor.
+
+  2. Trykk  e  til markøren er på slutten av «li».
+
+  3. Trykk  a  (liten a) for å legge til tekst ETTER markøren.
+
+  4. Fullfør ordet sånn som på linjen nedenfor. Trykk <ESC> for å gå ut av
+     innsettingsmodusen.
+
+  5. Bruk  e  for å gå til det neste ufullstendige ordet og repeter steg 3 og
+     4.
+
+---> Denne li lar deg øve på å leg til tek på en linje.
+---> Denne linjen lar deg øve på å legge til tekst på en linje.
+
+Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste
+      forskjellen er hvor tegnene blir satt inn.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ
+
+
+	   ** Skriv en stor  R	for å erstatte mer enn ett tegn. **
+
+  1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren
+     til begynnelsen av den første «xxx»-en.
+
+  2. Trykk  R  og skriv inn tallet som står nedenfor på den andre linjen så
+     det erstatter xxx.
+
+  3. Trykk <ESC> for å gå ut av erstatningsmodusen. Legg merke til at resten
+     av linjen forblir uforandret.
+
+  4. Repeter stegene for å erstatte den gjenværende xxx.
+
+---> Ved å legge 123 til xxx får vi xxx.
+---> Ved å legge 123 til 456 får vi 579.
+
+MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives
+      erstatter et eksisterende tegn.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Leksjon 6.4: KOPIERE OG LIME INN TEKST
+
+
+    ** Bruk y-operatoren for å kopiere tekst og  p  for å lime den inn **
+
+  1. Gå til linjen merket ---> nedenfor og plasser markøren etter «a)».
+
+  2. Gå inn i visuell modus med  v  og flytt markøren til like før «første».
+
+  3. Trykk  y  for å kopiere (engelsk: «yank») den uthevede teksten.
+
+  4. Flytt markøren til slutten av den neste linjen:  j$
+
+  5. Trykk  p  for å lime inn teksten. Trykk deretter:	a andre <ESC> .
+
+  6. Bruk visuell modus for å velge « valget.», kopier det med	y , gå til
+     slutten av den neste linjen med  j$  og legg inn teksten der med  p .
+
+---> a) Dette er det første valget.
+     b)
+
+Merk: Du kan også bruke  y  som en operator;  yw  kopierer ett ord.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Leksjon 6.5: SETT VALG
+
+
+  ** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. **
+
+  1. Let etter «ignore» ved å skrive:  /ignore <ENTER>
+     Repeter flere ganger ved å trykke	n .
+
+  2. Sett «ic»-valget (Ignore Case) ved å skrive:  :set ic
+
+  3. Søk etter «ignore» igjen ved å trykke  n .
+     Legg merke til at både «Ignore» og «IGNORE» blir funnet.
+
+  4. Sett «hlsearch»- og «incsearch»-valgene:  :set hls is
+
+  5. Skriv søkekommandoen igjen og se hva som skjer:  /ignore <ENTER>
+
+  6. For å slå av ignorering av store/små bokstaver, skriv:  :set noic
+
+Merk: For å fjerne uthevingen av treff, skriv:	:nohlsearch
+Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk
+      \c  i uttrykket:	/ignore\c <ENTER>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 6
+
+  1. Trykk  o  for å legge til en linje NEDENFOR markøren og gå inn i
+     innsettingsmodus.
+     Trykk  O  for å åpne en linje OVER markøren.
+
+  2. Skriv  a  for å sette inn tekst ETTER markøren.
+     Skriv  A  for å sette inn tekst etter slutten av linjen.
+
+  3. Kommandoen  e  går til slutten av et ord.
+
+  4. Operatoren  y  («yank») kopierer tekst,  p  («paste») limer den inn.
+
+  5. Ved å trykke  R  går du inn i erstatningsmodus helt til  <ESC>  trykkes.
+
+  6. Skriv «:set xxx» for å sette valget «xxx». Noen valg er:
+	«ic» «ignorecase»	ignorer store/små bokstaver under søk
+	«is» «incsearch»	vis delvise treff for en søketekst
+	«hls» «hlsearch»	uthev alle søketreff
+
+  7. Legg til «no» foran valget for å slå det av:  :set noic
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Leksjon 7.1: FÅ HJELP
+
+
+		   ** Bruk det innebygde hjelpesystemet. **
+
+  Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av
+  disse måtene:
+    - Trykk Hjelp-tasten (hvis du har en)
+    - Trykk F1-tasten (hvis du har en)
+    - Skriv  :help <ENTER>
+
+  Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker.
+  Skriv  CTRL-W CTRL-W	for å hoppe fra et vindu til et annet
+  Skriv  :q <ENTER>	for å lukke hjelpevinduet.
+
+  Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til
+  «:help»-kommandoen. Prøv disse (ikke glem å trykke <ENTER>):
+
+    :help w
+    :help c_CTRL-D
+    :help insert-index
+    :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 7.2: LAG ET OPPSTARTSSKRIPT
+
+
+			** Slå på funksjoner i Vim **
+
+  Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av
+  som standard. For å begynne å bruke flere funksjoner må du lage en
+  «vimrc»-fil.
+
+  1. Start redigeringen av «vimrc»-filen. Dette avhenger av systemet ditt:
+	:e ~/.vimrc	  for Unix
+	:e $VIM/_vimrc	  for MS Windows
+
+  2. Les inn eksempelfilen for «vimrc»:
+	:r $VIMRUNTIME/vimrc_example.vim
+
+  3. Lagre filen med:
+	:w
+
+  Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til
+  alle dine foretrukne oppsett i denne «vimrc»-filen.
+  For mer informasjon, skriv  :help vimrc-intro
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   Leksjon 7.3: FULLFØRING
+
+
+	      ** Kommandolinjefullføring med CTRL-D og <TAB> **
+
+  1. Vær sikker på at Vim ikke er i Vi-kompatibel modus:  :set nocp
+
+  2. Se hvilke filer som er i katalogen:  :!ls	eller  :!dir
+
+  3. Skriv starten på en kommando:  :e
+
+  4. Trykk  CTRL-D  og Vim vil vise en liste over kommandoer som starter med
+     «e».
+
+  5. Trykk  <TAB>  og Vim vil fullføre kommandonavnet til «:edit».
+
+  6. Legg til et mellomrom og starten på et eksisterende filnavn:  :edit FIL
+
+  7. Trykk <TAB>. Vim vil fullføre navnet (hvis det er unikt).
+
+MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og
+      <TAB>. Det er spesielt nyttig for bruk sammen med  :help .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 7
+
+
+  1. Skriv  :help  eller trykk <F1> eller <Help> for å åpne et hjelpevindu.
+
+  2. Skriv  :help kommando  for å få hjelp om  kommando .
+
+  3. Trykk  CTRL-W CTRL-W  for å hoppe til et annet vindu.
+
+  4. Trykk  :q	for å lukke hjelpevinduet.
+
+  5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine.
+
+  6. Når du skriver en «:»-kommando, trykk CTRL-D for å se mulige
+     fullføringer. Trykk <TAB> for å bruke en fullføring.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Her slutter innføringen i Vim. Den var ment som en rask oversikt over
+  editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på
+  langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen
+  ved å skrive	:help user-manual  .
+
+  For videre lesing og studier, kan denne boken anbefales:
+      «Vim - Vi Improved» av Steve Oualline
+      Utgiver: New Riders
+  Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
+  nybegynnere. Inneholder mange eksempler og illustrasjoner.
+  Se http://iccf-holland.org/click5.html
+
+  Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
+      «Learning the Vi Editor» av Linda Lamb
+      Utgiver: O'Reilly & Associates Inc.
+  Det er en god bok for å få vite omtrent hva som helst om Vi.
+  Den sjette utgaven inneholder også informasjon om Vim.
+
+  Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware,
+  Colorado School of Mines med idéer av Charles Smith, Colorado State
+  University. E-mail: bware@mines.colorado.edu .
+
+  Modifisert for Vim av Bram Moolenaar.
+  Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org
+  Id: tutor.no 406 2007-03-18 22:48:36Z sunny
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+vim: set ts=8 :
diff --git a/runtime/tutor/tutor.nb.utf-8 b/runtime/tutor/tutor.nb.utf-8
new file mode 100644
index 0000000..a7826b7
--- /dev/null
+++ b/runtime/tutor/tutor.nb.utf-8
@@ -0,0 +1,973 @@
+===============================================================================
+= V e l k o m m e n   t i l   i n n f ø r i n g e n   i   V i m  --  Ver. 1.7 =
+===============================================================================
+
+     Vim er en meget kraftig editor med mange kommandoer, alt for mange til å
+     kunne gå gjennom alle i en innføring som denne. Den er beregnet på å
+     sette deg inn i bruken av nok kommandoer så du vil være i stand til lett
+     å kunne bruke Vim som en editor til alle formål.
+
+     Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30
+     minutter, avhengig av hvor mye tid du bruker til eksperimentering.
+
+     MERK:
+     Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne
+     filen som du kan øve deg på (hvis du kjørte «vimtutor»-kommandoen, er
+     dette allerede en kopi).
+
+     Det er viktig å huske at denne innføringen er beregnet på læring gjennom
+     bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig.
+     Hvis du bare leser teksten, vil du glemme kommandoene!
+
+     Først av alt, sjekk at «Caps Lock» IKKE er aktiv og trykk «j»-tasten for
+     å flytte markøren helt til leksjon 1.1 fyller skjermen.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 1.1:  FLYTTING AV MARKØREN
+
+
+       ** For å flytte markøren, trykk tastene h, j, k, l som vist. **
+	     ^
+	     k		Tips: h-tasten er til venstre og flytter til venstre.
+       < h	 l >	      l-tasten er til høyre og flytter til høyre.
+	     j		      j-tasten ser ut som en pil som peker nedover.
+	     v
+  1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene.
+
+  2. Hold inne nedovertasten (j) til den repeterer.
+     Nå vet du hvordan du beveger deg til neste leksjon.
+
+  3. Gå til leksjon 1.2 ved hjelp av nedovertasten.
+
+Merk: Hvis du blir usikker på noe du har skrevet, trykk <ESC> for å gå til
+      normalmodus. Skriv deretter kommandoen du ønsket på nytt.
+
+Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til
+      å bevege markøren mye raskere når du er blitt vant til det. Helt sant!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Leksjon 1.2: AVSLUTTE VIM
+
+
+  !! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!!
+
+  1. Trykk <ESC>-tasten (for å forsikre deg om at du er i normalmodus).
+
+  2. Skriv:	:q! <ENTER>.
+     Dette avslutter editoren og FORKASTER alle forandringer som du har gjort.
+
+  3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne
+     innføringen. Den er:   vimtutor <ENTER>
+
+  4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å
+     avslutte og starte editoren på nytt.
+
+MERK:  :q! <ENTER>  forkaster alle forandringer som du gjorde. I løpet av noen
+       få leksjoner vil du lære hvordan du lagrer forandringene til en fil.
+
+  5. Flytt markøren ned til leksjon 1.3.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Leksjon 1.3: REDIGERING AV TEKST -- SLETTING
+
+
+	     ** Trykk  x  for å slette tegnet under markøren. **
+
+  1. Flytt markøren til den første linjen merket med  --->.
+
+  2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som
+     skal slettes.
+
+  3. Trykk tasten  x  for å slette det uønskede tegnet.
+
+  4. Repeter punkt 2 til 4 til setningen er lik den som er under.
+
+---> Hessstennnn brrråsnudddde ii gaaata.
+---> Hesten bråsnudde i gata.
+
+  5. Nå som linjen er korrekt, gå til leksjon 1.4.
+
+MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men
+      bruk dem helt til de sitter.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING
+
+
+		    ** Trykk  i  for å sette inn tekst. **
+
+  1. Flytt markøren til den første linjen som er merket med --->.
+
+  2. For å gjøre den første linjen lik den andre, flytt markøren til den står
+     på tegnet ETTER posisjonen der teksten skal settes inn.
+
+  3. Trykk  i  og skriv inn teksten som mangler.
+
+  4. Etterhvert som hver feil er fikset, trykk <ESC> for å returnere til
+     normalmodus. Repeter punkt 2 til 4 til setningen er korrekt.
+
+---> Det er tkst som mnglr .
+---> Det er ganske mye tekst som mangler her.
+
+  5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen
+     nedenfor.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL
+
+
+		    ** Trykk  A  for å legge til tekst. **
+
+  1. Flytt markøren til den første linjen nedenfor merket --->.
+     Det har ikke noe å si hvor markøren er plassert på den linjen.
+
+  2. Trykk  A  og skriv inn det som skal legges til.
+
+  3. Når teksten er lagt til, trykk <ESC> for å returnere til normalmodusen.
+
+  4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og
+     3 for å reparere denne setningen.
+
+---> Det mangler noe tekst p
+     Det mangler noe tekst på denne linjen.
+---> Det mangler også litt tek
+     Det mangler også litt tekst på denne linjen.
+
+  5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Leksjon 1.6: REDIGERE EN FIL
+
+
+	       ** Bruk	:wq  for å lagre en fil og avslutte. **
+
+  !! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!!
+
+  1. Avslutt denne innføringen som du gjorde i leksjon 1.2:  :q!
+
+  2. Skriv denne kommandoen på kommandolinja:  vim tutor <ENTER>
+     «vim» er kommandoen for å starte Vim-editoren, «tutor» er navnet på fila
+     som du vil redigere. Bruk en fil som kan forandres.
+
+  3. Sett inn og slett tekst som du lærte i de foregående leksjonene.
+
+  4. Lagre filen med forandringene og avslutt Vim med:	:wq <ENTER>
+
+  5. Start innføringen på nytt og flytt ned til oppsummeringen som følger.
+
+  6. Etter å ha lest og forstått stegene ovenfor: Sett i gang.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 1
+
+
+  1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene.
+	 h (venstre)	 j (ned)     k (opp)	 l (høyre)
+
+  2. For å starte Vim fra skall-kommandolinjen, skriv:	vim FILNAVN <ENTER>
+
+  3. For å avslutte Vim, skriv:  <ESC> :q! <ENTER>  for å forkaste endringer.
+		   ELLER skriv:  <ESC> :wq <ENTER>  for å lagre forandringene.
+
+  4. For å slette tegnet under markøren, trykk:  x
+
+  5. For å sette inn eller legge til tekst, trykk:
+	 i    skriv innsatt tekst  <ESC>	sett inn før markøren
+	 A    skriv tillagt tekst  <ESC>	legg til på slutten av linjen
+
+MERK: Når du trykker <ESC> går du til normalmodus eller du avbryter en uønsket
+      og delvis fullført kommando.
+
+  Nå kan du gå videre til leksjon 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Leksjon 2.1: SLETTEKOMMANDOER
+
+
+		    ** Trykk  dw  for å slette et ord. **
+
+  1. Trykk <ESC> for å være sikker på at du er i normalmodus.
+
+  2. Flytt markøren til den første linjen nedenfor merket --->.
+
+  3. Flytt markøren til begynnelsen av ordet som skal slettes.
+
+  4. Trykk  dw	og ordet vil forsvinne.
+
+MERK: Bokstaven  d  vil komme til syne på den nederste linjen på skjermen når
+      du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet
+      tegn enn	d  har du skrevet noe feil; trykk <ESC> og start på nytt.
+
+---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen.
+---> Det er tre ord som ikke hører hjemme i denne setningen.
+
+  5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå
+     deretter til leksjon 2.2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 2.2: FLERE SLETTEKOMMANDOER
+
+
+	     ** Trykk  d$  for å slette til slutten av linjen. **
+
+  1. Trykk <ESC> for å være sikker på at du er i normalmodus.
+
+  2. Flytt markøren til linjen nedenfor merket --->.
+
+  3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum).
+
+  4. Trykk  d$	for å slette alt til slutten av linjen.
+
+---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye.
+
+  5. Gå til leksjon 2.3 for å forstå hva som skjer.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 2.3: OM OPERATORER OG BEVEGELSER
+
+
+  Mange kommandoer som forandrer teksten er laget ut i fra en operator og en
+  bevegelse. Formatet for en slettekommando med sletteoperatoren  d  er:
+
+	d   bevegelse
+
+  Der:
+    d	      - er sletteoperatoren.
+    bevegelse - er hva operatoren vil opere på (listet nedenfor).
+
+  En kort liste med bevegelser:
+    w - til starten av det neste ordet, UNNTATT det første tegnet.
+    e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet.
+    $ - til slutten av linjen, INKLUDERT det siste tegnet.
+
+  Ved å skrive	de  vil altså alt fra markøren til slutten av ordet bli
+  slettet.
+
+MERK:  Ved å skrive kun bevegelsen i normalmodusen uten en operator vil
+       markøren flyttes som spesifisert.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE
+
+
+ ** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. **
+
+  1. Flytt markøren til starten av linjen markert ---> nedenfor.
+
+  2. Skriv  2w	for å flytte markøren to ord framover.
+
+  3. Skriv  3e	for å flytte markøren framover til slutten av det tredje
+     ordet.
+
+  4. Skriv  0  (null) for å flytte til starten av linjen.
+
+  5. Repeter steg 2 og 3 med forskjellige tall.
+
+---> Dette er en linje med noen ord som du kan bevege deg rundt på.
+
+  6. Gå videre til leksjon 2.5.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER
+
+
+     ** Et tall sammen med en operator repeterer den så mange ganger. **
+
+  I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du
+  inn antall før bevegelsen for å slette mer:
+	 d  nummer  bevegelse
+
+  1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert
+     med --->.
+
+  2. Skriv  2dw  for å slette de to ordene med store bokstaver.
+
+  3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende
+     ordene som har store bokstaver.
+
+---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar.
+
+MERK: Et antall mellom operatoren  d  og bevegelsen virker på samme måte som å
+      bruke bevegelsen uten en operator.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Leksjon 2.6: OPERERE PÅ LINJER
+
+
+		 ** Trykk  dd  for å slette en hel linje. **
+
+  På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at
+  det vil være lettere å rett og slett trykke to d-er for å slette en linje.
+
+  1. Flytt markøren til den andre linjen i verset nedenfor.
+  2. Trykk  dd	 å slette linjen.
+  3. Flytt deretter til den fjerde linjen.
+  4. Trykk  2dd  for å slette to linjer.
+
+--->  1) Roser er røde,
+--->  2) Gjørme er gøy,
+--->  3) Fioler er blå,
+--->  4) Jeg har en bil,
+--->  5) Klokker viser tiden,
+--->  6) Druer er søte
+--->  7) Og du er likeså.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Leksjon 2.7: ANGRE-KOMMANDOEN
+
+
+  ** Trykk  u  for å angre siste kommando,  U  for å fikse en hel linje. **
+
+  1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den
+     første feilen.
+  2. Trykk  x  for å slette det første uønskede tegnet.
+  3. Trykk så  u  for å angre den siste utførte kommandoen.
+  4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen	x  .
+  5. Trykk nå en stor  U  for å sette linjen tilbake til det den var
+     originalt.
+  6. Trykk  u  noen ganger for å angre	U  og foregående kommandoer.
+  7. Deretter trykker du  CTRL-R  (hold CTRL nede mens du trykker R) noen
+     ganger for å gjenopprette kommandoene (omgjøre angrekommandoene).
+
+---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre.
+
+  8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av
+     leksjon 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 2
+
+
+  1. For å slette fra markøren fram til det neste ordet, trykk:  dw
+  2. For å slette fra markøren til slutten av en linje, trykk:	d$
+  3. For å slette en hel linje, trykk:	dd
+
+  4. For å repetere en bevegelse, sett et nummer foran:  2w
+  5. Formatet for en forandringskommando er:
+	       operator  [nummer]  bevegelse
+     der:
+       operator  - hva som skal gjøres, f.eks.	d  for å slette
+       [nummer]  - et valgfritt antall for å repetere bevegelsen
+       bevegelse - hva kommandoen skal operere på, eksempelvis	w  (ord),
+		   $  (til slutten av linjen) og så videre.
+
+  6. For å gå til starten av en linje, bruk en null:  0
+
+  7. For å angre tidligere endringer, skriv:		u  (liten u)
+     For å angre alle forandringer på en linje, skriv:	U  (stor U)
+     For å omgjøre angringen, trykk:			CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 3.1: «LIM INN»-KOMMANDOEN
+
+
+    ** Trykk  p  for å lime inn tidligere slettet tekst etter markøren **
+
+  1. Flytt markøren til den første linjen med ---> nedenfor.
+
+  2. Trykk  dd	for å slette linjen og lagre den i et Vim-register.
+
+  3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn.
+
+  4. Trykk  p  for å legge linjen under markøren.
+
+  5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge.
+
+---> d) Kan du også lære?
+---> b) Fioler er blå,
+---> c) Intelligens må læres,
+---> a) Roser er røde,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 3.2: «ERSTATT»-KOMMANDOEN
+
+
+	 ** Trykk  rx  for å erstatte tegnet under markøren med x. **
+
+  1. Flytt markøren til den første linjen nedenfor merket --->.
+
+  2. Flytt markøren så den står oppå den første feilen.
+
+  3. Trykk  r  og deretter tegnet som skal være der.
+
+  4. Repeter punkt 2 og 3 til den første linjen er lik den andre.
+
+---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster!
+---> Da denne linjen ble skrevet, var det noen som trykket feile taster!
+
+  5. Gå videre til leksjon 3.2.
+
+MERK: Husk at du bør lære ved å BRUKE, ikke pugge.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 3.3: «FORANDRE»-OPERATOREN
+
+
+	   ** For å forandre til slutten av et ord, trykk  ce . **
+
+  1. Flytt markøren til den første linjen nedenfor som er merket --->.
+
+  2. Plasser markøren på  u  i «lubjwr».
+
+  3. Trykk  ce	og det korrekte ordet (i dette tilfellet, skriv «injen»).
+
+  4. Trykk <ESC> og gå til det neste tegnet som skal forandres.
+
+  5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre.
+
+---> Denne lubjwr har noen wgh som må forkwåp med «forækzryas»-kommandoen.
+---> Denne linjen har noen ord som må forandres med «forandre»-kommandoen.
+
+Vær oppmerksom på at  ce  sletter ordet og går inn i innsettingsmodus.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c
+
+
+ ** Forandringskommandoen blir brukt med de samme bevegelser som «slett». **
+
+  1. Forandringsoperatoren fungerer på samme måte som «slett». Formatet er:
+
+	 c    [nummer]	 bevegelse
+
+  2. Bevegelsene er de samme, som for eksempel	w  (ord) og  $	(slutten av en
+     linje).
+
+  3. Gå til den første linjen nedenfor som er merket --->.
+
+  4. Flytt markøren til den første feilen.
+
+  5. Skriv  c$	og skriv resten av linjen lik den andre og trykk <ESC>.
+
+---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste.
+---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen.
+
+MERK: Du kan bruke slettetasten for å rette feil mens du skriver.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 3
+
+
+  1. For å legge tilbake tekst som nettopp er blitt slettet, trykk  p  . Dette
+     limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet
+     vil den bli limt inn på linjen under markøren).
+
+  2. For å erstatte et tegn under markøren, trykk  r  og deretter tegnet som
+     du vil ha der.
+
+  3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen
+     tar deg. Det vil si, skriv  ce  for å forandre fra markøren til slutten
+     av ordet,	c$  for å forandre til slutten av linjen.
+
+  4. Formatet for «forandre» er:
+
+	 c   [nummer]	bevegelse
+
+Nå kan du gå til neste leksjon.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	     Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS
+
+	** Trykk CTRL-G for å vise posisjonen i filen og filstatusen.
+	   Trykk  G  for å gå til en spesifikk linje i filen. **
+
+  Merk: Les hele leksjonen før du utfører noen av punktene!
+
+  1. Hold nede Ctrl-tasten og trykk  g	. Vi kaller dette CTRL-G. En melding
+     vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i
+     filen. Husk linjenummeret for bruk i steg 3.
+
+Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette
+      skjer når «ruler»-valget er satt (forklart i leksjon 6).
+
+  2. Trykk  G  for å gå til bunnen av filen.
+     Skriv  gg	for å gå til begynnelsen av filen.
+
+  3. Skriv inn linjenummeret du var på og deretter  G . Dette vil føre deg
+     tilbake til linjen du var på da du først trykket CTRL-G.
+
+  4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Leksjon 4.2: SØKEKOMMANDOEN
+
+      ** Skriv	/  etterfulgt av en søkestreng som du vil lete etter. **
+
+  1. Trykk  /  når du er i normalmodusen. Legg merke til at skråstreken og
+     markøren kommer til syne på bunnen av skjermen i likhet med
+     «:»-kommandoene.
+
+  2. Skriv «feeeiil» og trykk <ENTER>. Dette er teksten du vil lete etter.
+
+  3. For å finne neste forekomst av søkestrengen, trykk  n .
+     For å lete etter samme søketeksten i motsatt retning, trykk  N .
+
+  4. For å lete etter en tekst bakover i filen, bruk  ?  istedenfor  /	.
+
+  5. For å gå tilbake til der du kom fra, trykk  CTRL-O  (Hold Ctrl nede mens
+     du trykker bokstaven  o ). Repeter for å gå enda lengre tilbake. CTRL-I
+     går framover.
+
+---> «feeeiil» er ikke måten å skrive «feil» på, feeeiil er helt feil.
+Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt
+      hvis «wrapscan»-valget er resatt.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 4.3: FINN SAMSVARENDE PARENTESER
+
+
+	  ** Trykk  %  for å finne en samsvarende ), ] eller } . **
+
+  1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->.
+
+  2. Trykk  %  .
+
+  3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen.
+
+  4. Trykk  %  for å flytte markøren til den andre samsvarende parentesen.
+
+  5. Flytt markøren til en annen (, ), [, ], { eller } og se hva  %  gjør.
+
+---> Dette ( er en testlinje med (, [ ] og { } i den )).
+
+Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert
+      antall parenteser!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Leksjon 4.4: ERSTATT-KOMMANDOEN
+
+
+	** Skriv  :s/gammel/ny/g  for å erstatte «gammel» med «ny». **
+
+  1. Flytt markøren til linjen nedenfor som er merket med --->.
+
+  2. Skriv  :s/deen/den/ <ENTER>  . Legg merke til at denne kommandoen bare
+     forandrer den første forekomsten av «deen» på linjen.
+
+  3. Skriv  :s/deen/den/g . Når g-flagget legges til, betyr dette global
+     erstatning på linjen og erstatter alle forekomster av «deen» på linjen.
+
+---> deen som kan kaste deen tyngste steinen lengst er deen beste
+
+  4. For å erstatte alle forekomster av en tekststreng mellom to linjer,
+     skriv  :#,#s/gammel/ny/g  der #,# er linjenumrene på de to linjene for
+			       linjeområdet erstatningen skal gjøres.
+     Skriv  :%s/gammel/ny/g    for å erstatte tekst i hele filen.
+     Skriv  :%s/gammel/ny/gc   for å finne alle forekomster i hele filen, og
+			       deretter spørre om teksten skal erstattes eller
+			       ikke.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 4
+
+
+  1. Ctrl-G viser nåværende posisjon i filen og filstatusen.
+	     G	går til slutten av filen.
+     nummer  G	går til det linjenummeret.
+	    gg	går til den første linjen.
+
+  2. Skriv  /  etterfulgt av en søketekst for å lete FRAMOVER etter teksten.
+     Skriv  ?  etterfulgt av en søketekst for å lete BAKOVER etter teksten.
+     Etter et søk kan du trykke  n  for å finne neste forekomst i den samme
+     retningen eller  N  for å lete i motsatt retning.
+     CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner.
+
+  3. Skriv  %  når markøren står på en (, ), [, ], { eller } for å finne den
+     som samsvarer.
+
+  4. Erstatte «gammel» med første «ny» på en linje:  :s/gammel/ny
+     Erstatte alle «gammel» med «ny» på en linje:    :s/gammel/ny/g
+     Erstatte tekst mellom to linjenumre:	     :#,#s/gammel/ny/g
+     Erstatte alle forekomster i en fil:	     :%s/gammel/ny/g
+     For å godkjenne hver erstatning, legg til «c»:  :%s/gammel/ny/gc
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	       Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO
+
+
+    ** Skriv  :!  etterfulgt av en ekstern kommando for å utføre denne. **
+
+  1. Skriv den velkjente kommandoen  :	 for å plassere markøren på bunnen av
+     skjermen. Dette lar deg skrive en kommandolinjekommando.
+
+  2. Nå kan du skrive tegnet  !  . Dette lar deg utføre en hvilken som helst
+     ekstern kommando.
+
+  3. Som et eksempel, skriv  ls  etter utropstegnet og trykk <ENTER>. Du vil
+     nå få en liste over filene i katalogen, akkurat som om du hadde kjørt
+     kommandoen direkte fra kommandolinjen i skallet. Eller bruk  :!dir  hvis
+     «ls» ikke virker.
+
+MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med
+      parametere.
+
+MERK: Alle «:»-kommandoer må avsluttes med <ENTER>. Fra dette punktet er det
+      ikke alltid vi nevner det.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 5.2: MER OM LAGRING AV FILER
+
+
+      ** For å lagre endringene gjort i en tekst, skriv  :w FILNAVN. **
+
+  1. Skriv  :!dir  eller  :!ls	for å få en liste over filene i katalogen. Du
+     vet allerede at du må trykke <ENTER> etter dette.
+
+  2. Velg et filnavn på en fil som ikke finnes, som for eksempel  TEST .
+
+  3. Skriv  :w TEST  (der TEST er filnavnet du velger).
+
+  4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å
+     sjekke dette, skriv  :!dir  eller	:!ls  igjen for å se innholdet av
+     katalogen.
+
+Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med «vim TEST»,
+      ville filen vært en eksakt kopi av innføringen da du lagret den.
+
+  5. Fjern filen ved å skrive  :!rm TEST  hvis du er på et Unix-lignende
+     operativsystem, eller  :!del TEST	hvis du bruker MS-DOS.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES
+
+
+     ** For å lagre en del av en fil, skriv  v	bevegelse  :w FILNAVN **
+
+  1. Flytt markøren til denne linjen.
+
+  2. Trykk  v  og flytt markøren til det femte elementet nedenfor. Legg merke
+     til at teksten blir markert.
+
+  3. Trykk  :  (kolon). På bunnen av skjermen vil  :'<,'>  komme til syne.
+
+  4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
+     at du ser	:'<,'>w TEST  før du trykker Enter.
+
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+     for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
+
+MERK: Ved å trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
+      å gjøre det valgte området større eller mindre. Deretter kan du bruke en
+      operator for å gjøre noe med teksten. For eksempel sletter  d  teksten.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER
+
+
+ ** For å lese inn en annen fil inn i nåværende buffer, skriv  :r FILNAVN  **
+
+  1. Plasser markøren like over denne linjen.
+
+MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter
+      NED for å se denne leksjonen igjen.
+
+  2. Hent TEST-filen ved å bruke kommandoen  :r TEST  der TEST er navnet på
+     filen du brukte. Filen du henter blir plassert nedenfor markørlinjen.
+
+  3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av
+     leksjon 5.3, originalen og denne versjonen.
+
+MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel,	:r !ls
+      leser utdataene av ls-kommandoen og legger dem nedenfor markøren.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 5
+
+
+  1.  :!kommando  utfører en ekstern kommandio.
+
+      Noen nyttige eksempler er:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		  - List filene i katalogen.
+	  :!del FILNAVN    :!rm FILNAVN   - Slett filen FILNAVN.
+
+  2.  :w FILNAVN  skriver den nåværende Vim-filen disken med navnet FILNAVN .
+
+  3.  v  bevegelse  :w FILNAVN	lagrer de visuelt valgte linjene til filen
+     FILNAVN.
+
+  4.  :r FILNAVN  henter filen FILNAVN og legger den inn nedenfor markøren.
+
+  5.  :r !dir  leser utdataene fra «dir»-kommandoen og legger dem nedenfor
+     markørposisjonen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 6.1: «ÅPNE LINJE»-KOMMANDOEN
+
+
+    ** Skriv  o  for å «åpne opp» for en ny linje etter markøren og gå til
+       innsettingsmodus **
+
+  1. Flytt markøren til linjen nedenfor merket --->.
+
+  2. Skriv  o  (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i
+     innsettingsmodus.
+
+  3. Skriv litt tekst og trykk <ESC> for å gå ut av innsettingsmodusen.
+
+---> Etter at  o  er skrevet blir markøren plassert på den tomme linjen.
+
+  4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor	O
+     istedenfor en liten  o . Prøv dette på linjen nedenfor.
+
+---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Leksjon 6.2: «LEGG TIL»-KOMMANDOEN
+
+
+	    ** Skriv  a  for å legge til tekst ETTER markøren. **
+
+  1. Flytt markøren til starten av linjen merket ---> nedenfor.
+
+  2. Trykk  e  til markøren er på slutten av «li».
+
+  3. Trykk  a  (liten a) for å legge til tekst ETTER markøren.
+
+  4. Fullfør ordet sånn som på linjen nedenfor. Trykk <ESC> for å gå ut av
+     innsettingsmodusen.
+
+  5. Bruk  e  for å gå til det neste ufullstendige ordet og repeter steg 3 og
+     4.
+
+---> Denne li lar deg øve på å leg til tek på en linje.
+---> Denne linjen lar deg øve på å legge til tekst på en linje.
+
+Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste
+      forskjellen er hvor tegnene blir satt inn.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ
+
+
+	   ** Skriv en stor  R	for å erstatte mer enn ett tegn. **
+
+  1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren
+     til begynnelsen av den første «xxx»-en.
+
+  2. Trykk  R  og skriv inn tallet som står nedenfor på den andre linjen så
+     det erstatter xxx.
+
+  3. Trykk <ESC> for å gå ut av erstatningsmodusen. Legg merke til at resten
+     av linjen forblir uforandret.
+
+  4. Repeter stegene for å erstatte den gjenværende xxx.
+
+---> Ved å legge 123 til xxx får vi xxx.
+---> Ved å legge 123 til 456 får vi 579.
+
+MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives
+      erstatter et eksisterende tegn.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Leksjon 6.4: KOPIERE OG LIME INN TEKST
+
+
+    ** Bruk y-operatoren for å kopiere tekst og  p  for å lime den inn **
+
+  1. Gå til linjen merket ---> nedenfor og plasser markøren etter «a)».
+
+  2. Gå inn i visuell modus med  v  og flytt markøren til like før «første».
+
+  3. Trykk  y  for å kopiere (engelsk: «yank») den uthevede teksten.
+
+  4. Flytt markøren til slutten av den neste linjen:  j$
+
+  5. Trykk  p  for å lime inn teksten. Trykk deretter:	a andre <ESC> .
+
+  6. Bruk visuell modus for å velge « valget.», kopier det med	y , gå til
+     slutten av den neste linjen med  j$  og legg inn teksten der med  p .
+
+---> a) Dette er det første valget.
+     b)
+
+Merk: Du kan også bruke  y  som en operator;  yw  kopierer ett ord.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Leksjon 6.5: SETT VALG
+
+
+  ** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. **
+
+  1. Let etter «ignore» ved å skrive:  /ignore <ENTER>
+     Repeter flere ganger ved å trykke	n .
+
+  2. Sett «ic»-valget (Ignore Case) ved å skrive:  :set ic
+
+  3. Søk etter «ignore» igjen ved å trykke  n .
+     Legg merke til at både «Ignore» og «IGNORE» blir funnet.
+
+  4. Sett «hlsearch»- og «incsearch»-valgene:  :set hls is
+
+  5. Skriv søkekommandoen igjen og se hva som skjer:  /ignore <ENTER>
+
+  6. For å slå av ignorering av store/små bokstaver, skriv:  :set noic
+
+Merk: For å fjerne uthevingen av treff, skriv:	:nohlsearch
+Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk
+      \c  i uttrykket:	/ignore\c <ENTER>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 6
+
+  1. Trykk  o  for å legge til en linje NEDENFOR markøren og gå inn i
+     innsettingsmodus.
+     Trykk  O  for å åpne en linje OVER markøren.
+
+  2. Skriv  a  for å sette inn tekst ETTER markøren.
+     Skriv  A  for å sette inn tekst etter slutten av linjen.
+
+  3. Kommandoen  e  går til slutten av et ord.
+
+  4. Operatoren  y  («yank») kopierer tekst,  p  («paste») limer den inn.
+
+  5. Ved å trykke  R  går du inn i erstatningsmodus helt til  <ESC>  trykkes.
+
+  6. Skriv «:set xxx» for å sette valget «xxx». Noen valg er:
+	«ic» «ignorecase»	ignorer store/små bokstaver under søk
+	«is» «incsearch»	vis delvise treff for en søketekst
+	«hls» «hlsearch»	uthev alle søketreff
+
+  7. Legg til «no» foran valget for å slå det av:  :set noic
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Leksjon 7.1: FÅ HJELP
+
+
+		   ** Bruk det innebygde hjelpesystemet. **
+
+  Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av
+  disse måtene:
+    - Trykk Hjelp-tasten (hvis du har en)
+    - Trykk F1-tasten (hvis du har en)
+    - Skriv  :help <ENTER>
+
+  Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker.
+  Skriv  CTRL-W CTRL-W	for å hoppe fra et vindu til et annet
+  Skriv  :q <ENTER>	for å lukke hjelpevinduet.
+
+  Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til
+  «:help»-kommandoen. Prøv disse (ikke glem å trykke <ENTER>):
+
+    :help w
+    :help c_CTRL-D
+    :help insert-index
+    :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Leksjon 7.2: LAG ET OPPSTARTSSKRIPT
+
+
+			** Slå på funksjoner i Vim **
+
+  Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av
+  som standard. For å begynne å bruke flere funksjoner må du lage en
+  «vimrc»-fil.
+
+  1. Start redigeringen av «vimrc»-filen. Dette avhenger av systemet ditt:
+	:e ~/.vimrc	  for Unix
+	:e $VIM/_vimrc	  for MS Windows
+
+  2. Les inn eksempelfilen for «vimrc»:
+	:r $VIMRUNTIME/vimrc_example.vim
+
+  3. Lagre filen med:
+	:w
+
+  Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til
+  alle dine foretrukne oppsett i denne «vimrc»-filen.
+  For mer informasjon, skriv  :help vimrc-intro
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   Leksjon 7.3: FULLFØRING
+
+
+	      ** Kommandolinjefullføring med CTRL-D og <TAB> **
+
+  1. Vær sikker på at Vim ikke er i Vi-kompatibel modus:  :set nocp
+
+  2. Se hvilke filer som er i katalogen:  :!ls	eller  :!dir
+
+  3. Skriv starten på en kommando:  :e
+
+  4. Trykk  CTRL-D  og Vim vil vise en liste over kommandoer som starter med
+     «e».
+
+  5. Trykk  <TAB>  og Vim vil fullføre kommandonavnet til «:edit».
+
+  6. Legg til et mellomrom og starten på et eksisterende filnavn:  :edit FIL
+
+  7. Trykk <TAB>. Vim vil fullføre navnet (hvis det er unikt).
+
+MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og
+      <TAB>. Det er spesielt nyttig for bruk sammen med  :help .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  OPPSUMMERING AV LEKSJON 7
+
+
+  1. Skriv  :help  eller trykk <F1> eller <Help> for å åpne et hjelpevindu.
+
+  2. Skriv  :help kommando  for å få hjelp om  kommando .
+
+  3. Trykk  CTRL-W CTRL-W  for å hoppe til et annet vindu.
+
+  4. Trykk  :q	for å lukke hjelpevinduet.
+
+  5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine.
+
+  6. Når du skriver en «:»-kommando, trykk CTRL-D for å se mulige
+     fullføringer. Trykk <TAB> for å bruke en fullføring.
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Her slutter innføringen i Vim. Den var ment som en rask oversikt over
+  editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på
+  langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen
+  ved å skrive	:help user-manual  .
+
+  For videre lesing og studier, kan denne boken anbefales:
+      «Vim - Vi Improved» av Steve Oualline
+      Utgiver: New Riders
+  Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for
+  nybegynnere. Inneholder mange eksempler og illustrasjoner.
+  Se http://iccf-holland.org/click5.html
+
+  Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også:
+      «Learning the Vi Editor» av Linda Lamb
+      Utgiver: O'Reilly & Associates Inc.
+  Det er en god bok for å få vite omtrent hva som helst om Vi.
+  Den sjette utgaven inneholder også informasjon om Vim.
+
+  Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware,
+  Colorado School of Mines med idéer av Charles Smith, Colorado State
+  University. E-mail: bware@mines.colorado.edu .
+
+  Modifisert for Vim av Bram Moolenaar.
+  Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org
+  Id: tutor.no 406 2007-03-18 22:48:36Z sunny
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+vim: set ts=8 :
diff --git a/runtime/tutor/tutor.pl b/runtime/tutor/tutor.pl
index 4ae5355..96aa45c 100644
--- a/runtime/tutor/tutor.pl
+++ b/runtime/tutor/tutor.pl
@@ -2,9 +2,9 @@
 =    W i t a j   w   t u t o r i a l u   V I M - a      -    Wersja  1.7.     =
 ===============================================================================
 
-     Vim to potê¿ny edytor, który posiada wiele poleceñ, zbyt du¿o by
+     Vim to potê¿ny edytor, który posiada wiele poleceñ, zbyt du¿o, by
      wyja¶niæ je wszystkie w tym tutorialu. Ten przewodnik ma nauczyæ
-     Ciê pos³ugiwaæ siê wystarczaj±co wieloma komendami by¶ móg³ ³atwo
+     Ciê pos³ugiwaæ siê wystarczaj±co wieloma komendami, by¶ móg³ ³atwo
      u¿ywaæ Vima jako edytora ogólnego przeznaczenia.
 
      Czas potrzebny na ukoñczenie tutoriala to 25 do 30 minut i zale¿y
@@ -13,14 +13,14 @@
 	 UWAGA:
 	 Polecenia wykonywane w czasie lekcji zmodyfikuj± tekst. Zrób
 	 wcze¶niej kopiê tego pliku do æwiczeñ (je¶li zacz±³e¶ komend±
-	 "vimtutor" to ju¿ pracujesz na kopii).
+	 "vimtutor", to ju¿ pracujesz na kopii).
 
-	 Pamiêtaj ¿e przewodnik ten zosta³ zaprojektowany do nauki poprzez
-	 æwiczenia. Oznacza to, ¿e musisz wykonywaæ polecenia by nauczyæ siê ich
-	 prawid³owo. Je¶li bêdziesz jedynie czyta³ tekst szybko zapomnisz wiele
+	 Pamiêtaj, ¿e przewodnik ten zosta³ zaprojektowany do nauki poprzez
+	 æwiczenia. Oznacza to, ¿e musisz wykonywaæ polecenia, by nauczyæ siê ich
+	 prawid³owo. Je¶li bêdziesz jedynie czyta³ tekst, szybko zapomnisz wiele
 	 poleceñ!
 
-     Teraz upewnij siê, ¿e nie masz wci¶niêtego CapsLocka i wciskaj  j
+     Teraz upewnij siê, ¿e nie masz wci¶niêtego Caps Locka i wciskaj  j
      tak d³ugo dopóki Lekcja 1.1. nie wype³ni ca³kowicie ekranu.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -40,28 +40,28 @@
 
   3. U¿ywaj±c strza³ki w dó³ przejd¼ do nastêpnej lekcji.
 
-Uwaga: Je¶li nie jeste¶ pewien czego¶ co wpisa³e¶, wci¶nij <ESC> by wróciæ do
+Uwaga: Je¶li nie jeste¶ pewien czego¶ co wpisa³e¶, wci¶nij <ESC>, by wróciæ do
        trybu Normal. Wtedy powtórz polecenie.
 
 Uwaga: Klawisze kursora tak¿e powinny dzia³aæ, ale u¿ywaj±c  hjkl  bêdziesz
-       w stanie poruszaæ siê o wiele szybciej jak siê tylko przyzwyczaisz.
+       w stanie poruszaæ siê o wiele szybciej, jak siê tylko przyzwyczaisz.
        Naprawdê!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		    Lekcja 1.2.: WYCHODZENIE Z VIM-a
 
- !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca³± lekcjê.!!
+ !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca³± lekcjê !!
 
   1. Wci¶nij <ESC> (aby upewniæ siê, ¿e jeste¶ w trybie Normal).
   2. Wpisz:			:q!<ENTER>.
-     To spowoduje wyj¶cie z edytora PORZUCAJ¡C wszelkie zmiany jakie
-     zd±¿y³e¶ zrobiæ. Je¶li chcesz zapamiêtaæ zmiany i wyj¶æ
+     To spowoduje wyj¶cie z edytora PORZUCAJ¡C wszelkie zmiany, jakie
+     zd±¿y³e¶ zrobiæ. Je¶li chcesz zapamiêtaæ zmiany i wyj¶æ,
      wpisz:			:wq<ENTER>
 
   3. Kiedy widzisz znak zachêty pow³oki wpisz komendê, ¿eby wróciæ
      do tutoriala. Czyli:	vimtutor<ENTER>
 
-  4. Je¶li chcesz zapamiêtaæ polecenia, wykonaj kroki 1. do 3. aby
+  4. Je¶li chcesz zapamiêtaæ polecenia, wykonaj kroki 1. do 3., aby
      wyj¶æ i wróciæ do edytora.
 
 UWAGA: :q!<ENTER> porzuca wszelkie zmiany jakie zrobi³e¶. W nastêpnych
@@ -85,7 +85,7 @@
 
 ---> Kkrowa prrzeskoczy³a prrzez ksiiê¿ycc.
 
-  5. Teraz kiedy zdanie jest poprawione przejd¼ do Lekcji 1.4.
+  5. Teraz, kiedy zdanie jest poprawione, przejd¼ do Lekcji 1.4.
 
 UWAGA: Ucz siê przez æwiczenie, nie wkuwanie.
 
@@ -101,18 +101,18 @@
 
   1. Przenie¶ kursor do pierwszej linii poni¿ej oznaczonej --->.
 
-  2. Aby poprawiæ pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym
+  2. Aby poprawiæ pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym,
      gdzie tekst ma byæ wstawiony.
 
   3. Wci¶nij  i  a nastêpnie wpisz konieczne poprawki.
 
-  4. Po poprawieniu b³êdu wci¶nij <ESC> by wróciæ do trybu Normal.
-     Powtarzaj kroki 2. do 4. aby poprawiæ ca³e zdanie.
+  4. Po poprawieniu b³êdu wci¶nij <ESC>, by wróciæ do trybu Normal.
+     Powtarzaj kroki 2. do 4., aby poprawiæ ca³e zdanie.
 
 ---> W tej brkje trochê .
 ---> W tej linii brakuje trochê tekstu.
 
-  5. Kiedy czujesz siê swobodnie wstawiaj±c tekst przejd¼ do
+  5. Kiedy czujesz siê swobodnie wstawiaj±c tekst, przejd¼ do
      podsumowania poni¿ej.
 
 
@@ -129,7 +129,7 @@
 
   3. Kiedy tekst zosta³ dodany, wci¶nij <ESC> i wróæ do trybu Normalnego.
 
-  4. Przenie¶ kursor do drugiej linii oznaczonej ---> i powtórz kroki 2 i 3
+  4. Przenie¶ kursor do drugiej linii oznaczonej ---> i powtórz kroki 2. i 3.,
      aby poprawiæ zdanie.
 
 ---> Brakuje tu tro
@@ -137,27 +137,27 @@
 ---> Tu te¿ trochê bra
      Tu te¿ trochê brakuje.
 
-  5. Kiedy ju¿ utrwali³e¶ æwiczenie przejd¼ do lekcji 1.6.
+  5. Kiedy ju¿ utrwali³e¶ æwiczenie, przejd¼ do lekcji 1.6.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			  Lekcja 1.6.: EDYCJA PLIKU
 
 		  ** U¿yj  :wq  aby zapisaæ plik i wyj¶æ. **
 
-   !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczyaj ca³± lekcjê !!
+   !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczytaj ca³± lekcjê !!
 
   1. Zakoñcz tutorial tak jak w lekcji 1.2.:  :q!
-     Lub je¶li masz dostêp do innego terminala zrób kolejne kroki tam.
+     lub, je¶li masz dostêp do innego terminala, wykonaj kolejne kroki tam.
 
   2. W pow³oce wydaj polecenie:  vim tutor<ENTER>
-     "vim" jest poleceniem uruchamiaj±cym edytor Vim. 'tutor' to nazwa pliku
-     jaki chcesz edytowaæ. U¿yj pliku jaki mo¿e zostaæ zmieniony.
+     "vim" jest poleceniem uruchamiaj±cym edytor Vim. 'tutor' to nazwa pliku,
+     jaki chcesz edytowaæ. U¿yj pliku, który mo¿e zostaæ zmieniony.
 
-  3. Dodaj i usuñ tekst tak jak siê nauczy³e¶ w poprzednich lekcjach.
+  3. Dodaj i usuñ tekst tak, jak siê nauczy³e¶ w poprzednich lekcjach.
 
   4. Zapisz plik ze zmianami i opu¶æ Vima:  :wq<ENTER>
 
-  5. Je¶li zakoñczy³e¶ vimtutor w kroku 1. uruchom go ponownie i przejd¼
+  5. Je¶li zakoñczy³e¶ vimtutor w kroku 1., uruchom go ponownie i przejd¼
      do podsumowania poni¿ej.
 
   6. Po przeczytaniu wszystkich kroków i ich zrozumieniu: wykonaj je.
@@ -168,14 +168,14 @@
   1. Poruszasz kursorem u¿ywaj±c "strza³ek" i klawiszy  hjkl .
        h (w lewo)	 j (w dó³)	 k (do góry)		l (w prawo)
 
-  2. By wej¶æ do Vima (z pow³oki) wpisz:
+  2. By wej¶æ do Vima, (z pow³oki) wpisz:
 			    vim NAZWA_PLIKU<ENTER>
 
-  3. By wyj¶æ z Vima wpisz:
-			    <ESC> :q!<ENTER>  by usun±c wszystkie zmiany.
+  3. By wyj¶æ z Vima, wpisz:
+			    <ESC> :q!<ENTER>  by usun±æ wszystkie zmiany.
 	     LUB:	    <ESC> :wq<ENTER>  by zmiany zachowaæ.
 
-  4. By usun±æ znak pod kursorem wci¶nij:  x
+  4. By usun±æ znak pod kursorem, wci¶nij:  x
 
   5. By wstawiæ tekst przed kursorem lub dodaæ:
 	i   wpisz tekst   <ESC>         wstawi przed kursorem
@@ -189,18 +189,18 @@
 		  Lekcja 2.1.: POLECENIE DELETE (usuwanie)
 
 
-		      ** Wpisz  dw  by usun±c wyraz. **
+		      ** Wpisz  dw  by usun±æ wyraz. **
 
-  1. Wci¶nij  <ESC>  by upewniæ siê, ¿e jeste¶ w trybie Normal.
+  1. Wci¶nij  <ESC>, by upewniæ siê, ¿e jeste¶ w trybie Normal.
 
   2. Przenie¶ kursor do linii poni¿ej oznaczonej --->.
 
-  3. Przesuñ kursor na pocz±tek wyrazu, które chcesz usun±æ.
+  3. Przesuñ kursor na pocz±tek wyrazu, który chcesz usun±æ.
 
   4. Wpisz   dw   by usun±æ wyraz.
 
   UWAGA: Litera  d  pojawi siê na dole ekranu. Vim czeka na wpisanie  w .
-	 Je¶li zobaczysz inny znak oznacza to, ¿e wpisa³e¶ co¶ ¼le, wci¶nij
+	 Je¶li zobaczysz inny znak, oznacza to, ¿e wpisa³e¶ co¶ ¼le; wci¶nij
 	 <ESC> i zacznij od pocz±tku.
 
 ---> Jest tu parê papier wyrazów, które kamieñ nie nale¿± do no¿yce tego zdania.
@@ -225,7 +225,7 @@
 ---> Kto¶ wpisa³ koniec tego zdania dwukrotnie. zdania dwukrotnie.
 
 
-  5. Przejd¼ do Lekcji 2.3. by zrozumieæ co siê sta³o.
+  5. Przejd¼ do Lekcji 2.3., by zrozumieæ co siê sta³o.
 
 
 
@@ -235,12 +235,12 @@
 		     Lekcja 2.3.: O OPERATORACH I RUCHACH
 
 
-  Wiele poleceñ zmieniaj±cych tekst s± z³o¿one z operatora i ruchu.
-  Format dla polecenia usuwaj±cego z operatorem  d  jest taki:
+  Wiele poleceñ zmieniaj±cych tekst jest z³o¿onych z operatora i ruchu.
+  Format dla polecenia usuwaj±cego z operatorem  d  jest nastêpuj±cy:
 
 	    d  ruch
 
-  Gdzie:
+  gdzie:
    d      - operator usuwania.
    ruch   - na czym polecenie bêdzie wykonywane (lista poni¿ej).
 
@@ -252,7 +252,7 @@
 W ten sposób wpisanie  de  usunie znaki od kursora do koñca wyrazu.
 
 UWAGA: Wpisanie tylko ruchu w trybie Normal bez operatora przeniesie kursor
-       tak jak to okre¶lono.
+       tak, jak to okre¶lono.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		    Lekcja 2.4.: U¯YCIE MNO¯NIKA DLA RUCHU
@@ -266,32 +266,32 @@
 
   3. Wpisz  3e  aby przenie¶æ kursor do koñca trzeciego wyrazu w przód.
 
-  4. Wpisz  0  (zero) aby przenie¶æ kursor do pocz±tku linii.
+  4. Wpisz  0  (zero), aby przenie¶æ kursor na pocz±tek linii.
 
   5. Powtórz kroki 2. i 3. z innymi liczbami.
 
 
- ---> To jest zwyk³y wiersz z wyrazami po których mo¿esz siê poruszaæ.
+ ---> To jest zwyk³y wiersz z wyrazami, po których mo¿esz siê poruszaæ.
 
   6. Przejd¼ do lekcji 2.5.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lekcja 2.5.: U¯YCIE MNO¯NIKA BY WIÊCEJ USUN¡Æ
+		Lekcja 2.5.: U¯YCIE MNO¯NIKA, BY WIÊCEJ USUN¡Æ
 
 
     ** Wpisanie liczby z operatorem powtarza go odpowiedni± ilo¶æ razy. **
 
   W wy¿ej wspomnianej kombinacji operatora usuwania i ruchu podaj mno¿nik
-  przed ruchem by wiêcej usun±æ:
+  przed ruchem, by wiêcej usun±æ:
 	d  liczba  ruch
 
   1. Przenie¶ kursor do pierwszego wyrazu KAPITALIKAMI w linii zaznaczonej --->.
 
   2. Wpisz  2dw  aby usun±æ dwa wyrazy KAPITALIKAMI.
 
-  3. Powtarzaj kroki 1. i 2. z innymi mno¿nikami aby usun±æ kolejne wyrazy
+  3. Powtarzaj kroki 1. i 2. z innymi mno¿nikami, aby usun±æ kolejne wyrazy
      KAPITALIKAMI jednym poleceniem
 
 ---> ta ASD WE linia QWE ASDF ZXCV FG wyrazów zosta³a ERT FGH CF oczyszczona.
@@ -312,7 +312,7 @@
   1. Przenie¶ kursor do drugiego zdania z wierszyka poni¿ej.
   2. Wpisz  dd  aby usun±æ wiersz.
   3. Teraz przenie¶ siê do czwartego wiersza.
-  4. Wpisz  2dd  aby usun±c dwa wiersze.
+  4. Wpisz  2dd  aby usun±æ dwa wiersze.
 
 --->  1)  Ró¿e s± czerwone,
 --->  2)  B³oto jest fajne,
@@ -335,12 +335,12 @@
   2. Wpisz  x  aby usun±æ pierwszy niechciany znak.
   3. Teraz wci¶nij  u  aby cofn±æ skutki ostatniego polecenia.
   4. Tym razem popraw wszystkie b³êdy w linii u¿ywaj±c polecenia  x .
-  5. Teraz wci¶nij wielkie U aby przywróciæ liniê do oryginalnego stanu.
-  6. Teraz wci¶nij  u  kilka razy by cofn±æ  U  i poprzednie polecenia.
+  5. Teraz wci¶nij wielkie  U  aby przywróciæ liniê do oryginalnego stanu.
+  6. Teraz wci¶nij  u  kilka razy, by cofn±æ  U  i poprzednie polecenia.
   7. Teraz wpisz CTRL-R (trzymaj równocze¶nie wci¶niête klawisze CTRL i R)
      kilka razy, by cofn±æ cofniêcia.
 
----> Poopraw blêdyyy w teej liniii i zaamiieñ je prrzez coofnij.
+---> Poopraw b³êdyyy w teej liniii i zaamiieñ je prrzez coofnij.
 
   8. To s± bardzo po¿yteczne polecenia.
 
@@ -350,22 +350,22 @@
 			     LEKCJA 2. PODSUMOWANIE
 
 
-  1. By usun±æ znaki od kursora do nastêpnego wyrazu wpisz:   dw
-  2. By usun±æ znaki od kursora do koñca linii wpisz:    d$
+  1. By usun±æ znaki od kursora do nastêpnego wyrazu, wpisz:   dw
+  2. By usun±æ znaki od kursora do koñca linii, wpisz:    d$
   3. By usun±æ ca³± liniê:    dd
-  4. By powtórzyæ ruch poprzed¼ go liczb±:    2w
+  4. By powtórzyæ ruch, poprzed¼ go liczb±:    2w
   5. Format polecenia zmiany to:
                 operator  [liczba]  ruch
   gdzie:
-   operator  - to co trzeba zrobiæ (np.  d  dla usuwania)
+   operator  - to, co trzeba zrobiæ (np.  d  dla usuwania)
    [liczba]  - opcjonalne, ile razy powtórzyæ ruch
    ruch      - przenosi nad tekstem do operowania, takim jak  w (wyraz),
-	       $  (do koñca linii), etc.
+	       $  (do koñca linii) etc.
 
-  6. By przej¶æ do pocz±tku linii u¿yj zera:  0
-  7. By cofn±æ poprzednie polecenie, wpisz:	  u (ma³e u)
-     By cofn±æ wszystkie zmiany w linii wpisz:	  U (wielkie U)
-     By cofn±æ cofniêcia wpisz:			  CTRL-R
+  6. By przej¶æ do pocz±tku linii, u¿yj zera:  0
+  7. By cofn±æ poprzednie polecenie, wpisz:	  u  (ma³e u)
+     By cofn±æ wszystkie zmiany w linii, wpisz:	  U  (wielkie U)
+     By cofn±æ cofniêcie, wpisz:			  CTRL-R
 
 
 
@@ -379,7 +379,7 @@
 
   2. Wpisz  dd  aby usun±æ liniê i przechowaæ j± w rejestrze Vima.
 
-  3. Przenie¶ kursor do linii c), POWY¯EJ tej gdzie usuniêta linia powinna
+  3. Przenie¶ kursor do linii c), POWY¯EJ tej, gdzie usuniêta linia powinna
      siê znajdowaæ.
 
   4. Wci¶nij  p  by wstawiæ liniê poni¿ej kursora.
@@ -404,21 +404,21 @@
 
   3. Wpisz  r  a potem znak jaki powinien go zast±piæ.
 
-  4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie bêdzie taka jak druga.
+  4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie bêdzie taka, jak druga.
 
---->  Kjedy ten wiersz bi³ wstókiwany kto¶ wcizn±³ perê z³ych klawirzy!
---->  Kiedy ten wiersz by³ wstukiwany kto¶ wcisn±³ parê z³ych klawiszy!
+--->  Kjedy ten wiersz bi³ wstókiwany, kto¶ wcizn±³ perê z³ych klawirzy!
+--->  Kiedy ten wiersz by³ wstukiwany, kto¶ wcisn±³ parê z³ych klawiszy!
 
   5. Teraz czas na Lekcjê 3.3.
 
 
-UWAGA: Pamiêtaj by uczyæ siê æwicz±c, a nie pamiêciowo.
+UWAGA: Pamiêtaj, by uczyæ siê æwicz±c, a nie pamiêciowo.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		     Lekcja 3.3.: OPERATOR CHANGE (zmieñ)
 
-		 ** By zmieniæ do koñca wyrazu wpisz  ce . **
+		 ** By zmieniæ do koñca wyrazu, wpisz  ce . **
 
   1. Przenie¶ kursor do pierwszej linii poni¿ej oznaczonej --->.
 
@@ -428,7 +428,7 @@
 
   4. Wci¶nij <ESC> i przejd¼ do nastêpnej planowanej zmiany.
 
-  5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie bêdzie takie same
+  5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie bêdzie takie same,
      jak drugie.
 
 ---> Ta lunos ma pire s³ów, które t¿ina zbnic u¿ifajonc pcmazu zmieñ.
@@ -442,13 +442,13 @@
 		      Lekcja 3.4.: WIÊCEJ ZMIAN U¯YWAJ¡C c
 
 
-	** Polecenie change u¿ywa takich samych ruchów jak delete. **
+	** Polecenie change u¿ywa takich samych ruchów, jak delete. **
 
-  1. Operator change dzia³a tak samo jak delete. Format wygl±da tak:
+  1. Operator change dzia³a tak samo, jak delete. Format wygl±da tak:
 
 	    c   [liczba]   ruch
 
-  2. Ruchy s± tak¿e takie same, np.:  w  (wyraz),  $  (koniec linii), etc.
+  2. Ruchy s± tak¿e takie same, np.:  w  (wyraz),  $  (koniec linii) etc.
 
   3. Przenie¶ siê do pierwszej linii poni¿ej oznaczonej --->
 
@@ -456,7 +456,7 @@
 
   5. Wpisz  c$ , popraw koniec wiersza i wci¶nij <ESC>.
 
----> Koniec tego wiersza musi byæ poprawiony aby wygl±da³ tak jak drugi.
+---> Koniec tego wiersza musi byæ poprawiony, aby wygl±da³ tak, jak drugi.
 ---> Koniec tego wiersza musi byæ poprawiony u¿ywaj±c polecenia  c$ .
 
 UWAGA:  Mo¿esz u¿ywaæ <BS> aby poprawiaæ b³êdy w czasie pisania.
@@ -469,11 +469,11 @@
      polecenie wstawia skasowany tekst PO kursorze (je¶li ca³a linia
      zosta³a usuniêta, zostanie ona umieszczona w linii poni¿ej kursora).
 
-  2. By zamieniæ znak pod kursorem wci¶nij  r  a potem znak, który ma zast±piæ
+  2. By zamieniæ znak pod kursorem, wci¶nij  r  a potem znak, który ma zast±piæ
      oryginalny.
 
-  3. Operator change pozwala Ci na zast±pienie od kursora do miejsca gdzie
-     zabra³by ciê ruch. Np. wpisz  ce  aby zamieniæ tekst od kursora do koñca
+  3. Operator change pozwala Ci na zast±pienie od kursora do miejsca, gdzie
+     zabra³by Ciê ruch. Np. wpisz  ce  aby zamieniæ tekst od kursora do koñca
      wyrazu,  c$  aby zmieniæ tekst do koñca linii.
 
   4. Format do polecenia change (zmieñ):
@@ -497,12 +497,12 @@
      Zapamiêtaj numer linii dla potrzeb kroku 3.
 
 UWAGA: Mo¿esz te¿ zobaczyæ pozycjê kursora w prawym, dolnym rogu ekranu.
-       Dzieje siê tak kiedy ustawiona jest opcja 'ruler' (wyja¶nione w lekcji 6.).
+       Dzieje siê tak kiedy ustawiona jest opcja 'ruler' (wiêcej w lekcji 6.).
 
   2. Wci¶nij G aby przej¶æ na koniec pliku.
      Wci¶nij  gg  aby przej¶æ do pocz±tku pliku.
 
-  3. Wpisz numer linii, w której by³e¶ a potem  G . To przeniesie ciê
+  3. Wpisz numer linii, w której by³e¶ a potem  G . To przeniesie Ciê
      z powrotem do linii, w której by³e¶ kiedy wcisn±³e¶ CTRL-G.
 
   4. Je¶li czujesz siê wystarczaj±co pewnie, wykonaj kroki 1-3.
@@ -511,10 +511,10 @@
 			 Lekcja 4.2.: POLECENIE SZUKAJ
 
 
-	     ** Wpisz  /  a nastêpnie wyra¿enie aby je znale¼æ. **
+	     ** Wpisz  /  a nastêpnie wyra¿enie, aby je znale¼æ. **
 
-  1. W trybie Normal wpisz  / . Zauwa¿, ¿e znak ten, oraz kursor pojawi±
-     siê na dole ekranu tak samo jak polecenie  : .
+  1. W trybie Normal wpisz  / . Zauwa¿, ¿e znak ten oraz kursor pojawi±
+     siê na dole ekranu tak samo, jak polecenie  : .
 
   2. Teraz wpisz  b³ond<ENTER> .  To jest s³owo, którego chcesz szukaæ.
 
@@ -523,11 +523,11 @@
 
   4. Je¶li chcesz szukaæ frazy do ty³u, u¿yj polecenia  ?  zamiast  / .
 
-  5. Aby wróciæ gdzie by³e¶ wci¶nij  CTRL-O. Powtarzaj by wróciæ dalej. CTRL-I
+  5. Aby wróciæ gdzie by³e¶, wci¶nij  CTRL-O. Powtarzaj, by wróciæ dalej. CTRL-I
      idzie do przodu.
 
-Uwaga:  'b³ond' to nie jest metoda by przeliterowaæ b³±d; 'b³ond' to b³±d.
-Uwaga:  Kiedy szukanie osi±gnie koniec pliku bêdzie kontynuowa³o od pocz±tku
+Uwaga:  'b³ond' to nie jest metoda, by przeliterowaæ b³±d; 'b³ond' to b³±d.
+Uwaga:  Kiedy szukanie osi±gnie koniec pliku, bêdzie kontynuowane od pocz±tku
         o ile opcja 'wrapscan' nie zosta³a przestawiona.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -571,16 +571,16 @@
 
   4. Aby zmieniæ wszystkie wyst±pienia ³añcucha znaków pomiêdzy dwoma liniami,
      wpisz: :#,#s/stare/nowe/g gdzie #,# s± numerami linii ograniczaj±cych
-                               region gdzie ma nast±piæ zamiana.
+                               region, gdzie ma nast±piæ zamiana.
      wpisz  :%s/stare/nowe/g   by zmieniæ wszystkie wyst±pienia w ca³ym pliku.
      wpisz  :%s/stare/nowe/gc  by zmieniæ wszystkie wyst±pienia w ca³ym
-                               pliku, prosz±c o potwierdzenie za ka¿dym razem
+                               pliku, prosz±c o potwierdzenie za ka¿dym razem.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			     LEKCJA 4. PODSUMOWANIE
 
   1. CTRL-G   poka¿e Twoj± pozycjê w pliku i status pliku.  SHIFT-G przenosi
-	      ciê do koñca pliku.
+	      Ciê do koñca pliku.
      G        przenosi do koñca pliku.
      liczba G przenosi do linii [liczba].
      gg       przenosi do pierwszej linii.
@@ -588,22 +588,22 @@
   2. Wpisanie  /  a nastêpnie ³añcucha znaków szuka ³añcucha DO PRZODU.
      Wpisanie  ?  a nastêpnie ³añcucha znaków szuka ³añcucha DO TY£U.
      Po wyszukiwaniu wci¶nij  n  by znale¼æ nastêpne wyst±pienie szukanej
-     frazy tym samym kierunku lub  N  by szukaæ w kierunku przeciwnym.
+     frazy w tym samym kierunku lub  N  by szukaæ w kierunku przeciwnym.
      CTRL-O przenosi do starszych pozycji, CTRL-I do nowszych.
 
   3. Wpisanie  %  gdy kursor znajduje siê na (,),[,],{, lub } lokalizuje
      paruj±cy znak.
 
-  4. By zamieniæ pierwszy stary na nowy w linii wpisz      :s/stary/nowy
-     By zamieniæ wszystkie stary na nowy w linii wpisz     :s/stary/nowy/g
+  4. By zamieniæ pierwszy stary na nowy w linii, wpisz      :s/stary/nowy
+     By zamieniæ wszystkie stary na nowy w linii, wpisz     :s/stary/nowy/g
      By zamieniæ frazy pomiêdzy dwoma liniami # wpisz      :#,#s/stary/nowy/g
-     By zamieniæ wszystkie wyst±pienia w pliku wpisz       :%s/stary/nowy/g
-     By Vim prosi³ Ciê o potwierdzenie dodaj 'c'	   :%s/stary/nowy/gc
+     By zamieniæ wszystkie wyst±pienia w pliku, wpisz       :%s/stary/nowy/g
+     By Vim prosi³ Ciê o potwierdzenie, dodaj 'c'	   :%s/stary/nowy/gc
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		 Lekcja 5.1.: JAK WYKONAÆ POLECENIA ZEWNÊTRZNE
+		 Lekcja 5.1.: JAK WYKONAÆ POLECENIA ZEWNÊTRZNE?
 
 
-	** Wpisz  :!  a nastêpnie zewnêtrzne polecenie by je wykonaæ. **
+	** Wpisz  :!  a nastêpnie zewnêtrzne polecenie, by je wykonaæ. **
 
   1. Wpisz znajome polecenie  :  by ustawiæ kursor na dole ekranu. To pozwala
      na wprowadzenie komendy linii poleceñ.
@@ -626,20 +626,20 @@
 		    Lekcja 5.2.: WIÊCEJ O ZAPISYWANIU PLIKÓW
 
 
-	   ** By zachowaæ zmiany w tek¶ci wpisz :w NAZWA_PLIKU . **
+	   ** By zachowaæ zmiany w tek¶cie, wpisz :w NAZWA_PLIKU . **
 
   1. Wpisz  :!dir  lub  :!ls  by zobaczyæ spis plików w katalogu.
-     Ju¿ wiesz, ¿e musisz wcisn±æ <ENTER> po tym.
+     Ju¿ wiesz, ¿e musisz po tym wcisn±æ <ENTER>.
 
-  2. Wybierz nazwê pliku jaka jeszcze nie istnieje, np. TEST.
+  2. Wybierz nazwê pliku, jaka jeszcze nie istnieje, np. TEST.
 
   3. Teraz wpisz:   :w TEST   (gdzie TEST jest nazw± pliku jak± wybra³e¶.)
 
   4. To polecenie zapamiêta ca³y plik (Vim Tutor) pod nazw± TEST.
-     By to sprawdziæ wpisz  :!dir  lub  :!ls , ¿eby znowu zobaczyæ listê plików.
+     By to sprawdziæ, wpisz  :!dir  lub  :!ls  ¿eby znowu zobaczyæ listê plików.
 
 Uwaga: Zauwa¿, ¿e gdyby¶ teraz wyszed³ z Vima, a nastêpnie wszed³ ponownie
-       poleceniem  vim TEST , plik by³by dok³adn± kopi± tutoriala kiedy go
+       poleceniem  vim TEST , plik by³by dok³adn± kopi± tutoriala, kiedy go
        zapisywa³e¶.
 
   5. Teraz usuñ plik wpisuj±c (MS-DOS):		   :!del TEST
@@ -649,7 +649,7 @@
 		    Lekcja 5.3.: WYBRANIE TEKSTU DO ZAPISU
 
 
-	  ** By zachowaæ czê¶æ pliku wpisz  v ruch :w NAZWA_PLIKU **
+	  ** By zachowaæ czê¶æ pliku, wpisz  v ruch :w NAZWA_PLIKU **
 
   1. Przenie¶ kursor do tego wiersza.
 
@@ -664,26 +664,26 @@
   5. Vim zapisze wybrane linie do pliku TEST. U¿yj  :!dir  lub  :!ls , ¿eby to
      zobaczyæ. Jeszcze go nie usuwaj! U¿yjemy go w nastêpnej lekcji.
 
-UWAGA: Wci¶niêcie  v  zaczyna tryb Wizualny. Mo¿esz poruszaæ kursorem by
-       zmieniæ rozmiary zaznaczenia. Mo¿esz te¿ u¿yæ operatora by zrobiæ co¶
+UWAGA: Wci¶niêcie  v  zaczyna tryb Wizualny. Mo¿esz poruszaæ kursorem, by
+       zmieniæ rozmiary zaznaczenia. Mo¿esz te¿ u¿yæ operatora, by zrobiæ co¶
        z tekstem. Na przyk³ad  d  usuwa tekst.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		   Lekcja 5.4.: WSTAWIANIE I £¡CZENIE PLIKÓW
 
 
-	    ** By wstawiæ zawarto¶æ pliku wpisz   :r NAZWA_PLIKU **
+	    ** By wstawiæ zawarto¶æ pliku, wpisz   :r NAZWA_PLIKU **
 
   1. Umie¶æ kursor tu¿ powy¿ej tej linii.
 
 UWAGA: Po wykonaniu kroku 2. zobaczysz tekst z Lekcji 5.3. Potem przejd¼
-       do DO£U by zobaczyæ ponownie tê lekcjê.
+       do DO£U, by zobaczyæ ponownie tê lekcjê.
 
   2. Teraz wczytaj plik TEST u¿ywaj±c polecenia  :r TEST , gdzie TEST
      jest nazw± pliku.
      Wczytany plik jest umieszczony poni¿ej linii z kursorem.
 
-  3. By sprawdziæ czy plik zosta³ wczytany cofnij kursor i zobacz, ¿e
+  3. By sprawdziæ czy plik zosta³ wczytany, cofnij kursor i zobacz, ¿e
      teraz s± dwie kopie Lekcji 5.3., orygina³ i kopia z pliku.
 
 UWAGA: Mo¿esz te¿ wczytaæ wyj¶cie zewnêtrznego polecenia. Na przyk³ad
@@ -723,14 +723,14 @@
 
   1. Przenie¶ kursor do linii poni¿ej oznaczonej --->.
 
-  2. Wpisz  o  (ma³e) by otworzyæ liniê PONI¯EJ kursora i przenie¶æ siê
+  2. Wpisz  o  (ma³e), by otworzyæ liniê PONI¯EJ kursora i przenie¶æ siê
      do trybu Insert (wprowadzanie).
 
   3. Wpisz trochê tekstu i wci¶nij <ESC> by wyj¶æ z trybu Insert (wprowadzanie).
 
 ---> Po wci¶niêciu  o  kursor znajdzie siê w otwartej linii w trybie Insert.
 
-  4. By otworzyæ liniê POWY¯EJ kursora wci¶nij wielkie  O  zamiast ma³ego
+  4. By otworzyæ liniê POWY¯EJ kursora, wci¶nij wielkie  O  zamiast ma³ego
      o . Wypróbuj to na linii poni¿ej.
 
 ---> Otwórz liniê powy¿ej wciskaj±c SHIFT-O gdy kursor bêdzie na tej linii.
@@ -747,9 +747,9 @@
 
   2. Wciskaj  e  dopóki kursor nie bêdzie na koñcu li .
 
-  3. Wpisz  a  (ma³e) aby dodaæ tekst ZA znakiem pod kursorem.
+  3. Wpisz  a  (ma³e), aby dodaæ tekst ZA znakiem pod kursorem.
 
-  4. Dokoñcz wyraz tak jak w linii poni¿ej. Wci¶nij <ESC> aby opu¶ciæ tryb
+  4. Dokoñcz wyraz tak, jak w linii poni¿ej. Wci¶nij <ESC> aby opu¶ciæ tryb
      Insert.
 
   5. U¿yj  e  by przej¶æ do kolejnego niedokoñczonego wyrazu i powtarzaj kroki
@@ -758,7 +758,7 @@
 ---> Ta li poz Ci æwi dodaw teks do koñ lin
 ---> Ta linia pozwoli Ci æwiczyæ dodawanie tekstu do koñca linii.
 
-Uwaga:  a ,  i  oraz  A  prowadz± do trybu Insert, jedyn± ró¿nic± jest miejsce
+Uwaga:  a ,  i  oraz  A  prowadz± do trybu Insert, jedyn± ró¿nic± jest miejsce,
        gdzie nowe znaki bêd± dodawane.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		   Lekcja 6.3.: INNA WERSJA REPLACE (zamiana)
@@ -791,16 +791,16 @@
 
   1. Przejd¼ do linii oznaczonej ---> i umie¶æ kursor za "a)".
 
-  2. Wejd¼ w tryb Visual  v  i przenie¶ kursor na pocz±tek "pierwszy".
+  2. Wejd¼ w tryb Wizualny  v  i przenie¶ kursor na pocz±tek "pierwszy".
 
-  3. Wci¶nij  y  aby yankowaæ (kopiowaæ) pod¶wietlony tekst.
+  3. Wci¶nij  y  aby kopiowaæ (yankowaæ) pod¶wietlony tekst.
 
   4. Przenie¶ kursor do koñca nastêpnej linii:  j$
 
-  5. Wci¶nij  p  aby wpakowaæ (paste) tekst.  Dodaj:  a drugi<ESC> .
+  5. Wci¶nij  p  aby wkleiæ (wpakowaæ) tekst.  Dodaj:  a drugi<ESC> .
 
-  6. U¿yj trybu Wizualnego aby wybraæ " element.", yankuj go  y , przejd¼ do
-     koñca nastêpnej linii  j$ i upakuj tam tekst z  p .
+  6. U¿yj trybu Wizualnego, aby wybraæ " element.", yankuj go  y , przejd¼ do
+     koñca nastêpnej linii  j$  i upakuj tam tekst z  p .
 
 --->  a) to jest pierwszy element.
       b)
@@ -810,7 +810,7 @@
 			 Lekcja 6.5.: USTAWIANIE OPCJI
 
 
-** Ustawianie opcji tak by szukaj lub substytucja ignorowa³y wielko¶æ liter **
+** Ustawianie opcji tak, by szukaj lub substytucja ignorowa³y wielko¶æ liter **
 
   1. Szukaj 'ignore' wpisuj±c:    /ignore<ENTER>
      Powtórz szukanie kilka razy naciskaj±c klawisz  n .
@@ -828,7 +828,7 @@
 
   6. Aby wy³±czyæ ignorowanie wielko¶ci liter:  :set noic
 
-Uwaga: Aby usun±æ pod¶wietlanie dopasowañ wpisz:   :nohlsearch
+Uwaga: Aby usun±æ pod¶wietlanie dopasowañ, wpisz:   :nohlsearch
 Uwaga: Aby ignorowaæ wielko¶æ liter dla jednego wyszukiwania: /ignore\c<ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			     LEKCJA 6. PODSUMOWANIE
@@ -837,36 +837,36 @@
   1. Wpisanie  o  otwiera liniê PONI¯EJ kursora.
      Wpisanie  O  otwiera liniê POWY¯EJ kursora.
 
-  2. Wpisanie  a  by wstawiæ tekst ZA znakiem na, którym jest kursor.
+  2. Wpisanie  a  wstawia tekst ZA znakiem, na którym jest kursor.
      Wpisanie  A  dodaje tekst na koñcu linii.
 
   3. Polecenie  e  przenosi do koñca wyrazu.
-  4. Operator  y  yankuje (kopiuje) tekst,  p  pakuje (wkleja, paste) go.
+  4. Operator  y  yankuje (kopiuje) tekst,  p  pakuje (wkleja) go.
   5. Wpisanie wielkiego  R  wprowadza w tryb Replace (zamiana) dopóki
      nie zostanie wci¶niêty <ESC>.
-  6. Wpisanie ":set xxx" ustawia opcjê "xxx". Nietkóre opcje:
+  6. Wpisanie ":set xxx" ustawia opcjê "xxx". Niektóre opcje:
 	'ic'  'ignorecase'	ignoruj wielko¶æ znaków
 	'is'  'incsearch'	poka¿ czê¶ciowe dopasowania
 	'hls' 'hlsearch'	pod¶wietl wszystkie dopasowania
-     Mo¿esz u¿yæ zarówno d³ugiej jak i krótkiej formy.
-  7. Dodaj "no" aby wy³±czyæ opcjê:   :set noic
+     Mo¿esz u¿yæ zarówno d³ugiej, jak i krótkiej formy.
+  7. Dodaj "no", aby wy³±czyæ opcjê:   :set noic
 
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			LEKCJA 7.1. JAK UZYSKAÆ POMOC
+			 LEKCJA 7.1. JAK UZYSKAÆ POMOC?
 
 		      ** U¿ycie systemu pomocy on-line **
 
-  Vim posiada bardzo dobry system pomocy on-line. By zacz±æ spróbuj jednej
+  Vim posiada bardzo dobry system pomocy on-line. By zacz±æ, spróbuj jednej
   z trzech mo¿liwo¶ci:
 	- wci¶nij klawisz <HELP> (je¶li taki masz)
 	- wci¶nij klawisz <F1> (je¶li taki masz)
 	- wpisz   :help<ENTER>
 
-  Przeczytaj tekst w oknie pomocy  aby dowiedzieæ siê jak dzia³a pomoc.
+  Przeczytaj tekst w oknie pomocy, aby dowiedzieæ siê jak dzia³a pomoc.
   wpisz CTRL-W CTRL-W    aby przeskoczyæ z jednego okna do innego
   wpisz :q<ENTER>        aby zamkn±æ okno pomocy.
 
@@ -894,10 +894,10 @@
   3. Zapisz plik:
      :w
 
-  Nastêpnym razem gdy zaczniesz pracê w Vimie bêdzie on u¿ywaæ pod¶wietlania
+  Nastêpnym razem, gdy zaczniesz pracê w Vimie bêdzie on u¿ywaæ pod¶wietlania
   sk³adni. Mo¿esz dodaæ wszystkie swoje ulubione ustawienia do tego pliku
   "vimrc".
-  Aby uzyskaæ wiêcej informacji wpisz     :help vimrc-intro
+  Aby uzyskaæ wiêcej informacji, wpisz     :help vimrc-intro
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			  Lekcja 7.3.: UZUPE£NIANIE
@@ -907,11 +907,11 @@
 
   1. Upewnij siê, ¿e Vim nie jest w trybie kompatybilno¶ci:   :set nocp
 
-  2. Zerknij jakie pliki s± w bie¿±cm katalogu:   :!ls   lub   :!dir
+  2. Zerknij, jakie pliki s± w bie¿±cym katalogu:   :!ls   lub   :!dir
 
   3. Wpisz pocz±tek polecenia:   :e
 
-  4. Wci¶nij  CTRL-D  i Vim poka¿e listê poleceñ jakie zaczynaj± siê na "e".
+  4. Wci¶nij  CTRL-D  i Vim poka¿e listê poleceñ, jakie zaczynaj± siê na "e".
 
   5. Wci¶nij  <TAB>  i Vim uzupe³ni polecenie do ":edit".
 
@@ -925,7 +925,7 @@
 			    Lekcja 7. PODSUMOWANIE
 
 
-  1. Wpisz  :help  lub wci¶nij <F1> lub <Help> aby otworzyæ okno pomocy.
+  1. Wpisz  :help  albo wci¶nij <F1> lub <Help> aby otworzyæ okno pomocy.
 
   2. Wpisz  :help cmd  aby uzyskaæ pomoc o  cmd .
 
@@ -945,14 +945,14 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-  Tutaj siê koñczy tutorial Vima. Zosta³ on pomy¶lany tak aby daæ krótki
+  Tutaj siê koñczy tutorial Vima. Zosta³ on pomy¶lany tak, aby daæ krótki
   przegl±d jego mo¿liwo¶ci, wystarczaj±cy by¶ móg³ go u¿ywaæ. Jest on
-  daleki od kompletno¶ci poniewa¿ Vim ma o wiele, wiele wiêcej poleceñ.
+  daleki od kompletno¶ci, poniewa¿ Vim ma o wiele, wiele wiêcej poleceñ.
 
   Dla dalszej nauki rekomendujemy ksi±¿kê:
 	Vim - Vi Improved - autor Steve Oualline
 	Wydawca: New Riders
-  Pierwsza ksi±zka ca³kowicie po¶wiêcona Vimowi. U¿yteczna zw³aszcza dla
+  Pierwsza ksi±¿ka ca³kowicie po¶wiêcona Vimowi. U¿yteczna zw³aszcza dla
   pocz±tkuj±cych. Zawiera wiele przyk³adów i ilustracji.
   Zobacz http://iccf-holland.org./click5.html
 
@@ -960,7 +960,7 @@
   polecenia:
 	Learning the Vi Editor - autor Linda Lamb
 	Wydawca: O'Reilly & Associates Inc.
-  To dobra ksi±¿ka by dowiedzieæ siê niemal wszystkiego co chcia³by¶ zrobiæ
+  To dobra ksi±¿ka, by dowiedzieæ siê niemal wszystkiego, co chcia³by¶ zrobiæ
   z Vi. Szósta edycja zawiera te¿ informacje o Vimie.
 
   Po polsku wydano:
@@ -991,4 +991,5 @@
   rev. Marzec 2002
   2nd rev. Wrzesieñ 2004
   3rd rev. Marzec 2006
+  4th rev. Grudzieñ 2008
   Wszelkie uwagi proszê kierowaæ na: mikmach@wp.pl
diff --git a/runtime/tutor/tutor.pl.cp1250 b/runtime/tutor/tutor.pl.cp1250
index 98971d0..8c647e1 100644
--- a/runtime/tutor/tutor.pl.cp1250
+++ b/runtime/tutor/tutor.pl.cp1250
@@ -2,9 +2,9 @@
 =    W i t a j   w   t u t o r i a l u   V I M - a      -    Wersja  1.7.     =
 ===============================================================================
 
-     Vim to potê¿ny edytor, który posiada wiele poleceñ, zbyt du¿o by
+     Vim to potê¿ny edytor, który posiada wiele poleceñ, zbyt du¿o, by
      wyjaœniæ je wszystkie w tym tutorialu. Ten przewodnik ma nauczyæ
-     Ciê pos³ugiwaæ siê wystarczaj¹co wieloma komendami byœ móg³ ³atwo
+     Ciê pos³ugiwaæ siê wystarczaj¹co wieloma komendami, byœ móg³ ³atwo
      u¿ywaæ Vima jako edytora ogólnego przeznaczenia.
 
      Czas potrzebny na ukoñczenie tutoriala to 25 do 30 minut i zale¿y
@@ -13,14 +13,14 @@
 	 UWAGA:
 	 Polecenia wykonywane w czasie lekcji zmodyfikuj¹ tekst. Zrób
 	 wczeœniej kopiê tego pliku do æwiczeñ (jeœli zacz¹³eœ komend¹
-	 "vimtutor" to ju¿ pracujesz na kopii).
+	 "vimtutor", to ju¿ pracujesz na kopii).
 
-	 Pamiêtaj ¿e przewodnik ten zosta³ zaprojektowany do nauki poprzez
-	 æwiczenia. Oznacza to, ¿e musisz wykonywaæ polecenia by nauczyæ siê ich
-	 prawid³owo. Jeœli bêdziesz jedynie czyta³ tekst szybko zapomnisz wiele
+	 Pamiêtaj, ¿e przewodnik ten zosta³ zaprojektowany do nauki poprzez
+	 æwiczenia. Oznacza to, ¿e musisz wykonywaæ polecenia, by nauczyæ siê ich
+	 prawid³owo. Jeœli bêdziesz jedynie czyta³ tekst, szybko zapomnisz wiele
 	 poleceñ!
 
-     Teraz upewnij siê, ¿e nie masz wciœniêtego CapsLocka i wciskaj  j
+     Teraz upewnij siê, ¿e nie masz wciœniêtego Caps Locka i wciskaj  j
      tak d³ugo dopóki Lekcja 1.1. nie wype³ni ca³kowicie ekranu.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -40,28 +40,28 @@
 
   3. U¿ywaj¹c strza³ki w dó³ przejdŸ do nastêpnej lekcji.
 
-Uwaga: Jeœli nie jesteœ pewien czegoœ co wpisa³eœ, wciœnij <ESC> by wróciæ do
+Uwaga: Jeœli nie jesteœ pewien czegoœ co wpisa³eœ, wciœnij <ESC>, by wróciæ do
        trybu Normal. Wtedy powtórz polecenie.
 
 Uwaga: Klawisze kursora tak¿e powinny dzia³aæ, ale u¿ywaj¹c  hjkl  bêdziesz
-       w stanie poruszaæ siê o wiele szybciej jak siê tylko przyzwyczaisz.
+       w stanie poruszaæ siê o wiele szybciej, jak siê tylko przyzwyczaisz.
        Naprawdê!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		    Lekcja 1.2.: WYCHODZENIE Z VIM-a
 
- !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca³¹ lekcjê.!!
+ !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj ca³¹ lekcjê !!
 
   1. Wciœnij <ESC> (aby upewniæ siê, ¿e jesteœ w trybie Normal).
   2. Wpisz:			:q!<ENTER>.
-     To spowoduje wyjœcie z edytora PORZUCAJ¥C wszelkie zmiany jakie
-     zd¹¿y³eœ zrobiæ. Jeœli chcesz zapamiêtaæ zmiany i wyjœæ
+     To spowoduje wyjœcie z edytora PORZUCAJ¥C wszelkie zmiany, jakie
+     zd¹¿y³eœ zrobiæ. Jeœli chcesz zapamiêtaæ zmiany i wyjœæ,
      wpisz:			:wq<ENTER>
 
   3. Kiedy widzisz znak zachêty pow³oki wpisz komendê, ¿eby wróciæ
      do tutoriala. Czyli:	vimtutor<ENTER>
 
-  4. Jeœli chcesz zapamiêtaæ polecenia, wykonaj kroki 1. do 3. aby
+  4. Jeœli chcesz zapamiêtaæ polecenia, wykonaj kroki 1. do 3., aby
      wyjœæ i wróciæ do edytora.
 
 UWAGA: :q!<ENTER> porzuca wszelkie zmiany jakie zrobi³eœ. W nastêpnych
@@ -85,7 +85,7 @@
 
 ---> Kkrowa prrzeskoczy³a prrzez ksiiê¿ycc.
 
-  5. Teraz kiedy zdanie jest poprawione przejdŸ do Lekcji 1.4.
+  5. Teraz, kiedy zdanie jest poprawione, przejdŸ do Lekcji 1.4.
 
 UWAGA: Ucz siê przez æwiczenie, nie wkuwanie.
 
@@ -101,18 +101,18 @@
 
   1. Przenieœ kursor do pierwszej linii poni¿ej oznaczonej --->.
 
-  2. Aby poprawiæ pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym
+  2. Aby poprawiæ pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym,
      gdzie tekst ma byæ wstawiony.
 
   3. Wciœnij  i  a nastêpnie wpisz konieczne poprawki.
 
-  4. Po poprawieniu b³êdu wciœnij <ESC> by wróciæ do trybu Normal.
-     Powtarzaj kroki 2. do 4. aby poprawiæ ca³e zdanie.
+  4. Po poprawieniu b³êdu wciœnij <ESC>, by wróciæ do trybu Normal.
+     Powtarzaj kroki 2. do 4., aby poprawiæ ca³e zdanie.
 
 ---> W tej brkje trochê .
 ---> W tej linii brakuje trochê tekstu.
 
-  5. Kiedy czujesz siê swobodnie wstawiaj¹c tekst przejdŸ do
+  5. Kiedy czujesz siê swobodnie wstawiaj¹c tekst, przejdŸ do
      podsumowania poni¿ej.
 
 
@@ -129,7 +129,7 @@
 
   3. Kiedy tekst zosta³ dodany, wciœnij <ESC> i wróæ do trybu Normalnego.
 
-  4. Przenieœ kursor do drugiej linii oznaczonej ---> i powtórz kroki 2 i 3
+  4. Przenieœ kursor do drugiej linii oznaczonej ---> i powtórz kroki 2. i 3.,
      aby poprawiæ zdanie.
 
 ---> Brakuje tu tro
@@ -137,27 +137,27 @@
 ---> Tu te¿ trochê bra
      Tu te¿ trochê brakuje.
 
-  5. Kiedy ju¿ utrwali³eœ æwiczenie przejdŸ do lekcji 1.6.
+  5. Kiedy ju¿ utrwali³eœ æwiczenie, przejdŸ do lekcji 1.6.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			  Lekcja 1.6.: EDYCJA PLIKU
 
 		  ** U¿yj  :wq  aby zapisaæ plik i wyjœæ. **
 
-   !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczyaj ca³¹ lekcjê !!
+   !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczytaj ca³¹ lekcjê !!
 
   1. Zakoñcz tutorial tak jak w lekcji 1.2.:  :q!
-     Lub jeœli masz dostêp do innego terminala zrób kolejne kroki tam.
+     lub, jeœli masz dostêp do innego terminala, wykonaj kolejne kroki tam.
 
   2. W pow³oce wydaj polecenie:  vim tutor<ENTER>
-     "vim" jest poleceniem uruchamiaj¹cym edytor Vim. 'tutor' to nazwa pliku
-     jaki chcesz edytowaæ. U¿yj pliku jaki mo¿e zostaæ zmieniony.
+     "vim" jest poleceniem uruchamiaj¹cym edytor Vim. 'tutor' to nazwa pliku,
+     jaki chcesz edytowaæ. U¿yj pliku, który mo¿e zostaæ zmieniony.
 
-  3. Dodaj i usuñ tekst tak jak siê nauczy³eœ w poprzednich lekcjach.
+  3. Dodaj i usuñ tekst tak, jak siê nauczy³eœ w poprzednich lekcjach.
 
   4. Zapisz plik ze zmianami i opuϾ Vima:  :wq<ENTER>
 
-  5. Jeœli zakoñczy³eœ vimtutor w kroku 1. uruchom go ponownie i przejdŸ
+  5. Jeœli zakoñczy³eœ vimtutor w kroku 1., uruchom go ponownie i przejdŸ
      do podsumowania poni¿ej.
 
   6. Po przeczytaniu wszystkich kroków i ich zrozumieniu: wykonaj je.
@@ -168,14 +168,14 @@
   1. Poruszasz kursorem u¿ywaj¹c "strza³ek" i klawiszy  hjkl .
        h (w lewo)	 j (w dó³)	 k (do góry)		l (w prawo)
 
-  2. By wejœæ do Vima (z pow³oki) wpisz:
+  2. By wejœæ do Vima, (z pow³oki) wpisz:
 			    vim NAZWA_PLIKU<ENTER>
 
-  3. By wyjϾ z Vima wpisz:
-			    <ESC> :q!<ENTER>  by usun¹c wszystkie zmiany.
+  3. By wyjϾ z Vima, wpisz:
+			    <ESC> :q!<ENTER>  by usun¹æ wszystkie zmiany.
 	     LUB:	    <ESC> :wq<ENTER>  by zmiany zachowaæ.
 
-  4. By usun¹æ znak pod kursorem wciœnij:  x
+  4. By usun¹æ znak pod kursorem, wciœnij:  x
 
   5. By wstawiæ tekst przed kursorem lub dodaæ:
 	i   wpisz tekst   <ESC>         wstawi przed kursorem
@@ -189,18 +189,18 @@
 		  Lekcja 2.1.: POLECENIE DELETE (usuwanie)
 
 
-		      ** Wpisz  dw  by usun¹c wyraz. **
+		      ** Wpisz  dw  by usun¹æ wyraz. **
 
-  1. Wciœnij  <ESC>  by upewniæ siê, ¿e jesteœ w trybie Normal.
+  1. Wciœnij  <ESC>, by upewniæ siê, ¿e jesteœ w trybie Normal.
 
   2. Przenieœ kursor do linii poni¿ej oznaczonej --->.
 
-  3. Przesuñ kursor na pocz¹tek wyrazu, które chcesz usun¹æ.
+  3. Przesuñ kursor na pocz¹tek wyrazu, który chcesz usun¹æ.
 
   4. Wpisz   dw   by usun¹æ wyraz.
 
   UWAGA: Litera  d  pojawi siê na dole ekranu. Vim czeka na wpisanie  w .
-	 Jeœli zobaczysz inny znak oznacza to, ¿e wpisa³eœ coœ Ÿle, wciœnij
+	 Jeœli zobaczysz inny znak, oznacza to, ¿e wpisa³eœ coœ Ÿle; wciœnij
 	 <ESC> i zacznij od pocz¹tku.
 
 ---> Jest tu parê papier wyrazów, które kamieñ nie nale¿¹ do no¿yce tego zdania.
@@ -225,7 +225,7 @@
 ---> Ktoœ wpisa³ koniec tego zdania dwukrotnie. zdania dwukrotnie.
 
 
-  5. PrzejdŸ do Lekcji 2.3. by zrozumieæ co siê sta³o.
+  5. PrzejdŸ do Lekcji 2.3., by zrozumieæ co siê sta³o.
 
 
 
@@ -235,12 +235,12 @@
 		     Lekcja 2.3.: O OPERATORACH I RUCHACH
 
 
-  Wiele poleceñ zmieniaj¹cych tekst s¹ z³o¿one z operatora i ruchu.
-  Format dla polecenia usuwaj¹cego z operatorem  d  jest taki:
+  Wiele poleceñ zmieniaj¹cych tekst jest z³o¿onych z operatora i ruchu.
+  Format dla polecenia usuwaj¹cego z operatorem  d  jest nastêpuj¹cy:
 
 	    d  ruch
 
-  Gdzie:
+  gdzie:
    d      - operator usuwania.
    ruch   - na czym polecenie bêdzie wykonywane (lista poni¿ej).
 
@@ -252,7 +252,7 @@
 W ten sposób wpisanie  de  usunie znaki od kursora do koñca wyrazu.
 
 UWAGA: Wpisanie tylko ruchu w trybie Normal bez operatora przeniesie kursor
-       tak jak to okreœlono.
+       tak, jak to okreœlono.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		    Lekcja 2.4.: U¯YCIE MNO¯NIKA DLA RUCHU
@@ -266,32 +266,32 @@
 
   3. Wpisz  3e  aby przenieœæ kursor do koñca trzeciego wyrazu w przód.
 
-  4. Wpisz  0  (zero) aby przenieœæ kursor do pocz¹tku linii.
+  4. Wpisz  0  (zero), aby przenieœæ kursor na pocz¹tek linii.
 
   5. Powtórz kroki 2. i 3. z innymi liczbami.
 
 
- ---> To jest zwyk³y wiersz z wyrazami po których mo¿esz siê poruszaæ.
+ ---> To jest zwyk³y wiersz z wyrazami, po których mo¿esz siê poruszaæ.
 
   6. PrzejdŸ do lekcji 2.5.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lekcja 2.5.: U¯YCIE MNO¯NIKA BY WIÊCEJ USUN¥Æ
+		Lekcja 2.5.: U¯YCIE MNO¯NIKA, BY WIÊCEJ USUN¥Æ
 
 
     ** Wpisanie liczby z operatorem powtarza go odpowiedni¹ iloœæ razy. **
 
   W wy¿ej wspomnianej kombinacji operatora usuwania i ruchu podaj mno¿nik
-  przed ruchem by wiêcej usun¹æ:
+  przed ruchem, by wiêcej usun¹æ:
 	d  liczba  ruch
 
   1. Przenieœ kursor do pierwszego wyrazu KAPITALIKAMI w linii zaznaczonej --->.
 
   2. Wpisz  2dw  aby usun¹æ dwa wyrazy KAPITALIKAMI.
 
-  3. Powtarzaj kroki 1. i 2. z innymi mno¿nikami aby usun¹æ kolejne wyrazy
+  3. Powtarzaj kroki 1. i 2. z innymi mno¿nikami, aby usun¹æ kolejne wyrazy
      KAPITALIKAMI jednym poleceniem
 
 ---> ta ASD WE linia QWE ASDF ZXCV FG wyrazów zosta³a ERT FGH CF oczyszczona.
@@ -312,7 +312,7 @@
   1. Przenieœ kursor do drugiego zdania z wierszyka poni¿ej.
   2. Wpisz  dd  aby usun¹æ wiersz.
   3. Teraz przenieœ siê do czwartego wiersza.
-  4. Wpisz  2dd  aby usun¹c dwa wiersze.
+  4. Wpisz  2dd  aby usun¹æ dwa wiersze.
 
 --->  1)  Ró¿e s¹ czerwone,
 --->  2)  B³oto jest fajne,
@@ -335,12 +335,12 @@
   2. Wpisz  x  aby usun¹æ pierwszy niechciany znak.
   3. Teraz wciœnij  u  aby cofn¹æ skutki ostatniego polecenia.
   4. Tym razem popraw wszystkie b³êdy w linii u¿ywaj¹c polecenia  x .
-  5. Teraz wciœnij wielkie U aby przywróciæ liniê do oryginalnego stanu.
-  6. Teraz wciœnij  u  kilka razy by cofn¹æ  U  i poprzednie polecenia.
+  5. Teraz wciœnij wielkie  U  aby przywróciæ liniê do oryginalnego stanu.
+  6. Teraz wciœnij  u  kilka razy, by cofn¹æ  U  i poprzednie polecenia.
   7. Teraz wpisz CTRL-R (trzymaj równoczeœnie wciœniête klawisze CTRL i R)
      kilka razy, by cofn¹æ cofniêcia.
 
----> Poopraw blêdyyy w teej liniii i zaamiieñ je prrzez coofnij.
+---> Poopraw b³êdyyy w teej liniii i zaamiieñ je prrzez coofnij.
 
   8. To s¹ bardzo po¿yteczne polecenia.
 
@@ -350,22 +350,22 @@
 			     LEKCJA 2. PODSUMOWANIE
 
 
-  1. By usun¹æ znaki od kursora do nastêpnego wyrazu wpisz:   dw
-  2. By usun¹æ znaki od kursora do koñca linii wpisz:    d$
+  1. By usun¹æ znaki od kursora do nastêpnego wyrazu, wpisz:   dw
+  2. By usun¹æ znaki od kursora do koñca linii, wpisz:    d$
   3. By usun¹æ ca³¹ liniê:    dd
-  4. By powtórzyæ ruch poprzedŸ go liczb¹:    2w
+  4. By powtórzyæ ruch, poprzedŸ go liczb¹:    2w
   5. Format polecenia zmiany to:
                 operator  [liczba]  ruch
   gdzie:
-   operator  - to co trzeba zrobiæ (np.  d  dla usuwania)
+   operator  - to, co trzeba zrobiæ (np.  d  dla usuwania)
    [liczba]  - opcjonalne, ile razy powtórzyæ ruch
    ruch      - przenosi nad tekstem do operowania, takim jak  w (wyraz),
-	       $  (do koñca linii), etc.
+	       $  (do koñca linii) etc.
 
-  6. By przejœæ do pocz¹tku linii u¿yj zera:  0
-  7. By cofn¹æ poprzednie polecenie, wpisz:	  u (ma³e u)
-     By cofn¹æ wszystkie zmiany w linii wpisz:	  U (wielkie U)
-     By cofn¹æ cofniêcia wpisz:			  CTRL-R
+  6. By przejœæ do pocz¹tku linii, u¿yj zera:  0
+  7. By cofn¹æ poprzednie polecenie, wpisz:	  u  (ma³e u)
+     By cofn¹æ wszystkie zmiany w linii, wpisz:	  U  (wielkie U)
+     By cofn¹æ cofniêcie, wpisz:			  CTRL-R
 
 
 
@@ -379,7 +379,7 @@
 
   2. Wpisz  dd  aby usun¹æ liniê i przechowaæ j¹ w rejestrze Vima.
 
-  3. Przenieœ kursor do linii c), POWY¯EJ tej gdzie usuniêta linia powinna
+  3. Przenieœ kursor do linii c), POWY¯EJ tej, gdzie usuniêta linia powinna
      siê znajdowaæ.
 
   4. Wciœnij  p  by wstawiæ liniê poni¿ej kursora.
@@ -404,21 +404,21 @@
 
   3. Wpisz  r  a potem znak jaki powinien go zast¹piæ.
 
-  4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie bêdzie taka jak druga.
+  4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie bêdzie taka, jak druga.
 
---->  Kjedy ten wiersz bi³ wstókiwany ktoœ wcizn¹³ perê z³ych klawirzy!
---->  Kiedy ten wiersz by³ wstukiwany ktoœ wcisn¹³ parê z³ych klawiszy!
+--->  Kjedy ten wiersz bi³ wstókiwany, ktoœ wcizn¹³ perê z³ych klawirzy!
+--->  Kiedy ten wiersz by³ wstukiwany, ktoœ wcisn¹³ parê z³ych klawiszy!
 
   5. Teraz czas na Lekcjê 3.3.
 
 
-UWAGA: Pamiêtaj by uczyæ siê æwicz¹c, a nie pamiêciowo.
+UWAGA: Pamiêtaj, by uczyæ siê æwicz¹c, a nie pamiêciowo.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		     Lekcja 3.3.: OPERATOR CHANGE (zmieñ)
 
-		 ** By zmieniæ do koñca wyrazu wpisz  ce . **
+		 ** By zmieniæ do koñca wyrazu, wpisz  ce . **
 
   1. Przenieœ kursor do pierwszej linii poni¿ej oznaczonej --->.
 
@@ -428,7 +428,7 @@
 
   4. Wciœnij <ESC> i przejdŸ do nastêpnej planowanej zmiany.
 
-  5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie bêdzie takie same
+  5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie bêdzie takie same,
      jak drugie.
 
 ---> Ta lunos ma pire s³ów, które t¿ina zbnic u¿ifajonc pcmazu zmieñ.
@@ -442,13 +442,13 @@
 		      Lekcja 3.4.: WIÊCEJ ZMIAN U¯YWAJ¥C c
 
 
-	** Polecenie change u¿ywa takich samych ruchów jak delete. **
+	** Polecenie change u¿ywa takich samych ruchów, jak delete. **
 
-  1. Operator change dzia³a tak samo jak delete. Format wygl¹da tak:
+  1. Operator change dzia³a tak samo, jak delete. Format wygl¹da tak:
 
 	    c   [liczba]   ruch
 
-  2. Ruchy s¹ tak¿e takie same, np.:  w  (wyraz),  $  (koniec linii), etc.
+  2. Ruchy s¹ tak¿e takie same, np.:  w  (wyraz),  $  (koniec linii) etc.
 
   3. Przenieœ siê do pierwszej linii poni¿ej oznaczonej --->
 
@@ -456,7 +456,7 @@
 
   5. Wpisz  c$ , popraw koniec wiersza i wciœnij <ESC>.
 
----> Koniec tego wiersza musi byæ poprawiony aby wygl¹da³ tak jak drugi.
+---> Koniec tego wiersza musi byæ poprawiony, aby wygl¹da³ tak, jak drugi.
 ---> Koniec tego wiersza musi byæ poprawiony u¿ywaj¹c polecenia  c$ .
 
 UWAGA:  Mo¿esz u¿ywaæ <BS> aby poprawiaæ b³êdy w czasie pisania.
@@ -469,11 +469,11 @@
      polecenie wstawia skasowany tekst PO kursorze (jeœli ca³a linia
      zosta³a usuniêta, zostanie ona umieszczona w linii poni¿ej kursora).
 
-  2. By zamieniæ znak pod kursorem wciœnij  r  a potem znak, który ma zast¹piæ
+  2. By zamieniæ znak pod kursorem, wciœnij  r  a potem znak, który ma zast¹piæ
      oryginalny.
 
-  3. Operator change pozwala Ci na zast¹pienie od kursora do miejsca gdzie
-     zabra³by ciê ruch. Np. wpisz  ce  aby zamieniæ tekst od kursora do koñca
+  3. Operator change pozwala Ci na zast¹pienie od kursora do miejsca, gdzie
+     zabra³by Ciê ruch. Np. wpisz  ce  aby zamieniæ tekst od kursora do koñca
      wyrazu,  c$  aby zmieniæ tekst do koñca linii.
 
   4. Format do polecenia change (zmieñ):
@@ -497,12 +497,12 @@
      Zapamiêtaj numer linii dla potrzeb kroku 3.
 
 UWAGA: Mo¿esz te¿ zobaczyæ pozycjê kursora w prawym, dolnym rogu ekranu.
-       Dzieje siê tak kiedy ustawiona jest opcja 'ruler' (wyjaœnione w lekcji 6.).
+       Dzieje siê tak kiedy ustawiona jest opcja 'ruler' (wiêcej w lekcji 6.).
 
   2. Wciœnij G aby przejœæ na koniec pliku.
      Wciœnij  gg  aby przejœæ do pocz¹tku pliku.
 
-  3. Wpisz numer linii, w której by³eœ a potem  G . To przeniesie ciê
+  3. Wpisz numer linii, w której by³eœ a potem  G . To przeniesie Ciê
      z powrotem do linii, w której by³eœ kiedy wcisn¹³eœ CTRL-G.
 
   4. Jeœli czujesz siê wystarczaj¹co pewnie, wykonaj kroki 1-3.
@@ -511,10 +511,10 @@
 			 Lekcja 4.2.: POLECENIE SZUKAJ
 
 
-	     ** Wpisz  /  a nastêpnie wyra¿enie aby je znaleŸæ. **
+	     ** Wpisz  /  a nastêpnie wyra¿enie, aby je znaleŸæ. **
 
-  1. W trybie Normal wpisz  / . Zauwa¿, ¿e znak ten, oraz kursor pojawi¹
-     siê na dole ekranu tak samo jak polecenie  : .
+  1. W trybie Normal wpisz  / . Zauwa¿, ¿e znak ten oraz kursor pojawi¹
+     siê na dole ekranu tak samo, jak polecenie  : .
 
   2. Teraz wpisz  b³ond<ENTER> .  To jest s³owo, którego chcesz szukaæ.
 
@@ -523,11 +523,11 @@
 
   4. Jeœli chcesz szukaæ frazy do ty³u, u¿yj polecenia  ?  zamiast  / .
 
-  5. Aby wróciæ gdzie by³eœ wciœnij  CTRL-O. Powtarzaj by wróciæ dalej. CTRL-I
+  5. Aby wróciæ gdzie by³eœ, wciœnij  CTRL-O. Powtarzaj, by wróciæ dalej. CTRL-I
      idzie do przodu.
 
-Uwaga:  'b³ond' to nie jest metoda by przeliterowaæ b³¹d; 'b³ond' to b³¹d.
-Uwaga:  Kiedy szukanie osi¹gnie koniec pliku bêdzie kontynuowa³o od pocz¹tku
+Uwaga:  'b³ond' to nie jest metoda, by przeliterowaæ b³¹d; 'b³ond' to b³¹d.
+Uwaga:  Kiedy szukanie osi¹gnie koniec pliku, bêdzie kontynuowane od pocz¹tku
         o ile opcja 'wrapscan' nie zosta³a przestawiona.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -571,16 +571,16 @@
 
   4. Aby zmieniæ wszystkie wyst¹pienia ³añcucha znaków pomiêdzy dwoma liniami,
      wpisz: :#,#s/stare/nowe/g gdzie #,# s¹ numerami linii ograniczaj¹cych
-                               region gdzie ma nast¹piæ zamiana.
+                               region, gdzie ma nast¹piæ zamiana.
      wpisz  :%s/stare/nowe/g   by zmieniæ wszystkie wyst¹pienia w ca³ym pliku.
      wpisz  :%s/stare/nowe/gc  by zmieniæ wszystkie wyst¹pienia w ca³ym
-                               pliku, prosz¹c o potwierdzenie za ka¿dym razem
+                               pliku, prosz¹c o potwierdzenie za ka¿dym razem.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			     LEKCJA 4. PODSUMOWANIE
 
   1. CTRL-G   poka¿e Twoj¹ pozycjê w pliku i status pliku.  SHIFT-G przenosi
-	      ciê do koñca pliku.
+	      Ciê do koñca pliku.
      G        przenosi do koñca pliku.
      liczba G przenosi do linii [liczba].
      gg       przenosi do pierwszej linii.
@@ -588,22 +588,22 @@
   2. Wpisanie  /  a nastêpnie ³añcucha znaków szuka ³añcucha DO PRZODU.
      Wpisanie  ?  a nastêpnie ³añcucha znaków szuka ³añcucha DO TY£U.
      Po wyszukiwaniu wciœnij  n  by znaleŸæ nastêpne wyst¹pienie szukanej
-     frazy tym samym kierunku lub  N  by szukaæ w kierunku przeciwnym.
+     frazy w tym samym kierunku lub  N  by szukaæ w kierunku przeciwnym.
      CTRL-O przenosi do starszych pozycji, CTRL-I do nowszych.
 
   3. Wpisanie  %  gdy kursor znajduje siê na (,),[,],{, lub } lokalizuje
      paruj¹cy znak.
 
-  4. By zamieniæ pierwszy stary na nowy w linii wpisz      :s/stary/nowy
-     By zamieniæ wszystkie stary na nowy w linii wpisz     :s/stary/nowy/g
+  4. By zamieniæ pierwszy stary na nowy w linii, wpisz      :s/stary/nowy
+     By zamieniæ wszystkie stary na nowy w linii, wpisz     :s/stary/nowy/g
      By zamieniæ frazy pomiêdzy dwoma liniami # wpisz      :#,#s/stary/nowy/g
-     By zamieniæ wszystkie wyst¹pienia w pliku wpisz       :%s/stary/nowy/g
-     By Vim prosi³ Ciê o potwierdzenie dodaj 'c'	   :%s/stary/nowy/gc
+     By zamieniæ wszystkie wyst¹pienia w pliku, wpisz       :%s/stary/nowy/g
+     By Vim prosi³ Ciê o potwierdzenie, dodaj 'c'	   :%s/stary/nowy/gc
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		 Lekcja 5.1.: JAK WYKONAÆ POLECENIA ZEWNÊTRZNE
+		 Lekcja 5.1.: JAK WYKONAÆ POLECENIA ZEWNÊTRZNE?
 
 
-	** Wpisz  :!  a nastêpnie zewnêtrzne polecenie by je wykonaæ. **
+	** Wpisz  :!  a nastêpnie zewnêtrzne polecenie, by je wykonaæ. **
 
   1. Wpisz znajome polecenie  :  by ustawiæ kursor na dole ekranu. To pozwala
      na wprowadzenie komendy linii poleceñ.
@@ -626,20 +626,20 @@
 		    Lekcja 5.2.: WIÊCEJ O ZAPISYWANIU PLIKÓW
 
 
-	   ** By zachowaæ zmiany w tekœci wpisz :w NAZWA_PLIKU . **
+	   ** By zachowaæ zmiany w tekœcie, wpisz :w NAZWA_PLIKU . **
 
   1. Wpisz  :!dir  lub  :!ls  by zobaczyæ spis plików w katalogu.
-     Ju¿ wiesz, ¿e musisz wcisn¹æ <ENTER> po tym.
+     Ju¿ wiesz, ¿e musisz po tym wcisn¹æ <ENTER>.
 
-  2. Wybierz nazwê pliku jaka jeszcze nie istnieje, np. TEST.
+  2. Wybierz nazwê pliku, jaka jeszcze nie istnieje, np. TEST.
 
   3. Teraz wpisz:   :w TEST   (gdzie TEST jest nazw¹ pliku jak¹ wybra³eœ.)
 
   4. To polecenie zapamiêta ca³y plik (Vim Tutor) pod nazw¹ TEST.
-     By to sprawdziæ wpisz  :!dir  lub  :!ls , ¿eby znowu zobaczyæ listê plików.
+     By to sprawdziæ, wpisz  :!dir  lub  :!ls  ¿eby znowu zobaczyæ listê plików.
 
 Uwaga: Zauwa¿, ¿e gdybyœ teraz wyszed³ z Vima, a nastêpnie wszed³ ponownie
-       poleceniem  vim TEST , plik by³by dok³adn¹ kopi¹ tutoriala kiedy go
+       poleceniem  vim TEST , plik by³by dok³adn¹ kopi¹ tutoriala, kiedy go
        zapisywa³eœ.
 
   5. Teraz usuñ plik wpisuj¹c (MS-DOS):		   :!del TEST
@@ -649,7 +649,7 @@
 		    Lekcja 5.3.: WYBRANIE TEKSTU DO ZAPISU
 
 
-	  ** By zachowaæ czêœæ pliku wpisz  v ruch :w NAZWA_PLIKU **
+	  ** By zachowaæ czêœæ pliku, wpisz  v ruch :w NAZWA_PLIKU **
 
   1. Przenieœ kursor do tego wiersza.
 
@@ -664,26 +664,26 @@
   5. Vim zapisze wybrane linie do pliku TEST. U¿yj  :!dir  lub  :!ls , ¿eby to
      zobaczyæ. Jeszcze go nie usuwaj! U¿yjemy go w nastêpnej lekcji.
 
-UWAGA: Wciœniêcie  v  zaczyna tryb Wizualny. Mo¿esz poruszaæ kursorem by
-       zmieniæ rozmiary zaznaczenia. Mo¿esz te¿ u¿yæ operatora by zrobiæ coœ
+UWAGA: Wciœniêcie  v  zaczyna tryb Wizualny. Mo¿esz poruszaæ kursorem, by
+       zmieniæ rozmiary zaznaczenia. Mo¿esz te¿ u¿yæ operatora, by zrobiæ coœ
        z tekstem. Na przyk³ad  d  usuwa tekst.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		   Lekcja 5.4.: WSTAWIANIE I £¥CZENIE PLIKÓW
 
 
-	    ** By wstawiæ zawartoœæ pliku wpisz   :r NAZWA_PLIKU **
+	    ** By wstawiæ zawartoœæ pliku, wpisz   :r NAZWA_PLIKU **
 
   1. Umieœæ kursor tu¿ powy¿ej tej linii.
 
 UWAGA: Po wykonaniu kroku 2. zobaczysz tekst z Lekcji 5.3. Potem przejdŸ
-       do DO£U by zobaczyæ ponownie tê lekcjê.
+       do DO£U, by zobaczyæ ponownie tê lekcjê.
 
   2. Teraz wczytaj plik TEST u¿ywaj¹c polecenia  :r TEST , gdzie TEST
      jest nazw¹ pliku.
      Wczytany plik jest umieszczony poni¿ej linii z kursorem.
 
-  3. By sprawdziæ czy plik zosta³ wczytany cofnij kursor i zobacz, ¿e
+  3. By sprawdziæ czy plik zosta³ wczytany, cofnij kursor i zobacz, ¿e
      teraz s¹ dwie kopie Lekcji 5.3., orygina³ i kopia z pliku.
 
 UWAGA: Mo¿esz te¿ wczytaæ wyjœcie zewnêtrznego polecenia. Na przyk³ad
@@ -723,14 +723,14 @@
 
   1. Przenieœ kursor do linii poni¿ej oznaczonej --->.
 
-  2. Wpisz  o  (ma³e) by otworzyæ liniê PONI¯EJ kursora i przenieœæ siê
+  2. Wpisz  o  (ma³e), by otworzyæ liniê PONI¯EJ kursora i przenieœæ siê
      do trybu Insert (wprowadzanie).
 
   3. Wpisz trochê tekstu i wciœnij <ESC> by wyjœæ z trybu Insert (wprowadzanie).
 
 ---> Po wciœniêciu  o  kursor znajdzie siê w otwartej linii w trybie Insert.
 
-  4. By otworzyæ liniê POWY¯EJ kursora wciœnij wielkie  O  zamiast ma³ego
+  4. By otworzyæ liniê POWY¯EJ kursora, wciœnij wielkie  O  zamiast ma³ego
      o . Wypróbuj to na linii poni¿ej.
 
 ---> Otwórz liniê powy¿ej wciskaj¹c SHIFT-O gdy kursor bêdzie na tej linii.
@@ -747,9 +747,9 @@
 
   2. Wciskaj  e  dopóki kursor nie bêdzie na koñcu li .
 
-  3. Wpisz  a  (ma³e) aby dodaæ tekst ZA znakiem pod kursorem.
+  3. Wpisz  a  (ma³e), aby dodaæ tekst ZA znakiem pod kursorem.
 
-  4. Dokoñcz wyraz tak jak w linii poni¿ej. Wciœnij <ESC> aby opuœciæ tryb
+  4. Dokoñcz wyraz tak, jak w linii poni¿ej. Wciœnij <ESC> aby opuœciæ tryb
      Insert.
 
   5. U¿yj  e  by przejœæ do kolejnego niedokoñczonego wyrazu i powtarzaj kroki
@@ -758,7 +758,7 @@
 ---> Ta li poz Ci æwi dodaw teks do koñ lin
 ---> Ta linia pozwoli Ci æwiczyæ dodawanie tekstu do koñca linii.
 
-Uwaga:  a ,  i  oraz  A  prowadz¹ do trybu Insert, jedyn¹ ró¿nic¹ jest miejsce
+Uwaga:  a ,  i  oraz  A  prowadz¹ do trybu Insert, jedyn¹ ró¿nic¹ jest miejsce,
        gdzie nowe znaki bêd¹ dodawane.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		   Lekcja 6.3.: INNA WERSJA REPLACE (zamiana)
@@ -791,16 +791,16 @@
 
   1. PrzejdŸ do linii oznaczonej ---> i umieœæ kursor za "a)".
 
-  2. WejdŸ w tryb Visual  v  i przenieœ kursor na pocz¹tek "pierwszy".
+  2. WejdŸ w tryb Wizualny  v  i przenieœ kursor na pocz¹tek "pierwszy".
 
-  3. Wciœnij  y  aby yankowaæ (kopiowaæ) podœwietlony tekst.
+  3. Wciœnij  y  aby kopiowaæ (yankowaæ) podœwietlony tekst.
 
   4. Przenieœ kursor do koñca nastêpnej linii:  j$
 
-  5. Wciœnij  p  aby wpakowaæ (paste) tekst.  Dodaj:  a drugi<ESC> .
+  5. Wciœnij  p  aby wkleiæ (wpakowaæ) tekst.  Dodaj:  a drugi<ESC> .
 
-  6. U¿yj trybu Wizualnego aby wybraæ " element.", yankuj go  y , przejdŸ do
-     koñca nastêpnej linii  j$ i upakuj tam tekst z  p .
+  6. U¿yj trybu Wizualnego, aby wybraæ " element.", yankuj go  y , przejdŸ do
+     koñca nastêpnej linii  j$  i upakuj tam tekst z  p .
 
 --->  a) to jest pierwszy element.
       b)
@@ -810,7 +810,7 @@
 			 Lekcja 6.5.: USTAWIANIE OPCJI
 
 
-** Ustawianie opcji tak by szukaj lub substytucja ignorowa³y wielkoœæ liter **
+** Ustawianie opcji tak, by szukaj lub substytucja ignorowa³y wielkoœæ liter **
 
   1. Szukaj 'ignore' wpisuj¹c:    /ignore<ENTER>
      Powtórz szukanie kilka razy naciskaj¹c klawisz  n .
@@ -828,7 +828,7 @@
 
   6. Aby wy³¹czyæ ignorowanie wielkoœci liter:  :set noic
 
-Uwaga: Aby usun¹æ podœwietlanie dopasowañ wpisz:   :nohlsearch
+Uwaga: Aby usun¹æ podœwietlanie dopasowañ, wpisz:   :nohlsearch
 Uwaga: Aby ignorowaæ wielkoœæ liter dla jednego wyszukiwania: /ignore\c<ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			     LEKCJA 6. PODSUMOWANIE
@@ -837,36 +837,36 @@
   1. Wpisanie  o  otwiera liniê PONI¯EJ kursora.
      Wpisanie  O  otwiera liniê POWY¯EJ kursora.
 
-  2. Wpisanie  a  by wstawiæ tekst ZA znakiem na, którym jest kursor.
+  2. Wpisanie  a  wstawia tekst ZA znakiem, na którym jest kursor.
      Wpisanie  A  dodaje tekst na koñcu linii.
 
   3. Polecenie  e  przenosi do koñca wyrazu.
-  4. Operator  y  yankuje (kopiuje) tekst,  p  pakuje (wkleja, paste) go.
+  4. Operator  y  yankuje (kopiuje) tekst,  p  pakuje (wkleja) go.
   5. Wpisanie wielkiego  R  wprowadza w tryb Replace (zamiana) dopóki
      nie zostanie wciœniêty <ESC>.
-  6. Wpisanie ":set xxx" ustawia opcjê "xxx". Nietkóre opcje:
+  6. Wpisanie ":set xxx" ustawia opcjê "xxx". Niektóre opcje:
 	'ic'  'ignorecase'	ignoruj wielkoœæ znaków
 	'is'  'incsearch'	poka¿ czêœciowe dopasowania
 	'hls' 'hlsearch'	podœwietl wszystkie dopasowania
-     Mo¿esz u¿yæ zarówno d³ugiej jak i krótkiej formy.
-  7. Dodaj "no" aby wy³¹czyæ opcjê:   :set noic
+     Mo¿esz u¿yæ zarówno d³ugiej, jak i krótkiej formy.
+  7. Dodaj "no", aby wy³¹czyæ opcjê:   :set noic
 
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			LEKCJA 7.1. JAK UZYSKAÆ POMOC
+			 LEKCJA 7.1. JAK UZYSKAÆ POMOC?
 
 		      ** U¿ycie systemu pomocy on-line **
 
-  Vim posiada bardzo dobry system pomocy on-line. By zacz¹æ spróbuj jednej
+  Vim posiada bardzo dobry system pomocy on-line. By zacz¹æ, spróbuj jednej
   z trzech mo¿liwoœci:
 	- wciœnij klawisz <HELP> (jeœli taki masz)
 	- wciœnij klawisz <F1> (jeœli taki masz)
 	- wpisz   :help<ENTER>
 
-  Przeczytaj tekst w oknie pomocy  aby dowiedzieæ siê jak dzia³a pomoc.
+  Przeczytaj tekst w oknie pomocy, aby dowiedzieæ siê jak dzia³a pomoc.
   wpisz CTRL-W CTRL-W    aby przeskoczyæ z jednego okna do innego
   wpisz :q<ENTER>        aby zamkn¹æ okno pomocy.
 
@@ -894,10 +894,10 @@
   3. Zapisz plik:
      :w
 
-  Nastêpnym razem gdy zaczniesz pracê w Vimie bêdzie on u¿ywaæ podœwietlania
+  Nastêpnym razem, gdy zaczniesz pracê w Vimie bêdzie on u¿ywaæ podœwietlania
   sk³adni. Mo¿esz dodaæ wszystkie swoje ulubione ustawienia do tego pliku
   "vimrc".
-  Aby uzyskaæ wiêcej informacji wpisz     :help vimrc-intro
+  Aby uzyskaæ wiêcej informacji, wpisz     :help vimrc-intro
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			  Lekcja 7.3.: UZUPE£NIANIE
@@ -907,11 +907,11 @@
 
   1. Upewnij siê, ¿e Vim nie jest w trybie kompatybilnoœci:   :set nocp
 
-  2. Zerknij jakie pliki s¹ w bie¿¹cm katalogu:   :!ls   lub   :!dir
+  2. Zerknij, jakie pliki s¹ w bie¿¹cym katalogu:   :!ls   lub   :!dir
 
   3. Wpisz pocz¹tek polecenia:   :e
 
-  4. Wciœnij  CTRL-D  i Vim poka¿e listê poleceñ jakie zaczynaj¹ siê na "e".
+  4. Wciœnij  CTRL-D  i Vim poka¿e listê poleceñ, jakie zaczynaj¹ siê na "e".
 
   5. Wciœnij  <TAB>  i Vim uzupe³ni polecenie do ":edit".
 
@@ -925,7 +925,7 @@
 			    Lekcja 7. PODSUMOWANIE
 
 
-  1. Wpisz  :help  lub wciœnij <F1> lub <Help> aby otworzyæ okno pomocy.
+  1. Wpisz  :help  albo wciœnij <F1> lub <Help> aby otworzyæ okno pomocy.
 
   2. Wpisz  :help cmd  aby uzyskaæ pomoc o  cmd .
 
@@ -945,14 +945,14 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-  Tutaj siê koñczy tutorial Vima. Zosta³ on pomyœlany tak aby daæ krótki
+  Tutaj siê koñczy tutorial Vima. Zosta³ on pomyœlany tak, aby daæ krótki
   przegl¹d jego mo¿liwoœci, wystarczaj¹cy byœ móg³ go u¿ywaæ. Jest on
-  daleki od kompletnoœci poniewa¿ Vim ma o wiele, wiele wiêcej poleceñ.
+  daleki od kompletnoœci, poniewa¿ Vim ma o wiele, wiele wiêcej poleceñ.
 
   Dla dalszej nauki rekomendujemy ksi¹¿kê:
 	Vim - Vi Improved - autor Steve Oualline
 	Wydawca: New Riders
-  Pierwsza ksi¹zka ca³kowicie poœwiêcona Vimowi. U¿yteczna zw³aszcza dla
+  Pierwsza ksi¹¿ka ca³kowicie poœwiêcona Vimowi. U¿yteczna zw³aszcza dla
   pocz¹tkuj¹cych. Zawiera wiele przyk³adów i ilustracji.
   Zobacz http://iccf-holland.org./click5.html
 
@@ -960,7 +960,7 @@
   polecenia:
 	Learning the Vi Editor - autor Linda Lamb
 	Wydawca: O'Reilly & Associates Inc.
-  To dobra ksi¹¿ka by dowiedzieæ siê niemal wszystkiego co chcia³byœ zrobiæ
+  To dobra ksi¹¿ka, by dowiedzieæ siê niemal wszystkiego, co chcia³byœ zrobiæ
   z Vi. Szósta edycja zawiera te¿ informacje o Vimie.
 
   Po polsku wydano:
@@ -991,4 +991,5 @@
   rev. Marzec 2002
   2nd rev. Wrzesieñ 2004
   3rd rev. Marzec 2006
+  4th rev. Grudzieñ 2008
   Wszelkie uwagi proszê kierowaæ na: mikmach@wp.pl
diff --git a/runtime/tutor/tutor.pl.utf-8 b/runtime/tutor/tutor.pl.utf-8
index 88f95d1..3faaaa8 100644
--- a/runtime/tutor/tutor.pl.utf-8
+++ b/runtime/tutor/tutor.pl.utf-8
@@ -2,9 +2,9 @@
 =    W i t a j   w   t u t o r i a l u   V I M - a      -    Wersja  1.7.     =
 ===============================================================================
 
-     Vim to potężny edytor, który posiada wiele poleceń, zbyt dużo by
+     Vim to potężny edytor, który posiada wiele poleceń, zbyt dużo, by
      wyjaśnić je wszystkie w tym tutorialu. Ten przewodnik ma nauczyć
-     Cię posługiwać się wystarczająco wieloma komendami byś mógł łatwo
+     Cię posługiwać się wystarczająco wieloma komendami, byś mógł łatwo
      używać Vima jako edytora ogólnego przeznaczenia.
 
      Czas potrzebny na ukończenie tutoriala to 25 do 30 minut i zależy
@@ -13,14 +13,14 @@
 	 UWAGA:
 	 Polecenia wykonywane w czasie lekcji zmodyfikują tekst. Zrób
 	 wcześniej kopię tego pliku do ćwiczeń (jeśli zacząłeś komendą
-	 "vimtutor" to już pracujesz na kopii).
+	 "vimtutor", to już pracujesz na kopii).
 
-	 Pamiętaj że przewodnik ten został zaprojektowany do nauki poprzez
-	 ćwiczenia. Oznacza to, że musisz wykonywać polecenia by nauczyć się ich
-	 prawidłowo. Jeśli będziesz jedynie czytał tekst szybko zapomnisz wiele
+	 Pamiętaj, że przewodnik ten został zaprojektowany do nauki poprzez
+	 ćwiczenia. Oznacza to, że musisz wykonywać polecenia, by nauczyć się ich
+	 prawidłowo. Jeśli będziesz jedynie czytał tekst, szybko zapomnisz wiele
 	 poleceń!
 
-     Teraz upewnij się, że nie masz wciśniętego CapsLocka i wciskaj  j
+     Teraz upewnij się, że nie masz wciśniętego Caps Locka i wciskaj  j
      tak długo dopóki Lekcja 1.1. nie wypełni całkowicie ekranu.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -40,28 +40,28 @@
 
   3. Używając strzałki w dół przejdź do następnej lekcji.
 
-Uwaga: Jeśli nie jesteś pewien czegoś co wpisałeś, wciśnij <ESC> by wrócić do
+Uwaga: Jeśli nie jesteś pewien czegoś co wpisałeś, wciśnij <ESC>, by wrócić do
        trybu Normal. Wtedy powtórz polecenie.
 
 Uwaga: Klawisze kursora także powinny działać, ale używając  hjkl  będziesz
-       w stanie poruszać się o wiele szybciej jak się tylko przyzwyczaisz.
+       w stanie poruszać się o wiele szybciej, jak się tylko przyzwyczaisz.
        Naprawdę!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		    Lekcja 1.2.: WYCHODZENIE Z VIM-a
 
- !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj całą lekcję.!!
+ !! UWAGA: Przed wykonaniem jakiegokolwiek polecenia przeczytaj całą lekcję !!
 
   1. Wciśnij <ESC> (aby upewnić się, że jesteś w trybie Normal).
   2. Wpisz:			:q!<ENTER>.
-     To spowoduje wyjście z edytora PORZUCAJĄC wszelkie zmiany jakie
-     zdążyłeś zrobić. Jeśli chcesz zapamiętać zmiany i wyjść
+     To spowoduje wyjście z edytora PORZUCAJĄC wszelkie zmiany, jakie
+     zdążyłeś zrobić. Jeśli chcesz zapamiętać zmiany i wyjść,
      wpisz:			:wq<ENTER>
 
   3. Kiedy widzisz znak zachęty powłoki wpisz komendę, żeby wrócić
      do tutoriala. Czyli:	vimtutor<ENTER>
 
-  4. Jeśli chcesz zapamiętać polecenia, wykonaj kroki 1. do 3. aby
+  4. Jeśli chcesz zapamiętać polecenia, wykonaj kroki 1. do 3., aby
      wyjść i wrócić do edytora.
 
 UWAGA: :q!<ENTER> porzuca wszelkie zmiany jakie zrobiłeś. W następnych
@@ -85,7 +85,7 @@
 
 ---> Kkrowa prrzeskoczyła prrzez ksiiężycc.
 
-  5. Teraz kiedy zdanie jest poprawione przejdź do Lekcji 1.4.
+  5. Teraz, kiedy zdanie jest poprawione, przejdź do Lekcji 1.4.
 
 UWAGA: Ucz się przez ćwiczenie, nie wkuwanie.
 
@@ -101,18 +101,18 @@
 
   1. Przenieś kursor do pierwszej linii poniżej oznaczonej --->.
 
-  2. Aby poprawić pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym
+  2. Aby poprawić pierwszy wiersz, ustaw kursor na pierwszym znaku PO tym,
      gdzie tekst ma być wstawiony.
 
   3. Wciśnij  i  a następnie wpisz konieczne poprawki.
 
-  4. Po poprawieniu błędu wciśnij <ESC> by wrócić do trybu Normal.
-     Powtarzaj kroki 2. do 4. aby poprawić całe zdanie.
+  4. Po poprawieniu błędu wciśnij <ESC>, by wrócić do trybu Normal.
+     Powtarzaj kroki 2. do 4., aby poprawić całe zdanie.
 
 ---> W tej brkje trochę .
 ---> W tej linii brakuje trochę tekstu.
 
-  5. Kiedy czujesz się swobodnie wstawiając tekst przejdź do
+  5. Kiedy czujesz się swobodnie wstawiając tekst, przejdź do
      podsumowania poniżej.
 
 
@@ -129,7 +129,7 @@
 
   3. Kiedy tekst został dodany, wciśnij <ESC> i wróć do trybu Normalnego.
 
-  4. Przenieś kursor do drugiej linii oznaczonej ---> i powtórz kroki 2 i 3
+  4. Przenieś kursor do drugiej linii oznaczonej ---> i powtórz kroki 2. i 3.,
      aby poprawić zdanie.
 
 ---> Brakuje tu tro
@@ -137,27 +137,27 @@
 ---> Tu też trochę bra
      Tu też trochę brakuje.
 
-  5. Kiedy już utrwaliłeś ćwiczenie przejdź do lekcji 1.6.
+  5. Kiedy już utrwaliłeś ćwiczenie, przejdź do lekcji 1.6.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			  Lekcja 1.6.: EDYCJA PLIKU
 
 		  ** Użyj  :wq  aby zapisać plik i wyjść. **
 
-   !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczyaj całą lekcję !!
+   !! UWAGA: zanim wykonasz jakiekolwiek polecenia przeczytaj całą lekcję !!
 
   1. Zakończ tutorial tak jak w lekcji 1.2.:  :q!
-     Lub jeśli masz dostęp do innego terminala zrób kolejne kroki tam.
+     lub, jeśli masz dostęp do innego terminala, wykonaj kolejne kroki tam.
 
   2. W powłoce wydaj polecenie:  vim tutor<ENTER>
-     "vim" jest poleceniem uruchamiającym edytor Vim. 'tutor' to nazwa pliku
-     jaki chcesz edytować. Użyj pliku jaki może zostać zmieniony.
+     "vim" jest poleceniem uruchamiającym edytor Vim. 'tutor' to nazwa pliku,
+     jaki chcesz edytować. Użyj pliku, który może zostać zmieniony.
 
-  3. Dodaj i usuń tekst tak jak się nauczyłeś w poprzednich lekcjach.
+  3. Dodaj i usuń tekst tak, jak się nauczyłeś w poprzednich lekcjach.
 
   4. Zapisz plik ze zmianami i opuść Vima:  :wq<ENTER>
 
-  5. Jeśli zakończyłeś vimtutor w kroku 1. uruchom go ponownie i przejdź
+  5. Jeśli zakończyłeś vimtutor w kroku 1., uruchom go ponownie i przejdź
      do podsumowania poniżej.
 
   6. Po przeczytaniu wszystkich kroków i ich zrozumieniu: wykonaj je.
@@ -168,14 +168,14 @@
   1. Poruszasz kursorem używając "strzałek" i klawiszy  hjkl .
        h (w lewo)	 j (w dół)	 k (do góry)		l (w prawo)
 
-  2. By wejść do Vima (z powłoki) wpisz:
+  2. By wejść do Vima, (z powłoki) wpisz:
 			    vim NAZWA_PLIKU<ENTER>
 
-  3. By wyjść z Vima wpisz:
-			    <ESC> :q!<ENTER>  by usunąc wszystkie zmiany.
+  3. By wyjść z Vima, wpisz:
+			    <ESC> :q!<ENTER>  by usunąć wszystkie zmiany.
 	     LUB:	    <ESC> :wq<ENTER>  by zmiany zachować.
 
-  4. By usunąć znak pod kursorem wciśnij:  x
+  4. By usunąć znak pod kursorem, wciśnij:  x
 
   5. By wstawić tekst przed kursorem lub dodać:
 	i   wpisz tekst   <ESC>         wstawi przed kursorem
@@ -189,18 +189,18 @@
 		  Lekcja 2.1.: POLECENIE DELETE (usuwanie)
 
 
-		      ** Wpisz  dw  by usunąc wyraz. **
+		      ** Wpisz  dw  by usunąć wyraz. **
 
-  1. Wciśnij  <ESC>  by upewnić się, że jesteś w trybie Normal.
+  1. Wciśnij  <ESC>, by upewnić się, że jesteś w trybie Normal.
 
   2. Przenieś kursor do linii poniżej oznaczonej --->.
 
-  3. Przesuń kursor na początek wyrazu, które chcesz usunąć.
+  3. Przesuń kursor na początek wyrazu, który chcesz usunąć.
 
   4. Wpisz   dw   by usunąć wyraz.
 
   UWAGA: Litera  d  pojawi się na dole ekranu. Vim czeka na wpisanie  w .
-	 Jeśli zobaczysz inny znak oznacza to, że wpisałeś coś źle, wciśnij
+	 Jeśli zobaczysz inny znak, oznacza to, że wpisałeś coś źle; wciśnij
 	 <ESC> i zacznij od początku.
 
 ---> Jest tu parę papier wyrazów, które kamień nie należą do nożyce tego zdania.
@@ -225,7 +225,7 @@
 ---> Ktoś wpisał koniec tego zdania dwukrotnie. zdania dwukrotnie.
 
 
-  5. Przejdź do Lekcji 2.3. by zrozumieć co się stało.
+  5. Przejdź do Lekcji 2.3., by zrozumieć co się stało.
 
 
 
@@ -235,12 +235,12 @@
 		     Lekcja 2.3.: O OPERATORACH I RUCHACH
 
 
-  Wiele poleceń zmieniających tekst są złożone z operatora i ruchu.
-  Format dla polecenia usuwającego z operatorem  d  jest taki:
+  Wiele poleceń zmieniających tekst jest złożonych z operatora i ruchu.
+  Format dla polecenia usuwającego z operatorem  d  jest następujący:
 
 	    d  ruch
 
-  Gdzie:
+  gdzie:
    d      - operator usuwania.
    ruch   - na czym polecenie będzie wykonywane (lista poniżej).
 
@@ -252,7 +252,7 @@
 W ten sposób wpisanie  de  usunie znaki od kursora do końca wyrazu.
 
 UWAGA: Wpisanie tylko ruchu w trybie Normal bez operatora przeniesie kursor
-       tak jak to określono.
+       tak, jak to określono.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		    Lekcja 2.4.: UŻYCIE MNOŻNIKA DLA RUCHU
@@ -266,32 +266,32 @@
 
   3. Wpisz  3e  aby przenieść kursor do końca trzeciego wyrazu w przód.
 
-  4. Wpisz  0  (zero) aby przenieść kursor do początku linii.
+  4. Wpisz  0  (zero), aby przenieść kursor na początek linii.
 
   5. Powtórz kroki 2. i 3. z innymi liczbami.
 
 
- ---> To jest zwykły wiersz z wyrazami po których możesz się poruszać.
+ ---> To jest zwykły wiersz z wyrazami, po których możesz się poruszać.
 
   6. Przejdź do lekcji 2.5.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lekcja 2.5.: UŻYCIE MNOŻNIKA BY WIĘCEJ USUNĄĆ
+		Lekcja 2.5.: UŻYCIE MNOŻNIKA, BY WIĘCEJ USUNĄĆ
 
 
     ** Wpisanie liczby z operatorem powtarza go odpowiednią ilość razy. **
 
   W wyżej wspomnianej kombinacji operatora usuwania i ruchu podaj mnożnik
-  przed ruchem by więcej usunąć:
+  przed ruchem, by więcej usunąć:
 	d  liczba  ruch
 
   1. Przenieś kursor do pierwszego wyrazu KAPITALIKAMI w linii zaznaczonej --->.
 
   2. Wpisz  2dw  aby usunąć dwa wyrazy KAPITALIKAMI.
 
-  3. Powtarzaj kroki 1. i 2. z innymi mnożnikami aby usunąć kolejne wyrazy
+  3. Powtarzaj kroki 1. i 2. z innymi mnożnikami, aby usunąć kolejne wyrazy
      KAPITALIKAMI jednym poleceniem
 
 ---> ta ASD WE linia QWE ASDF ZXCV FG wyrazów została ERT FGH CF oczyszczona.
@@ -312,7 +312,7 @@
   1. Przenieś kursor do drugiego zdania z wierszyka poniżej.
   2. Wpisz  dd  aby usunąć wiersz.
   3. Teraz przenieś się do czwartego wiersza.
-  4. Wpisz  2dd  aby usunąc dwa wiersze.
+  4. Wpisz  2dd  aby usunąć dwa wiersze.
 
 --->  1)  Róże są czerwone,
 --->  2)  Błoto jest fajne,
@@ -335,12 +335,12 @@
   2. Wpisz  x  aby usunąć pierwszy niechciany znak.
   3. Teraz wciśnij  u  aby cofnąć skutki ostatniego polecenia.
   4. Tym razem popraw wszystkie błędy w linii używając polecenia  x .
-  5. Teraz wciśnij wielkie U aby przywrócić linię do oryginalnego stanu.
-  6. Teraz wciśnij  u  kilka razy by cofnąć  U  i poprzednie polecenia.
+  5. Teraz wciśnij wielkie  U  aby przywrócić linię do oryginalnego stanu.
+  6. Teraz wciśnij  u  kilka razy, by cofnąć  U  i poprzednie polecenia.
   7. Teraz wpisz CTRL-R (trzymaj równocześnie wciśnięte klawisze CTRL i R)
      kilka razy, by cofnąć cofnięcia.
 
----> Poopraw blędyyy w teej liniii i zaamiień je prrzez coofnij.
+---> Poopraw błędyyy w teej liniii i zaamiień je prrzez coofnij.
 
   8. To są bardzo pożyteczne polecenia.
 
@@ -350,22 +350,22 @@
 			     LEKCJA 2. PODSUMOWANIE
 
 
-  1. By usunąć znaki od kursora do następnego wyrazu wpisz:   dw
-  2. By usunąć znaki od kursora do końca linii wpisz:    d$
+  1. By usunąć znaki od kursora do następnego wyrazu, wpisz:   dw
+  2. By usunąć znaki od kursora do końca linii, wpisz:    d$
   3. By usunąć całą linię:    dd
-  4. By powtórzyć ruch poprzedź go liczbą:    2w
+  4. By powtórzyć ruch, poprzedź go liczbą:    2w
   5. Format polecenia zmiany to:
                 operator  [liczba]  ruch
   gdzie:
-   operator  - to co trzeba zrobić (np.  d  dla usuwania)
+   operator  - to, co trzeba zrobić (np.  d  dla usuwania)
    [liczba]  - opcjonalne, ile razy powtórzyć ruch
    ruch      - przenosi nad tekstem do operowania, takim jak  w (wyraz),
-	       $  (do końca linii), etc.
+	       $  (do końca linii) etc.
 
-  6. By przejść do początku linii użyj zera:  0
-  7. By cofnąć poprzednie polecenie, wpisz:	  u (małe u)
-     By cofnąć wszystkie zmiany w linii wpisz:	  U (wielkie U)
-     By cofnąć cofnięcia wpisz:			  CTRL-R
+  6. By przejść do początku linii, użyj zera:  0
+  7. By cofnąć poprzednie polecenie, wpisz:	  u  (małe u)
+     By cofnąć wszystkie zmiany w linii, wpisz:	  U  (wielkie U)
+     By cofnąć cofnięcie, wpisz:			  CTRL-R
 
 
 
@@ -379,7 +379,7 @@
 
   2. Wpisz  dd  aby usunąć linię i przechować ją w rejestrze Vima.
 
-  3. Przenieś kursor do linii c), POWYŻEJ tej gdzie usunięta linia powinna
+  3. Przenieś kursor do linii c), POWYŻEJ tej, gdzie usunięta linia powinna
      się znajdować.
 
   4. Wciśnij  p  by wstawić linię poniżej kursora.
@@ -404,21 +404,21 @@
 
   3. Wpisz  r  a potem znak jaki powinien go zastąpić.
 
-  4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie będzie taka jak druga.
+  4. Powtarzaj kroki 2. i 3. dopóki pierwsza linia nie będzie taka, jak druga.
 
---->  Kjedy ten wiersz bił wstókiwany ktoś wciznął perę złych klawirzy!
---->  Kiedy ten wiersz był wstukiwany ktoś wcisnął parę złych klawiszy!
+--->  Kjedy ten wiersz bił wstókiwany, ktoś wciznął perę złych klawirzy!
+--->  Kiedy ten wiersz był wstukiwany, ktoś wcisnął parę złych klawiszy!
 
   5. Teraz czas na Lekcję 3.3.
 
 
-UWAGA: Pamiętaj by uczyć się ćwicząc, a nie pamięciowo.
+UWAGA: Pamiętaj, by uczyć się ćwicząc, a nie pamięciowo.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		     Lekcja 3.3.: OPERATOR CHANGE (zmień)
 
-		 ** By zmienić do końca wyrazu wpisz  ce . **
+		 ** By zmienić do końca wyrazu, wpisz  ce . **
 
   1. Przenieś kursor do pierwszej linii poniżej oznaczonej --->.
 
@@ -428,7 +428,7 @@
 
   4. Wciśnij <ESC> i przejdź do następnej planowanej zmiany.
 
-  5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie będzie takie same
+  5. Powtarzaj kroki 3. i 4. dopóki pierwsze zdanie nie będzie takie same,
      jak drugie.
 
 ---> Ta lunos ma pire słów, które tżina zbnic użifajonc pcmazu zmień.
@@ -442,13 +442,13 @@
 		      Lekcja 3.4.: WIĘCEJ ZMIAN UŻYWAJĄC c
 
 
-	** Polecenie change używa takich samych ruchów jak delete. **
+	** Polecenie change używa takich samych ruchów, jak delete. **
 
-  1. Operator change działa tak samo jak delete. Format wygląda tak:
+  1. Operator change działa tak samo, jak delete. Format wygląda tak:
 
 	    c   [liczba]   ruch
 
-  2. Ruchy są także takie same, np.:  w  (wyraz),  $  (koniec linii), etc.
+  2. Ruchy są także takie same, np.:  w  (wyraz),  $  (koniec linii) etc.
 
   3. Przenieś się do pierwszej linii poniżej oznaczonej --->
 
@@ -456,7 +456,7 @@
 
   5. Wpisz  c$ , popraw koniec wiersza i wciśnij <ESC>.
 
----> Koniec tego wiersza musi być poprawiony aby wyglądał tak jak drugi.
+---> Koniec tego wiersza musi być poprawiony, aby wyglądał tak, jak drugi.
 ---> Koniec tego wiersza musi być poprawiony używając polecenia  c$ .
 
 UWAGA:  Możesz używać <BS> aby poprawiać błędy w czasie pisania.
@@ -469,11 +469,11 @@
      polecenie wstawia skasowany tekst PO kursorze (jeśli cała linia
      została usunięta, zostanie ona umieszczona w linii poniżej kursora).
 
-  2. By zamienić znak pod kursorem wciśnij  r  a potem znak, który ma zastąpić
+  2. By zamienić znak pod kursorem, wciśnij  r  a potem znak, który ma zastąpić
      oryginalny.
 
-  3. Operator change pozwala Ci na zastąpienie od kursora do miejsca gdzie
-     zabrałby cię ruch. Np. wpisz  ce  aby zamienić tekst od kursora do końca
+  3. Operator change pozwala Ci na zastąpienie od kursora do miejsca, gdzie
+     zabrałby Cię ruch. Np. wpisz  ce  aby zamienić tekst od kursora do końca
      wyrazu,  c$  aby zmienić tekst do końca linii.
 
   4. Format do polecenia change (zmień):
@@ -497,12 +497,12 @@
      Zapamiętaj numer linii dla potrzeb kroku 3.
 
 UWAGA: Możesz też zobaczyć pozycję kursora w prawym, dolnym rogu ekranu.
-       Dzieje się tak kiedy ustawiona jest opcja 'ruler' (wyjaśnione w lekcji 6.).
+       Dzieje się tak kiedy ustawiona jest opcja 'ruler' (więcej w lekcji 6.).
 
   2. Wciśnij G aby przejść na koniec pliku.
      Wciśnij  gg  aby przejść do początku pliku.
 
-  3. Wpisz numer linii, w której byłeś a potem  G . To przeniesie cię
+  3. Wpisz numer linii, w której byłeś a potem  G . To przeniesie Cię
      z powrotem do linii, w której byłeś kiedy wcisnąłeś CTRL-G.
 
   4. Jeśli czujesz się wystarczająco pewnie, wykonaj kroki 1-3.
@@ -511,10 +511,10 @@
 			 Lekcja 4.2.: POLECENIE SZUKAJ
 
 
-	     ** Wpisz  /  a następnie wyrażenie aby je znaleźć. **
+	     ** Wpisz  /  a następnie wyrażenie, aby je znaleźć. **
 
-  1. W trybie Normal wpisz  / . Zauważ, że znak ten, oraz kursor pojawią
-     się na dole ekranu tak samo jak polecenie  : .
+  1. W trybie Normal wpisz  / . Zauważ, że znak ten oraz kursor pojawią
+     się na dole ekranu tak samo, jak polecenie  : .
 
   2. Teraz wpisz  błond<ENTER> .  To jest słowo, którego chcesz szukać.
 
@@ -523,11 +523,11 @@
 
   4. Jeśli chcesz szukać frazy do tyłu, użyj polecenia  ?  zamiast  / .
 
-  5. Aby wrócić gdzie byłeś wciśnij  CTRL-O. Powtarzaj by wrócić dalej. CTRL-I
+  5. Aby wrócić gdzie byłeś, wciśnij  CTRL-O. Powtarzaj, by wrócić dalej. CTRL-I
      idzie do przodu.
 
-Uwaga:  'błond' to nie jest metoda by przeliterować błąd; 'błond' to błąd.
-Uwaga:  Kiedy szukanie osiągnie koniec pliku będzie kontynuowało od początku
+Uwaga:  'błond' to nie jest metoda, by przeliterować błąd; 'błond' to błąd.
+Uwaga:  Kiedy szukanie osiągnie koniec pliku, będzie kontynuowane od początku
         o ile opcja 'wrapscan' nie została przestawiona.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -571,16 +571,16 @@
 
   4. Aby zmienić wszystkie wystąpienia łańcucha znaków pomiędzy dwoma liniami,
      wpisz: :#,#s/stare/nowe/g gdzie #,# są numerami linii ograniczających
-                               region gdzie ma nastąpić zamiana.
+                               region, gdzie ma nastąpić zamiana.
      wpisz  :%s/stare/nowe/g   by zmienić wszystkie wystąpienia w całym pliku.
      wpisz  :%s/stare/nowe/gc  by zmienić wszystkie wystąpienia w całym
-                               pliku, prosząc o potwierdzenie za każdym razem
+                               pliku, prosząc o potwierdzenie za każdym razem.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			     LEKCJA 4. PODSUMOWANIE
 
   1. CTRL-G   pokaże Twoją pozycję w pliku i status pliku.  SHIFT-G przenosi
-	      cię do końca pliku.
+	      Cię do końca pliku.
      G        przenosi do końca pliku.
      liczba G przenosi do linii [liczba].
      gg       przenosi do pierwszej linii.
@@ -588,22 +588,22 @@
   2. Wpisanie  /  a następnie łańcucha znaków szuka łańcucha DO PRZODU.
      Wpisanie  ?  a następnie łańcucha znaków szuka łańcucha DO TYŁU.
      Po wyszukiwaniu wciśnij  n  by znaleźć następne wystąpienie szukanej
-     frazy tym samym kierunku lub  N  by szukać w kierunku przeciwnym.
+     frazy w tym samym kierunku lub  N  by szukać w kierunku przeciwnym.
      CTRL-O przenosi do starszych pozycji, CTRL-I do nowszych.
 
   3. Wpisanie  %  gdy kursor znajduje się na (,),[,],{, lub } lokalizuje
      parujący znak.
 
-  4. By zamienić pierwszy stary na nowy w linii wpisz      :s/stary/nowy
-     By zamienić wszystkie stary na nowy w linii wpisz     :s/stary/nowy/g
+  4. By zamienić pierwszy stary na nowy w linii, wpisz      :s/stary/nowy
+     By zamienić wszystkie stary na nowy w linii, wpisz     :s/stary/nowy/g
      By zamienić frazy pomiędzy dwoma liniami # wpisz      :#,#s/stary/nowy/g
-     By zamienić wszystkie wystąpienia w pliku wpisz       :%s/stary/nowy/g
-     By Vim prosił Cię o potwierdzenie dodaj 'c'	   :%s/stary/nowy/gc
+     By zamienić wszystkie wystąpienia w pliku, wpisz       :%s/stary/nowy/g
+     By Vim prosił Cię o potwierdzenie, dodaj 'c'	   :%s/stary/nowy/gc
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		 Lekcja 5.1.: JAK WYKONAĆ POLECENIA ZEWNĘTRZNE
+		 Lekcja 5.1.: JAK WYKONAĆ POLECENIA ZEWNĘTRZNE?
 
 
-	** Wpisz  :!  a następnie zewnętrzne polecenie by je wykonać. **
+	** Wpisz  :!  a następnie zewnętrzne polecenie, by je wykonać. **
 
   1. Wpisz znajome polecenie  :  by ustawić kursor na dole ekranu. To pozwala
      na wprowadzenie komendy linii poleceń.
@@ -626,20 +626,20 @@
 		    Lekcja 5.2.: WIĘCEJ O ZAPISYWANIU PLIKÓW
 
 
-	   ** By zachować zmiany w tekści wpisz :w NAZWA_PLIKU . **
+	   ** By zachować zmiany w tekście, wpisz :w NAZWA_PLIKU . **
 
   1. Wpisz  :!dir  lub  :!ls  by zobaczyć spis plików w katalogu.
-     Już wiesz, że musisz wcisnąć <ENTER> po tym.
+     Już wiesz, że musisz po tym wcisnąć <ENTER>.
 
-  2. Wybierz nazwę pliku jaka jeszcze nie istnieje, np. TEST.
+  2. Wybierz nazwę pliku, jaka jeszcze nie istnieje, np. TEST.
 
   3. Teraz wpisz:   :w TEST   (gdzie TEST jest nazwą pliku jaką wybrałeś.)
 
   4. To polecenie zapamięta cały plik (Vim Tutor) pod nazwą TEST.
-     By to sprawdzić wpisz  :!dir  lub  :!ls , żeby znowu zobaczyć listę plików.
+     By to sprawdzić, wpisz  :!dir  lub  :!ls  żeby znowu zobaczyć listę plików.
 
 Uwaga: Zauważ, że gdybyś teraz wyszedł z Vima, a następnie wszedł ponownie
-       poleceniem  vim TEST , plik byłby dokładną kopią tutoriala kiedy go
+       poleceniem  vim TEST , plik byłby dokładną kopią tutoriala, kiedy go
        zapisywałeś.
 
   5. Teraz usuń plik wpisując (MS-DOS):		   :!del TEST
@@ -649,7 +649,7 @@
 		    Lekcja 5.3.: WYBRANIE TEKSTU DO ZAPISU
 
 
-	  ** By zachować część pliku wpisz  v ruch :w NAZWA_PLIKU **
+	  ** By zachować część pliku, wpisz  v ruch :w NAZWA_PLIKU **
 
   1. Przenieś kursor do tego wiersza.
 
@@ -664,26 +664,26 @@
   5. Vim zapisze wybrane linie do pliku TEST. Użyj  :!dir  lub  :!ls , żeby to
      zobaczyć. Jeszcze go nie usuwaj! Użyjemy go w następnej lekcji.
 
-UWAGA: Wciśnięcie  v  zaczyna tryb Wizualny. Możesz poruszać kursorem by
-       zmienić rozmiary zaznaczenia. Możesz też użyć operatora by zrobić coś
+UWAGA: Wciśnięcie  v  zaczyna tryb Wizualny. Możesz poruszać kursorem, by
+       zmienić rozmiary zaznaczenia. Możesz też użyć operatora, by zrobić coś
        z tekstem. Na przykład  d  usuwa tekst.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		   Lekcja 5.4.: WSTAWIANIE I ŁĄCZENIE PLIKÓW
 
 
-	    ** By wstawić zawartość pliku wpisz   :r NAZWA_PLIKU **
+	    ** By wstawić zawartość pliku, wpisz   :r NAZWA_PLIKU **
 
   1. Umieść kursor tuż powyżej tej linii.
 
 UWAGA: Po wykonaniu kroku 2. zobaczysz tekst z Lekcji 5.3. Potem przejdź
-       do DOŁU by zobaczyć ponownie tę lekcję.
+       do DOŁU, by zobaczyć ponownie tę lekcję.
 
   2. Teraz wczytaj plik TEST używając polecenia  :r TEST , gdzie TEST
      jest nazwą pliku.
      Wczytany plik jest umieszczony poniżej linii z kursorem.
 
-  3. By sprawdzić czy plik został wczytany cofnij kursor i zobacz, że
+  3. By sprawdzić czy plik został wczytany, cofnij kursor i zobacz, że
      teraz są dwie kopie Lekcji 5.3., oryginał i kopia z pliku.
 
 UWAGA: Możesz też wczytać wyjście zewnętrznego polecenia. Na przykład
@@ -723,14 +723,14 @@
 
   1. Przenieś kursor do linii poniżej oznaczonej --->.
 
-  2. Wpisz  o  (małe) by otworzyć linię PONIŻEJ kursora i przenieść się
+  2. Wpisz  o  (małe), by otworzyć linię PONIŻEJ kursora i przenieść się
      do trybu Insert (wprowadzanie).
 
   3. Wpisz trochę tekstu i wciśnij <ESC> by wyjść z trybu Insert (wprowadzanie).
 
 ---> Po wciśnięciu  o  kursor znajdzie się w otwartej linii w trybie Insert.
 
-  4. By otworzyć linię POWYŻEJ kursora wciśnij wielkie  O  zamiast małego
+  4. By otworzyć linię POWYŻEJ kursora, wciśnij wielkie  O  zamiast małego
      o . Wypróbuj to na linii poniżej.
 
 ---> Otwórz linię powyżej wciskając SHIFT-O gdy kursor będzie na tej linii.
@@ -747,9 +747,9 @@
 
   2. Wciskaj  e  dopóki kursor nie będzie na końcu li .
 
-  3. Wpisz  a  (małe) aby dodać tekst ZA znakiem pod kursorem.
+  3. Wpisz  a  (małe), aby dodać tekst ZA znakiem pod kursorem.
 
-  4. Dokończ wyraz tak jak w linii poniżej. Wciśnij <ESC> aby opuścić tryb
+  4. Dokończ wyraz tak, jak w linii poniżej. Wciśnij <ESC> aby opuścić tryb
      Insert.
 
   5. Użyj  e  by przejść do kolejnego niedokończonego wyrazu i powtarzaj kroki
@@ -758,7 +758,7 @@
 ---> Ta li poz Ci ćwi dodaw teks do koń lin
 ---> Ta linia pozwoli Ci ćwiczyć dodawanie tekstu do końca linii.
 
-Uwaga:  a ,  i  oraz  A  prowadzą do trybu Insert, jedyną różnicą jest miejsce
+Uwaga:  a ,  i  oraz  A  prowadzą do trybu Insert, jedyną różnicą jest miejsce,
        gdzie nowe znaki będą dodawane.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		   Lekcja 6.3.: INNA WERSJA REPLACE (zamiana)
@@ -791,16 +791,16 @@
 
   1. Przejdź do linii oznaczonej ---> i umieść kursor za "a)".
 
-  2. Wejdź w tryb Visual  v  i przenieś kursor na początek "pierwszy".
+  2. Wejdź w tryb Wizualny  v  i przenieś kursor na początek "pierwszy".
 
-  3. Wciśnij  y  aby yankować (kopiować) podświetlony tekst.
+  3. Wciśnij  y  aby kopiować (yankować) podświetlony tekst.
 
   4. Przenieś kursor do końca następnej linii:  j$
 
-  5. Wciśnij  p  aby wpakować (paste) tekst.  Dodaj:  a drugi<ESC> .
+  5. Wciśnij  p  aby wkleić (wpakować) tekst.  Dodaj:  a drugi<ESC> .
 
-  6. Użyj trybu Wizualnego aby wybrać " element.", yankuj go  y , przejdź do
-     końca następnej linii  j$ i upakuj tam tekst z  p .
+  6. Użyj trybu Wizualnego, aby wybrać " element.", yankuj go  y , przejdź do
+     końca następnej linii  j$  i upakuj tam tekst z  p .
 
 --->  a) to jest pierwszy element.
       b)
@@ -810,7 +810,7 @@
 			 Lekcja 6.5.: USTAWIANIE OPCJI
 
 
-** Ustawianie opcji tak by szukaj lub substytucja ignorowały wielkość liter **
+** Ustawianie opcji tak, by szukaj lub substytucja ignorowały wielkość liter **
 
   1. Szukaj 'ignore' wpisując:    /ignore<ENTER>
      Powtórz szukanie kilka razy naciskając klawisz  n .
@@ -828,7 +828,7 @@
 
   6. Aby wyłączyć ignorowanie wielkości liter:  :set noic
 
-Uwaga: Aby usunąć podświetlanie dopasowań wpisz:   :nohlsearch
+Uwaga: Aby usunąć podświetlanie dopasowań, wpisz:   :nohlsearch
 Uwaga: Aby ignorować wielkość liter dla jednego wyszukiwania: /ignore\c<ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			     LEKCJA 6. PODSUMOWANIE
@@ -837,36 +837,36 @@
   1. Wpisanie  o  otwiera linię PONIŻEJ kursora.
      Wpisanie  O  otwiera linię POWYŻEJ kursora.
 
-  2. Wpisanie  a  by wstawić tekst ZA znakiem na, którym jest kursor.
+  2. Wpisanie  a  wstawia tekst ZA znakiem, na którym jest kursor.
      Wpisanie  A  dodaje tekst na końcu linii.
 
   3. Polecenie  e  przenosi do końca wyrazu.
-  4. Operator  y  yankuje (kopiuje) tekst,  p  pakuje (wkleja, paste) go.
+  4. Operator  y  yankuje (kopiuje) tekst,  p  pakuje (wkleja) go.
   5. Wpisanie wielkiego  R  wprowadza w tryb Replace (zamiana) dopóki
      nie zostanie wciśnięty <ESC>.
-  6. Wpisanie ":set xxx" ustawia opcję "xxx". Nietkóre opcje:
+  6. Wpisanie ":set xxx" ustawia opcję "xxx". Niektóre opcje:
 	'ic'  'ignorecase'	ignoruj wielkość znaków
 	'is'  'incsearch'	pokaż częściowe dopasowania
 	'hls' 'hlsearch'	podświetl wszystkie dopasowania
-     Możesz użyć zarówno długiej jak i krótkiej formy.
-  7. Dodaj "no" aby wyłączyć opcję:   :set noic
+     Możesz użyć zarówno długiej, jak i krótkiej formy.
+  7. Dodaj "no", aby wyłączyć opcję:   :set noic
 
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			LEKCJA 7.1. JAK UZYSKAĆ POMOC
+			 LEKCJA 7.1. JAK UZYSKAĆ POMOC?
 
 		      ** Użycie systemu pomocy on-line **
 
-  Vim posiada bardzo dobry system pomocy on-line. By zacząć spróbuj jednej
+  Vim posiada bardzo dobry system pomocy on-line. By zacząć, spróbuj jednej
   z trzech możliwości:
 	- wciśnij klawisz <HELP> (jeśli taki masz)
 	- wciśnij klawisz <F1> (jeśli taki masz)
 	- wpisz   :help<ENTER>
 
-  Przeczytaj tekst w oknie pomocy  aby dowiedzieć się jak działa pomoc.
+  Przeczytaj tekst w oknie pomocy, aby dowiedzieć się jak działa pomoc.
   wpisz CTRL-W CTRL-W    aby przeskoczyć z jednego okna do innego
   wpisz :q<ENTER>        aby zamknąć okno pomocy.
 
@@ -894,10 +894,10 @@
   3. Zapisz plik:
      :w
 
-  Następnym razem gdy zaczniesz pracę w Vimie będzie on używać podświetlania
+  Następnym razem, gdy zaczniesz pracę w Vimie będzie on używać podświetlania
   składni. Możesz dodać wszystkie swoje ulubione ustawienia do tego pliku
   "vimrc".
-  Aby uzyskać więcej informacji wpisz     :help vimrc-intro
+  Aby uzyskać więcej informacji, wpisz     :help vimrc-intro
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			  Lekcja 7.3.: UZUPEŁNIANIE
@@ -907,11 +907,11 @@
 
   1. Upewnij się, że Vim nie jest w trybie kompatybilności:   :set nocp
 
-  2. Zerknij jakie pliki są w bieżącm katalogu:   :!ls   lub   :!dir
+  2. Zerknij, jakie pliki są w bieżącym katalogu:   :!ls   lub   :!dir
 
   3. Wpisz początek polecenia:   :e
 
-  4. Wciśnij  CTRL-D  i Vim pokaże listę poleceń jakie zaczynają się na "e".
+  4. Wciśnij  CTRL-D  i Vim pokaże listę poleceń, jakie zaczynają się na "e".
 
   5. Wciśnij  <TAB>  i Vim uzupełni polecenie do ":edit".
 
@@ -925,7 +925,7 @@
 			    Lekcja 7. PODSUMOWANIE
 
 
-  1. Wpisz  :help  lub wciśnij <F1> lub <Help> aby otworzyć okno pomocy.
+  1. Wpisz  :help  albo wciśnij <F1> lub <Help> aby otworzyć okno pomocy.
 
   2. Wpisz  :help cmd  aby uzyskać pomoc o  cmd .
 
@@ -945,14 +945,14 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-  Tutaj się kończy tutorial Vima. Został on pomyślany tak aby dać krótki
+  Tutaj się kończy tutorial Vima. Został on pomyślany tak, aby dać krótki
   przegląd jego możliwości, wystarczający byś mógł go używać. Jest on
-  daleki od kompletności ponieważ Vim ma o wiele, wiele więcej poleceń.
+  daleki od kompletności, ponieważ Vim ma o wiele, wiele więcej poleceń.
 
   Dla dalszej nauki rekomendujemy książkę:
 	Vim - Vi Improved - autor Steve Oualline
 	Wydawca: New Riders
-  Pierwsza ksiązka całkowicie poświęcona Vimowi. Użyteczna zwłaszcza dla
+  Pierwsza książka całkowicie poświęcona Vimowi. Użyteczna zwłaszcza dla
   początkujących. Zawiera wiele przykładów i ilustracji.
   Zobacz http://iccf-holland.org./click5.html
 
@@ -960,7 +960,7 @@
   polecenia:
 	Learning the Vi Editor - autor Linda Lamb
 	Wydawca: O'Reilly & Associates Inc.
-  To dobra książka by dowiedzieć się niemal wszystkiego co chciałbyś zrobić
+  To dobra książka, by dowiedzieć się niemal wszystkiego, co chciałbyś zrobić
   z Vi. Szósta edycja zawiera też informacje o Vimie.
 
   Po polsku wydano:
@@ -991,4 +991,5 @@
   rev. Marzec 2002
   2nd rev. Wrzesień 2004
   3rd rev. Marzec 2006
+  4th rev. Grudzień 2008
   Wszelkie uwagi proszę kierować na: mikmach@wp.pl
diff --git a/runtime/vimrc_example.vim b/runtime/vimrc_example.vim
index 2c0de3d..b35100c 100644
--- a/runtime/vimrc_example.vim
+++ b/runtime/vimrc_example.vim
@@ -1,7 +1,7 @@
 " An example for a vimrc file.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2008 Jul 02
+" Last change:	2008 Dec 17
 "
 " To use it, copy it to
 "     for Unix and OS/2:  ~/.vimrc
@@ -14,7 +14,7 @@
   finish
 endif
 
-" Use Vim settings, rather then Vi settings (much better!).
+" Use Vim settings, rather than Vi settings (much better!).
 " This must be first, because it changes other options as a side effect.
 set nocompatible