changeset 1121:e63691e7c504

updated for version 7.1a
author vimboss
date Sat, 05 May 2007 17:54:07 +0000
parents e6db096b07a1
children 2ad54fcf37e3
files README.txt README_amibin.txt README_dos.txt README_extra.txt README_mac.txt README_ole.txt runtime/autoload/adacomplete.vim runtime/autoload/csscomplete.vim runtime/autoload/decada.vim runtime/autoload/getscript.vim runtime/autoload/netrw.vim runtime/autoload/pythoncomplete.vim runtime/autoload/rubycomplete.vim runtime/autoload/syntaxcomplete.vim runtime/autoload/xmlcomplete.vim runtime/autoload/zip.vim runtime/colors/blue.vim runtime/colors/torte.vim runtime/doc/change.txt runtime/doc/cmdline.txt runtime/doc/debug.txt runtime/doc/debugger.txt runtime/doc/develop.txt runtime/doc/diff.txt runtime/doc/digraph.txt runtime/doc/editing.txt runtime/doc/fold.txt runtime/doc/gui_w16.txt runtime/doc/gui_w32.txt runtime/doc/gui_x11.txt runtime/doc/hangulin.txt runtime/doc/help.txt runtime/doc/if_cscop.txt runtime/doc/if_mzsch.txt runtime/doc/if_ole.txt runtime/doc/if_perl.txt runtime/doc/if_pyth.txt runtime/doc/if_ruby.txt runtime/doc/if_sniff.txt runtime/doc/insert.txt runtime/doc/mbyte.txt runtime/doc/mlang.txt runtime/doc/motion.txt runtime/doc/os_390.txt runtime/doc/os_beos.txt runtime/doc/os_mac.txt runtime/doc/os_msdos.txt runtime/doc/os_risc.txt runtime/doc/os_unix.txt runtime/doc/pi_getscript.txt runtime/doc/pi_gzip.txt runtime/doc/pi_netrw.txt runtime/doc/pi_paren.txt runtime/doc/pi_tar.txt runtime/doc/pi_vimball.txt runtime/doc/pi_zip.txt runtime/doc/print.txt runtime/doc/quickref.txt runtime/doc/recover.txt runtime/doc/rileft.txt runtime/doc/russian.txt runtime/doc/sign.txt runtime/doc/sponsor.txt runtime/doc/tags runtime/doc/term.txt runtime/doc/tips.txt runtime/doc/uganda.txt runtime/doc/undo.txt runtime/doc/usr_02.txt runtime/doc/usr_03.txt runtime/doc/usr_08.txt runtime/doc/usr_09.txt runtime/doc/usr_10.txt runtime/doc/usr_25.txt runtime/doc/usr_26.txt runtime/doc/usr_29.txt runtime/doc/usr_32.txt runtime/doc/usr_42.txt runtime/doc/usr_44.txt runtime/doc/usr_90.txt runtime/doc/usr_toc.txt runtime/doc/version5.txt runtime/doc/version6.txt runtime/doc/vim2html.pl runtime/doc/visual.txt runtime/doc/xxd-it.1 runtime/doc/xxd-pl.UTF-8.1 runtime/doc/xxd-ru.UTF-8.1 runtime/ftplugin/ada.vim runtime/ftplugin/bst.vim runtime/ftplugin/cobol.vim runtime/ftplugin/debchangelog.vim runtime/ftplugin/hamster.vim runtime/ftplugin/haskell.vim runtime/ftplugin/mail.vim runtime/ftplugin/make.vim runtime/ftplugin/ocaml.vim runtime/indent/ada.vim runtime/indent/eruby.vim runtime/indent/html.vim runtime/indent/htmldjango.vim runtime/indent/jsp.vim runtime/indent/ocaml.vim runtime/indent/python.vim runtime/indent/ruby.vim runtime/indent/vhdl.vim runtime/keymap/bulgarian-bds.vim runtime/keymap/bulgarian-phonetic.vim runtime/keymap/thaana.vim runtime/keymap/vietnamese-viqr_utf-8.vim runtime/lang/menu_sl_si.cp1250.vim runtime/lang/menu_sl_si.latin2.vim runtime/lang/menu_slovak_slovak_republic.1250.vim runtime/plugin/README.txt runtime/plugin/vimballPlugin.vim runtime/plugin/zipPlugin.vim runtime/spell/da/main.aap runtime/spell/pl/main.aap runtime/spell/pt/pt_PT.diff runtime/synmenu.vim runtime/syntax/amiga.vim runtime/syntax/aspvbs.vim runtime/syntax/autoit.vim runtime/syntax/automake.vim runtime/syntax/b.vim runtime/syntax/bzr.vim runtime/syntax/c.vim runtime/syntax/cmusrc.vim runtime/syntax/csh.vim runtime/syntax/dcl.vim runtime/syntax/desc.vim runtime/syntax/elmfilt.vim runtime/syntax/eruby.vim runtime/syntax/foxpro.vim runtime/syntax/fvwm.vim runtime/syntax/hamster.vim runtime/syntax/ia64.vim runtime/syntax/ibasic.vim runtime/syntax/initng.vim runtime/syntax/javascript.vim runtime/syntax/lua.vim runtime/syntax/lynx.vim runtime/syntax/make.vim runtime/syntax/maple.vim runtime/syntax/masm.vim runtime/syntax/muttrc.vim runtime/syntax/named.vim runtime/syntax/netrw.vim runtime/syntax/objc.vim runtime/syntax/ocaml.vim runtime/syntax/php.vim runtime/syntax/privoxy.vim runtime/syntax/remind.vim runtime/syntax/ruby.vim runtime/syntax/sd.vim runtime/syntax/sh.vim runtime/syntax/tcsh.vim runtime/syntax/tex.vim runtime/syntax/vim.vim runtime/syntax/xdefaults.vim runtime/tutor/tutor.cs runtime/tutor/tutor.cs.cp1250 runtime/tutor/tutor.cs.utf-8 runtime/tutor/tutor.hu runtime/tutor/tutor.hu.utf-8 runtime/tutor/tutor.it runtime/tutor/tutor.tr.utf-8 src/GvimExt/GvimExt.reg src/if_xcmdsrv.c src/keymap.h src/move.c src/os_vms.c src/po/README_mvc.txt src/po/de.po src/po/pl.UTF-8.po src/po/pl.cp1250.po src/proto/charset.pro src/proto/diff.pro src/proto/ex_eval.pro src/proto/ex_getln.pro src/proto/fold.pro src/proto/gui.pro src/proto/gui_gtk_x11.pro src/proto/gui_xmdlg.pro src/proto/hashtab.pro src/proto/if_tcl.pro src/proto/main.pro src/proto/mark.pro src/proto/memfile.pro src/proto/message.pro src/proto/netbeans.pro src/proto/normal.pro src/proto/option.pro src/proto/os_riscos.pro src/proto/os_vms.pro src/proto/os_win16.pro src/proto/popupmnu.pro src/proto/regexp.pro src/proto/spell.pro src/proto/syntax.pro src/proto/version.pro src/proto/window.pro src/proto/workshop.pro src/testdir/test55.ok src/vim16.def src/vimrun.c
diffstat 206 files changed, 20273 insertions(+), 7458 deletions(-) [+]
line wrap: on
line diff
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-README.txt for version 7.0 of Vim: Vi IMproved.
+README.txt for version 7.1a of Vim: Vi IMproved.
 
 
 WHAT IS VIM
--- a/README_amibin.txt
+++ b/README_amibin.txt
@@ -1,4 +1,4 @@
-README_amibin.txt for version 7.0 of Vim: Vi IMproved.
+README_amibin.txt for version 7.1a of Vim: Vi IMproved.
 
 See "README.txt" for general information about Vim.
 See "README_ami.txt" for installation instructions for the Amiga.
--- a/README_dos.txt
+++ b/README_dos.txt
@@ -1,4 +1,4 @@
-README_dos.txt for version 7.0 of Vim: Vi IMproved.
+README_dos.txt for version 7.1a of Vim: Vi IMproved.
 
 This file explains the installation of Vim on MS-DOS and MS-Windows systems.
 See "README.txt" for general information about Vim.
--- a/README_extra.txt
+++ b/README_extra.txt
@@ -1,4 +1,4 @@
-README_extra.txt for version 7.0 of Vim: Vi IMproved.
+README_extra.txt for version 7.1a of Vim: Vi IMproved.
 
 The extra archive of Vim is to be used in combination with the source archive
 (vim-7.0-src.tar.gz).  The extra archive is useless without it.
--- a/README_mac.txt
+++ b/README_mac.txt
@@ -1,4 +1,4 @@
-README_mac.txt for version 7.0 of Vim: Vi IMproved.
+README_mac.txt for version 7.1a of Vim: Vi IMproved.
 
 This file explains the installation of Vim on Macintosh systems.
 See "README.txt" for general information about Vim.
--- a/README_ole.txt
+++ b/README_ole.txt
@@ -1,4 +1,4 @@
-README_ole.txt for version 7.0 of Vim: Vi IMproved.
+README_ole.txt for version 7.1a of Vim: Vi IMproved.
 
 This archive contains gvim.exe with OLE interface and VisVim.
 This version of gvim.exe can also load a number of interface dynamically (you
new file mode 100644
--- /dev/null
+++ b/runtime/autoload/adacomplete.vim
@@ -0,0 +1,109 @@
+"------------------------------------------------------------------------------
+"  Description: Vim Ada omnicompletion file
+"     Language:	Ada (2005)
+"	   $Id$
+"   Maintainer:	Martin Krischik
+"      $Author$
+"	 $Date$
+"      Version: 4.2
+"    $Revision$
+"     $HeadURL: https://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.
+"		16.07.2006 MK Ada-Mode as vim-ball
+"		15.10.2006 MK Bram's suggestion for runtime integration
+"		05.11.2006 MK Bram suggested not to use include protection for
+"			      autoload
+"		05.11.2006 MK Bram suggested agaist using setlocal omnifunc 
+"		05.11.2006 MK Bram suggested to save on spaces
+"    Help Page: ft-ada-omni
+"------------------------------------------------------------------------------
+
+if version < 700
+   finish
+endif
+
+" Section: adacomplete#Complete () {{{1
+"
+" This function is used for the 'omnifunc' option.
+"
+function! adacomplete#Complete (findstart, base)
+   if a:findstart == 1
+      return ada#User_Complete (a:findstart, a:base)
+   else
+      "
+      " look up matches
+      "
+      if exists ("g:ada_omni_with_keywords")
+	 call ada#User_Complete (a:findstart, a:base)
+      endif
+      "
+      "  search tag file for matches
+      "
+      let l:Pattern  = '^' . a:base . '.*$'
+      let l:Tag_List = taglist (l:Pattern)
+      "
+      " add symbols
+      "
+      for Tag_Item in l:Tag_List
+	 if l:Tag_Item['kind'] == ''
+	    "
+	    " Tag created by gnat xref
+	    "
+	    let l:Match_Item = {
+	       \ 'word':  l:Tag_Item['name'],
+	       \ 'menu':  l:Tag_Item['filename'],
+	       \ 'info':  "Symbol from file " . l:Tag_Item['filename'] . " line " . l:Tag_Item['cmd'],
+	       \ 'kind':  's',
+	       \ 'icase': 1}
+	 else
+	    "
+	    " Tag created by ctags
+	    "
+	    let l:Info	= 'Symbol		 : ' . l:Tag_Item['name']  . "\n"
+	    let l:Info .= 'Of type		 : ' . g:ada#Ctags_Kinds[l:Tag_Item['kind']][1]  . "\n"
+	    let l:Info .= 'Defined in File	 : ' . l:Tag_Item['filename'] . "\n"
+
+	    if has_key( l:Tag_Item, 'package')
+	       let l:Info .= 'Package		    : ' . l:Tag_Item['package'] . "\n"
+	       let l:Menu  = l:Tag_Item['package']
+	    elseif has_key( l:Tag_Item, 'separate')
+	       let l:Info .= 'Separate from Package : ' . l:Tag_Item['separate'] . "\n"
+	       let l:Menu  = l:Tag_Item['separate']
+	    elseif has_key( l:Tag_Item, 'packspec')
+	       let l:Info .= 'Package Specification : ' . l:Tag_Item['packspec'] . "\n"
+	       let l:Menu  = l:Tag_Item['packspec']
+	    elseif has_key( l:Tag_Item, 'type')
+	       let l:Info .= 'Datetype		    : ' . l:Tag_Item['type'] . "\n"
+	       let l:Menu  = l:Tag_Item['type']
+	    else
+	       let l:Menu  = l:Tag_Item['filename']
+	    endif
+
+	    let l:Match_Item = {
+	       \ 'word':  l:Tag_Item['name'],
+	       \ 'menu':  l:Menu,
+	       \ 'info':  l:Info,
+	       \ 'kind':  l:Tag_Item['kind'],
+	       \ 'icase': 1}
+	 endif
+	 if complete_add (l:Match_Item) == 0
+	    return []
+	 endif
+	 if complete_check ()
+	    return []
+	 endif
+      endfor
+      return []
+   endif
+endfunction adacomplete#Complete
+
+finish " 1}}}
+
+"------------------------------------------------------------------------------
+"   Copyright (C) 2006	Martin Krischik
+"
+"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
+"------------------------------------------------------------------------------
+" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
+" vim: foldmethod=marker
--- a/runtime/autoload/csscomplete.vim
+++ b/runtime/autoload/csscomplete.vim
@@ -1,422 +1,407 @@
 " Vim completion script
 " Language:	CSS 2.1
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2006 Apr 30
+" Last Change:	2007 Mar 11
 
 function! csscomplete#CompleteCSS(findstart, base)
+
 if a:findstart
 	" We need whole line to proper checking
-    let line = getline('.')
-    let start = col('.') - 1
+	let line = getline('.')
+	let start = col('.') - 1
 	let compl_begin = col('.') - 2
-	while start >= 0 && line[start - 1] =~ '\(\k\|-\)'
+	while start >= 0 && line[start - 1] =~ '\%(\k\|-\)'
 		let start -= 1
 	endwhile
 	let b:compl_context = getline('.')[0:compl_begin]
 	return start
+endif
+
+" There are few chars important for context:
+" ^ ; : { } /* */
+" Where ^ is start of line and /* */ are comment borders
+" Depending on their relative position to cursor we will know what should
+" be completed. 
+" 1. if nearest are ^ or { or ; current word is property
+" 2. if : it is value (with exception of pseudo things)
+" 3. if } we are outside of css definitions
+" 4. for comments ignoring is be the easiest but assume they are the same
+"    as 1. 
+" 5. if @ complete at-rule
+" 6. if ! complete important
+if exists("b:compl_context")
+	let line = b:compl_context
+	unlet! b:compl_context
 else
-	" There are few chars important for context:
-	" ^ ; : { } /* */
-	" Where ^ is start of line and /* */ are comment borders
-	" Depending on their relative position to cursor we will now what should
-	" be completed.
-	" 1. if nearest are ^ or { or ; current word is property
-	" 2. if : it is value (with exception of pseudo things)
-	" 3. if } we are outside of css definitions
-	" 4. for comments ignoring is be the easiest but assume they are the same
-	"    as 1.
-	" 5. if @ complete at-rule
-	" 6. if ! complete important
-	if exists("b:compl_context")
-		let line = b:compl_context
-		unlet! b:compl_context
-	else
-		let line = a:base
-	endif
+	let line = a:base
+endif
 
-	let res = []
-	let res2 = []
-	let borders = {}
+let res = []
+let res2 = []
+let borders = {}
 
-	" We need the last occurrence of char so reverse line
-	let revline = join(reverse(split(line, '.\zs')), '')
+" Check last occurrence of sequence
 
-	let openbrace  = stridx(revline, '{')
-	let closebrace = stridx(revline, '}')
-	let colon      = stridx(revline, ':')
-	let semicolon  = stridx(revline, ';')
-	let opencomm   = stridx(revline, '*/') " Line was reversed
-	let closecomm  = stridx(revline, '/*') " Line was reversed
-	let style      = stridx(revline, '=\s*elyts') " Line was reversed
-	let atrule     = stridx(revline, '@')
-	let exclam     = stridx(revline, '!')
+let openbrace  = strridx(line, '{')
+let closebrace = strridx(line, '}')
+let colon      = strridx(line, ':')
+let semicolon  = strridx(line, ';')
+let opencomm   = strridx(line, '/*')
+let closecomm  = strridx(line, '*/')
+let style      = strridx(line, 'style\s*=')
+let atrule     = strridx(line, '@')
+let exclam     = strridx(line, '!')
 
-	if openbrace > -1
-		let borders[openbrace] = "openbrace"
-	endif
-	if closebrace > -1
-		let borders[closebrace] = "closebrace"
-	endif
-	if colon > -1
-		let borders[colon] = "colon"
-	endif
-	if semicolon > -1
-		let borders[semicolon] = "semicolon"
-	endif
-	if opencomm > -1
-		let borders[opencomm] = "opencomm"
-	endif
-	if closecomm > -1
-		let borders[closecomm] = "closecomm"
-	endif
-	if style > -1
-		let borders[style] = "style"
-	endif
-	if atrule > -1
-		let borders[atrule] = "atrule"
-	endif
-	if exclam > -1
-		let borders[exclam] = "exclam"
-	endif
+if openbrace > -1
+	let borders[openbrace] = "openbrace"
+endif
+if closebrace > -1
+	let borders[closebrace] = "closebrace"
+endif
+if colon > -1
+	let borders[colon] = "colon"
+endif
+if semicolon > -1
+	let borders[semicolon] = "semicolon"
+endif
+if opencomm > -1
+	let borders[opencomm] = "opencomm"
+endif
+if closecomm > -1
+	let borders[closecomm] = "closecomm"
+endif
+if style > -1
+	let borders[style] = "style"
+endif
+if atrule > -1
+	let borders[atrule] = "atrule"
+endif
+if exclam > -1
+	let borders[exclam] = "exclam"
+endif
 
 
-	if len(borders) == 0 || borders[min(keys(borders))] =~ '^\(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
-		" Complete properties
+if len(borders) == 0 || borders[max(keys(borders))] =~ '^\%(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
+	" Complete properties
 
-		let values = split("azimuth background background-attachment background-color background-image background-position background-repeat border bottom border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color  border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width caption-side clear clip color content counter-increment counter-reset cue cue-after cue-before cursor display direction elevation empty-cells float font font-family font-size font-style font-variant font-weight height left letter-spacing line-height list-style list-style-image list-style-position list-style-type margin margin-right margin-left margin-top margin-bottom max-height max-width min-height min-width orphans outline outline-color outline-style outline-width overflow padding padding-top padding-right padding-bottom padding-left page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness speak speak-header speak-numeral speak-punctuation speech-rate stress table-layout text-align text-decoration text-indent text-transform top unicode-bidi vertical-align visibility voice-family volume white-space width widows word-spacing z-index")
+	let values = split("azimuth background background-attachment background-color background-image background-position background-repeat border bottom border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color  border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width caption-side clear clip color content counter-increment counter-reset cue cue-after cue-before cursor display direction elevation empty-cells float font font-family font-size font-style font-variant font-weight height left letter-spacing line-height list-style list-style-image list-style-position list-style-type margin margin-right margin-left margin-top margin-bottom max-height max-width min-height min-width orphans outline outline-color outline-style outline-width overflow padding padding-top padding-right padding-bottom padding-left page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness speak speak-header speak-numeral speak-punctuation speech-rate stress table-layout text-align text-decoration text-indent text-transform top unicode-bidi vertical-align visibility voice-family volume white-space width widows word-spacing z-index")
 
-		let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$')
+	let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$')
 
-		for m in values
-			if m =~? '^'.entered_property
-				call add(res, m . ':')
-			elseif m =~? entered_property
-				call add(res2, m . ':')
-			endif
-		endfor
+	for m in values
+		if m =~? '^'.entered_property
+			call add(res, m . ':')
+		elseif m =~? entered_property
+			call add(res2, m . ':')
+		endif
+	endfor
 
-		return res + res2
+	return res + res2
 
-	elseif borders[min(keys(borders))] == 'colon'
-		" Get name of property
-		let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$'))
+elseif borders[max(keys(borders))] == 'colon'
+	" Get name of property
+	let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$'))
 
-		if prop == 'azimuth'
-			let values = ["left-side", "far-left", "left", "center-left", "center", "center-right", "right", "far-right", "right-side", "behind", "leftwards", "rightwards"]
-		elseif prop == 'background-attachment'
-			let values = ["scroll", "fixed"]
-		elseif prop == 'background-color'
-			let values = ["transparent", "rgb(", "#"]
-		elseif prop == 'background-image'
-			let values = ["url(", "none"]
-		elseif prop == 'background-position'
-			let vals = matchstr(line, '.*:\s*\zs.*')
-			if vals =~ '^\([a-zA-Z]\+\)\?$'
-				let values = ["top", "center", "bottom"]
-			elseif vals =~ '^[a-zA-Z]\+\s\+\([a-zA-Z]\+\)\?$'
-				let values = ["left", "center", "right"]
-			else
-				return []
-			endif
-		elseif prop == 'background-repeat'
-			let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"]
-		elseif prop == 'background'
-			let values = ["url(", "scroll", "fixed", "transparent", "rgb(", "#", "none", "top", "center", "bottom" , "left", "right", "repeat", "repeat-x", "repeat-y", "no-repeat"]
-		elseif prop == 'border-collapse'
-			let values = ["collapse", "separate"]
-		elseif prop == 'border-color'
-			let values = ["rgb(", "#", "transparent"]
-		elseif prop == 'border-spacing'
+	if prop == 'azimuth'
+		let values = ["left-side", "far-left", "left", "center-left", "center", "center-right", "right", "far-right", "right-side", "behind", "leftwards", "rightwards"]
+	elseif prop == 'background-attachment'
+		let values = ["scroll", "fixed"]
+	elseif prop == 'background-color'
+		let values = ["transparent", "rgb(", "#"]
+	elseif prop == 'background-image'
+		let values = ["url(", "none"]
+	elseif prop == 'background-position'
+		let vals = matchstr(line, '.*:\s*\zs.*')
+		if vals =~ '^\%([a-zA-Z]\+\)\?$'
+			let values = ["top", "center", "bottom"]
+		elseif vals =~ '^[a-zA-Z]\+\s\+\%([a-zA-Z]\+\)\?$'
+			let values = ["left", "center", "right"]
+		else
 			return []
-		elseif prop == 'border-style'
-			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-		elseif prop =~ 'border-\(top\|right\|bottom\|left\)$'
-			let vals = matchstr(line, '.*:\s*\zs.*')
-			if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
-				let values = ["thin", "thick", "medium"]
-			elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
-				let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-			elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
-				let values = ["rgb(", "#", "transparent"]
-			else
-				return []
-			endif
-		elseif prop =~ 'border-\(top\|right\|bottom\|left\)-color'
-			let values = ["rgb(", "#", "transparent"]
-		elseif prop =~ 'border-\(top\|right\|bottom\|left\)-style'
-			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-		elseif prop =~ 'border-\(top\|right\|bottom\|left\)-width'
-			let values = ["thin", "thick", "medium"]
-		elseif prop == 'border-width'
+		endif
+	elseif prop == 'background-repeat'
+		let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"]
+	elseif prop == 'background'
+		let values = ["url(", "scroll", "fixed", "transparent", "rgb(", "#", "none", "top", "center", "bottom" , "left", "right", "repeat", "repeat-x", "repeat-y", "no-repeat"]
+	elseif prop == 'border-collapse'
+		let values = ["collapse", "separate"]
+	elseif prop == 'border-color'
+		let values = ["rgb(", "#", "transparent"]
+	elseif prop == 'border-spacing'
+		return []
+	elseif prop == 'border-style'
+		let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)$'
+		let vals = matchstr(line, '.*:\s*\zs.*')
+		if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$'
 			let values = ["thin", "thick", "medium"]
-		elseif prop == 'border'
-			let vals = matchstr(line, '.*:\s*\zs.*')
-			if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
-				let values = ["thin", "thick", "medium"]
-			elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
-				let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-			elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
-				let values = ["rgb(", "#", "transparent"]
-			else
-				return []
-			endif
-		elseif prop == 'bottom'
-			let values = ["auto"]
-		elseif prop == 'caption-side'
-			let values = ["top", "bottom"]
-		elseif prop == 'clear'
-			let values = ["none", "left", "right", "both"]
-		elseif prop == 'clip'
-			let values = ["auto", "rect("]
-		elseif prop == 'color'
-			let values = ["rgb(", "#"]
-		elseif prop == 'content'
-			let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"]
-		elseif prop =~ 'counter-\(increment\|reset\)$'
-			let values = ["none"]
-		elseif prop =~ '^\(cue-after\|cue-before\|cue\)$'
-			let values = ["url(", "none"]
-		elseif prop == 'cursor'
-			let values = ["url(", "auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress"]
-		elseif prop == 'direction'
-			let values = ["ltr", "rtl"]
-		elseif prop == 'display'
-			let values = ["inline", "block", "list-item", "run-in", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none"]
-		elseif prop == 'elevation'
-			let values = ["below", "level", "above", "higher", "lower"]
-		elseif prop == 'empty-cells'
-			let values = ["show", "hide"]
-		elseif prop == 'float'
-			let values = ["left", "right", "none"]
-		elseif prop == 'font-family'
-			let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"]
-		elseif prop == 'font-size'
-			 let values = ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller"]
-		elseif prop == 'font-style'
-			let values = ["normal", "italic", "oblique"]
-		elseif prop == 'font-variant'
-			let values = ["normal", "small-caps"]
-		elseif prop == 'font-weight'
-			let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
-		elseif prop == 'font'
-			let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"]
-		elseif prop =~ '^\(height\|width\)$'
-			let values = ["auto"]
-		elseif prop =~ '^\(left\|rigth\)$'
-			let values = ["auto"]
-		elseif prop == 'letter-spacing'
-			let values = ["normal"]
-		elseif prop == 'line-height'
-			let values = ["normal"]
-		elseif prop == 'list-style-image'
-			let values = ["url(", "none"]
-		elseif prop == 'list-style-position'
-			let values = ["inside", "outside"]
-		elseif prop == 'list-style-type'
-			let values = ["disc", "circle", "square", "decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-latin", "upper-latin", "none"]
-		elseif prop == 'list-style'
+		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$'
+			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
+			let values = ["rgb(", "#", "transparent"]
+		else
 			return []
-		elseif prop == 'margin'
-			let values = ["auto"]
-		elseif prop =~ 'margin-\(right\|left\|top\|bottom\)$'
-			let values = ["auto"]
-		elseif prop == 'max-height'
-			let values = ["auto"]
-		elseif prop == 'max-width'
-			let values = ["none"]
-		elseif prop == 'min-height'
-			let values = ["none"]
-		elseif prop == 'min-width'
-			let values = ["none"]
-		elseif prop == 'orphans'
-			return []
-		elseif prop == 'outline-color'
-			let values = ["rgb(", "#"]
-		elseif prop == 'outline-style'
-			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-		elseif prop == 'outline-width'
+		endif
+	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)-color'
+		let values = ["rgb(", "#", "transparent"]
+	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)-style'
+		let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+	elseif prop =~ 'border-\%(top\|right\|bottom\|left\)-width'
+		let values = ["thin", "thick", "medium"]
+	elseif prop == 'border-width'
+		let values = ["thin", "thick", "medium"]
+	elseif prop == 'border'
+		let vals = matchstr(line, '.*:\s*\zs.*')
+		if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$'
 			let values = ["thin", "thick", "medium"]
-		elseif prop == 'outline'
-			let vals = matchstr(line, '.*:\s*\zs.*')
-			if vals =~ '^\([a-zA-Z0-9,()#]\+\)\?$'
-				let values = ["rgb(", "#"]
-			elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\([a-zA-Z]\+\)\?$'
-				let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
-			elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
-				let values = ["thin", "thick", "medium"]
-			else
-				return []
-			endif
-		elseif prop == 'overflow'
-			let values = ["visible", "hidden", "scroll", "auto"]
-		elseif prop == 'padding'
-			return []
-		elseif prop =~ 'padding-\(top\|right\|bottom\|left\)$'
-			return []
-		elseif prop =~ 'page-break-\(after\|before\)$'
-			let values = ["auto", "always", "avoid", "left", "right"]
-		elseif prop == 'page-break-inside'
-			let values = ["auto", "avoid"]
-		elseif prop =~ 'pause-\(after\|before\)$'
-			return []
-		elseif prop == 'pause'
-			return []
-		elseif prop == 'pitch-range'
-			return []
-		elseif prop == 'pitch'
-			let values = ["x-low", "low", "medium", "high", "x-high"]
-		elseif prop == 'play-during'
-			let values = ["url(", "mix", "repeat", "auto", "none"]
-		elseif prop == 'position'
-			let values = ["static", "relative", "absolute", "fixed"]
-		elseif prop == 'quotes'
-			let values = ["none"]
-		elseif prop == 'richness'
+		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$'
+			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+		elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
+			let values = ["rgb(", "#", "transparent"]
+		else
 			return []
-		elseif prop == 'speak-header'
-			let values = ["once", "always"]
-		elseif prop == 'speak-numeral'
-			let values = ["digits", "continuous"]
-		elseif prop == 'speak-punctuation'
-			let values = ["code", "none"]
-		elseif prop == 'speak'
-			let values = ["normal", "none", "spell-out"]
-		elseif prop == 'speech-rate'
-			let values = ["x-slow", "slow", "medium", "fast", "x-fast", "faster", "slower"]
-		elseif prop == 'stress'
-			return []
-		elseif prop == 'table-layout'
-			let values = ["auto", "fixed"]
-		elseif prop == 'text-align'
-			let values = ["left", "right", "center", "justify"]
-		elseif prop == 'text-decoration'
-			let values = ["none", "underline", "overline", "line-through", "blink"]
-		elseif prop == 'text-indent'
-			return []
-		elseif prop == 'text-transform'
-			let values = ["capitalize", "uppercase", "lowercase", "none"]
-		elseif prop == 'top'
-			let values = ["auto"]
-		elseif prop == 'unicode-bidi'
-			let values = ["normal", "embed", "bidi-override"]
-		elseif prop == 'vertical-align'
-			let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"]
-		elseif prop == 'visibility'
-			let values = ["visible", "hidden", "collapse"]
-		elseif prop == 'voice-family'
-			return []
-		elseif prop == 'volume'
-			let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"]
-		elseif prop == 'white-space'
-			let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"]
-		elseif prop == 'widows'
+		endif
+	elseif prop == 'bottom'
+		let values = ["auto"]
+	elseif prop == 'caption-side'
+		let values = ["top", "bottom"]
+	elseif prop == 'clear'
+		let values = ["none", "left", "right", "both"]
+	elseif prop == 'clip'
+		let values = ["auto", "rect("]
+	elseif prop == 'color'
+		let values = ["rgb(", "#"]
+	elseif prop == 'content'
+		let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"]
+	elseif prop =~ 'counter-\%(increment\|reset\)$'
+		let values = ["none"]
+	elseif prop =~ '^\%(cue-after\|cue-before\|cue\)$'
+		let values = ["url(", "none"]
+	elseif prop == 'cursor'
+		let values = ["url(", "auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress"]
+	elseif prop == 'direction'
+		let values = ["ltr", "rtl"]
+	elseif prop == 'display'
+		let values = ["inline", "block", "list-item", "run-in", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none"]
+	elseif prop == 'elevation'
+		let values = ["below", "level", "above", "higher", "lower"]
+	elseif prop == 'empty-cells'
+		let values = ["show", "hide"]
+	elseif prop == 'float'
+		let values = ["left", "right", "none"]
+	elseif prop == 'font-family'
+		let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"]
+	elseif prop == 'font-size'
+		 let values = ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller"]
+	elseif prop == 'font-style'
+		let values = ["normal", "italic", "oblique"]
+	elseif prop == 'font-variant'
+		let values = ["normal", "small-caps"]
+	elseif prop == 'font-weight'
+		let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
+	elseif prop == 'font'
+		let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"]
+	elseif prop =~ '^\%(height\|width\)$'
+		let values = ["auto"]
+	elseif prop =~ '^\%(left\|rigth\)$'
+		let values = ["auto"]
+	elseif prop == 'letter-spacing'
+		let values = ["normal"]
+	elseif prop == 'line-height'
+		let values = ["normal"]
+	elseif prop == 'list-style-image'
+		let values = ["url(", "none"]
+	elseif prop == 'list-style-position'
+		let values = ["inside", "outside"]
+	elseif prop == 'list-style-type'
+		let values = ["disc", "circle", "square", "decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-latin", "upper-latin", "none"]
+	elseif prop == 'list-style'
+		return []
+	elseif prop == 'margin'
+		let values = ["auto"]
+	elseif prop =~ 'margin-\%(right\|left\|top\|bottom\)$'
+		let values = ["auto"]
+	elseif prop == 'max-height'
+		let values = ["auto"]
+	elseif prop == 'max-width'
+		let values = ["none"]
+	elseif prop == 'min-height'
+		let values = ["none"]
+	elseif prop == 'min-width'
+		let values = ["none"]
+	elseif prop == 'orphans'
+		return []
+	elseif prop == 'outline-color'
+		let values = ["rgb(", "#"]
+	elseif prop == 'outline-style'
+		let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+	elseif prop == 'outline-width'
+		let values = ["thin", "thick", "medium"]
+	elseif prop == 'outline'
+		let vals = matchstr(line, '.*:\s*\zs.*')
+		if vals =~ '^\%([a-zA-Z0-9,()#]\+\)\?$'
+			let values = ["rgb(", "#"]
+		elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\%([a-zA-Z]\+\)\?$'
+			let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+		elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$'
+			let values = ["thin", "thick", "medium"]
+		else
 			return []
-		elseif prop == 'word-spacing'
-			let values = ["normal"]
-		elseif prop == 'z-index'
-			let values = ["auto"]
-		else
-			" If no property match it is possible we are outside of {} and
-			" trying to complete pseudo-(class|element)
-			let element = tolower(matchstr(line, '\zs[a-zA-Z1-6]*\ze:[^:[:space:]]\{-}$'))
-			if ",a,abbr,acronym,address,area,b,base,bdo,big,blockquote,body,br,button,caption,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,fieldset,form,head,h1,h2,h3,h4,h5,h6,hr,html,i,img,input,ins,kbd,label,legend,li,link,map,meta,noscript,object,ol,optgroup,option,p,param,pre,q,samp,script,select,small,span,strong,style,sub,sup,table,tbody,td,textarea,tfoot,th,thead,title,tr,tt,ul,var," =~ ','.element.','
-				let values = ["first-child", "link", "visited", "hover", "active", "focus", "lang", "first-line", "first-letter", "before", "after"]
-			else
-				return []
-			endif
 		endif
-
-		" Complete values
-		let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$')
-
-		for m in values
-			if m =~? '^'.entered_value
-				call add(res, m)
-			elseif m =~? entered_value
-				call add(res2, m)
-			endif
-		endfor
-
-		return res + res2
-
-	elseif borders[min(keys(borders))] == 'closebrace'
-
+	elseif prop == 'overflow'
+		let values = ["visible", "hidden", "scroll", "auto"]
+	elseif prop == 'padding'
+		return []
+	elseif prop =~ 'padding-\%(top\|right\|bottom\|left\)$'
+		return []
+	elseif prop =~ 'page-break-\%(after\|before\)$'
+		let values = ["auto", "always", "avoid", "left", "right"]
+	elseif prop == 'page-break-inside'
+		let values = ["auto", "avoid"]
+	elseif prop =~ 'pause-\%(after\|before\)$'
+		return []
+	elseif prop == 'pause'
+		return []
+	elseif prop == 'pitch-range'
+		return []
+	elseif prop == 'pitch'
+		let values = ["x-low", "low", "medium", "high", "x-high"]
+	elseif prop == 'play-during'
+		let values = ["url(", "mix", "repeat", "auto", "none"]
+	elseif prop == 'position'
+		let values = ["static", "relative", "absolute", "fixed"]
+	elseif prop == 'quotes'
+		let values = ["none"]
+	elseif prop == 'richness'
+		return []
+	elseif prop == 'speak-header'
+		let values = ["once", "always"]
+	elseif prop == 'speak-numeral'
+		let values = ["digits", "continuous"]
+	elseif prop == 'speak-punctuation'
+		let values = ["code", "none"]
+	elseif prop == 'speak'
+		let values = ["normal", "none", "spell-out"]
+	elseif prop == 'speech-rate'
+		let values = ["x-slow", "slow", "medium", "fast", "x-fast", "faster", "slower"]
+	elseif prop == 'stress'
 		return []
-
-	elseif borders[min(keys(borders))] == 'exclam'
-
-		" Complete values
-		let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$')
-
-		let values = ["important"]
+	elseif prop == 'table-layout'
+		let values = ["auto", "fixed"]
+	elseif prop == 'text-align'
+		let values = ["left", "right", "center", "justify"]
+	elseif prop == 'text-decoration'
+		let values = ["none", "underline", "overline", "line-through", "blink"]
+	elseif prop == 'text-indent'
+		return []
+	elseif prop == 'text-transform'
+		let values = ["capitalize", "uppercase", "lowercase", "none"]
+	elseif prop == 'top'
+		let values = ["auto"]
+	elseif prop == 'unicode-bidi'
+		let values = ["normal", "embed", "bidi-override"]
+	elseif prop == 'vertical-align'
+		let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"]
+	elseif prop == 'visibility'
+		let values = ["visible", "hidden", "collapse"]
+	elseif prop == 'voice-family'
+		return []
+	elseif prop == 'volume'
+		let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"]
+	elseif prop == 'white-space'
+		let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"]
+	elseif prop == 'widows'
+		return []
+	elseif prop == 'word-spacing'
+		let values = ["normal"]
+	elseif prop == 'z-index'
+		let values = ["auto"]
+	else
+		" If no property match it is possible we are outside of {} and
+		" trying to complete pseudo-(class|element)
+		let element = tolower(matchstr(line, '\zs[a-zA-Z1-6]*\ze:[^:[:space:]]\{-}$'))
+		if stridx(',a,abbr,acronym,address,area,b,base,bdo,big,blockquote,body,br,button,caption,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,fieldset,form,head,h1,h2,h3,h4,h5,h6,hr,html,i,img,input,ins,kbd,label,legend,li,link,map,meta,noscript,object,ol,optgroup,option,p,param,pre,q,samp,script,select,small,span,strong,style,sub,sup,table,tbody,td,textarea,tfoot,th,thead,title,tr,tt,ul,var,', ','.element.',') > -1
+			let values = ["first-child", "link", "visited", "hover", "active", "focus", "lang", "first-line", "first-letter", "before", "after"]
+		else
+			return []
+		endif
+	endif
 
-		for m in values
-			if m =~? '^'.entered_imp
-				call add(res, m)
-			endif
-		endfor
+	" Complete values
+	let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$')
 
-		return res
+	for m in values
+		if m =~? '^'.entered_value
+			call add(res, m)
+		elseif m =~? entered_value
+			call add(res2, m)
+		endif
+	endfor
 
-	elseif borders[min(keys(borders))] == 'atrule'
+	return res + res2
+
+elseif borders[max(keys(borders))] == 'closebrace'
 
-		let afterat = matchstr(line, '.*@\zs.*')
+	return []
 
-		if afterat =~ '\s'
+elseif borders[max(keys(borders))] == 'exclam'
 
-			let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze')
+	" Complete values
+	let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$')
 
-			if atrulename == 'media'
-				let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"]
+	let values = ["important"]
 
-				let atruleafterbase = matchstr(line, '.*@media\s\+\ze.*$')
-				let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$')
+	for m in values
+		if m =~? '^'.entered_imp
+			call add(res, m)
+		endif
+	endfor
 
-			elseif atrulename == 'import'
-				let atruleafterbase = matchstr(line, '.*@import\s\+\ze.*$')
-				let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$')
+	return res
+
+elseif borders[max(keys(borders))] == 'atrule'
+
+	let afterat = matchstr(line, '.*@\zs.*')
+
+	if afterat =~ '\s'
 
-				if entered_atruleafter =~ "^[\"']"
-					let filestart = matchstr(entered_atruleafter, '^.\zs.*')
-					let files = split(glob(filestart.'*'), '\n')
-					let values = map(copy(files), '"\"".v:val')
+		let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze')
+
+		if atrulename == 'media'
+			let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"]
+
+			let atruleafterbase = matchstr(line, '.*@media\s\+\ze.*$')
+			let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$')
 
-				elseif entered_atruleafter =~ "^url("
-					let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*")
-					let files = split(glob(filestart.'*'), '\n')
-					let values = map(copy(files), '"url(".v:val')
+		elseif atrulename == 'import'
+			let atruleafterbase = matchstr(line, '.*@import\s\+\ze.*$')
+			let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$')
 
-				else
-					let values = ['"', 'url(']
+			if entered_atruleafter =~ "^[\"']"
+				let filestart = matchstr(entered_atruleafter, '^.\zs.*')
+				let files = split(glob(filestart.'*'), '\n')
+				let values = map(copy(files), '"\"".v:val')
 
-				endif
-
+			elseif entered_atruleafter =~ "^url("
+				let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*")
+				let files = split(glob(filestart.'*'), '\n')
+				let values = map(copy(files), '"url(".v:val')
+				
 			else
-				return []
+				let values = ['"', 'url(']
 
 			endif
 
-			for m in values
-				if m =~? '^'.entered_atruleafter
-					call add(res, m)
-				elseif m =~? entered_atruleafter
-					call add(res2, m)
-				endif
-			endfor
-
-			return res + res2
+		else
+			return []
 
 		endif
 
-		let values = ["charset", "page", "media", "import", "font-face"]
-
-		let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
-
 		for m in values
-			if m =~? '^'.entered_atrule
-				call add(res, m .' ')
-			elseif m =~? entered_atrule
-				call add(res2, m .' ')
+			if m =~? '^'.entered_atruleafter
+				call add(res, m)
+			elseif m =~? entered_atruleafter
+				call add(res2, m)
 			endif
 		endfor
 
@@ -424,7 +409,22 @@ else
 
 	endif
 
-	return []
+	let values = ["charset", "page", "media", "import", "font-face"]
+
+	let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
 
-	endif
+	for m in values
+		if m =~? '^'.entered_atrule
+			call add(res, m .' ')
+		elseif m =~? entered_atrule
+			call add(res2, m .' ')
+		endif
+	endfor
+
+	return res + res2
+
+endif
+
+return []
+
 endfunction
new file mode 100644
--- /dev/null
+++ b/runtime/autoload/decada.vim
@@ -0,0 +1,75 @@
+"------------------------------------------------------------------------------
+"  Description: Vim Ada/Dec Ada compiler file
+"     Language: Ada (Dec Ada)
+"          $Id$
+"    Copyright: Copyright (C) 2006 Martin Krischik
+"   Maintainer:	Martin Krischik
+"      $Author$
+"        $Date$
+"      Version: 4.2
+"    $Revision$
+"     $HeadURL: https://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
+"               05.11.2006 MK Bram suggested not to use include protection for
+"                             autoload
+"		05.11.2006 MK Bram suggested to save on spaces
+"    Help Page: compiler-decada
+"------------------------------------------------------------------------------
+
+if version < 700
+   finish
+endif
+
+function decada#Unit_Name () dict				     " {{{1
+    "	Convert filename into acs unit:
+    "	    1:  remove the file extenstion.
+    "	    2:  replace all double '_' or '-' with an dot (which denotes a separate)
+    "	    3:  remove a trailing '_' (wich denotes a specification)
+    return substitute (substitute (expand ("%:t:r"), '__\|-', ".", "g"), '_$', "", '')
+endfunction decada#Unit_Name					     " }}}1
+
+function decada#Make () dict					     " {{{1
+    let l:make_prg   = substitute (g:self.Make_Command, '%<', self.Unit_Name(), '')
+    let &errorformat = g:self.Error_Format
+    let &makeprg     = l:make_prg
+    wall
+    make
+    copen
+    set wrap
+    wincmd W
+endfunction decada#Build					     " }}}1
+
+function decada#Set_Session (...) dict				     " {{{1
+   if a:0 > 0
+      call ada#Switch_Session (a:1)
+   elseif argc() == 0 && strlen (v:servername) > 0
+      call ada#Switch_Session (
+	 \ expand('~')[0:-2] . ".vimfiles.session]" .
+	 \ v:servername . ".vim")
+   endif
+   return
+endfunction decada#Set_Session					     " }}}1
+
+function decada#New ()						     " }}}1
+   let Retval = {
+      \ 'Make'		: function ('decada#Make'),
+      \ 'Unit_Name'	: function ('decada#Unit_Name'),
+      \ 'Set_Session'   : function ('decada#Set_Session'),
+      \ 'Project_Dir'   : '',
+      \ 'Make_Command'  : 'ACS COMPILE /Wait /Log /NoPreLoad /Optimize=Development /Debug %<',
+      \ 'Error_Format'  : '%+A%%ADAC-%t-%m,%C  %#%m,%Zat line number %l in file %f,' .
+			\ '%+I%%ada-I-%m,%C  %#%m,%Zat line number %l in file %f'}
+
+   return Retval 
+endfunction decada#New						     " }}}1
+
+finish " 1}}}
+
+"------------------------------------------------------------------------------
+"   Copyright (C) 2006  Martin Krischik
+"
+"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
+"------------------------------------------------------------------------------
+" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
+" vim: foldmethod=marker
new file mode 100644
--- /dev/null
+++ b/runtime/autoload/getscript.vim
@@ -0,0 +1,501 @@
+" ---------------------------------------------------------------------
+" getscript.vim
+"  Author:	Charles E. Campbell, Jr.
+"  Date:	Nov 27, 2006
+"  Version:	23
+"  Installing:	:help glvs-install
+"  Usage:	:help glvs
+"
+" GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim
+" ---------------------------------------------------------------------
+" Initialization:	{{{1
+" if you're sourcing this file, surely you can't be
+" expecting vim to be in its vi-compatible mode
+if &cp
+ echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
+ finish
+endif
+let s:keepfo  = &fo
+let s:keepcpo = &cpo
+set cpo&vim
+
+if exists("g:loaded_getscript")
+ finish
+endif
+let g:loaded_getscript= "v23"
+
+" ---------------------------------------------------------------------
+"  Global Variables: {{{1
+" allow user to change the command for obtaining scripts (does fetch work?)
+if !exists("g:GetLatestVimScripts_wget")
+ if executable("wget")
+  let g:GetLatestVimScripts_wget= "wget"
+ elseif executable("curl")
+  let g:GetLatestVimScripts_wget= "curl"
+ else
+  let g:GetLatestVimScripts_wget    = 'echo "GetLatestVimScripts needs wget or curl"'
+  let g:GetLatestVimScripts_options = ""
+ endif
+endif
+
+" options that wget and curl require:
+if !exists("g:GetLatestVimScripts_options")
+ if g:GetLatestVimScripts_wget == "wget"
+  let g:GetLatestVimScripts_options= "-q -O"
+ elseif g:GetLatestVimScripts_wget == "curl"
+  let g:GetLatestVimScripts_options= "-s -O"
+ else
+  let g:GetLatestVimScripts_options= ""
+ endif
+endif
+
+" by default, allow autoinstall lines to work
+if !exists("g:GetLatestVimScripts_allowautoinstall")
+ let g:GetLatestVimScripts_allowautoinstall= 1
+endif
+
+"" For debugging:
+"let g:GetLatestVimScripts_wget    = "echo"
+"let g:GetLatestVimScripts_options = "options"
+
+" ---------------------------------------------------------------------
+" Check If AutoInstall Capable: {{{1
+let s:autoinstall= ""
+if g:GetLatestVimScripts_allowautoinstall
+
+ if (has("win32") || has("gui_win32") || has("gui_win32s") || has("win16") || has("win64") || has("win32unix") || has("win95")) && &shell != "bash"
+  " windows (but not cygwin/bash)
+  let s:dotvim= "vimfiles"
+  if !exists("g:GetLatestVimScripts_mv")
+   let g:GetLatestVimScripts_mv= "ren"
+  endif
+
+ else
+  " unix
+  let s:dotvim= ".vim"
+  if !exists("g:GetLatestVimScripts_mv")
+   let g:GetLatestVimScripts_mv= "mv"
+  endif
+ endif
+
+ if exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim)
+  let s:autoinstall= $HOME."/".s:dotvim
+ endif
+" call Decho("s:autoinstall<".s:autoinstall.">")
+"else "Decho
+" call Decho("g:GetLatestVimScripts_allowautoinstall=".g:GetLatestVimScripts_allowautoinstall.": :AutoInstall: disabled")
+endif
+
+" ---------------------------------------------------------------------
+"  Public Interface: {{{1
+com!        -nargs=0 GetLatestVimScripts call getscript#GetLatestVimScripts()
+com!        -nargs=0 GetScript           call getscript#GetLatestVimScripts()
+silent! com -nargs=0 GLVS                call getscript#GetLatestVimScripts()
+
+" ---------------------------------------------------------------------
+"  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.
+fun! s:GetOneScript(...)
+"   call Dfunc("GetOneScript()")
+
+ " set options to allow progress to be shown on screen
+  let t_ti= &t_ti
+  let t_te= &t_te
+  let rs  = &rs
+  set t_ti= t_te= nors
+
+ " put current line on top-of-screen and interpret it into
+ " a      script identifer  : used to obtain webpage
+ "        source identifier : used to identify current version
+ " and an associated comment: used to report on what's being considered
+  if a:0 >= 3
+   let scriptid = a:1
+   let srcid    = a:2
+   let fname    = a:3
+   let cmmnt    = ""
+"   call Decho("scriptid<".scriptid.">")
+"   call Decho("srcid   <".srcid.">")
+"   call Decho("fname   <".fname.">")
+  else
+   let curline  = getline(".")
+   if curline =~ '^\s*#'
+"    call Dret("GetOneScript : skipping a pure comment line")
+    return
+   endif
+   let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(.\{-}\)\(\s*#.*\)\=$'
+   try
+    let scriptid = substitute(curline,parsepat,'\1','e')
+   catch /^Vim\%((\a\+)\)\=:E486/
+    let scriptid= 0
+   endtry
+   try
+    let srcid    = substitute(curline,parsepat,'\2','e')
+   catch /^Vim\%((\a\+)\)\=:E486/
+    let srcid= 0
+   endtry
+   try
+    let fname= substitute(curline,parsepat,'\3','e')
+   catch /^Vim\%((\a\+)\)\=:E486/
+    let fname= ""
+   endtry
+   try
+    let cmmnt= substitute(curline,parsepat,'\4','e')
+   catch /^Vim\%((\a\+)\)\=:E486/
+    let cmmnt= ""
+   endtry
+"   call Decho("curline <".curline.">")
+"   call Decho("parsepat<".parsepat.">")
+"   call Decho("scriptid<".scriptid.">")
+"   call Decho("srcid   <".srcid.">")
+"   call Decho("fname   <".fname.">")
+  endif
+
+  if scriptid == 0 || srcid == 0
+   " When looking for :AutoInstall: lines, skip scripts that
+   " have  0 0 scriptname
+"   call Dret("GetOneScript : skipping a scriptid==srcid==0 line")
+   return
+  endif
+
+  let doautoinstall= 0
+  if fname =~ ":AutoInstall:"
+"   call Decho("fname<".fname."> has :AutoInstall:...")
+   let aicmmnt= substitute(fname,'\s\+:AutoInstall:\s\+',' ','')
+"   call Decho("aicmmnt<".aicmmnt."> s:autoinstall=".s:autoinstall)
+   if s:autoinstall != ""
+    let doautoinstall = g:GetLatestVimScripts_allowautoinstall
+   endif
+  else
+   let aicmmnt= fname
+  endif
+"  call Decho("aicmmnt<".aicmmnt.">: doautoinstall=".doautoinstall)
+
+  exe "norm z\<CR>"
+  redraw!
+"  call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid)
+  echomsg '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
+  let tmpfile    = tempname()
+  let v:errmsg   = ""
+
+  " make three tries at downloading the description
+  let itry= 1
+  while itry <= 3
+"   	call Decho("try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr)
+  	if has("win32") || has("win16") || has("win95")
+"     call Decho("silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile.' "'.scriptaddr.'"')
+     exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile.' "'.scriptaddr.'"'
+	else
+"     call Decho("silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile." '".scriptaddr."'")
+     exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".tmpfile." '".scriptaddr."'"
+	endif
+	if itry == 1
+    exe "silent vsplit ".tmpfile
+	else
+	 silent! e %
+	endif
+  
+   " find the latest source-id in the plugin's webpage
+   silent! 1
+   let findpkg= search('Click on the package to download','W')
+   if findpkg > 0
+    break
+   endif
+   let itry= itry + 1
+  endwhile
+"  call Decho(" --- end downloading tries while loop --- itry=".itry)
+
+  " testing: did finding /Click on the package.../ fail?
+  if findpkg == 0 || itry >= 4
+    silent q!
+    call delete(tmpfile)
+   " restore options
+	let &t_ti        = t_ti
+	let &t_te        = t_te
+	let &rs          = rs
+	let s:downerrors = s:downerrors + 1
+"  	call Decho("***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">")
+  	echomsg "***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">"
+"	call Dret("GetOneScript : srch for /Click on the package/ failed")
+  	return
+  endif
+"  call Decho('found "Click on the package to download"')
+
+  let findsrcid= search('src_id=','W')
+  if findsrcid == 0
+    silent q!
+    call delete(tmpfile)
+   " restore options
+	let &t_ti        = t_ti
+	let &t_te        = t_te
+	let &rs          = rs
+	let s:downerrors = s:downerrors + 1
+"  	call Decho("***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">")
+  	echomsg "***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">"
+"	call Dret("GetOneScript : srch for /src_id/ failed")
+  	return
+  endif
+"  call Decho('found "src_id=" in description page')
+
+  let srcidpat   = '^\s*<td class.*src_id=\(\d\+\)">\([^<]\+\)<.*$'
+  let latestsrcid= substitute(getline("."),srcidpat,'\1','')
+  let fname      = substitute(getline("."),srcidpat,'\2','')
+"  call Decho("srcidpat<".srcidpat."> latestsrcid<".latestsrcid."> fname<".fname.">")
+  silent q!
+  call delete(tmpfile)
+
+  " convert the strings-of-numbers into numbers
+  let srcid       = srcid       + 0
+  let latestsrcid = latestsrcid + 0
+"   call Decho("srcid=".srcid." latestsrcid=".latestsrcid." fname<".fname.">")
+
+  " has the plugin's most-recent srcid increased, which indicates
+  " that it has been updated
+  if latestsrcid > srcid
+   let s:downloads= s:downloads + 1
+   if fname == bufname("%")
+    " GetLatestVimScript has to be careful about downloading itself
+    let fname= "NEW_".fname
+   endif
+
+   " the plugin has been updated since we last obtained it, so download a new copy
+"   call Decho("...downloading new <".fname.">")
+   echomsg "...downloading new <".fname.">"
+   if has("win32") || has("gui_win32") || has("gui_win32s") || has("win16") || has("win64") || has("win32unix") || has("win95")
+"    call Decho("windows: silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname.' "'.'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid.'"')
+    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname.' "'.'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid.'"'
+   else
+"    call Decho("unix: silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname." '".'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid."'")
+    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".fname." '".'http://vim.sf.net/scripts/download_script.php?src_id='.latestsrcid."'"
+   endif
+
+   " AutoInstall: only if doautoinstall is so indicating
+   if doautoinstall
+"   	call Decho("attempting to do autoinstall: getcwd<".getcwd()."> filereadable(".fname.")=".filereadable(fname))
+	if filereadable(fname)
+"	 call Decho("move <".fname."> to ".s:autoinstall)
+"	 call Decho("DISABLED for testing")
+   	 exe "silent !".g:GetLatestVimScripts_mv." ".fname." ".s:autoinstall
+	 let curdir= escape(substitute(getcwd(),'\','/','ge'),"|[]*'\" #")
+	 exe "cd ".s:autoinstall
+	 if fname =~ '\.bz2$'
+"	  call Decho("attempt to bunzip2 ".fname)
+	  exe "silent !bunzip2 ".fname
+	  let fname= substitute(fname,'\.bz2$','','')
+	 elseif fname =~ '\.gz$'
+"	  call Decho("attempt to gunzip ".fname)
+	  exe "silent !gunzip ".fname
+	  let fname= substitute(fname,'\.gz$','','')
+	 endif
+	 if fname =~ '\.zip$'
+"	  call Decho("attempt to unzip ".fname)
+	  exe "silent !unzip -o".fname
+	 elseif fname =~ '\.tar$'
+"	  call Decho("attempt to untar ".fname)
+	  exe "silent !tar -xvf ".fname
+	 elseif fname =~ '\.vba$'
+"	  call Decho("attempt to handle a vimball: ".fname)
+          1split
+	  exe "e ".fname
+	  so %
+	  q
+	 endif
+	 if fname =~ '.vim$'
+"	  call Decho("attempt to simply move ".fname." to plugin")
+	  exe "silent !".g:GetLatestVimScripts_mv." ".fname." plugin"
+	 endif
+	 let docdir= substitute(&rtp,',.*','','e')."/doc"
+"	 call Decho("helptags docdir<".docdir.">")
+	 exe "helptags ".docdir
+	 exe "cd ".curdir
+	endif
+   endif
+
+   " update the data in the <GetLatestVimScripts.dat> file
+   let modline=scriptid." ".latestsrcid." ".fname.cmmnt
+   call setline(line("."),modline)
+"   call Decho("modline<".modline."> (updated GetLatestVimScripts.dat file)")
+  endif
+
+ " restore options
+  let &t_ti= t_ti
+  let &t_te= t_te
+  let &rs  = rs
+
+"  call Dret("GetOneScript")
+endfun
+
+" ---------------------------------------------------------------------
+" GetLatestVimScripts: this function gets the latest versions of {{{1
+"                      scripts based on the list in
+"   (first dir in runtimepath)/GetLatest/GetLatestVimScripts.dat
+fun! getscript#GetLatestVimScripts()
+"  call Dfunc("GetLatestVimScripts() autoinstall<".s:autoinstall.">")
+
+" insure that wget is executable
+  if executable(g:GetLatestVimScripts_wget) != 1
+   echoerr "GetLatestVimScripts needs ".g:GetLatestVimScripts_wget." which apparently is not available on your system"
+"   call Dret("GetLatestVimScripts : wget not executable/availble")
+   return
+  endif
+
+  " Find the .../GetLatest subdirectory under the runtimepath
+  for datadir in split(&rtp,',') + ['']
+   if isdirectory(datadir."/GetLatest")
+"    call Decho("found directory<".datadir.">")
+    let datadir= datadir . "/GetLatest"
+    break
+   endif
+   if filereadable(datadir."GetLatestVimScripts.dat")
+"   	call Decho("found ".datadir."/GetLatestVimScripts.dat")
+   	break
+   endif
+  endfor
+  " Sanity checks: readability and writability
+  if datadir == ""
+   echoerr 'Missing "GetLatest/" on your runtimepath - see :help glvs-dist-install'
+"   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.">")
+   return
+  endif
+  let datafile= datadir."/GetLatestVimScripts.dat"
+  if !filereadable(datafile)
+   echoerr "Your data file<".datafile."> isn't readable"
+"   call Dret("GetLatestVimScripts : non-readable datafile<".datafile.">")
+   return
+  endif
+  if !filewritable(datafile)
+   echoerr "Your data file<".datafile."> isn't writable"
+"   call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">")
+   return
+  endif
+"  call Decho("datadir  <".datadir.">")
+"  call Decho("datafile <".datafile.">")
+
+  " don't let any events interfere (like winmanager's, taglist's, etc)
+  let eikeep= &ei
+  set ei=all
+
+  " record current directory, change to datadir, open split window with
+  " datafile
+  let origdir= getcwd()
+  exe "cd ".escape(substitute(datadir,'\','/','ge'),"|[]*'\" #")
+  split
+  exe "e ".escape(substitute(datafile,'\','/','ge'),"|[]*'\" #")
+  res 1000
+  let s:downloads = 0
+  let s:downerrors= 0
+
+  " Check on dependencies mentioned in plugins
+"  call Decho(" ")
+"  call Decho("searching plugins for GetLatestVimScripts dependencies")
+  let lastline    = line("$")
+  let plugins     = globpath(&rtp,"plugin/*.vim")
+  let foundscript = 0
+
+"  call Decho("plugins<".plugins."> lastline#".lastline)
+  while plugins != ""
+   let plugin = substitute(plugins,'\n.*$','','e')
+   let plugins= (plugins =~ '\n')? substitute(plugins,'^.\{-}\n\(.*\)$','\1','e') : ""
+   $
+"   call Decho(".dependency checking<".plugin."> line$=".line("$"))
+   exe "silent r ".plugin
+   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
+
+	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("..newscript<".newscript."> noai_script<".noai_script."> srch=".srchline." 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
+	endif
+
+   endwhile
+   let llp1= lastline + 1
+"   call Decho(".deleting lines: ".llp1.",$d")
+   exe "silent! ".llp1.",$d"
+  endwhile
+
+  if foundscript == 0
+   set nomod
+  endif
+
+  " Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat
+  set lz
+"  call Decho(" --- end of dependency checking loop --- ")
+"  call Decho("call GetOneScript on lines at end of datafile<".datafile.">")
+  1
+  /^-----/,$g/^\s*\d/call <SID>GetOneScript()
+
+  " Final report (an echomsg)
+  try
+   silent! ?^-------?
+  catch /^Vim\%((\a\+)\)\=:E114/
+"   call Dret("GetLatestVimScripts : nothing done!")
+   return
+  endtry
+  exe "norm! kz\<CR>"
+  redraw!
+  let s:msg = ""
+  if s:downloads == 1
+  let s:msg = "Downloaded one updated script to <".datadir.">"
+  elseif s:downloads == 2
+   let s:msg= "Downloaded two updated scripts to <".datadir.">"
+  elseif s:downloads > 1
+   let s:msg= "Downloaded ".s:downloads." updated scripts to <".datadir.">"
+  else
+   let s:msg= "Everything was already current"
+  endif
+  if s:downerrors > 0
+   let s:msg= s:msg." (".s:downerrors." downloading errors)"
+  endif
+  echomsg s:msg
+  " save the file
+  if &mod
+   silent! w!
+  endif
+  q
+
+  " restore events and current directory
+  exe "cd ".escape(substitute(origdir,'\','/','ge'),"|[]*'\" #")
+  let &ei= eikeep
+  set nolz
+"  call Dret("GetLatestVimScripts : did ".s:downloads." downloads")
+endfun
+" ---------------------------------------------------------------------
+
+" Restore Options: {{{1
+let &fo = s:keepfo
+let &cpo= s:keepcpo
+
+" vim: ts=8 sts=2 fdm=marker nowrap
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,10 +1,10 @@
-" netrw.vim: Handles file transfer and remote directory listing across a network
-"            AUTOLOAD PORTION
-" Date:		May 02, 2006
-" Version:	98
-" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+" netrw.vim: Handles file transfer and remote directory listing across
+"            AUTOLOAD SECTION
+" Date:		Mar 21, 2007
+" Version:	108
+" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
+" 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
 "               notice is copied with it. Like anything else that's free,
@@ -14,29 +14,53 @@
 "               in no event will the copyright holder be liable for any damages
 "               resulting from the use of this software.
 "               of this software.
+" COMBAK: worked with tmpfile s:GetTempname() in NetRead() NetWrite()
+"         !!NEEDS DEBUGGING && TESTING!!!
+"redraw!|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "
 "  But be doers of the Word, and not only hearers, deluding your own selves {{{1
 "  (James 1:22 RSV)
 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-" Exception for &cp: {{{1
+" Load Once: {{{1
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v98"
+if !exists("s:NOTE")
+ let s:NOTE    = 0
+ let s:WARNING = 1
+ let s:ERROR   = 2
+endif
+let g:loaded_netrw = "v108"
 if v:version < 700
- echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
+ call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
  finish
 endif
 let s:keepcpo= &cpo
-set cpo&vim
-" call Decho("doing autoload/netrw.vim")
+setlocal cpo&vim
+"DechoTabOn
+"call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
 
 " ======================
 "  Netrw Variables: {{{1
 " ======================
 
 " ---------------------------------------------------------------------
+"  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
+if !exists("s:LONGLIST")
+ let s:THINLIST = 0
+ let s:LONGLIST = 1
+ let s:WIDELIST = 2
+ let s:TREELIST = 3
+ let s:MAXLIST  = 4
+endif
+
+" ---------------------------------------------------------------------
 " Default values for netrw's global protocol variables {{{2
 if !exists("g:netrw_dav_cmd")
   let g:netrw_dav_cmd	= "cadaver"
@@ -52,7 +76,9 @@ if !exists("g:netrw_ftp_cmd")
   let g:netrw_ftp_cmd	= "ftp"
 endif
 if !exists("g:netrw_http_cmd")
- if executable("wget")
+ if executable("curl")
+  let g:netrw_http_cmd	= "curl -o"
+ elseif executable("wget")
   let g:netrw_http_cmd	= "wget -q -O"
  elseif executable("fetch")
   let g:netrw_http_cmd	= "fetch -o"
@@ -82,7 +108,7 @@ if (has("win32") || has("win95") || has(
   \ && executable( $SystemRoot .'/system32/rcp.exe')
  let s:netrw_has_nt_rcp = 1
  let s:netrw_rcpmode    = '-b'
- else
+else
  let s:netrw_has_nt_rcp = 0
  let s:netrw_rcpmode    = ''
 endif
@@ -91,17 +117,20 @@ endif
 " Default values for netrw's global variables {{{2
 " Default values - a-c ---------- {{{3
 if !exists("g:netrw_alto")
- let g:netrw_alto= 0
+ let g:netrw_alto= &sb
 endif
 if !exists("g:netrw_altv")
- let g:netrw_altv= 0
+ 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_cygwin")
  if has("win32") || has("win95") || has("win64") || has("win16")
-  if &shell == "bash"
+  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
    let g:netrw_cygwin= 1
   else
    let g:netrw_cygwin= 0
@@ -109,6 +138,8 @@ if !exists("g:netrw_cygwin")
  else
   let g:netrw_cygwin= 0
  endif
+else
+ let g:netrw_cygwin= 0
 endif
 " Default values - d-f ---------- {{{3
 if !exists("g:NETRW_DIRHIST_CNT")
@@ -121,10 +152,14 @@ 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
 if !exists("g:netrw_ftp_list_cmd")
- if has("unix") || exists("g:netrw_cygwin")
-  let g:netrw_ftp_list_cmd= "ls -lF"
+ if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
+  let g:netrw_ftp_list_cmd     = "ls -lF"
+  let g:netrw_ftp_timelist_cmd = "ls -tlF"
+  let g:netrw_ftp_sizelist_cmd = "ls -slF"
  else
-  let g:netrw_ftp_list_cmd= "dir"
+  let g:netrw_ftp_list_cmd     = "dir"
+  let g:netrw_ftp_timelist_cmd = "dir"
+  let g:netrw_ftp_sizelist_cmd = "dir"
  endif
 endif
 if !exists("g:netrw_ftpmode")
@@ -134,15 +169,28 @@ endif
 if !exists("g:netrw_hide")
  let g:netrw_hide= 1
 endif
+if !exists("g:netrw_ignorenetrc")
+ if &shell =~ '\c\<\%(cmd\|4nt\)\.exe$'
+  let g:netrw_ignorenetrc= 1
+ else
+  let g:netrw_ignorenetrc= 0
+ endif
+endif
 if !exists("g:netrw_keepdir")
  let g:netrw_keepdir= 1
 endif
 if !exists("g:netrw_list_cmd")
- if executable(g:netrw_ssh_cmd)
+ if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
+  " provide a 'pscp' listing command
+  if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk")
+   let g:netrw_scp_cmd ="pscp -i C:\\private.ppk"
+  endif
+  let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:"
+ elseif executable(g:netrw_ssh_cmd)
   " provide a default listing command
-  let g:netrw_list_cmd= g:netrw_ssh_cmd." HOSTNAME ls -FLa"
+  let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa"
  else
-"  call Decho(g:netrw_ssh_cmd." is not executable, can't do remote directory exploring")
+"  call Decho(g:netrw_ssh_cmd." is not executable")
   let g:netrw_list_cmd= ""
  endif
 endif
@@ -156,34 +204,37 @@ endif
 if !exists("g:netrw_local_rmdir")
  let g:netrw_local_rmdir= "rmdir"
 endif
-if !exists("g:netrw_longlist")
- let g:netrw_longlist= 0
+if !exists("g:netrw_liststyle")
+ let g:netrw_liststyle= s:THINLIST
 endif
-if g:netrw_longlist < 0 || g:netrw_longlist > 2
+if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
  " sanity check
- let g:netrw_longlist= 0
+ let g:netrw_liststyle= s:THINLIST
 endif
-if g:netrw_longlist == 1
+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_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." HOSTNAME mkdir"
+ let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir"
 endif
 if !exists("g:netrw_rename_cmd")
- let g:netrw_rename_cmd= g:netrw_ssh_cmd." HOSTNAME mv"
+ 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." HOSTNAME rm"
+ 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." HOSTNAME rmdir"
+ 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." HOSTNAME rm -f"
+ let g:netrw_rmf_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f"
 endif
 " Default values - s ---------- {{{3
 if exists("g:netrw_silent") && g:netrw_silent != 0
@@ -194,6 +245,20 @@ endif
 if !exists("g:netrw_fastbrowse")
  let g:netrw_fastbrowse= 1
 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
 if !exists("g:netrw_sort_by")
  " alternatives: date size
  let g:netrw_sort_by= "name"
@@ -203,15 +268,25 @@ if !exists("g:netrw_sort_direction")
  let g:netrw_sort_direction= "normal"
 endif
 if !exists("g:netrw_sort_sequence")
- let g:netrw_sort_sequence= '[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
+ let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,\.[a-np-z]$,*,\.info$,\.swp$,\.o$\.obj$,\.bak$'
 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
+ endif
+else
+  let g:netrw_use_noswf= 0
+endif
 " Default values - t-w ---------- {{{3
 if !exists("g:netrw_timefmt")
  let g:netrw_timefmt= "%c"
 endif
+if !exists("g:NetrwTopLvlMenu")
+ let g:NetrwTopLvlMenu= "Netrw."
+endif
 if !exists("g:netrw_win95ftp")
  let g:netrw_win95ftp= 1
 endif
@@ -221,11 +296,7 @@ endif
 " ---------------------------------------------------------------------
 " Default values for netrw's script variables: {{{2
 if !exists("s:netrw_cd_escape")
- if has("win32") || has("win95") || has("win64") || has("win16")
-  let s:netrw_cd_escape="#% "
- else
   let s:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
- endif
 endif
 if !exists("g:netrw_fname_escape")
  let g:netrw_fname_escape= ' ?&;'
@@ -234,11 +305,7 @@ if !exists("g:netrw_tmpfile_escape")
  let g:netrw_tmpfile_escape= ' ?&;'
 endif
 if !exists("s:netrw_glob_escape")
- if has("win32") || has("win95") || has("win64") || has("win16")
-  let s:netrw_glob_escape= ""
- else
   let s:netrw_glob_escape= '[]*?`{~$'
- endif
 endif
 
 " BufEnter event ignored by decho when following variable is true
@@ -253,7 +320,7 @@ endif
 " ------------------------------------------------------------------------
 " NetSavePosn: saves position of cursor on screen {{{2
 fun! netrw#NetSavePosn()
-"  call Dfunc("NetSavePosn()")
+"  call Dfunc("netrw#NetSavePosn()")
   " Save current line and column
   let w:netrw_winnr= winnr()
   let w:netrw_line = line(".")
@@ -264,55 +331,188 @@ fun! netrw#NetSavePosn()
   let w:netrw_hline= line(".")
 
   call netrw#NetRestorePosn()
-"  call Dret("NetSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
+"  call Dret("netrw#NetSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
 endfun
 
 " ------------------------------------------------------------------------
 " NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{2
 fun! netrw#NetRestorePosn()
-"  call Dfunc("NetRestorePosn() winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
+"  call Dfunc("netrw#NetRestorePosn() winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1))
   let eikeep= &ei
   set ei=all
+  if expand("%") == "NetrwMessage"
+   exe s:winBeforeErr."wincmd w"
+  endif
 
   " restore window
-"  call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
-  exe "silent! ".w:netrw_winnr."wincmd w"
-"  if v:shell_error == 0
-"   " as suggested by Bram M: redraw on no error
-"   " allows protocol error messages to remain visible
-"   redraw!
-"  endif
+  if exists("w:netrw_winnr")
+"   call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
+   exe "silent! ".w:netrw_winnr."wincmd w"
+  endif
+  if v:shell_error == 0
+   " as suggested by Bram M: redraw on no error
+   " allows protocol error messages to remain visible
+   redraw!
+  endif
 
   " restore top-of-screen line
-"  call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
-  exe "norm! ".w:netrw_hline."G0z\<CR>"
+  if exists("w:netrw_hline")
+"   call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
+   exe "norm! ".w:netrw_hline."G0z\<CR>"
+  endif
 
   " restore position
-"  call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
-  exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
+  if exists("w:netrw_line") && exists("w:netrw_col")
+"   call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
+   exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
+  endif
 
   let &ei= eikeep
-"  call Dret("NetRestorePosn")
+"  call Dret("netrw#NetRestorePosn")
 endfun
 
 " ===============================
+" NetOptionSave: save options and set to "standard" form {{{2
+fun! s:NetOptionSave()
+"  call Dfunc("s:NetOptionSave()")
+  if !exists("w:netrw_optionsave")
+   let w:netrw_optionsave= 1
+  else
+"   call Dret("s:NetOptionSave : netoptionsave=".w:netrw_optionsave)
+   return
+  endif
+
+  " Save current settings and current directory
+  let s:yykeep          = @@
+  if exists("&l:acd")
+   let w:netrw_acdkeep  = &l:acd
+  endif
+  let w:netrw_aikeep    = &l:ai
+  let w:netrw_awkeep    = &l:aw
+  let w:netrw_cikeep    = &l:ci
+  let w:netrw_cinkeep   = &l:cin
+  let w:netrw_cinokeep  = &l:cino
+  let w:netrw_comkeep   = &l:com
+  let w:netrw_cpokeep   = &l:cpo
+  if g:netrw_keepdir
+   let w:netrw_dirkeep  = getcwd()
+  endif
+  let w:netrw_fokeep    = &l:fo           " formatoptions
+  let w:netrw_gdkeep    = &l:gd           " gdefault
+  let w:netrw_hidkeep   = &l:hidden
+  let w:netrw_magickeep = &l:magic
+  let w:netrw_repkeep   = &l:report
+  let w:netrw_spellkeep = &l:spell
+  let w:netrw_twkeep    = &l:tw           " textwidth
+  let w:netrw_wigkeep   = &l:wig          " wildignore
+  if has("win32") && !has("win95")
+   let w:netrw_swfkeep= &l:swf            " swapfile
+  endif
+  call s:NetrwSafeOptions()
+  if &go =~ 'a' | silent! let w:netrw_regstar = @* | endif
+  silent! let w:netrw_regslash= @/
+
+"  call Dret("s:NetOptionSave")
+endfun
+
+" ------------------------------------------------------------------------
+" NetOptionRestore: restore options {{{2
+fun! s:NetOptionRestore()
+"  call Dfunc("s:NetOptionRestore()")
+  if !exists("w:netrw_optionsave")
+"   call Dret("s:NetOptionRestore : w:netrw_optionsave doesn't exist")
+   return
+  endif
+  unlet w:netrw_optionsave
+
+  if exists("&acd")
+   if exists("w:netrw_acdkeep") |let &l:acd    = w:netrw_acdkeep     |unlet w:netrw_acdkeep  |endif
+  endif
+  if exists("w:netrw_aikeep")   |let &l:ai     = w:netrw_aikeep      |unlet w:netrw_aikeep   |endif
+  if exists("w:netrw_awkeep")   |let &l:aw     = w:netrw_awkeep      |unlet w:netrw_awkeep   |endif
+  if exists("w:netrw_cikeep")   |let &l:ci     = w:netrw_cikeep      |unlet w:netrw_cikeep   |endif
+  if exists("w:netrw_cinkeep")  |let &l:cin    = w:netrw_cinkeep     |unlet w:netrw_cinkeep  |endif
+  if exists("w:netrw_cinokeep") |let &l:cino   = w:netrw_cinokeep    |unlet w:netrw_cinokeep |endif
+  if exists("w:netrw_comkeep")  |let &l:com    = w:netrw_comkeep     |unlet w:netrw_comkeep  |endif
+  if exists("w:netrw_cpokeep")  |let &l:cpo    = w:netrw_cpokeep     |unlet w:netrw_cpokeep  |endif
+  if exists("w:netrw_dirkeep")  |exe "lcd ".w:netrw_dirkeep          |unlet w:netrw_dirkeep  |endif
+  if exists("w:netrw_fokeep")   |let &l:fo     = w:netrw_fokeep      |unlet w:netrw_fokeep   |endif
+  if exists("w:netrw_gdkeep")   |let &l:gd     = w:netrw_gdkeep      |unlet w:netrw_gdkeep   |endif
+  if exists("w:netrw_hidkeep")  |let &l:hidden = w:netrw_hidkeep     |unlet w:netrw_hidkeep  |endif
+  if exists("w:netrw_magic")    |let &l:magic  = w:netrw_magic       |unlet w:netrw_magic    |endif
+  if exists("w:netrw_repkeep")  |let &l:report = w:netrw_repkeep     |unlet w:netrw_repkeep  |endif
+  if exists("w:netrw_spellkeep")|let &l:spell  = w:netrw_spellkeep   |unlet w:netrw_spellkeep|endif
+  if exists("w:netrw_twkeep")   |let &l:tw     = w:netrw_twkeep      |unlet w:netrw_twkeep   |endif
+  if exists("w:netrw_wigkeep")  |let &l:wig    = w:netrw_wigkeep     |unlet w:netrw_wigkeep  |endif
+  if exists("s:yykeep")         |let  @@       = s:yykeep            |unlet s:yykeep         |endif
+  if exists("w:netrw_swfkeep")
+   if &directory == ""
+    " user hasn't specified a swapfile directory;
+    " netrw will temporarily set the swapfile directory
+    " to the current directory as returned by getcwd().
+    let &l:directory   = getcwd()
+    silent! let &l:swf = w:netrw_swfkeep
+    setlocal directory=
+    unlet w:netrw_swfkeep
+   elseif &l:swf != w:netrw_swfkeep
+    " following line causes a Press ENTER in windows -- can't seem to work around it!!! (COMBAK)
+    silent! let &l:swf= w:netrw_swfkeep
+    unlet w:netrw_swfkeep
+   endif
+  endif
+  if exists("w:netrw_regstar") |silent! let @*= w:netrw_regstar |unlet w:netrw_regstar |endif
+  if exists("w:netrw_regslash")|silent! let @/= w:netrw_regslash|unlet w:netrw_regslash|endif
+
+"  call Dret("s:NetOptionRestore : restored user options")
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwSafeOptions: sets options to help netrw do its job {{{2
+fun! s:NetrwSafeOptions()
+"  call Dfunc("s:NetrwSafeOptions()")
+  setlocal cino=
+  setlocal com=
+  setlocal cpo-=aA
+  if exists("&acd")
+   setlocal noacd nocin noai noci magic nospell nohid wig= noaw
+   setlocal fo=nroql2
+  else
+   setlocal nocin noai noci magic nospell nohid wig= noaw
+   setlocal fo=nroql2
+  endif
+  setlocal tw=0
+  setlocal report=10000
+  if g:netrw_use_noswf && has("win32") && !has("win95")
+   setlocal noswf
+  endif
+"  call Dret("s:NetrwSafeOptions")
+endfun
+
+" ------------------------------------------------------------------------
 "  Netrw Transfer Functions: {{{1
 " ===============================
 
 " ------------------------------------------------------------------------
 " NetRead: responsible for reading a file over the net {{{2
+"   mode: =0 read remote file and insert before current line
+"         =1 read remote file and insert after current line
+"         =2 replace with remote file
+"         =3 obtain file, but leave in temporary format
 fun! netrw#NetRead(mode,...)
-"  call Dfunc("NetRead(mode=".a:mode.",...) a:0=".a:0)
-
-  " save options
+"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
+
+  " save options {{{3
   call s:NetOptionSave()
 
+  " 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
    let readcmd = "r"
   elseif a:mode == 2 " replace with remote file
    let readcmd = "%r"
+  elseif a:mode == 3 " skip read of file (leave as temporary)
+   let readcmd = "t"
   else
    exe a:mode
    let readcmd = "r"
@@ -320,18 +520,12 @@ fun! netrw#NetRead(mode,...)
   let ichoice = (a:0 == 0)? 0 : 1
 "  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
 
-  " get name of a temporary file and set up shell-quoting character {{{3
-  let tmpfile= tempname()
-"  call Decho("tmpfile<".tmpfile.">")
-  let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
-"  call Decho("tmpfile<".tmpfile.">")
-  if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
-   echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!" | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"   call Dret("NetRead :1 getcwd<".getcwd().">")
+  " Get Temporary Filename {{{3
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetRead : unable to get a tempfile!")
    return
   endif
-"  call Decho("tmpfile<".tmpfile.">")
 
   while ichoice <= a:0
 
@@ -359,12 +553,13 @@ fun! netrw#NetRead(mode,...)
      echomsg ':Nread rsync://machine[:port]/path          uses rsync'
      echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
      echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+     sleep 4
      break
 
-    elseif match(choice,"^\"") != -1
+    elseif match(choice,'^"') != -1
      " Reconstruct Choice if choice starts with '"'
 "     call Decho("reconstructing choice")
-     if match(choice,"\"$") != -1
+     if match(choice,'"$') != -1
       " case "..."
       let choice=strpart(choice,1,strlen(choice)-2)
      else
@@ -372,15 +567,14 @@ fun! netrw#NetRead(mode,...)
       let choice      = strpart(choice,1,strlen(choice)-1)
       let wholechoice = ""
 
-      while match(choice,"\"$") == -1
+      while match(choice,'"$') == -1
        let wholechoice = wholechoice . " " . choice
        let ichoice     = ichoice + 1
        if ichoice > a:0
        	if !exists("g:netrw_quiet")
-         echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
-         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
 	endif
-"        call Dret("NetRead :2 getcwd<".getcwd().">")
+"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
         return
        endif
        let choice= a:{ichoice}
@@ -393,36 +587,19 @@ fun! netrw#NetRead(mode,...)
 "   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
 
-   " fix up windows urls
-   if has("win32") || has("win95") || has("win64") || has("win16")
-    let choice = substitute(choice,'\\','/','ge')
-"    call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
-
-    if !g:netrw_keepdir
-     exe 'lcd ' . fnamemodify(tmpfile,':h')
-    endif
-    let tmpfile = fnamemodify(tmpfile,':t')
-   endif
-
    " Determine method of read (ftp, rcp, etc) {{{3
    call s:NetMethod(choice)
+   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
 
    " Check if NetBrowse() should be handling this request
 "   call Decho("checking if NetBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
-   if choice =~ "^.*[\/]$"
+   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
 "    call Decho("yes, choice matches '^.*[\/]$'")
-    keepjumps call s:NetBrowse(choice)
-"    call Dret("NetRead :3 getcwd<".getcwd().">")
+    keepjumps call s:NetBrowse(0,choice)
+"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
     return
    endif
 
-   " use filename's suffix for the temporary file
-   if b:netrw_fname =~ '\.[^./]\+$'
-    let suffix = substitute(b:netrw_fname,'^.*\(\.[^./]\+\)$','\1','e')
-    let tmpfile= substitute(tmpfile,"$",suffix,'e')
-"    call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
-   endif
-
    " ============
    " Perform Protocol-Based Read {{{3
    " ===========================
@@ -466,6 +643,10 @@ fun! netrw#NetRead(mode,...)
      setlocal ff=unix
      exe "put ='".g:netrw_ftpmode."'"
 "     call Decho("filter input: ".getline("."))
+     if exists("g:netrw_ftpextracmd")
+      exe "put ='".g:netrw_ftpextracmd."'"
+"      call Decho("filter input: ".getline("."))
+     endif
      exe "put ='".'get \"'.netrw_fname.'\" '.tmpfile."'"
 "     call Decho("filter input: ".getline("."))
      if exists("g:netrw_port") && g:netrw_port != ""
@@ -478,9 +659,8 @@ fun! netrw#NetRead(mode,...)
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       let debugkeep= &debug
-      set debug=msg
-      echohl Error | echo "***netrw*** ".getline(1) | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+      setlocal debug=msg
+      call netrw#ErrorMsg(s:ERROR,getline(1),4)
       let &debug= debugkeep
      endif
      bd!
@@ -517,8 +697,12 @@ fun! netrw#NetRead(mode,...)
      put =g:netrw_ftpmode
 "     call Decho("filter input: ".getline("."))
     endif
+    if exists("g:netrw_ftpextracmd")
+     exe "put ='".g:netrw_ftpextracmd."'"
+"     call Decho("filter input: ".getline("."))
+    endif
     put ='get \"'.netrw_fname.'\" '.tmpfile
-"     call Decho("filter input: ".getline("."))
+"    call Decho("filter input: ".getline("."))
 
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
@@ -531,12 +715,11 @@ fun! netrw#NetRead(mode,...)
     if getline(1) !~ "^$"
 "     call Decho("error<".getline(1).">")
      if !exists("g:netrw_quiet")
-      echohl Error | echo "***netrw*** ".getline(1) | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+      call netrw#ErrorMsg(s:ERROR,getline(1),5)
      endif
     endif
     bd!
-    let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+    let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
 
    ".........................................
@@ -548,14 +731,8 @@ fun! netrw#NetRead(mode,...)
     else
      let useport= ""
     endif
-    if g:netrw_cygwin == 1
-     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".cygtmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".cygtmpfile
-    else
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile
-    endif
+"    call  Decho("executing: !".g:netrw_scp_cmd.useport." '".g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape)."' ".tmpfile)
+    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_shq.g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape).g:netrw_shq." ".tmpfile
     let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
 
@@ -565,10 +742,9 @@ fun! netrw#NetRead(mode,...)
 "    call Decho("read via http (method #5)")
     if g:netrw_http_cmd == ""
      if !exists("g:netrw_quiet")
-      echohl Error | echo "***netrw*** neither wget nor fetch command is available" | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
      endif
-"     call Dret("NetRead :4 getcwd<".getcwd().">")
+"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
      return
     endif
 
@@ -592,6 +768,7 @@ fun! netrw#NetRead(mode,...)
      exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
     endif
     let b:netrw_lastfile = choice
+    setlocal ro
 
    ".........................................
    " cadaver: NetRead Method #6 {{{3
@@ -608,13 +785,7 @@ fun! netrw#NetRead(mode,...)
      put ='open '.g:netrw_machine
     endif
     put ='user '.g:netrw_uid.' '.g:netrw_passwd
-
-    if g:netrw_cygwin == 1
-     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-     put ='get '.netrw_fname.' '.cygtmpfile
-    else
-     put ='get '.netrw_fname.' '.tmpfile
-    endif
+    put ='get '.netrw_fname.' '.tmpfile
     put ='quit'
 
     " perform cadaver operation:
@@ -630,14 +801,8 @@ fun! netrw#NetRead(mode,...)
    elseif     b:netrw_method  == 7
 "    call Decho("read via rsync (method #7)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if g:netrw_cygwin == 1
-     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
-    else
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
-    endif
+"    call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
+    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
     let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
 
@@ -645,11 +810,11 @@ fun! netrw#NetRead(mode,...)
    " fetch: NetRead Method #8 {{{3
    "    fetch://[user@]host[:http]/path
    elseif     b:netrw_method  == 8
+"    call Decho("read via fetch (method #8)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if g:netrw_fetch_cmd == ""
      if !exists("g:netrw_quiet")
-      echohl Error | echo "***netrw*** fetch command not available" | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+      call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
      endif
 "     call Dret("NetRead")
     endif
@@ -670,154 +835,53 @@ fun! netrw#NetRead(mode,...)
 
     let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
+    setlocal ro
 
    ".........................................
    " sftp: NetRead Method #9 {{{3
    elseif     b:netrw_method  == 9
-"    call Decho("read via sftp (method #4)")
+"    call Decho("read via sftp (method #9)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if g:netrw_cygwin == 1
-     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
-"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile)
-     exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".cygtmpfile
-    else
-"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
-     exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
-    endif
+"    call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile)
+    exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".netrw_fname." ".tmpfile
     let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
     let b:netrw_lastfile = choice
 
    ".........................................
    " Complain {{{3
    else
-    echo "***warning*** unable to comply with your request<" . choice . ">"
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
    endif
   endwhile
 
   " cleanup {{{3
-"  call Decho("cleanup")
   if exists("b:netrw_method")
+"   call Decho("cleanup b:netrw_method and b:netrw_fname")
    unlet b:netrw_method
    unlet b:netrw_fname
   endif
-  call s:NetOptionRestore()
-
-"  call Dret("NetRead :5 getcwd<".getcwd().">")
-endfun
-
-" ------------------------------------------------------------------------
-" NetGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
-"    readcmd == %r : replace buffer with newly read file
-"            == 0r : read file at top of buffer
-"            == r  : read file after current line
-fun! s:NetGetFile(readcmd, tfile, method)
-"  call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
-
-  " get name of remote filename (ie. url and all)
-  let rfile= bufname("%")
-"  call Decho("rfile<".rfile.">")
-
-  if exists("*NetReadFixup")
-   " for the use of NetReadFixup (not otherwise used internally)
-   let line2= line("$")
-  endif
-
-  " transform paths from / to \ for Windows (except for cygwin)
-  if &term == "win32"
-   if g:netrw_cygwin
-    let tfile= a:tfile
-"    call Decho("(win32 && cygwin) tfile<".tfile.">")
-   else
-    let tfile= substitute(a:tfile,'/','\\\\','ge')
-"    call Decho("(win32 && !cygwin) tfile<".tfile.">")
-   endif
-  else
-   let tfile= a:tfile
-"   call Decho("tfile=a:tfile<".tfile.">")
+  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:System("delete",tmpfile)
   endif
-
-  if a:readcmd[0] == '%'
-  " get file into buffer
-
-"   call Dredir("ls!","starting buffer list")
-
-   " rename the current buffer to the temp file (ie. tfile)
-   keepalt exe "file ".tfile
-"   call Dredir("ls!","after renaming current buffer to <".tfile.">")
-
-   " edit temporary file (ie. read the temporary file in)
-   if     rfile =~ '\.zip$'
-    call zip#Browse(tfile)
-   elseif rfile =~ '\.tar$'
-    call tar#Browse(tfile)
-   else
-"    call Decho("edit temporary file")
-    e
-   endif
-
-   " rename buffer back to remote filename
-   keepalt exe "file ".escape(rfile,' ')
-   filetype detect
-"   call Dredir("ls!","renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">")
-   let line1 = 1
-   let line2 = line("$")
-
-  elseif filereadable(tfile)
-   " read file after current line
-   let curline = line(".")
-   let lastline= line("$")
-"   call Decho("exe<".a:readcmd." ".v:cmdarg." ".tfile.">  line#".curline)
-   exe a:readcmd." ".v:cmdarg." ".tfile
-   let line1= curline + 1
-   let line2= line("$") - lastline + 1
-
-  else
-   " not readable
-   echohl WarningMsg | echo "***netrw*** file <".tfile."> not readable"| echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"   call Dret("NetGetFile : tfile<".tfile."> not readable")
-   return
-  endif
-
-  " User-provided (ie. optional) fix-it-up command
-  if exists("*NetReadFixup")
-"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
-   call NetReadFixup(a:method, line1, line2)
-" else " Decho
-"  call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
-  endif
-
-  " update the Buffers menu
-  if has("gui") && has("gui_running")
-   silent! emenu Buffers.Refresh\ menu
-  endif
-
-"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".filereadable(a:tfile))
-
- " make sure file is being displayed
-  redraw!
-"  call Dret("NetGetFile")
+  call s:NetOptionRestore()
+
+"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
 endfun
 
 " ------------------------------------------------------------------------
 " NetWrite: responsible for writing a file over the net {{{2
 fun! netrw#NetWrite(...) range
-"  call Dfunc("NetWrite(a:0=".a:0.")")
+"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
 
   " option handling
   let mod= 0
   call s:NetOptionSave()
 
   " Get Temporary Filename {{{3
-  let tmpfile= tempname()
-"  call Decho("tmpfile<".tmpfile."> (raw)")
-  let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
-"  call Decho("tmpfile<".tmpfile."> (escaped)")
-  if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
-   echohl Error | echo "***netrw*** your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!"
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"   call Dret("NetWrite")
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetWrite : unable to get a tempfile!")
    return
   endif
 
@@ -827,20 +891,36 @@ fun! netrw#NetWrite(...) range
    let ichoice = 1
   endif
 
+  let curbufname= expand("%")
+"  call Decho("curbufname<".curbufname.">")
   if &binary
-   " for binary writes, write entire file.  Line numbers don't really make sense.
-   " Supports the writing of tar and zip files.
-"   call Decho("silent exe w! ".v:cmdarg." ".tmpfile)
+   " For binary writes, always write entire file.
+   " (line numbers don't really make sense for that).
+   " Also supports the writing of tar and zip files.
+"   call Decho("(write entire file) silent exe w! ".v:cmdarg." ".tmpfile)
    silent exe "w! ".v:cmdarg." ".tmpfile
+  elseif g:netrw_cygwin
+   " write (selected portion of) file to temporary
+   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
+"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".cygtmpfile)
+   silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".cygtmpfile
   else
    " write (selected portion of) file to temporary
-"   call Decho("silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile)
+"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile)
    silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
   endif
 
+  if curbufname == ""
+   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
+   " on the temporary file's name.  Deletion of the temporary file during
+   " cleanup then causes an error message.
+   0file!
+  endif
+
+  " While choice loop: {{{3
   while ichoice <= a:0
 
-   " Process arguments: {{{3
+   " Process arguments: {{{4
    " attempt to repeat with previous host-file-etc
    if exists("b:netrw_lastfile") && a:0 == 0
 "    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
@@ -862,6 +942,7 @@ fun! netrw#NetWrite(...) range
      echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
      echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
      echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
+     sleep 4
      break
 
     elseif match(choice,"^\"") != -1
@@ -878,10 +959,9 @@ fun! netrw#NetWrite(...) range
        let ichoice    = ichoice + 1
        if choice > a:0
        	if !exists("g:netrw_quiet")
-         echohl Error | echo "***netrw*** Unbalanced string in filename '". wholechoice ."'" | echohl None
-         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
 	endif
-"        call Dret("NetWrite")
+"        call Dret("netrw#NetWrite")
         return
        endif
        let choice= a:{ichoice}
@@ -890,30 +970,21 @@ fun! netrw#NetWrite(...) range
      endif
     endif
    endif
-"   call Decho("choice<" . choice . ">")
    let ichoice= ichoice + 1
-
-   " fix up windows urls
-   if has("win32") || has("win95") || has("win64") || has("win16")
-    let choice= substitute(choice,'\\','/','ge')
-    if !g:netrw_keepdir
-     exe 'lcd ' . fnamemodify(tmpfile,':h')
-    endif
-    let tmpfile = fnamemodify(tmpfile,':t')
-   endif
-
-   " Determine method of read (ftp, rcp, etc) {{{3
+"   call Decho("choice<" . choice . "> ichoice=".ichoice)
+
+   " Determine method of write (ftp, rcp, etc) {{{4
    call s:NetMethod(choice)
 
    " =============
-   " Perform Protocol-Based Write {{{3
+   " Perform Protocol-Based Write {{{4
    " ============================
    if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
     echo "(netrw) Processing your write request..."
    endif
 
    ".........................................
-   " rcp: NetWrite Method #1 {{{3
+   " rcp: NetWrite Method #1 {{{4
    if  b:netrw_method == 1
 "    call Decho("write via rcp (method #1)")
     if s:netrw_has_nt_rcp == 1
@@ -930,19 +1001,24 @@ fun! netrw#NetWrite(...) range
      endif
     endif
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname)
-    exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".netrw_fname
+"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".g:netrw_shq.tmpfile.g:netrw_shq." ".uid_machine.":".netrw_fname)
+    exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".g:netrw_shq.tmpfile.g:netrw_shq." ".uid_machine.":".netrw_fname
     let b:netrw_lastfile = choice
 
    ".........................................
-   " ftp + <.netrc>: NetWrite Method #2 {{{3
+   " ftp + <.netrc>: NetWrite Method #2 {{{4
    elseif b:netrw_method == 2
+"    call Decho("write via ftp+.netrc (method #2)")
     let netrw_fname= b:netrw_fname
     new
     setlocal ff=unix
     exe "put ='".g:netrw_ftpmode."'"
 "    call Decho(" filter input: ".getline("."))
-    exe "put ='"."put ".tmpfile.' \"'.netrw_fname.'\"'."'"
+    if exists("g:netrw_ftpextracmd")
+     exe "put ='".g:netrw_ftpextracmd."'"
+"     call Decho("filter input: ".getline("."))
+    endif
+    exe "put ='".'put \"'.tmpfile.'\" \"'.netrw_fname.'\"'."'"
 "    call Decho(" filter input: ".getline("."))
     if exists("g:netrw_port") && g:netrw_port != ""
 "     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
@@ -954,8 +1030,7 @@ fun! netrw#NetWrite(...) range
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
     if getline(1) !~ "^$"
      if !exists("g:netrw_quiet")
-      echohl Error | echo "***netrw*** ".getline(1) | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+      call netrw#ErrorMsg(s:ERROR,getline(1),14)
      endif
      let mod=1
     endif
@@ -963,8 +1038,10 @@ fun! netrw#NetWrite(...) range
     let b:netrw_lastfile = choice
 
    ".........................................
-   " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{3
+   " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{4
    elseif b:netrw_method == 3
+    " Construct execution string (four lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
     let netrw_fname= b:netrw_fname
     new
     setlocal ff=unix
@@ -984,7 +1061,7 @@ fun! netrw#NetWrite(...) range
      put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline("."))
     endif
-    put ='put '.tmpfile.' \"'.netrw_fname.'\"'
+    put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
 "    call Decho("filter input: ".getline("."))
     " save choice/id/password for future use
     let b:netrw_lastfile = choice
@@ -999,42 +1076,36 @@ fun! netrw#NetWrite(...) range
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
     if getline(1) !~ "^$"
      if  !exists("g:netrw_quiet")
-      echohl Error | echo "***netrw*** ".getline(1) | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+      call netrw#ErrorMsg(s:ERROR,getline(1),15)
      endif
      let mod=1
     endif
     bd!
 
    ".........................................
-   " scp: NetWrite Method #4 {{{3
+   " scp: NetWrite Method #4 {{{4
    elseif     b:netrw_method == 4
+"    call Decho("write via scp (method #4)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if exists("g:netrw_port") && g:netrw_port != ""
      let useport= " -P ".g:netrw_port
     else
      let useport= ""
     endif
-    if g:netrw_cygwin == 1
-     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".netrw_fname."'")
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." '".g:netrw_machine.":".netrw_fname."'"
-    else
-"     call  Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'")
-     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." '".g:netrw_machine.":".netrw_fname."'"
-    endif
+"    call Decho("exe ".g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq)
+    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq
     let b:netrw_lastfile = choice
 
    ".........................................
-   " http: NetWrite Method #5 {{{3
+   " http: NetWrite Method #5 {{{4
    elseif     b:netrw_method == 5
+"    call Decho("write via http (method #5)")
     if !exists("g:netrw_quiet")
-     echohl Error | echo "***netrw*** currently <netrw.vim> does not support writing using http:" | echohl None
-     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
     endif
 
    ".........................................
-   " dav: NetWrite Method #6 (cadaver) {{{3
+   " dav: NetWrite Method #6 (cadaver) {{{4
    elseif     b:netrw_method == 6
 "    call Decho("write via cadaver (method #6)")
 
@@ -1048,13 +1119,7 @@ fun! netrw#NetWrite(...) range
      put ='open '.g:netrw_machine
     endif
     put ='user '.g:netrw_uid.' '.g:netrw_passwd
-
-    if g:netrw_cygwin == 1
-     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-     put ='put '.cygtmpfile.' '.netrw_fname
-    else
-     put ='put '.tmpfile.' '.netrw_fname
-    endif
+    put ='put '.tmpfile.' '.netrw_fname
 
     " perform cadaver operation:
     norm! 1Gdd
@@ -1064,22 +1129,18 @@ fun! netrw#NetWrite(...) range
     let b:netrw_lastfile = choice
 
    ".........................................
-   " rsync: NetWrite Method #7 {{{3
+   " rsync: NetWrite Method #7 {{{4
    elseif     b:netrw_method == 7
+"    call Decho("write via rsync (method #7)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if g:netrw_cygwin == 1
-     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname)
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".netrw_fname
-    else
-"     call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname)
-     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname
-    endif
+"    call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname)
+    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname
     let b:netrw_lastfile = choice
 
    ".........................................
-   " sftp: NetWrite Method #9 {{{3
+   " sftp: NetWrite Method #9 {{{4
    elseif     b:netrw_method == 9
+"    call Decho("read via sftp (method #9)")
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
@@ -1088,7 +1149,8 @@ fun! netrw#NetWrite(...) range
     endif
     new
     setlocal ff=unix
-    put ='put '.tmpfile.' '.netrw_fname
+    put ='put \"'.escape(tmpfile,'\').'\" '.netrw_fname
+"    call Decho("filter input: ".getline("."))
     norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
     exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
@@ -1096,2714 +1158,167 @@ fun! netrw#NetWrite(...) range
     let b:netrw_lastfile= choice
 
    ".........................................
-   " Complain {{{3
+   " Complain {{{4
    else
-    echo "***warning*** unable to comply with your request<" . choice . ">"
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
    endif
   endwhile
 
-  " cleanup {{{3
+  " Cleanup: {{{3
 "  call Decho("cleanup")
-  let result=delete(tmpfile)
+  if s:FileReadable(tmpfile)
+"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
+   call s:System("delete",tmpfile)
+  endif
   call s:NetOptionRestore()
 
   if a:firstline == 1 && a:lastline == line("$")
-   let &mod= mod	" usually equivalent to set nomod
-  endif
-
-"  call Dret("NetWrite")
-endfun
-
-" ===========================================
-"  Remote Directory Browsing Support:    {{{1
-" ===========================================
-
-" ---------------------------------------------------------------------
-" NetBrowse: This function uses the command in g:netrw_list_cmd to get a list {{{2
-"  of the contents of a remote directory.  It is assumed that the
-"  g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
-"  with the requested remote hostname first.
-fun! s:NetBrowse(dirname)
-  if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
-"  call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".w:netrw_longlist)
-
-  if exists("s:netrw_skipbrowse")
-   unlet s:netrw_skipbrowse
-"   call Dret("NetBrowse")
-   return
-  endif
-
-  call s:NetOptionSave()
-
-  " sanity check
-  if exists("b:netrw_method") && b:netrw_method =~ '[235]'
-"   call Decho("b:netrw_method=".b:netrw_method)
-   if !executable("ftp")
-    if !exists("g:netrw_quiet")
-     echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ftp" | echohl None
-     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-    endif
-    call s:NetOptionRestore()
-"    call Dret("NetBrowse")
-    return
-   endif
-  elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
-   if !exists("g:netrw_quiet")
-    echohl Error | echo "***netrw*** this system doesn't support remote directory listing via ".g:netrw_list_cmd | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-
-    call s:NetOptionRestore()
-"   call Dret("NetBrowse")
-   return
-  endif
-
-  " use buffer-oriented WinVars if buffer ones exist but window ones don't
-  call s:UseBufWinVars()
-
-  " set up menus
-  let b:netrw_browser_active= 1
-  call s:NetMenu(1)
-
-  " make this buffer modifiable
-  setlocal ma nonu nowrap
-
-  " analyze a:dirname and g:netrw_list_cmd
-  let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
-  let dirname = substitute(a:dirname,'\\','/','ge')
-"  call Decho("dirname<".dirname.">")
-  if dirname !~ dirpat
-   if !exists("g:netrw_quiet")
-    echohl Error | echo "***netrw*** netrw doesn't understand your dirname<".dirname.">" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-    call s:NetOptionRestore()
-"   call Dret("NetBrowse : badly formatted dirname<".dirname.">")
-   return
-  endif
-
-  let method  = substitute(dirname,dirpat,'\1','')
-  let user    = substitute(dirname,dirpat,'\2','')
-  let machine = substitute(dirname,dirpat,'\3','')
-  let path    = substitute(dirname,dirpat,'\4','')
-  let fname   = substitute(dirname,'^.*/\ze.','','')
-"  call Decho("set up method <".method .">")
-"  call Decho("set up user   <".user   .">")
-"  call Decho("set up machine<".machine.">")
-"  call Decho("set up path   <".path   .">")
-"  call Decho("set up fname  <".fname  .">")
-
-  if method == "ftp" || method == "http"
-   let method  = "ftp"
-   let listcmd = g:netrw_ftp_list_cmd
-  else
-   let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
-  endif
-
-  if exists("b:netrw_method")
-"   call Decho("setting w:netrw_method<".b:netrw_method.">")
-   let w:netrw_method= b:netrw_method
-  endif
-
-  " optionally sort by time (-t) or by size (-S)
-  if listcmd == "dir" && g:netrw_sort_by =~ "^[ts]"
-   echohl WarningMsg | echo "***netrw*** windows' ftp doesn't support time/size sorts (get cygwin, set g:netrw_cygwin)" | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-  else
-   if g:netrw_sort_by =~ "^t"
-    let listcmd= listcmd."t"
-   elseif g:netrw_sort_by =~ "^s"
-    let listcmd= listcmd."S"
-   endif
-
-   " optionally sort in reverse
-   if g:netrw_sort_direction =~ "^r" && listcmd == "dir"
-    let listcmd= listcmd."r"
-   endif
-  endif
-
-"  call Decho("set up listcmd<".listcmd.">")
-  if fname =~ '@$' && fname !~ '^"'
-"   call Decho("attempt transfer of symlink as file")
-   call s:NetBrowse(substitute(dirname,'@$','','e'))
-   redraw!
-   call s:NetOptionRestore()
-"   call Dret("NetBrowse : symlink")
-   return
-
-  elseif fname !~ '[\/]$' && fname !~ '^"'
-   " looks like a regular file, attempt transfer
-"   call Decho("attempt transfer as regular file<".dirname.">")
-
-   " remove any filetype indicator from end of dirname, except for the
-   " "this is a directory" indicator (/).  There shouldn't be one of those,
-   " anyway.
-   let path= substitute(path,'[*=@|]\r\=$','','e')
-"   call Decho("new path<".path.">")
-
-   " remote-read the requested file into current buffer
-   mark '
-   keepjumps keepalt enew!
-   set ma
-"   call Decho("exe file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape))
-   exe "file ".method."://".user.machine."/".escape(path,s:netrw_cd_escape)
-   exe "silent doau BufReadPre ".fname
-   silent call netrw#NetRead(2,method."://".user.machine."/".path)
-   exe "silent doau BufReadPost ".fname
-
-   " save certain window-oriented variables into buffer-oriented variables
-   call s:SetBufWinVars()
-   call s:NetOptionRestore()
-   setlocal nomod nowrap
-
-"   call Dret("NetBrowse : file<".fname.">")
-   return
-  endif
-
-  " ---------------------------------------------------------------------
-  "  Perform Directory Listing:
-"  call Decho("Perform directory listing...")
-  " set up new buffer and map
-  let bufname   = method.'://'.user.machine.'/'.path
-  let bufnamenr = bufnr(bufname.'$')
-"  call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
-  mark '
-  if bufnamenr != -1
-   " buffer already exists, switch to it!
-"   call Decho("buffer already exists, switching to it")
-   exe "b ".bufnamenr
-   if line("$") >= 5
-    call s:NetOptionRestore()
-"    call Dret("NetBrowse")
-    return
-   endif
-  else
-"   call Decho("generate a new buffer")
-   keepjumps keepalt enew!
-  endif
-
-  " rename file to reflect where its from
-  setlocal bt=nofile bh=wipe nobl noswf
-  exe "setlocal ts=".g:netrw_maxfilenamelen
-"  call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
-  exe 'file '.escape(bufname,s:netrw_cd_escape)
-"  call Decho("renaming file to bufname<".bufname.">")
-  setlocal bt=nofile nobl nonu noswf
-  if g:netrw_fastbrowse >= 1
-   setlocal bh=hide
-  else
-   setlocal bh=delete
-  endif
-
-  " save current directory on directory history list
-  call s:NetBookmarkDir(3,expand("%"))
-
-  " set up buffer-local mappings
-"  call Decho("set up buffer-local mappings")
-  nnoremap <buffer> <silent> <cr>	:call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
-  nnoremap <buffer> <silent> <c-l>	:call <SID>NetRefresh(<SID>NetBrowseChgDir(expand("%"),'./'),0)<cr>
-  nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr>
-  nnoremap <buffer> <silent> a		:let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
-  if w:netrw_longlist != 2
-   nnoremap <buffer> <silent> b		:<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
-   nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
-  endif
-  nnoremap <buffer> <silent> Nb		:<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
-  nnoremap <buffer> <silent> NB		:<c-u>call <SID>NetBookmarkDir(0,expand("%"))<cr>
-  nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(0)<cr>
-  nnoremap <buffer> <silent> i		:call <SID>NetLongList(0)<cr>
-  nnoremap <buffer> <silent> o		:call <SID>NetSplit(0)<cr>
-  nnoremap <buffer> <silent> O		:call netrw#NetObtain()<cr>
-  nnoremap <buffer> <silent> P		:call <SID>NetPrevWinOpen(0)<cr>
-  nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
-  nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
-  nnoremap <buffer> <silent> s		:call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
-  nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
-  nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
-  nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
-  nnoremap <buffer> <silent> v		:call <SID>NetSplit(1)<cr>
-  nnoremap <buffer> <silent> x		:call netrw#NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
-  nnoremap <buffer> <silent> <2-leftmouse>	:call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
-  exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
-  exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
-  exe 'nnoremap <buffer> <silent> d	:call <SID>NetMakeDir("'.user.machine.'")<cr>'
-  exe 'nnoremap <buffer> <silent> D	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
-  exe 'vnoremap <buffer> <silent> D	:call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
-  exe 'nnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
-  exe 'vnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>'
-  nnoremap <buffer> <F1>			:he netrw-browse-cmds<cr>
-  setlocal ma nonu nowrap
-
-  " Set up the banner
-"  call Decho("set up the banner: sortby<".g:netrw_sort_by."> method<".method."> direction<".g:netrw_sort_direction.">")
-  keepjumps put ='\" ==========================================================================='
-  keepjumps put ='\" Netrw Remote Directory Listing                                 (netrw '.g:loaded_netrw.')'
-  keepjumps put ='\"   '.bufname
-  let w:netrw_bannercnt = 7
-  let sortby            = g:netrw_sort_by
-  if g:netrw_sort_direction =~ "^r"
-   let sortby           = sortby." reversed"
-  endif
-
-  if g:netrw_sort_by =~ "^n"
-   " sorted by name
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
-   keepjumps put ='\"   Sorted by      '.sortby
-   keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
-  else
-   " sorted by size or date
-   keepjumps put ='\"   Sorted by '.sortby
-  endif
-  if g:netrw_list_hide != "" && g:netrw_hide
-"   call Decho("g:netrw_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
-  keepjumps put ='\"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
-  keepjumps put ='\" ==========================================================================='
-
-  " remote read the requested directory listing
-  " Use ftp if that was the file-transfer method selected, otherwise use ssh
-  " Note that not all ftp servers honor the options for ls
-  if method == "ftp"
-   " use ftp to get remote file listing
-"   call Decho("use ftp to get remote file listing")
-   call s:NetBrowseFtpCmd(path,listcmd)
-   keepjumps 1d
-
-   if w:netrw_longlist == 0 || w:netrw_longlist == 2
-    " shorten the listing
-"    call Decho("generate short listing")
-    exe "keepjumps ".w:netrw_bannercnt
-
-    " cleanup
-    if g:netrw_ftp_browse_reject != ""
-     exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
-    endif
-    silent! keepjumps %s/\r$//e
-
-    " if there's no ../ listed, then put ./ and ../ in
-    let line1= line(".")
-    keepjumps 1
-    silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
-    let line2= line(".")
-    if line2 == 0
-     keepjumps put='../'
-     keepjumps put='./'
-    endif
-    exe "keepjumps ".line1
-    keepjumps norm! 0
-
-    " more 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'
-   endif
-
-  else
-   " use ssh to get remote file listing
-"   call Decho("use ssh to get remote file listing")
-   let shq= &shq? &shq : ( &sxq? &sxq : "'")
-"   call Decho("exe silent r! ".listcmd." '".shq.escape(path,s:netrw_cd_escape).shq."'")
-   exe "silent r! ".listcmd." ".shq.escape(path,s:netrw_cd_escape).shq
-   keepjumps 1d
-   " cleanup
-   if g:netrw_ftp_browse_reject != ""
-    exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
-   endif
-  endif
-
-  " set up syntax highlighting
-  if has("syntax")
-   setlocal ft=netrw
-   if !exists("g:syntax_on") || !g:syntax_on
-    setlocal ft=
-    " Ugly workaround -- when syntax highlighting is off and laststatus==2,
-    " sometimes the laststatus highlight bleeds into the entire display.
-    " Only seems to happen with remote browsing.  Weird.
-    redraw
-   endif
-  endif
-
-  " manipulate the directory listing (hide, sort)
-  if line("$") >= w:netrw_bannercnt
-   if g:netrw_hide && g:netrw_list_hide != ""
-    call s:NetrwListHide()
-   endif
-
-   if w:netrw_longlist == 1
-    " do a long listing; these substitutions need to be done prior to sorting
-"    call Decho("manipulate long listing")
-
-    if method == "ftp"
-     " cleanup
-     exe "keepjumps ".w:netrw_bannercnt
-     while getline(".") =~ g:netrw_ftp_browse_reject
-      keepjumps d
-     endwhile
-     " if there's no ../ listed, then put ./ and ../ in
-     let line1= line(".")
-     keepjumps 1
-     silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
-     let line2= line(".")
-     if line2 == 0
-      exe 'keepjumps '.w:netrw_bannercnt."put='./'"
-      exe 'keepjumps '.w:netrw_bannercnt."put='../'"
-     endif
-    exe "keepjumps ".line1
-    keepjumps norm! 0
-    endif
-
-    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
-   endif
-
-   if line("$") >= w:netrw_bannercnt
-    if g:netrw_sort_by =~ "^n"
-     call s:SetSort()
-     if g:netrw_sort_direction =~ 'n'
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
-     else
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
-     endif
-     " remove priority pattern prefix
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
-    endif
-    if w:netrw_longlist == 1
-     " shorten the list to keep its width <= winwidth characters
-     exe "silent keepjumps ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
-    endif
-   endif
-  endif
-
-  call s:NetrwWideListing()
-  if line("$") >= w:netrw_bannercnt
-   " place cursor on the top-left corner of the file listing
-   exe "keepjumps ".w:netrw_bannercnt
-   norm! 0
-  endif
-
-  call s:NetOptionRestore()
-  setlocal nomod noma nonu
-
-"  call Dret("NetBrowse")
-  return
-endfun
-
-" ---------------------------------------------------------------------
-" NetBrowseChgDir: {{{2
-fun! s:NetBrowseChgDir(dirname,newdir)
-"  call Dfunc("NetBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)")
-
-  let dirname= a:dirname
-  let newdir = a:newdir
-
-  if newdir !~ '[\/]$'
-   " handling a file
-   let dirname= dirname.newdir
-   let didfile= 0
-   if g:netrw_browse_split == 1
-    new
-    wincmd _
-   elseif g:netrw_browse_split == 2
-    rightb vert new
-    wincmd |
-   else
-    " handling a file, didn't split, so possibly remove menu
-    call s:NetMenu(0)
-   endif
-"   call Decho("handling a file: dirname<".dirname.">")
-
-  elseif newdir == './'
-   " refresh the directory list
-"   call Decho("refresh directory listing")
-   setlocal ma nobl
-   if g:netrw_fastbrowse >= 1
-    setlocal bh=hide
-   else
-    setlocal bh=delete
-   endif
-   %d
-
-  elseif newdir == '../'
-   " go up one directory
-   let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
-
-   if trailer =~ '^\%(\.\./\)*$'
-    " tack on a ../"
-    let dirname= dirname.'../'
-
-   else
-    " strip off a directory name from dirname
-    let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
-   endif
-"   call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
-
-  else
-   " go down one directory
-   let dirname= dirname.newdir
-"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
-  endif
-
-"  call Dret("NetBrowseChgDir <".dirname.">")
-  return dirname
-endfun
-
-" ---------------------------------------------------------------------
-"  NetGetWord: it gets the directory named under the cursor {{{2
-fun! s:NetGetWord()
-"  call Dfunc("NetGetWord() line#".line(".")." longlist=".g:netrw_longlist." virtcol=".virtcol("."))
-  call s:UseBufWinVars()
-
-  " insure that w:netrw_longlist is set up
-  if !exists("w:netrw_longlist")
-   if exists("g:netrw_longlist")
-    let w:netrw_longlist= g:netrw_longlist
-   else
-    let w:netrw_longlist= 0
-   endif
-"   call Decho("w:netrw_longlist=".w:netrw_longlist)
-  endif
-
-  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
-   " Active Banner support
-"   call Decho("active banner handling")
-   norm! 0
-   let dirname= "./"
-   let curline= getline(".")
-   if curline =~ '"\s*Sorted by\s'
-    norm s
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "s" also works'
-   elseif curline =~ '"\s*Sort sequence:'
-    let s:netrw_skipbrowse= 1
-    echo 'Press "S" to edit sorting sequence'
-   elseif curline =~ '"\s*Quick Help:'
-    norm ?
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "?" also works'
-   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
-    norm a
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "a" also works'
-   elseif line("$") > w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt
-   endif
-
-  elseif w:netrw_longlist == 0
-"   call Decho("thin column handling")
-   norm! 0
-   let dirname= getline(".")
-
-  elseif w:netrw_longlist == 1
-"   call Decho("long column handling")
-   norm! 0
-   let dirname= substitute(getline("."),'^\(\%(\S\+\s\)*\S\+\).\{-}$','\1','e')
-
-  else
-"   call Decho("obtain word from wide listing")
-   let dirname= getline(".")
-
-   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 Decho("computed cpf")
-   endif
-
-   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
-"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
-"   call Decho("1: dirname<".dirname.">")
-   if filestart > 0|let dirname= substitute(dirname,'^.\{'.filestart.'}','','')|endif
-"   call Decho("2: dirname<".dirname.">")
-   let dirname   = substitute(dirname,'^\(.\{'.b:netrw_cpf.'}\).*$','\1','e')
-"   call Decho("3: dirname<".dirname.">")
-   let dirname   = substitute(dirname,'\s\+$','','e')
-"   call Decho("4: dirname<".dirname.">")
+   " restore modifiability; usually equivalent to set nomod
+   let &mod= mod
   endif
 
-"  call Dret("NetGetWord <".dirname.">")
-  return dirname
-endfun
-
-" ---------------------------------------------------------------------
-" NetBrowseRm: remove/delete a remote file or directory {{{2
-fun! s:NetBrowseRm(usrhost,path) range
-"  call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol("."))
-"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
-
-  " preparation for removing multiple files/directories
-  let ctr= a:firstline
-  let all= 0
-
-  " remove multiple files and directories
-  while ctr <= a:lastline
-   exe ctr
-
-   let rmfile= s:NetGetWord()
-"   call Decho("rmfile<".rmfile.">")
-
-   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
-    " attempt to remove file
-    if !all
-     echohl Statement
-     call inputsave()
-     let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-     call inputrestore()
-     echohl NONE
-     if ok == ""
-      let ok="no"
-     endif
-     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-     if ok =~ 'a\%[ll]'
-      let all= 1
-     endif
-    endif
-
-    if all || ok =~ 'y\%[es]' || ok == ""
-     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-      silent! keepjumps .,$d
-      call s:NetBrowseFtpCmd(a:path,"delete ".rmfile)
-     else
-      let netrw_rm_cmd= substitute(g:netrw_rm_cmd,'HOSTNAME',a:usrhost,'').' "'.escape(a:path.rmfile,s:netrw_cd_escape).'"'
-"      call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
-      let ret= system(netrw_rm_cmd)
-"      call Decho("returned=".ret." errcode=".v:shell_error)
-     endif
-    elseif ok =~ 'q\%[uit]'
-     break
-    endif
-
-   else
-    " attempt to remove directory
-    if !all
-     call inputsave()
-     let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-     call inputrestore()
-     if ok == ""
-      let ok="no"
-     endif
-     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-     if ok =~ 'a\%[ll]'
-      let all= 1
-     endif
-    endif
-
-    if all || ok =~ 'y\%[es]' || ok == ""
-     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-      call s:NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
-     else
-      let rmfile         = a:path.rmfile
-      let netrw_rmdir_cmd= substitute(g:netrw_rmdir_cmd,'HOSTNAME',a:usrhost,'').' '."'".'"'.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
-       let netrw_rmf_cmd= substitute(g:netrw_rmf_cmd,'HOSTNAME',a:usrhost,'').' '.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)
-
-       if v:shell_error != 0 && !exists("g:netrw_quiet")
-        echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
-        call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-       endif
-      endif
-     endif
-
-    elseif ok =~ 'q\%[uit]'
-     break
-    endif
-   endif
-
-   let ctr= ctr + 1
-  endwhile
-
-  " refresh the directory
-  let curline= line(".")-1
-"  call Decho("refresh the directory")
-  call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
-  exe curline
-
-"  call Dret("NetBrowseRm")
-endfun
-
-" ---------------------------------------------------------------------
-" NetBrowseRename: rename a remote file or directory {{{2
-fun! s:NetBrowseRename(usrhost,path) range
-"  call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
-
-  " preparation for removing multiple files/directories
-  let ctr        = a:firstline
-  let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'')
-
-  " attempt to rename files/directories
-  while ctr <= a:lastline
-   exe "keepjumps ".ctr
-
-   norm! 0
-   let oldname= s:NetGetWord()
-"   call Decho("oldname<".oldname.">")
-
-   call inputsave()
-   let newname= input("Moving ".oldname." to : ",oldname)
-   call inputrestore()
-
-   if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-    call s:NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
-   else
-    let oldname= a:path.oldname
-    let newname= a:path.newname
-"    call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,s:netrw_cd_escape).'"')
-    let ret= system(rename_cmd.' "'.escape(oldname,s:netrw_cd_escape).'" "'.escape(newname,s:netrw_cd_escape).'"')
-   endif
-
-   let ctr= ctr + 1
-  endwhile
-
-  " refresh the directory
-  let curline= line(".")
-  call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
-  exe "keepjumps ".curline
-"  call Dret("NetBrowseRename")
-endfun
-
-" ---------------------------------------------------------------------
-" NetRefresh: {{{2
-fun! s:NetRefresh(dirname,islocal)
-"  call Dfunc("NetRefresh(dirname<".a:dirname.">,islocal=".a:islocal.")")
-  call netrw#NetSavePosn()
-  set ma
-  %d
-  if a:islocal
-   call s:LocalBrowse(a:dirname)
-  else
-   call s:NetBrowse(a:dirname)
-  endif
-  call netrw#NetRestorePosn()
-  redraw!
-"  call Dret("NetRefresh")
-endfun
-
-" ---------------------------------------------------------------------
-" NetSplit: mode {{{2
-"           =0 : net   and o
-"           =1 : net   and v
-"           =2 : local and o
-"           =3 : local and v
-fun! s:NetSplit(mode)
-"  call Dfunc("NetSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
-
-  call s:SaveWinVars()
-  if a:mode == 0
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
-   call s:CopyWinVars()
-   exe "norm! 0"
-   call s:NetBrowse(s:NetBrowseChgDir(expand("%"),s:NetGetWord()))
-  elseif a:mode ==1
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
-   call s:CopyWinVars()
-   exe "norm! 0"
-   call s:NetBrowse(s:NetBrowseChgDir(expand("%"),s:NetGetWord()))
-  elseif a:mode ==2
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
-   call s:CopyWinVars()
-   exe "norm! 0"
-   call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,s:NetGetWord()))
-  else
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
-   call s:CopyWinVars()
-   exe "norm! 0"
-   call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,s:NetGetWord()))
-  endif
-
-"  call Dret("NetSplit")
-endfun
-
-" ---------------------------------------------------------------------
-" NetBrowseX:  allows users to write custom functions to operate on {{{2
-"              files given their extension.  Passes 0=local, 1=remote
-fun! netrw#NetBrowseX(fname,remote)
-"  call Dfunc("NetBrowseX(fname<".a:fname."> remote=".a:remote.")")
-
-  " 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
-  let fname= escape(a:fname,"%#")
-"  call Decho("fname<".fname."> after escape()")
-
-  " seems kde systems often have gnome-open due to dependencies, even though
-  " gnome-open's subsidiary display tools are largely absent.  Kde systems
-  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
-  if !exists("s:haskdeinit")
-   if has("unix")
-    silent! let s:haskdeinit= system('ps -e') =~ 'kdeinit'
-    if v:shell_error
-     let s:haskdeinit = 0
-    endif
-   else
-    let s:haskdeinit= 0
-   endif
-"   call Decho("setting s:haskdeinit=".s:haskdeinit)
-  endif
-
-  if a:remote == 1
-   " create a local copy
-   let fname= tempname().".".exten
-"   call Decho("a:remote==1: create a local copy of <".a:fname."> as <".fname.">")
-   exe "silent keepjumps bot 1new ".a:fname
-   set bh=delete
-   exe "w! ".fname
-   q
-  endif
-"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
-
-  " set up redirection
-  if &srr =~ "%s"
-   let redir= substitute(&srr,"%s","/dev/null","")
-  else
-   let redir= &srr . "/dev/null"
-  endif
-"  call Decho("redir{".redir."} srr{".&srr."}")
-
-  if exists("g:netrw_browsex_viewer") && executable(g:netrw_browsex_viewer)
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-   if g:netrw_browsex_viewer == '-'
-    let ret= netrwFileHandlers#Invoke(exten,fname)
-   else
-"    call Decho("exe silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."' ".redir)
-    exe "silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."'".redir
-    let ret= v:shell_error
-   endif
-
-  " execute the file handler
-  elseif has("win32") || has("win64")
-"   call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"')
-   exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
-   let ret= v:shell_error
-
-  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
-"   call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
-   exe "silent !gnome-open '".escape(fname,'%#')."'".redir
-   let ret= v:shell_error
-
-  elseif has("unix") && executable("kfmclient") && s:haskdeinit
-"   call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
-   exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
-   let ret= v:shell_error
-
-  else
-   " netrwFileHandlers#Invoke() always returns 0
-   let ret= netrwFileHandlers#Invoke(exten,fname)
-  endif
-
-  " if unsuccessful, attempt netrwFileHandlers#Invoke()
-  if ret
-   let ret= netrwFileHandlers#Invoke(exten,fname)
-  endif
-
-  redraw!
-
-  " cleanup: remove temporary file,
-  "          delete current buffer if success with handler,
-  "          return to prior buffer (directory listing)
-  if a:remote == 1 && fname != a:fname
-"   call Decho("deleting temporary file<".fname.">")
-   call delete(fname)
-  endif
-
-  if a:remote == 1
-   set bh=delete bt=nofile noswf
-   exe "norm! \<c-o>"
-   redraw!
-  endif
-
-"  call Dret("NetBrowseX")
-endfun
-
-" ---------------------------------------------------------------------
-" NetBrowseFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2
-"  This function assumes that a long listing will be received.  Size, time,
-"  and reverse sorts will be requested of the server but not otherwise
-"  enforced here.
-fun! s:NetBrowseFtpCmd(path,listcmd)
-"  call Dfunc("NetBrowseFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
-
-  " because WinXX ftp uses unix style input
-  " curline is one more than the bannercnt in order to account
-  " for the unwanted first blank line (doing a :put to an empty
-  " buffer yields a blank first line)
-  let ffkeep= &ff
-  setlocal ma ff=unix
-  let curline= w:netrw_bannercnt+1
-  exe "silent! keepjumps ".curline.",$d"
-
-  ".........................................
-  if w:netrw_method == 2 || w:netrw_method == 5 
-   " ftp + <.netrc>:  Method #2
-   if a:path != ""
-    put ='cd \"'.a:path.'\"'
-"    call Decho('ftp:  '.getline("."))
-   endif
-   exe "put ='".a:listcmd."'"
-"   call Decho("ftp:  ".getline("."))
-"    redraw!|call inputsave()|call input("Pausing...")|call inputrestore()
-   if exists("g:netrw_port") && g:netrw_port != ""
-"    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
-    exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
-   else
-"    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
-    exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
-   endif
-
-   ".........................................
-  elseif w:netrw_method == 3
-   " ftp + machine,id,passwd,filename:  Method #3
-    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
-
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
-     put ='\"'.g:netrw_passwd.'\"'
-    else
-     put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
-    endif
-
-   if a:path != ""
-    put ='cd \"'.a:path.'\"'
-   endif
-   exe "put ='".a:listcmd."'"
-
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-"    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
-    exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n"
-
-   ".........................................
-  else
-    echo "***warning*** unable to comply with your request<" . choice . ">"
-  endif
-
-  " cleanup for Windows
-  if has("win32") || has("win95") || has("win64") || has("win16")
-   silent! keepjumps! %s/\r$//e
-  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/$/@/
-   if w:netrw_longlist == 0 || w:netrw_longlist == 2
-    exe "silent! keepjumps ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
-   endif
-  endif
-
-  " ftp's ls doesn't seem to include ./ or ../
-  if !search('^\.\/$','wn')
-   exe 'keepjumps '.curline
-   if a:path !~ '^$'
-    put ='../'
-   endif
-   put ='./'
-   exe 'keepjumps '.curline
-  endif
-
-  " restore settings
-  let &ff= ffkeep
-"  call Dret("NetBrowseFtpCmd")
-endfun
-
-" ---------------------------------------------------------------------
-" NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
-" separated patterns given in g:netrw_list_hide
-fun! s:NetrwListHide()
-"  call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
-
-  " find a character not in the "hide" string to used as a separator
-  " for :g and :v commands
-  let listhide= g:netrw_list_hide
-  let sep     = strpart(substitute('~!@#$%^&*{};:,<.>/?|abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1)
-"  call Decho("sep=".sep)
-
-  while listhide != ""
-   if listhide =~ ','
-    let hide     = substitute(listhide,',.*$','','e')
-    let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
-   else
-    let hide     = listhide
-    let listhide= ""
-   endif
-
-   " Prune the list by hiding any files which match
-   if g:netrw_hide == 1
-"    call Decho("hiding<".hide."> listhide<".listhide.">")
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
-   elseif g:netrw_hide == 2
-"    call Decho("showing<".hide."> listhide<".listhide.">")
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
-   endif
-  endwhile
-  if g:netrw_hide == 2
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
-  endif
-
-"  call Dret("NetrwListHide")
-endfun
-
-" ---------------------------------------------------------------------
-" NetHideEdit: allows user to edit the file/directory hiding list
-fun! s:NetHideEdit(islocal)
-"  call Dfunc("NetHideEdit(islocal=".a:islocal.")")
-
-  " get new hiding list from user
-  call inputsave()
-  let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
-  call inputrestore()
-  let g:netrw_list_hide= newhide
-"  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
-
-  " refresh the listing
-  if a:islocal == 0
-   silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
-  else
-   silent call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,"./"),a:islocal)
-  endif
-
-"  call Dret("NetHideEdit")
-endfun
-
-" ---------------------------------------------------------------------
-" NetSortSequence: allows user to edit the sorting sequence
-fun! s:NetSortSequence(mode)
-"  call Dfunc("NetSortSequence(mode=".a:mode.")")
-
-  call inputsave()
-  let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
-  call inputrestore()
-
-  " refresh the listing
-  let g:netrw_sort_sequence= newsortseq
-  if a:mode == 0
-   silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
-  else
-   silent call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,"./"))
-  endif
-
-"  call Dret("NetSortSequence")
-endfun
-
-" ---------------------------------------------------------------------
-"  NetLongList: {{{2
-fun! s:NetLongList(mode)
-"  call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".w:netrw_longlist)
-  let fname            = s:NetGetWord()
-  let w:netrw_longlist = (w:netrw_longlist + 1) % 3
-"  call Decho("fname<".fname.">")
-
-  if w:netrw_longlist == 0
-   " use one column listing
-"   call Decho("use one column list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
-
-  elseif w:netrw_longlist == 1
-   " use long list
-"   call Decho("use long list")
-   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
-
-  else
-   " give wide list
-"   call Decho("use wide list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
-  endif
-  setlocal ma
-
-  " clear buffer - this will cause NetBrowse/LocalBrowse to do a refresh
-  %d
-
-  " refresh the listing
-  if a:mode == 0
-   silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),"./"))
-  else
-   silent call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,"./"))
-  endif
-
-  " keep cursor on the filename
-  silent keepjumps $
-  if fname =~ '/$'
-   silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
-  else
-   silent call search('\%(^\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bW')
-  endif
-
-"  call Dret("NetLongList : w:netrw_longlist=".w:netrw_longlist)
-endfun
-
-" ---------------------------------------------------------------------
-" NetrwWideListing: {{{2
-fun! s:NetrwWideListing()
-
-  if w:netrw_longlist == 2
-"   call Dfunc("NetrwWideListing() w:netrw_longlist=".w:netrw_longlist)
-   " look for longest filename (cpf=characters per filename)
-   " cpf: characters per file
-   " fpl: files per line
-   " fpc: files per column
-   set ma
-   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'
-   else
-"    call Dret("NetrwWideListing")
-    return
-   endif
-"   call Decho("max file strlen+1=".b:netrw_cpf)
-   let b:netrw_cpf= b:netrw_cpf + 1
-
-   " 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)
-
-   " make wide display
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=printf("%-'.b:netrw_cpf.'s",escape(submatch(0),"\\"))/'
-   let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
-   let newcolstart = w:netrw_bannercnt + fpc
-   let newcolend   = newcolstart + fpc - 1
-"   call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]")
-   while line("$") >= newcolstart
-    if newcolend > line("$") | let newcolend= line("$") | endif
-    let newcolqty= newcolend - newcolstart
-    exe newcolstart
-    if newcolqty == 0
-     exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
-    else
-     exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
-    endif
-    exe "silent keepjumps ".newcolstart.','.newcolend.'d'
-    exe 'silent keepjumps '.w:netrw_bannercnt
-   endwhile
-   exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
-   setlocal noma nomod
-"   call Dret("NetrwWideListing")
-  endif
-
-endfun
-
-" ---------------------------------------------------------------------
-" NetSaveWordPosn: used by the "s" command in both remote and local {{{2
-" browsing.  Along with NetRestoreWordPosn(), it keeps the cursor on
-" the same word even though the sorting has changed its order of appearance.
-fun! s:NetSaveWordPosn()
-"  call Dfunc("NetSaveWordPosn()")
-  let s:netrw_saveword= '^'.escape(getline("."),s:netrw_cd_escape).'$'
-"  call Dret("NetSaveWordPosn : saveword<".s:netrw_saveword.">")
-endfun
-
-" ---------------------------------------------------------------------
-" NetRestoreWordPosn: used by the "s" command; see NetSaveWordPosn() above {{{2
-fun! s:NetRestoreWordPosn()
-"  call Dfunc("NetRestoreWordPosn()")
-  silent! call search(s:netrw_saveword,'w')
-"  call Dret("NetRestoreWordPosn")
-endfun
-
-" ---------------------------------------------------------------------
-" NetMakeDir: this function makes a directory (both local and remote) {{{2
-fun! s:NetMakeDir(usrhost)
-"  call Dfunc("NetMakeDir(usrhost<".a:usrhost.">)")
-
-  " get name of new directory from user.  A bare <CR> will skip.
-  " if its currently a directory, also request will be skipped, but with
-  " a message.
-  call inputsave()
-  let newdirname= input("Please give directory name: ")
-  call inputrestore()
-"  call Decho("newdirname<".newdirname.">")
-
-  if newdirname == ""
-"   call Dret("NetMakeDir : user aborted with bare <cr>")
-   return
-  endif
-
-  if a:usrhost == ""
-
-   " Local mkdir:
-   " sanity checks
-   let fullnewdir= b:netrw_curdir.'/'.newdirname
-"   call Decho("fullnewdir<".fullnewdir.">")
-   if isdirectory(fullnewdir)
-    if !exists("g:netrw_quiet")
-     echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a directory!" | echohl None
-     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-    endif
-"    call Dret("NetMakeDir : directory<".newdirname."> exists previously")
-    return
-   endif
-   if filereadable(fullnewdir)
-    if !exists("g:netrw_quiet")
-     echohl WarningMsg | echo "***netrw*** <".newdirname."> is already a file!" | echohl None
-     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-    endif
-"    call Dret("NetMakeDir : file<".newdirname."> exists previously")
-    return
-   endif
-
-   " requested new local directory is neither a pre-existing file or
-   " directory, so make it!
-   if exists("*mkdir")
-    call mkdir(fullnewdir,"p")
-   else
-    let netrw_origdir= s:NetGetcwd(1)
-    exe 'keepjumps cd '.b:netrw_curdir
-"    call Decho("netrw_origdir<".netrw_origdir.">: cd b:netrw_curdir<".b:netrw_curdir.">")
-"    call Decho("exe silent! !".g:netrw_local_mkdir.' "'.newdirname.'"')
-    exe "silent! !".g:netrw_local_mkdir.' "'.newdirname.'"'
-    if !g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
-    if !g:netrw_keepdir
-     exe 'keepjumps cd '.netrw_origdir
-"     call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".netrw_origdir)
-    endif
-   endif
-
-   if v:shell_error == 0
-    " refresh listing
-"    call Decho("refresh listing")
-    let linenum= line(".")
-    norm! H0
-    let hline  = line(".")
-    set ma|norm! 2D
-    call s:LocalBrowse(s:LocalBrowseChgDir(b:netrw_curdir,'./'))
-    exe "norm! ".hline."G0z\<CR>"
-    exe linenum
-   elseif !exists("g:netrw_quiet")
-    echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-   redraw!
-
-  else
-   " Remote mkdir:
-   let mkdircmd  = substitute(g:netrw_mkdir_cmd,'\<HOSTNAME\>',a:usrhost,'')
-   let newdirname= "'".'"'.substitute(expand("%"),'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname.'"'."'"
-"   call Decho("exe silent! !".mkdircmd." ".newdirname)
-   exe "silent! !".mkdircmd." ".newdirname
-   if v:shell_error == 0
-    " refresh listing
-    let linenum= line(".")
-    norm! H0
-    let hline  = line(".")
-    call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./'))
-    exe "norm! ".hline."G0z\<CR>"
-    exe linenum
-   elseif !exists("g:netrw_quiet")
-    echohl Error | echo "***netrw*** unable to make directory<".newdirname.">" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-   redraw!
-  endif
-
-"  call Dret("NetMakeDir")
-endfun
-
-" ---------------------------------------------------------------------
-"  NetBookmarkDir: {{{2
-"    0: (user: <b>)   bookmark current directory
-"    1: (user: <B>)   change to the bookmarked directory
-"    2: (user: <q>)   list bookmarks
-"    3: (LocalBrowse) record current directory history
-"    4: (user: <u>)   go up   (previous) bookmark
-"    5: (user: <U>)   go down (next)     bookmark
-fun! s:NetBookmarkDir(chg,curdir)
-"  call Dfunc("NetBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count)
-  if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
-   " looks like a "b" was pressed while in the banner region
-   if line("$") > w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt
-   endif
-   if &ch > 1
-    " "clear" the message
-    echo ""
-   endif
-"  call Dret("NetBookmarkDir - ignoring")
-   return
-  endif
-
-  if a:chg == 0
-   " bookmark the current directory
-   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
-   echo "bookmarked the current directory"
-
-  elseif a:chg == 1
-   " change to the bookmarked directory
-   if exists("g:NETRW_BOOKMARKDIR_{v:count}")
-    exe "e ".g:NETRW_BOOKMARKDIR_{v:count}
-   else
-    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
-   endif
-
-  elseif a:chg == 2
-   " 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}
-     endif
-     let cnt= cnt + 1
-    endwhile
-   endif
-
-   " list directory history
-   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)
-    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}
-    endif
-    let first = 0
-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
-    if cnt < 0
-     let cnt= cnt + g:netrw_dirhistmax
-    endif
-   endwhile
-
-  elseif a:chg == 3
-   " saves most recently visited directories (when they differ)
-   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')
-"    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
-   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}.">")
-    exe "e ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
-   else
-    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
-   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}.">")
-    exe "e ".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
-    endif
-    echo "Sorry, no successor directory exists yet"
-   endif
-  endif
-"  call Dret("NetBookmarkDir")
+"  call Dret("netrw#NetWrite")
 endfun
 
 " ---------------------------------------------------------------------
-" NetObtain: obtain file under cursor (for remote browsing support) {{{2
-fun! netrw#NetObtain(...)
-"  call Dfunc("NetObtain() a:0=".a:0)
-
-  if a:0==0
-   " no arguments -- use word under cursor
-   let fname= expand("<cWORD>")
-"   call Decho("no arguments, use <".fname.">")
-  elseif a:0 > 1
-   " more than one argument, recurse with each argument separately
-"   call Decho("more than 1 argument, use recursion")
-   let i=1
-   while i <= a:0
-    call netrw#NetObtain(a:{i})
-    let i=i+1
-   endwhile
-   return
-  else
-   " one argument provided
-   let fname              = a:1
-   let keep_netrw_choice  = exists("b:netrw_choice")?  b:netrw_choice  : ""
-   let keep_netrw_fname   = exists("b:netrw_fname")?   b:netrw_fname   : ""
-   let keep_netrw_wmethod = exists("w:netrw_method")?  w:netrw_method  : ""
-   call s:NetMethod(fname)
-   let w:netrw_method= b:netrw_method
-   let fname         = b:netrw_fname
-"   call Decho("g:netrw_scp_cmd<".g:netrw_scp_cmd.">")
-"   call Decho("g:netrw_machine<".g:netrw_machine.">")
-"   call Decho("fname<".fname.">")
-  endif
-
-  " NetrwStatusLine support - for obtaining support
-  call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
-
-  if exists("w:netrw_method") && w:netrw_method =~ '[235]'
-"   call Decho("method=".w:netrw_method)
-   if executable("ftp")
-"    call Decho("ftp is executable, method=".w:netrw_method)
-    let curdir = expand("%")
-    let path   = substitute(curdir,'ftp://[^/]\+/','','e')
-    let curline= line(".")
-    let endline= line("$")+1
-    set ma
-    keepjumps $
-"    call Decho("getcwd<".getcwd().">")
-"    call Decho("curdir<".curdir.">")
-"    call Decho("path<".path.">")
-"    call Decho("curline=".curline)
-"    call Decho("endline=".endline)
-
-    ".........................................
-    if w:netrw_method == 2
-     " ftp + <.netrc>: Method #2
-     setlocal ff=unix
-     if path != ""
-      put ='cd '.path
-"      call Decho("ftp:  cd ".path)
-     endif
-     put ='get '.fname
-"     call Decho("ftp:  get ".fname)
-     put ='quit'
-"     call Decho("ftp:  quit")
-     if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
-      exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
-     else
-"      call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
-      exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
-     endif
-
-   ".........................................
-  elseif w:netrw_method == 3
-   " ftp + machine,id,passwd,filename: Method #3
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho('ftp:  open '.g:netrw_machine.' '.g:netrw_port)
-    else
-     put ='open '.g:netrw_machine
-"     call Decho('ftp:  open '.g:netrw_machine)
-    endif
-
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
-     put ='\"'.g:netrw_passwd.'\"'
-"     call Decho('ftp:  g:netrw_uid')
-"     call Decho('ftp:  g:netrw_passwd')
-    else
-     put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
-"     call Decho('user '.g:netrw_uid.' '.g:netrw_passwd)
-    endif
-
-   if a:path != ""
-    put ='cd '.a:path
-"    call Decho('cd '.a:path)
-   endif
-   exe "put ='".a:cmd."'"
-"   call Decho("ftp:  ".a:cmd)
-
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-"    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
-    exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
-
-    ".........................................
-    else
-      echo "***warning*** unable to comply with your request<" . choice . ">"
-    endif
-    " restore
-    exe "silent! ".endline.",$d"
-    exe "keepjumps ".curline
-    setlocal noma nomod
-   else
-"    call Decho("ftp not executable")
-    if !exists("g:netrw_quiet")
-     echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
-     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-    endif
-    " restore status line
-    let &stl        = s:netrw_users_stl
-    let &laststatus = s:netrw_users_ls
-    " restore NetMethod
-    if exists("keep_netrw_method")
-     call s:NetMethod(keep_netrw_choice)
-     let w:netrw_method  = keep_netrw_wmethod
-    endif
-"    call Dret("NetObtain")
-    return
-   endif
-
-  ".........................................
-  else
-   " scp: Method#4
-"   call Decho("using scp")
-   let curdir = expand("%")
-   let path   = substitute(curdir,'scp://[^/]\+/','','e')
-"   call Decho("path<".path.">")
-   if exists("g:netrw_port") && g:netrw_port != ""
-    let useport= " -P ".g:netrw_port
-   else
-    let useport= ""
-   endif
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"    call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." .")
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ."
-   else
-"    call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." .")
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ."
-   endif
-  endif
-
-  " restore status line
-  let &stl        = s:netrw_users_stl
-  let &laststatus = s:netrw_users_ls
-  redraw!
-
-  " restore NetMethod
-  if exists("keep_netrw_method")
-   call s:NetMethod(keep_netrw_choice)
-   let w:netrw_method  = keep_netrw_wmethod
-  endif
-
-"  call Dret("NetObtain")
-endfun
-
-" ---------------------------------------------------------------------
-" NetPrevWinOpen: open file/directory in previous window.  {{{2
-"   If there's only one window, then the window will first be split.
-fun! s:NetPrevWinOpen(islocal)
-"  call Dfunc("NetPrevWinOpen(islocal=".a:islocal.")")
-
-  " get last window number and the word currently under the cursor
-  let lastwinnr = winnr("$")
-  let curword   = s:NetGetWord()
-  let curdir    = b:netrw_curdir
-"  call Decho("lastwinnr=".lastwinnr." curword<".curword.">")
-
-  let didsplit  = 0
-  if lastwinnr == 1
-   " if only one window, open a new one first
-"   call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
-   let didsplit  = 1
-
+" NetSource: source a remotely hosted vim script {{{2
+" uses NetRead to get a copy of the file into a temporarily file,
+"              then sources that file,
+"              then removes that file.
+fun! netrw#NetSource(...)
+"  call Dfunc("netrw#NetSource() a:0=".a:0)
+  if a:0 > 0 && a:1 == '?'
+   " give help
+   echomsg 'NetSource Usage:'
+   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
+   echomsg ':Nsource fetch://machine/path                 uses fetch'
+   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+   echomsg ':Nsource http://[user@]machine/path           uses http  wget'
+   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
+   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
+   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
+   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
+   sleep 4
   else
-   wincmd p
-   " if the previous window's buffer has been changed (is modified),
-   " and it doesn't appear in any other extant window, then ask the
-   " user if s/he wants to abandon modifications therein.
-   let bnr    = winbufnr(0)
-   let bnrcnt = 0
-   if &mod
-    windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif
-"    call Decho("bnr=".bnr." bnrcnt=".bnrcnt)
-    if bnrcnt == 1
-     let bufname= bufname(winbufnr(winnr()))
-     let choice= confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel")
-
-     if choice == 1
-      " Yes -- write file & then browse
-      let v:errmsg= ""
-      silent w
-      if v:errmsg != ""
-       echohl Error | echo "***netrw*** "unable to write <".bufname.">!" | echohl None
-       call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-       if didsplit
-       	q
-       else
-       	wincmd p
-       endif
-"       call Dret("NetPrevWinOpen : unable to write <".bufname.">")
-       return
-      endif
-
-     elseif choice == 2
-      " No -- don't worry about changed file, just browse anyway
-      set nomod
-      echohl WarningMsg | echo "***netrw*** ".bufname." changes abandoned" | echohl None
-
-     else
-      " Cancel -- don't do this
-      if didsplit
-       q
-      else
-       wincmd p
-      endif
-"      call Dret("NetPrevWinOpen : cancelled")
-      return
-     endif
-    endif
-   endif
-  endif
-
-  if a:islocal
-   call s:LocalBrowse(s:LocalBrowseChgDir(curdir,curword))
-  else
-   call s:NetBrowse(s:NetBrowseChgDir(expand("%"),curword))
-  endif
-"  call Dret("NetPrevWinOpen")
-endfun
-
-" ---------------------------------------------------------------------
-" NetMenu: generates the menu for gvim and netrw {{{2
-fun! s:NetMenu(domenu)
-
-  if !exists("g:NetrwMenuPriority")
-   let g:NetrwMenuPriority= 80
-  endif
-
-  if has("menu") && has("gui_running") && &go =~ 'm'
-"   call Dfunc("NetMenu(domenu=".a:domenu.")")
-   if !exists("s:netrw_menu_enabled") && a:domenu
-"    call Decho("initialize menu")
-    let s:netrw_menu_enabled= 1
-    if !exists("g:NetrwTopLvlMenu")
-     let g:NetrwTopLvlMenu= "Netrw."
+   let i= 1
+   while i <= a:0
+    call netrw#NetRead(3,a:{i})
+"    call Decho("s:netread_tmpfile<".s:netrw_tmpfile.">")
+    if s:FileReadable(s:netrw_tmpfile)
+"     call Decho("exe so ".s:netrw_tmpfile)
+     exe "so ".s:netrw_tmpfile
+     call delete(s:netrw_tmpfile)
+     unlet s:netrw_tmpfile
+    else
+     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
     endif
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Bookmark\ Current\ Directory<tab>b	Nb'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Goto\ Bookmarked\ Directory<tab>B	NB'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Change\ To\ Recently\ Used\ Directory<tab>u	u'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Change\ To\ Subsequently\ Used\ Directory<tab>U	U'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File\ Hiding\ List<tab>'."<ctrl-h>	\<c-h>"
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File/Directory<tab><cr>	'."\<cr>"
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Window<tab>o	o'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Vertical\ Window<tab>v	v'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'List\ Bookmarks\ and\ History<tab>q	q'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Listing\ Style\ (thin-long-wide)<tab>i	i'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Normal-Hide-Show<tab>a	a'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Preview\ File/Directory<tab>p	p'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Previous\ Window\ Browser<tab>P	P'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Reverse\ Sorting\ Order<tab>'."r	r"
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Select\ Sorting\ Style<tab>s	s'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Sorting\ Sequence\ Edit<tab>S	S'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
-    exe 'silent! '.g:NetrwMenuPriority.'menu '.g:NetrwTopLvlMenu.'Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
-   elseif !a:domenu
-    let s:netrwcnt = 0
-    let curwin     = winnr()
-    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
-    exe curwin."wincmd w"
-    
-    if s:netrwcnt <= 1
-"     call Decho("clear menus")
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Help'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmark\ Current\ Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Go\ Up\ Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Goto\ Bookmarked\ Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Change\ To\ Recently\ Used\ Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Change\ To\ Subsequently\ Used\ Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Delete\ File/Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Window'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Vertical\ Window'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File\ Hiding\ List'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Enter\ File/Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Enter\ File/Directory\ (vertical\ split)'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'List\ Bookmarks\ and\ History'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Listing\ Style\ (thin-long-wide)'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Make\ Subdirectory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Normal-Hide-Show'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Obtain\ File'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Preview\ File/Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Previous\ Window\ Browser'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Refresh\ Listing'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Rename\ File/Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Reverse\ Sorting\ Order'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Select\ Sorting\ Style'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Sorting\ Sequence\ Edit'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Set\ Current\ Directory'
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Settings/Options'
-     unlet s:netrw_menu_enabled
-    endif
-   endif
-"   call Dret("NetMenu")
+    let i= i + 1
+   endwhile
   endif
-
-endfun
-
-" ==========================================
-"  Local Directory Browsing Support:    {{{1
-" ==========================================
-
-" ---------------------------------------------------------------------
-" LocalBrowse: {{{2
-fun! s:LocalBrowse(dirname)
-  " unfortunate interaction -- debugging calls can't be used here;
-  " the BufEnter event causes triggering when attempts to write to
-  " the DBG buffer are made.
-  if isdirectory(a:dirname)
-   silent! call netrw#DirBrowse(a:dirname)
-  endif
-  " not a directory, ignore it
+"  call Dret("netrw#NetSource")
 endfun
 
-" ---------------------------------------------------------------------
-" DirBrowse: supports local file/directory browsing {{{2
-fun! netrw#DirBrowse(dirname)
-  if !exists("w:netrw_longlist")|let w:netrw_longlist= g:netrw_longlist|endif
-"  call Dfunc("DirBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by." hide=".g:netrw_hide)
-"  call Dredir("ls!")
-
-  if exists("s:netrw_skipbrowse")
-   unlet s:netrw_skipbrowse
-"   call Dret("DirBrowse")
-   return
-  endif
-  if &fo =~ '[ta]'
-   set fo-=t
-   set fo-=a
-   echohl Warning
-   echo '***warning*** directory browsing and formatoptions "ta" are incompatible'
-   echohl None
-  endif
-
-  call s:NetOptionSave()
-  if exists("w:acdkeep") && w:acdkeep
-   exe 'cd '.escape(a:dirname,s:netrw_cd_escape)
-"   call Decho("cd ".escape(a:dirname,s:netrw_cd_escape))
-"   call Decho("getcwd<".getcwd().">")
-  endif
-
-  if v:version < 603
-   if !exists("g:netrw_quiet")
-    echohl Error | echo "***netrw*** vim version<".v:version."> too old for browsing with netrw" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-   call s:NetOptionRestore()
-"   call Dret("DirBrowse : vim version<".v:version."> too old")
+" ===========================================
+" NetGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
+"    readcmd == %r : replace buffer with newly read file
+"            == 0r : read file at top of buffer
+"            == r  : read file after current line
+"            == t  : leave file in temporary form (ie. don't read into buffer)
+fun! s:NetGetFile(readcmd, tfile, method)
+"  call Dfunc("NetGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+
+  " readcmd=='t': simply do nothing
+  if a:readcmd == 't'
+"   call Dret("NetGetFile : skip read of <".a:tfile.">")
    return
   endif
 
-  " use buffer-oriented WinVars if buffer ones exist but window ones don't
-  call s:UseBufWinVars()
-
-  " set up menus
-  let b:netrw_browser_active= 1
-  call s:NetMenu(1)
-
-  " find buffer number of buffer named precisely the same as a:dirname
-  let bufnum= bufnr(escape(a:dirname,'\'))
-"  call Decho("findbuf: bufnum=".bufnum)
-  if bufnum > 0 && bufname(bufnum) != a:dirname
-   let ibuf= 1
-   let buflast= bufnr("$")
-   while bufname(ibuf) !~ '^'.a:dirname.'\=$' && ibuf <= buflast
-"    call Decho("findbuf: ibuf=".ibuf. " bufname<".bufname(ibuf)."> dirname<".a:dirname.">")
-    let ibuf= ibuf + 1
-   endwhile
-   if ibuf > buflast
-    let bufnum= -1
-   else
-    let bufnum= ibuf
-   endif
-"   call Decho("findbuf: bufnum=".bufnum." (final)")
-  endif
-
-  " get cleared buffer
-  mark '
-  if bufnum < 0 || !bufexists(bufnum)
-   keepjumps keepalt enew!
-"   call Decho("enew buffer")
-  else
-   exe "keepalt b ".bufnum
-   if exists("s:last_sort_by") && g:netrw_sort_by == s:last_sort_by
-    if getline(2) =~ '^" Netrw Directory Listing '
-     if !g:netrw_keepdir
-      exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
-"      call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".escape(b:netrw_curdir,s:netrw_cd_escape))
-     endif
-     call s:NetOptionRestore()
-"     call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
-     return
-    endif
-   endif
-  endif
-  let s:last_sort_by= g:netrw_sort_by
-
-  " set up ShellCmdPost handling.  Append current buffer to browselist
-  call s:LocalFastBrowser()
-
-  " get the new directory name
-  if has("win32") || has("win95") || has("win64") || has("win16")
-   let b:netrw_curdir= substitute(a:dirname,'\\','/','ge')
-  else
-   let b:netrw_curdir= a:dirname
-  endif
-  if b:netrw_curdir =~ '[/\\]$'
-   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
-  endif
-  if b:netrw_curdir == ''
-   " under unix, when the root directory is encountered, the result
-   " from the preceding substitute is an empty string.
-   let b:netrw_curdir= '/'
-  endif
-"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
-
-  " make netrw's idea of the current directory vim's if the user wishes
-  if !g:netrw_keepdir
-"   call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".escape(b:netrw_curdir,s:netrw_cd_escape))
-   try
-    exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
-   catch /^Vim\%((\a\+)\)\=:E472/
-    echohl Error | echo "***netrw*** unable to change directory to <".b:netrw_curdir."> (permissions?)" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-    if exists("w:netrw_prvdir")
-     let b:netrw_curdir= w:netrw_prvdir
-    else
-     call s:NetOptionRestore()
-"     call Dret("DirBrowse : reusing buffer#".bufnum."<".a:dirname.">")
-     return
-    endif
-   endtry
-  endif
-
-  " change the name of the buffer to reflect the b:netrw_curdir
-  " Hmm.  When another vim is open to the same directory, I get
-  " a "Press ENTER" ... ok, setting "noswf" avoids it.
-"  call Decho('exe silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape))
-  exe 'silent! file '.escape(b:netrw_curdir,s:netrw_cd_escape)
-
-  " make this buffer not-a-file, modifiable, not line-numbered, etc
-  setlocal bt=nofile nobl ma nonu noswf nowrap
-  if g:netrw_fastbrowse >= 2
-   setlocal bh=hide
-  else
-   setlocal bh=delete
-  endif
-  keepalt silent! %d
-
-  " ---------------------------
-  "  Perform Directory Listing:
-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
-    echo "(netrw) Processing your browsing request..."
-   endif
-
-  " save current directory on directory history list
-  call s:NetBookmarkDir(3,b:netrw_curdir)
-
-  " set up all the maps
-"  call Decho("Setting up local browser maps")
-  nnoremap <buffer> <silent> <cr>	:call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
-  nnoremap <buffer> <silent> <c-l>	:call <SID>NetRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'),1)<cr>
-  nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'../'))<cr>
-  nnoremap <buffer> <silent> a		:let g:netrw_hide=(g:netrw_hide+1)%3<bar>exe "norm! 0"<bar>call <SID>NetRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'),1)<cr>
-  if w:netrw_longlist != 2
-   nnoremap <buffer> <silent> b		:<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
-  endif
-  nnoremap <buffer> <silent> Nb		:<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
-  nnoremap <buffer> <silent> NB		:<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
-  nnoremap <buffer> <silent> c		:exe "cd ".b:netrw_curdir<cr>
-  nnoremap <buffer> <silent> d		:call <SID>NetMakeDir("")<cr>
-  nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(1)<cr>
-  nnoremap <buffer> <silent> i		:call <SID>NetLongList(1)<cr>
-  nnoremap <buffer> <silent> o		:call <SID>NetSplit(2)<cr>
-  nnoremap <buffer> <silent> O		:call <SID>LocalObtain()<cr>
-  nnoremap <buffer> <silent> p		:call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
-  nnoremap <buffer> <silent> P		:call <SID>NetPrevWinOpen(1)<cr>
-  nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
-  nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'),1)<cr>
-  nnoremap <buffer> <silent> s		:call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
-  nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
-  nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
-  nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
-  nnoremap <buffer> <silent> v		:call <SID>NetSplit(3)<cr>
-  nnoremap <buffer> <silent> x		:call netrw#NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)"<cr>
-  nnoremap <buffer> <silent> <2-leftmouse>	:call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
-  if s:didstarstar || !mapcheck("<s-down>","n")
-   nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
-  endif
-  if s:didstarstar || !mapcheck("<s-up>","n")
-   nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
-  endif
-  exe 'nnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
-  exe 'vnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
-  exe 'nnoremap <buffer> <silent> D	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
-  exe 'vnoremap <buffer> <silent> D	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
-  exe 'nnoremap <buffer> <silent> R	:call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
-  exe 'vnoremap <buffer> <silent> R	:call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
-  exe 'nnoremap <buffer> <silent> <Leader>m :call <SID>NetMakeDir("")<cr>'
-  nnoremap <buffer> <F1>		:he netrw-dir<cr>
-
-  " Set up the banner
-"  call Decho("set up banner")
-  keepjumps put ='\" ============================================================================'
-  keepjumps 1d
-  keepjumps put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
-  keepjumps put ='\"   '.b:netrw_curdir
-  let w:netrw_bannercnt= 3
-
-  let sortby= g:netrw_sort_by
-  if g:netrw_sort_direction =~ "^r"
-   let sortby= sortby." reversed"
-  endif
-
-  " Sorted 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
-"   call Decho("directories will be sorted by size or date")
-   " sorted by size or date
-   keepjumps put ='\"   Sorted by '.sortby
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
-  endif
-
-  " Hiding...  -or-  Showing...
-  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
-  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
-"  call Decho("bannercnt=".w:netrw_bannercnt)
-
-  " generate the requested directory listing
-  call s:LocalBrowseList()
-
-  " set up syntax highlighting
-  if has("syntax")
-   setlocal ft=netrw
-   if !exists("g:syntax_on") || !g:syntax_on
-    setlocal ft=
-   endif
+  " get name of remote filename (ie. url and all)
+  let rfile= bufname("%")
+"  call Decho("rfile<".rfile.">")
+
+  if exists("*NetReadFixup")
+   " for the use of NetReadFixup (not otherwise used internally)
+   let line2= line("$")
   endif
 
-  " manipulate the directory listing (hide, sort)
-  if line("$") >= w:netrw_bannercnt
-   if g:netrw_hide && g:netrw_list_hide != ""
-    call s:NetrwListHide()
-   endif
-   if line("$") >= w:netrw_bannercnt
-
-    if g:netrw_sort_by =~ "^n"
-     call s:SetSort()
-
-     if w:netrw_bannercnt < line("$")
-      if g:netrw_sort_direction =~ 'n'
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
-      else
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
-      endif
-     endif
-     " remove priority pattern prefix
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
-
-    else
-     if w:netrw_bannercnt < line("$")
-      if g:netrw_sort_direction =~ 'n'
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
-      else
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
-      endif
-     endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
-    endif
-
-   endif
-  endif
-
-  call s:NetrwWideListing()
-  if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
-   " place cursor on the top-left corner of the file listing
-   exe 'silent '.w:netrw_bannercnt
-   norm! 0
-  endif
-
-  " record previous current directory
-  let w:netrw_prvdir= b:netrw_curdir
-
-  " save certain window-oriented variables into buffer-oriented variables
-  call s:SetBufWinVars()
-  call s:NetOptionRestore()
-  setlocal noma nomod nonu nobl nowrap
-  if g:netrw_fastbrowse >= 2
-   setlocal bh=hide
-  endif
-
-"  call Dret("DirBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
-endfun
-
-" ---------------------------------------------------------------------
-"  LocalBrowseList: does the job of "ls" for local directories {{{2
-fun! s:LocalBrowseList()
-"  call Dfunc("LocalBrowseList() b:netrw_curdir<".b:netrw_curdir."> sortby<".g:netrw_sort_by.">")
-
-  " get the list of files contained in the current directory
-  let dirname    = escape(b:netrw_curdir,s:netrw_glob_escape)
-  let dirnamelen = strlen(b:netrw_curdir)
-  let filelist   = glob(dirname."/*")
-"  call Decho("glob(dirname<".dirname."/.*>)=".filelist)
-  if filelist != ""
-   let filelist= filelist."\n"
-  endif
-  let filelist= filelist.glob(dirname."/.*")
-"  call Decho("glob(dirname<".dirname."/.*>)=".glob(dirname.".*"))
-
-  " if the directory name includes a "$", and possibly other characters,
-  " the glob() doesn't include "." and ".." entries.
-  if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)'
-"   call Decho("forcibly tacking on .")
-   if filelist == ""
-    let filelist= dirname."."
+  if a:readcmd[0] == '%'
+  " get file into buffer
+"   call Decho("get file into buffer")
+
+   " rename the current buffer to the temp file (ie. tfile)
+   if g:netrw_cygwin
+    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
    else
-    let filelist= filelist."\n".b:netrw_curdir."."
+    let tfile= a:tfile
    endif
-"  call Decho("filelist<".filelist.">")
-  endif
-  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
-"   call Decho("forcibly tacking on ..")
-   let filelist= filelist."\n".b:netrw_curdir.".."
-"  call Decho("filelist<".filelist.">")
-  endif
-  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
-  if (has("win32") || has("win95") || has("win64") || has("win16"))
-   let filelist= substitute(filelist,'\','/','ge')
-  else
-   let filelist= substitute(filelist,'\','\\','ge')
-  endif
-
-"  call Decho("dirname<".dirname.">")
-"  call Decho("dirnamelen<".dirnamelen.">")
-"  call Decho("filelist<".filelist.">")
-
-  while filelist != ""
-   if filelist =~ '\n'
-    let filename = substitute(filelist,'\n.*$','','e')
-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
+"   call Decho("keepalt exe file ".tfile)
+   keepalt exe "silent! keepalt file ".tfile
+
+   " edit temporary file (ie. read the temporary file in)
+   if     rfile =~ '\.zip$'
+"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
+    call zip#Browse(tfile)
+   elseif rfile =~ '\.tar$'
+"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.gz'
+"    call Decho("handling remote gzip-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.bz2'
+"    call Decho("handling remote bz2-compressed tar file")
+    call tar#Browse(tfile)
    else
-    let filename = filelist
-    let filelist = ""
-   endif
-   let pfile= filename
-   if isdirectory(filename)
-    let pfile= filename."/"
-   endif
-   if pfile =~ '//$'
-    let pfile= substitute(pfile,'//$','/','e')
-   endif
-   let pfile= strpart(pfile,dirnamelen)
-   let pfile= substitute(pfile,'^/','','e')
-"   call Decho(" ")
-"   call Decho("filename<".filename.">")
-"   call Decho("pfile   <".pfile.">")
-
-   if w:netrw_longlist == 1
-    let sz   = getfsize(filename)
-    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)
+"    call Decho("edit temporary file")
+    e!
    endif
 
-   if     g:netrw_sort_by =~ "^t"
-    " 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-strlen(t)).t
-"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
-    let ftpfile= ft.'/'.pfile
-    keepjumps silent! put=ftpfile
-
-   elseif g:netrw_sort_by =~ "^s"
-    " 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-strlen(sz)).sz
-"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
-    let fszpfile= fsz.'/'.pfile
-    keepjumps silent! put =fszpfile
-
-   else 
-    " sort by name
-"    call Decho("exe keepjumps put ='".pfile."'")
-    keepjumps silent! put=pfile
-   endif
-  endwhile
-
-  " cleanup any windows mess at end-of-line
-  silent! keepjumps %s/\r$//e
-  setlocal ts=32
-
-"  call Dret("LocalBrowseList")
-endfun
-
-" ---------------------------------------------------------------------
-"  LocalBrowseChgDir: constructs a new directory based on the current {{{2
-"                     directory and a new directory name
-fun! s:LocalBrowseChgDir(dirname,newdir,...)
-"  call Dfunc("LocalBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">) a:0=".a:0)
-
-  let dirname= substitute(a:dirname,'\\','','ge')
-  let newdir = a:newdir
-
-  if dirname !~ '[\/]$'
-   " apparently vim is "recognizing" that it is in the home directory and
-   " is removing the "/".  Bad idea, so I have to put it back.
-   let dirname= dirname.'/'
-"   call Decho("adjusting dirname<".dirname.">")
-  endif
-
-  if newdir !~ '[\/]$'
-   " handling a file
-   let dirname= dirname.newdir
-"   call Decho("handling a file: dirname<".dirname.">")
-   " this lets NetBrowseX avoid the edit
-   if a:0 < 1
-"    call Decho("dirname<".dirname."> netrw_cd_escape<".s:netrw_cd_escape.">")
-"    call Decho("about to edit<".escape(dirname,s:netrw_cd_escape).">")
-    if g:netrw_browse_split == 1
-     new
-     wincmd _
-    elseif g:netrw_browse_split == 2
-     rightb vert new
-     wincmd |
-    else
-     " handling a file, didn't split, so possibly remove menu
-     call s:NetMenu(0)
-    endif
-    exe "e! ".escape(dirname,s:netrw_cd_escape)
-    set ma nomod
-   endif
-
-  elseif newdir == './'
-   " refresh the directory list
-"   call Decho("refresh directory listing")
-
-  elseif newdir == '../'
-   " go up one directory
-   let dirname= substitute(dirname,'^\(.*/\)\([^/]\+[\/]$\)','\1','e')
-"   call Decho("go up one dir: dirname<".dirname.">")
+   " rename buffer back to remote filename
+   exe "silent! keepalt file ".escape(rfile,' ')
+   filetype detect
+"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
+   let line1 = 1
+   let line2 = line("$")
+
+  elseif s:FileReadable(a:tfile)
+   " read file after current line
+"   call Decho("read file<".a:tfile."> after current line")
+   let curline = line(".")
+   let lastline= line("$")
+"   call Decho("exe<".a:readcmd." ".v:cmdarg." ".a:tfile.">  line#".curline)
+   exe a:readcmd." ".v:cmdarg." ".a:tfile
+   let line1= curline + 1
+   let line2= line("$") - lastline + 1
 
   else
-   " go down one directory
-   let dirname= dirname.newdir
-"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
+   " not readable
+"   call Decho("tfile<".a:tfile."> not readable")
+   call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
+"   call Dret("NetGetFile : tfile<".a:tfile."> not readable")
+   return
   endif
 
-"  call Dret("LocalBrowseChgDir <".dirname.">")
-  return dirname
-endfun
-
-" ---------------------------------------------------------------------
-" LocalBrowseShellCmdRefresh: this function is called after a user has {{{2
-" performed any shell command.  The idea is to cause all local-browsing
-" buffers to be refreshed after a user has executed some shell command,
-" on the chance that s/he removed/created a file/directory with it.
-fun! s:LocalBrowseShellCmdRefresh()
-"  call Dfunc("LocalBrowseShellCmdRefresh() browselist=".string(s:netrw_browselist))
-  "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
-  "   | refresh any netrw window
-  "   | wipe out any non-displaying netrw buffer
-  let curwin = winnr()
-  let ibl    = 0
-  for ibuf in s:netrw_browselist
-   if bufwinnr(ibuf) == -1
-"    call Decho("wiping  buf#".ibuf)
-    exe "silent! bw ".ibuf
-    call remove(s:netrw_browselist,ibl)
-"    call Decho("browselist=".string(s:netrw_browselist))
-    continue
-   else
-"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
-    exe bufwinnr(ibuf)."wincmd w"
-    call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'),1)
-   endif
-   let ibl= ibl + 1
-  endfor
-  exe curwin."wincmd w"
-
-"  call Dret("LocalBrowseShellCmdRefresh")
-endfun
-
-" ---------------------------------------------------------------------
-" LocalBrowseRm: {{{2
-fun! s:LocalBrowseRm(path) range
-"  call Dfunc("LocalBrowseRm(path<".a:path.">)")
-"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
-
-  " preparation for removing multiple files/directories
-  let ctr           = a:firstline
-  let ret           = 0
-  let all= 0
-
-  " remove multiple files and directories
-  while ctr <= a:lastline
-   exe "keepjumps ".ctr
-
-   " sanity checks
-   if line(".") < w:netrw_bannercnt
-    let ctr= ctr + 1
-    continue
-   endif
-   let curword= s:NetGetWord()
-   if curword == "./" || curword == "../"
-    let ctr= ctr + 1
-    continue
-   endif
-
-   norm! 0
-   let rmfile= a:path."/".curword
-"   call Decho("rmfile<".rmfile.">")
-
-   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
-    " attempt to remove file
-    if !all
-     echohl Statement
-     call inputsave()
-     let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-     call inputrestore()
-     echohl NONE
-     if ok == ""
-      let ok="no"
-     endif
-"     call Decho("response: ok<".ok.">")
-     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-"     call Decho("response: ok<".ok."> (after sub)")
-     if ok =~ 'a\%[ll]'
-      let all= 1
-     endif
-    endif
-
-    if all || ok =~ 'y\%[es]' || ok == ""
-     let ret= delete(rmfile)
-"     call Decho("errcode=".v:shell_error." ret=".ret)
-    elseif ok =~ 'q\%[uit]'
-     break
-    endif
-
-   else
-    " attempt to remove directory
-    if !all
-     echohl Statement
-     call inputsave()
-     let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-     call inputrestore()
-     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-     if ok == ""
-      let ok="no"
-     endif
-     if ok =~ 'a\%[ll]'
-      let all= 1
-     endif
-    endif
-    let rmfile= substitute(rmfile,'[\/]$','','e')
-
-    if all || ok =~ 'y\%[es]' || ok == ""
-"     call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
-     call system(g:netrw_local_rmdir.' "'.rmfile.'"')
-"     call Decho("v:shell_error=".v:shell_error)
-
-     if v:shell_error != 0
-"      call Decho("2nd attempt to remove directory<".rmfile.">")
-      let errcode= delete(rmfile)
-"      call Decho("errcode=".errcode)
-
-      if errcode != 0
-       if has("unix")
-"        call Decho("3rd attempt to remove directory<".rmfile.">")
-call system("rm ".rmfile)
-        if v:shell_error != 0 && !exists("g:netrw_quiet")
-         echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
-         call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-endif
-       elseif !exists("g:netrw_quiet")
-        echohl Error | echo "***netrw*** unable to remove directory<".rmfile."> -- is it empty?" | echohl None
-        call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-       endif
-      endif
-     endif
-
-    elseif ok =~ 'q\%[uit]'
-     break
-    endif
-   endif
-
-   let ctr= ctr + 1
-  endwhile
-
-  " refresh the directory
-  let curline= line(".")
-"  call Decho("refresh the directory")
-  call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'),1)
-  exe curline
-
-"  call Dret("LocalBrowseRm")
-endfun
-
-" ---------------------------------------------------------------------
-" LocalBrowseRename: rename a remote file or directory {{{2
-fun! s:LocalBrowseRename(path) range
-"  call Dfunc("LocalBrowseRename(path<".a:path.">)")
-
-  " preparation for removing multiple files/directories
-  let ctr= a:firstline
-
-  " attempt to rename files/directories
-  while ctr <= a:lastline
-   exe "keepjumps ".ctr
-
-   " sanity checks
-   if line(".") < w:netrw_bannercnt
-    let ctr= ctr + 1
-    continue
-   endif
-   let curword= s:NetGetWord()
-   if curword == "./" || curword == "../"
-    let ctr= ctr + 1
-    continue
-   endif
-
-   norm! 0
-   let oldname= a:path."/".curword
-"   call Decho("oldname<".oldname.">")
-
-   call inputsave()
-   let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
-   call inputrestore()
-
-   let ret= rename(oldname,newname)
-"   call Decho("renaming <".oldname."> to <".newname.">")
-
-   let ctr= ctr + 1
-  endwhile
-
-  " refresh the directory
-  let curline= line(".")
-"  call Decho("refresh the directory listing")
-  call s:NetRefresh(s:LocalBrowseChgDir(b:netrw_curdir,'./'),1)
-  exe "keepjumps ".curline
-"  call Dret("LocalBrowseRename")
-endfun
-
-" ---------------------------------------------------------------------
-" LocalFastBrowser: handles setting up/taking down fast browsing for the {{{2
-"                   local browser
-fun! s:LocalFastBrowser()
-"  call Dfunc("LocalFastBrowser()")
-
-  " initialize browselist, a list of buffer numbers that the local browser has used
-  if !exists("s:netrw_browselist")
-   let s:netrw_browselist= []
+  " User-provided (ie. optional) fix-it-up command
+  if exists("*NetReadFixup")
+"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+   call NetReadFixup(a:method, line1, line2)
+"  else " Decho
+"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
   endif
 
-  " append current buffer to fastbrowse list
-  if g:netrw_fastbrowse <= 1 && (empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1])
-   call add(s:netrw_browselist,bufnr("%"))
-"   call Decho("browselist=".string(s:netrw_browselist))
-  endif
-
-  " enable autocmd events to handle refreshing/removing local browser buffers
-  "    If local browse buffer is currently showing: refresh it
-  "    If local browse buffer is currently hidden : wipe it
-  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
-"   call Decho("setting up local-browser shell command refresh")
-   let s:netrw_browser_shellcmd= 1
-   augroup AuNetrwShellCmd
-    au!
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-     au ShellCmdPost *	call s:LocalBrowseShellCmdRefresh()
-    else
-     au ShellCmdPost,FocusGained *	call s:LocalBrowseShellCmdRefresh()
-    endif
-   augroup END
-  endif
-
-  " user must have changed fastbrowse to its fast setting, so remove
-  " the associated autocmd events
-  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
-   unlet s:netrw_browser_shellcmd
-   augroup AuNetrwShellCmd
-    au!
-   augroup END
-   augroup! AuNetrwShellCmd
+  " update the Buffers menu
+  if has("gui") && has("gui_running")
+   silent! emenu Buffers.Refresh\ menu
   endif
 
-"  call Dret("LocalFastBrowser")
-endfun
-
-" ---------------------------------------------------------------------
-" LocalObtain: copy selected file to current working directory {{{2
-fun! s:LocalObtain()
-"  call Dfunc("LocalObtain()")
-  if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
-   let fname= expand("<cWORD>")
-   let fcopy= readfile(b:netrw_curdir."/".fname,"b")
-   call writefile(fcopy,getcwd()."/".fname,"b")
-  elseif !exists("b:netrw_curdir")
-   echohl Error | echo "***netrw*** local browsing directory doesn't exist!"
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-  else
-   echohl Error | echo "***netrw*** local browsing directory and current directory are identical"
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-  endif
-"  call Dret("LocalObtain")
-endfun
-
-" ---------------------------------------------------------------------
-" LocalPreview: {{{2
-fun! s:LocalPreview(path) range
-"  call Dfunc("LocalPreview(path<".a:path.">)")
-  if has("quickfix")
-   if !isdirectory(a:path)
-    exe "pedit ".escape(a:path,g:netrw_fname_escape)
-   elseif !exists("g:netrw_quiet")
-    echohl WarningMsg | echo "***netrw*** sorry, cannot preview a directory such as <".a:path.">" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-  elseif !exists("g:netrw_quiet")
-   echohl WarningMsg | echo "***netrw*** sorry, to preview your vim needs the quickfix feature compiled in" | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-  endif
-"  call Dret("LocalPreview")
+"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
+
+ " make sure file is being displayed
+  redraw!
+"  call Dret("NetGetFile")
 endfun
 
-" ---------------------------------------------------------------------
-" 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
-fun! netrw#Explore(indx,dosplit,style,...)
-"  call Dfunc("Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.")")
-
-  " if dosplit or file has been modified
-  if a:dosplit || &modified
-   call s:SaveWinVars()
-
-   if a:style == 0      " Explore, Sexplore
-    exe g:netrw_winsize."wincmd s"
-"    call Decho("style=0: Explore or Sexplore")
-
-   elseif a:style == 1  "Explore!, Sexplore!
-    exe g:netrw_winsize."wincmd v"
-"    call Decho("style=1: Explore! or Sexplore!")
-
-   elseif a:style == 2  " Hexplore
-    exe "bel ".g:netrw_winsize."wincmd s"
-"    call Decho("style=2: Hexplore")
-
-   elseif a:style == 3  " Hexplore!
-    exe "abo ".g:netrw_winsize."wincmd s"
-"    call Decho("style=3: Hexplore!")
-
-   elseif a:style == 4  " Vexplore
-    exe "lefta ".g:netrw_winsize."wincmd v"
-"    call Decho("style=4: Vexplore")
-
-   elseif a:style == 5  " Vexplore!
-    exe "rightb ".g:netrw_winsize."wincmd v"
-"    call Decho("style=5: Vexplore!")
-   endif
-   call s:CopyWinVars()
-  endif
-  norm! 0
-
-  if a:1 =~ '^\*/'
-   " Explore */pattern
-   let pattern= substitute(a:1,'^\*/\(.*\)$','\1','')
-"   call Decho("Explore */pat: a:1<".a:1."> -> pattern<".pattern.">")
-  elseif a:1 =~ '^\*\*//'
-   " Explore **//pattern
-   let pattern     = substitute(a:1,'^\*\*//','','')
-   let starstarpat = 1
-"   call Decho("Explore **//pat: a:1<".a:1."> -> pattern<".pattern.">")
-  endif
-
-  if a:1 == "" && a:indx >= 0
-   " Explore Hexplore Vexplore Sexplore
-"   call Decho("Explore Hexplore Vexplore Sexplore")
-   let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
-   if newdir =~ '^scp:' || newdir =~ '^ftp:'
-"    call Decho("calling NetBrowse(newdir<".newdir.">)")
-    call s:NetBrowse(newdir)
-   else
-    if newdir == ""|let newdir= getcwd()|endif
-"    call Decho("calling LocalBrowse(newdir<".newdir.">)")
-    call s:LocalBrowse(newdir)
-   endif
-
-  elseif a:1 =~ '^\*\*/' || a:indx < 0 || a:1 =~ '^\*/'
-   " Nexplore, Pexplore, Explore **/... , or Explore */pattern
-"   call Decho("Nexplore, Pexplore, <s-down>, <s-up>, Explore ".a:1)
-   let s:didstarstar= 1
-   if exists("b:netrw_curdir")
-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
-   endif
-
-   if has("path_extra")
-    if !exists("w:netrw_explore_indx")
-     let w:netrw_explore_indx= 0
-    endif
-    let indx = a:indx
-"    call Decho("set indx=".indx)
-"
-    if indx == -1
-     "Nexplore
-     if !exists("w:netrw_explore_list") " sanity check
-      echohl WarningMsg | echo "***netrw*** using Nexplore or <s-down> improperly; see help for netrw-starstar" | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"      call Dret("Explore")
-      return
-     endif
-     let indx   = w:netrw_explore_indx
-     let curfile= w:netrw_explore_list[indx]
-     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
-      let indx= indx + 1
-"      call Decho("indx=".indx)
-     endwhile
-"     call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    elseif indx == -2
-     "Pexplore
-     if !exists("w:netrw_explore_list") " sanity check
-      echohl WarningMsg | echo "***netrw*** using Pexplore or <s-up> improperly; see help for netrw-starstar" | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"      call Dret("Explore")
-      return
-     endif
-     let indx   = w:netrw_explore_indx
-     let curfile= w:netrw_explore_list[indx]
-     while indx > 0 && curfile == w:netrw_explore_list[indx]
-      let indx= indx - 1
-     endwhile
-"     call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    else
-     " Explore -- initialize
-     " build list of files to Explore with Nexplore/Pexplore
-"     call Decho("Explore -- initialize")
-     let w:netrw_explore_indx= 0
-     if !exists("b:netrw_curdir")
-      let b:netrw_curdir= getcwd()
-     endif
-"     call Decho("b:netrw_curdir<".b:netrw_curdir.">")
-     if exists("pattern")
-"      call Decho("building list based on pattern<".pattern."> cwd<".getcwd().">")
-      if exists("starstarpat")
-       exe "vimgrep /".pattern."/gj "."**/*"
-       let s:netrw_curdir= b:netrw_curdir
-       let w:netrw_explore_list = map(getqflist(),'s:netrw_curdir."/".bufname(v:val.bufnr)')
-      else
-       exe "vimgrep /".pattern."/gj ".b:netrw_curdir."/*"
-       if (has("win32") || has("win95") || has("win64") || has("win16"))
-        let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)')
-       else
-        let w:netrw_explore_list = map(getqflist(),'b:netrw_curdir.bufname(v:val.bufnr)')
-       endif
-      endif
-     else
-"      call Decho("building list based on ".b:netrw_curdir."/".a:1)
-      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".a:1),'\n')
-     endif
-
-     let w:netrw_explore_listlen = len(w:netrw_explore_list)
-"     call Decho("w:netrw_explore_list<".string(w:netrw_explore_list)."> listlen=".w:netrw_explore_listlen)
-
-     if w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/'
-      echohl WarningMsg | echo "***netrw*** no files matched" | echohl None
-      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"      call Dret("Explore")
-      return
-     endif
-    endif
-
-    " NetrwStatusLine support - for exploring support
-    let w:netrw_explore_indx= indx
-"    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
-
-    " sanity check
-    if indx >= w:netrw_explore_listlen || indx < 0
-     let indx= (indx < 0)? 0 : ( w:netrw_explore_listlen - 1 )
-     echohl WarningMsg | echo "***netrw*** no more files match Explore pattern" | echohl None
-     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"     call Dret("Explore")
-     return
-    endif
-
-    exe "let dirfile= w:netrw_explore_list[".indx."]"
-"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
-    let newdir= substitute(dirfile,'/[^/]*$','','e')
-"    call Decho("newdir<".newdir.">")
-
-"    call Decho("calling LocalBrowse(newdir<".newdir.">)")
-    call s:LocalBrowse(newdir)
-    if w:netrw_longlist == 0 || w:netrw_longlist == 1
-     call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
-    else
-     call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
-    endif
-    let w:netrw_explore_mtchcnt = indx + 1
-    let w:netrw_explore_bufnr   = bufnr("%")
-    let w:netrw_explore_line    = line(".")
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
-"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
-
-   else
-    if !exists("g:netrw_quiet")
-     echohl WarningMsg | echo "***netrw*** your vim needs the +path_extra feature for Exploring with **!" | echohl None | echohl None
-    endif
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-
-  else
-"   call Decho("Explore newdir<".a:1.">")
-   let newdir= a:1
-   call s:LocalBrowse(newdir)
-  endif
-
-"  call Dret("Explore")
-endfun
-
-" ---------------------------------------------------------------------
-" SetupNetrwStatusLine: {{{2
-fun! s:SetupNetrwStatusLine(statline)
-"  call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
-
-  if !exists("s:netrw_setup_statline")
-   let s:netrw_setup_statline= 1
-"   call Decho("do first-time status line setup")
-
-   if !exists("s:netrw_users_stl")
-    let s:netrw_users_stl= &stl
-   endif
-   if !exists("s:netrw_users_ls")
-    let s:netrw_users_ls= &laststatus
-   endif
-
-   " set up User9 highlighting as needed
-   let keepa= @a
-   redir @a
-   try
-    hi User9
-   catch /^Vim\%((\a\+)\)\=:E411/
-    if &bg == "dark"
-     hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
-    else
-     hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
-    endif
-   endtry
-   redir END
-   let @a= keepa
-  endif
-
-  " set up status line (may use User9 highlighting)
-  " insure that windows have a statusline
-  " make sure statusline is displayed
-  let &stl=a:statline
-  set laststatus=2
-"  call Decho("stl=".&stl)
-  redraw!
-
-"  call Dret("SetupNetrwStatusLine : stl=".&stl)
-endfun
-
-" ---------------------------------------------------------------------
-" NetrwStatusLine: {{{2
-fun! NetrwStatusLine()
-
-  " vvv NetrwStatusLine() debugging vvv
-"  let g:stlmsg=""
-"  if !exists("w:netrw_explore_bufnr")
-"   let g:stlmsg="!X<explore_bufnr>"
-"  elseif w:netrw_explore_bufnr != bufnr("%")
-"   let g:stlmsg="explore_bufnr!=".bufnr("%")
-"  endif
-"  if !exists("w:netrw_explore_line")
-"   let g:stlmsg=" !X<explore_line>"
-"  elseif w:netrw_explore_line != line(".")
-"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
-"  endif
-"  if !exists("w:netrw_explore_list")
-"   let g:stlmsg=" !X<explore_list>"
-"  endif
-  " ^^^ NetrwStatusLine() debugging ^^^
-
-  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
-   " restore user's status line
-   let &stl        = s:netrw_users_stl
-   let &laststatus = s:netrw_users_ls
-   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
-   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
-   return ""
-  else
-   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
-  endif
-endfun
-
-" ---------------------------------------------------------------------
-" NetGetcwd: get the current directory. {{{2
-"   Change backslashes to forward slashes, if any.
-"   If doesc is true, escape certain troublesome characters
-fun! s:NetGetcwd(doesc)
-"  call Dfunc("NetGetcwd(doesc=".a:doesc.")")
-  let curdir= substitute(getcwd(),'\\','/','ge')
-  if curdir !~ '[\/]$'
-   let curdir= curdir.'/'
-  endif
-  if a:doesc
-   let curdir= escape(curdir,s:netrw_cd_escape)
-  endif
-"  call Dret("NetGetcwd <".curdir.">")
-  return curdir
-endfun
-
-" ---------------------------------------------------------------------
+" ------------------------------------------------------------------------
 " NetMethod:  determine method of transfer {{{2
 "  method == 1: rcp
 "	     2: ftp + <.netrc>
@@ -3907,7 +1422,7 @@ fun! s:NetMethod(choice)  " globals: met
    if exists("g:netrw_uid") && exists("g:netrw_passwd")
     let b:netrw_method = 3
    else
-    if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
+    if s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
      let b:netrw_method= 2
     else
      if !exists("g:netrw_uid") || g:netrw_uid == ""
@@ -3945,7 +1460,7 @@ fun! s:NetMethod(choice)  " globals: met
     let g:netrw_machine = substitute(a:choice,mf,'\1',"")
     let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
 
-   elseif filereadable(expand("$HOME/.netrc"))
+   elseif s:FileReadable(expand("$HOME/.netrc"))
     let b:netrw_method  = 2
     let g:netrw_machine = substitute(a:choice,mf,'\1',"")
     let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
@@ -3972,15 +1487,10 @@ fun! s:NetMethod(choice)  " globals: met
    if userid != ""
     let g:netrw_uid= userid
    endif
-   if has("win32") || has("win95") || has("win64") || has("win16")
-    " don't let PCs try <.netrc>
-    let b:netrw_method = 3
-   endif
 
   else
    if !exists("g:netrw_quiet")
-    echohl Error | echo "***netrw*** cannot determine method" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+    call netrw#ErrorMsg(s:WARNING,"cannot determine method",45)
    endif
    let b:netrw_method  = -1
   endif
@@ -4005,6 +1515,24 @@ fun! s:NetMethod(choice)  " globals: met
 endfun
 
 " ------------------------------------------------------------------------
+" NetReadFixup: this sort of function is typically written by the user {{{2
+"               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
+
+" ---------------------------------------------------------------------
 " NetUserPass: set username and password for subsequent ftp transfer {{{2
 "   Usage:  :call NetUserPass()			-- will prompt for userid and password
 "	    :call NetUserPass("uid")		-- will prompt for password
@@ -4035,162 +1563,3263 @@ fun! NetUserPass(...)
 "  call Dret("NetUserPass")
 endfun
 
-" ------------------------------------------------------------------------
-" NetOptionSave: save options and set to "standard" form {{{2
-fun! s:NetOptionSave()
-"  call Dfunc("NetOptionSave()")
-  if !exists("w:netoptionsave")
-   let w:netoptionsave= 1
-  else
-"   call Dret("NetOptionSave : netoptionsave=".w:netoptionsave)
+" ===========================================
+"  Shared Browsing Support:    {{{1
+" ===========================================
+
+" ---------------------------------------------------------------------
+" s:BrowserMaps: {{{2
+fun! s:BrowserMaps(islocal)
+"  call Dfunc("s:BrowserMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
+  if a:islocal
+   nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetBrowseChgDir(1,<SID>NetGetWord()))<cr>
+   nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call netrw#LocalBrowseCheck(<SID>NetBrowseChgDir(1,<SID>NetGetWord()))<cr>
+   nnoremap <buffer> <silent> <c-l>	:call <SID>NetRefresh(1,<SID>NetBrowseChgDir(1,'./'))<cr>
+   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetBrowseChgDir(1,'../'))<cr>
+   nnoremap <buffer> <silent> a		:call <SID>NetHide(1)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetBookmarkDir(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> c		:exe "cd ".b:netrw_curdir<cr>
+   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> d		:call <SID>NetMakeDir("")<cr>
+   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(1)<cr>
+   nnoremap <buffer> <silent> i		:call <SID>NetListStyle(1)<cr>
+   nnoremap <buffer> <silent> o		:call <SID>NetSplit(3)<cr>
+   nnoremap <buffer> <silent> O		:call <SID>LocalObtain()<cr>
+   nnoremap <buffer> <silent> p		:call <SID>NetPreview(<SID>NetBrowseChgDir(1,<SID>NetGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P		:call <SID>NetPrevWinOpen(1)<cr>
+   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetRefresh(1,<SID>NetBrowseChgDir(1,'./'))<cr>
+   nnoremap <buffer> <silent> s		:call <SID>NetSortStyle(1)<cr>
+   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
+   nnoremap <buffer> <silent> t		:call <SID>NetSplit(4)<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
+   nnoremap <buffer> <silent> v		:call <SID>NetSplit(5)<cr>
+   nnoremap <buffer> <silent> x		:call netrw#NetBrowseX(<SID>NetBrowseChgDir(1,<SID>NetGetWord(),0),0)"<cr>
+   if s:didstarstar || !mapcheck("<s-down>","n")
+    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+   endif
+   if s:didstarstar || !mapcheck("<s-up>","n")
+    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+   endif
+   exe 'nnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D		:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D		:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R		:call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R		:call <SID>LocalBrowseRename("'.b:netrw_curdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetMakeDir("")<cr>'
+   nnoremap <buffer> <F1>		:he netrw-dir<cr>
+
+  else " remote
+   call s:RemotePathAnalysis(b:netrw_curdir)
+   nnoremap <buffer> <silent> <cr>	:call <SID>NetBrowse(0,<SID>NetBrowseChgDir(0,<SID>NetGetWord()))<cr>
+   nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call <SID>NetBrowse(0,<SID>NetBrowseChgDir(0,<SID>NetGetWord()))<cr>
+   nnoremap <buffer> <silent> <c-l>	:call <SID>NetRefresh(0,<SID>NetBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetBrowse(0,<SID>NetBrowseChgDir(0,'../'))<cr>
+   nnoremap <buffer> <silent> a		:call <SID>NetHide(0)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetBookmarkDir(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetBookmarkDir(1,b:netrw_cur)<cr>
+   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(0)<cr>
+   nnoremap <buffer> <silent> i		:call <SID>NetListStyle(0)<cr>
+   nnoremap <buffer> <silent> o		:call <SID>NetSplit(0)<cr>
+   nnoremap <buffer> <silent> O		:call netrw#NetObtain(0)<cr>
+   vnoremap <buffer> <silent> O		:call netrw#NetObtain(1)<cr>
+   nnoremap <buffer> <silent> p		:call <SID>NetPreview(<SID>NetBrowseChgDir(1,<SID>NetGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P		:call <SID>NetPrevWinOpen(0)<cr>
+   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(0,<SID>NetBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> s		:call <SID>NetSortStyle(0)<cr>
+   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
+   nnoremap <buffer> <silent> t		:call <SID>NetSplit(1)<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> v		:call <SID>NetSplit(2)<cr>
+   nnoremap <buffer> <silent> x		:call netrw#NetBrowseX(<SID>NetBrowseChgDir(0,<SID>NetGetWord()),1)<cr>
+   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetBrowseRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetBrowseRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetBrowseRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   exe 'nnoremap <buffer> <silent> d	:call <SID>NetMakeDir("'.s:user.s:machine.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D	:call <SID>NetBrowseRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D	:call <SID>NetBrowseRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R	:call <SID>NetBrowseRename("'.s:user.s:machine.'","'.s:path.'")<cr>'
+   nnoremap <buffer> <F1>			:he netrw-browse-cmds<cr>
+  endif
+"  call Dret("s:BrowserMaps")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetBrowse: This function uses the command in g:netrw_list_cmd to get a list {{{2
+"  of the contents of a remote directory.  It is assumed that the
+"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
+"  with the requested remote hostname first.
+fun! s:NetBrowse(islocal,dirname)
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+"  call Dfunc("NetBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%"))
+"  call Dredir("ls!")
+
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Dret("NetBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
+   return
+  endif
+
+  call s:NetOptionSave()
+
+  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
+"   call Decho("handle w:netrw_acdkeep:")
+"   call Decho("cd ".escape(a:dirname,s:netrw_cd_escape)." (due to 'acd')")
+   exe 'cd '.escape(a:dirname,s:netrw_cd_escape)
+"   call Decho("getcwd<".getcwd().">")
+
+  elseif !a:islocal && a:dirname !~ '[\/]$' && a:dirname !~ '^"'
+   " looks like a regular file, attempt transfer
+"   call Decho("attempt transfer as regular file<".a: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')
+"   call Decho("new path<".path.">")
+   call s:RemotePathAnalysis(a:dirname)
+
+   " remote-read the requested file into current buffer {{{3
+   mark '
+   call s:NetrwEnew(a:dirname)
+   let b:netrw_curdir= a:dirname
+   call s:NetrwSafeOptions()
+   setlocal ma noro
+"   call Decho("exe silent! keepalt file ".s:method."://".s:user.s:machine."/".escape(s:path,s:netrw_cd_escape)." (bt=".&bt.")")
+   exe "silent! keepalt file ".s:method."://".s:user.s:machine."/".escape(s:path,s:netrw_cd_escape)
+   exe "silent keepalt doau BufReadPre ".s:fname
+   silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
+   exe "silent keepalt doau BufReadPost ".s:fname
+
+   " save certain window-oriented variables into buffer-oriented variables {{{3
+   call s:SetBufWinVars()
+   call s:NetOptionRestore()
+   setlocal nomod nowrap
+
+"   call Dret("NetBrowse : file<".s:fname.">")
+   return
+  endif
+
+  " 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 s:last_sort_by         = g:netrw_sort_by
+
+  call s:NetMenu(1)                      " set up menu {{{3
+  if s:NetGetBuffer(a:islocal,dirname)   " set up buffer {{{3
+"   call Dret("NetBrowse : re-using buffer")
    return
   endif
 
-  " Get Temporary Filename
-  if exists("&acd")
-   let w:acdkeep  = &acd
+  " set b:netrw_curdir to the new directory name {{{3
+"  call Decho("set b:netrw_curdir to the new directory name:")
+   let b:netrw_curdir= dirname
+  if b:netrw_curdir =~ '[/\\]$'
+   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
+  endif
+  if b:netrw_curdir == ''
+   if has("amiga")
+    " On the Amiga, the empty string connotes the current directory
+    let b:netrw_curdir= getcwd()
+   else
+    " under unix, when the root directory is encountered, the result
+    " from the preceding substitute is an empty string.
+    let b:netrw_curdir= '/'
+   endif
+  endif
+  if !a:islocal && b:netrw_curdir !~ '/$'
+   let b:netrw_curdir= b:netrw_curdir.'/'
   endif
-  let w:aikeep    = &ai
-  let w:fokeep    = &fo
-  let w:cikeep    = &ci
-  let w:cinkeep   = &cin
-  let w:cinokeep  = &cino
-  let w:comkeep   = &com
-  let w:cpokeep   = &cpo
-  let w:hidkeep   = &hidden
-  let w:magickeep = &magic
-  if !g:netrw_keepdir
-   let w:dirkeep  = getcwd()
+"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+
+  " ------------
+  " (local only) {{{3
+  " ------------
+  if a:islocal
+"   call Decho("local only:")
+
+   " Set up ShellCmdPost handling.  Append current buffer to browselist
+   call s:LocalFastBrowser()
+
+  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
+   if !g:netrw_keepdir
+"    call Decho("handle keepdir:")
+"    call Decho('exe cd '.escape(b:netrw_curdir,s:netrw_cd_escape))
+    try
+     exe 'cd '.escape(b:netrw_curdir,s:netrw_cd_escape)
+    catch /^Vim\%((\a\+)\)\=:E472/
+     call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",33)
+     if exists("w:netrw_prvdir")
+      let b:netrw_curdir= w:netrw_prvdir
+     else
+      call s:NetOptionRestore()
+      let b:netrw_curdir= dirname
+"      call Dret("NetBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
+      return
+     endif
+    endtry
+   endif
+
+  " --------------------------------
+  " remote handling: {{{3
+  " --------------------------------
+  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"
+    let dirname= b:netrw_curdir
+"    call Decho("(dirname was NetrwTreeListing) 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 !~ '/$'
+     let dirname= dirname.'/'
+    endif
+    let b:netrw_curdir = dirname
+"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
+   else
+    let dirname = substitute(a:dirname,'\\','/','g')
+"    call Decho("(normal) dirname<".dirname.">")
+   endif
+
+   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+   if dirname !~ dirpat
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
+    endif
+     call s:NetOptionRestore()
+"    call Dret("NetBrowse : badly formatted dirname<".dirname.">")
+    return
+   endif
+   let b:netrw_curdir= dirname
+"   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
+  endif  " (additional remote handling)
+
+  " -----------------------
+  " Directory Listing: {{{3
+  " -----------------------
+  setlocal noro ma
+  call s:BrowserMaps(a:islocal)
+  call s:PerformListing(a:islocal)
+
+"  call Dret("NetBrowse")
+  return
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetGetBuffer: {{{2
+"   returns 0=cleared buffer
+"           1=re-used buffer
+fun! s:NetGetBuffer(islocal,dirname)
+"  call Dfunc("s:NetGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">)")
+
+  " re-use buffer if possible {{{3
+  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+   " find NetrwTreeList buffer if there is one
+   let dirname= "NetrwTreeListing"
+   let bufnum = bufnr('\<NetrwTreeListing\>')
+   if bufnum != -1
+"    call Dret("s:NetGetBuffer : bufnum#".bufnum."<NetrwTreeListing>")
+    return
+   endif
+
+  else
+   " find buffer number of buffer named precisely the same as dirname {{{3
+   let dirname= a:dirname
+"   call Decho("find buffer<".dirname.">'s number ")
+   let bufnum= bufnr(escape(dirname,'\'))
+"   call Decho("findbuf: bufnum=bufnr('".escape(dirname,'\')."')=".bufnum." (initial)")
+   let ibuf= 1
+   if bufnum > 0 && bufname(bufnum) != dirname
+    let buflast = bufnr("$")
+"    call Decho("findbuf: buflast=".buflast)
+    while ibuf <= buflast
+     let bname= bufname(ibuf)
+"     call Decho("findbuf: ibuf=".ibuf. " bufname<".bufname(ibuf)."> dirname<".dirname.">")
+     if bname != '' && bname !~ '/' && dirname =~ '/'.bname.'$' | break | endif
+     if bname =~ '^'.dirname.'\=$' | break | endif
+     let ibuf= ibuf + 1
+    endwhile
+    if ibuf > buflast
+     let bufnum= -1
+    else
+     let bufnum= ibuf
+    endif
+"    call Decho("findbuf: bufnum=".bufnum." (final)")
+   endif
+  endif
+
+  " get enew buffer and name it -or- re-use buffer {{{3
+  mark '
+  if bufnum < 0 || !bufexists(bufnum)
+"   call Decho("get enew buffer")
+   call s:NetrwEnew(dirname)
+   call s:NetrwSafeOptions()
+   " name the buffer
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+    silent! keepalt file NetrwTreeListing
+   else
+    exe 'silent! keepalt file '.escape(dirname,s:netrw_cd_escape)
+   endif
+"   call Decho("named enew buffer<".expand("%").">")
+
+  else " Re-use the buffer
+
+"   call Decho("re-use buffer:")
+   let eikeep= &ei
+   set ei=all
+   if getline(2) =~ '^" Netrw Directory Listing'
+"    call Decho("re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  keepalt b ".bufnum)
+    exe "keepalt b ".bufnum
+   else
+"    call Decho("reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  b ".bufnum)
+    exe "b ".bufnum
+   endif
+   let &ei= eikeep
+   if line("$") <= 1
+    call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
+    return 0
+   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    silent %d
+    call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
+    return 0
+   else
+"    call Dret("s:NetGetBuffer 1 : buf#".bufnr("%"))
+    return 1
+   endif
   endif
-  let w:gdkeep    = &gd
-  let w:repkeep   = &report
-  let w:spellkeep = &spell
-  let w:twkeep    = &tw
-  setlocal cino =
-  setlocal com  =
-  setlocal cpo -=aA
-  if exists("&acd")
-   setlocal noacd nocin noai noci magic nospell fo=nroql2 nohid
+
+  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
+  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
+  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
+  "  med    1         D      H
+  "  fast   2         H      H
+  let fname= expand("%")
+  call s:NetrwListSettings(a:islocal)
+  exe "file ".escape(fname,' ')
+
+  " delete all lines from buffer {{{3
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+  keepalt silent! %d
+
+"  call Dret("s:NetGetBuffer 0 : buf#".bufnr("%"))
+  return 0
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwListSettings: {{{2
+fun! s:NetrwListSettings(islocal)
+"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
+  let fname= bufname("%")
+  setlocal bt=nofile nobl ma nonu nowrap noro
+  exe "file ".escape(fname,' ')
+  if g:netrw_use_noswf
+   setlocal noswf
+  endif
+"call Dredir("ls!")
+"  call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
+  exe "setlocal ts=".g:netrw_maxfilenamelen
+  if g:netrw_fastbrowse > a:islocal
+   setlocal bh=hide
   else
-   setlocal nocin noai noci magic nospell fo=nroql2 nohid
+   setlocal bh=delete
+  endif
+"  call Dret("s:NetrwListSettings")
+endfun
+
+" ---------------------------------------------------------------------
+" s:PerformListing: {{{2
+fun! s:PerformListing(islocal)
+"  call Dfunc("s:PerformListing(islocal=".a:islocal.")")
+
+"   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1	" Decho
+"    call Decho("(netrw) Processing your browsing request...")
+"   endif								" Decho
+
+"   call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'))
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+    " force a refresh for tree listings
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    setlocal ma noro
+    keepjumps %d
+   endif
+
+  " save current directory on directory history list
+  call s:NetBookmarkDir(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 w:netrw_bannercnt
+
+  let sortby= g:netrw_sort_by
+  if g:netrw_sort_direction =~ "^r"
+   let sortby= sortby." reversed"
+  endif
+
+  " Sorted by... {{{3
+"  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
+"   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
+  endif
+  exe 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
+   endif
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
   endif
-  setlocal tw   =0
-  setlocal report=10000
-  if has("win32") && !has("win95")
-   let w:swfkeep= &swf
-   setlocal noswf
-"  call Decho("setting w:swfkeep to <".&swf.">")
+  exe 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 w:netrw_bannercnt
+"  call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
+
+  " set up syntax highlighting {{{3
+"  call Decho("set up syntax highlighting")
+  if has("syntax")
+   setlocal ft=netrw
+   if !exists("g:syntax_on") || !g:syntax_on
+    setlocal ft=
+   endif
+  endif
+
+  " get list of files
+  if a:islocal
+   call s:LocalListing()
+  else " remote
+   call s:RemoteListing()
   endif
-
-"  call Dret("NetOptionSave")
+"  call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
+
+  " manipulate the directory listing (hide, sort) {{{3
+  if 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:NetListHide()
+   endif
+   if 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:SetSort()
+
+     if 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
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
+      else
+       " reverse direction sorting
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      endif
+     endif
+     " remove priority pattern prefix
+"     call Decho("remove priority pattern prefix")
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
+
+    elseif a:islocal
+     if 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')
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
+      else
+"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      endif
+     endif
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+    endif
+
+   elseif g:netrw_sort_direction =~ 'r'
+"    call Decho('reverse the sorted listing')
+    exe 'silent keepjumps '.w:netrw_bannercnt.'g/^/m '.w:netrw_bannercnt
+   endif
+  endif
+
+  " convert to wide/tree listing {{{3
+"  call Decho("modify display if wide/tree listing style")
+  call s:NetWideListing()
+  call s:NetTreeListing(b:netrw_curdir)
+
+  if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
+   " place cursor on the top-left corner of the file listing
+"   call Decho("place cursor on top-left corner of file listing")
+   exe 'silent '.w:netrw_bannercnt
+   norm! 0
+  endif
+
+  " record previous current directory
+  let w:netrw_prvdir= b:netrw_curdir
+"  call Decho("record netrw_prvdir<".w:netrw_prvdir.">")
+
+  " save certain window-oriented variables into buffer-oriented variables {{{3
+  call s:SetBufWinVars()
+  call s:NetOptionRestore()
+
+  " set display to netrw display settings
+"  call Decho("set display to netrw display settings (noma nomod etc)")
+  setlocal noma nomod nonu nobl nowrap ro
+  if exists("s:treecurpos")
+   call setpos('.',s:treecurpos)
+   unlet s:treecurpos
+  endif
+
+"  call Dret("s:PerformListing : curpos<".string(getpos(".")).">")
 endfun
 
-" ------------------------------------------------------------------------
-" NetOptionRestore: restore options {{{2
-fun! s:NetOptionRestore()
-"  call Dfunc("NetOptionRestore()")
-  if !exists("w:netoptionsave")
-"   call Dret("NetOptionRestore : w:netoptionsave doesn't exist")
+" ---------------------------------------------------------------------
+"  s:NetBrowseChgDir: constructs a new directory based on the current {{{2
+"                     directory and a new directory name
+fun! s:NetBrowseChgDir(islocal,newdir,...)
+"  call Dfunc("s:NetBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
+
+  if !exists("b:netrw_curdir")
+"   call Decho("(NetBrowseChgDir) b:netrw_curdir doesn't exist!")
+   echoerr "(NetBrowseChgDir) b:netrw_curdir doesn't exist!"
+"   call Dret("s:NetBrowseChgDir")
    return
   endif
-  unlet w:netoptionsave
-
-  if exists("&acd")
-   if exists("w:acdkeep") |let &acd    = w:acdkeep     |unlet w:acdkeep  |endif
+
+  call netrw#NetSavePosn()
+  let nbcd_curpos = getpos('.')
+  let dirname     = substitute(b:netrw_curdir,'\\','/','ge')
+  let newdir      = a:newdir
+
+  " set up o/s-dependent directory recognition pattern
+  if has("amiga")
+   let dirpat= '[\/:]$'
+  else
+   let dirpat= '[\/]$'
+  endif
+"  call Decho("dirname<".dirname.">  dirpat<".dirpat.">")
+
+  if dirname !~ dirpat
+   " apparently vim is "recognizing" that it is in a directory and
+   " is removing the trailing "/".  Bad idea, so I have to put it back.
+   let dirname= dirname.'/'
+"   call Decho("adjusting dirname<".dirname.">")
+  endif
+
+  if newdir !~ dirpat
+   " handling a file
+"   call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
+    let dirname= s:NetTreeDir().newdir
+"    call Decho("tree listing")
+   elseif newdir =~ '^\(/\|\a:\)'
+    let dirname= newdir
+   else
+    let dirname= s:ComposePath(dirname,newdir)
+   endif
+"   call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
+   " this lets NetBrowseX avoid the edit
+   if a:0 < 1
+"    call Decho("dirname<".dirname."> netrw_cd_escape<".s:netrw_cd_escape."> browse_split=".g:netrw_browse_split)
+"    call Decho("about to edit<".escape(dirname,s:netrw_cd_escape).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
+    if !exists("s:didsplit")
+     if     g:netrw_browse_split == 1
+      new
+      wincmd _
+     elseif g:netrw_browse_split == 2
+      rightb vert new
+      wincmd |
+     elseif g:netrw_browse_split == 3
+      tabnew
+     else
+      " handling a file, didn't split, so remove menu
+"      call Decho("handling a file+didn't split, so remove menu")
+      call s:NetMenu(0)
+      " optional change to window
+      if g:netrw_chgwin >= 1 
+       exe g:netrw_chgwin."wincmd w"
+      endif
+     endif
+    endif
+    " edit the file
+    " its local only: LocalBrowseCheck() doesn't edit a file, but NetBrowse() will
+    if a:islocal
+"     call Decho("edit file: exe e! ".escape(dirname,s:netrw_cd_escape))
+     exe "e! ".escape(dirname,s:netrw_cd_escape)
+    endif
+    setlocal ma nomod noro
+   endif
+
+  elseif newdir =~ '^/'
+   " just go to the new directory spec
+"   call Decho('case "just go to new directory spec": newdir<'.newdir.'>')
+   let dirname= newdir
+
+  elseif newdir == './'
+   " refresh the directory list
+"   call Decho('case "refresh directory listing": newdir == "./"')
+
+  elseif newdir == '../'
+   " go up one directory
+"   call Decho('case "go up one directory": newdir == "../"')
+
+   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+    " force a refresh
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    setlocal noro ma
+    keepjumps %d
+   endif
+
+   if has("amiga")
+    " amiga
+"    call Decho('case "go up one directory": newdir == "../" and amiga')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
+     let dirname= substitute(dirname,'/$','','')
+    else
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
+    endif
+"    call Decho("amiga: dirname<".dirname."> (go up one dir)")
+
+   else
+    " unix or cygwin
+"    call Decho('case "go up one directory": newdir == "../" and unix or cygwin')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
+     if dirname == ""
+      let dirname= '/'
+     endif
+    else
+     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
+    endif
+"    call Decho("unix: dirname<".dirname."> (go up one dir)")
+   endif
+
+  elseif w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+"   call Decho('case liststyle is TREELIST and w:netrw_treedict exists')
+   " force a refresh (for TREELIST, wait for NetTreeDir() to force the refresh)
+   setlocal noro ma
+   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    keepjumps %d
+   endif
+   let treedir      = s:NetTreeDir()
+   let s:treecurpos = nbcd_curpos
+   let haskey= 0
+"   call Decho("w:netrw_treedict<".string(w:netrw_treedict).">")
+
+   " search treedict for tree dir as-is
+   if has_key(w:netrw_treedict,treedir)
+"    call Decho('....searched for treedir<'.treedir.'> : found it!')
+    let haskey= 1
+   else
+"    call Decho('....searched for treedir<'.treedir.'> : not found')
+   endif
+
+   " search treedict for treedir with a / appended
+   if !haskey && treedir !~ '/$'
+    if has_key(w:netrw_treedict,treedir."/")
+     let treedir= treedir."/"
+"     call Decho('....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
+    else
+"     call Decho('....searched for treedir<'.treedir.'/> : not found')
+    endif
+   endif
+
+   " search treedict for treedir with any trailing / elided
+   if !haskey && treedir =~ '/$'
+    let treedir= substitute(treedir,'/$','','')
+    if has_key(w:netrw_treedict,treedir)
+"     call Decho('....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
+    else
+"     call Decho('....searched for treedir<'.treedir.'> : not found')
+    endif
+   endif
+
+   if haskey
+    " 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("yielding treedict<".string(w:netrw_treedict).">")
+    let dirname= w:netrw_treetop
+   else
+    " go down one directory
+    let dirname= substitute(treedir,'/*$','/','')
+"    call Decho("go down one dir: treedir<".treedir.">")
+   endif
+
+  else
+   " go down one directory
+   let dirname= s:ComposePath(dirname,newdir)
+"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
+  endif
+
+"  call Dret("s:NetBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
+  return dirname
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetHide: this function is invoked by the "a" map for browsing {{{2
+"          and switches the hiding mode
+fun! s:NetHide(islocal)
+"  call Dfunc("NetHide(islocal=".a:islocal.")")
+   let g:netrw_hide=(g:netrw_hide+1)%3
+   exe "norm! 0"
+   if g:netrw_hide && g:netrw_list_hide == ""
+    call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
+"    call Dret("NetHide")
+    return
+   endif
+   call netrw#NetSavePosn()
+   call s:NetRefresh(a:islocal,s:NetBrowseChgDir(a:islocal,'./'))
+"  call Dret("NetHide")
+endfun
+
+" ---------------------------------------------------------------------
+
+" ===========================================
+" s:NetPreview: {{{2
+fun! s:NetPreview(path) range
+"  call Dfunc("NetPreview(path<".a:path.">)")
+  if has("quickfix")
+   if !isdirectory(a:path)
+    exe "pedit ".escape(a:path,g:netrw_fname_escape)
+   elseif !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
+   endif
+  elseif !exists("g:netrw_quiet")
+   call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
+  endif
+"  call Dret("NetPreview")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetSortStyle: change sorting style (name - time - size) and refresh display {{{2
+fun! s:NetSortStyle(islocal)
+"  call Dfunc("s:NetSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">")
+  call s:NetSaveWordPosn()
+
+  let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'
+  norm! 0
+  call netrw#NetSavePosn()
+  call s:NetRefresh(a:islocal,s:NetBrowseChgDir(a:islocal,'./'))
+
+"  call Dret("s:NetSortStyle : netrw_sort_by<".g:netrw_sort_by.">")
+endfun
+
+" ---------------------------------------------------------------------
+"  Remote Directory Browsing Support:    {{{1
+" ===========================================
+
+" ---------------------------------------------------------------------
+" s:RemoteListing: {{{2
+fun! s:RemoteListing()
+"  call Dfunc("s:RemoteListing() b:netrw_curdir<".b:netrw_curdir.">)")
+
+  call s:RemotePathAnalysis(b:netrw_curdir)
+
+  " sanity check:
+  if exists("b:netrw_method") && b:netrw_method =~ '[235]'
+"   call Decho("b:netrw_method=".b:netrw_method)
+   if !executable("ftp")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18)
+    endif
+    call s:NetOptionRestore()
+"    call Dret("s:RemoteListing")
+    return
+   endif
+
+  elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
+   if !exists("g:netrw_quiet")
+    if g:netrw_list_cmd == ""
+     call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47)
+    else
+     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
+    endif
+   endif
+
+   call s:NetOptionRestore()
+"   call Dret("s:RemoteListing")
+   return
+  endif  " (remote handling sanity check)
+
+  if exists("b:netrw_method")
+"   call Decho("setting w:netrw_method<".b:netrw_method.">")
+   let w:netrw_method= b:netrw_method
+  endif
+
+  if s:method == "ftp"
+   " use ftp to get remote file listing
+"   call Decho("use ftp to get remote file listing")
+   let s:method  = "ftp"
+   let listcmd = g:netrw_ftp_list_cmd
+   if g:netrw_sort_by =~ '^t'
+    let listcmd= g:netrw_ftp_timelist_cmd
+   elseif g:netrw_sort_by =~ '^s'
+    let listcmd= g:netrw_ftp_sizelist_cmd
+   endif
+"   call Decho("listcmd<".listcmd."> (using g:netrw_ftp_list_cmd)")
+   call s:NetBrowseFtpCmd(s:path,listcmd)
+"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))'
+
+   if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
+    " shorten the listing
+"    call Decho("generate short listing")
+    exe "keepjumps ".w:netrw_bannercnt
+
+    " cleanup
+    if g:netrw_ftp_browse_reject != ""
+     exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
+    endif
+    silent! keepjumps %s/\r$//e
+
+    " if there's no ../ listed, then put ./ and ../ in
+    let line1= line(".")
+    exe "keepjumps ".w:netrw_bannercnt
+    let line2= search('^\.\.\/\%(\s\|$\)','cnW')
+    if line2 == 0
+"     call Decho("netrw is putting ./ and ../ into listing")
+     keepjumps put='../'
+     keepjumps put='./'
+    endif
+    exe "keepjumps ".line1
+    keepjumps norm! 0
+
+"    call Decho("line1=".line1." line2=".line2." line(.)=".line("."))
+    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\+//'
+    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'
+    endif
+   endif
+
+  else
+   " use ssh to get remote file listing {{{3
+"   call Decho("use ssh to get remote file listing: s:netrw_shq<".g:netrw_shq."> s:path<".s:path."> s:netrw_cd_escape<".s:netrw_cd_escape.">")
+   let listcmd= s:MakeSshCmd(g:netrw_list_cmd)
+"   call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)")
+   if g:netrw_scp_cmd =~ '^pscp'
+"    call Decho("1: exe silent r! ".listcmd.g:netrw_shq.s:path.g:netrw_shq)
+    exe "silent r! ".listcmd.g:netrw_shq.s:path.g:netrw_shq
+    " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
+    g/^Listing directory/d
+    g/^d[-rwx][-rwx][-rwx]/s+$+/+e
+    silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e
+    if g:netrw_liststyle != s:LONGLIST 
+     g/^[dlsp-][-rwx][-rwx][-rwx]/s/^.*\s\(\S\+\)$/\1/e
+    endif
+   else
+    if s:path == ""
+"     call Decho("2: exe silent r! ".listcmd)
+     exe "silent r! ".listcmd
+    else
+"     call Decho("3: exe silent r! ".listcmd." ".g:netrw_shq.s:path.g:netrw_shq)
+     exe "silent r! ".listcmd." ".g:netrw_shq.s:path.g:netrw_shq
+    endif
+   endif
+
+   " cleanup
+   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"
+   endif
+  endif
+
+  if w:netrw_liststyle == s:LONGLIST
+   " do a long listing; these substitutions need to be done prior to sorting {{{3
+"   call Decho("fix long listing:")
+
+   if s:method == "ftp"
+    " cleanup
+    exe "keepjumps ".w:netrw_bannercnt
+    while getline(".") =~ g:netrw_ftp_browse_reject
+     keepjumps d
+    endwhile
+    " if there's no ../ listed, then put ./ and ../ in
+    let line1= line(".")
+    keepjumps 1
+    silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
+    let line2= line(".")
+    if line2 == 0
+     exe 'keepjumps '.w:netrw_bannercnt."put='./'"
+     if b:netrw_curdir != '/'
+      exe 'keepjumps '.w:netrw_bannercnt."put='../'"
+     endif
+    endif
+   exe "keepjumps ".line1
+   keepjumps norm! 0
+   endif
+
+   if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
+"    call Decho("M$ ftp site listing cleanup")
+    exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+\)\(\w.*\)$/\2\t\1/'
+   elseif exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$")
+"    call Decho("normal ftp site listing cleanup: bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
+    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
+   endif
+  endif
+
+"  if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho
+"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))'
+"  endif " Decho
+"  call Dret("s:RemoteListing")
+endfun
+
+" ---------------------------------------------------------------------
+"  NetGetWord: it gets the directory named under the cursor {{{2
+fun! s:NetGetWord()
+"  call Dfunc("NetGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
+  call s:UseBufWinVars()
+
+  " insure that w:netrw_liststyle is set up
+  if !exists("w:netrw_liststyle")
+   if exists("g:netrw_liststyle")
+    let w:netrw_liststyle= g:netrw_liststyle
+   else
+    let w:netrw_liststyle= s:THINLIST
+   endif
+"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
+  endif
+
+  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
+   " Active Banner support
+"   call Decho("active banner handling")
+   norm! 0
+   let dirname= "./"
+   let curline= getline(".")
+
+   if curline =~ '"\s*Sorted by\s'
+    norm s
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "s" also works'
+
+   elseif curline =~ '"\s*Sort sequence:'
+    let s:netrw_skipbrowse= 1
+    echo 'Press "S" to edit sorting sequence'
+
+   elseif curline =~ '"\s*Quick Help:'
+    norm ?
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "?" also works'
+
+   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
+    norm a
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "a" also works'
+
+   elseif line("$") > w:netrw_bannercnt
+    exe 'silent keepjumps '.w:netrw_bannercnt
+   endif
+
+  elseif w:netrw_liststyle == s:THINLIST
+"   call Decho("thin column handling")
+   norm! 0
+   let dirname= getline(".")
+
+  elseif w:netrw_liststyle == s:LONGLIST
+"   call Decho("long column handling")
+   norm! 0
+   let dirname= substitute(getline("."),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
+
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("treelist handling")
+   let dirname= substitute(getline("."),'^\(| \)*','','e')
+
+  else
+"   call Decho("obtain word from wide listing")
+   let dirname= getline(".")
+
+   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 Decho("computed cpf")
+   endif
+
+"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
+   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
+"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
+"   call Decho("1: dirname<".dirname.">")
+   if filestart > 0|let dirname= substitute(dirname,'^.\{'.filestart.'}','','')|endif
+"   call Decho("2: dirname<".dirname.">")
+   let dirname   = substitute(dirname,'^\(.\{'.b:netrw_cpf.'}\).*$','\1','e')
+"   call Decho("3: dirname<".dirname.">")
+   let dirname   = substitute(dirname,'\s\+$','','e')
+"   call Decho("4: dirname<".dirname.">")
+  endif
+
+"  call Dret("NetGetWord <".dirname.">")
+  return dirname
+endfun
+
+" ---------------------------------------------------------------------
+" NetBrowseRm: remove/delete a remote file or directory {{{2
+fun! s:NetBrowseRm(usrhost,path) range
+"  call Dfunc("NetBrowseRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol("."))
+"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
+
+  " preparation for removing multiple files/directories
+  let ctr= a:firstline
+  let all= 0
+
+  " remove multiple files and directories
+  while ctr <= a:lastline
+   exe ctr
+
+   let rmfile= s:NetGetWord()
+"   call Decho("rmfile<".rmfile.">")
+
+   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
+    " attempt to remove file
+"    call Decho("attempt to remove file")
+    if !all
+     echohl Statement
+     call inputsave()
+     let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+     call inputrestore()
+     echohl NONE
+     if ok == ""
+      let ok="no"
+     endif
+     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+     if ok =~ 'a\%[ll]'
+      let all= 1
+     endif
+    endif
+
+    if all || ok =~ 'y\%[es]' || ok == ""
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+      silent! keepjumps .,$d
+      call s:NetBrowseFtpCmd(a:path,"delete ".rmfile)
+     else
+      let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd)
+"      call Decho("attempt to remove file: system(".netrw_rm_cmd.")")
+      let ret= s:System("system",netrw_rm_cmd)
+"      call Decho("returned=".ret." errcode=".v:shell_error)
+     endif
+    elseif ok =~ 'q\%[uit]'
+     break
+    endif
+
+   else
+    " attempt to remove directory
+"    call Decho("attempt to remove directory")
+    if !all
+     call inputsave()
+     let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+     call inputrestore()
+     if ok == ""
+      let ok="no"
+     endif
+     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+     if ok =~ 'a\%[ll]'
+      let all= 1
+     endif
+    endif
+
+    if all || ok =~ 'y\%[es]' || ok == ""
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+      call s:NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
+     else
+      let rmfile          = substitute(a:path.rmfile,'/$','','')
+      let netrw_rmdir_cmd = s:MakeSshCmd(g:netrw_rmdir_cmd).' '.rmfile
+"      call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
+      let ret= s:System("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(g:netrw_rmf_cmd).' '.substitute(rmfile,'[\/]$','','e')
+"       call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
+       let ret= s:System("system",netrw_rmf_cmd)
+"       call Decho("returned=".ret." errcode=".v:shell_error)
+
+       if v:shell_error != 0 && !exists("g:netrw_quiet")
+       	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
+       endif
+      endif
+     endif
+
+    elseif ok =~ 'q\%[uit]'
+     break
+    endif
+   endif
+
+   let ctr= ctr + 1
+  endwhile
+
+  " refresh the (remote) directory listing
+"  call Decho("refresh remote directory listing")
+  call netrw#NetSavePosn()
+  call s:NetRefresh(0,s:NetBrowseChgDir(0,'./'))
+
+"  call Dret("NetBrowseRm")
+endfun
+
+" ---------------------------------------------------------------------
+" NetBrowseRename: rename a remote file or directory {{{2
+fun! s:NetBrowseRename(usrhost,path) range
+"  call Dfunc("NetBrowseRename(usrhost<".a:usrhost."> path<".a:path.">)")
+
+  " preparation for removing multiple files/directories
+  let ctr        = a:firstline
+  let rename_cmd = s:MakeSshCmd(g:netrw_rename_cmd)
+
+  " attempt to rename files/directories
+  while ctr <= a:lastline
+   exe "keepjumps ".ctr
+
+   norm! 0
+   let oldname= s:NetGetWord()
+"   call Decho("oldname<".oldname.">")
+
+   call inputsave()
+   let newname= input("Moving ".oldname." to : ",oldname)
+   call inputrestore()
+
+   if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+    call s:NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
+   else
+    let oldname= a:path.oldname
+    let newname= a:path.newname
+"    call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,s:netrw_cd_escape).'"')
+    let ret= s:System("system",rename_cmd.' "'.escape(oldname,s:netrw_cd_escape).'" "'.escape(newname,s:netrw_cd_escape).'"')
+   endif
+
+   let ctr= ctr + 1
+  endwhile
+
+  " refresh the directory
+  let curline= line(".")
+  call s:NetBrowse(0,s:NetBrowseChgDir(0,'./'))
+  exe "keepjumps ".curline
+"  call Dret("NetBrowseRename")
+endfun
+
+" ---------------------------------------------------------------------
+" NetRefresh: {{{2
+fun! s:NetRefresh(islocal,dirname)
+"  call Dfunc("NetRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction)
+  " at the current time (Mar 19, 2007) all calls to NetRefresh() call NetBrowseChgDir() first.
+  " NetBrowseChgDir() may clear the display; hence a NetSavePosn() may not work if its placed here.
+  " Also, NetBrowseChgDir() now does a NetSavePosn() itself.
+  setlocal ma noro
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+  %d
+  if a:islocal
+   call netrw#LocalBrowseCheck(a:dirname)
+  else
+   call s:NetBrowse(a:islocal,a:dirname)
   endif
-  if exists("w:aikeep")   |let &ai     = w:aikeep      |unlet w:aikeep   |endif
-  if exists("w:cikeep")   |let &ci     = w:cikeep      |unlet w:cikeep   |endif
-  if exists("w:cinkeep")  |let &cin    = w:cinkeep     |unlet w:cinkeep  |endif
-  if exists("w:cinokeep") |let &cino   = w:cinokeep    |unlet w:cinokeep |endif
-  if exists("w:comkeep")  |let &com    = w:comkeep     |unlet w:comkeep  |endif
-  if exists("w:cpokeep")  |let &cpo    = w:cpokeep     |unlet w:cpokeep  |endif
-  if exists("w:dirkeep")  |exe "lcd ".w:dirkeep        |unlet w:dirkeep  |endif
-  if exists("w:fokeep")   |let &fo     = w:fokeep      |unlet w:fokeep   |endif
-  if exists("w:gdkeep")   |let &gd     = w:gdkeep      |unlet w:gdkeep   |endif
-  if exists("w:hidkeep")  |let &hidden = w:hidkeep     |unlet w:hidkeep  |endif
-  if exists("w:magic")    |let &magic  = w:magic       |unlet w:magic    |endif
-  if exists("w:repkeep")  |let &report = w:repkeep     |unlet w:repkeep  |endif
-  if exists("w:spellkeep")|let &spell  = w:spellkeep   |unlet w:spellkeep|endif
-  if exists("w:twkeep")   |let &tw     = w:twkeep      |unlet w:twkeep   |endif
-  if exists("w:swfkeep")
-   if &directory == "" && exists("w:swfkeep")
-    " user hasn't specified a swapfile directory;
-    " netrw will temporarily make the swapfile
-    " directory the current local one.
-    let &directory   = getcwd()
-    silent! let &swf = w:swfkeep
-    set directory=
+  call netrw#NetRestorePosn()
+  redraw!
+"  call Dret("NetRefresh")
+endfun
+
+" ---------------------------------------------------------------------
+" NetSplit: mode {{{2
+"           =0 : net   and o
+"           =1 : net   and t
+"           =2 : net   and v
+"           =3 : local and o
+"           =4 : local and t
+"           =5 : local and v
+fun! s:NetSplit(mode)
+"  call Dfunc("NetSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
+
+  call s:SaveWinVars()
+
+  if a:mode == 0
+   " remote and o
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call s:NetBrowse(0,s:NetBrowseChgDir(0,s:NetGetWord()))
+   unlet s:didsplit
+
+  elseif a:mode == 1
+   " remote and t
+   let cursorword  = s:NetGetWord()
+   tabnew
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call s:NetBrowse(0,s:NetBrowseChgDir(0,cursorword))
+   unlet s:didsplit
+
+  elseif a:mode == 2
+   " remote and v
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call s:NetBrowse(0,s:NetBrowseChgDir(0,s:NetGetWord()))
+   unlet s:didsplit
+
+  elseif a:mode == 3
+   " local and o
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call netrw#LocalBrowseCheck(s:NetBrowseChgDir(1,s:NetGetWord()))
+   unlet s:didsplit
+
+  elseif a:mode == 4
+   " local and t
+   let netrw_curdir= b:netrw_curdir
+   let cursorword  = s:NetGetWord()
+   tabnew
+   let b:netrw_curdir= netrw_curdir
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call netrw#LocalBrowseCheck(s:NetBrowseChgDir(1,cursorword))
+   unlet s:didsplit
+
+  elseif a:mode == 5
+   " local and v
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call netrw#LocalBrowseCheck(s:NetBrowseChgDir(1,s:NetGetWord()))
+   unlet s:didsplit
+
+  else
+   call netrw#ErrorMsg(s:ERROR,"(NetSplit) unsupported mode=".a:mode,45)
+  endif
+
+"  call Dret("NetSplit")
+endfun
+
+" ---------------------------------------------------------------------
+" NetBrowseX:  allows users to write custom functions to operate on {{{2
+"              files given their extension.  Passes 0=local, 1=remote
+fun! netrw#NetBrowseX(fname,remote)
+"  call Dfunc("NetBrowseX(fname<".a:fname."> remote=".a:remote.")")
+
+  " 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
+  let fname= escape(a:fname,"%#")
+"  call Decho("fname<".fname."> after escape()")
+
+  " seems kde systems often have gnome-open due to dependencies, even though
+  " gnome-open's subsidiary display tools are largely absent.  Kde systems
+  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
+  if !exists("s:haskdeinit")
+   if has("unix")
+    let s:haskdeinit= s:System("system",'ps -e') =~ 'kdeinit'
+    if v:shell_error
+     let s:haskdeinit = 0
+    endif
+   else
+    let s:haskdeinit= 0
+   endif
+"   call Decho("setting s:haskdeinit=".s:haskdeinit)
+  endif
+
+  if a:remote == 1
+   " create a local copy
+   let fname= fnamemodify(tempname(),":t:r").".".exten
+"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname."> as <".fname.">")
+   exe "silent keepjumps bot 1new ".a:fname
+   setlocal bh=delete
+"   call Decho("exe w! ".fname)
+   exe "w! ".fname
+   q
+  endif
+"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
+
+  " set up redirection
+  if &srr =~ "%s"
+   let redir= substitute(&srr,"%s","/dev/null","")
+  else
+   let redir= &srr . "/dev/null"
+  endif
+"  call Decho("redir{".redir."} srr{".&srr."}")
+
+  " execute the file handler
+  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
+"  call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+
+  elseif exists("g:netrw_browsex_viewer") && executable(g:netrw_browsex_viewer)
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+"   call Decho("exe silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."' ".redir)
+   exe "silent !".g:netrw_browsex_viewer." '".escape(fname,'%#')."'".redir
+   let ret= v:shell_error
+
+  elseif has("win32") || has("win64")
+"   call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"')
+   exe 'silent !start rundll32 url.dll,FileProtocolHandler "'.escape(fname, '%#').'"'
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
+"   call Decho("exe silent !gnome-open '".escape(fname,'%#')."' ".redir)
+   exe "silent !gnome-open '".escape(fname,'%#')."'".redir
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("kfmclient") && s:haskdeinit
+"   call Decho("exe silent !kfmclient exec '".escape(fname,'%#')."' ".redir)
+   exe "silent !kfmclient exec '".escape(fname,'%#')."' ".redir
+   let ret= v:shell_error
+
+  else
+   " netrwFileHandlers#Invoke() always returns 0
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+  endif
+
+  " if unsuccessful, attempt netrwFileHandlers#Invoke()
+  if ret
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+  endif
+
+  redraw!
+
+  " cleanup: remove temporary file,
+  "          delete current buffer if success with handler,
+  "          return to prior buffer (directory listing)
+  if a:remote == 1 && fname != a:fname
+"   call Decho("deleting temporary file<".fname.">")
+   call s:System("delete",fname)
+  endif
+
+  if a:remote == 1
+   setlocal bh=delete bt=nofile
+   if g:netrw_use_noswf
+    setlocal noswf
+   endif
+   exe "norm! \<c-o>"
+   redraw!
+  endif
+
+"  call Dret("NetBrowseX")
+endfun
+
+" ---------------------------------------------------------------------
+" NetBrowseFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2
+"  This function assumes that a long listing will be received.  Size, time,
+"  and reverse sorts will be requested of the server but not otherwise
+"  enforced here.
+fun! s:NetBrowseFtpCmd(path,listcmd)
+"  call Dfunc("NetBrowseFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
+"  call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt)
+
+  " because WinXX ftp uses unix style input
+  let ffkeep= &ff
+  setlocal ma ff=unix noro
+
+  " clear off any older non-banner lines
+  " note that w:netrw_bannercnt indexes the line after the banner
+"  call Decho('exe silent! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
+  exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
+
+  ".........................................
+  if w:netrw_method == 2 || w:netrw_method == 5 
+   " ftp + <.netrc>:  Method #2
+   if a:path != ""
+    put ='cd \"'.a:path.'\"'
+   endif
+   if exists("g:netrw_ftpextracmd")
+    exe "put ='".g:netrw_ftpextracmd."'"
+"    call Decho("filter input: ".getline("."))
+   endif
+   exe "put ='".a:listcmd."'"
+"   exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
+   if exists("g:netrw_port") && g:netrw_port != ""
+"    call Decho("exe ".g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+    exe g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
+   else
+"    call Decho("exe ".g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+    exe g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
+   endif
+
+   ".........................................
+  elseif w:netrw_method == 3
+   " ftp + machine,id,passwd,filename:  Method #3
+    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
+
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+     put ='\"'.g:netrw_passwd.'\"'
+    else
+     put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
+    endif
+
+   if a:path != ""
+    put ='cd \"'.a:path.'\"'
+   endif
+   if exists("g:netrw_ftpextracmd")
+    exe "put ='".g:netrw_ftpextracmd."'"
+"    call Decho("filter input: ".getline("."))
+   endif
+   exe "put ='".a:listcmd."'"
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+"    exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
+"    call Decho("exe ".g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n")
+    exe g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n"
+
+   ".........................................
+  else
+   call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
+  endif
+
+  " cleanup for Windows
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   silent! keepjumps %s/\r$//e
+  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/$/@/
+   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'
+   endif
+  endif
+
+  " ftp's listing doesn't seem to include ./ or ../
+  if !search('^\.\/$\|\s\.\/$','wn')
+   exe 'keepjumps '.w:netrw_bannercnt
+   put ='./'
+  endif
+  if !search('^\.\.\/$\|\s\.\.\/$','wn')
+   exe 'keepjumps '.w:netrw_bannercnt
+   put ='../'
+  endif
+
+  " restore settings
+  let &ff= ffkeep
+"  call Dret("NetBrowseFtpCmd")
+endfun
+
+" ---------------------------------------------------------------------
+" NetListHide: uses [range]g~...~d to delete files that match comma {{{2
+" separated patterns given in g:netrw_list_hide
+fun! s:NetListHide()
+"  call Dfunc("NetListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
+
+  " find a character not in the "hide" string to use as a separator for :g and :v commands
+  " How-it-works: take the hiding command, convert it into a range.  Duplicate
+  " characters don't matter.  Remove all such characters from the '/~...90'
+  " string.  Use the first character left as a separator character.
+  let listhide= g:netrw_list_hide
+  let sep     = strpart(substitute('/~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1)
+"  call Decho("sep=".sep)
+
+  while listhide != ""
+   if listhide =~ ','
+    let hide     = substitute(listhide,',.*$','','e')
+    let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
    else
-    let &swf= w:swfkeep
+    let hide     = listhide
+    let listhide= ""
+   endif
+
+   " Prune the list by hiding any files which match
+   if g:netrw_hide == 1
+"    call Decho("hiding<".hide."> listhide<".listhide.">")
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
+   elseif g:netrw_hide == 2
+"    call Decho("showing<".hide."> listhide<".listhide.">")
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
    endif
-   unlet w:swfkeep
+  endwhile
+  if g:netrw_hide == 2
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
   endif
 
-"  call Dret("NetOptionRestore")
+"  call Dret("NetListHide")
+endfun
+
+" ---------------------------------------------------------------------
+" NetHideEdit: allows user to edit the file/directory hiding list
+fun! s:NetHideEdit(islocal)
+"  call Dfunc("NetHideEdit(islocal=".a:islocal.")")
+
+  " save current cursor position
+  let s:nhe_curpos= getpos(".")
+
+  " get new hiding list from user
+  call inputsave()
+  let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
+  call inputrestore()
+  let g:netrw_list_hide= newhide
+"  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
+
+  " refresh the listing
+  silent call s:NetRefresh(a:islocal,s:NetBrowseChgDir(a:islocal,"./"))
+
+  " restore cursor position
+  call setpos('.',s:nhe_curpos)
+  unlet s:nhe_curpos
+
+"  call Dret("NetHideEdit")
+endfun
+
+" ---------------------------------------------------------------------
+" NetSortSequence: allows user to edit the sorting sequence
+fun! s:NetSortSequence(islocal)
+"  call Dfunc("NetSortSequence(islocal=".a:islocal.")")
+
+  call inputsave()
+  let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
+  call inputrestore()
+
+  " refresh the listing
+  let g:netrw_sort_sequence= newsortseq
+  call netrw#NetSavePosn()
+  call s:NetRefresh(a:islocal,s:NetBrowseChgDir(a:islocal,'./'))
+
+"  call Dret("NetSortSequence")
+endfun
+
+" ---------------------------------------------------------------------
+"  NetListStyle: {{{2
+"  islocal=0: remote browsing
+"         =1: local browsing
+fun! s:NetListStyle(islocal)
+"  call Dfunc("NetListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
+  let fname             = s:NetGetWord()
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
+"  call Decho("fname<".fname.">")
+"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
+"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
+
+  if w:netrw_liststyle == s:THINLIST
+   " use one column listing
+"   call Decho("use one column list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+
+  elseif w:netrw_liststyle == s:LONGLIST
+   " use long list
+"   call Decho("use long list")
+   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
+
+  elseif w:netrw_liststyle == s:WIDELIST
+   " give wide list
+"   call Decho("use wide list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("use tree list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+
+  else
+   call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
+   let g:netrw_liststyle = s:THINLIST
+   let w:netrw_liststyle = g:netrw_liststyle
+   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
+  endif
+  setlocal ma noro
+
+  " clear buffer - this will cause NetBrowse/LocalBrowseCheck to do a refresh
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+  %d
+
+  " refresh the listing
+  call netrw#NetSavePosn()
+  call s:NetRefresh(a:islocal,s:NetBrowseChgDir(a:islocal,'./'))
+
+  " keep cursor on the filename
+  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 w:netrw_bannercnt
+  endif
+
+"  call Dret("NetListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
+endfun
+
+" ---------------------------------------------------------------------
+" NetWideListing: {{{2
+fun! s:NetWideListing()
+
+  if w:netrw_liststyle == s:WIDELIST
+"   call Dfunc("NetWideListing() 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
+   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'
+   else
+"    call Dret("NetWideListing")
+    return
+   endif
+"   call Decho("max file strlen+1=".b:netrw_cpf)
+   let b:netrw_cpf= b:netrw_cpf + 1
+
+   " 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)
+
+   " make wide display
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
+   let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
+   let newcolstart = w:netrw_bannercnt + fpc
+   let newcolend   = newcolstart + fpc - 1
+"   call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]")
+   silent! let keepregstar = @*
+   while line("$") >= newcolstart
+    if newcolend > line("$") | let newcolend= line("$") | endif
+    let newcolqty= newcolend - newcolstart
+    exe newcolstart
+    if newcolqty == 0
+     exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
+    else
+     exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
+    endif
+    exe "silent keepjumps ".newcolstart.','.newcolend.'d'
+    exe 'silent keepjumps '.w:netrw_bannercnt
+   endwhile
+   silent! let @*= keepregstar
+   exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
+   setlocal noma nomod ro
+"   call Dret("NetWideListing")
+  endif
+
 endfun
 
-" ------------------------------------------------------------------------
-" NetReadFixup: this sort of function is typically written by the user {{{2
-"               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"
+" ---------------------------------------------------------------------
+" NetTreeDir: determine tree directory given current cursor position {{{2
+" (full path directory with trailing slash returned)
+fun! s:NetTreeDir()
+"  call Dfunc("NetTreeDir() curline#".line(".")."<".getline(".")."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%"))
+
+  let treedir= b:netrw_curdir
+"  call Decho("set initial treedir<".treedir.">")
+  let s:treecurpos= getpos(".")
+
+  if w:netrw_liststyle == s:TREELIST
+"   call Decho("w:netrrw_liststyle is TREELIST:")
+"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
+   if getline('.') =~ '/$'
+    let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e')
+   else
+    let treedir= ""
+   endif
+
+"   call Decho("treedir<".treedir.">")
+
+   " detect user attempting to close treeroot
+   if getline('.') !~ '|' && getline('.') != '..'
+"    call Decho("user attempted to close treeroot")
+    " now force a refresh
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    keepjumps %d
+"    call Dret("NetTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
+    return b:netrw_curdir
+   endif
+
+   " elide all non-depth information
+   let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
+"   call Decho("depth<".depth."> 1st subst")
+
+   " elide first depth
+   let depth = substitute(depth,'^| ','','')
+"   call Decho("depth<".depth."> 2nd subst")
+
+   " construct treedir by searching backwards at correct depth
+"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
+   while depth != "" && search('^'.depth.'[^|].\{-}/$','bW')
+    let dirname= substitute(getline("."),'^\(| \)*','','e')
+    let treedir= dirname.treedir
+    let depth  = substitute(depth,'^| ','','')
+"    call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
+   endwhile
+   if w:netrw_treetop =~ '/$'
+    let treedir= w:netrw_treetop.treedir
+   else
+    let treedir= w:netrw_treetop.'/'.treedir
+   endif
+"   call Decho("bufnr(.)=".bufnr(".")." line($)=".line("$")." line(.)=".line("."))
+  endif
+  let treedir= substitute(treedir,'//$','/','')
+
+"  " now force a refresh
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+"  setlocal ma noro
+"  keepjumps %d
+
+"  call Dret("NetTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
+  return treedir
+endfun
+
+" ---------------------------------------------------------------------
+" NetTreeDisplay: recursive tree display {{{2
+fun! s:NetTreeDisplay(dir,depth)
+"  call Dfunc("NetTreeDisplay(dir<".a:dir."> depth<".a:depth.">)")
+
+  " insure that there are no folds
+  setlocal nofen
+
+  " install ../ and shortdir
+  if a:depth == ""
+   call setline(line("$")+1,'../')
+"   call Decho("setline#".line("$")." ../ (depth is zero)")
+  endif
+  if a:dir =~ '^\a\+://'
+   if a:dir == w:netrw_treetop
+    let shortdir= a:dir
+   else
+    let shortdir= substitute(a:dir,'^.*/\([^/]\+\)/$','\1/','e')
    endif
-"   call Dret("NetReadFixup")
- endfun
-endif
+   call setline(line("$")+1,a:depth.shortdir)
+  else
+   let shortdir= substitute(a:dir,'^.*/','','e')
+   call setline(line("$")+1,a:depth.shortdir.'/')
+  endif
+"  call Decho("setline#".line("$")." shortdir<".a:depth.shortdir.">")
+
+  " append a / to dir if its missing one
+  let dir= a:dir
+  if dir !~ '/$'
+   let dir= dir.'/'
+  endif
+
+  " display subtrees (if any)
+  let depth= "| ".a:depth
+"  call Decho("display subtrees with depth<".depth."> and current leaves")
+  for entry in w:netrw_treedict[a:dir]
+   let direntry= substitute(dir.entry,'/$','','e')
+"   call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">")
+   if entry =~ '/$' && has_key(w:netrw_treedict,direntry)
+"    call Decho("<".direntry."> is a key in treedict - display subtree for it")
+    call s:NetTreeDisplay(direntry,depth)
+   elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/')
+"    call Decho("<".direntry."/> is a key in treedict - display subtree for it")
+    call s:NetTreeDisplay(direntry.'/',depth)
+   else
+"    call Decho("<".entry."> is not a key in treedict (no subtree)")
+    call setline(line("$")+1,depth.entry)
+   endif
+  endfor
+"  call Dret("NetTreeDisplay")
+endfun
+
+" ---------------------------------------------------------------------
+" NetTreeListing: displays tree listing from treetop on down, using NetTreeDisplay() {{{2
+fun! s:NetTreeListing(dirname)
+  if w:netrw_liststyle == s:TREELIST
+"   call Dfunc("NetTreeListing() bufname<".expand("%").">")
+"   call Decho("curdir<".a:dirname.">")
+
+   " update the treetop
+"   call Decho("update the treetop")
+   if !exists("w:netrw_treetop")
+    let w:netrw_treetop= a:dirname
+"    call Decho("w:netrw_treetop<".w:netrw_treetop."> (reusing)")
+   elseif (w:netrw_treetop =~ ('^'.a:dirname) && strlen(a:dirname) < strlen(w:netrw_treetop)) || a:dirname !~ ('^'.w:netrw_treetop)
+    let w:netrw_treetop= a:dirname
+"    call Decho("w:netrw_treetop<".w:netrw_treetop."> (went up)")
+   endif
+
+   " insure that we have at least an empty treedict
+   if !exists("w:netrw_treedict")
+    let w:netrw_treedict= {}
+   endif
+
+   " update the directory listing for the current directory
+"   call Decho("updating dictionary with ".a:dirname.":[..directory listing..]")
+"   call Decho("bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
+   exe "silent! keepjumps ".w:netrw_bannercnt.',$g@^\.\.\=/$@d'
+   let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$"))
+"   call Decho("treedict=".string(w:netrw_treedict))
+   exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
+
+   " if past banner, record word
+   if exists("w:netrw_bannercnt") && line(".") > w:netrw_bannercnt
+    let fname= expand("<cword>")
+   else
+    let fname= ""
+   endif
+
+   " display from treetop on down
+   call s:NetTreeDisplay(w:netrw_treetop,"")
+
+   " place cursor
+   if !exists("s:nbcd_curpos")
+    if fname != ""
+"     call Decho("(NetTreeListing) place cursor <".fname.">")
+     call search('\<'.fname.'\>','cw')
+    elseif exists("w:netrw_bannercnt")
+     exe (w:netrw_bannercnt+1)
+"     call Decho("(NetTreeListing) place cursor line#".(w:netrw_bannercnt+1))
+    endif
+   endif
+
+"   call Dret("NetTreeListing : bufname<".expand("%").">")
+  endif
+endfun
+
+" ---------------------------------------------------------------------
+" NetSaveWordPosn: used by the "s" command in both remote and local {{{2
+" browsing.  Along with NetRestoreWordPosn(), it keeps the cursor on
+" the same word even though the sorting has changed its order of appearance.
+fun! s:NetSaveWordPosn()
+"  call Dfunc("NetSaveWordPosn()")
+  let s:netrw_saveword= '^'.escape(getline("."),s:netrw_cd_escape).'$'
+"  call Dret("NetSaveWordPosn : saveword<".s:netrw_saveword.">")
+endfun
+
+" ---------------------------------------------------------------------
+" NetRestoreWordPosn: used by the "s" command; see NetSaveWordPosn() above {{{2
+fun! s:NetRestoreWordPosn()
+"  call Dfunc("NetRestoreWordPosn()")
+  silent! call search(s:netrw_saveword,'w')
+"  call Dret("NetRestoreWordPosn")
+endfun
 
 " ---------------------------------------------------------------------
-" NetSort: Piet Delport's BISort2() function, modified to take a range {{{2
-if v:version < 700
- fun! s:NetSort() range
-" "  call Dfunc("NetSort()")
-
-  let i = a:firstline + 1
-  while i <= a:lastline
-    " find insertion point via binary search
-    let i_val = getline(i)
-    let lo    = a:firstline
-    let hi    = i
-    while lo < hi
-     let mid     = (lo + hi) / 2
-     let mid_val = getline(mid)
-     if g:netrw_sort_direction =~ '^n'
-      " normal sorting order
-      if i_val < mid_val
-       let hi = mid
+" NetMakeDir: this function makes a directory (both local and remote) {{{2
+fun! s:NetMakeDir(usrhost)
+"  call Dfunc("NetMakeDir(usrhost<".a:usrhost.">)")
+
+  " get name of new directory from user.  A bare <CR> will skip.
+  " if its currently a directory, also request will be skipped, but with
+  " a message.
+  call inputsave()
+  let newdirname= input("Please give directory name: ")
+  call inputrestore()
+"  call Decho("newdirname<".newdirname.">")
+
+  if newdirname == ""
+"   call Dret("NetMakeDir : user aborted with bare <cr>")
+   return
+  endif
+
+  if a:usrhost == ""
+
+   " Local mkdir:
+   " sanity checks
+   let fullnewdir= b:netrw_curdir.'/'.newdirname
+"   call Decho("fullnewdir<".fullnewdir.">")
+   if isdirectory(fullnewdir)
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
+    endif
+"    call Dret("NetMakeDir : directory<".newdirname."> exists previously")
+    return
+   endif
+   if s:FileReadable(fullnewdir)
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
+    endif
+"    call Dret("NetMakeDir : file<".newdirname."> exists previously")
+    return
+   endif
+
+   " requested new local directory is neither a pre-existing file or
+   " directory, so make it!
+   if exists("*mkdir")
+    call mkdir(fullnewdir,"p")
+   else
+    let netrw_origdir= s:NetGetcwd(1)
+    exe 'keepjumps cd '.b:netrw_curdir
+"    call Decho("netrw_origdir<".netrw_origdir.">: cd b:netrw_curdir<".b:netrw_curdir.">")
+"    call Decho("exe silent! !".g:netrw_local_mkdir.' '.g:netrw_shq.newdirname.g:netrw_shq)
+    exe "silent! !".g:netrw_local_mkdir.' '.g:netrw_shq.newdirname.g:netrw_shq
+    if !g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
+    if !g:netrw_keepdir
+     exe 'keepjumps cd '.netrw_origdir
+"     call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".netrw_origdir)
+    endif
+   endif
+
+   if v:shell_error == 0
+    " refresh listing
+"    call Decho("refresh listing")
+    call netrw#NetSavePosn()
+    call s:NetRefresh(1,s:NetBrowseChgDir(1,'./'))
+   elseif !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26)
+   endif
+   redraw!
+
+  else
+   " Remote mkdir:
+   let mkdircmd  = s:MakeSshCmd(g:netrw_mkdir_cmd)
+   let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
+"   call Decho("exe silent! !".mkdircmd." ".g:netrw_shq.newdirname.g:netrw_shq)
+   exe "silent! !".mkdircmd." ".g:netrw_shq.newdirname.g:netrw_shq
+   if v:shell_error == 0
+    " refresh listing
+    call netrw#NetSavePosn()
+    call s:NetRefresh(0,s:NetBrowseChgDir(0,'./'))
+   elseif !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
+   endif
+   redraw!
+  endif
+
+"  call Dret("NetMakeDir")
+endfun
+
+" ---------------------------------------------------------------------
+"  NetBookmarkDir: {{{2
+"    0: (user: <b>)   bookmark current directory
+"    1: (user: <B>)   change to the bookmarked directory
+"    2: (user: <q>)   list bookmarks
+"    3: (browsing)    record current directory history
+"    4: (user: <u>)   go up   (previous) bookmark
+"    5: (user: <U>)   go down (next)     bookmark
+fun! s:NetBookmarkDir(chg,curdir)
+"  call Dfunc("NetBookmarkDir(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)
+
+  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
+   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 ".g:NETRW_BOOKMARKDIR_{v:count}
+   else
+    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
+   endif
+
+  elseif a:chg == 2
+   redraw!
+   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
+   endif
+
+   " list directory history
+   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)
+    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}
+     let didwork= 1
+    endif
+    let first = 0
+    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+    if cnt < 0
+     let cnt= cnt + g:netrw_dirhistmax
+    endif
+   endwhile
+   if didwork
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   endif
+
+  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}.">")
+   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
+   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("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+     setlocal ma noro
+     %d
+     setlocal nomod
+    endif
+"    call Decho("exe e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
+    exe "e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
+   else
+    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}.">")
+    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+     setlocal ma noro
+     %d
+     setlocal nomod
+    endif
+"    call Decho("exe e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
+    exe "e! ".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
+    endif
+    echo "Sorry, no successor directory exists yet"
+   endif
+  endif
+  call s:NetBookmarkMenu()
+"  call Dret("NetBookmarkDir")
+endfun
+
+" ---------------------------------------------------------------------
+" NetBookmarkMenu: {{{2
+fun! s:NetBookmarkMenu()
+  if !exists("s:netrw_menucnt")
+   return
+  endif
+"  call Dfunc("NetBookmarkMenu() bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." menucnt=".s:netrw_menucnt)
+  if has("menu") && has("gui_running") && &go =~ 'm'
+   if exists("g:NetrwTopLvlMenu")
+    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmark'
+   endif
+
+   " show bookmarked places
+   let cnt       = 0
+   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 '.g:NETRW_BOOKMARKDIR_{cnt})
+     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmdir.'	:e '.g:NETRW_BOOKMARKDIR_{cnt}."\<cr>"
+    endif
+    let cnt= cnt + 1
+   endwhile
+
+   " show directory browsing history
+   let cnt     = g:NETRW_DIRHIST_CNT
+   let first   = 1
+   let histcnt = 0
+   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 '.g:NETRW_DIRHIST_{cnt})
+     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'	:e '.g:NETRW_DIRHIST_{cnt}."\<cr>"
+    endif
+    let first = 0
+    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+    if cnt < 0
+     let cnt= cnt + g:netrw_dirhistmax
+    endif
+   endwhile
+  endif
+"  call Dret("NetBookmarkMenu")
+endfun
+
+" ---------------------------------------------------------------------
+" NetObtain: obtain file under cursor (for remote browsing support) {{{2
+fun! netrw#NetObtain(vismode,...) range
+"  call Dfunc("NetObtain(vismode=".a:vismode.") a:0=".a:0)
+
+  if a:vismode == 0
+   " normal mode
+   let fname= expand("<cWORD>")
+"   call Decho("no arguments, use <".fname.">")
+  elseif a:vismode == 1
+   " visual mode
+   let keeprega = @a
+   norm! gv"ay
+   if g:netrw_liststyle == s:THINLIST
+    " thin listing
+    let filelist= split(@a,'\n')
+   elseif g:netrw_liststyle == s:LONGLIST
+    " long listing
+    let filelist= split(substitute(@a,'\t.\{-}\n','\n','g'),'\n')
+   else
+    " wide listing
+	let filelist = split(substitute(@a,'\s\{2,}','\n','g'),'\n')
+	let filelist = map(filelist,'substitute(v:val,"^\\s\\+","","")')
+	let filelist = map(filelist,'substitute(v:val,"\\s\\+$","","")')
+   endif
+"   call Decho("filelist<".string(filelist).">")
+   let @a= keeprega
+   for f in filelist
+    if f != ""
+     call netrw#NetObtain(2,f)
+    endif
+   endfor
+"   call Dret("NetObtain : visual mode handler")
+   return
+  elseif a:vismode == 2
+   " multiple file mode
+   let fname= a:1
+"   call Decho("visual mode handling: <".fname.">")
+  endif
+
+  " NetrwStatusLine support - for obtaining support
+  call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
+
+  if exists("w:netrw_method") && w:netrw_method =~ '[235]'
+"   call Decho("method=".w:netrw_method)
+   if executable("ftp")
+"    call Decho("ftp is executable, method=".w:netrw_method)
+    let curdir = b:netrw_curdir
+    let path   = substitute(curdir,'ftp://[^/]\+/','','e')
+    let curline= line(".")
+    let endline= line("$")+1
+    setlocal ma noro
+    keepjumps $
+"    call Decho("getcwd<".getcwd().">")
+"    call Decho("curdir<".curdir.">")
+"    call Decho("path<".path.">")
+"    call Decho("curline=".curline)
+"    call Decho("endline=".endline)
+
+    ".........................................
+    if w:netrw_method == 2
+     " ftp + <.netrc>: Method #2
+     setlocal ff=unix
+     if path != ""
+      put ='cd '.path
+"      call Decho("ftp:  cd ".path)
+     endif
+     put ='get '.fname
+"     call Decho("ftp:  get ".fname)
+     put ='quit'
+"     call Decho("ftp:  quit")
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+      exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
+     else
+"      call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+      exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
+     endif
+
+   ".........................................
+  elseif w:netrw_method == 3
+   " ftp + machine,id,passwd,filename: Method #3
+    setlocal ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho('ftp:  open '.g:netrw_machine.' '.g:netrw_port)
+    else
+     put ='open '.g:netrw_machine
+"     call Decho('ftp:  open '.g:netrw_machine)
+    endif
+
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+     put ='\"'.g:netrw_passwd.'\"'
+"     call Decho('ftp:  g:netrw_uid')
+"     call Decho('ftp:  g:netrw_passwd')
+    else
+     put ='user \"'.g:netrw_uid.'\" \"'.g:netrw_passwd.'\"'
+"     call Decho('user '.g:netrw_uid.' '.g:netrw_passwd)
+    endif
+
+   if path != ""
+    put ='cd '.path
+"    call Decho('cd '.a:path)
+   endif
+   put ='get '.fname
+"   call Decho("ftp:  get ".fname)
+   put ='quit'
+"   call Decho("ftp:  quit")
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+"    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
+    exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
+
+    ".........................................
+    else
+     call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",28)
+    endif
+    " restore
+    exe "silent! ".endline.",$d"
+    exe "keepjumps ".curline
+    setlocal noma nomod ro
+   else
+"    call Decho("ftp not executable")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"this system doesn't support ftp",29)
+    endif
+    " restore status line
+    let &stl        = s:netrw_users_stl
+    let &laststatus = s:netrw_users_ls
+    " restore NetMethod
+    if exists("keep_netrw_method")
+     call s:NetMethod(keep_netrw_choice)
+     let w:netrw_method  = keep_netrw_wmethod
+    endif
+"    call Dret("NetObtain")
+    return
+   endif
+
+  ".........................................
+  else
+   " scp: Method#4
+"   call Decho("using scp")
+   let curdir = b:netrw_curdir
+   let path   = substitute(curdir,'scp://[^/]\+/','','e')
+"   call Decho("path<".path.">")
+   if exists("g:netrw_port") && g:netrw_port != ""
+    let useport= " -P ".g:netrw_port
+   else
+    let useport= ""
+   endif
+"   call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." .")
+   exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ."
+   endif
+  endif
+
+  " restore status line
+  let &stl        = s:netrw_users_stl
+  let &laststatus = s:netrw_users_ls
+  redraw!
+
+  " restore NetMethod
+  if exists("keep_netrw_method")
+   call s:NetMethod(keep_netrw_choice)
+   let w:netrw_method  = keep_netrw_wmethod
+  endif
+
+"  call Dret("NetObtain")
+endfun
+
+" ---------------------------------------------------------------------
+" NetPrevWinOpen: open file/directory in previous window.  {{{2
+"   If there's only one window, then the window will first be split.
+fun! s:NetPrevWinOpen(islocal)
+"  call Dfunc("NetPrevWinOpen(islocal=".a:islocal.")")
+
+  " get last window number and the word currently under the cursor
+  let lastwinnr = winnr("$")
+  let curword   = s:NetGetWord()
+"  call Decho("lastwinnr=".lastwinnr." curword<".curword.">")
+
+  let didsplit  = 0
+  if lastwinnr == 1
+   " if only one window, open a new one first
+"   call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let didsplit  = 1
+
+  else
+   wincmd p
+   " if the previous window's buffer has been changed (is modified),
+   " and it doesn't appear in any other extant window, then ask the
+   " user if s/he wants to abandon modifications therein.
+   let bnr    = winbufnr(0)
+   let bnrcnt = 0
+   if &mod
+    windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif
+"    call Decho("bnr=".bnr." bnrcnt=".bnrcnt)
+    if bnrcnt == 1
+     let bufname= bufname(winbufnr(winnr()))
+     let choice= confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel")
+
+     if choice == 1
+      " Yes -- write file & then browse
+      let v:errmsg= ""
+      silent w
+      if v:errmsg != ""
+       call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30)
+       if didsplit
+       	q
+       else
+       	wincmd p
+       endif
+"       call Dret("NetPrevWinOpen : unable to write <".bufname.">")
+       return
+      endif
+
+     elseif choice == 2
+      " No -- don't worry about changed file, just browse anyway
+      setlocal nomod
+      call netrw#ErrorMsg(s:WARNING,bufname." changes abandoned",31)
+
+     else
+      " Cancel -- don't do this
+      if didsplit
+       q
       else
-       let lo = mid + 1
-       if i_val == mid_val | break | endif
+       wincmd p
+      endif
+"      call Dret("NetPrevWinOpen : cancelled")
+      return
+     endif
+    endif
+   endif
+  endif
+
+  if a:islocal
+   call netrw#LocalBrowseCheck(s:NetBrowseChgDir(a:islocal,curword))
+  else
+   call s:NetBrowse(a:islocal,s:NetBrowseChgDir(a:islocal,curword))
+  endif
+"  call Dret("NetPrevWinOpen")
+endfun
+
+" ---------------------------------------------------------------------
+" NetMenu: generates the menu for gvim and netrw {{{2
+fun! s:NetMenu(domenu)
+
+  if !exists("g:NetrwMenuPriority")
+   let g:NetrwMenuPriority= 80
+  endif
+
+  if has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+"   call Dfunc("NetMenu(domenu=".a:domenu.")")
+
+   if !exists("s:netrw_menu_enabled") && a:domenu
+"    call Decho("initialize menu")
+    let s:netrw_menu_enabled= 1
+    exe 'silent! menu '.g:NetrwMenuPriority.'.1 '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
+    call s:NetBookmarkMenu() " provide some history!
+    exe 'silent! menu '.g:NetrwMenuPriority.'.4 '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.5 '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.6 '.g:NetrwTopLvlMenu.'Bookmark\ Current\ Directory<tab>mb	mb'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.7 '.g:NetrwTopLvlMenu.'Goto\ Bookmarked\ Directory<tab>gb	gb'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.8 '.g:NetrwTopLvlMenu.'Change\ To\ Recently\ Used\ Directory<tab>u	u'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9 '.g:NetrwTopLvlMenu.'Change\ To\ Subsequently\ Used\ Directory<tab>U	U'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.10 '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.11 '.g:NetrwTopLvlMenu.'Edit\ File\ Hiding\ List<tab>'."<ctrl-h>	\<c-h>"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12 '.g:NetrwTopLvlMenu.'Edit\ File/Directory<tab><cr>	'."\<cr>"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.13 '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Window<tab>o	o'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14 '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Vertical\ Window<tab>v	v'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.15 '.g:NetrwTopLvlMenu.'List\ Bookmarks\ and\ History<tab>q	q'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.16 '.g:NetrwTopLvlMenu.'Listing\ Style\ (thin-long-wide)<tab>i	i'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.17 '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.18 '.g:NetrwTopLvlMenu.'Normal-Hide-Show<tab>a	a'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.19 '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.20 '.g:NetrwTopLvlMenu.'Preview\ File/Directory<tab>p	p'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.21 '.g:NetrwTopLvlMenu.'Previous\ Window\ Browser<tab>P	P'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.22 '.g:NetrwTopLvlMenu.'Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.23 '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.24 '.g:NetrwTopLvlMenu.'Reverse\ Sorting\ Order<tab>'."r	r"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.25 '.g:NetrwTopLvlMenu.'Select\ Sorting\ Style<tab>s	s'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.26 '.g:NetrwTopLvlMenu.'Sorting\ Sequence\ Edit<tab>S	S'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.27 '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.28 '.g:NetrwTopLvlMenu.'Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
+    let s:netrw_menucnt= 28
+
+   elseif !a:domenu
+    let s:netrwcnt = 0
+    let curwin     = winnr()
+    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
+    exe curwin."wincmd w"
+    
+    if s:netrwcnt <= 1
+"     call Decho("clear menus")
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Help'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmark\ Current\ Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Go\ Up\ Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Goto\ Bookmarked\ Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Change\ To\ Recently\ Used\ Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Change\ To\ Subsequently\ Used\ Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Delete\ File/Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Window'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File/Directory,\ New\ Vertical\ Window'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File\ Hiding\ List'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Edit\ File'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Enter\ File/Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Enter\ File/Directory\ (vertical\ split)'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'List\ Bookmarks\ and\ History'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Listing\ Style\ (thin-long-wide)'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Make\ Subdirectory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Normal-Hide-Show'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Obtain\ File'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Preview\ File/Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Previous\ Window\ Browser'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Refresh\ Listing'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Rename\ File/Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Reverse\ Sorting\ Order'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Select\ Sorting\ Style'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Sorting\ Sequence\ Edit'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Set\ Current\ Directory'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Settings/Options'
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
+     silent! unlet s:netrw_menu_enabled
+    endif
+   endif
+"   call Dret("NetMenu")
+  endif
+
+endfun
+
+" ==========================================
+"  Local Directory Browsing Support:    {{{1
+" ==========================================
+
+" ---------------------------------------------------------------------
+" LocalBrowseCheck: {{{2
+fun! netrw#LocalBrowseCheck(dirname)
+  " unfortunate interaction -- split window debugging can't be
+"  " used here, must use DechoRemOn or DechoTabOn -- the BufEnter
+  " event triggers another call to LocalBrowseCheck() when attempts
+  " to write to the DBG buffer are made.
+"  call Dfunc("LocalBrowseCheck(dirname<".a:dirname.">")
+  if isdirectory(a:dirname)
+   silent! call s:NetBrowse(1,a:dirname)
+  endif
+"  call Dret("LocalBrowseCheck")
+  " not a directory, ignore it
+endfun
+
+" ---------------------------------------------------------------------
+"  LocalListing: does the job of "ls" for local directories {{{2
+fun! s:LocalListing()
+"  call Dfunc("LocalListing() &ma=".&ma." &mod=".&mod." &ro=".&ro)
+"  if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("b:netrw_curdir doesn't exist") |endif
+"  if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
+
+  " get the list of files contained in the current directory
+  let dirname    = escape(b:netrw_curdir,s:netrw_glob_escape)
+  let dirnamelen = strlen(b:netrw_curdir)
+  let filelist   = glob(s:ComposePath(dirname,"*"))
+"  call Decho("glob(dirname<".dirname."/*>)=".filelist)
+  if filelist != ""
+   let filelist= filelist."\n"
+  endif
+  let filelist= filelist.glob(s:ComposePath(dirname,".*"))
+"  call Decho("glob(dirname<".dirname."/.*>)=".glob(dirname.".*"))
+
+  " if the directory name includes a "$", and possibly other characters,
+  " the glob() doesn't include "." and ".." entries.
+  if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)'
+"   call Decho("forcibly tacking on .")
+   if filelist == ""
+    let filelist= s:ComposePath(dirname,"./")
+   else
+    let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"./")
+   endif
+"  call Decho("filelist<".filelist.">")
+  endif
+  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
+"   call Decho("forcibly tacking on ..")
+   let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
+"   call Decho("filelist<".filelist.">")
+  endif
+  if b:netrw_curdir == '/'
+   " remove .. from filelist when current directory is root directory
+   let filelist= substitute(filelist,'/\.\.\n','','')
+"   call Decho("remove .. from filelist")
+  endif
+  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+   let filelist= substitute(filelist,'\','/','ge')
+  else
+   let filelist= substitute(filelist,'\','\\','ge')
+  endif
+
+"  call Decho("dirname<".dirname.">")
+"  call Decho("dirnamelen<".dirnamelen.">")
+"  call Decho("filelist<".filelist.">")
+
+  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
+   let pfile= filename
+   if isdirectory(filename)
+    let pfile= filename."/"
+   endif
+   if pfile =~ '//$'
+    let pfile= substitute(pfile,'//$','/','e')
+   endif
+   let pfile= strpart(pfile,dirnamelen)
+   let pfile= substitute(pfile,'^[/\\]','','e')
+"   call Decho(" ")
+"   call Decho("filename<".filename.">")
+"   call Decho("pfile   <".pfile.">")
+
+   if w:netrw_liststyle == s:LONGLIST
+    let sz   = getfsize(filename)
+    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
+
+   if     g:netrw_sort_by =~ "^t"
+    " 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-strlen(t)).t
+"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
+    let ftpfile= ft.'/'.pfile
+    keepjumps silent! put=ftpfile
+
+   elseif g:netrw_sort_by =~ "^s"
+    " 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-strlen(sz)).sz
+"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
+    let fszpfile= fsz.'/'.pfile
+    keepjumps silent! put =fszpfile
+
+   else 
+    " sort by name
+"    call Decho("exe keepjumps put ='".pfile."'")
+    keepjumps silent! put=pfile
+   endif
+  endwhile
+
+  " cleanup any windows mess at end-of-line
+  silent! keepjumps %s/\r$//e
+  setlocal ts=32
+"  call Decho("setlocal ts=32")
+
+"  call Dret("LocalListing")
+endfun
+
+" ---------------------------------------------------------------------
+" LocalBrowseShellCmdRefresh: this function is called after a user has {{{2
+" performed any shell command.  The idea is to cause all local-browsing
+" buffers to be refreshed after a user has executed some shell command,
+" on the chance that s/he removed/created a file/directory with it.
+fun! s:LocalBrowseShellCmdRefresh()
+"  call Dfunc("LocalBrowseShellCmdRefresh() browselist=".string(s:netrw_browselist))
+  " determine which buffers currently reside in a tab
+  let itab       = 1
+  let buftablist = []
+  while itab <= tabpagenr("$")
+   let buftablist= buftablist + tabpagebuflist()
+   let itab= itab + 1
+   tabn
+  endwhile
+"  call Decho("buftablist".string(buftablist))
+  "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
+  "   | refresh any netrw window
+  "   | wipe out any non-displaying netrw buffer
+  let curwin = winnr()
+  let ibl    = 0
+  for ibuf in s:netrw_browselist
+"   call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
+   if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
+"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
+    exe "silent! bw ".ibuf
+    call remove(s:netrw_browselist,ibl)
+"    call Decho("browselist=".string(s:netrw_browselist))
+    continue
+   elseif index(tabpagebuflist(),ibuf) != -1
+"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
+    exe bufwinnr(ibuf)."wincmd w"
+    call s:NetRefresh(1,s:NetBrowseChgDir(1,'./'))
+   endif
+   let ibl= ibl + 1
+  endfor
+  exe curwin."wincmd w"
+
+"  call Dret("LocalBrowseShellCmdRefresh")
+endfun
+
+" ---------------------------------------------------------------------
+" LocalBrowseRm: {{{2
+fun! s:LocalBrowseRm(path) range
+"  call Dfunc("LocalBrowseRm(path<".a:path.">)")
+"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
+
+  " preparation for removing multiple files/directories
+  let ctr           = a:firstline
+  let ret           = 0
+  let all= 0
+
+  " remove multiple files and directories
+  while ctr <= a:lastline
+   exe "keepjumps ".ctr
+
+   " sanity checks
+   if line(".") < w:netrw_bannercnt
+    let ctr= ctr + 1
+    continue
+   endif
+   let curword= s:NetGetWord()
+   if curword == "./" || curword == "../"
+    let ctr= ctr + 1
+    continue
+   endif
+
+   norm! 0
+   let rmfile= s:ComposePath(a:path,curword)
+"   call Decho("rmfile<".rmfile.">")
+
+   if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
+    " attempt to remove file
+    if !all
+     echohl Statement
+     call inputsave()
+     let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+     call inputrestore()
+     echohl NONE
+     if ok == ""
+      let ok="no"
+     endif
+"     call Decho("response: ok<".ok.">")
+     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+"     call Decho("response: ok<".ok."> (after sub)")
+     if ok =~ 'a\%[ll]'
+      let all= 1
+     endif
+    endif
+
+    if all || ok =~ 'y\%[es]' || ok == ""
+     let ret= s:System("delete",rmfile)
+"     call Decho("errcode=".v:shell_error." ret=".ret)
+    elseif ok =~ 'q\%[uit]'
+     break
+    endif
+
+   else
+    " attempt to remove directory
+    if !all
+     echohl Statement
+     call inputsave()
+     let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+     call inputrestore()
+     let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+     if ok == ""
+      let ok="no"
+     endif
+     if ok =~ 'a\%[ll]'
+      let all= 1
+     endif
+    endif
+    let rmfile= substitute(rmfile,'[\/]$','','e')
+
+    if all || ok =~ 'y\%[es]' || ok == ""
+"     call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
+     call s:System("system",g:netrw_local_rmdir.' "'.rmfile.'"')
+"     call Decho("v:shell_error=".v:shell_error)
+
+     if v:shell_error != 0
+"      call Decho("2nd attempt to remove directory<".rmfile.">")
+      let errcode= s:System("delete",rmfile)
+"      call Decho("errcode=".errcode)
+
+      if errcode != 0
+       if has("unix")
+"        call Decho("3rd attempt to remove directory<".rmfile.">")
+        call s:System("system","rm ".rmfile)
+        if v:shell_error != 0 && !exists("g:netrw_quiet")
+	 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
+endif
+       elseif !exists("g:netrw_quiet")
+       	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
+       endif
+      endif
+     endif
+
+    elseif ok =~ 'q\%[uit]'
+     break
+    endif
+   endif
+
+   let ctr= ctr + 1
+  endwhile
+
+  " refresh the directory
+  let curline= line(".")
+"  call Decho("refresh the directory")
+  call s:NetRefresh(1,s:NetBrowseChgDir(1,'./'))
+  exe curline
+
+"  call Dret("LocalBrowseRm")
+endfun
+
+" ---------------------------------------------------------------------
+" LocalBrowseRename: rename a remote file or directory {{{2
+fun! s:LocalBrowseRename(path) range
+"  call Dfunc("LocalBrowseRename(path<".a:path.">)")
+
+  " preparation for removing multiple files/directories
+  let ctr= a:firstline
+
+  " attempt to rename files/directories
+  while ctr <= a:lastline
+   exe "keepjumps ".ctr
+
+   " sanity checks
+   if line(".") < w:netrw_bannercnt
+    let ctr= ctr + 1
+    continue
+   endif
+   let curword= s:NetGetWord()
+   if curword == "./" || curword == "../"
+    let ctr= ctr + 1
+    continue
+   endif
+
+   norm! 0
+   let oldname= s:ComposePath(a:path,curword)
+"   call Decho("oldname<".oldname.">")
+
+   call inputsave()
+   let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
+   call inputrestore()
+
+   let ret= rename(oldname,newname)
+"   call Decho("renaming <".oldname."> to <".newname.">")
+
+   let ctr= ctr + 1
+  endwhile
+
+  " refresh the directory
+"  call Decho("refresh the directory listing")
+  call netrw#NetSavePosn()
+  call s:NetRefresh(1,s:NetBrowseChgDir(1,'./'))
+"  call Dret("LocalBrowseRename")
+endfun
+
+" ---------------------------------------------------------------------
+" LocalFastBrowser: handles setting up/taking down fast browsing for the {{{2
+"                   local browser
+"     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
+"  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
+"  med    1         D      H
+"  fast   2         H      H
+fun! s:LocalFastBrowser()
+"  call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse)
+
+  " initialize browselist, a list of buffer numbers that the local browser has used
+  if !exists("s:netrw_browselist")
+"   call Decho("initialize s:netrw_browselist")
+   let s:netrw_browselist= []
+  endif
+
+  " append current buffer to fastbrowse list
+  if g:netrw_fastbrowse <= 1 && (empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1])
+"   call Decho("appendng current buffer to browselist")
+   call add(s:netrw_browselist,bufnr("%"))
+"   call Decho("browselist=".string(s:netrw_browselist))
+  endif
+
+  " enable autocmd events to handle refreshing/removing local browser buffers
+  "    If local browse buffer is currently showing: refresh it
+  "    If local browse buffer is currently hidden : wipe it
+  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
+"   call Decho("setting up local-browser shell command refresh")
+   let s:netrw_browser_shellcmd= 1
+   augroup AuNetrwShellCmd
+    au!
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+     au ShellCmdPost *	call s:LocalBrowseShellCmdRefresh()
+    else
+     au ShellCmdPost,FocusGained *	call s:LocalBrowseShellCmdRefresh()
+    endif
+   augroup END
+  endif
+
+  " user must have changed fastbrowse to its fast setting, so remove
+  " the associated autocmd events
+  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
+"   call Decho("remove AuNetrwShellCmd autcmd group")
+   unlet s:netrw_browser_shellcmd
+   augroup AuNetrwShellCmd
+    au!
+   augroup END
+   augroup! AuNetrwShellCmd
+  endif
+
+"  call Dret("LocalFastBrowser")
+endfun
+
+" ---------------------------------------------------------------------
+" LocalObtain: copy selected file to current working directory {{{2
+fun! s:LocalObtain()
+"  call Dfunc("LocalObtain()")
+  if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
+   let fname= expand("<cWORD>")
+   let fcopy= readfile(b:netrw_curdir."/".fname,"b")
+   call writefile(fcopy,getcwd()."/".fname,"b")
+  elseif !exists("b:netrw_curdir")
+   call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
+  else
+   call netrw#ErrorMsg(s:ERROR,"local browsing directory and current directory are identical",37)
+  endif
+"  call Dret("LocalObtain")
+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
+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)
+  if !exists("b:netrw_curdir")
+   let b:netrw_curdir= getcwd()
+  endif
+  let curfile      = b:netrw_curdir
+"  call Decho("curfile<".curfile.">")
+
+  " save registers
+  silent! let keepregstar = @*
+  silent! let keepregplus = @+
+  silent! let keepregslash= @/
+
+  " if dosplit or file has been modified
+  if a:dosplit || &modified || a:style == 6
+"   call Decho("case: dosplit=".a:dosplit." modified=".&modified." a:style=".a:style)
+   call s:SaveWinVars()
+
+   if a:style == 0      " Explore, Sexplore
+"    call Decho("style=0: Explore or Sexplore")
+    exe g:netrw_winsize."wincmd s"
+
+   elseif a:style == 1  "Explore!, Sexplore!
+"    call Decho("style=1: Explore! or Sexplore!")
+    exe g:netrw_winsize."wincmd v"
+
+   elseif a:style == 2  " Hexplore
+"    call Decho("style=2: Hexplore")
+    exe "bel ".g:netrw_winsize."wincmd s"
+
+   elseif a:style == 3  " Hexplore!
+"    call Decho("style=3: Hexplore!")
+    exe "abo ".g:netrw_winsize."wincmd s"
+
+   elseif a:style == 4  " Vexplore
+"    call Decho("style=4: Vexplore")
+    exe "lefta ".g:netrw_winsize."wincmd v"
+
+   elseif a:style == 5  " Vexplore!
+"    call Decho("style=5: Vexplore!")
+    exe "rightb ".g:netrw_winsize."wincmd v"
+
+   elseif a:style == 6  " Texplore
+    call s:SaveBufVars()
+"    call Decho("style  = 6: Texplore")
+    tabnew
+    call s:RestoreBufVars()
+   endif
+   call s:RestoreWinVars()
+  endif
+  norm! 0
+
+"  call Decho("a:1<".a:1.">")
+  if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
+   let dirname= substitute(a:1,'\~',expand("$HOME"),'')
+"   call Decho("using dirname<".dirname.">  (case: ~ && unix||cygwin)")
+  elseif a:1 == '.'
+   let dirname= exists("b:netrw_curdir")? b:netrw_curdir : getcwd()
+   if dirname !~ '/$'
+    let dirname= dirname."/"
+   endif
+"   call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
+  else
+   let dirname= a:1
+"   call Decho("using dirname<".dirname.">")
+  endif
+
+  if dirname =~ '^\*/'
+   " Explore */pattern
+"   call Decho("case Explore */pattern")
+   let pattern= substitute(dirname,'^\*/\(.*\)$','\1','')
+"   call Decho("Explore */pat: dirname<".dirname."> -> pattern<".pattern.">")
+   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+  elseif dirname =~ '^\*\*//'
+   " Explore **//pattern
+"   call Decho("case Explore **//pattern")
+   let pattern     = substitute(dirname,'^\*\*//','','')
+   let starstarpat = 1
+"   call Decho("Explore **//pat: dirname<".dirname."> -> pattern<".pattern.">")
+  endif
+
+  if dirname == "" && a:indx >= 0
+   " Explore Hexplore Vexplore Sexplore
+"   call Decho("case Explore Hexplore Vexplore Sexplore")
+   let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+   if newdir =~ '^scp:' || newdir =~ '^ftp:'
+"    call Decho("calling NetBrowse(0,newdir<".newdir.">)")
+    call s:NetBrowse(0,newdir)
+   else
+    if newdir == ""|let newdir= getcwd()|endif
+"    call Decho("calling LocalBrowseCheck(newdir<".newdir.">)")
+    call netrw#LocalBrowseCheck(newdir)
+   endif
+   call search('\<'.substitute(curfile,'^.*/','','e').'\>','cW')
+
+  elseif dirname =~ '^\*\*/' || a:indx < 0 || dirname =~ '^\*/'
+   " Nexplore, Pexplore, Explore **/... , or Explore */pattern
+"   call Decho("case Nexplore, Pexplore, <s-down>, <s-up>, Explore dirname<".dirname.">")
+   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
+    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+   endif
+
+   if has("path_extra")
+"    call Decho("has path_extra")
+    if !exists("w:netrw_explore_indx")
+     let w:netrw_explore_indx= 0
+    endif
+    let indx = a:indx
+"    call Decho("set indx= [a:indx=".indx."]")
+"
+    if indx == -1
+     "Nexplore
+"     call Decho("case Nexplore: (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
+      silent! let @* = keepregstar
+      silent! let @+ = keepregstar
+      silent! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
+     endif
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("indx=".indx." curfile<".curfile.">")
+     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
+      let indx= indx + 1
+"      call Decho("indx=".indx." (Nexplore while loop)")
+     endwhile
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+"     call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+
+    elseif indx == -2
+     "Pexplore
+"     call Decho("case Pexplore: (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
+      silent! let @* = keepregstar
+      silent! let @+ = keepregstar
+      silent! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
+     endif
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("indx=".indx." curfile<".curfile.">")
+     while indx >= 0 && curfile == w:netrw_explore_list[indx]
+      let indx= indx - 1
+"      call Decho("indx=".indx." (Pexplore while loop)")
+     endwhile
+     if indx < 0                        | let indx= 0                           | endif
+"     call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+
+    else
+     " Explore -- initialize
+     " build list of files to Explore with Nexplore/Pexplore
+"     call Decho("case Explore: initialize (indx=".indx.")")
+     let w:netrw_explore_indx= 0
+     if !exists("b:netrw_curdir")
+      let b:netrw_curdir= getcwd()
+     endif
+"     call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+
+     if exists("pattern")
+"      call Decho("pattern exists: building list pattern<".pattern."> cwd<".getcwd().">")
+      if exists("starstarpat")
+"       call Decho("starstarpat<".starstarpat.">")
+       try
+        exe "silent vimgrep /".pattern."/gj "."**/*"
+       catch /^Vim\%((\a\+)\)\=:E480/
+       	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
+	silent! let @/ = keepregslash
+"        call Dret("netrw#Explore : no files matched pattern")
+        return
+       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)')
+      else
+"       call Decho("no starstarpat")
+       exe "vimgrep /".pattern."/gj ".b:netrw_curdir."/*"
+       let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)')
+       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
       endif
      else
-      " reverse sorting order
-      if i_val > mid_val
-       let hi = mid
-      else
-       let lo = mid + 1
-       if i_val == mid_val | break | endif
-      endif
+"      call Decho("no pattern: building list based on ".b:netrw_curdir."/".dirname)
+      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
+      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+     endif
+
+     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+"     call Decho("w:netrw_explore_list<".string(w:netrw_explore_list)."> listlen=".w:netrw_explore_listlen)
+
+     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
+      call netrw#ErrorMsg(s:WARNING,"no files matched",42)
+      silent! let @* = keepregstar
+      silent! let @+ = keepregstar
+      silent! let @/ = keepregslash
+"      call Dret("netrw#Explore : no files matched")
+      return
      endif
-    endwhile
-    " do insert
-    if lo < i
-     exe 'keepjumps '.i.'d_'
-     keepjumps call append(lo - 1, i_val)
+    endif
+
+    " NetrwStatusLine support - for exploring support
+    let w:netrw_explore_indx= indx
+"    call Decho("explorelist<".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
+"     call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
+     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."]"
+"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+    let newdir= substitute(dirfile,'/[^/]*$','','e')
+"    call Decho("newdir<".newdir.">")
+
+"    call Decho("calling LocalBrowseCheck(newdir<".newdir.">)")
+    call netrw#LocalBrowseCheck(newdir)
+    if !exists("w:netrw_liststyle")
+     let w:netrw_liststyle= g:netrw_liststyle
+    endif
+    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
+     call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
+    else
+     call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+    endif
+    let w:netrw_explore_mtchcnt = indx + 1
+    let w:netrw_explore_bufnr   = bufnr("%")
+    let w:netrw_explore_line    = line(".")
+    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
+"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
+
+   else
+"    call Decho("vim does not have path_extra")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
     endif
-    let i = i + 1
-  endwhile
-
-" "  call Dret("NetSort")
- endfun
-endif
+    silent! let @* = keepregstar
+    silent! let @+ = keepregstar
+    silent! let @/ = keepregslash
+"    call Dret("netrw#Explore : missing +path_extra")
+    return
+   endif
+
+  else
+"   call Decho("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
+   endif
+   let newdir= dirname
+   if !exists("b:netrw_curdir")
+    call netrw#LocalBrowseCheck(getcwd())
+   else
+    call netrw#LocalBrowseCheck(s:NetBrowseChgDir(1,newdir))
+   endif
+  endif
+
+  silent! let @* = keepregstar
+  silent! let @+ = keepregstar
+  silent! let @/ = keepregslash
+"  call Dret("netrw#Explore : @/<".@/.">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
+fun! s:ExplorePatHls(pattern)
+"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
+  let repat= substitute(a:pattern,'^**/\{1,2}','','')
+"  call Decho("repat<".repat.">")
+  let repat= escape(repat,'][.\')
+"  call Decho("repat<".repat.">")
+  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
+"  call Dret("s:ExplorePatHls repat<".repat.">")
+  return repat
+endfun
+
+" ---------------------------------------------------------------------
+" SetupNetrwStatusLine: {{{2
+fun! s:SetupNetrwStatusLine(statline)
+"  call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
+
+  if !exists("s:netrw_setup_statline")
+   let s:netrw_setup_statline= 1
+"   call Decho("do first-time status line setup")
+
+   if !exists("s:netrw_users_stl")
+    let s:netrw_users_stl= &stl
+   endif
+   if !exists("s:netrw_users_ls")
+    let s:netrw_users_ls= &laststatus
+   endif
+
+   " set up User9 highlighting as needed
+   let keepa= @a
+   redir @a
+   try
+    hi User9
+   catch /^Vim\%((\a\+)\)\=:E411/
+    if &bg == "dark"
+     hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
+    else
+     hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
+    endif
+   endtry
+   redir END
+   let @a= keepa
+  endif
+
+  " set up status line (may use User9 highlighting)
+  " insure that windows have a statusline
+  " make sure statusline is displayed
+  let &stl=a:statline
+  setlocal laststatus=2
+"  call Decho("stl=".&stl)
+  redraw!
+
+"  call Dret("SetupNetrwStatusLine : stl=".&stl)
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwStatusLine: {{{2
+fun! NetrwStatusLine()
+
+" vvv NetrwStatusLine() debugging vvv
+"  let g:stlmsg=""
+"  if !exists("w:netrw_explore_bufnr")
+"   let g:stlmsg="!X<explore_bufnr>"
+"  elseif w:netrw_explore_bufnr != bufnr("%")
+"   let g:stlmsg="explore_bufnr!=".bufnr("%")
+"  endif
+"  if !exists("w:netrw_explore_line")
+"   let g:stlmsg=" !X<explore_line>"
+"  elseif w:netrw_explore_line != line(".")
+"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
+"  endif
+"  if !exists("w:netrw_explore_list")
+"   let g:stlmsg=" !X<explore_list>"
+"  endif
+" ^^^ NetrwStatusLine() debugging ^^^
+
+  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
+   " restore user's status line
+   let &stl        = s:netrw_users_stl
+   let &laststatus = s:netrw_users_ls
+   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
+   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
+   return ""
+  else
+   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+  endif
+endfun
+
+" ---------------------------------------------------------------------
+" NetGetcwd: get the current directory. {{{2
+"   Change backslashes to forward slashes, if any.
+"   If doesc is true, escape certain troublesome characters
+fun! s:NetGetcwd(doesc)
+"  call Dfunc("NetGetcwd(doesc=".a:doesc.")")
+  let curdir= substitute(getcwd(),'\\','/','ge')
+  if curdir !~ '[\/]$'
+   let curdir= curdir.'/'
+  endif
+  if a:doesc
+   let curdir= escape(curdir,s:netrw_cd_escape)
+  endif
+"  call Dret("NetGetcwd <".curdir.">")
+  return curdir
+endfun
 
 " ---------------------------------------------------------------------
 " SetSort: sets up the sort based on the g:netrw_sort_sequence {{{2
@@ -4200,7 +4829,7 @@ endif
 "          front.  An "*" pattern handles the default priority.
 fun! s:SetSort()
 "  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
-  if w:netrw_longlist == 1
+  if w:netrw_liststyle == s:LONGLIST
    let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
   else
    let seqlist  = g:netrw_sort_sequence
@@ -4255,66 +4884,403 @@ fun! s:SetSort()
 "  call Dret("SetSort")
 endfun
 
+" =====================================================================
+" Support Functions: {{{1
+
 " ---------------------------------------------------------------------
-" SaveWinVars: (used by Explore()) {{{2
-fun! s:SaveWinVars()
-"  call Dfunc("SaveWinVars()")
-  if exists("w:netrw_bannercnt")      |let s:bannercnt       = w:netrw_bannercnt      |endif
-  if exists("w:netrw_method")         |let s:method          = w:netrw_method         |endif
-  if exists("w:netrw_prvdir")         |let s:prvdir          = w:netrw_prvdir         |endif
-  if exists("w:netrw_explore_indx")   |let s:explore_indx    = w:netrw_explore_indx   |endif
-  if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
-  if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
-  if exists("w:netrw_explore_bufnr")  |let s:explore_bufnr   = w:netrw_explore_bufnr  |endif
-  if exists("w:netrw_explore_line")   |let s:explore_line    = w:netrw_explore_line   |endif
-  if exists("w:netrw_explore_list")   |let s:explore_list    = w:netrw_explore_list   |endif
-"  call Dret("SaveWinVars")
+"  ComposePath: Appends a new part to a path taking different systems into consideration {{{2
+fun! s:ComposePath(base,subdir)
+"  call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
+  if(has("amiga"))
+   let ec = a:base[strlen(a:base)-1]
+   if ec != '/' && ec != ':'
+    let ret = a:base . "/" . a:subdir
+   else
+    let ret = a:base . a:subdir
+   endif
+  elseif a:base =~ '^\a\+://'
+   let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','')
+   let curpath = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\2','')
+   let ret     = urlbase.curpath.a:subdir
+"   call Decho("urlbase<".urlbase.">")
+"   call Decho("curpath<".curpath.">")
+"   call Decho("ret<".ret.">")
+  else
+   let ret = substitute(a:base."/".a:subdir,"//","/","g")
+  endif
+"  call Dret("s:ComposePath ".ret)
+  return ret
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#ErrorMsg: {{{2
+"   0=note     = s:NOTE
+"   1=warning  = s:WARNING
+"   2=error    = s:ERROR
+"   Mar 19, 2007 : max errnum currently is 49
+fun! netrw#ErrorMsg(level,msg,errnum)
+"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.")")
+
+  " record current window number for NetRestorePosn()'s benefit
+  let s:winBeforeErr= winnr()
+
+  " getting messages out reliably is just plain difficult!
+  " This attempt splits the current window, creating a one line window.
+  let errbufnum= bufnr("NetrwMessage")
+
+  bo 1split
+  enew
+  setlocal bt=nofile
+  file NetrwMessage
+
+  put ='***netrw*** '.a:msg
+  if &fo !~ '[ta]'
+   syn clear
+   syn match netrwMesg	"^\*\*\*netrw\*\*\*"
+   if a:level == s:WARNING
+    hi link netrwMesg WarningMsg
+   elseif a:level == s:ERROR
+    hi link netrwMesg Error
+   endif
+  endif
+  1d
+  setlocal noma ro bh=wipe
+
+"  call Dret("netrw#ErrorMsg")
+endfun
+
+" ---------------------------------------------------------------------
+"  netrw#RFC2396: converts %xx into characters {{{2
+fun! netrw#RFC2396(fname)
+"  call Dfunc("netrw#RFC2396(fname<".a:fname.">)")
+  let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t")
+"  call Dret("netrw#RFC2396 ".fname)
+  return fname
+endfun
+
+" ---------------------------------------------------------------------
+" s:FileReadable: o/s independent filereadable {{{2
+fun! s:FileReadable(fname)
+"  call Dfunc("s:FileReadable(fname<".a:fname.">)")
+
+  if g:netrw_cygwin
+   let ret= filereadable(substitute(a:fname,'/cygdrive/\(.\)','\1:/',''))
+  else
+   let ret= filereadable(a:fname)
+  endif
+
+"  call Dret("s:FileReadable ".ret)
+  return ret
 endfun
 
 " ---------------------------------------------------------------------
-" CopyWinVars: (used by Explore()) {{{2
-fun! s:CopyWinVars()
-"  call Dfunc("CopyWinVars()")
-  if exists("s:bannercnt")      |let w:netrw_bannercnt       = s:bannercnt      |unlet s:bannercnt      |endif
-  if exists("s:method")         |let w:netrw_method          = s:method         |unlet s:method         |endif
-  if exists("s:prvdir")         |let w:netrw_prvdir          = s:prvdir         |unlet s:prvdir         |endif
-  if exists("s:explore_indx")   |let w:netrw_explore_indx    = s:explore_indx   |unlet s:explore_indx   |endif
-  if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
-  if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
-  if exists("s:explore_bufnr")  |let w:netrw_explore_bufnr   = s:explore_bufnr  |unlet s:explore_bufnr  |endif
-  if exists("s:explore_line")   |let w:netrw_explore_line    = s:explore_line   |unlet s:explore_line   |endif
-  if exists("s:explore_list")   |let w:netrw_explore_list    = s:explore_list   |unlet s:explore_list   |endif
-"  call Dret("CopyWinVars")
+"  s:GetTempfile: gets a tempname that'll work for various o/s's {{{2
+"                 Places correct suffix on end of temporary filename,
+"                 using the suffix provided with fname
+fun! s:GetTempfile(fname)
+"  call Dfunc("s:GetTempfile(fname<".a:fname.">)")
+
+  if !exists("b:netrw_tmpfile")
+   " get a brand new temporary filename
+   let tmpfile= tempname()
+"   call Decho("tmpfile<".tmpfile."> : from tempname()")
+ 
+   let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
+"   call Decho("tmpfile<".tmpfile."> : chgd any \\ -> /")
+ 
+   " sanity check -- does the temporary file's directory exist?
+   if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
+    call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
+"    call Dret("s:GetTempfile getcwd<".getcwd().">")
+    return ""
+   endif
+ 
+   " let netrw#NetSource() know about the tmpfile
+   let s:netrw_tmpfile= tmpfile " used by netrw#NetSource()
+"   call Decho("tmpfile<".tmpfile."> s:netrw_tmpfile<".s:netrw_tmpfile.">")
+ 
+   " o/s dependencies
+   if g:netrw_cygwin == 1
+    let tmpfile = substitute(tmpfile,'^\(\a\):','/cygdrive/\1','e')
+   elseif has("win32") || has("win95") || has("win64") || has("win16")
+    let tmpfile = substitute(tmpfile,'/','\\','g')
+   else
+    let tmpfile = tmpfile  
+   endif
+   let b:netrw_tmpfile= tmpfile
+"   call Decho("o/s dependent fixed tempname<".tmpfile.">")
+  else
+   " re-use temporary filename
+   let tmpfile= b:netrw_tmpfile
+"   call Decho("tmpfile<".tmpfile."> re-using")
+  endif
+
+  " use fname's suffix for the temporary file
+  if a:fname != ""
+   if a:fname =~ '\.[^./]\+$'
+"    call Decho("using fname<".a:fname.">'s suffix")
+    if a:fname =~ '.tar.gz' || a:fname =~ '.tar.bz2'
+     let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
+    else
+     let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
+    endif
+    let suffix = escape(suffix,g:netrw_tmpfile_escape)
+"    call Decho("suffix<".suffix.">")
+    let tmpfile= substitute(tmpfile,'\.tmp$','','e')
+"    call Decho("chgd tmpfile<".tmpfile."> (removed any .tmp suffix)")
+    let tmpfile .= suffix
+"    call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
+    let s:netrw_tmpfile= tmpfile " supports netrw#NetSource()
+   endif
+  endif
+
+"  call Dret("s:GetTempfile <".tmpfile.">")
+  return tmpfile
+endfun  
+
+" ---------------------------------------------------------------------
+" s:MakeSshCmd: transforms input command using USEPORT HOSTNAME into {{{2
+"               a correct command
+fun! s:MakeSshCmd(sshcmd)
+"  call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">)")
+  let sshcmd = substitute(a:sshcmd,'\<HOSTNAME\>',s:user.s:machine,'')
+  if exists("g:netrw_port") && g:netrw_port != ""
+   let sshcmd= substitute(sshcmd,"USEPORT",'-P '.g:netrw_port,'')
+  elseif exists("s:port") && s:port != ""
+   let sshcmd= substitute(sshcmd,"USEPORT",'-P '.s:port,'')
+  else
+   let sshcmd= substitute(sshcmd,"USEPORT ",'','')
+  endif
+"  call Dret("s:MakeSshCmd <".sshcmd.">")
+  return sshcmd
 endfun
 
 " ---------------------------------------------------------------------
-" SetBufWinVars: (used by NetBrowse() and LocalBrowse()) {{{2
+" s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
+fun! s:NetrwEnew(curdir)
+"  call Dfunc("s:NetrwEnew(curdir<".a:curdir.">) expand(%)<".expand("%").">")
+
+  " grab a function-local copy of buffer variables
+  if exists("b:netrw_bannercnt")      |let netrw_bannercnt       = b:netrw_bannercnt      |endif
+  if exists("b:netrw_browser_active") |let netrw_browser_active  = b:netrw_browser_active |endif
+  if exists("b:netrw_cpf")            |let netrw_cpf             = b:netrw_cpf            |endif
+  if exists("b:netrw_curdir")         |let netrw_curdir          = b:netrw_curdir         |endif
+  if exists("b:netrw_explore_bufnr")  |let netrw_explore_bufnr   = b:netrw_explore_bufnr  |endif
+  if exists("b:netrw_explore_indx")   |let netrw_explore_indx    = b:netrw_explore_indx   |endif
+  if exists("b:netrw_explore_line")   |let netrw_explore_line    = b:netrw_explore_line   |endif
+  if exists("b:netrw_explore_list")   |let netrw_explore_list    = b:netrw_explore_list   |endif
+  if exists("b:netrw_explore_listlen")|let netrw_explore_listlen = b:netrw_explore_listlen|endif
+  if exists("b:netrw_explore_mtchcnt")|let netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
+  if exists("b:netrw_fname")          |let netrw_fname           = b:netrw_fname          |endif
+  if exists("b:netrw_lastfile")       |let netrw_lastfile        = b:netrw_lastfile       |endif
+  if exists("b:netrw_liststyle")      |let netrw_liststyle       = b:netrw_liststyle      |endif
+  if exists("b:netrw_method")         |let netrw_method          = b:netrw_method         |endif
+  if exists("b:netrw_option")         |let netrw_option          = b:netrw_option         |endif
+  if exists("b:netrw_prvdir")         |let netrw_prvdir          = b:netrw_prvdir         |endif
+
+  if getline(2) =~ '^" Netrw Directory Listing'
+"   call Decho("generate a buffer with keepjumps keepalt enew! (1)")
+   keepjumps keepalt enew!
+  else
+"   call Decho("generate a buffer with keepjumps enew! (2)")
+   keepjumps enew!
+  endif
+
+  " copy function-local variables to buffer variable equivalents
+  if exists("netrw_bannercnt")      |let b:netrw_bannercnt       = netrw_bannercnt      |endif
+  if exists("netrw_browser_active") |let b:netrw_browser_active  = netrw_browser_active |endif
+  if exists("netrw_cpf")            |let b:netrw_cpf             = netrw_cpf            |endif
+  if exists("netrw_curdir")         |let b:netrw_curdir          = netrw_curdir         |endif
+  if exists("netrw_explore_bufnr")  |let b:netrw_explore_bufnr   = netrw_explore_bufnr  |endif
+  if exists("netrw_explore_indx")   |let b:netrw_explore_indx    = netrw_explore_indx   |endif
+  if exists("netrw_explore_line")   |let b:netrw_explore_line    = netrw_explore_line   |endif
+  if exists("netrw_explore_list")   |let b:netrw_explore_list    = netrw_explore_list   |endif
+  if exists("netrw_explore_listlen")|let b:netrw_explore_listlen = netrw_explore_listlen|endif
+  if exists("netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = netrw_explore_mtchcnt|endif
+  if exists("netrw_fname")          |let b:netrw_fname           = netrw_fname          |endif
+  if exists("netrw_lastfile")       |let b:netrw_lastfile        = netrw_lastfile       |endif
+  if exists("netrw_liststyle")      |let b:netrw_liststyle       = netrw_liststyle      |endif
+  if exists("netrw_method")         |let b:netrw_method          = netrw_method         |endif
+  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
+   else
+    exe "silent! file ".b:netrw_curdir
+   endif
+  endif
+
+"  call Dret("s:NetrwEnew : buf#".bufnr("%"))
+endfun
+
+" ------------------------------------------------------------------------
+" s:RemotePathAnalysis: {{{2
+fun! s:RemotePathAnalysis(dirname)
+"  call Dfunc("s:RemotePathAnalysis()")
+
+  let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$'
+  let s:method  = substitute(a:dirname,dirpat,'\1','')
+  let s:user    = substitute(a:dirname,dirpat,'\2','')
+  let s:machine = substitute(a:dirname,dirpat,'\3','')
+  let s:port    = substitute(a:dirname,dirpat,'\4','')
+  let s:path    = substitute(a:dirname,dirpat,'\5','')
+  let s:fname   = substitute(a:dirname,'^.*/\ze.','','')
+
+"  call Decho("set up s:method <".s:method .">")
+"  call Decho("set up s:user   <".s:user   .">")
+"  call Decho("set up s:machine<".s:machine.">")
+"  call Decho("set up s:port   <".s:port.">")
+"  call Decho("set up s:path   <".s:path   .">")
+"  call Decho("set up s:fname  <".s:fname  .">")
+
+"  call Dret("s:RemotePathAnalysis")
+endfun
+
+" ---------------------------------------------------------------------
+" s:RestoreBufVars: {{{2
+fun! s:RestoreBufVars()
+"  call Dfunc("s:RestoreBufVars()")
+
+  if exists("s:netrw_curdir")        |let b:netrw_curdir         = s:netrw_curdir        |endif
+  if exists("s:netrw_lastfile")      |let b:netrw_lastfile       = s:netrw_lastfile      |endif
+  if exists("s:netrw_method")        |let b:netrw_method         = s:netrw_method        |endif
+  if exists("s:netrw_fname")         |let b:netrw_fname          = s:netrw_fname         |endif
+  if exists("s:netrw_machine")       |let b:netrw_machine        = s:netrw_machine       |endif
+  if exists("s:netrw_browser_active")|let b:netrw_browser_active = s:netrw_browser_active|endif
+
+"  call Dret("s:RestoreBufVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:RestoreWinVars: (used by Explore() and NetSplit()) {{{2
+fun! s:RestoreWinVars()
+"  call Dfunc("s:RestoreWinVars()")
+  if exists("s:bannercnt")      |let w:netrw_bannercnt       = s:bannercnt      |unlet s:bannercnt      |endif
+  if exists("s:col")            |let w:netrw_col             = s:col            |unlet s:col            |endif
+  if exists("s:curdir")         |let w:netrw_curdir          = s:curdir         |unlet s:curdir         |endif
+  if exists("s:explore_bufnr")  |let w:netrw_explore_bufnr   = s:explore_bufnr  |unlet s:explore_bufnr  |endif
+  if exists("s:explore_indx")   |let w:netrw_explore_indx    = s:explore_indx   |unlet s:explore_indx   |endif
+  if exists("s:explore_line")   |let w:netrw_explore_line    = s:explore_line   |unlet s:explore_line   |endif
+  if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
+  if exists("s:explore_list")   |let w:netrw_explore_list    = s:explore_list   |unlet s:explore_list   |endif
+  if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
+  if exists("s:fpl")            |let w:netrw_fpl             = s:fpl            |unlet s:fpl            |endif
+  if exists("s:hline")          |let w:netrw_hline           = s:hline          |unlet s:hline          |endif
+  if exists("s:line")           |let w:netrw_line            = s:line           |unlet s:line           |endif
+  if exists("s:liststyle")      |let w:netrw_liststyle       = s:liststyle      |unlet s:liststyle      |endif
+  if exists("s:method")         |let w:netrw_method          = s:method         |unlet s:method         |endif
+  if exists("s:prvdir")         |let w:netrw_prvdir          = s:prvdir         |unlet s:prvdir         |endif
+  if exists("s:treedict")       |let w:netrw_treedict        = s:treedict       |unlet s:treedict       |endif
+  if exists("s:treetop")        |let w:netrw_treetop         = s:treetop        |unlet s:treetop        |endif
+  if exists("s:winnr")          |let w:netrw_winnr           = s:winnr          |unlet s:winnr          |endif
+"  call Dret("s:RestoreWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SaveBufVars: {{{2
+fun! s:SaveBufVars()
+"  call Dfunc("s:SaveBufVars()")
+
+  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
+  if exists("b:netrw_method")        |let s:netrw_method         = b:netrw_method        |endif
+  if exists("b:netrw_fname")         |let s:netrw_fname          = b:netrw_fname         |endif
+  if exists("b:netrw_machine")       |let s:netrw_machine        = b:netrw_machine       |endif
+  if exists("b:netrw_browser_active")|let s:netrw_browser_active = b:netrw_browser_active|endif
+
+"  call Dret("s:SaveBufVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SaveWinVars: (used by Explore() and NetSplit()) {{{2
+fun! s:SaveWinVars()
+"  call Dfunc("s:SaveWinVars()")
+  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
+  if exists("w:netrw_explore_bufnr")  |let s:explore_bufnr   = w:netrw_explore_bufnr  |endif
+  if exists("w:netrw_explore_indx")   |let s:explore_indx    = w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_line")   |let s:explore_line    = w:netrw_explore_line   |endif
+  if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_list")   |let s:explore_list    = w:netrw_explore_list   |endif
+  if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
+  if exists("w:netrw_fpl")            |let s:fpl             = w:netrw_fpl            |endif
+  if exists("w:netrw_hline")          |let s:hline           = w:netrw_hline          |endif
+  if exists("w:netrw_line")           |let s:line            = w:netrw_line           |endif
+  if exists("w:netrw_liststyle")      |let s:liststyle       = w:netrw_liststyle      |endif
+  if exists("w:netrw_method")         |let s:method          = w:netrw_method         |endif
+  if exists("w:netrw_prvdir")         |let s:prvdir          = w:netrw_prvdir         |endif
+  if exists("w:netrw_treedict")       |let s:treedict        = w:netrw_treedict       |endif
+  if exists("w:netrw_treetop")        |let s:treetop         = w:netrw_treetop        |endif
+  if exists("w:netrw_winnr")          |let s:winnr           = w:netrw_winnr          |endif
+"  call Dret("s:SaveWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SetBufWinVars: (used by NetBrowse() and LocalBrowseCheck()) {{{2
 "   To allow separate windows to have their own activities, such as
 "   Explore **/pattern, several variables have been made window-oriented.
 "   However, when the user splits a browser window (ex: ctrl-w s), these
 "   variables are not inherited by the new window.  SetBufWinVars() and
 "   UseBufWinVars() get around that.
 fun! s:SetBufWinVars()
-"  call Dfunc("SetBufWinVars()")
-  if exists("w:netrw_longlist")       |let b:netrw_longlist        = w:netrw_longlist       |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
-  if exists("w:netrw_prvdir")         |let b:netrw_prvdir          = w:netrw_prvdir         |endif
-  if exists("w:netrw_explore_indx")   |let b:netrw_explore_indx    = w:netrw_explore_indx   |endif
-  if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen = w:netrw_explore_listlen|endif
-  if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = w:netrw_explore_mtchcnt|endif
-  if exists("w:netrw_explore_bufnr")  |let b:netrw_explore_bufnr   = w:netrw_explore_bufnr  |endif
-  if exists("w:netrw_explore_line")   |let b:netrw_explore_line    = w:netrw_explore_line   |endif
-  if exists("w:netrw_explore_list")   |let b:netrw_explore_list    = w:netrw_explore_list   |endif
-"  call Dret("SetBufWinVars")
+"  call Dfunc("s:SetBufWinVars()")
+  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
+  if exists("w:netrw_prvdir")         |let b:netrw_prvdir         = w:netrw_prvdir         |endif
+  if exists("w:netrw_explore_indx")   |let b:netrw_explore_indx   = w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen= w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt= w:netrw_explore_mtchcnt|endif
+  if exists("w:netrw_explore_bufnr")  |let b:netrw_explore_bufnr  = w:netrw_explore_bufnr  |endif
+  if exists("w:netrw_explore_line")   |let b:netrw_explore_line   = w:netrw_explore_line   |endif
+  if exists("w:netrw_explore_list")   |let b:netrw_explore_list   = w:netrw_explore_list   |endif
+"  call Dret("s:SetBufWinVars")
 endfun
 
 " ---------------------------------------------------------------------
-" UseBufWinVars: (used by NetBrowse() and LocalBrowse() {{{2
+" s:System: using Steve Hall's idea to insure that Windows paths stay {{{2
+"              acceptable.  No effect on Unix paths.
+"  Examples of use:  let result= s:System("system",path)
+"                    let result= s:System("delete",path)
+fun! s:System(cmd,path)
+"  call Dfunc("s:System(cmd<".a:cmd."> path<".a:path.">)")
+
+  let path = a:path
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+   " system call prep
+   " remove trailing slash (Win95)
+   let path = substitute(path, '\(\\\|/\)$', '', 'g')
+   " remove escaped spaces
+   let path = substitute(path, '\ ', ' ', 'g')
+   " convert slashes to backslashes
+   let path = substitute(path, '/', '\', 'g')
+   if exists("+shellslash")
+    let sskeep= &shellslash
+    setlocal noshellslash
+    exe "let result= ".a:cmd."('".path."')"
+    let &shellslash = sskeep
+   else
+    exe "let result= ".a:cmd."(".g:netrw_shq.path.g:netrw_shq.")"
+   endif
+  else
+   exe "let result= ".a:cmd."('".path."')"
+  endif
+
+"  call Decho("result<".result.">")
+"  call Dret("s:System")
+  return result
+endfun
+
+" ---------------------------------------------------------------------
+" s:UseBufWinVars: (used by NetBrowse() and LocalBrowseCheck() {{{2
 "              Matching function to BufferWinVars()
 fun! s:UseBufWinVars()
-"  call Dfunc("UseBufWinVars()")
-  if exists("b:netrw_longlist")        && !exists("w:netrw_longlist")       |let w:netrw_longlist        = b:netrw_longlist       |endif
+"  call Dfunc("s:UseBufWinVars()")
+  if exists("b:netrw_liststyle")       && !exists("w:netrw_liststyle")      |let w:netrw_liststyle       = b:netrw_liststyle      |endif
   if exists("b:netrw_bannercnt")       && !exists("w:netrw_bannercnt")      |let w:netrw_bannercnt       = b:netrw_bannercnt      |endif
   if exists("b:netrw_method")          && !exists("w:netrw_method")         |let w:netrw_method          = b:netrw_method         |endif
   if exists("b:netrw_prvdir")          && !exists("w:netrw_prvdir")         |let w:netrw_prvdir          = b:netrw_prvdir         |endif
@@ -4324,19 +5290,10 @@ fun! s:UseBufWinVars()
   if exists("b:netrw_explore_bufnr")   && !exists("w:netrw_explore_bufnr")  |let w:netrw_explore_bufnr   = b:netrw_explore_bufnr  |endif
   if exists("b:netrw_explore_line")    && !exists("w:netrw_explore_line")   |let w:netrw_explore_line    = b:netrw_explore_line   |endif
   if exists("b:netrw_explore_list")    && !exists("w:netrw_explore_list")   |let w:netrw_explore_list    = b:netrw_explore_list   |endif
-"  call Dret("UseBufWinVars")
+"  call Dret("s:UseBufWinVars")
 endfun
 
 " ---------------------------------------------------------------------
-"  RFC2396: converts %xx into characters {{{2
-fun! netrw#RFC2396(fname)
-"  call Dfunc("RFC2396(fname<".a:fname.">)")
-  let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t")
-"  call Dret("RFC2396 ".fname)
-  return fname
-endfun
-
-" ------------------------------------------------------------------------
 " Settings Restoration: {{{2
 let &cpo= s:keepcpo
 unlet s:keepcpo
--- a/runtime/autoload/pythoncomplete.vim
+++ b/runtime/autoload/pythoncomplete.vim
@@ -1,16 +1,34 @@
 "pythoncomplete.vim - Omni Completion for python
 " Maintainer: Aaron Griffin <aaronmgriffin@gmail.com>
-" Version: 0.5
-" Last Updated: 19 April 2006
+" Version: 0.7
+" Last Updated: 19 Oct 2006
+"
+" Changes
+" TODO:
+" User defined docstrings aren't handled right...
+" 'info' item output can use some formatting work
+" Add an "unsafe eval" mode, to allow for return type evaluation
+" Complete basic syntax along with import statements
+"   i.e. "import url<c-x,c-o>"
+" Continue parsing on invalid line??
 "
+" v 0.7
+"   * Fixed function list sorting (_ and __ at the bottom)
+"   * Removed newline removal from docs.  It appears vim handles these better in
+"   recent patches
+"
+" v 0.6:
+"   * Fixed argument completion
+"   * Removed the 'kind' completions, as they are better indicated
+"   with real syntax
+"   * Added tuple assignment parsing (whoops, that was forgotten)
+"   * Fixed import handling when flattening scope
+"
+" v 0.5:
 " Yeah, I skipped a version number - 0.4 was never public.
 "  It was a bugfix version on top of 0.3.  This is a complete
 "  rewrite.
 "
-" TODO:
-" User defined docstrings aren't handled right...
-" 'info' item output can use some formatting work
-" Add an "unsafe eval" mode, to allow for return type evaluation
 
 if !has('python')
     echo "Error: Required vim compiled with +python"
@@ -28,7 +46,7 @@ function! pythoncomplete#Complete(findst
             if c =~ '\w'
                 continue
             elseif ! c =~ '\.'
-                idx = -1
+                let idx = -1
                 break
             else
                 break
@@ -45,7 +63,7 @@ function! pythoncomplete#Complete(findst
         while idx > 0
             let idx -= 1
             let c = line[idx]
-            if c =~ '\w' || c =~ '\.'
+            if c =~ '\w' || c =~ '\.' || c == '('
                 let cword = c . cword
                 continue
             elseif strlen(cword) > 0 || idx == 0
@@ -73,7 +91,24 @@ def vimcomplete(context,match):
     try:
         import vim
         def complsort(x,y):
-            return x['abbr'] > y['abbr']
+            try:
+                xa = x['abbr']
+                ya = y['abbr']
+                if xa[0] == '_':
+                    if xa[1] == '_' and ya[0:2] == '__':
+                        return xa > ya
+                    elif ya[0:2] == '__':
+                        return -1
+                    elif y[0] == '_':
+                        return xa > ya
+                    else:
+                        return 1
+                elif ya[0] == '_':
+                    return -1
+                else:
+                   return xa > ya
+            except:
+                return 0
         cmpl = Completer()
         cmpl.evalsource('\n'.join(vim.current.buffer),vim.eval("line('.')"))
         all = cmpl.get_completions(context,match)
@@ -86,7 +121,7 @@ def vimcomplete(context,match):
             dictstr += '"icase":0},'
         if dictstr[-1] == ',': dictstr = dictstr[:-1]
         dictstr += ']'
-        dbg("dict: %s" % dictstr)
+        #dbg("dict: %s" % dictstr)
         vim.command("silent let g:pythoncomplete_completions = %s" % dictstr)
         #dbg("Completion dict:\n%s" % all)
     except vim.error:
@@ -108,11 +143,7 @@ class Completer(object):
             except: dbg("locals: %s, %s [%s]" % (sys.exc_info()[0],sys.exc_info()[1],l))
 
     def _cleanstr(self,doc):
-        return doc.replace('"',' ')\
-                  .replace("'",' ')\
-                  .replace('\n',' ')\
-                  .replace('\r',' ')\
-                  .replace('
',' ')
+        return doc.replace('"',' ').replace("'",' ')
 
     def get_arguments(self,func_obj):
         def _ctor(obj):
@@ -128,23 +159,23 @@ class Completer(object):
         elif type(func_obj) == types.MethodType: func_obj = func_obj.im_func
         else: arg_offset = 0
         
-        arg_text = ')'
+        arg_text=''
         if type(func_obj) in [types.FunctionType, types.LambdaType]:
             try:
                 cd = func_obj.func_code
                 real_args = cd.co_varnames[arg_offset:cd.co_argcount]
-                defaults = func_obj.func_defaults or []
-                defaults = [map(lambda name: "=%s" % name, defaults)]
+                defaults = func_obj.func_defaults or ''
+                defaults = map(lambda name: "=%s" % name, defaults)
                 defaults = [""] * (len(real_args)-len(defaults)) + defaults
                 items = map(lambda a,d: a+d, real_args, defaults)
                 if func_obj.func_code.co_flags & 0x4:
                     items.append("...")
                 if func_obj.func_code.co_flags & 0x8:
                     items.append("***")
-                arg_text = ", ".join(items) + ')'
+                arg_text = (','.join(items)) + ')'
 
             except:
-                dbg("completion: %s: %s" % (sys.exc_info()[0],sys.exc_info()[1]))
+                dbg("arg completion: %s: %s" % (sys.exc_info()[0],sys.exc_info()[1]))
                 pass
         if len(arg_text) == 0:
             # The doc string sometimes contains the function signature
@@ -160,6 +191,7 @@ class Completer(object):
                     ridx = sigline.find(')')
                     if lidx > 0 and ridx > 0:
                         arg_text = sigline[lidx+1:ridx] + ')'
+        if len(arg_text) == 0: arg_text = ')'
         return arg_text
 
     def get_completions(self,context,match):
@@ -172,12 +204,11 @@ class Completer(object):
             all = {}
             ridx = stmt.rfind('.')
             if len(stmt) > 0 and stmt[-1] == '(':
-                #TODO
                 result = eval(_sanitize(stmt[:-1]), self.compldict)
                 doc = result.__doc__
                 if doc == None: doc = ''
-                args = self.get_arguments(res)
-                return [{'word':self._cleanstr(args),'info':self._cleanstr(doc),'kind':'p'}]
+                args = self.get_arguments(result)
+                return [{'word':self._cleanstr(args),'info':self._cleanstr(doc)}]
             elif ridx == -1:
                 match = stmt
                 all = self.compldict
@@ -206,22 +237,18 @@ class Completer(object):
                         if doc == None or doc == '': doc = maindoc
 
                         wrd = m[len(match):]
-                        c = {'word':wrd, 'abbr':m,  'info':self._cleanstr(doc),'kind':'m'}
+                        c = {'word':wrd, 'abbr':m,  'info':self._cleanstr(doc)}
                         if "function" in typestr:
                             c['word'] += '('
                             c['abbr'] += '(' + self._cleanstr(self.get_arguments(inst))
-                            c['kind'] = 'f'
                         elif "method" in typestr:
                             c['word'] += '('
                             c['abbr'] += '(' + self._cleanstr(self.get_arguments(inst))
-                            c['kind'] = 'f'
                         elif "module" in typestr:
                             c['word'] += '.'
-                            c['kind'] = 'm'
                         elif "class" in typestr:
                             c['word'] += '('
                             c['abbr'] += '('
-                            c['kind']='c'
                         completions.append(c)
                 except:
                     i = sys.exc_info()
@@ -277,10 +304,13 @@ class Scope(object):
         # we need to start with this, to fix up broken completions
         # hopefully this name is unique enough...
         str = '"""'+self.docstr+'"""\n'
+        for l in self.locals:
+            if l.startswith('import'): str += l+'\n'
         str += 'class _PyCmplNoType:\n    def __getattr__(self,name):\n        return None\n'
         for sub in self.subscopes:
             str += sub.get_code()
-        #str += '\n'.join(self.locals)+'\n'
+        for l in self.locals:
+            if not l.startswith('import'): str += l+'\n'
 
         return str
 
@@ -420,6 +450,8 @@ class PyParser:
         tokentype, token, indent = self.next()
         if tokentype == tokenize.STRING or token == 'str':  
             return '""'
+        elif token == '(' or token == 'tuple':
+            return '()'
         elif token == '[' or token == 'list':
             return '[]'
         elif token == '{' or token == 'dict':
@@ -494,9 +526,9 @@ class PyParser:
             freshscope=True
             while True:
                 tokentype, token, indent = self.next()
-                #print 'main: token=[%s] indent=[%s]' % (token,indent)
+                #dbg( 'main: token=[%s] indent=[%s]' % (token,indent))
 
-                if tokentype == DEDENT:
+                if tokentype == DEDENT or token == "pass":
                     self.scope = self.scope.pop(indent)
                 elif token == 'def':
                     func = self._parsefunction(indent)
--- a/runtime/autoload/rubycomplete.vim
+++ b/runtime/autoload/rubycomplete.vim
@@ -5,6 +5,7 @@
 " URL:                  http://vim-ruby.rubyforge.org
 " Anon CVS:             See above site
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
+" Maintainer Version:   0.8
 " ----------------------------------------------------------------------------
 "
 " Ruby IRB/Complete author: Keiju ISHITSUKA(keiju@ishitsuka.com)
@@ -12,20 +13,20 @@
 
 " {{{ requirement checks
 if !has('ruby')
-    echohl ErrorMsg
-    echo "Error: Required vim compiled with +ruby"
-    echohl None
+    s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
+    s:ErrMsg( "Error: falling back to syntax completion" )
+    " lets fall back to syntax completion
+    setlocal omnifunc=syntaxcomplete#Complete
     finish
 endif
 
 if version < 700
-    echohl ErrorMsg
-    echo "Error: Required vim >= 7.0"
-    echohl None
+    s:ErrMsg( "Error: Required vim >= 7.0" )
     finish
 endif
 " }}} requirement checks
 
+" {{{ configuration failsafe initialization
 if !exists("g:rubycomplete_rails")
     let g:rubycomplete_rails = 0
 endif
@@ -34,76 +35,131 @@ if !exists("g:rubycomplete_classes_in_gl
     let g:rubycomplete_classes_in_global = 0
 endif
 
+if !exists("g:rubycomplete_buffer_loading")
+    let g:rubycomplete_classes_in_global = 0
+endif
+
+if !exists("g:rubycomplete_include_object")
+    let g:rubycomplete_include_object = 0
+endif
+
+if !exists("g:rubycomplete_include_objectspace")
+    let g:rubycomplete_include_objectspace = 0
+endif
+" }}} configuration failsafe initialization
+
 " {{{ vim-side support functions
-function! GetBufferRubyModule(name)
-    let [snum,enum] = GetBufferRubyEntity(a:name, "module")
-    return snum . '..' . enum
+let s:rubycomplete_debug = 0
+
+function! s:ErrMsg(msg)
+    echohl ErrorMsg
+    echo a:msg
+    echohl None
 endfunction
 
-function! GetBufferRubyClass(name)
-    let [snum,enum] = GetBufferRubyEntity(a:name, "class")
+function! s:dprint(msg)
+    if s:rubycomplete_debug == 1
+        echom a:msg
+    endif
+endfunction
+
+function! s:GetBufferRubyModule(name, ...)
+    if a:0 == 1
+        let [snum,enum] = s:GetBufferRubyEntity(a:name, "module", a:1)
+    else
+        let [snum,enum] = s:GetBufferRubyEntity(a:name, "module")
+    endif
     return snum . '..' . enum
 endfunction
 
-function! GetBufferRubySingletonMethods(name)
+function! s:GetBufferRubyClass(name, ...)
+    if a:0 >= 1
+        let [snum,enum] = s:GetBufferRubyEntity(a:name, "class", a:1)
+    else
+        let [snum,enum] = s:GetBufferRubyEntity(a:name, "class")
+    endif
+    return snum . '..' . enum
+endfunction
+
+function! s:GetBufferRubySingletonMethods(name)
 endfunction
 
-function! GetBufferRubyEntity( name, type )
+function! s:GetBufferRubyEntity( name, type, ... )
+    let lastpos = getpos(".")
+    let lastline = lastpos
+    if (a:0 >= 1)
+        let lastline = [ 0, a:1, 0, 0 ]
+        call cursor( a:1, 0 )
+    endif
+
     let stopline = 1
-    let crex = '^\s*' . a:type . '\s*' . a:name . '\s*\(<\s*.*\s*\)\?\n*\(\(\s\|#\).*\n*\)*\n*\s*end$'
-    let [lnum,lcol] = searchpos( crex, 'nbw')
+
+    let crex = '^\s*\<' . a:type . '\>\s*\<' . a:name . '\>\s*\(<\s*.*\s*\)\?'
+    let [lnum,lcol] = searchpos( crex, 'w' )
+    "let [lnum,lcol] = searchpairpos( crex . '\zs', '', '\(end\|}\)', 'w' )
+
     if lnum == 0 && lcol == 0
+        call cursor(lastpos[1], lastpos[2])
         return [0,0]
     endif
 
-    let [enum,ecol] = searchpos( crex, 'nebw')
+    let curpos = getpos(".")
+    let [enum,ecol] = searchpairpos( crex, '', '\(end\|}\)', 'wr' )
+    call cursor(lastpos[1], lastpos[2])
+
     if lnum > enum
-        let realdef = getline( lnum )
-        let crexb = '^' . realdef . '\n*\(\(\s\|#\).*\n*\)*\n*\s*end$'
-        let [enum,ecol] = searchpos( crexb, 'necw' )
+        return [0,0]
     endif
     " we found a the class def
     return [lnum,enum]
 endfunction
 
-function! IsInClassDef()
-    let [snum,enum] = GetBufferRubyEntity( '.*', "class" )
+function! s:IsInClassDef()
+    return s:IsPosInClassDef( line('.') )
+endfunction
+
+function! s:IsPosInClassDef(pos)
+    let [snum,enum] = s:GetBufferRubyEntity( '.*', "class" )
     let ret = 'nil'
-    let pos = line('.')
 
-    if snum < pos && pos < enum
+    if snum < a:pos && a:pos < enum
         let ret = snum . '..' . enum
     endif
 
     return ret
 endfunction
 
-function! GetRubyVarType(v)
+function! s:GetRubyVarType(v)
     let stopline = 1
     let vtp = ''
     let pos = getpos('.')
-    let [lnum,lcol] = searchpos('^\s*#\s*@var\s*'.a:v.'\>\s\+[^ \t]\+\s*$','nb',stopline)
+    let sstr = '^\s*#\s*@var\s*'.a:v.'\>\s\+[^ \t]\+\s*$'
+    let [lnum,lcol] = searchpos(sstr,'nb',stopline)
     if lnum != 0 && lcol != 0
         call setpos('.',pos)
         let str = getline(lnum)
-        let vtp = substitute(str,'^\s*#\s*@var\s*'.a:v.'\>\s\+\([^ \t]\+\)\s*$','\1','')
+        let vtp = substitute(str,sstr,'\1','')
         return vtp
     endif
     call setpos('.',pos)
-    if g:rubycomplete_rails == 1 && g:rubycomplete_rails_loaded == 1
-        let ctors = '\(now\|new\|open\|get_instance\|find\|create\)'
+    let ctors = '\(now\|new\|open\|get_instance'
+    if exists('g:rubycomplete_rails') && g:rubycomplete_rails == 1 && s:rubycomplete_rails_loaded == 1
+        let ctors = ctors.'\|find\|create'
     else
-        let ctors = '\(now\|new\|open\|get_instance\)'
     endif
+    let ctors = ctors.'\)'
 
-    let [lnum,lcol] = searchpos(''.a:v.'\>\s*[+\-*/]*=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%r{\|[A-Za-z0-9@:\-()]\+...\?\)','nb',stopline)
+    let fstr = '=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%[xwQqr][(\[{@]\|[A-Za-z0-9@:\-()\.]\+...\?\|lambda\|&\)'
+    let sstr = ''.a:v.'\>\s*[+\-*/]*'.fstr
+    let [lnum,lcol] = searchpos(sstr,'nb',stopline)
     if lnum != 0 && lcol != 0
-        let str = matchstr(getline(lnum),'=\s*\([^ \t]\+.' . ctors . '\>\|[\[{"''/]\|%r{\|[A-Za-z0-9@:\-()]\+...\?\)',lcol)
+        let str = matchstr(getline(lnum),fstr,lcol)
         let str = substitute(str,'^=\s*','','')
+
         call setpos('.',pos)
-        if str == '"' || str == ''''
+        if str == '"' || str == '''' || stridx(tolower(str), '%q[') != -1
             return 'String'
-        elseif str == '['
+        elseif str == '[' || stridx(str, '%w[') != -1
             return 'Array'
         elseif str == '{'
             return 'Hash'
@@ -111,6 +167,8 @@ function! GetRubyVarType(v)
             return 'Regexp'
         elseif strlen(str) >= 4 && stridx(str,'..') != -1
             return 'Range'
+        elseif stridx(str, 'lambda') != -1 || str == '&'
+            return 'Proc'
         elseif strlen(str) > 4
             let l = stridx(str,'.')
             return str[0:l-1]
@@ -123,6 +181,11 @@ endfunction
 
 "}}} vim-side support functions
 
+"{{{ vim-side completion function
+function! rubycomplete#Init()
+    execute "ruby VimRubyCompletion.preload_rails"
+endfunction
+
 function! rubycomplete#Complete(findstart, base)
      "findstart = 1 when we need to get the text length
     if a:findstart
@@ -145,346 +208,595 @@ function! rubycomplete#Complete(findstar
     "findstart = 0 when we need to return the list of completions
     else
         let g:rubycomplete_completions = []
-        execute "ruby get_completions('" . a:base . "')"
+        execute "ruby VimRubyCompletion.get_completions('" . a:base . "')"
         return g:rubycomplete_completions
     endif
 endfunction
+"}}} vim-side completion function
 
-
+"{{{ ruby-side code
 function! s:DefRuby()
 ruby << RUBYEOF
 # {{{ ruby completion
-RailsWords = [
-      "has_many", "has_one",
-      "belongs_to",
-    ]
-
-ReservedWords = [
-      "BEGIN", "END",
-      "alias", "and",
-      "begin", "break",
-      "case", "class",
-      "def", "defined", "do",
-      "else", "elsif", "end", "ensure",
-      "false", "for",
-      "if", "in",
-      "module",
-      "next", "nil", "not",
-      "or",
-      "redo", "rescue", "retry", "return",
-      "self", "super",
-      "then", "true",
-      "undef", "unless", "until",
-      "when", "while",
-      "yield",
-    ]
-
-Operators = [ "%", "&", "*", "**", "+",  "-",  "/",
-      "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
-      "[]", "[]=", "^", ]
-
 
-def load_requires
-  buf = VIM::Buffer.current
-  enum = buf.line_number
-  nums = Range.new( 1, enum )
-  nums.each do |x|
-    ln = buf[x]
-    begin
-      eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
-    rescue Exception
-      #ignore?
-    end
-  end
+begin
+    require 'rubygems' # let's assume this is safe...?
+rescue Exception
+    #ignore?
 end
-
-def load_buffer_class(name)
-  classdef = get_buffer_entity(name, 'GetBufferRubyClass("%s")')
-  return if classdef == nil
-
-  pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
-  load_buffer_class( $2 ) if pare != nil
-
-  mixre = /.*\n\s*include\s*(.*)\s*\n/.match( classdef )
-  load_buffer_module( $2 ) if mixre != nil
+class VimRubyCompletion
+# {{{ constants
+  @@debug = false
+  @@ReservedWords = [
+        "BEGIN", "END",
+        "alias", "and",
+        "begin", "break",
+        "case", "class",
+        "def", "defined", "do",
+        "else", "elsif", "end", "ensure",
+        "false", "for",
+        "if", "in",
+        "module",
+        "next", "nil", "not",
+        "or",
+        "redo", "rescue", "retry", "return",
+        "self", "super",
+        "then", "true",
+        "undef", "unless", "until",
+        "when", "while",
+        "yield",
+      ]
 
-  eval classdef
-end
-
-def load_buffer_module(name)
-  classdef = get_buffer_entity(name, 'GetBufferRubyModule("%s")')
-  return if classdef == nil
-
-  eval classdef
-end
+  @@Operators = [ "%", "&", "*", "**", "+",  "-",  "/",
+        "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
+        "[]", "[]=", "^", ]
+# }}} constants
 
-def get_buffer_entity(name, vimfun)
-  return nil if /(\"|\')+/.match( name )
-  buf = VIM::Buffer.current
-  nums = eval( VIM::evaluate( vimfun % name ) )
-  return nil if nums == nil
-  return nil if nums.min == nums.max && nums.min == 0
-
-  cur_line = VIM::Buffer.current.line_number
-  classdef = ""
-  nums.each do |x|
-    if x != cur_line
+# {{{ buffer analysis magic
+  def load_requires
+    buf = VIM::Buffer.current
+    enum = buf.line_number
+    nums = Range.new( 1, enum )
+    nums.each do |x|
       ln = buf[x]
-      classdef += "%s\n" % ln
+      begin
+        eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
+      rescue Exception
+        #ignore?
+      end
     end
   end
 
-  return classdef
-end
+  def load_buffer_class(name)
+    dprint "load_buffer_class(%s) START" % name
+    classdef = get_buffer_entity(name, 's:GetBufferRubyClass("%s")')
+    return if classdef == nil
+
+    pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
+    load_buffer_class( $2 ) if pare != nil  && $2 != name # load parent class if needed
+
+    mixre = /.*\n\s*include\s*(.*)\s*\n/.match( classdef )
+    load_buffer_module( $2 ) if mixre != nil && $2 != name # load mixins if needed
+
+    begin
+      eval classdef
+    rescue Exception
+      VIM::evaluate( "s:ErrMsg( 'Problem loading class \"%s\", was it already completed?' )" % name )
+    end
+    dprint "load_buffer_class(%s) END" % name
+  end
 
-def get_var_type( receiver )
-  if /(\"|\')+/.match( receiver )
-    "String"
-  else
-    VIM::evaluate("GetRubyVarType('%s')" % receiver)
+  def load_buffer_module(name)
+    dprint "load_buffer_module(%s) START" % name
+    classdef = get_buffer_entity(name, 's:GetBufferRubyModule("%s")')
+    return if classdef == nil
+
+    begin
+      eval classdef
+    rescue Exception
+      VIM::evaluate( "s:ErrMsg( 'Problem loading module \"%s\", was it already completed?' )" % name )
+    end
+    dprint "load_buffer_module(%s) END" % name
   end
-end
+
+  def get_buffer_entity(name, vimfun)
+    loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
+    return nil if loading_allowed != '1'
+    return nil if /(\"|\')+/.match( name )
+    buf = VIM::Buffer.current
+    nums = eval( VIM::evaluate( vimfun % name ) )
+    return nil if nums == nil
+    return nil if nums.min == nums.max && nums.min == 0
 
-def get_buffer_classes()
-  # this will be a little expensive.
-  allow_aggressive_load = VIM::evaluate('g:rubycomplete_classes_in_global')
-  return [] if allow_aggressive_load != '1'
+    dprint "get_buffer_entity START"
+    visited = []
+    clscnt = 0
+    bufname = VIM::Buffer.current.name
+    classdef = ""
+    cur_line = VIM::Buffer.current.line_number
+    while (nums != nil && !(nums.min == 0 && nums.max == 0) )
+      dprint "visited: %s" % visited.to_s
+      break if visited.index( nums )
+      visited << nums
+
+      nums.each do |x|
+        if x != cur_line
+          next if x == 0
+          ln = buf[x]
+          if /^\s*(module|class|def|include)\s+/.match(ln)
+            clscnt += 1 if $1 == "class"
+            #dprint "\$1: %s" % $1
+            classdef += "%s\n" % ln
+            classdef += "end\n" if /def\s+/.match(ln)
+            dprint ln
+          end
+        end
+      end
 
-  buf = VIM::Buffer.current
-  eob = buf.length
-  ret = []
-  rg = 1..eob
+      nm = "%s(::.*)*\", %s, \"" % [ name, nums.last ]
+      nums = eval( VIM::evaluate( vimfun % nm ) )
+      dprint "nm: \"%s\"" % nm
+      dprint "vimfun: %s" % (vimfun % nm)
+      dprint "got nums: %s" % nums.to_s
+    end
+    if classdef.length > 1
+        classdef += "end\n"*clscnt
+        # classdef = "class %s\n%s\nend\n" % [ bufname.gsub( /\/|\\/, "_" ), classdef ]
+    end
 
-  rg.each do |x|
-    if /^\s*class\s*([A-Za-z0-9_-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*/.match( buf[x] )
-      ret.push $1
+    dprint "get_buffer_entity END"
+    dprint "classdef====start"
+    lns = classdef.split( "\n" )
+    lns.each { |x| dprint x }
+    dprint "classdef====end"
+    return classdef
+  end
+
+  def get_var_type( receiver )
+    if /(\"|\')+/.match( receiver )
+      "String"
+    else
+      VIM::evaluate("s:GetRubyVarType('%s')" % receiver)
     end
   end
 
-  return ret
-end
+  def dprint( txt )
+    print txt if @@debug
+  end
+
+  def get_buffer_entity_list( type )
+    # this will be a little expensive.
+    loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
+    allow_aggressive_load = VIM::evaluate("exists('g:rubycomplete_classes_in_global') && g:rubycomplete_classes_in_global")
+    return [] if allow_aggressive_load != '1' || loading_allowed != '1'
+
+    buf = VIM::Buffer.current
+    eob = buf.length
+    ret = []
+    rg = 1..eob
+    re = eval( "/^\s*%s\s*([A-Za-z0-9_:-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*/" % type )
 
-def load_rails()
-  allow_rails = VIM::evaluate('g:rubycomplete_rails')
-  return if allow_rails != '1'
+    rg.each do |x|
+      if re.match( buf[x] )
+        next if type == "def" && eval( VIM::evaluate("s:IsPosInClassDef(%s)" % x) ) != nil
+        ret.push $1
+      end
+    end
+
+    return ret
+  end
+
+  def get_buffer_modules
+    return get_buffer_entity_list( "modules" )
+  end
+
+  def get_buffer_methods
+    return get_buffer_entity_list( "def" )
+  end
+
+  def get_buffer_classes
+    return get_buffer_entity_list( "class" )
+  end
+
+
+  def load_rails
+    allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
+    return if allow_rails != '1'
 
-  buf_path = VIM::evaluate('expand("%:p")')
-  file_name = VIM::evaluate('expand("%:t")')
-  path = buf_path.gsub( file_name, '' )
-  path.gsub!( /\\/, "/" )
-  pup = [ "./", "../", "../../", "../../../", "../../../../" ]
-  pok = nil
+    buf_path = VIM::evaluate('expand("%:p")')
+    file_name = VIM::evaluate('expand("%:t")')
+    vim_dir = VIM::evaluate('getcwd()')
+    file_dir = buf_path.gsub( file_name, '' )
+    file_dir.gsub!( /\\/, "/" )
+    vim_dir.gsub!( /\\/, "/" )
+    vim_dir << "/"
+    dirs = [ vim_dir, file_dir ]
+    sdirs = [ "", "./", "../", "../../", "../../../", "../../../../" ]
+    rails_base = nil
+
+    dirs.each do |dir|
+      sdirs.each do |sub|
+        trail = "%s%s" % [ dir, sub ]
+        tcfg = "%sconfig" % trail
+
+        if File.exists?( tcfg )
+          rails_base = trail
+          break
+        end
+      end
+      break if rails_base
+    end
 
-  pup.each do |sup|
-    tpok = "%s%sconfig" % [ path, sup ]
-    if File.exists?( tpok )
-      pok = tpok
-      break
+    return if rails_base == nil
+    $:.push rails_base unless $:.index( rails_base )
+
+    rails_config = rails_base + "config/"
+    rails_lib = rails_base + "lib/"
+    $:.push rails_config unless $:.index( rails_config )
+    $:.push rails_lib unless $:.index( rails_lib )
+
+    bootfile = rails_config + "boot.rb"
+    envfile = rails_config + "environment.rb"
+    if File.exists?( bootfile ) && File.exists?( envfile )
+      begin
+        require bootfile
+        require envfile
+        begin
+          require 'console_app'
+          require 'console_with_helpers'
+        rescue Exception
+          dprint "Rails 1.1+ Error %s" % $!
+          # assume 1.0
+        end
+        #eval( "Rails::Initializer.run" ) #not necessary?
+        VIM::command('let s:rubycomplete_rails_loaded = 1')
+        dprint "rails loaded"
+      rescue Exception
+        dprint "Rails Error %s" % $!
+        VIM::evaluate( "s:ErrMsg('Error loading rails environment')" )
+      end
     end
   end
 
-  return if pok == nil
+  def get_rails_helpers
+    allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
+    rails_loaded = VIM::evaluate('s:rubycomplete_rails_loaded')
+    return [] if allow_rails != '1' || rails_loaded != '1'
+
+    buf_path = VIM::evaluate('expand("%:p")')
+    buf_path.gsub!( /\\/, "/" )
+    path_elm = buf_path.split( "/" )
+    dprint "buf_path: %s" % buf_path
+    types = [ "app", "db", "lib", "test", "components", "script" ]
+
+    i = nil
+    ret = []
+    type = nil
+    types.each do |t|
+      i = path_elm.index( t )
+      break if i
+    end
+    type = path_elm[i]
+    type.downcase!
 
-  bootfile = pok + "/boot.rb"
-  envfile = pok + "/environment.rb"
-  if File.exists?( bootfile ) && File.exists?( envfile )
-    begin
-      require bootfile
-      require envfile
-      require 'console_app'
-      require 'console_with_helpers'
-      VIM::command('let g:rubycomplete_rails_loaded = 1')
-    rescue
-      print "Error loading rails environment"
+    dprint "type: %s" % type
+    case type
+      when "app"
+        i += 1
+        subtype = path_elm[i]
+        subtype.downcase!
+
+        dprint "subtype: %s" % subtype
+        case subtype
+          when "views"
+            ret += ActionView::Base.instance_methods
+            ret += ActionView::Base.methods
+          when "controllers"
+            ret += ActionController::Base.instance_methods
+            ret += ActionController::Base.methods
+          when "models"
+            ret += ActiveRecord::Base.instance_methods
+            ret += ActiveRecord::Base.methods
+        end
+
+      when "db"
+        ret += ActiveRecord::ConnectionAdapters::SchemaStatements.instance_methods
+        ret += ActiveRecord::ConnectionAdapters::SchemaStatements.methods
     end
+
+
+    return ret
   end
-end
+
+  def add_rails_columns( cls )
+    allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
+    rails_loaded = VIM::evaluate('s:rubycomplete_rails_loaded')
+    return [] if allow_rails != '1' || rails_loaded != '1'
 
-def get_rails_helpers
-  allow_rails = VIM::evaluate('g:rubycomplete_rails')
-  rails_loaded = VIM::evaluate('g:rubycomplete_rails_loaded')
-  return [] if allow_rails != '1' || rails_loaded != '1'
-  return RailsWords
-end
+    begin
+        eval( "#{cls}.establish_connection" )
+        return [] unless eval( "#{cls}.ancestors.include?(ActiveRecord::Base).to_s" )
+        col = eval( "#{cls}.column_names" )
+        return col if col
+    rescue
+        dprint "add_rails_columns err: (cls: %s) %s" % [ cls, $! ]
+        return []
+    end
+    return []
+  end
+
+  def clean_sel(sel, msg)
+    sel.delete_if { |x| x == nil }
+    sel.uniq!
+    sel.grep(/^#{Regexp.quote(msg)}/) if msg != nil
+  end
+
+  def get_rails_view_methods
+    allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
+    rails_loaded = VIM::evaluate('s:rubycomplete_rails_loaded')
+    return [] if allow_rails != '1' || rails_loaded != '1'
+
+    buf_path = VIM::evaluate('expand("%:p")')
+    buf_path.gsub!( /\\/, "/" )
+    pelm = buf_path.split( "/" )
+    idx = pelm.index( "views" )
+
+    return [] unless idx
+    idx += 1
 
-def get_completions(base)
-  load_requires
-  load_rails
+    clspl = pelm[idx].camelize.pluralize
+    cls = clspl.singularize
+
+    ret = []
+    begin
+      ret += eval( "#{cls}.instance_methods" )
+      ret += eval( "#{clspl}Helper.instance_methods" )
+    rescue Exception
+      dprint "Error: Unable to load rails view helpers for %s: %s" % [ cls, $! ]
+    end
+
+    return ret
+  end
+# }}} buffer analysis magic
 
-  input = VIM::Buffer.current.line
-  cpos = VIM::Window.current.cursor[1] - 1
-  input = input[0..cpos] if cpos != 0
-  input += base
+# {{{ main completion code
+  def self.preload_rails
+    a = VimRubyCompletion.new
+    require 'Thread'
+    Thread.new(a) do |b|
+      begin
+      b.load_rails
+      rescue
+      end
+    end
+    a.load_rails
+  rescue
+  end
 
-  rip = input.rindex(/\s/,cpos)
-  if rip
-    input = input[rip..input.length]
+  def self.get_completions(base)
+    b = VimRubyCompletion.new
+    b.get_completions base
   end
 
-  asn = /^.*(\+|\-|\*|=|\(|\[)=?(\s*[A-Za-z0-9_:@.-]*)(\s*(\{|\+|\-|\*|\%|\/)?\s*).*/
-  if asn.match(input)
-    input = $2
-  end
+  def get_completions(base)
+    loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
+    if loading_allowed == '1'
+      load_requires
+      load_rails
+    end
+
+    input = VIM::Buffer.current.line
+    cpos = VIM::Window.current.cursor[1] - 1
+    input = input[0..cpos]
+    input += base
+    input.sub!(/.*[ \t\n\"\\'`><=;|&{(]/, '') # Readline.basic_word_break_characters
+    input.sub!(/self\./, '')
+    input.sub!(/.*((\.\.[\[(]?)|([\[(]))/, '')
+
+    dprint 'input %s' % input
+    message = nil
+    receiver = nil
+    methods = []
+    variables = []
+    classes = []
+    constants = []
+
+    case input
+      when /^(\/[^\/]*\/)\.([^.]*)$/ # Regexp
+        receiver = $1
+        message = Regexp.quote($2)
+        methods = Regexp.instance_methods(true)
+
+      when /^([^\]]*\])\.([^.]*)$/ # Array
+        receiver = $1
+        message = Regexp.quote($2)
+        methods = Array.instance_methods(true)
 
-  input.strip!
-  message = nil
-  receiver = nil
-  candidates = []
+      when /^([^\}]*\})\.([^.]*)$/ # Proc or Hash
+        receiver = $1
+        message = Regexp.quote($2)
+        methods = Proc.instance_methods(true) | Hash.instance_methods(true)
+
+      when /^(:[^:.]*)$/ # Symbol
+        dprint "symbol"
+        if Symbol.respond_to?(:all_symbols)
+          receiver = $1
+          message = $1.sub( /:/, '' )
+          methods = Symbol.all_symbols.collect{|s| s.id2name}
+          methods.delete_if { |c| c.match( /'/ ) }
+        end
+
+      when /^::([A-Z][^:\.\(]*)$/ # Absolute Constant or class methods
+        dprint "const or cls"
+        receiver = $1
+        methods = Object.constants
+        methods.grep(/^#{receiver}/).collect{|e| "::" + e}
 
-  case input
-    when /^(\/[^\/]*\/)\.([^.]*)$/ # Regexp
-      receiver = $1
-      message = Regexp.quote($2)
-      candidates = Regexp.instance_methods(true)
+      when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/ # Constant or class methods
+        receiver = $1
+        message = Regexp.quote($4)
+        dprint "const or cls 2 [recv: \'%s\', msg: \'%s\']" % [ receiver, message ]
+        load_buffer_class( receiver )
+        begin
+          classes = eval("#{receiver}.constants")
+          #methods = eval("#{receiver}.methods")
+        rescue Exception
+          dprint "exception: %s" % $!
+          methods = []
+        end
+        methods.grep(/^#{message}/).collect{|e| receiver + "::" + e}
+
+      when /^(:[^:.]+)\.([^.]*)$/ # Symbol
+        dprint "symbol"
+        receiver = $1
+        message = Regexp.quote($2)
+        methods = Symbol.instance_methods(true)
 
-    when /^([^\]]*\])\.([^.]*)$/ # Array
-      receiver = $1
-      message = Regexp.quote($2)
-      candidates = Array.instance_methods(true)
+      when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/ # Numeric
+        dprint "numeric"
+        receiver = $1
+        message = Regexp.quote($4)
+        begin
+          methods = eval(receiver).methods
+        rescue Exception
+          methods = []
+        end
+
+      when /^(\$[^.]*)$/ #global
+        dprint "global"
+        methods = global_variables.grep(Regexp.new(Regexp.quote($1)))
+
+      when /^((\.?[^.]+)+)\.([^.]*)$/ # variable
+        dprint "variable"
+        receiver = $1
+        message = Regexp.quote($3)
+        load_buffer_class( receiver )
+
+        cv = eval("self.class.constants")
+        vartype = get_var_type( receiver )
+        dprint "vartype: %s" % vartype
+        if vartype != ''
+          load_buffer_class( vartype )
 
-    when /^([^\}]*\})\.([^.]*)$/ # Proc or Hash
-      receiver = $1
-      message = Regexp.quote($2)
-      candidates = Proc.instance_methods(true) | Hash.instance_methods(true)
+          begin
+            methods = eval("#{vartype}.instance_methods")
+            variables = eval("#{vartype}.instance_variables")
+          rescue Exception
+            dprint "load_buffer_class err: %s" % $!
+          end
+        elsif (cv).include?(receiver)
+          # foo.func and foo is local var.
+          methods = eval("#{receiver}.methods")
+          vartype = receiver
+        elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver
+          vartype = receiver
+          # Foo::Bar.func
+          begin
+            methods = eval("#{receiver}.methods")
+          rescue Exception
+          end
+        else
+          # func1.func2
+          ObjectSpace.each_object(Module){|m|
+            next if m.name != "IRB::Context" and
+              /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
+            methods.concat m.instance_methods(false)
+          }
+        end
+        variables += add_rails_columns( "#{vartype}" ) if vartype && vartype.length > 0
 
-    when /^(:[^:.]*)$/ # Symbol
-      if Symbol.respond_to?(:all_symbols)
-        receiver = $1
-        candidates = Symbol.all_symbols.collect{|s| s.id2name}
-        candidates.delete_if { |c| c.match( /'/ ) }
+      when /^\(?\s*[A-Za-z0-9:^@.%\/+*\(\)]+\.\.\.?[A-Za-z0-9:^@.%\/+*\(\)]+\s*\)?\.([^.]*)/
+        message = $1
+        methods = Range.instance_methods(true)
+
+      when /^\.([^.]*)$/ # unknown(maybe String)
+        message = Regexp.quote($1)
+        methods = String.instance_methods(true)
+
+    else
+      dprint "default/other"
+      inclass = eval( VIM::evaluate("s:IsInClassDef()") )
+
+      if inclass != nil
+        dprint "inclass"
+        classdef = "%s\n" % VIM::Buffer.current[ inclass.min ]
+        found = /^\s*class\s*([A-Za-z0-9_-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*\n$/.match( classdef )
+
+        if found != nil
+          receiver = $1
+          message = input
+          load_buffer_class( receiver )
+          begin
+            methods = eval( "#{receiver}.instance_methods" )
+            variables += add_rails_columns( "#{receiver}" )
+          rescue Exception
+            found = nil
+          end
+        end
       end
 
-    when /^::([A-Z][^:\.\(]*)$/ # Absolute Constant or class methods
-      receiver = $1
-      candidates = Object.constants
-      candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
+      if inclass == nil || found == nil
+        dprint "inclass == nil"
+        methods = get_buffer_methods
+        methods += get_rails_view_methods
 
-    when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/ # Constant or class methods
-      receiver = $1
-      message = Regexp.quote($4)
-      begin
-        candidates = eval("#{receiver}.constants | #{receiver}.methods")
-      rescue Exception
-        candidates = []
-      end
-      candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}
+        cls_const = Class.constants
+        constants = cls_const.select { |c| /^[A-Z_-]+$/.match( c ) }
+        classes = eval("self.class.constants") - constants
+        classes += get_buffer_classes
+        classes += get_buffer_modules
 
-    when /^(:[^:.]+)\.([^.]*)$/ # Symbol
-      receiver = $1
-      message = Regexp.quote($2)
-      candidates = Symbol.instance_methods(true)
-
-    when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/ # Numeric
-      receiver = $1
-      message = Regexp.quote($4)
-      begin
-        candidates = eval(receiver).methods
-      rescue Exception
-        candidates
+        include_objectspace = VIM::evaluate("exists('g:rubycomplete_include_objectspace') && g:rubycomplete_include_objectspace")
+        ObjectSpace.each_object(Class) { |cls| classes << cls.to_s } if include_objectspace == "1"
+        message = receiver = input
       end
 
-    when /^(\$[^.]*)$/ #global
-      candidates = global_variables.grep(Regexp.new(Regexp.quote($1)))
-
-    when /^((\.?[^.]+)+)\.([^.]*)$/ # variable
-      receiver = $1
-      message = Regexp.quote($3)
-      load_buffer_class( receiver )
-
-      cv = eval("self.class.constants")
-      vartype = get_var_type( receiver )
-      if vartype != ''
-        load_buffer_class( vartype )
-
-        begin
-          candidates = eval("#{vartype}.instance_methods")
-        rescue Exception
-          candidates = []
-        end
-      elsif (cv).include?(receiver)
-        # foo.func and foo is local var.
-        candidates = eval("#{receiver}.methods")
-      elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver
-        # Foo::Bar.func
-        begin
-          candidates = eval("#{receiver}.methods")
-        rescue Exception
-          candidates = []
-        end
-      else
-        # func1.func2
-        candidates = []
-        ObjectSpace.each_object(Module){|m|
-          next if m.name != "IRB::Context" and
-            /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
-          candidates.concat m.instance_methods(false)
-        }
-      end
-
-    when /^\(?\s*[A-Za-z0-9:^@.%\/+*\(\)]+\.\.\.?[A-Za-z0-9:^@.%\/+*\(\)]+\s*\)?\.([^.]*)/
-      message = $1
-      candidates = Range.instance_methods(true)
-
-    when /^\[(\s*[A-Za-z0-9:^@.%\/+*\(\)\[\]\{\}.\'\"],?)*\].([^.]*)/
-      message = $2
-      candidates = Array.instance_methods(true)
-
-    when /^\.([^.]*)$/ # unknown(maybe String)
-      message = Regexp.quote($1)
-      candidates = String.instance_methods(true)
-
-  else
-    inclass = eval( VIM::evaluate("IsInClassDef()") )
-
-    if inclass != nil
-      classdef = "%s\n" % VIM::Buffer.current[ inclass.min ]
-      found = /^\s*class\s*([A-Za-z0-9_-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*\n$/.match( classdef )
-
-      if found != nil
-        receiver = $1
-        message = input
-        load_buffer_class( receiver )
-        begin
-          candidates = eval( "#{receiver}.instance_methods" )
-          candidates += get_rails_helpers
-        rescue Exception
-          found = nil
-        end
-      end
+      methods += get_rails_helpers
+      methods += Kernel.public_methods
     end
 
-    if inclass == nil || found == nil
-      candidates = eval("self.class.constants")
-      candidates += get_buffer_classes
-      message = receiver = input
+
+    include_object = VIM::evaluate("exists('g:rubycomplete_include_object') && g:rubycomplete_include_object")
+    methods = clean_sel( methods, message )
+    methods = (methods-Object.instance_methods) if include_object == "0"
+    rbcmeth = (VimRubyCompletion.instance_methods-Object.instance_methods) # lets remove those rubycomplete methods
+    methods = (methods-rbcmeth)
+
+    variables = clean_sel( variables, message )
+    classes = clean_sel( classes, message ) - ["VimRubyCompletion"]
+    constants = clean_sel( constants, message )
+
+    valid = []
+    valid += methods.collect { |m| { :name => m, :type => 'm' } }
+    valid += variables.collect { |v| { :name => v, :type => 'v' } }
+    valid += classes.collect { |c| { :name => c, :type => 't' } }
+    valid += constants.collect { |d| { :name => d, :type => 'd' } }
+    valid.sort! { |x,y| x[:name] <=> y[:name] }
+
+    outp = ""
+
+    rg = 0..valid.length
+    rg.step(150) do |x|
+      stpos = 0+x
+      enpos = 150+x
+      valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ] }
+      outp.sub!(/,$/, '')
+
+      VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
+      outp = ""
     end
   end
-
-  candidates.delete_if { |x| x == nil }
-  candidates.uniq!
-  candidates.sort!
-  candidates = candidates.grep(/^#{Regexp.quote(message)}/) if message != nil
-
-  outp = ""
-  valid = (candidates-Object.instance_methods)
+# }}} main completion code
 
-  rg = 0..valid.length
-  rg.step(150) do |x|
-    stpos = 0+x
-    enpos = 150+x
-    valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s'}," % [ c, c ] }
-    outp.sub!(/,$/, '')
-
-    VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
-    outp = ""
-  end
-end
-
+end # VimRubyCompletion
 # }}} ruby completion
 RUBYEOF
 endfunction
 
-let g:rubycomplete_rails_loaded = 0
+let s:rubycomplete_rails_loaded = 0
 
 call s:DefRuby()
-" vim:tw=78:sw=4:ts=8:et:ft=vim:norl:
+"}}} ruby-side code
+
+
+" vim:tw=78:sw=4:ts=8:et:fdm=marker:ft=vim:norl:
--- a/runtime/autoload/syntaxcomplete.vim
+++ b/runtime/autoload/syntaxcomplete.vim
@@ -1,8 +1,8 @@
 " Vim completion script
 " Language:    All languages, uses existing syntax highlighting rules
 " Maintainer:  David Fishburn <fishburn@ianywhere.com>
-" Version:     2.0
-" Last Change: Fri May 05 2006 10:34:57 PM
+" Version:     3.0
+" Last Change: Wed Nov 08 2006 10:46:46 AM
 " Usage:       For detailed help, ":help ft-syntax-omni" 
 
 " Set completion with CTRL-X CTRL-O to autoloaded function.
@@ -19,13 +19,31 @@ endif
 if exists('g:loaded_syntax_completion')
     finish 
 endif
-let g:loaded_syntax_completion = 20
+let g:loaded_syntax_completion = 30
 
 " Set ignorecase to the ftplugin standard
+" This is the default setting, but if you define a buffer local
+" variable you can override this on a per filetype.
 if !exists('g:omni_syntax_ignorecase')
     let g:omni_syntax_ignorecase = &ignorecase
 endif
 
+" Indicates whether we should use the iskeyword option to determine
+" how to split words.
+" This is the default setting, but if you define a buffer local
+" variable you can override this on a per filetype.
+if !exists('g:omni_syntax_use_iskeyword')
+    let g:omni_syntax_use_iskeyword = 1
+endif
+
+" Only display items in the completion window that are at least
+" this many characters in length.
+" This is the default setting, but if you define a buffer local
+" variable you can override this on a per filetype.
+if !exists('g:omni_syntax_minimum_length')
+    let g:omni_syntax_minimum_length = 0
+endif
+
 " This script will build a completion list based on the syntax
 " elements defined by the files in $VIMRUNTIME/syntax.
 let s:syn_remove_words = 'match,matchgroup=,contains,'.
@@ -38,21 +56,28 @@ let s:prepended  = ''
 " This function is used for the 'omnifunc' option.
 function! syntaxcomplete#Complete(findstart, base)
 
+    " Only display items in the completion window that are at least
+    " this many characters in length
+    if !exists('b:omni_syntax_ignorecase')
+        if exists('g:omni_syntax_ignorecase')
+            let b:omni_syntax_ignorecase = g:omni_syntax_ignorecase
+        else
+            let b:omni_syntax_ignorecase = &ignorecase
+        endif
+    endif
+
     if a:findstart
         " Locate the start of the item, including "."
         let line = getline('.')
         let start = col('.') - 1
         let lastword = -1
         while start > 0
-            if line[start - 1] =~ '\w'
+            " if line[start - 1] =~ '\S'
+            "     let start -= 1
+            " elseif line[start - 1] =~ '\.'
+            if line[start - 1] =~ '\k'
                 let start -= 1
-            elseif line[start - 1] =~ '\.'
-                " The user must be specifying a column name
-                if lastword == -1
-                    let lastword = start
-                endif
-                let start -= 1
-                let b:sql_compl_type = 'column'
+                let lastword = a:findstart
             else
                 break
             endif
@@ -64,11 +89,12 @@ function! syntaxcomplete#Complete(findst
             let s:prepended = ''
             return start
         endif
-        let s:prepended = strpart(line, start, lastword - start)
-        return lastword
+        let s:prepended = strpart(line, start, (col('.') - 1) - start)
+        return start
     endif
 
-    let base = s:prepended . a:base
+    " let base = s:prepended . a:base
+    let base = s:prepended
 
     let filetype = substitute(&filetype, '\.', '_', 'g')
     let list_idx = index(s:cache_name, filetype, 0, &ignorecase)
@@ -82,11 +108,16 @@ function! syntaxcomplete#Complete(findst
 
     " Return list of matches.
 
-    if base =~ '\w'
-        let compstr    = join(compl_list, ' ')
-        let expr       = (g:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
-        let compstr    = substitute(compstr, expr, '', 'g')
-        let compl_list = split(compstr, '\s\+')
+    if base != ''
+        " let compstr    = join(compl_list, ' ')
+        " let expr       = (b:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
+        " let compstr    = substitute(compstr, expr, '', 'g')
+        " let compl_list = split(compstr, '\s\+')
+
+        " Filter the list based on the first few characters the user
+        " entered
+        let expr = 'v:val '.(g:omni_syntax_ignorecase==1?'=~?':'=~#')." '^".escape(base, '\\/.*$^~[]').".*'"
+        let compl_list = filter(deepcopy(compl_list), expr)
     endif
 
     return compl_list
@@ -100,6 +131,26 @@ function! OmniSyntaxList()
     "     let use_dictionary = a:1
     " endif
 
+    " Only display items in the completion window that are at least
+    " this many characters in length
+    if !exists('b:omni_syntax_use_iskeyword')
+        if exists('g:omni_syntax_use_iskeyword')
+            let b:omni_syntax_use_iskeyword = g:omni_syntax_use_iskeyword
+        else
+            let b:omni_syntax_use_iskeyword = 1
+        endif
+    endif
+
+    " Only display items in the completion window that are at least
+    " this many characters in length
+    if !exists('b:omni_syntax_minimum_length')
+        if exists('g:omni_syntax_minimum_length')
+            let b:omni_syntax_minimum_length = g:omni_syntax_minimum_length
+        else
+            let b:omni_syntax_minimum_length = 0
+        endif
+    endif
+
     let saveL = @l
     
     " Loop through all the syntax groupnames, and build a
@@ -294,14 +345,32 @@ function! s:SyntaxCSyntaxGroupItems( gro
                     \    , "", 'g' 
                     \ )
 
-        " There are a number of items which have non-word characters in
-        " them, *'T_F1'*.  vim.vim is one such file.
-        " This will replace non-word characters with spaces.
-        let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' )
+        if b:omni_syntax_use_iskeyword == 0
+            " There are a number of items which have non-word characters in
+            " them, *'T_F1'*.  vim.vim is one such file.
+            " This will replace non-word characters with spaces.
+            let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' )
+        else
+            let accept_chars = ','.&iskeyword.','
+            " Remove all character ranges
+            let accept_chars = substitute(accept_chars, ',[^,]\+-[^,]\+,', ',', 'g')
+            " Remove all numeric specifications
+            let accept_chars = substitute(accept_chars, ',\d\{-},', ',', 'g')
+            " Remove all commas
+            let accept_chars = substitute(accept_chars, ',', '', 'g')
+            " Escape special regex characters
+            let accept_chars = escape(accept_chars, '\\/.*$^~[]' )
+            " Remove all characters that are not acceptable
+            let syn_list = substitute( syn_list, '[^0-9A-Za-z_ '.accept_chars.']', ' ', 'g' )
+        endif
+
+        if b:omni_syntax_minimum_length > 0
+            " If the user specified a minimum length, enforce it
+            let syn_list = substitute(' '.syn_list.' ', ' \S\{,'.b:omni_syntax_minimum_length.'}\ze ', ' ', 'g')
+        endif
     else
         let syn_list = ''
     endif
 
     return syn_list
 endfunction
-
--- a/runtime/autoload/xmlcomplete.vim
+++ b/runtime/autoload/xmlcomplete.vim
@@ -1,7 +1,12 @@
 " Vim completion script
 " Language:	XML
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2006 Apr 30
+" Last Change:	2006 Jul 18
+" Version: 1.8
+"
+" Changelog:
+" 1.8 - 2006 Jul 18
+"       - allow for closing of xml tags even when data file isn't available
 
 " This function will create Dictionary with users namespace strings and values
 " canonical (system) names of data files.  Names should be lowercase,
@@ -80,7 +85,7 @@ function! xmlcomplete#CompleteTags(finds
 			let context_line = getline(curline-i)
 			if context_line =~ '<[^>]*$'
 				" Yep, this is this line
-				let context_lines = getline(curline-i, curline)
+				let context_lines = getline(curline-i, curline-1) + [b:compl_context]
 				let b:compl_context = join(context_lines, ' ')
 				break
 			elseif context_line =~ '>[^<]*$' || i == curline
@@ -106,10 +111,6 @@ function! xmlcomplete#CompleteTags(finds
     return start
 
   else
-	" There is no connection of namespace and data file. Abandon action
-	if !exists("g:xmldata_connection") || g:xmldata_connection == {}
-		return []
-	endif
 	" Initialize base return lists
     let res = []
     let res2 = []
@@ -119,6 +120,17 @@ function! xmlcomplete#CompleteTags(finds
 	endif
 	let context = matchstr(b:compl_context, '^<\zs.*')
 	unlet! b:compl_context
+	" There is no connection of namespace and data file.
+	if !exists("g:xmldata_connection") || g:xmldata_connection == {}
+		" There is still possibility we may do something - eg. close tag
+		let b:unaryTagsStack = "base meta link hr br param img area input col"
+		if context =~ '^\/'
+			let opentag = xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
+			return [opentag.">"]
+		else
+			return []
+		endif
+	endif
 
 	" Make entities completion
 	if exists("b:entitiescompl")
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,9 +1,9 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:			May 01, 2006
-" Version:		9
-" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" License:		Vim License  (see vim's :help license)
+" Date:		Sep 29, 2006
+" Version:	12
+" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" License:	Vim License  (see vim's :help license)
 " Copyright:    Copyright (C) 2005 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
@@ -15,15 +15,28 @@
 "               of this software.
 
 " ---------------------------------------------------------------------
-" Initialization: {{{1
+" Load Once: {{{1
 let s:keepcpo= &cpo
 set cpo&vim
-if exists("g:loaded_zip")
+if &cp || exists("g:loaded_zip") || v:version < 700
  finish
 endif
 
-let g:loaded_zip     = "v9"
+let g:loaded_zip     = "v12"
 let s:zipfile_escape = ' ?&;\'
+let s:ERROR          = 2
+let s:WARNING        = 1
+let s:NOTE           = 0
+
+" ---------------------------------------------------------------------
+"  Global Values: {{{1
+if !exists("g:zip_shq")
+ if has("unix")
+  let g:zip_shq= "'"
+ else
+  let g:zip_shq= '"'
+ endif
+endif
 
 " ----------------
 "  Functions: {{{1
@@ -38,8 +51,9 @@ fun! zip#Browse(zipfile)
 
   " sanity checks
   if !executable("unzip")
+   redraw!
    echohl Error | echo "***error*** (zip#Browse) unzip not available on your system"
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("zip#Browse")
    return
@@ -47,8 +61,9 @@ fun! zip#Browse(zipfile)
   if !filereadable(a:zipfile)
    if a:zipfile !~# '^\a\+://'
     " if its an url, don't complain, let url-handlers such as vim do its thing
+    redraw!
     echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    endif
    let &report= repkeep
 "   call Dret("zip#Browse : file<".a:zipfile."> not readable")
@@ -75,11 +90,12 @@ fun! zip#Browse(zipfile)
   0d
   $
 
-"  call Decho("exe silent r! unzip -l '".a:zipfile."'")
-  exe "silent r! unzip -l '".a:zipfile."'"
+"  call Decho("exe silent r! unzip -l ".s:QuoteFileDir(a:zipfile))
+  exe "silent r! unzip -l ".s:QuoteFileDir(a:zipfile)
   if v:shell_error != 0
+   redraw!
    echohl WarningMsg | echo "***warning*** (zip#Browse) ".a:zipfile." is not a zip file" | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    silent %d
    let eikeep= &ei
    set ei=BufReadCmd,FileReadCmd
@@ -121,8 +137,9 @@ fun! s:ZipBrowseSelect()
    return
   endif
   if fname =~ '/$'
+   redraw!
    echohl Error | echo "***error*** (zip#Browse) Please specify a file, not a directory" | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("ZipBrowseSelect")
    return
@@ -131,7 +148,7 @@ fun! s:ZipBrowseSelect()
 "  call Decho("fname<".fname.">")
 
   " get zipfile to the new-window
-  let zipfile= substitute(w:zipfile,'.zip$','','e')
+  let zipfile = w:zipfile
   let curfile= expand("%")
 "  call Decho("zipfile<".zipfile.">")
 "  call Decho("curfile<".curfile.">")
@@ -160,12 +177,15 @@ fun! zip#Read(fname,mode)
   else
    let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
    let fname   = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
+
+   " TODO Needs to predicated to using InfoZIP's unzip on Windows
+   let fname = substitute(fname, '[', '[[]', 'g')
   endif
 "  call Decho("zipfile<".zipfile.">")
 "  call Decho("fname  <".fname.">")
 
-"  call Decho("exe r! unzip -p '".zipfile."' '".fname."'")
-  exe "silent r! unzip -p '".zipfile."' '".fname."'"
+"  call Decho("exe r! unzip -p ".s:QuoteFileDir(zipfile)." ".s:QuoteFileDir(fname))
+  exe "silent r! unzip -p ".s:QuoteFileDir(zipfile)." ".s:QuoteFileDir(fname)
 
   " cleanup
   0d
@@ -184,15 +204,17 @@ fun! zip#Write(fname)
 
   " sanity checks
   if !executable("zip")
+   redraw!
    echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the zip pgm" | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("zip#Write")
    return
   endif
   if !exists("*mkdir")
+   redraw!
    echohl Error | echo "***error*** (zip#Write) sorry, mkdir() doesn't work on your system" | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
    let &report= repkeep
 "   call Dret("zip#Write")
    return
@@ -208,15 +230,11 @@ fun! zip#Write(fname)
   call mkdir(tmpdir,"p")
 
   " attempt to change to the indicated directory
-  try
-   exe "cd ".escape(tmpdir,' \')
-  catch /^Vim\%((\a\+)\)\=:E344/
-   echohl Error | echo "***error*** (zip#Write) cannot cd to temporary directory" | Echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+  if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot cd to temporary directory")
    let &report= repkeep
 "   call Dret("zip#Write")
    return
-  endtry
+  endif
 "  call Decho("current directory now: ".getcwd())
 
   " place temporary files under .../_ZIPVIM_/
@@ -255,21 +273,27 @@ fun! zip#Write(fname)
    let zipfile = substitute(system("cygpath ".zipfile),'\n','','e')
   endif
 
-"  call Decho("zip -u '".zipfile.".zip' '".fname."'")
-  call system("zip -u '".zipfile.".zip' '".fname."'")
+  " TODO Needs to predicated to using InfoZIP's unzip
+  if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
+    let fname = substitute(fname, '[', '[[]', 'g')
+  endif
+
+"  call Decho("zip -u ".s:QuoteFileDir(zipfile)." ".s:QuoteFileDir(fname))
+  call system("zip -u ".s:QuoteFileDir(zipfile)." ".s:QuoteFileDir(fname))
   if v:shell_error != 0
+   redraw!
    echohl Error | echo "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname | echohl None
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 
   elseif s:zipfile_{winnr()} =~ '^\a\+://'
    " support writing zipfiles across a network
    let netzipfile= s:zipfile_{winnr()}
-"   call Decho("handle writing <".zipfile.".zip> across network as <".netzipfile.">")
+"   call Decho("handle writing <".zipfile."> across network as <".netzipfile.">")
    1split|enew
    let binkeep= &binary
    let eikeep = &ei
    set binary ei=all
-   exe "e! ".zipfile.".zip"
+   exe "e! ".zipfile
    call netrw#NetWrite(netzipfile)
    let &ei     = eikeep
    let &binary = binkeep
@@ -280,7 +304,8 @@ fun! zip#Write(fname)
   " cleanup and restore current directory
   cd ..
   call s:Rmdir("_ZIPVIM_")
-  exe "cd ".escape(curdir,' \')
+  call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!")
+  call s:Rmdir(tmpdir)
   setlocal nomod
 
   let &report= repkeep
@@ -288,17 +313,52 @@ fun! zip#Write(fname)
 endfun
 
 " ---------------------------------------------------------------------
+" QuoteFileDir: {{{2
+fun! s:QuoteFileDir(fname)
+"  call Dfunc("QuoteFileDir(fname<".a:fname.">)")
+"  call Dret("QuoteFileDir")
+  return g:zip_shq.a:fname.g:zip_shq
+endfun
+
+" ---------------------------------------------------------------------
+" ChgDir: {{{2
+fun! s:ChgDir(newdir,errlvl,errmsg)
+"  call Dfunc("ChgDir(newdir<".a:newdir."> errlvl=".a:errlvl."  errmsg<".a:errmsg.">)")
+
+  if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
+   let newdir= escape(a:newdir,' ')
+  else
+   let newdir= escape(a:newdir,'\ ')
+  endif
+
+  try
+   exe "cd ".newdir
+  catch /^Vim\%((\a\+)\)\=:E344/
+   redraw!
+   if a:errlvl == s:NOTE
+    echo "***note*** ".a:errmsg
+   elseif a:errlvl == s:WARNING
+    echohl WarningMsg | echo "***warning*** ".a:errmsg | echohl NONE
+   elseif a:errlvl == s:ERROR
+    echohl Error | echo "***error*** ".a:errmsg | echohl NONE
+   endif
+"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+"   call Dret("ChgDir 1")
+   return 1
+  endtry
+
+"  call Dret("ChgDir 0")
+  return 0
+endfun
+
+" ---------------------------------------------------------------------
 " Rmdir: {{{2
 fun! s:Rmdir(fname)
 "  call Dfunc("Rmdir(fname<".a:fname.">)")
-  if has("unix")
-   call system("/bin/rm -rf ".a:fname)
-  elseif has("win32") || has("win95") || has("win64") || has("win16")
-   if &shell =~? "sh$"
-    call system("/bin/rm -rf ".a:fname)
-   else
-    call system("del /S ".a:fname)
-   endif
+  if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$'
+   call system("rmdir /S/Q ".s:QuoteFileDir(a:fname))
+  else
+   call system("/bin/rm -rf ".s:QuoteFileDir(a:fname))
   endif
 "  call Dret("Rmdir")
 endfun
@@ -307,4 +367,4 @@ endfun
 " Modelines And Restoration: {{{1
 let &cpo= s:keepcpo
 unlet s:keepcpo
-" vim:ts=8 fdm=marker
+"  vim:ts=8 fdm=marker
--- a/runtime/colors/blue.vim
+++ b/runtime/colors/blue.vim
@@ -2,9 +2,9 @@
 " vim: tw=0 ts=4 sw=4
 " Vim color file
 " Maintainer:	Steven Vertigan <steven@vertigan.wattle.id.au>
-" Last Change:	2003 May 11
-" Revision #4: Support for new "Underline" group. Removed superfluous html
-"			   formatting.
+" Last Change:	2006 Sep 23
+" Revision #5: Switch main text from white to yellow for easier contrast,
+" fixed some problems with terminal backgrounds.
 
 set background=dark
 hi clear
@@ -12,66 +12,44 @@ if exists("syntax_on")
   syntax reset
 endif
 let g:colors_name = "blue"
-hi Normal		guifg=white		guibg=darkBlue
-hi Normal		ctermfg=white	ctermbg=darkBlue
+hi Normal		guifg=yellow	guibg=darkBlue	ctermfg=yellow	ctermbg=darkBlue
 hi NonText		guifg=magenta	ctermfg=lightMagenta
-hi comment		guifg=gray		gui=bold
-hi comment		ctermfg=gray
+hi comment		guifg=gray		ctermfg=gray	ctermbg=darkBlue	gui=bold 
 hi constant		guifg=cyan		ctermfg=cyan
-hi identifier	guifg=gray		ctermfg=gray
-hi statement	guifg=yellow	gui=none	ctermfg=yellow
+hi identifier	guifg=gray		ctermfg=red
+hi statement	guifg=white		ctermfg=white	ctermbg=darkBlue	gui=none
 hi preproc		guifg=green		ctermfg=green
-hi type			guifg=orange	ctermfg=darkYellow
-hi special		guifg=magenta	ctermfg=lightMagenta
-hi Underlined	guifg=cyan		ctermfg=cyan
-hi Underlined	gui=underline	cterm=underline
+hi type			guifg=orange	ctermfg=lightRed	ctermbg=darkBlue
+hi special		guifg=magenta	ctermfg=lightMagenta	ctermbg=darkBlue
+hi Underlined	guifg=cyan		ctermfg=cyan	gui=underline	cterm=underline
+hi label		guifg=yellow	ctermfg=yellow
+hi operator		guifg=orange	gui=bold	ctermfg=lightRed	ctermbg=darkBlue
 
-hi ErrorMsg		guifg=orange	guibg=darkBlue
-hi ErrorMsg		ctermfg=lightRed
-hi WarningMsg	guifg=cyan		guibg=darkBlue	gui=bold
-hi WarningMsg	ctermfg=cyan
-hi ModeMsg		guifg=yellow	gui=NONE
-hi ModeMsg		ctermfg=yellow
-hi MoreMsg		guifg=yellow	gui=NONE
-hi MoreMsg		ctermfg=yellow
-hi Error		guifg=red		guibg=darkBlue	gui=underline
-hi Error		ctermfg=red
+hi ErrorMsg		guifg=orange	guibg=darkBlue	ctermfg=lightRed
+hi WarningMsg	guifg=cyan		guibg=darkBlue	ctermfg=cyan	gui=bold
+hi ModeMsg		guifg=yellow	gui=NONE	ctermfg=yellow
+hi MoreMsg		guifg=yellow	gui=NONE	ctermfg=yellow
+hi Error		guifg=red		guibg=darkBlue	gui=underline	ctermfg=red
 
-hi Todo			guifg=black		guibg=orange
-hi Todo			ctermfg=black	ctermbg=darkYellow
-hi Cursor		guifg=black		guibg=white
-hi Cursor		ctermfg=black	ctermbg=white
-hi Search		guifg=black		guibg=orange
-hi Search		ctermfg=black	ctermbg=darkYellow
-hi IncSearch	guifg=black		guibg=yellow
-hi IncSearch	ctermfg=black	ctermbg=darkYellow
-hi LineNr		guifg=pink		ctermfg=lightMagenta
+hi Todo			guifg=black		guibg=orange	ctermfg=black	ctermbg=darkYellow
+hi Cursor		guifg=black		guibg=white		ctermfg=black	ctermbg=white
+hi Search		guifg=black		guibg=orange	ctermfg=black	ctermbg=darkYellow
+hi IncSearch	guifg=black		guibg=yellow	ctermfg=black	ctermbg=darkYellow
+hi LineNr		guifg=cyan		ctermfg=cyan
 hi title		guifg=white	gui=bold	cterm=bold
 
-hi StatusLineNC	gui=NONE	guifg=black guibg=blue
-hi StatusLineNC	ctermfg=black  ctermbg=blue
-hi StatusLine	gui=bold	guifg=cyan	guibg=blue
-hi StatusLine	ctermfg=cyan   ctermbg=blue
+hi StatusLineNC	gui=NONE	guifg=black guibg=blue	ctermfg=black  ctermbg=blue
+hi StatusLine	gui=bold	guifg=cyan	guibg=blue	ctermfg=cyan   ctermbg=blue
+hi VertSplit	gui=none	guifg=blue	guibg=blue	ctermfg=blue	ctermbg=blue
 
-hi label		guifg=yellow	ctermfg=yellow
-hi operator		guifg=orange	gui=bold	ctermfg=darkYellow
-hi clear Visual
-hi Visual		term=reverse
-hi Visual		ctermfg=black	ctermbg=darkCyan
-hi Visual		guifg=black		guibg=darkCyan
+hi Visual		term=reverse		ctermfg=black	ctermbg=darkCyan	guifg=black		guibg=darkCyan
 
-hi DiffChange	guibg=darkGreen		guifg=black
-hi DiffChange	ctermbg=darkGreen	ctermfg=black
-hi DiffText		guibg=olivedrab		guifg=black
-hi DiffText		ctermbg=lightGreen	ctermfg=black
-hi DiffAdd		guibg=slateblue		guifg=black
-hi DiffAdd		ctermbg=blue		ctermfg=black
-hi DiffDelete   guibg=coral			guifg=black
-hi DiffDelete	ctermbg=cyan		ctermfg=black
+hi DiffChange	guibg=darkGreen		guifg=black	ctermbg=darkGreen	ctermfg=black
+hi DiffText		guibg=olivedrab		guifg=black		ctermbg=lightGreen	ctermfg=black
+hi DiffAdd		guibg=slateblue		guifg=black		ctermbg=blue		ctermfg=black
+hi DiffDelete   guibg=coral			guifg=black	ctermbg=cyan		ctermfg=black
 
-hi Folded		guibg=orange		guifg=black
-hi Folded		ctermbg=yellow		ctermfg=black
-hi FoldColumn	guibg=gray30		guifg=black
-hi FoldColumn	ctermbg=gray		ctermfg=black
+hi Folded		guibg=orange		guifg=black		ctermbg=yellow		ctermfg=black
+hi FoldColumn	guibg=gray30		guifg=black	ctermbg=gray		ctermfg=black
 hi cIf0			guifg=gray			ctermfg=gray
 
--- a/runtime/colors/torte.vim
+++ b/runtime/colors/torte.vim
@@ -1,6 +1,6 @@
 " Vim color file
 " Maintainer:	Thorsten Maerz <info@netztorte.de>
-" Last Change:	2001 Jul 23
+" Last Change:	2006 Dec 07
 " grey on black
 " optimized for TFT panels
 
@@ -18,7 +18,7 @@ let g:colors_name = "torte"
 " GUI
 highlight Normal     guifg=Grey80	guibg=Black
 highlight Search     guifg=Black	guibg=Red	gui=bold
-highlight Visual     guifg=Grey25			gui=bold
+highlight Visual     guifg=#404040			gui=bold
 highlight Cursor     guifg=Black	guibg=Green	gui=bold
 highlight Special    guifg=Orange
 highlight Comment    guifg=#80a0ff
@@ -42,7 +42,7 @@ if has("unix")
   if v:version<600
     highlight Normal  ctermfg=Grey	ctermbg=Black	cterm=NONE	guifg=Grey80      guibg=Black	gui=NONE
     highlight Search  ctermfg=Black	ctermbg=Red	cterm=bold	guifg=Black       guibg=Red	gui=bold
-    highlight Visual  ctermfg=Black	ctermbg=yellow	cterm=bold	guifg=Grey25			gui=bold
+    highlight Visual  ctermfg=Black	ctermbg=yellow	cterm=bold	guifg=#404040			gui=bold
     highlight Special ctermfg=LightBlue			cterm=NONE	guifg=LightBlue			gui=NONE
     highlight Comment ctermfg=Cyan			cterm=NONE	guifg=LightBlue			gui=NONE
   endif
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.0.  Last change: 2006 May 05
+*change.txt*    For Vim version 7.1a.  Last change: 2007 Jan 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -640,7 +640,7 @@ The flags that you can use for the subst
 
 [#]	Like [p] and prepend the line number.
 
-[l]	Like [l] but print the text like |:list|.
+[l]	Like [p] but print the text like |:list|.
 
 [r]	Only useful in combination with ":&" or ":s" without arguments.  ":&r"
 	works the same way as ":~":  When the search pattern is empty, use the
@@ -670,14 +670,20 @@ pattern from the last substitute or ":gl
 command uses the pattern from the last substitute, ":global", or search
 command.
 
+If the {string} is omitted the substitute is done as if it's empty.  Thus the
+matched pattern is deleted.  The separator after {pattern} can also be left
+out then.  Example: >
+	:%s/TESTING
+This deletes "TESTING" from all lines, but only one per line.
+
 For compatibility with Vi these two exceptions are allowed:
 "\/{string}/" and "\?{string}?" do the same as "//{string}/r".
 "\&{string}&" does the same as "//{string}/".
 							*E146*
 Instead of the '/' which surrounds the pattern and replacement string, you
-can use any other character, but not an alphanumeric character, '\', '"' or
-'|'.  This is useful if you want to include a '/' in the search pattern or
-replacement string.  Example: >
+can use any other single-byte character, but not an alphanumeric character,
+'\', '"' or '|'.  This is useful if you want to include a '/' in the search
+pattern or replacement string.  Example: >
 	:s+/+//+
 
 For the definition of a pattern, see |pattern|.
@@ -1075,7 +1081,7 @@ and ":put" commands and with CTRL-R.  {n
 		{not available when compiled without the |+cmdline_hist|
 		feature}
 
-6. Expression register "=				*quote_=* *quote=*
+6. Expression register "=			*quote_=* *quote=* *@=*
 This is not really a register that stores text, but is a way to use an
 expression in commands which use a register.  The expression register is
 read-only; you cannot put text into it.  After the '=', the cursor moves to
@@ -1365,7 +1371,7 @@ readability.
 
 letter	 meaning when present in 'formatoptions'    ~
 
-t	Auto-wrap text using textwidth (does not apply to comments)
+t	Auto-wrap text using textwidth
 c	Auto-wrap comments using textwidth, inserting the current comment
 	leader automatically.
 r	Automatically insert the current comment leader after hitting
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 7.0.  Last change: 2006 Apr 30
+*cmdline.txt*   For Vim version 7.1a.  Last change: 2006 Jul 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -301,6 +301,10 @@ CTRL-^		Toggle the use of language |:lma
 		for the next command or Search pattern.
 		{not in Vi}
 
+						*c_CTRL-]*
+CTRL-]		Trigger abbreviation, without inserting a character.  {not in
+		Vi}
+
 For Emacs-style editing on the command-line see |emacs-keys|.
 
 The <Up> and <Down> keys take the current command-line as a search string.
--- a/runtime/doc/debug.txt
+++ b/runtime/doc/debug.txt
@@ -1,4 +1,4 @@
-*debug.txt*     For Vim version 7.0.  Last change: 2006 May 01
+*debug.txt*     For Vim version 7.1a.  Last change: 2006 May 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/debugger.txt
+++ b/runtime/doc/debugger.txt
@@ -1,4 +1,4 @@
-*debugger.txt*  For Vim version 7.0.  Last change: 2005 Mar 29
+*debugger.txt*  For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -1,4 +1,4 @@
-*develop.txt*   For Vim version 7.0.  Last change: 2006 Mar 09
+*develop.txt*   For Vim version 7.1a.  Last change: 2006 Sep 26
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -224,7 +224,7 @@ MAX.*		POSIX, limits.h
 _[A-Z].*	POSIX, system
 E[A-Z0-9]*	POSIX, errno.h
 
-*_t		POSIX, for typedefs.  Use *_T instead.
+.*_t		POSIX, for typedefs.  Use .*_T instead.
 
 wait		don't use as argument to a function, conflicts with types.h
 index		shadows global declaration
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -1,4 +1,4 @@
-*diff.txt*      For Vim version 7.0.  Last change: 2006 Apr 14
+*diff.txt*      For Vim version 7.1a.  Last change: 2006 Oct 02
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -155,13 +155,16 @@ All the buffers edited in a window where
 the diff.  This is also possible for hidden buffers.  They must have been
 edited in a window first for this to be possible.
 
+					*:DiffOrig* *diff-original-file*
 Since 'diff' is a window-local option, it's possible to view the same buffer
 in diff mode in one window and "normal" in another window.  It is also
-possible to view the changes you have made to a buffer, but since Vim doesn't
-allow having two buffers for the same file, you need to make a copy of the
-original file and diff with that.  For example: >
-	:!cp % tempfile
-	:diffsplit tempfile
+possible to view the changes you have made to a buffer since the file was
+loaded.  Since Vim doesn't allow having two buffers for the same file, you
+need another buffer.  This command is useful: >
+	 command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
+	 	\ | wincmd p | diffthis
+(this is in |vimrc_example.vim|).  Use ":DiffOrig" to see the differences
+between the current buffer and the file it was loaded from.
 
 A buffer that is unloaded cannot be used for the diff.  But it does work for
 hidden buffers.  You can use ":hide" to close a window without unloading the
@@ -239,7 +242,7 @@ that the buffers will be equal within th
 		mode.
 		See below for [range].
 
-							*:diffpu* *:diffput*
+						*:diffpu* *:diffput* *E793*
 :[range]diffpu[t] [bufspec]
 		Modify another buffer to undo difference with the current
 		buffer.  Just like ":diffget" but the other buffer is modified
--- a/runtime/doc/digraph.txt
+++ b/runtime/doc/digraph.txt
@@ -1,4 +1,4 @@
-*digraph.txt*   For Vim version 7.0.  Last change: 2006 Apr 25
+*digraph.txt*   For Vim version 7.1a.  Last change: 2006 Jul 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -107,13 +107,12 @@ If you accidentally typed an 'a' that sh
 this, you will have to type <BS> e again.  To avoid this don't set the
 'digraph' option and use CTRL-K to enter digraphs.
 
-You may have problems using Vim with characters which have an ASCII value
-above 128.  For example: You insert ue (u-umlaut) and the editor echoes \334
-in Insert mode.  After leaving the Insert mode everything is fine.  Note that
-fmt removes all characters with ASCII codes above 128 from the text being
-formatted.  On some Unix systems this means you have to define the
-environment-variable LC_CTYPE.  If you are using csh, then put the following
-line in your .cshrc: >
+You may have problems using Vim with characters which have a value above 128.
+For example: You insert ue (u-umlaut) and the editor echoes \334 in Insert
+mode.  After leaving the Insert mode everything is fine.  Note that fmt
+removes all characters with a value above 128 from the text being formatted.
+On some Unix systems this means you have to define the environment-variable
+LC_CTYPE.  If you are using csh, then put the following line in your .cshrc: >
 	setenv LC_CTYPE iso_8859_1
 
 ==============================================================================
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 7.0.  Last change: 2006 Apr 30
+*editing.txt*   For Vim version 7.1a.  Last change: 2006 Oct 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -372,7 +372,7 @@ Example: The command ":e   Long File Nam
 Name".  When using a command that accepts more than one file name (like ":next
 file1 file2") embedded spaces must be escaped with a backslash.
 
-							*wildcard*
+						*wildcard* *wildcards*
 Wildcards in {file} are expanded.  Which wildcards are supported depends on
 the system.  These are the common ones:
 	?	matches one character
@@ -849,7 +849,7 @@ Note: When the 'write' option is off, yo
 
 							*:w* *:write*
 						*E502* *E503* *E504* *E505*
-						*E512* *E514* *E667*
+						*E512* *E514* *E667* *E796*
 :w[rite]		Write the whole buffer to the current file.  This is
 			the normal way to save changes to a file.  It fails
 			when the 'readonly' option is set or when there is
@@ -1150,8 +1150,8 @@ If you want to always use ":confirm", se
 			*:browse* *:bro* *E338* *E614* *E615* *E616* *E578*
 :bro[wse] {command}	Open a file selection dialog for an argument to
 			{command}.  At present this works for |:e|, |:w|,
-			|:r|, |:saveas|, |:sp|, |:mkexrc|, |:mkvimrc| and
-			|:mksession|.
+			|:r|, |:saveas|, |:sp|, |:mkexrc|, |:mkvimrc|,
+			|:mksession|, |:split|, |:vsplit|, and |:tabe|.
 			{only in Win32, Athena, Motif, GTK and Mac GUI}
 			When ":browse" is not possible you get an error
 			message.  If the |+browse| feature is missing or the
@@ -1469,7 +1469,9 @@ 11. File Searching					*file-searching*
 {not available when compiled without the |+path_extra| feature}
 
 The file searching is currently used for the 'path', 'cdpath' and 'tags'
-options.  There are three different types of searching:
+options, for |finddir()| and |findfile()|.
+
+There are three different types of searching:
 
 1) Downward search:					*starstar*
    Downward search uses the wildcards '*', '**' and possibly others
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -1,4 +1,4 @@
-*fold.txt*      For Vim version 7.0.  Last change: 2006 Mar 29
+*fold.txt*      For Vim version 7.1a.  Last change: 2006 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/gui_w16.txt
+++ b/runtime/doc/gui_w16.txt
@@ -1,4 +1,4 @@
-*gui_w16.txt*   For Vim version 7.0.  Last change: 2005 Mar 29
+*gui_w16.txt*   For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/gui_w32.txt
+++ b/runtime/doc/gui_w32.txt
@@ -1,4 +1,4 @@
-*gui_w32.txt*   For Vim version 7.0.  Last change: 2005 Mar 29
+*gui_w32.txt*   For Vim version 7.1a.  Last change: 2007 May 03
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -233,7 +233,8 @@ To use the standard MS-Windows way of CT
 Since CTRL-C is used to copy the text to the clipboard, it can't be used to
 cancel an operation.  Use CTRL-Break for that.
 
-CTRL-Z is used for undo.  This means you can't suspend Vim.
+CTRL-Z is used for undo.  This means you can't suspend Vim with this key, use
+|:suspend| instead (if it's supported at all).
 
 						*CTRL-V-alternative* *CTRL-Q*
 Since CTRL-V is used to paste, you can't use it to start a blockwise Visual
@@ -463,6 +464,8 @@ This maps Alt-Space to pop down the syst
 Maps Control-N to produce the keys Alt-Space followed by N.  This minimizes the
 Vim window via the system menu.
 
+Note that the key changes depending on the language you are using.
+
 						*intellimouse-wheel-problems*
 When using the Intellimouse mouse wheel causes Vim to stop accepting input, go
 to:
--- a/runtime/doc/gui_x11.txt
+++ b/runtime/doc/gui_x11.txt
@@ -1,4 +1,4 @@
-*gui_x11.txt*   For Vim version 7.0.  Last change: 2006 Apr 30
+*gui_x11.txt*   For Vim version 7.1a.  Last change: 2006 Jul 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -406,8 +406,9 @@ These are the different looks:
 - That means the menubar and toolbar handles are back!  Yeah!  And the
   resizing grid still works too.
 
-GNOME is automatically compiled with if it was found by configure.
-(FIXME: Is this still true?  Use --enable-gnome-check to force it to.)
+GNOME is compiled with if it was found by configure and the
+--enable-gnome-check argument was used.
+
 
 GNOME session support			*gui-gnome-session* *gnome-session*
 
@@ -436,7 +437,7 @@ command line argument).
 
 ==============================================================================
 7. KDE version					*gui-kde* *kde* *KDE* *KVim*
-
+							*gui-x11-kde*
 There is no KDE version of Vim.  There has been some work on a port using the
 Qt toolkit, but it never worked properly and it has been abandoned.  Work
 continues on Yzis: www.yzis.org.
@@ -497,12 +498,6 @@ menus look a bit better.  Edit the Makef
 scrollbars will remain the same, because Vim has its own, which are already
 3D (in fact, they look more like Motif).
 
-							*gui-x11-kde*
-For Vim-KDE, you need at least Qt(>=2.x) and the corresponding kdelibs.
-To compile, you must use the --with-qt-dir configure flag because QTDIR is not
-automatically detected yet. Giving KDE's directories to the configure script
-may also help in some cases.
-
 							*gui-x11-neXtaw*
 The neXtaw version is mostly like Athena, but uses different widgets.
 
--- a/runtime/doc/hangulin.txt
+++ b/runtime/doc/hangulin.txt
@@ -1,4 +1,4 @@
-*hangulin.txt*  For Vim version 7.0.  Last change: 2006 Apr 02
+*hangulin.txt*  For Vim version 7.1a.  Last change: 2006 Apr 02
 
 
 		  VIM REFERENCE MANUAL    by Chi-Deok Hwang and Sung-Hyun Nam
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -1,4 +1,4 @@
-*help.txt*	For Vim version 7.0.  Last change: 2006 May 07
+*help.txt*	For Vim version 7.1a.  Last change: 2006 Nov 07
 
 			VIM - main help file
 									 k
@@ -143,6 +143,7 @@ Special issues ~
 |farsi.txt|	Farsi (Persian) editing
 |hebrew.txt|	Hebrew language support and editing
 |russian.txt|	Russian language support and editing
+|ada.txt|	Ada (the programming language) support
 |hangulin.txt|	Hangul (Korean) input mode
 |rileft.txt|	right-to-left editing mode
 
@@ -189,11 +190,13 @@ Remarks about specific systems ~
 |os_win32.txt|	MS-Windows 95/98/NT
 						*standard-plugin-list*
 Standard plugins ~
-|pi_gzip.txt|	Reading and writing compressed files
-|pi_netrw.txt|	Reading and writing files over a network
-|pi_paren.txt|	Highlight matching parens
-|pi_tar.txt|	Tar file explorer
-|pi_zip.txt|	Zip archive explorer
+|pi_getscript.txt| Downloading latest version of Vim scripts
+|pi_gzip.txt|	   Reading and writing compressed files
+|pi_netrw.txt|	   Reading and writing files over a network
+|pi_paren.txt|	   Highlight matching parens
+|pi_tar.txt|	   Tar file explorer
+|pi_vimball.txt|   Create a self-installing Vim script
+|pi_zip.txt|	   Zip archive explorer
 
 LOCAL ADDITIONS:				*local-additions*
 
--- a/runtime/doc/if_cscop.txt
+++ b/runtime/doc/if_cscop.txt
@@ -1,4 +1,4 @@
-*if_cscop.txt*  For Vim version 7.0.  Last change: 2005 Mar 29
+*if_cscop.txt*  For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Andy Kahn
--- a/runtime/doc/if_mzsch.txt
+++ b/runtime/doc/if_mzsch.txt
@@ -1,4 +1,4 @@
-*if_mzsch.txt*  For Vim version 7.0.  Last change: 2006 Apr 30
+*if_mzsch.txt*  For Vim version 7.1a.  Last change: 2007 May 03
 
 
 		  VIM REFERENCE MANUAL    by Sergey Khorev
@@ -23,6 +23,8 @@ Dynamic loading added by Sergey Khorev
 For downloading MzScheme and other info:
 	http://www.plt-scheme.org/software/mzscheme/
 
+Note: On FreeBSD you should use the "drscheme" port.
+
 ==============================================================================
 1. Commands						*mzscheme-commands*
 
@@ -262,8 +264,9 @@ In a console window type "path" to see w
 
 The names of the DLLs must match the MzScheme version Vim was compiled with.
 For MzScheme version 209 they will be "libmzsch209_000.dll" and
-"libmzgc209_000.dll". To know for sure edit "gvim.exe" and search for
-"libmzsch\d\d\d_\d\d\d\.dll\c".
+"libmzgc209_000.dll". To know for sure look at the output of the ":version"
+command, look for -DDYNAMIC_MZSCH_DLL="something" and
+-DDYNAMIC_MZGC_DLL="something" in the "Compilation" info.
 
 ======================================================================
   vim:tw=78:ts=8:sts=4:ft=help:norl:
--- a/runtime/doc/if_ole.txt
+++ b/runtime/doc/if_ole.txt
@@ -1,4 +1,4 @@
-*if_ole.txt*    For Vim version 7.0.  Last change: 2006 Apr 30
+*if_ole.txt*    For Vim version 7.1a.  Last change: 2006 Apr 30
 
 
 		  VIM REFERENCE MANUAL    by Paul Moore
--- a/runtime/doc/if_perl.txt
+++ b/runtime/doc/if_perl.txt
@@ -1,4 +1,4 @@
-*if_perl.txt*   For Vim version 7.0.  Last change: 2006 Mar 06
+*if_perl.txt*   For Vim version 7.1a.  Last change: 2006 Mar 06
 
 
 		  VIM REFERENCE MANUAL    by Sven Verdoolaege
--- a/runtime/doc/if_pyth.txt
+++ b/runtime/doc/if_pyth.txt
@@ -1,4 +1,4 @@
-*if_pyth.txt*   For Vim version 7.0.  Last change: 2006 Apr 30
+*if_pyth.txt*   For Vim version 7.1a.  Last change: 2006 Apr 30
 
 
 		  VIM REFERENCE MANUAL    by Paul Moore
--- a/runtime/doc/if_ruby.txt
+++ b/runtime/doc/if_ruby.txt
@@ -1,4 +1,4 @@
-*if_ruby.txt*   For Vim version 7.0.  Last change: 2006 Apr 30
+*if_ruby.txt*   For Vim version 7.1a.  Last change: 2006 Apr 30
 
 
 		  VIM REFERENCE MANUAL    by Shugo Maeda
--- a/runtime/doc/if_sniff.txt
+++ b/runtime/doc/if_sniff.txt
@@ -1,4 +1,4 @@
-*if_sniff.txt*	For Vim version 7.0.  Last change: 2005 Mar 29
+*if_sniff.txt*	For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0.  Last change: 2006 May 05
+*insert.txt*    For Vim version 7.1a.  Last change: 2007 Apr 28
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -219,8 +219,8 @@ CTRL-_		Switch between languages, as fol
 		Please refer to |rileft.txt| for more information about
 		right-to-left mode.
 		{not in Vi}
-		Only if compiled with the |+rightleft| feature (which is not
-		the default).
+		Only if compiled with the |+rightleft| feature.
+
 						*i_CTRL-^*
 CTRL-^		Toggle the use of typing language characters.
 		When language |:lmap| mappings are defined:
@@ -1156,14 +1156,15 @@ any printable, non-white character:
 
 In all three states these can be used:
 CTRL-Y		  Yes: Accept the currently selected match and stop completion.
-CTRL-E		  End completion, go back to what was typed.
+CTRL-E		  End completion, go back to what was there before selecting a
+		  match (what was typed or longest common string).
 <PageUp>	  Select a match several entries back, but don't insert it.
 <PageDown>	  Select a match several entries further, but don't insert it.
 <Up>		  Select the previous match, as if CTRL-P was used, but don't
 		  insert it.
 <Down>		  Select the next match, as if CTRL-N was used, but don't
 		  insert it.
-space or <Tab>	  Stop completion without changing the match and insert the
+<Space> or <Tab>  Stop completion without changing the match and insert the
 		  typed character.
 
 The behavior of the Enter key depends on the state you are in:
@@ -1210,7 +1211,8 @@ C							*ft-c-omni*
 
 Completion of C code requires a tags file.  You should use Exuberant ctags,
 because it adds extra information that is needed for completion.  You can find
-it here: http://ctags.sourceforge.net/
+it here: http://ctags.sourceforge.net/  Version 5.6 or later is recommended.
+
 For version 5.5.4 you should add a patch that adds the "typename:" field:
 	ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
 A compiled .exe for MS-Windows can be found at:
@@ -1330,9 +1332,9 @@ will be suggested. All other elements ar
 
 PHP							*ft-php-omni*
 
-Completion of PHP code requires tags file for completion of data from external
-files. You should use Exuberant ctags version 5.5.4 or newer. You can find it
-here: http://ctags.sourceforge.net/
+Completion of PHP code requires a tags file for completion of data from
+external files and for class aware completion. You should use Exuberant ctags
+version 5.5.4 or newer. You can find it here: http://ctags.sourceforge.net/
 
 Script completes:
 
@@ -1390,8 +1392,10 @@ The completions provided by CTRL-X CTRL-
 
 Notes:
  - Vim will load/evaluate code in order to provide completions.  This may
-   cause some code execution, which may be a concern.
- - In context 1 above, Vim can parse the entire buffer to add a list of
+   cause some code execution, which may be a concern. This is no longer 
+   enabled by default, to enable this feature add >
+     let g:rubycomplete_buffer_loading = 1
+<- In context 1 above, Vim can parse the entire buffer to add a list of
    classes to the completion results. This feature is turned off by default,
    to enable it add >
      let g:rubycomplete_classes_in_global = 1
@@ -1407,8 +1411,13 @@ Notes:
 
 SYNTAX							*ft-syntax-omni*
 
-This uses the current syntax highlighting for completion.  It can be used for
-any filetype and provides a minimal language-sensitive completion.
+Vim has the ability to color syntax highlight nearly 500 languages.  Part of
+this highlighting includes knowing what keywords are part of a language.  Many
+filetypes already have custom completion scripts written for them, the
+syntaxcomplete plugin provides basic completion for all other filetypes.  It
+does this by populating the omni completion list with the text Vim already
+knows how to color highlight.  It can be used for any filetype and provides a
+minimal language-sensitive completion.
 
 To enable syntax code completion you can run: >
 	setlocal omnifunc=syntaxcomplete#Complete
@@ -1461,6 +1470,15 @@ groups: >
 You can create as many of these variables as you need, varying only the
 filetype at the end of the variable name.
 
+The plugin uses the isKeyword option to determine where word boundaries are
+for the syntax items.  For example, in the Scheme language completion should
+include the "-", call-with-output-file.  Depending on your filetype, this may
+not provide the words you are expecting.  Setting the
+g:omni_syntax_use_iskeyword option to 0 will force the syntax plugin to break
+on word characters.   This can be controlled adding the following to your
+vimrc: >
+    let g:omni_syntax_use_iskeyword = 0
+
 
 SQL							*ft-sql-omni*
 
@@ -1771,13 +1789,13 @@ 10. Inserting a file					*inserting-file
 			See |++opt| for the possible values of [++opt].
 
 							*:r!* *:read!*
-:r[ead] !{cmd}		Execute {cmd} and insert its standard output below
-			the cursor.  A temporary file is used to store the
-			output of the command which is then read into the
-			buffer.  'shellredir' is used to save the output of
-			the command, which can be set to include stderr or
-			not.  {cmd} is executed like with ":!{cmd}", any '!'
-			is replaced with the previous command |:!|.
+:[range]r[ead] !{cmd}	Execute {cmd} and insert its standard output below
+			the cursor or the specified line.  A temporary file is
+			used to store the output of the command which is then
+			read into the buffer.  'shellredir' is used to save
+			the output of the command, which can be set to include
+			stderr or not.  {cmd} is executed like with ":!{cmd}",
+			any '!' is replaced with the previous command |:!|.
 
 These commands insert the contents of a file, or the output of a command,
 into the buffer.  They can be undone.  They cannot be repeated with the "."
--- a/runtime/doc/mbyte.txt
+++ b/runtime/doc/mbyte.txt
@@ -1,4 +1,4 @@
-*mbyte.txt*     For Vim version 7.0.  Last change: 2006 Apr 30
+*mbyte.txt*     For Vim version 7.1a.  Last change: 2006 Aug 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar et al.
@@ -403,7 +403,8 @@ depends on the system used, no detailed 
  8bit      2byte	MS-Windows: works for all codepages installed on your
 			system; you can only type 8bit characters;
 			Other systems: does NOT work.
- 8bit	   Unicode	Works, but you can only type 8bit characters; in a
+ 8bit	   Unicode	Works, but only 8bit characters can be typed directly
+			(others through digraphs, keymaps, etc.); in a
 			terminal you can only see 8bit characters; the GUI can
 			show all characters that the 'guifont' supports.
 
--- a/runtime/doc/mlang.txt
+++ b/runtime/doc/mlang.txt
@@ -1,4 +1,4 @@
-*mlang.txt*     For Vim version 7.0.  Last change: 2004 Feb 24
+*mlang.txt*     For Vim version 7.1a.  Last change: 2006 Jul 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -114,7 +114,7 @@ the language of your choice.  use "en" t
 ==============================================================================
 2. Menus						*multilang-menus*
 
-See |45.2| for the basics.
+See |45.2| for the basics, esp. using 'langmenu'.
 
 Note that if changes have been made to the menus after the translation was
 done, some of the menus may be shown in English.  Please try contacting the
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -1,4 +1,4 @@
-*motion.txt*    For Vim version 7.0.  Last change: 2006 Apr 30
+*motion.txt*    For Vim version 7.1a.  Last change: 2006 Dec 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -169,15 +169,15 @@ l		or					*l*
 
 							*0*
 0			To the first character of the line.  |exclusive|
-			motion.  When moving up or down, stay in same screen
-			column (if possible).
+			motion.
 
 							*<Home>* *<kHome>*
 <Home>			To the first character of the line.  |exclusive|
-			motion.  When moving up or down, stay in same text
-			column (if possible).  Works like "1|", which differs
-			from "0" when the line starts with a <Tab>.  {not in
-			Vi}
+			motion.  When moving up or down next, stay in same
+			TEXT column (if possible).  Most other commands stay
+			in the same SCREEN column.  <Home> works like "1|",
+			which differs from "0" when the line starts with a
+			<Tab>.  {not in Vi}
 
 							*^*
 ^			To the first non-blank character of the line.
@@ -752,11 +752,11 @@ m[  or  m]		Set the |'[| or |']| mark.  
 			be omitted.
 
 						*'* *'a* *`* *`a*
-'{a-z}  `{a-z}		Jump to the mark {a-z}.
+'{a-z}  `{a-z}		Jump to the mark {a-z} in the current buffer.
 
 						*'A* *'0* *`A* *`0*
-'{A-Z0-9}  `{A-Z0-9}	To the mark {A-Z0-9} in the correct file (not a motion
-			command when in another file).  {not in Vi}
+'{A-Z0-9}  `{A-Z0-9}	To the mark {A-Z0-9} in the file where it was set (not
+			a motion command when in another file).  {not in Vi}
 
 						*g'* *g'a* *g`* *g`a*
 g'{mark}  g`{mark}
--- a/runtime/doc/os_390.txt
+++ b/runtime/doc/os_390.txt
@@ -1,4 +1,4 @@
-*os_390.txt*    For Vim version 7.0.  Last change: 2005 Mar 29
+*os_390.txt*    For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL	  by Ralf Schandl
--- a/runtime/doc/os_beos.txt
+++ b/runtime/doc/os_beos.txt
@@ -1,4 +1,4 @@
-*os_beos.txt*	For Vim version 7.0.  Last change: 2005 Mar 29
+*os_beos.txt*	For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/os_mac.txt
+++ b/runtime/doc/os_mac.txt
@@ -1,4 +1,4 @@
-*os_mac.txt*    For Vim version 7.0.  Last change: 2006 Apr 30
+*os_mac.txt*    For Vim version 7.1a.  Last change: 2006 Apr 30
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar et al.
--- a/runtime/doc/os_msdos.txt
+++ b/runtime/doc/os_msdos.txt
@@ -1,4 +1,4 @@
-*os_msdos.txt*  For Vim version 7.0.  Last change: 2005 Mar 29
+*os_msdos.txt*  For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/os_risc.txt
+++ b/runtime/doc/os_risc.txt
@@ -1,4 +1,4 @@
-*os_risc.txt*   For Vim version 7.0.  Last change: 2005 Mar 29
+*os_risc.txt*   For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Thomas Leonard
--- a/runtime/doc/os_unix.txt
+++ b/runtime/doc/os_unix.txt
@@ -1,4 +1,4 @@
-*os_unix.txt*   For Vim version 7.0.  Last change: 2005 Mar 29
+*os_unix.txt*   For Vim version 7.1a.  Last change: 2005 Mar 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
new file mode 100644
--- /dev/null
+++ b/runtime/doc/pi_getscript.txt
@@ -0,0 +1,406 @@
+*pi_getscript.txt*  For Vim version 7.1a.  Last change: 2007 Apr 26
+>
+		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell, Jr.
+<
+Authors:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamilyA.Mbiz>
+	  (remove NOSPAM from the email address)
+						*GetLatestVimScripts-copyright*
+Copyright: (c) 2004-2006 by Charles E. Campbell, Jr.	*glvs-copyright*
+           The VIM LICENSE applies to getscript.vim and
+           pi_getscript.txt (see |copyright|) except use
+           "getscript" instead of "Vim".  No warranty, express or implied.
+	   Use At-Your-Own-Risk.
+
+Getscript is a plugin that simplifies retrieval of the latest versions of the
+scripts that you yourself use!  Typing |:GLVS| will invoke getscript; it will
+then use the <GetLatestVimScripts.dat> (see |GetLatestVimScripts_dat|) file to
+get the latest versions of scripts listed therein from http://vim.sf.net/.
+
+==============================================================================
+1. Contents				*glvs-contents* *glvs* *getscript*
+   					*GetLatestVimScripts*
+
+	1. Contents........................................: |glvs-contents|
+	2. GetLatestVimScripts -- Getting Started..........: |glvs-install|
+	3. GetLatestVimScripts Usage.......................: |glvs-usage|
+	4. GetLatestVimScripts Data File...................: |glvs-data|
+	5. GetLatestVimScripts Friendly Plugins............: |glvs-plugins|
+	6. GetLatestVimScripts AutoInstall.................: |glvs-autoinstall|
+	7. GetLatestViMScripts Options.....................: |glvs-options|
+	8. GetLatestVimScripts Algorithm...................: |glvs-alg|
+	9. GetLatestVimScripts History.....................: |glvs-hist|
+
+
+==============================================================================
+2. GetLatestVimScripts -- Getting Started		*getscript-start*
+						*getlatestvimscripts-install*
+
+	VERSION FROM VIM DISTRIBUTION			*glvs-dist-install*
+
+Vim 7.0 does not include the GetLatestVimScripts.dist file which
+serves as an example and a template.  So, you'll need to create
+your own!  See |GetLatestVimScripts_dat|.
+
+	VERSION FROM VIM SF NET				*glvs-install*
+
+NOTE: The last step, that of renaming/moving the GetLatestVimScripts.dist
+file, is for those who have just downloaded GetLatestVimScripts.tar.bz2 for
+the first time.
+
+The GetLatestVimScripts.dist file serves as an example and a template for your
+own personal list.  Feel free to remove all the scripts mentioned within it;
+the "important" part of it is the first two lines.
+
+Your computer needs to have wget for GetLatestVimScripts to do its work.
+
+	1. if compressed:  gunzip getscript.vba.gz
+	2. Unix:
+		vim getscript.vba
+		:so %
+		:q
+		cd ~/.vim/GetLatest
+		mv GetLatestVimScripts.dist GetLatestVimScripts.dat
+		(edit GetLatestVimScripts.dat to install your own personal
+		list of desired plugins -- see |GetLatestVimScripts_dat|)
+	
+	3. Windows:
+		vim getscript.vba
+		:so %
+		:q
+		cd **path-to-vimfiles**/GetLatest
+		mv GetLatestVimScripts.dist GetLatestVimScripts.dat
+		(edit GetLatestVimScripts.dat to install your own personal
+		list of desired plugins -- see |GetLatestVimScripts_dat|)
+
+
+==============================================================================
+3. GetLatestVimScripts Usage				*glvs-usage* *:GLVS*
+
+Unless its been defined elsewhere, >
+	:GLVS
+will invoke GetLatestVimScripts().  If some other plugin has defined that
+command, then you may type
+>
+	:GetLatestVimScripts
+<
+The script will attempt to update and, if permitted, will automatically
+install scripts from http://vim.sourceforge.net/.  To do so it will peruse a
+file,
+>
+	.vim/GetLatest/GetLatestVimScripts.dat                    (unix)
+<
+or >
+	..wherever..\vimfiles\GetLatest\GetLatestVimScripts.dat   (windows)
+(see |glvs-data|), and examine plugins in your [.vim|vimfiles]/plugin
+directory (see |glvs-plugins|).
+
+Scripts which have been downloaded will appear in the
+~/.vim/GetLatest (unix) or ..wherever..\vimfiles\GetLatest (windows)
+subdirectory.  GetLatestVimScripts will attempt to automatically
+install them if you have the following line in your <.vimrc>: >
+
+	let g:GetLatestVimScripts_allowautoinstall=1
+
+The <GetLatestVimScripts.dat> file will be automatically be updated to
+reflect the latest version of script(s) so downloaded.
+(also see |glvs-options|)
+
+
+==============================================================================
+4. GetLatestVimScripts Data File		*getscript-data* *glvs-data*
+ 						*:GetLatestVimScripts_dat*
+The data file <GetLatestVimScripts.dat> must have for its first two lines
+the following text:
+>
+	ScriptID SourceID Filename
+	--------------------------
+<
+Following those two lines are three columns; the first two are numeric
+followed by a text column.  The GetLatest/GetLatestVimScripts.dist file
+contains an example of such a data file.  Anything following a #... is
+ignored, so you may embed comments in the file.
+
+The first number on each line gives the script's ScriptID.  When you're about
+to use a web browser to look at scripts on http://vim.sf.net/, just before you
+click on the script's link, you'll see a line resembling
+
+	http://vim.sourceforge.net/scripts/script.php?script_id=40
+
+The "40" happens to be a ScriptID that GetLatestVimScripts needs to
+download the associated page.
+
+The second number on each line gives the script's SourceID.  The SourceID
+records the count of uploaded scripts as determined by vim.sf.net; hence it
+serves to indicate "when" a script was uploaded.  Setting the SourceID to 1
+insures that GetLatestVimScripts will assume that the script it has is
+out-of-date.
+
+The SourceID is extracted by GetLatestVimScripts from the script's page on
+vim.sf.net; whenever its greater than the one stored in the
+GetLatestVimScripts.dat file, the script will be downloaded
+(see |GetLatestVimScripts_dat|).
+
+If your script's author has included a special comment line in his/her plugin,
+the plugin itself will be used by GetLatestVimScripts to build your
+<GetLatestVimScripts.dat> file, including any dependencies on other scripts it
+may have.  As an example, consider: >
+
+	" GetLatestVimScripts: 884  1 :AutoInstall: AutoAlign.vim
+
+This comment line tells getscript.vim to check vimscript #884 and that the
+script is automatically installable.  Getscript will also use this line to
+help build the GetLatestVimScripts.dat file, by including a line such as: >
+
+	884 1 AutoAlign.vim
+<
+in it an AutoAlign.vim line isn't already in GetLatestVimScripts.dat file.
+See |glvs-plugins| for more.  Thus, GetLatestVimScripts thus provides a
+comprehensive ability to keep your plugins up-to-date!
+
+						*GetLatestVimScripts_dat*
+As an example of a <GetLatestVimScripts.dat> file:
+>
+    ScriptID SourceID Filename
+    --------------------------
+    294 1 Align.vim
+    120 2 decho.vim
+     40 3 DrawIt.tar.gz
+    451 4 EasyAccents.vim
+    195 5 engspchk.vim
+    642 6 GetLatestVimScripts.vim
+    489 7 Manpageview.vim
+<
+Note: the first two lines are required, but essentially act as comments.
+
+
+==============================================================================
+5. GetLatestVimScripts Friendly Plugins	*getscript-plugins* *glvs-plugins*
+
+If a plugin author includes the following comment anywhere in their plugin,
+GetLatestVimScripts will find it and use it to automatically build the user's
+GetLatestVimScripts.dat files:
+>
+	                         src_id
+	                            v
+	" GetLatestVimScripts: ### ### yourscriptname
+	                        ^
+	                    scriptid
+<
+As an author, you should include such a line in to refer to your own script
+plus any additional lines describing any plugin dependencies it may have.
+Same format, of course!
+
+If your command is auto-installable (see |glvs-autoinstall|), and most scripts
+are, then you may include :AutoInstall: at the start of "yourscriptname".
+
+GetLatestVimScripts commands for those scripts are then appended, if not
+already present, to the user's GetLatest/GetLatestVimScripts.dat file.  Its a
+relatively painless way to automate the acquisition of any scripts your
+plugins depend upon.
+
+Now, as an author, you probably don't want GetLatestVimScripts to download
+your own scripts for you yourself, thereby overwriting your not-yet-released
+hard work.  GetLatestVimScripts provides a solution for this:  put
+>
+	0 0 yourscriptname
+<
+into your <GetLatestVimScripts.dat> file and GetLatestVimScripts will skip
+examining the "yourscriptname" scripts for those GetLatestVimScripts comment
+lines.  As a result, those lines won't be inadvertently installed into your
+<GetLatestVimScripts.dat> file and subsequently used to download your own
+scripts.  This is especially important to do if you've included the
+:AutoInstall: option.
+
+Be certain to use the same "yourscriptname" in the "0 0 yourscriptname" line
+as you've used in your GetLatestVimScripts comment!
+
+
+==============================================================================
+6. GetLatestVimScripts AutoInstall			*getscript-autoinstall*
+							*glvs-autoinstall*
+
+GetLatestVimScripts now supports "AutoInstall".  Not all scripts are
+supportive of auto-install, as they may have special things you need to do to
+install them (please refer to the script's "install" directions).  On the
+other hand, most scripts will be auto-installable.
+
+To let GetLatestVimScripts do an autoinstall, the data file's comment field
+should begin with (surrounding blanks are ignored): >
+
+	:AutoInstall:
+<
+Both colons are needed, and it should begin the comment (yourscriptname)
+field.
+
+One may prevent any autoinstalling by putting the following line in your
+<.vimrc>: >
+
+	let g:GetLatestVimScripts_allowautoinstall= 0
+<
+With :AutoInstall: enabled, as it is by default, files which end with
+
+	---.tar.bz2  : decompressed & untarred in .vim/ directory
+	---.vba.bz2  : decompressed in .vim/ directory, then vimball handles it
+	---.vim.bz2  : decompressed & moved into .vim/plugin directory
+	---.tar.gz   : decompressed & untarred in .vim/ directory
+	---.vba.gz   : decompressed in .vim/ directory, then vimball handles it
+	---.vim.gz   : decompressed & moved into .vim/plugin directory
+	---.vba      : unzipped in .vim/ directory
+	---.vim      : moved to .vim/plugin directory
+	---.zip      : unzipped in .vim/ directory
+
+and which merely need to have their components placed by the untar/gunzip or
+move-to-plugin-directory process should be auto-installable.  Vimballs, of
+course, should always be auto-installable.
+
+When is a script not auto-installable?  Let me give an example:
+
+	.vim/after/syntax/blockhl.vim
+
+The <blockhl.vim> script provides block highlighting for C/C++ programs; it is
+available at:
+
+	http://vim.sourceforge.net/scripts/script.php?script_id=104
+
+Currently, vim's after/syntax only supports by-filetype scripts (in
+blockhl.vim's case, that's after/syntax/c.vim).  Hence, auto-install would
+possibly overwrite the current user's after/syntax/c.vim file.
+
+In my own case, I use <aftersyntax.vim> (renamed to after/syntax/c.vim) to
+allow a after/syntax/c/ directory:
+
+	http://vim.sourceforge.net/scripts/script.php?script_id=1023
+
+The script allows multiple syntax files to exist separately in the
+after/syntax/c subdirectory.  I can't bundle aftersyntax.vim in and build an
+appropriate tarball for auto-install because of the potential for the
+after/syntax/c.vim contained in it to overwrite a user's c.vim.
+
+
+==============================================================================
+7. GetLatestVimScripts Options					*glvs-options*
+>
+	g:GetLatestVimScripts_wget
+<	default= "wget"
+		This variable holds the name of the command for obtaining
+		scripts.
+>
+	g:GetLatestVimScripts_options
+<	default= "-q -O"
+		This variable holds the options to be used with the
+		g:GetLatestVimScripts_wget command.
+>
+ 	g:getLatestVimScripts_allowautoinstall
+<	default= 1
+		This variable indicates whether GetLatestVimScripts is allowed
+		to attempt to automatically install scripts.  Note that it
+		doesn't understand vimballs (yet).  Furthermore, the plugin
+		author has to have explicitly indicated that his/her plugin
+		is automatically installable.
+
+
+==============================================================================
+8. GetLatestVimScripts Algorithm		*glvs-algorithm* *glvs-alg*
+
+The Vim sourceforge page dynamically creates a page by keying off of the
+so-called script-id.  Within the webpage of
+
+	http://vim.sourceforge.net/scripts/script.php?script_id=40
+
+is a line specifying the latest source-id (src_id).  The source identifier
+numbers are always increasing, hence if the src_id is greater than the one
+recorded for the script in GetLatestVimScripts then its time to download a
+newer copy of that script.
+
+GetLatestVimScripts will then download the script and update its internal
+database of script ids, source ids, and scriptnames.
+
+The AutoInstall process will:
+
+	Move the file from GetLatest/ to the following directory
+		Unix   : $HOME/.vim
+		Windows: $HOME\vimfiles
+	if the downloaded file ends with ".bz2"
+		bunzip2 it
+	else if the downloaded file ends with ".gz"
+		gunzip it
+	if the resulting file ends with ".zip"
+		unzip it
+	else if the resulting file ends with ".tar"
+		tar -oxvf it
+	else if the resulting file ends with ".vim"
+		move it to the plugin subdirectory
+
+
+==============================================================================
+9. GetLatestVimScripts History		*getscript-history* *glvs-hist* {{{1
+
+v23 Nov 03, 2006 : * ignores comments (#...)
+                   * handles vimballs
+v22 Oct 13, 2006 : * supports automatic use of curl if wget is not
+                     available
+v21 May 01, 2006 : * now takes advantage of autoloading.
+v20 Dec 23, 2005 : * Eric Haarbauer found&fixed a bug with unzip use;
+                     unzip needs the -o flag to overwrite.
+v19 Nov 28, 2005 : * v18's GetLatestVimScript line accessed the wrong
+                     script! Fixed.
+v18 Mar 21, 2005 : * bugfix to automatic database construction
+                   * bugfix - nowrapscan caused an error
+                     (tnx to David Green for the fix)
+    Apr 01, 2005   * if shell is bash, "mv" instead of "ren" used in
+                     :AutoInstall:s, even though its o/s is windows
+    Apr 01, 2005   * when downloading errors occurred, GLVS was
+                     terminating early.  It now just goes on to trying
+                     the next script (after trying three times to
+                     download a script description page)
+    Apr 20, 2005   * bugfix - when a failure to download occurred,
+                     GetLatestVimScripts would stop early and claim that
+                     everything was current.  Fixed.
+v17 Aug 25, 2004 : * g:GetLatestVimScripts_allowautoinstall, which
+                     defaults to 1, can be used to prevent all
+                     :AutoInstall:
+v16 Aug 25, 2004 : * made execution of bunzip2/gunzip/tar/zip silent
+                   * fixed bug with :AutoInstall: use of helptags
+v15 Aug 24, 2004 : * bugfix: the "0 0 comment" download prevention wasn't
+                     always preventing downloads (just usually).  Fixed.
+v14 Aug 24, 2004 : * bugfix -- helptags was using dotvim, rather than
+                     s:dotvim.  Fixed.
+v13 Aug 23, 2004 : * will skip downloading a file if its scriptid or srcid
+                     is zero.  Useful for script authors; that way their
+                     own GetLatestVimScripts activity won't overwrite
+                     their scripts.
+v12 Aug 23, 2004 : * bugfix - a "return" got left in the distribution that
+                     was intended only for testing.  Removed, now works.
+                   * :AutoInstall: implemented
+v11 Aug 20, 2004 : * GetLatestVimScripts is now a plugin:
+                   * :GetLatestVimScripts command
+                   * (runtimepath)/GetLatest/GetLatestVimScripts.dat
+                     now holds scripts that need updating
+v10 Apr 19, 2004 : * moved history from script to doc
+v9  Jan 23, 2004 :   windows (win32/win16/win95) will use
+                     double quotes ("") whereas other systems will use
+                     single quotes ('') around the urls in calls via wget
+v8  Dec 01, 2003 :   makes three tries at downloading
+v7  Sep 02, 2003 :   added error messages if "Click on..." or "src_id="
+                     not found in downloaded webpage
+                     Uses t_ti, t_te, and rs to make progress visible
+v6  Aug 06, 2003 :   final status messages now display summary of work
+                     ( "Downloaded someqty scripts" or
+                       "Everything was current")
+                     Now GetLatestVimScripts is careful about downloading
+                     GetLatestVimScripts.vim itself!
+                     (goes to <NEW_GetLatestVimScripts.vim>)
+v5  Aug 04, 2003 :   missing an endif near bottom
+v4  Jun 17, 2003 :   redraw! just before each "considering" message
+v3  May 27, 2003 :   Protects downloaded files from errant shell
+                     expansions with single quotes: '...'
+v2  May 14, 2003 :   extracts name of item to be obtained from the
+                     script file.  Uses it instead of comment field
+                     for output filename; comment is used in the
+                     "considering..." line and is now just a comment!
+                   * Fixed a bug: a string-of-numbers is not the
+                     same as a number, so I added zero to them
+                     and they became numbers.  Fixes comparison.
+
+==============================================================================
+vim:tw=78:ts=8:ft=help:fdm=marker
--- a/runtime/doc/pi_gzip.txt
+++ b/runtime/doc/pi_gzip.txt
@@ -1,4 +1,4 @@
-*pi_gzip.txt*   For Vim version 7.0.  Last change: 2002 Oct 29
+*pi_gzip.txt*   For Vim version 7.1a.  Last change: 2002 Oct 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,17 +1,20 @@
-*pi_netrw.txt*  For Vim version 7.0.  Last change: 2006 May 02
+*pi_netrw.txt*  For Vim version 7.1a.  Last change: 2007 May 05
 
-		NETRW REFERENCE MANUAL	  by Charles E. Campbell, Jr.
+	    -----------------------------------------------------
+	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
+	    -----------------------------------------------------
 
 
-*dav*		*http*		*network*	*rcp*		*scp*
-*fetch*		*netrw*		*Nread*		*rsync*		*sftp*
-*ftp*		*netrw.vim*	*Nwrite*	*netrw-file*
+*dav*           *http*          *network*       *Nwrite*   *netrw-file*
+*fetch*         *netrw*         *Nread*         *rcp*      *scp*
+*ftp*           *netrw.vim*     *Nsource*       *rsync*    *sftp*
 
 ==============================================================================
-0. Contents						*netrw-contents*
+1. Contents						*netrw-contents*
 
-1.  Starting With Netrw..................................|netrw-start|
-2.  Netrw Reference......................................|netrw-ref|
+1.  Contents.............................................|netrw-contents|
+2.  Starting With Netrw..................................|netrw-start|
+3.  Netrw Reference......................................|netrw-ref|
       CONTROLLING EXTERNAL APPLICATIONS..................|netrw-externapp|
       READING............................................|netrw-read|
       WRITING............................................|netrw-write|
@@ -19,14 +22,14 @@ 2.  Netrw Reference.....................
       CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
       VARIABLES..........................................|netrw-variables|
       PATHS..............................................|netrw-path|
-3.  Network-Oriented File Transfer.......................|netrw-xfer|
+4.  Network-Oriented File Transfer.......................|netrw-xfer|
       NETRC..............................................|netrw-netrc|
       PASSWORD...........................................|netrw-passwd|
-4.  Activation...........................................|netrw-activate|
-5.  Transparent File Transfer............................|netrw-transparent|
-6.  Ex Commands..........................................|netrw-ex|
-7.  Variables and Options................................|netrw-var|
-8.  Directory Browsing...................................|netrw-browse| {{{1
+5.  Activation...........................................|netrw-activate|
+6.  Transparent File Transfer............................|netrw-transparent|
+7.  Ex Commands..........................................|netrw-ex|
+8.  Variables and Options................................|netrw-var|
+9.  Directory Browsing...................................|netrw-browse| {{{1
       Maps...............................................|netrw-maps|
       Exploring..........................................|netrw-explore-cmds|
       Quick Reference Commands Table.....................|netrw-browse-cmds|
@@ -38,38 +41,39 @@ 8.  Directory Browsing..................
       Going Up...........................................|netrw--|
       Browsing...........................................|netrw-cr|
       Obtaining A File...................................|netrw-O|
-      Thin, Long, and Wide Listings......................|netrw-i|
+      Change Listing Style...............................|netrw-i|
       Making A New Directory.............................|netrw-d|
       Deleting Files Or Directories......................|netrw-D|
       Renaming Files Or Directories......................|netrw-move|
       Hiding Files Or Directories........................|netrw-a|
       Edit File Or Directory Hiding List.................|netrw-ctrl-h|
       Browsing With A Horizontally Split Window..........|netrw-o|
+      Browsing With A Vertically Split Window............|netrw-v|
+      Browsing With A New Tab............................|netrw-t|
       Preview Window.....................................|netrw-p|
       Selecting Sorting Style............................|netrw-s|
       Editing The Sorting Sequence.......................|netrw-S|
       Reversing Sorting Order............................|netrw-r|
       Changing To A Predecessor Directory................|netrw-u|
       Changing To A Successor Directory..................|netrw-U|
-      Browsing With A Vertically Split Window............|netrw-v|
       Customizing Browsing With A User Function..........|netrw-x|
       Making The Browsing Directory The Current Directory|netrw-c|
-      Bookmarking A Directory............................|netrw-b| |netrw-Nb|
-      Changing To A Bookmarked Directory.................|netrw-B| |netrw-NB|
+      Bookmarking A Directory............................|netrw-mb|
+      Changing To A Bookmarked Directory.................|netrw-gb|
       Listing Bookmarks And History......................|netrw-q|
       Improving Directory Browsing.......................|netrw-listhack| }}}1
-9.  Problems and Fixes...................................|netrw-problems|
-10. Debugging............................................|netrw-debug|
-11. History..............................................|netrw-history|
-12. Credits..............................................|netrw-credits|
+10. Problems and Fixes...................................|netrw-problems|
+11. Debugging............................................|netrw-debug|
+12. History..............................................|netrw-history|
+13. Credits..............................................|netrw-credits|
 
 The Netrw plugin is generally sourced automatically as it is a
 |standard-plugin|.  That said, to make use of netrw, one must
 have plugins available which can be done with the following
 two lines in your <.vimrc>: >
 
-	set nocp		    " 'compatible' is not set
-	filetype plugin on	    " plugins are enabled
+	set nocp                    " 'compatible' is not set
+	filetype plugin on          " plugins are enabled
 <
 You can avoid loading this plugin by setting the "loaded_netrw" variable
 in your <.vimrc> file: >
@@ -79,14 +83,14 @@ in your <.vimrc> file: >
 {Vi does not have any of this}
 
 ==============================================================================
-1. Starting With Netrw						*netrw-start*
+2. Starting With Netrw						*netrw-start*
 
 Netrw makes reading, writing, and browsing over a network connection easy!
 First, make sure that you have plugins enabled, so you'll need to have at
 least the following in your <.vimrc>: (or see |netrw-activate|) >
 
-	set nocp		    " 'compatible' is not set
-	filetype plugin on	    " plugins are enabled
+	set nocp                    " 'compatible' is not set
+	filetype plugin on          " plugins are enabled
 <
 (see |'cp'| and |:filetype-plugin-on|)
 
@@ -111,9 +115,9 @@ and has lines resembling >
 	machine HOSTNAME login USERID password "PASSWORD"
 	machine HOSTNAME login USERID password "PASSWORD"
 	...
-	default		 login USERID password "PASSWORD"
+	default          login USERID password "PASSWORD"
 <
-How about browsing -- ie. you just want to look around before editing a
+Now about browsing -- ie. when you just want to look around before editing a
 file.  For browsing on your current host, just "edit" a directory: >
 
 	vim .
@@ -131,7 +135,7 @@ There's more protocols supported than sc
 section, |netrw-externapp|.
 
 ==============================================================================
-2. Netrw Reference						*netrw-ref*
+3. Netrw Reference						*netrw-ref*
 
 CONTROLLING EXTERNAL APPLICATIONS			*netrw-externapp*
 
@@ -140,8 +144,9 @@ CONTROLLING EXTERNAL APPLICATIONS			*net
 	   dav:    *g:netrw_dav_cmd*  = "cadaver"
 	 fetch:  *g:netrw_fetch_cmd*  = "fetch -o"    if fetch is available
 	   ftp:    *g:netrw_ftp_cmd*  = "ftp"
-	  http:   *g:netrw_http_cmd*  = "fetch -o"    if fetch is available
-	  http:    g:netrw_http_cmd   = "wget -q -O"  If wget  is available
+	  http:   *g:netrw_http_cmd*  = "curl -o"     if      curl  is available
+	  http:    g:netrw_http_cmd   = "wget -q -O"  else if wget  is available
+          http:    g:netrw_http_cmd   = "fetch -o"    else if fetch is available
 	   rcp:    *g:netrw_rcp_cmd*  = "rcp"
 	 rsync:  *g:netrw_rsync_cmd*  = "rsync -a"
 	   scp:    *g:netrw_scp_cmd*  = "scp -q"
@@ -174,10 +179,22 @@ WRITING						*netrw-write* *netrw-nwrite
 	:Nwrite "sftp://[user@]machine/path"		uses sftp
 	http: not supported!
 
+SOURCING					*netrw-source*
+	:Nsource ?					give help
+	:Nsource "dav://machine[:port]/path"		uses cadaver
+	:Nsource "fetch://[user@]machine/path"		uses fetch
+	:Nsource "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
+	:Nsource "http://[user@]machine/path"		uses http  uses wget
+	:Nsource "rcp://[user@]machine/path"		uses rcp
+	:Nsource "rsync://[user@]machine[:port]/path"	uses rsync
+	:Nsource "scp://[user@]machine[[:#]port]/path"	uses scp
+	:Nsource "sftp://[user@]machine/path"		uses sftp
+
 DIRECTORY LISTING					*netrw-dirlist*
 	:Nread [protocol]://[user]@hostname/path/
 
- CHANGING USERID AND PASSWORD				*netrw-chgup*
+						*netrw-login* *netrw-password*
+ CHANGING USERID AND PASSWORD			*netrw-chgup* *netrw-userpass*
 	Attempts to use ftp will prompt you for a user-id and a password.
 	These will be saved in g:netrw_uid and g:netrw_passwd Subsequent uses
 	of ftp will re-use those.  If you need to use a different user id
@@ -189,14 +206,12 @@ DIRECTORY LISTING					*netrw-dirlist*
 	:call NetUserPass("uid","password")	-- sets global uid and password
 
 VARIABLES						*netrw-variables*
+
+(see also: |netrw-browse-var| |netrw-protocol| |netrw-settings| |netrw-var|)
+
  *b:netrw_lastfile*	last file Network-read/written retained on a per-buffer
 			basis		(supports plain :Nw )
 
- *s:netrw_line*		during :Nw/NetWrite, holds current line number
- *s:netrw_col*		during :Nw/NetWrite, holds current column number
-			s:netrw_line and s:netrw_col are used to
-			restore the cursor position on writes
-
  *g:netrw_ftp*		if it doesn't exist, use default ftp
 			=0 use default ftp		       (uid password)
 			=1 use alternate ftp method	  (user uid password)
@@ -204,16 +219,36 @@ VARIABLES						*netrw-variables*
 			value of this variable to see if the alternate ftp
 			method works for your setup.
 
+ *g:netrw_extracmd*	default: doesn't exist
+                        If this variable exists, then any string it contains
+			will be placed into the commands set to your ftp
+			client.  As an example:
+			  ="passive"
+
  *g:netrw_ftpmode*	="binary"				    (default)
 			="ascii"
 
- *g:netrw_ignorenetrc*	=0 (default)
+ *g:netrw_ignorenetrc*	=0 (default for linux, cygwin)
 			=1 If you have a <.netrc> file but it doesn't work and
 			   you want it ignored, then set this variable as shown.
+			   (default for Windows + cmd.exe)
+
+ *g:netrw_menu*		=0 disable netrw's menu
+			=1 (default) netrw's menu enabled
+
+ *g:netrw_nogx*		if this variable exists, then the "gx" map will not
+			be available (see |netrw-gx|)
 
  *g:netrw_uid*		(ftp) user-id,      retained on a per-session basis
  *g:netrw_passwd*	(ftp) password,     retained on a per-session basis
 
+ *g:netrw_shq*		= "'" for Unix/Linux systems (ie. a single quote)
+			= "'" for Windows + cygwin systems (ie. a single quote)
+			= '"' for Windows systems, not using cygwin
+			      (ie. a double quote)
+			Controls the quoting character used during scp and ftp
+			commands.
+
  *g:netrw_win95ftp*	=1 if using Win95, will remove four trailing blank
 			   lines that o/s's ftp "provides" on transfers
 			=0 force normal ftp behavior (no trailing line removal)
@@ -226,7 +261,7 @@ VARIABLES						*netrw-variables*
 			This option is ignored if you're using unix
 
  *g:netrw_use_nt_rcp*	=0 don't use the rcp of WinNT, Win2000 and WinXP
-			=1 use WinNT's rcp in binary mode	  (default)
+			=1 use WinNT's rcp in binary mode         (default)
 
 PATHS								*netrw-path*
 
@@ -245,7 +280,7 @@ file using root-relative paths, use the 
 <
 
 ==============================================================================
-3. Network-Oriented File Transfer				*netrw-xfer*
+4. Network-Oriented File Transfer				*netrw-xfer*
 
 Network-oriented file transfer under Vim is implemented by a VimL-based script
 (<netrw.vim>) using plugin techniques.  It currently supports both reading and
@@ -267,12 +302,16 @@ series of commands (typically ftp) which
 from/written to a temporary file (under Unix/Linux, /tmp/...) which the
 <netrw.vim> script will clean up.
 
-						*netrw-putty* *netrw-pscp*
+				*netrw-putty* *netrw-pscp* *netrw-psftp*
 One may modify any protocol's implementing external application by setting a
 variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
 "scp -q").  As an example, consider using PuTTY: >
-	let g:netrw_scp_cmd= '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
+
+	let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
+	let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
 <
+See |netrw-p8| for more about putty, pscp, psftp, etc.
+
 Ftp, an old protocol, seems to be blessed by numerous implementations.
 Unfortunately, some implementations are noisy (ie., add junk to the end of the
 file).  Thus, concerned users may decide to write a NetReadFixup() function
@@ -303,57 +342,57 @@ additional prompting.
 
 								*netrw-urls*
   +=================================+============================+============+
-  |  Reading			    | Writing			 |  Uses      |
+  |  Reading                        | Writing                    |  Uses      |
   +=================================+============================+============+
-  | DAV:			    |				 |	      |
-  |  dav://host/path		    |				 | cadaver    |
-  |  :Nread dav://host/path	    | :Nwrite dav://host/path	 | cadaver    |
+  | DAV:                            |                            |            |
+  |  dav://host/path                |                            | cadaver    |
+  |  :Nread dav://host/path         | :Nwrite dav://host/path    | cadaver    |
   +---------------------------------+----------------------------+------------+
-  | FETCH:			    |				 |	      |
-  |  fetch://[user@]host/path	    |				 |	      |
-  |  fetch://[user@]host:http/path  |  Not Available		 | fetch      |
-  |  :Nread fetch://[user@]host/path|				 |	      |
+  | FETCH:                          |                            |            |
+  |  fetch://[user@]host/path       |                            |            |
+  |  fetch://[user@]host:http/path  |  Not Available             | fetch      |
+  |  :Nread fetch://[user@]host/path|                            |            |
   +---------------------------------+----------------------------+------------+
-  | FILE:			    |				 |	      |
-  |  file:///*			    | file:///*			 |	      |
-  |  file://localhost/*		    | file://localhost/*	 |	      |
+  | FILE:                           |                            |            |
+  |  file:///*                      | file:///*                  |            |
+  |  file://localhost/*             | file://localhost/*         |            |
   +---------------------------------+----------------------------+------------+
-  | FTP:	  (*3)		    |		   (*3)		 |	      |
-  |  ftp://[user@]host/path	    | ftp://[user@]host/path	 | ftp	(*2)  |
-  |  :Nread ftp://host/path	    | :Nwrite ftp://host/path	 | ftp+.netrc |
-  |  :Nread host path		    | :Nwrite host path		 | ftp+.netrc |
-  |  :Nread host uid pass path	    | :Nwrite host uid pass path | ftp	      |
+  | FTP:          (*3)              |              (*3)          |            |
+  |  ftp://[user@]host/path         | ftp://[user@]host/path     | ftp  (*2)  |
+  |  :Nread ftp://host/path         | :Nwrite ftp://host/path    | ftp+.netrc |
+  |  :Nread host path               | :Nwrite host path          | ftp+.netrc |
+  |  :Nread host uid pass path      | :Nwrite host uid pass path | ftp        |
   +---------------------------------+----------------------------+------------+
-  | HTTP: wget is executable: (*4)  |				 |	      |
-  |  http://[user@]host/path	    |	     Not Available	 | wget       |
+  | HTTP: wget is executable: (*4)  |                            |            |
+  |  http://[user@]host/path        |        Not Available       | wget       |
   +---------------------------------+----------------------------+------------+
-  | HTTP: fetch is executable (*4)  |				 |	      |
-  |  http://[user@]host/path	    |	     Not Available	 | fetch      |
+  | HTTP: fetch is executable (*4)  |                            |            |
+  |  http://[user@]host/path        |        Not Available       | fetch      |
   +---------------------------------+----------------------------+------------+
-  | RCP:			    |				 |	      |
-  |  rcp://[user@]host/path	    | rcp://[user@]host/path	 | rcp	      |
+  | RCP:                            |                            |            |
+  |  rcp://[user@]host/path         | rcp://[user@]host/path     | rcp        |
   +---------------------------------+----------------------------+------------+
-  | RSYNC:			    |				 |	      |
-  |  rsync://[user@]host/path	    | rsync://[user@]host/path	 | rsync      |
-  |  :Nread rsync://host/path	    | :Nwrite rsync://host/path  | rsync      |
-  |  :Nread rcp://host/path	    | :Nwrite rcp://host/path	 | rcp	      |
+  | RSYNC:                          |                            |            |
+  |  rsync://[user@]host/path       | rsync://[user@]host/path   | rsync      |
+  |  :Nread rsync://host/path       | :Nwrite rsync://host/path  | rsync      |
+  |  :Nread rcp://host/path         | :Nwrite rcp://host/path    | rcp        |
   +---------------------------------+----------------------------+------------+
-  | SCP:			    |				 |	      |
-  |  scp://[user@]host/path	    | scp://[user@]host/path	 | scp	      |
-  |  :Nread scp://host/path	    | :Nwrite scp://host/path	 | scp	(*1)  |
+  | SCP:                            |                            |            |
+  |  scp://[user@]host/path         | scp://[user@]host/path     | scp        |
+  |  :Nread scp://host/path         | :Nwrite scp://host/path    | scp  (*1)  |
   +---------------------------------+----------------------------+------------+
-  | SFTP:			    |				 |	      |
-  |  sftp://[user@]host/path	    | sftp://[user@]host/path	 | sftp       |
-  |  :Nread sftp://host/path	    | :Nwrite sftp://host/path	 | sftp  (*1) |
+  | SFTP:                           |                            |            |
+  |  sftp://[user@]host/path        | sftp://[user@]host/path    | sftp       |
+  |  :Nread sftp://host/path        | :Nwrite sftp://host/path   | sftp  (*1) |
   +=================================+============================+============+
 
 	(*1) For an absolute path use scp://machine//path.
 
 	(*2) if <.netrc> is present, it is assumed that it will
 	work with your ftp client.  Otherwise the script will
-	prompt for user-id and pasword.
+	prompt for user-id and password.
 
-	(*3) for ftp, "machine" may be machine#port or machine:port
+        (*3) for ftp, "machine" may be machine#port or machine:port
 	if a different port is needed than the standard ftp port
 
 	(*4) for http:..., if wget is available it will be used.  Otherwise,
@@ -393,7 +432,7 @@ However, |netrw-listhack| can help with 
 
 
 ==============================================================================
-4. Activation						*netrw-activate*
+5. Activation						*netrw-activate*
 
 Network-oriented file transfers are available by default whenever Vim's
 |'nocompatible'| mode is enabled.  The <netrw.vim> file resides in your
@@ -408,7 +447,7 @@ up vim.  I suggest that, at a minimum, y
 <
 
 ==============================================================================
-5. Transparent File Transfer				*netrw-transparent*
+6. Transparent File Transfer				*netrw-transparent*
 
 Transparent file transfers occur whenever a regular file read or write
 (invoked via an |:autocmd| for |BufReadCmd| or |BufWriteCmd| events) is made.
@@ -423,12 +462,16 @@ such as netrw.
 
 
 ==============================================================================
-6. Ex Commands						*netrw-ex*
+7. Ex Commands						*netrw-ex*
 
 The usual read/write commands are supported.  There are also a few
 additional commands available.  Often you won't need to use Nw or
-Nread as shown in |netrw-transparent| (ie. use :e url, :r url, :w url;
-see |netrw-urls|).
+Nread as shown in |netrw-transparent| (ie. simply use >
+  :e url
+  :r url
+  :w url
+instead, as appropriate) -- see |netrw-urls|.  In the explanations
+below, a {netfile} is an url to a remote file.
 
 :[range]Nw	Write the specified lines to the current
 		file as specified in b:netrw_lastfile.
@@ -443,7 +486,14 @@ see |netrw-urls|).
 :Nread {netfile} {netfile}...
 		Read the {netfile} after the current line.
 
-								*netrw-uidpass*
+:Nsource {netfile}
+		Source the {netfile}.
+		To start up vim using a remote .vimrc, one may use
+		the following (all on one line) (tnx to Antoine Mechelynck) >
+		vim -u NORC -N
+		 --cmd "runtime plugin/netrwPlugin.vim"
+		 --cmd "source scp://HOSTNAME/.vimrc"
+<								*netrw-uidpass*
 :call NetUserPass()
 		If b:netrw_uid and b:netrw_passwd don't exist,
 		this function query the user for them.
@@ -458,48 +508,50 @@ see |netrw-urls|).
 		effectively remove the user-id and password by using ""
 		strings.
 
-:NetrwSettings	This command is desribed in |netrw-settings| -- used to
-		display netrw settings and change netrw behavior.
+:NetrwSettings  This command is described in |netrw-settings| -- used to
+                display netrw settings and change netrw behavior.
 
 
 ==============================================================================
-7. Variables and Options			*netrw-options* *netrw-var*
+8. Variables and Options			*netrw-options* *netrw-var*
 
-The script <netrw.vim> uses several variables which can affect <netrw.vim>'s
-behavior.  These variables typically may be set in the user's <.vimrc> file:
-(also see |netrw-settings|) >
+The <netrw.vim> script provides several variables which act as options to
+ffect <netrw.vim>'s behavior.  These variables typically may be set in the
+user's <.vimrc> file:
+(see also: |netrw-settings| |netrw-browse-var| |netrw-protocol|
+|netrw-settings|) >
 
-			-------------
-			Netrw Options
-			-------------
+                        -------------
+                        Netrw Options
+                        -------------
 	Option			Meaning
 	--------------		-----------------------------------------------
 <
-	b:netrw_col		Holds current cursor position (during NetWrite)
-	g:netrw_cygwin		=1 assume scp under windows is from cygwin
-							      (default/windows)
-				=0 assume scp under windows accepts windows
-				   style paths		      (default/else)
-	g:netrw_ftp		=0 use default ftp	      (uid password)
-	g:netrw_ftpmode		="binary"		      (default)
-				="ascii"		      (your choice)
-	g:netrw_ignorenetrc	=1			      (default)
-				   if you have a <.netrc> file but you don't
+        b:netrw_col             Holds current cursor position (during NetWrite)
+        g:netrw_cygwin          =1 assume scp under windows is from cygwin
+                                                              (default/windows)
+                                =0 assume scp under windows accepts windows
+                                   style paths                (default/else)
+        g:netrw_ftp             =0 use default ftp            (uid password)
+        g:netrw_ftpmode         ="binary"                     (default)
+                                ="ascii"                      (your choice)
+	g:netrw_ignorenetrc     =1                            (default)
+	                           if you have a <.netrc> file but you don't
 				   want it used, then set this variable.  Its
 				   mere existence is enough to cause <.netrc>
 				   to be ignored.
-	b:netrw_lastfile	Holds latest method/machine/path.
-	b:netrw_line		Holds current line number     (during NetWrite)
-	g:netrw_passwd		Holds current password for ftp.
-	g:netrw_silent		=0 transfers done normally
-				=1 transfers done silently
-	g:netrw_uid		Holds current user-id for ftp.
-				=1 use alternate ftp	     (user uid password)
-				(see |netrw-options|)
-	g:netrw_use_nt_rcp	=0 don't use WinNT/2K/XP's rcp (default)
-				=1 use WinNT/2K/XP's rcp, binary mode
-	g:netrw_win95ftp	=0 use unix-style ftp even if win95/98/ME/etc
-				=1 use default method to do ftp >
+        b:netrw_lastfile        Holds latest method/machine/path.
+        b:netrw_line            Holds current line number     (during NetWrite)
+        g:netrw_passwd          Holds current password for ftp.
+	g:netrw_silent          =0 transfers done normally
+	                        =1 transfers done silently
+        g:netrw_uid             Holds current user-id for ftp.
+                                =1 use alternate ftp         (user uid password)
+                                (see |netrw-options|)
+        g:netrw_use_nt_rcp      =0 don't use WinNT/2K/XP's rcp (default)
+                                =1 use WinNT/2K/XP's rcp, binary mode
+        g:netrw_win95ftp        =0 use unix-style ftp even if win95/98/ME/etc
+                                =1 use default method to do ftp >
 	-----------------------------------------------------------------------
 <
 The script will also make use of the following variables internally, albeit
@@ -522,25 +574,25 @@ Netrw supports a number of protocols.  T
 variables listed below, and may be modified by the user.
 >
 			   ------------------------
-			   Protocol Control Options
+                           Protocol Control Options
 			   ------------------------
-    Option	      Type	  Setting	  Meaning
-    ---------	      --------	  --------------  ---------------------------
+    Option            Type        Setting         Meaning
+    ---------         --------    --------------  ---------------------------
 <
-    netrw_ftp	      variable	  =doesn't exist  userid set by "user userid"
-				  =0		  userid set by "user userid"
-				  =1		  userid set by "userid"
-    NetReadFixup      function	  =doesn't exist  no change
-				  =exists	  Allows user to have files
-						  read via ftp automatically
-						  transformed however they wish
-						  by NetReadFixup()
+    netrw_ftp         variable    =doesn't exist  userid set by "user userid"
+                                  =0              userid set by "user userid"
+                                  =1              userid set by "userid"
+    NetReadFixup      function    =doesn't exist  no change
+                                  =exists         Allows user to have files
+                                                  read via ftp automatically
+                                                  transformed however they wish
+                                                  by NetReadFixup()
     g:netrw_dav_cmd    variable   ="cadaver"
-    g:netrw_fetch_cmd  variable   ="fetch -o"	  if fetch is available
+    g:netrw_fetch_cmd  variable   ="fetch -o"     if fetch is available
     g:netrw_ftp_cmd    variable   ="ftp"
     g:netrw_http_cmd   variable   ="fetch -o"     if      fetch is available
     g:netrw_http_cmd   variable   ="wget -O"      else if wget  is available
-    g:netrw_list_cmd   variable   ="ssh HOSTNAME ls -Fa"
+    g:netrw_list_cmd   variable   ="ssh USEPORT HOSTNAME ls -Fa"
     g:netrw_rcp_cmd    variable   ="rcp"
     g:netrw_rsync_cmd  variable   ="rsync -a"
     g:netrw_scp_cmd    variable   ="scp -q"
@@ -548,16 +600,19 @@ variables listed below, and may be modif
     -------------------------------------------------------------------------
 <
 								*netrw-ftp*
-The first two options (netrw_ftp and NetReadFixup) both help with certain
-ftp's that give trouble otherwise.  In order to best understand how to use
-these options if ftp is giving you troubles, a bit of discussion follows on
-how netrw does ftp reads.
+
+The g:netrw_..._cmd options (|g:netrw_ftp_cmd| and |g:netrw_sftp_cmd|)
+specify the external program to use handle the ftp protocol.  They may
+include command line options (such as -p for passive mode).
 
-The g:netrw_..._cmd variables specify the external program to use handle the
-associated protocol (rcp, ftp, etc), plus any options.
+Browsing is supported by using the |g:netrw_list_cmd|; the substring
+"HOSTNAME" will be changed via substitution with whatever the current request
+is for a hostname.
 
-The g:netrw_list_cmd's HOSTNAME entry will be changed via substitution with
-whatever the current request is for a hostname.
+Two options (|g:netrw_ftp| and |netrw-fixup|) both help with certain ftp's
+that give trouble .  In order to best understand how to use these options if
+ftp is giving you troubles, a bit of discussion is provided on how netrw does
+ftp reads.
 
 For ftp, netrw typically builds up lines of one of the following formats in a
 temporary file:
@@ -565,18 +620,20 @@ temporary file:
   IF g:netrw_ftp !exists or is not 1     IF g:netrw_ftp exists and is 1
   ----------------------------------     ------------------------------
 <
-       open machine [port]		      open machine [port]
-       user userid password		      userid password
-       [g:netrw_ftpmode]		      password
-       get filename tempfile		      [g:netrw_ftpmode]
-					      get filename tempfile >
+       open machine [port]                    open machine [port]
+       user userid password                   userid password
+       [g:netrw_ftpmode]                      password
+       [g:netrw_extracmd]                     [g:netrw_ftpmode]
+       get filename tempfile                  [g:netrw_extracmd]
+                                              get filename tempfile >
   ---------------------------------------------------------------------
 <
+The |g:netrw_ftpmode| and |g:netrw_extracmd| are optional.
+
 Netrw then executes the lines above by use of a filter:
 >
 	:%! {g:netrw_ftp_cmd} -i [-n]
 <
-
 where
 	g:netrw_ftp_cmd is usually "ftp",
 	-i tells ftp not to be interactive
@@ -611,7 +668,7 @@ messages) you may write a NetReadFixup(t
       elseif a:method == 7 "rsync
       elseif a:method == 8 "fetch
       elseif a:method == 9 "sftp
-      else		 " complain
+      else               " complain
       endif
     endfunction
 >
@@ -625,15 +682,15 @@ itself:
     if has("win95") && g:netrw_win95ftp
      fun! NetReadFixup(method, line1, line2)
        if method == 3   " ftp (no <.netrc>)
-	let fourblanklines= line2 - 3
-	silent fourblanklines.",".line2."g/^\s*/d"
+        let fourblanklines= line2 - 3
+        silent fourblanklines.",".line2."g/^\s*/d"
        endif
      endfunction
     endif
 >
 
 ==============================================================================
-8. Directory Browsing	*netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
+9. Directory Browsing	*netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
 
 MAPS								*netrw-maps*
      <F1>.............Help.......................................|netrw-help|
@@ -641,13 +698,13 @@ MAPS								*netrw-maps*
      <del>............Deleting Files or Directories..............|netrw-delete|
      -................Going Up...................................|netrw--|
      a................Hiding Files or Directories................|netrw-a|
-     b................Bookmarking a Directory....................|netrw-b|
-     B................Changing to a Bookmarked Directory.........|netrw-B|
+     mb...............Bookmarking a Directory....................|netrw-mb|
+     gb...............Changing to a Bookmarked Directory.........|netrw-gb|
      c................Make Browsing Directory The Current Dir....|netrw-c|
      d................Make A New Directory.......................|netrw-d|
      D................Deleting Files or Directories..............|netrw-D|
      <c-h>............Edit File/Directory Hiding List............|netrw-ctrl-h|
-     i................Long Listing...............................|netrw-i|
+     i................Change Listing Style.......................|netrw-i|
      <c-l>............Refreshing the Listing.....................|netrw-ctrl-l|
      o................Browsing with a Horizontal Split...........|netrw-o|
      p................Preview Window.............................|netrw-p|
@@ -656,6 +713,7 @@ MAPS								*netrw-maps*
      R................Renaming Files or Directories..............|netrw-R|
      s................Selecting Sorting Style....................|netrw-s|
      S................Editing the Sorting Sequence...............|netrw-S|
+     t................Browsing with a new tab....................|netrw-t|
      u................Changing to a Predecessor Directory........|netrw-u|
      U................Changing to a Successor Directory..........|netrw-U|
      v................Browsing with a Vertical Split.............|netrw-v|
@@ -666,6 +724,7 @@ MAPS								*netrw-maps*
      :Sexplore[!] [dir] Split & Explore directory ...............|netrw-explore|
      :Hexplore[!] [dir] Horizontal Split & Explore...............|netrw-explore|
      :Vexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
+     :Texplore[!] [dir] Tab & Explore............................|netrw-explore|
      :Pexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
      :Nexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
      :NetrwSettings.............................................|netrw-settings|
@@ -674,7 +733,7 @@ QUICK REFERENCE COMMANDS TABLE				*netrw
 >
         -------	-----------
 	Command	Explanation
-	-------	-----------
+        -------	-----------
 <	<F1>	Causes Netrw to issue help
 	 <cr>	Netrw will enter the directory or read the file |netrw-cr|
 	 <del>	Netrw will attempt to remove the file/directory |netrw-del|
@@ -682,27 +741,25 @@ QUICK REFERENCE COMMANDS TABLE				*netrw
 	   a	Toggles between normal display, |netrw-a|
 		 hiding (suppress display of files matching g:netrw_list_hide)
 		 showing (display only files which match g:netrw_list_hide)
-	   b	bookmark current directory; use Nb if compact listing
-		 in use |netrw-b|
-	   B	go to previous bookmarked directory; use Nb if compact
-		 listing is in use |netrw-B|
+	   mb	bookmark current directory
+	   gb	go to previous bookmarked directory
 	   c	Make current browsing directory the current directory |netrw-c|
 	   d	Make a directory |netrw-d|
 	   D	Netrw will attempt to remove the file(s)/directory(ies) |netrw-D|
 	 <c-h>	Edit file hiding list |netrw-ctrl-h|
-	   i	Toggles between long and short listing |netrw-i|
+	   i	Cycle between thin, long, wide, and tree listings|netrw-i|
 	 <c-l>	Causes Netrw to refresh the directory listing |netrw-ctrl-l|
-	  Nb	Same as b, but always available |netrw-Nb|
-	  NB	Same as B, but always available |netrw-NB|
 	   o	Enter the file/directory under the cursor in a new browser
 		 window.  A horizontal split is used. |netrw-o|
 	   O	Obtain a file specified by cursor |netrw-O|
 	   p	Preview the file |netrw-p|
 	   P	Browse in the previously used window |netrw-P|
+	   q	List bookmarked directories and history |netrw-q|
 	   r	Reverse sorting order |netrw-r|
 	   R	Rename the designed file(s)/directory(ies) |netrw-R|
 	   s	Select sorting style: by name, time, or file size |netrw-s|
 	   S	Specify suffix priority for name-sorting |netrw-S|
+	   t	Enter the file/directory under the cursor in a new tab|netrw-t|
 	   u	Change to recently-visited directory |netrw-u|
 	   U	Change to subsequently-visited directory |netrw-U|
 	   v	Enter the file/directory under the cursor in a new browser
@@ -716,16 +773,17 @@ NETRW BROWSER VARIABLES					*netrw-brows
    ---				-----------
 < *g:netrw_alto*		change from above splitting to below splitting
 				by setting this variable (see |netrw-o|)
-				 default: =0
+				 default: =&sb           (see |'sb'|)
 
   *g:netrw_altv*		change from left splitting to right splitting
 				by setting this variable (see |netrw-v|)
-				 default: =0
+				 default: =&spr          (see |'spr'|)
 
   *g:netrw_browse_split*	when browsing, <cr> will open the file by:
 				=0: re-using the same window
-				=1: horizontally splitting the window first
-				=2: vertically   splitting the window first
+				=1: horizontally splitting the window first  
+				=2: vertically   splitting the window first  
+				=3: open file in new tab
 
   *g:netrw_browsex_viewer*	specify user's preference for a viewer: >
 					"kfmclient exec"
@@ -772,9 +830,22 @@ NETRW BROWSER VARIABLES					*netrw-brows
   *g:netrw_ftp_list_cmd*	options for passing along to ftp for directory
 				listing.  Defaults:
 				 unix or g:netrw_cygwin set: : "ls -lF"
-				 otherwise		       "dir"
+				 otherwise                     "dir"
+
 
-  *g:netrw_hide*			if true, the hiding list is used
+  *g:netrw_ftp_sizelist_cmd*	options for passing along to ftp for directory
+				listing, sorted by size of file.
+				Defaults:
+				 unix or g:netrw_cygwin set: : "ls -slF"
+				 otherwise                     "dir"
+
+  *g:netrw_ftp_timelist_cmd*	options for passing along to ftp for directory
+				listing, sorted by time of last modification.
+				Defaults:
+				 unix or g:netrw_cygwin set: : "ls -tlF"
+				 otherwise                     "dir"
+
+  *g:netrw_hide*		if true, the hiding list is used
 				 default: =0
 
   *g:netrw_keepdir*		=1 (default) keep current directory immune from
@@ -786,10 +857,14 @@ NETRW BROWSER VARIABLES					*netrw-brows
 
   *g:netrw_list_cmd*		command for listing remote directories
 				 default: (if ssh is executable)
-					  "ssh HOSTNAME ls -FLa"
+				          "ssh HOSTNAME ls -FLa"
 
-  *g:netrw_longlist*		if =1, then long listing will be default
-
+  *g:netrw_liststyle*		Set the default listing style:
+                                = 0: thin listing (one file per line)
+                                = 1: long listing (one file per line with time
+				     stamp information and file size)
+				= 2: wide listing (multiple files in columns)
+				= 3: tree style listing
   *g:netrw_list_hide*		comma separated pattern list for hiding files
 				 default: ""
 
@@ -807,16 +882,16 @@ NETRW BROWSER VARIABLES					*netrw-brows
 				columnar.
 
   *g:netrw_mkdir_cmd*		command for making a remote directory
-				 default: "ssh HOSTNAME mkdir"
+				 default: "ssh USEPORT HOSTNAME mkdir"
 
   *g:netrw_rm_cmd*		command for removing files
-				 default: "ssh HOSTNAME rm"
+				 default: "ssh USEPORT HOSTNAME rm"
 
   *g:netrw_rmdir_cmd*		command for removing directories
-				 default: "ssh HOSTNAME rmdir"
+				 default: "ssh USEPORT HOSTNAME rmdir"
 
   *g:netrw_rmf_cmd*		 command for removing softlinks
-				 default: "ssh HOSTNAME rm -f"
+				 default: "ssh USEPORT HOSTNAME rm -f"
 
   *g:netrw_sort_by*		sort by "name", "time", or "size"
 				 default: "name"
@@ -827,7 +902,7 @@ NETRW BROWSER VARIABLES					*netrw-brows
   *g:netrw_sort_sequence*	when sorting by name, first sort by the
 				comma-separated pattern sequence
 				 default: '[\/]$,*,\.bak$,\.o$,\.h$,
-					   \.info$,\.swp$,\.obj$'
+				           \.info$,\.swp$,\.obj$'
 
   *g:netrw_ssh_cmd*		One may specify an executable command
 				to use instead of ssh for remote actions
@@ -841,6 +916,14 @@ NETRW BROWSER VARIABLES					*netrw-brows
 				messages.  By default its value is:
 					 '^total\s\+\d\+$'
 
+  *g:netrw_use_noswf*		netrw normally avoids writing swapfiles
+  				for browser buffers.  However, under some
+				systems this apparently is causing nasty
+				ml_get errors to appear; if you're getting
+				ml_get errors, try putting
+				  let g:netrw_use_noswf= 0
+				in your .vimrc.
+
   *g:netrw_timefmt*		specify format string to strftime() (%c)
 				 default: "%c"
 
@@ -888,33 +971,36 @@ If either of these options are present w
 will change them by using noacd and removing the ta suboptions from the
 |'formatoptions'|.
 
-				*netrw-explore*  *netrw-pexplore*
-				*netrw-hexplore* *netrw-sexplore*
-DIRECTORY EXPLORING COMMANDS	*netrw-nexplore* *netrw-vexplore*
+			*netrw-explore*  *netrw-pexplore* *netrw-texplore*
+			*netrw-hexplore* *netrw-sexplore* *netrw-nexplore*
+			*netrw-vexplore*
+DIRECTORY EXPLORING COMMANDS 
 
      :Explore[!]   [dir]... Explore directory of current file       *:Explore*
      :Sexplore[!]  [dir]... Split&Explore directory of current file *:Sexplore*
-     :Hexplore[!]  [dir]... Horizontal Split & Explore		    *:Hexplore*
-     :Vexplore[!]  [dir]... Vertical   Split & Explore		    *:Vexplore*
+     :Hexplore[!]  [dir]... Horizontal Split & Explore              *:Hexplore*
+     :Vexplore[!]  [dir]... Vertical   Split & Explore              *:Vexplore*
+     :Texplore     [dir]... Tab              & Explore              *:Texplore*
 
-     Used with :Explore **/pattern :
-     :Nexplore............. go to next matching file		    *:Nexplore*
-     :Pexplore............. go to previous matching file	    *:Pexplore*
+     Used with :Explore **/pattern : (also see |netrw-starstar|)
+     :Nexplore............. go to next matching file                *:Nexplore*
+     :Pexplore............. go to previous matching file            *:Pexplore*
 
 :Explore  will open the local-directory browser on the current file's
-	  directory (or on directory [dir] if specified).  The window will be
+          directory (or on directory [dir] if specified).  The window will be
 	  split only if the file has been modified, otherwise the browsing
 	  window will take over that window.  Normally the splitting is taken
 	  horizontally.
 :Explore! is like :Explore, but will use vertical splitting.
 :Sexplore will always split the window before invoking the local-directory
-	  browser.  As with Explore, the splitting is normally done
+          browser.  As with Explore, the splitting is normally done
 	  horizontally.
 :Sexplore! [dir] is like :Sexplore, but the splitting will be done vertically.
 :Hexplore  [dir] does an :Explore with |:belowright| horizontal splitting.
 :Hexplore! [dir] does an :Explore with |:aboveleft|  horizontal splitting.
 :Vexplore  [dir] does an :Explore with |:leftabove|  vertical splitting.
 :Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
+:Texplore  [dir] does a tabnew before generating the browser window
 
 By default, these commands use the current file's directory.  However, one
 may explicitly provide a directory (path) to use.
@@ -976,7 +1062,7 @@ however, Explore will also search subdir
 directory.
 
 
-REFRESHING THE LISTING					*netrw-ctrl-l*
+REFRESHING THE LISTING				*netrw-ctrl-l* *netrw-ctrl_l*
 
 To refresh either a local or remote directory listing, press ctrl-l (<c-l>) or
 hit the <cr> when atop the ./ directory entry in the listing.  One may also
@@ -1005,18 +1091,19 @@ BROWSING							*netrw-cr*
 Browsing is simple: move the cursor onto a file or directory of interest.
 Hitting the <cr> (the return key) will select the file or directory.
 Directories will themselves be listed, and files will be opened using the
-protocol given in the original read request.
+protocol given in the original read request.  
 
-  CAVEAT: There are three forms of listing (see |netrw-i|).  Netrw assumes
+  CAVEAT: There are four forms of listing (see |netrw-i|).  Netrw assumes
   that two or more spaces delimit filenames and directory names for the long
   and wide listing formats.  Thus, if your filename or directory name has two
   or more spaces embedded in it, or any trailing spaces, then you'll need to
   use the "thin" format to select it.
 
 The |g:netrw_browse_split| option, which is zero by default, may be used to
-cause the opening of files to be done in a new window.  The splitting will
-be done horizontally if the option is one and vertically if the option is
-two.
+cause the opening of files to be done in a new window or tab.  When the option
+is one or two, the splitting will be taken horizontally or vertically,
+respectively.  When the option is set to three, a <cr> will cause the file
+to appear in a new tab.
 
 
 OBTAINING A FILE						*netrw-O*
@@ -1041,9 +1128,9 @@ Related topics:
    directory, see |g:netrw_keepdir|.
 
 
-THIN, LONG, AND WIDE LISTINGS					*netrw-i*
+CHANGE LISTING STYLE						*netrw-i*
 
-The "i" map cycles between the thin, long, and wide listing formats.
+The "i" map cycles between the thin, long, wide, and tree listing formats.
 
 The short listing format gives just the files' and directories' names.
 
@@ -1053,14 +1140,17 @@ date of last modification for local dire
 format, netrw is not able to recognize filenames which have trailing spaces.
 Use the thin listing format for such files.
 
-The wide listing format has a multi-column display of the various files in the
-netrw current directory, rather like the Unix "ls" presents.  In this mode the
-"b" and "B" maps are not available; instead, use Nb (|netrw-Nb|) and NB
-(|netrw-NB|).  The wide listing format uses two or more contiguous spaces to
-delineate filenames; when using that format, netrw won't be able to recognize
-or use filenames which have two or more contiguous spaces embedded in the name
-or any trailing spaces.  The thin listing format will, however, work with such
-files.
+The wide listing format uses two or more contiguous spaces to delineate
+filenames; when using that format, netrw won't be able to recognize or use
+filenames which have two or more contiguous spaces embedded in the name or any
+trailing spaces.  The thin listing format will, however, work with such files.
+This listing format is the most compact.
+
+The tree listing format has a top directory followed by files and directories
+preceded by a "|".  One may open and close directories by pressing the <cr>
+key while atop the directory name.  There is only one tree listing buffer;
+hence, using "v" or "o" on a subdirectory will only show the same buffer,
+twice.
 
 
 MAKING A NEW DIRECTORY						*netrw-d*
@@ -1116,21 +1206,30 @@ One may rename a block of files and dire
 the V (|linewise-visual|).
 
 
-HIDING FILES OR DIRECTORIES				*netrw-a*
+HIDING FILES OR DIRECTORIES			*netrw-a* *netrw-hiding*
 
 Netrw's browsing facility allows one to use the hiding list in one of three
 ways: ignore it, hide files which match, and show only those files which
 match.  The "a" map allows the user to cycle about these three ways.
 
 The g:netrw_list_hide variable holds a comma delimited list of patterns (ex.
-\.obj) which specify the hiding list. (also see |netrw-ctrl-h|)  To set the hiding
-list, use the <c-h> map.  As an example, to hide files which begin with a ".",
-one may use the <c-h> map to set the hiding list to '^\..*' (or one may put
-let g:netrw_list_hide= '^\..*' in one's <.vimrc>).  One may then use the "a"
-key to show all files, hide matching files, or to show only the matching
+\.obj) which specify the hiding list. (also see |netrw-ctrl-h|)  To set the
+hiding list, use the <c-h> map.  As an example, to hide files which begin with
+a ".", one may use the <c-h> map to set the hiding list to '^\..*' (or one may
+put let g:netrw_list_hide= '^\..*' in one's <.vimrc>).  One may then use the
+"a" key to show all files, hide matching files, or to show only the matching
 files.
 
+	Example: ^.*\.[ch]
+		This hiding list command will hide/show all *.c and *.h files.
 
+	Example: ^.*\.c,^.*\.h
+		This hiding list command will also hide/show all *.c and *.h
+		files.
+
+Don't forget to use the "a" map to select the normal/hiding/show mode you want!
+
+						*netrw-ctrl_h*
 EDIT FILE OR DIRECTORY HIDING LIST		*netrw-ctrl-h* *netrw-edithide*
 
 The "<ctrl-h>" map brings up a requestor allowing the user to change the
@@ -1152,13 +1251,41 @@ new window and cursor at the bottom, hav
 
 	let g:netrw_alto = 1
 
-in your <.vimrc>.
+in your <.vimrc>.  (also see |netrw-t| |netrw-v| |g:netrw_alto|)
+
+There is only one tree listing buffer; using "o" on a displayed subdirectory 
+will split the screen, but the same buffer will be shown twice.
+
+
+BROWSING WITH A VERTICALLY SPLIT WINDOW				*netrw-v*
+
+Normally one enters a file or directory using the <cr>.  However, the "v" map
+allows one to open a new window to hold the new directory listing or file.  A
+vertical split is used.  (for horizontal splitting, see |netrw-o|)
+
+Normally, the v key splits the window vertically with the new window and
+cursor at the left.  To change to splitting the window vertically with the new
+window and cursor at the right, have
+
+	let g:netrw_altv = 1
+
+in your <.vimrc>.  (also see: |netrw-o| |netrw-t| |g:netrw_altv|)
+
+There is only one tree listing buffer; using "v" on a displayed subdirectory 
+will split the screen, but the same buffer will be shown twice.
+
+
+BROWSING WITH A NEW TAB					*netrw-t*
+
+Normally one enters a file or directory using the <cr>.  The "t" map
+allows one to open a new window hold the new directory listing or file in a
+new tab. (also see: |netrw-o| |netrw-v|)
 
 
 PREVIEW WINDOW					*netrw-p* *netrw-preview*
 
-One may use a preview window (currently only for local browsing) by using the
-"p" key when the cursor is atop the desired filename to be previewed.
+One may use a preview window by using the "p" key when the cursor is atop the
+desired filename to be previewed.
 
 
 PREVIOUS WINDOW					*netrw-P* *netrw-prvwin*
@@ -1218,23 +1345,9 @@ With the "U" map, one can change to a la
 This map is the opposite of the "u" map. (see |netrw-u|)  Use the
 q map to list both the bookmarks and history. (see |netrw-q|)
 
-
-BROWSING WITH A VERTICALLY SPLIT WINDOW				*netrw-v*
-
-Normally one enters a file or directory using the <cr>.  However, the "v" map
-allows one to open a new window to hold the new directory listing or file.  A
-vertical split is used.  (for horizontal splitting, see |netrw-o|)
-
-Normally, the v key splits the window vertically with the new window and
-cursor at the left.  To change to splitting the window vertically with the new
-window and cursor at the right, have
-
-	let g:netrw_altv = 1
-
-in your <.vimrc>.
-
-
-CUSTOMIZING BROWSING WITH A USER FUNCTION	*netrw-x* *netrw-handler* *gx*
+						*netrw-gx*
+CUSTOMIZING BROWSING WITH A USER FUNCTION	*netrw-x* *netrw-handler*
+						(also see |netrw_filehandler|)
 
 Certain files, such as html, gif, jpeg, (word/office) doc, etc, files, are
 best seen with a special handler (ie. a tool provided with your computer).
@@ -1242,7 +1355,8 @@ Netrw allows one to invoke such special 
 
 	* when Exploring, hit the "x" key
 	* when editing, hit gx with the cursor atop the special filename
-<
+<	  (not available if the |g:netrw_nogx| variable exists)
+
 Netrw determines which special handler by the following method:
 
   * if |g:netrw_browsex_viewer| exists, then it will be used to attempt to
@@ -1255,7 +1369,7 @@ Netrw determines which special handler b
     If g:netrw_browsex_viewer == '-', then netrwFileHandler() will be
     invoked first (see |netrw_filehandler|).
 
-  * for Windows 32 or 64, the url and FileProtocolHandler dlls are used.
+  * for Windows 32 or 64, the url and FileProtocolHandler dlls are used.  
   * for Gnome (with gnome-open): gnome-open is used.
   * for KDE (with kfmclient): kfmclient is used.
   * otherwise the netrwFileHandler plugin is used.
@@ -1266,68 +1380,81 @@ OpenOffice (*.sfx), visualization (*.jpg
 *.eps) can be handled.
 
 							*netrw_filehandler*
-The netrwFileHandler applies a user-defined function to a file, based on its
-extension.  Of course, the handler function must exist for it to be called!
+
+The "x" map applies a function to a file, based on its extension.  Of course,
+the handler function must exist for it to be called!
 >
  Ex. mypgm.html   x ->
-		  netrwFileHandler_html("scp://user@host/some/path/mypgm.html")
+                  NFH_html("scp://user@host/some/path/mypgm.html")
 <
-See the <plugin/netrwFileHandlers.vim> for an example of how to handle an html
-file with mozilla.
+Users may write their own netrw File Handler functions to support more
+suffixes with special handling.  See <plugin/netrwFileHandlers.vim> for
+examples on how to make file handler functions.   As an example: >
 
-One may write custom netrwFileHandlers; please look at the >
+	" NFH_suffix(filename)
+	fun! NFH_suffix(filename)
+	..do something special with filename..
+	endfun
+<
+These functions need to be defined in some file in your .vim/plugin
+(vimfiles\plugin) directory.  Vim's function names may not have punctuation
+characters (except for the underscore) in them.  To support suffices that
+contain such characters, netrw will first convert the suffix using the
+following table: >
 
-	plugin/netrwFileHandlers.vim
+    @ -> AT       ! -> EXCLAMATION    % -> PERCENT  
+    : -> COLON    = -> EQUAL          ? -> QUESTION 
+    , -> COMMA    - -> MINUS          ; -> SEMICOLON
+    $ -> DOLLAR   + -> PLUS           ~ -> TILDE    
+<    
+So, for example: >
 
-script for examples.  If its likely to be generally useful, please feel free
-to forward a copy to me for future inclusion in the distribution.
+	file.rcs,v  ->  NFH_rcsCOMMAv()
+<
+If more such translations are necessary, please send me email: >
+		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
+with a request.
 
 
 MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* *netrw-curdir*
 
 By default, |g:netrw_keepdir| is 1.  This setting means that the current
-directory will not track the browsing directory.  However, setting
-g:netrw_keepdir to 0 (say, in your <.vimrc>) will tell netrw to make the
-currently browsed directory also be the current directory.
+directory will not track the browsing directory.
 
-However, with the default setting for g:netrw_keepdir of 1 where netrw
+Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
+track netrw's browsing directory.
+
+However, given the default setting for g:netrw_keepdir of 1 where netrw
 maintains its own separate notion of the current directory, in order to make
 the two directories the same, use the "c" map (just type c).  That map will
-set Vim's notion of the current directory to the netrw's current browsing
+set Vim's notion of the current directory to netrw's current browsing
 directory.
 
 
-BOOKMARKING A DIRECTORY		*netrw-b* *netrw-bookmark* *netrw-bookmarks*
-							*netrw-Nb*
+BOOKMARKING A DIRECTORY		*netrw-mb* *netrw-bookmark* *netrw-bookmarks*
 One may easily "bookmark" a directory by using >
 
-	{cnt}b
+	{cnt}mb
 <
 Any count may be used.  One may use viminfo's "!" option to retain bookmarks
-between vim sessions.  See |netrw-B| for how to return to a bookmark and
+between vim sessions.  See |netrw-gb| for how to return to a bookmark and
 |netrw-q| for how to list them.
 
-When wide listing is in use (see |netrw-i|), then the b map is not available;
-instead, use {cnt}Nb.
 
-
-CHANGING TO A BOOKMARKED DIRECTORY			*netrw-NB* *netrw-B*
+CHANGING TO A BOOKMARKED DIRECTORY			*netrw-gb* 
 
 To change directory back to a bookmarked directory, use
 
-	{cnt}B
+	{cnt}gb
 
-Any count may be used to reference any of the bookmarks.  See |netrw-b| on
+Any count may be used to reference any of the bookmarks.  See |netrw-mb| on
 how to bookmark a directory and |netrw-q| on how to list bookmarks.
 
-When wide listing is in use (see |netrw-i|), then the B map is not available;
-instead, use {cnt}NB.
-
 
 LISTING BOOKMARKS AND HISTORY			*netrw-q* *netrw-listbookmark*
 
 Pressing "q" will list the bookmarked directories and directory traversal
-history (query). (see |netrw-b|, |netrw-B|, |netrw-u|, and |netrw-U|)
+history (query). (see |netrw-mb|, |netrw-gb|, |netrw-u|, and |netrw-U|)
 
 
 IMPROVING DIRECTORY BROWSING				*netrw-listhack*
@@ -1335,15 +1462,29 @@ IMPROVING DIRECTORY BROWSING				*netrw-l
 Especially with the remote directory browser, constantly entering the password
 is tedious.
 
-For Linux/Unix systems, I suggest looking into
-
-	http://hacks.oreilly.com/pub/h/66
+For Linux/Unix systems, the book "Linux Server Hacks - 100 industrial strength
+tips & tools" by Rob Flickenger (O'Reilly, ISBN 0-596-00461-3), gives a tip
+for setting up no-password ssh and scp, plus discusses associated security
+issues.  It used to be available at http://hacks.oreilly.com/pub/h/66 ,
+but apparently that address is now being redirected to some "hackzine".
+I'll attempt a summary:
 
-It gives a tip for setting up password-less use of ssh and scp, and discusses
-the associated security issues.
+	1. Generate a public/private key pair on the ssh server:
+	   ssh-keygen -t rsa
+	   (saving the file in ~/.ssh/id_rsa is ok)
+	2. Just hit the <CR> when asked for passphrase (twice).
+	3. This creates two files:
+	     ~/.ssh/id_rsa
+	     ~/.ssh/id_rsa.pub
+	4. On the client:
+	    cd
+	    mkdir .ssh
+	    chmod 0700 .ssh
+	    scp {serverhostname}:.ssh/id_rsa.pub .
+	    cat id_rsa.pub >> .ssh/authorized_keys2
 
-For Windows, the vim mailing list has mentioned that Pageant helps with
-avoiding the constant need to enter the password.
+For Windows, folks on the vim mailing list have mentioned that Pageant helps
+with avoiding the constant need to enter the password.
 
 
 NETRW SETTINGS						*netrw-settings*
@@ -1355,9 +1496,11 @@ settings.  You may change any of their v
 settings therein will be used.  One may also press "?" on any of the lines for
 help on what each of the variables do.
 
+(see also: |netrw-browse-var| |netrw-protocol| |netrw-var| |netrw-variables|)
+
 
 ==============================================================================
-9. Problems and Fixes						*netrw-problems*
+10. Problems and Fixes						*netrw-problems*
 
 	(This section is likely to grow as I get feedback)
 	(also see |netrw-debug|)
@@ -1371,22 +1514,31 @@ 9. Problems and Fixes						*netrw-proble
 			let g:netrw_win95ftp= 1
 
 								*netrw-p2*
-	P2. I use windows, and my network browsing with ftp doesn't sort by
-	    time or size
+	P2. I use Windows, and my network browsing with ftp doesn't sort by
+	    time or size!  -or-  The remote system is a Windows server; why
+	    don't I get sorts by time or size?
 
 		Windows' ftp has a minimal support for ls (ie. it doesn't
 		accept sorting options).  It doesn't support the -F which
 		gives an explanatory character (ABC/ for "ABC is a directory").
-		Netrw uses dir to get its short and long listings.  If you
-		think your ftp does support a full-up ls, put the following
-		into your <.vimrc>:
+		Netrw then uses "dir" to get both its short and long listings.
+		If you think your ftp does support a full-up ls, put the
+		following into your <.vimrc>: >
 
-			let g:netrw_ftp_list_cmd= "ls -lF"
-
+			let g:netrw_ftp_list_cmd    = "ls -lF"
+			let g:netrw_ftp_timelist_cmd= "ls -tlF"
+			let g:netrw_ftp_sizelist_cmd= "ls -slF"
+<
 		Alternatively, if you have cygwin on your Windows box, put
-		into your <.vimrc>:
+		into your <.vimrc>: >
 
 			let g:netrw_cygwin= 1
+<
+		This problem also occurs when the remote system is Windows.
+		In this situation, the various g:netrw_ftp_[time|size]list_cmds
+		are as shown above, but the remote system will not correctly
+		modify its listing behavior.
+
 
 								*netrw-p3*
 	P3. I tried rcp://user@host/ (or protocol other than ftp) and netrw
@@ -1400,7 +1552,7 @@ 9. Problems and Fixes						*netrw-proble
 								*netrw-p4*
 	P4. I would like long listings to be the default.
 
-			let g:netrw_longlist=1
+			let g:netrw_liststyle= 1
 
 		Check out |netrw-browse-var| for more customizations that
 		you can set.
@@ -1419,10 +1571,110 @@ 9. Problems and Fixes						*netrw-proble
 	    How do I do that?
 
 		let g:netrw_keepdir= 0
+	
+								*netrw-p7*
+	P7. I use Chinese (or other non-ascii) characters in my filenames, and
+	    netrw (Explore, Sexplore, Hexplore, etc) doesn't display them!
 
+		(taken from an answer provided by Wu Yongwei on the vim
+		mailing list)
+		I now see the problem. You code page is not 936, right? Vim
+		seems only able to open files with names that are valid in the
+		current code page, as are many other applications that do not
+		use the Unicode version of Windows APIs. This is an OS-related
+		issue. You should not have such problems when the system
+		locale uses UTF-8, such as modern Linux distros.
+
+		(...it is one more reason to recommend that people use utf-8!)
+
+								*netrw-p8*
+	P8. I'm getting "ssh is not executable on your system" -- what do I
+	    do?
+
+		(Dudley Fox) Most people I know use putty for windows ssh.  It
+		is a free ssh/telnet application. You can read more about it
+		here:
+
+		http://www.chiark.greenend.org.uk/~sgtatham/putty/ Also:
+
+		(Marlin Unruh) This program also works for me. It's a single
+		executable, so he/she can copy it into the Windows\System32
+		folder and create a shortcut to it. 
+
+		(Dudley Fox) You might also wish to consider plink, as it
+		sounds most similar to what you are looking for. plink is an
+		application in the putty suite.
+
+           http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html#plink
+
+	   	(Vissale Neang) Maybe you can try OpenSSH for windows, which
+		can be obtained from:
+
+		http://sshwindows.sourceforge.net/
+
+		It doesn't need the full Cygwin package. 
+
+		(Antoine Mechelynck) For individual Unix-like programs needed
+		for work in a native-Windows environment, I recommend getting
+		them from the GnuWin32 project on sourceforge if it has them:
+
+		    http://gnuwin32.sourceforge.net/
+
+		Unlike Cygwin, which sets up a Unix-like virtual machine on
+		top of Windows, GnuWin32 is a rewrite of Unix utilities with
+		Windows system calls, and its programs works quite well in the
+		cmd.exe "Dos box". 
+
+		(dave) Download WinSCP and use that to connect to the server.
+		In Preferences > Editors, set gvim as your editor:
+
+			- Click "Add..."
+			- Set External Editor (adjust path as needed, include
+			  the quotes and !.! at the end):
+			    "c:\Program Files\Vim\vim70\gvim.exe" !.!
+			- Check that the filetype in the box below is
+			  {asterisk}.{asterisk} (all files), or whatever types
+			  you want (cec: change {asterisk} to * ; I had to
+			  write it that way because otherwise the helptags
+			  system thinks its a tag)
+			- Make sure its at the top of the listbox (click it,
+			  then click "Up" if its not)
+		If using the Norton Commander style, you just have to hit <F4>
+		to edit a file in a local copy of gvim.
+
+		(Vit Gottwald) How to generate public/private key and save
+		public key it on server: >
+  http://www.tartarus.org/~simon/puttydoc/Chapter8.html#pubkey-gettingready
+			8.3 Getting ready for public key authentication
+<
+		How to use private key with 'pscp': >
+			http://www.tartarus.org/~simon/puttydoc/Chapter5.html
+			5.2.4 Using public key authentication with PSCP 
+<
+		(cec) To make proper use of these suggestions above, you will
+		need to modify the following user-settable variables in your
+		.vimrc:
+
+			|g:netrw_ssh_cmd| |g:netrw_list_cmd|  |g:netrw_mkdir_cmd|
+			|g:netrw_rm_cmd|  |g:netrw_rmdir_cmd| |g:netrw_rmf_cmd|
+
+		The first one (|g:netrw_ssh_cmd|) is the most important; most
+		of the others will use the string in g:netrw_ssh_cmd by
+		default.
+						*netrw-p9* *netrw-ml_get*
+	P9. I'm browsing, changing directory, and bang!  ml_get errors
+	    appear and I have to kill vim.  Any way around this?
+
+		Normally netrw attempts to avoid writing swapfiles for
+		its temporary directory buffers.  However, on some systems
+		this attempt appears to be causing ml_get errors to
+		appear.  Please try setting |g:netrw_use_noswf| to 0
+		in your <.vimrc>: >
+			let g:netrw_use_noswf= 0
+<
 
 ==============================================================================
-10. Debugging						*netrw-debug*
+11. Debugging						*netrw-debug*
 
 The <netrw.vim> script is typically available as:
 >
@@ -1463,21 +1715,144 @@ which is loaded automatically at startup
 	   This command, provided by <Decho.vim>, will comment out all
 	   Decho-debugging statements (Dfunc(), Dret(), Decho(), Dredir()).
 
-	4. Then bring up vim and attempt a transfer.  A set of messages
-	   should appear concerning the steps that <netrw.vim> took in
-	   attempting to read/write your file over the network.  Please
-	   send that information to <netrw.vim>'s maintainer,
+	4. Then bring up vim and attempt a transfer or do browsing.  A set of
+	   messages should appear concerning the steps that <netrw.vim> took
+	   in attempting to read/write your file over the network.
 
+	   To save the file, use >
+		:wincmd j
+		:set bt=
+		:w! DBG
+<	   Please send that information to <netrw.vim>'s maintainer, >
 		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
-
+<
 ==============================================================================
-11. History						*netrw-history* {{{1
+12. History						*netrw-history* {{{1
 
-	v98: May 02, 2006 * the "p" key didn't work properly when the browsing
-			    directory name had spaces in it.
-	v97: May 01, 2006 * exists("&acd") now used to determine if
-			    the 'acd' option exists
-			  * "obtain" now works again under Windows
+	v108: Jan 03, 2007 * included preview map (|netrw-p|), supporting
+			     remote browsing
+			   * netrw can now source remote files
+	      Jan 26, 2007 * Colton Jamieson noted that remote directory
+			     browsing did not support alternate port
+			     selection.  This feature has now been extended
+			     to apply to all remote browsing commands via ssh.
+			     (list, remove/delete, rename)
+	      Jan 31, 2007 * Luis Florit reported that @* was an invalid
+			     register.	The @* register is now only saved and
+			     restored if 'guioptions' contains "a".
+	      Feb 02, 2007 * Fixed a bug that cropped up when writing files
+			     via scp using cygwin
+	      Feb 08, 2007 * tree listing mode managed to stop working again;
+			     fixed again!
+	      Feb 15, 2007 * Guido Van Hoecke reported that netrw didn't
+			     handle browsing well with M$ ftp servers.	He even
+			     set up a temporary account for me to test with
+			     (thanks!).  Netrw now can browse M$ ftp servers.
+	v107: Oct 12, 2006 * bypassed the autowrite option
+	      Oct 24, 2006 * handles automatic decompression of *.gz and *.bz2
+			     files
+	      Nov 03, 2006 * Explore will highlight matching files when
+			     **/pattern is used (and if the |'hls'| option
+			     is set)
+	      Nov 09, 2006 * a debugging line, when enabled, was inadvertently
+			     bringing up help instead of simply reporting on
+			     list contents
+	      Nov 21, 2006 * tree listing improved (cursor remains put)
+	      Nov 27, 2006 * fixed b:netrw_curdir bug when repeated "i"s were
+			     pressed.
+	      Dec 15, 2006 * considerable qty of changes, mostly to share more
+			     code between local and remote browsing.  Includes
+			     support for tree-style listing for both remote
+			     and local browsing.
+	      Dec 15, 2006 * Included Peter Bengtsson's modifications to
+			     support the Amiga.
+	v106: Sep 21, 2006 * removed old v:version<700 code as netrw now
+			     requires vim 7.0
+			   * worked around a bug where register * was
+			     overwritten during local browsing
+	v104: Sep 05, 2006 * as suggested by Rodolfo Borges, :Explore and
+			     variants will position the cursor on the file
+			     just having been edited
+			   * changed default |g:netrw_sort_sequence| order
+			   * changed b, Nb to simply mb  (see |netrw-mb|)
+			   * changed B, NB to simply gb  (see |netrw-gb|)
+			   * tree listing style (see |g:netrw_liststyle|)
+			   * attempts to retain the alternate file
+	v103: Jul 26, 2006 * used Yakov Lerner's tip#1289 to improve netrw
+			     error message display
+			   * wide listings didn't handle files with backslashes
+			     in their names properly.  A symptom was an
+			     inability to open files.
+	      Aug 09, 2006 * included "t" mapping for opening tabbed windows,
+			    both for remote and local browsing
+			   * changed netrw_longlist to netrw_liststyle
+	      Aug 15, 2006 * fixed one of the NB maps
+	      Aug 22, 2006 * changed *Explore commands to use -nargs=* instead
+			     of -nargs=?.  Allows both -complete=dir _and_ the
+			     starstar arguments to work (-nargs=? seems to
+			     require one or the other).
+	      Aug 23, 2006 * copied all w:.. variables across splits to
+			     new windows
+	      Aug 25, 2006 * when g:netrw_browsex_viewer was '-'
+			     (see |g:netrw_browsex_viewer|) it wasn't causing
+			     netrwFileHandlers#Invoke() to be called as it
+			     was expected to.  (tnx Steve Dugaro)
+	      Aug 29, 2006 * changed NetBrowseX() to use "setlocal ... noswf"
+			     instead of "set ... noswf"  (tnx Benji Fisher)
+	      Aug 31, 2006 * tabs and fastbrowse<=1 didn't work together.
+	v102: Jun 15, 2006 * chgd netrwPlugin to call netrw#LocalBrowseCheck()
+			   * bugfix: g:netrw_keepdir==0 had stopped working
+	      Jul 06, 2006 * bugfix: NetOptionSave/Restore now saves/restores
+			     the unnamed register (|registers|)
+	      Jul 07, 2006 * |g:netrw_menu| support included
+	      Jul 13, 2006 * :Texplore command implemented
+	      Jul 17, 2006 * NetSplit and (Local|Net)BrowseChgDir() were both
+			     splitting windows.  This affected o, v, and
+			     g:netrw_browse_split.
+	      Jul 20, 2006 * works around wildignore setting (was causing
+			     netrw's local browser not to list wildignore'd
+			     files)
+	      Jul 24, 2006 * <leftmouse> acts as a <cr> for selecting a file
+			     <rightmouse> acts as a <del> for deleting a file
+	v100: May 14, 2006 * when using Windows and shell==cmd.exe, the
+			     default for g:netrw_ignorenetrc is now 1
+			   * bugfix: unwanted ^Ms now removed
+			     (affected shell==cmd.exe - Windows)
+			   * added Bookmarks and History to the menu
+			   * an error message about non-existing
+			     w:netrw_longlist was appearing during attempts to
+			     Explore (fixed)
+			   * g:netrw_shq now available to make netrw use
+			     specified style of quotes for commands
+	     May 29, 2006  * user NFH_*() functions were inadvertently being
+			     ignored
+			   * fixed a Windows non-cygwin ftp handling problem.
+			   * hiding pattern candidate separators included some
+			     characters it shouldn't have (tnx to Osei Poku)
+	     Jun 01, 2006  * for browsing, netrw was supposed to use "dir"
+			     instead of "ls -lF" when using
+			     ftp+non-cygwin+windows.  Fixed.
+			   * an inadvertently left-in-place debugging statement
+			     was preventing use of the "x" key with browsing.
+	     Jun 05, 2006  * g:netrw_nogx available to prevent making the gx
+			     map (see |g:netrw_nogx|)
+			   * bugfix, Explore woulnd't change directory
+			     properly (vim ., :Explore subdirname)
+	     Jun 06, 2006  * moved history to 2nd line in Netrw menu
+			   * fixed delete for unix-based systems
+	     Jun 07, 2006  * x key now works for windows-noncygwin-ftp
+	     Jun 08, 2006  * Explore */pat and **//pat now wraps
+	v99: May 09, 2006  * g:netrw_browse_split=3 for opening files in new
+			     tabs implemented.
+	     May 12, 2006  * deletes temporary file at end of NetRead()
+			   * visual mode based Obtain implemented
+			   * added -complete=dir to the various Explore
+			     commands
+	v98: May 02, 2006  * the "p" key didn't work properly when the browsing
+			     directory name had spaces in it.
+	v97: May 01, 2006  * exists("&acd") now used to determine if
+			     the 'acd' option exists
+			   * "obtain" now works again under Windows
 	v96: * bugfix - the |'acd'| option is not always defined but is
 	       now bypassed only when it is
 	v95: * bugfix - Hiding mode worked correctly (don't show any file
@@ -1532,7 +1907,7 @@ 11. History						*netrw-history* {{{1
 	     * g:netrw_browsex_viewer implemented
 	     * Mikolaj Machowski pointed out that gnome-open is often
 	       executable under KDE systems, although it is effectively
-	       not functional.  NetBrowseX now looks for "kicker" as
+	       not functional.  NetBrowseX now looks for "kicker" as 
 	       a running process to determine if KDE is actually the
 	       really running.
 	     * Explorer's O functionality was inadvertently left out.
@@ -1590,7 +1965,7 @@ 11. History						*netrw-history* {{{1
 	       in order to allow them to be used for motions
 	v65: * Browser functions now use NetOptionSave/Restore; in particular,
 	       netrw now works around the report setting
-	v64: * Bugfix - browsing a "/" directory (Unix) yielded buffers
+	v64: * Bugfix - browsing a "/" directory (Unix) yielded buffers 
 	       named "[Scratch]" instead of "/"
 	     * Bugfix - remote browsing with ftp was omitting the ./ and ../
 	v63: * netrw now takes advantage of autoload (and requires 7.0)
@@ -1732,7 +2107,7 @@ 11. History						*netrw-history* {{{1
 
 
 ==============================================================================
-11. Credits						*netrw-credits* {{{1
+12. Credits						*netrw-credits* {{{1
 
 	Vim editor	by Bram Moolenaar (Thanks, Bram!)
 	dav		support by C Campbell
--- a/runtime/doc/pi_paren.txt
+++ b/runtime/doc/pi_paren.txt
@@ -1,4 +1,4 @@
-*pi_paren.txt*  For Vim version 7.0.  Last change: 2006 Apr 24
+*pi_paren.txt*  For Vim version 7.1a.  Last change: 2006 Jun 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -43,7 +43,7 @@ are:
 - What is visible in the window.
 - 100 lines above or below the cursor to avoid a long delay when there are
   closed folds.
-- 'synmaxcolumn' times 2 bytes before or after the cursor to avoid a delay
+- 'synmaxcol' times 2 bytes before or after the cursor to avoid a delay
   in a long line with syntax highlighting.
 
 ==============================================================================
--- a/runtime/doc/pi_tar.txt
+++ b/runtime/doc/pi_tar.txt
@@ -1,8 +1,8 @@
-*pi_tar.txt*	For Vim version 7.0.  Last change: 2006 May 02
+*pi_tar.txt*	For Vim version 7.1a.  Last change: 2006 Sep 29
 
-		       +====================+
-		       | Tar File Interface |
-		       +====================+
+       	       	       +====================+
+       	       	       | Tar File Interface |
+       	       	       +====================+
 
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
@@ -31,35 +31,37 @@ 3. Options						*tar-options*
 
    These options are variables that one may change, typically in one's
    <.vimrc> file.
-			 Default
-   Variable		  Value   Explanation
+                         Default
+   Variable               Value   Explanation
    *g:tar_browseoptions*  "Ptf"   used to get a list of contents
-   *g:tar_readoptions*	  "OPxf"  used to extract a file from a tarball
-   *g:tar_cmd*		  "tar"   the name of the tar program
-   *g:tar_writeoptions*   "uf"	  used to update/replace a file
+   *g:tar_readoptions*    "OPxf"  used to extract a file from a tarball
+   *g:tar_cmd*            "tar"   the name of the tar program
+   *g:tar_writeoptions*   "uf"    used to update/replace a file
 
 
 ==============================================================================
 4. History						*tar-history*
 
+   v10 May 02, 2006 * now using "redraw then echo" to show messages, instead
+                      of "echo and prompt user"
    v9 May 02, 2006 * improved detection of masquerading as tar file
    v8 May 02, 2006 * allows editing of files that merely masquerade as tar
-		     files
+                     files
    v7 Mar 22, 2006 * work on making tar plugin work across network
       Mar 27, 2006 * g:tar_cmd now available for users to change the name
-		     of the tar program to be used.  By default, of course,
+                     of the tar program to be used.  By default, of course,
 		     its "tar".
    v6 Dec 21, 2005 * writing to files not in directories caused problems -
-		     fixed (pointed out by Christian Robinson)
+                     fixed (pointed out by Christian Robinson)
    v5 Nov 22, 2005 * report option workaround installed
    v3 Sep 16, 2005 * handles writing files in an archive back to the
-		     archive
+                     archive
       Oct 18, 2005 * <amatch> used instead of <afile> in autocmds
       Oct 18, 2005 * handles writing to compressed archives
       Nov 03, 2005 * handles writing tarfiles across a network using
-		     netrw#NetWrite()
-   v2		   * converted to use Vim7's new autoload feature by
-		     Bram Moolenaar
+                     netrw#NetWrite()
+   v2              * converted to use Vim7's new autoload feature by
+                     Bram Moolenaar
    v1 (original)   * Michael Toren (see http://michael.toren.net/code/)
 
 ==============================================================================
--- a/runtime/doc/pi_vimball.txt
+++ b/runtime/doc/pi_vimball.txt
@@ -1,4 +1,4 @@
-*pi_vimball.txt*	For Vim version 7.0.  Last change: 2006 May 01
+*pi_vimball.txt*	For Vim version 7.1a.  Last change: 2007 Jan 03
 
 			       ----------------
 			       Vimball Archiver
@@ -13,10 +13,13 @@ Copyright: (c) 2004-2006 by Charles E. C
 	   Use At-Your-Own-Risk!
 
 ==============================================================================
-1. Contents					*vimball* *vimball-contents*
+1. Contents				*vba* *vimball* *vimball-contents*
 
 	1. Contents......................................: |vimball-contents|
 	2. Vimball Manual................................: |vimball-manual|
+	   MkVimball.....................................: |:MkVimball|
+	   UseVimball....................................: |:UseVimball|
+	   RmVimball.....................................: |:RmVimball|
 	3. Vimball History...............................: |vimball-history|
 
 
@@ -24,19 +27,26 @@ 1. Contents					*vimball* *vimball-conte
 2. Vimball Manual					*vimball-manual*
 
 							*:MkVimball*
-		:[range]MkVimball[!] filename
+		:[range]MkVimball[!] filename [path]
 
-	This command takes lines holding a path to files to be included in
-	your vimball; as an example: >
+	The range is composed of lines holding paths to files to be included
+	in your new vimball.  As an example: >
 		plugin/something.vim
 		doc/something.txt
-<	using MkVimball on this range will create a file called "filename.vba"
-	which can be used by Vimball.vim to re-create these files.  If the
+<	using >
+		:[range]MkVimball filename
+<
+	on this range of lines will create a file called "filename.vba" which
+	can be used by Vimball.vim to re-create these files.  If the
 	"filename.vba" file already exists, then MkVimball will issue a
 	warning and not create the file.  Note that these paths are relative
 	to your .vim (vimfiles) directory, and the files should be in that
-	directory.  The vimball plugin uses the first |'runtimepath'|directory
-	that exists as a prefix; don't use absolute paths.
+	directory.  The vimball plugin normally uses the first |'runtimepath'|
+	directory that exists as a prefix; don't use absolute paths, unless
+	the user has specified such a path.
+							*g:vimball_home*
+	You may override the use of the |'runtimepath'| by specifying a
+	variable, g:vimball_home.
 
 	If you use the exclamation point (!), then MkVimball will create the
 	"filename.vba" file, overwriting it if it already exists.  This
@@ -52,22 +62,57 @@ 2. Vimball Manual					*vimball-manual*
 	file holds the "Vimball Archiver by Charles E. Campbell, Jr., Ph.D."
 	line.
 
-		:VimballList				*vimball-vimballlist*
+		:VimballList				*:VimballList*
 
 	This command will tell Vimball to list the files in the archive, along
 	with their lengths in lines.
 
+		:UseVimball [path]			*:UseVimball*
+
+	This command is contained within the vimball itself; it invokes the
+	vimball#Vimball() routine which is responsible for unpacking the
+	vimball.  One may choose to execute it by hand instead of sourcing
+	the vimball; one may also choose to specify a path for the
+	installation, thereby overriding the automatic choice of the first
+	existing directory on the |'runtimepath'|.
+
+		:RmVimball vimballfile [path]		*:RmVimball*
+
+	This command removes all files generated by the specified vimball
+	(but not any directories it may have made).  One may choose a path
+	for de-installation, too (see |'runtimepath'|); otherwise, the
+	default is the first existing directory on the |'runtimepath'|.
+	To implement this, a file (.VimballRecord) is made in that directory
+	containing a record of what files need to be removed for all vimballs
+	used thus far.
+
 
 ==============================================================================
 3. Vimball History					*vimball-history* {{{1
 
+	21 : Nov 27, 2006 * (tnx to Bill McCarthy) vimball had a header
+	                    handling problem and it now changes \s to /s
+	20 : Nov 20, 2006 * substitute() calls have all had the 'e' flag
+	                    removed.
+	18 : Aug 01, 2006 * vimballs now use folding to easily display their
+	                    contents.
+			  * if a user has AsNeeded/somefile, then vimball
+			    will extract plugin/somefile to the AsNeeded/
+			    directory
+	17 : Jun 28, 2006 * changes all \s to /s internally for Windows
+	16 : Jun 15, 2006 * A. Mechylynk's idea to allow users to specify
+			    installation root paths implemented for
+			    UseVimball, MkVimball, and RmVimball.
+			  * RmVimball implemented
+	15 : Jun 13, 2006 * bugfix
+	14 : May 26, 2006 * bugfixes
 	13 : May 01, 2006 * exists("&acd") used to determine if the acd
 			    option exists
 	12 : May 01, 2006 * bugfix - the |'acd'| option is not always defined
 	11 : Apr 27, 2006 * VimballList would create missing subdirectories that
-			    the vimball specified were needed.	Fixed.
+			    the vimball specified were needed.  Fixed.
 	10 : Apr 27, 2006 * moved all setting saving/restoration to a pair of
-			    functions.	Included some more settings in them
+			    functions.  Included some more settings in them
 			    which frequently cause trouble.
 	9  : Apr 26, 2006 * various changes to support Windows prediliction
 			    for backslashes and spaces in file and directory
@@ -80,7 +125,7 @@ 3. Vimball History					*vimball-history*
 			    only fires once, so the "Source this file..."
 			    message is now issued only once.
 	3  : Mar 20, 2006 * removed query, now requires sourcing to be
-			    extracted (:so %).	Message to that effect
+			    extracted (:so %).  Message to that effect
 			    included.
 			  * :VimballList  now shows files that would be
 			    extracted.
--- a/runtime/doc/pi_zip.txt
+++ b/runtime/doc/pi_zip.txt
@@ -1,4 +1,4 @@
-*pi_zip.txt*	For Vim version 7.0.  Last change: 2006 May 01
+*pi_zip.txt*	For Vim version 7.1a.  Last change: 2006 Sep 29
 
 				+====================+
 				| Zip File Interface |
@@ -7,7 +7,7 @@
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
 Copyright: Copyright (C) 2005,2006 Charles E Campbell, Jr {{{1 *zip-copyright*
-	   Permission is hereby granted to use and distribute this code,
+           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,
 	   zip.vim, zipPlugin.vim, and pi_zip.txt are provided *as is*
@@ -31,24 +31,34 @@ 2. Usage					*zip-usage* *zip-manual*
    also write to the file.  Currently, one may not make a new file in
    zip archives via the plugin.
 
+   The zip program supports one option: >
+   	g:zip_shq
+<  which by default is a single quote under Unix (') and a double quote
+   under Windows (").  If you'd rather have no quotes, simply set
+   g:zip_shq to the empty string (let g:zip_shq= "") in your <.vimrc>.
+
 ==============================================================================
 3. History					*zip-history*
+   v10 May 02, 2006 * now using "redraw then echo" to show messages, instead
+                      of "echo and prompt user"
+		    * g:zip_shq provided to allow for quoting control for the
+		      command being passed via :r! ... commands.
    v8 Apr 10, 2006 * Bram Moolenaar reported that he received an error message
-		     due to "Pattern not found: ^.*\%0c"; this was caused by
+                     due to "Pattern not found: ^.*\%0c"; this was caused by
 		     stridx finding a Name... at the beginning of the line;
 		     zip.vim tried 4,$s/^.*\%0c//, but that doesn't work.
 		     Fixed.
    v7 Mar 22, 2006 * escaped some characters that can cause filename handling
-		     problems.
+                     problems.
    v6 Dec 21, 2005 * writing to files not in directories caused problems -
-		     fixed (pointed out by Christian Robinson)
+                     fixed (pointed out by Christian Robinson)
    v5 Nov 22, 2005 * report option workaround installed
    v3 Oct 18, 2005 * <amatch> used instead of <afile> in autocmds
    v2 Sep 16, 2005 * silenced some commands (avoiding hit-enter prompt)
-		   * began testing under Windows; works thus far
+                   * began testing under Windows; works thus far
 		   * filetype detection fixed
       Nov 03, 2005 * handles writing zipfiles across a network using
-		     netrw#NetWrite()
+                     netrw#NetWrite()
    v1 Sep 15, 2005 * Initial release, had browsing, reading, and writing
 
 ==============================================================================
--- a/runtime/doc/print.txt
+++ b/runtime/doc/print.txt
@@ -1,4 +1,4 @@
-*print.txt*     For Vim version 7.0.  Last change: 2006 Apr 30
+*print.txt*     For Vim version 7.1a.  Last change: 2007 Apr 22
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -427,7 +427,7 @@ 4. Custom 8-bit Print Character Encoding
 								*E618* *E619*
 To use your own print character encoding when printing 8-bit character data
 you need to define your own PostScript font encoding vector.  Details on how
-to to define a font encoding vector is beyond the scope of this help file, but
+to define a font encoding vector is beyond the scope of this help file, but
 you can find details in the PostScript Language Reference Manual, 3rd Edition,
 published by Addison-Wesley and available in PDF form at
 http://www.adobe.com/.  The following describes what you need to do for VIM to
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -1,4 +1,4 @@
-*quickref.txt*  For Vim version 7.0.  Last change: 2006 Apr 30
+*quickref.txt*  For Vim version 7.1a.  Last change: 2006 Nov 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -783,7 +783,8 @@ Short explanation of each option:		*opti
 'number'	  'nu'	    print the line number in front of each line
 'numberwidth'	  'nuw'     number of columns used for the line number
 'omnifunc'	  'ofu'     function for filetype-specific completion
-'operatorfunc'	  'opfunc'  funtion to be called for |g@| operator
+'opendevice'	  'odev'    allow reading/writing devices on MS-Windows
+'operatorfunc'	  'opfunc'  function to be called for |g@| operator
 'osfiletype'	  'oft'     operating system-specific filetype information
 'paragraphs'	  'para'    nroff macros that separate paragraphs
 'paste'			    allow pasting text
--- a/runtime/doc/recover.txt
+++ b/runtime/doc/recover.txt
@@ -1,4 +1,4 @@
-*recover.txt*   For Vim version 7.0.  Last change: 2006 Apr 24
+*recover.txt*   For Vim version 7.1a.  Last change: 2006 Apr 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/rileft.txt
+++ b/runtime/doc/rileft.txt
@@ -1,4 +1,4 @@
-*rileft.txt*    For Vim version 7.0.  Last change: 2006 Apr 24
+*rileft.txt*    For Vim version 7.1a.  Last change: 2006 Apr 24
 
 
 		  VIM REFERENCE MANUAL    by Avner Lottem
--- a/runtime/doc/russian.txt
+++ b/runtime/doc/russian.txt
@@ -1,4 +1,4 @@
-*russian.txt*   For Vim version 7.0.  Last change: 2006 Apr 24
+*russian.txt*   For Vim version 7.1a.  Last change: 2006 Apr 24
 
 
 		  VIM REFERENCE MANUAL    by Vassily Ragosin
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -1,4 +1,4 @@
-*sign.txt*      For Vim version 7.0.  Last change: 2006 Apr 24
+*sign.txt*      For Vim version 7.1a.  Last change: 2006 Apr 24
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
--- a/runtime/doc/sponsor.txt
+++ b/runtime/doc/sponsor.txt
@@ -1,4 +1,4 @@
-*sponsor.txt*   For Vim version 7.0.  Last change: 2006 Apr 30
+*sponsor.txt*   For Vim version 7.1a.  Last change: 2007 Jan 05
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -59,7 +59,7 @@ But only if you enable this on your acco
 HOW TO SEND MONEY						*send-money*
 
 Credit card	Through PayPal, see the PayPal site for information:
-			https://www.paypal.com
+			https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q
 		The e-mail address for sending sponsorship money is:
 			donate@vim.org
 		The e-mail address for Vim registration is:
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -253,6 +253,26 @@
 'gfw'	options.txt	/*'gfw'*
 'ghr'	options.txt	/*'ghr'*
 'go'	options.txt	/*'go'*
+'go-A'	options.txt	/*'go-A'*
+'go-F'	options.txt	/*'go-F'*
+'go-L'	options.txt	/*'go-L'*
+'go-M'	options.txt	/*'go-M'*
+'go-R'	options.txt	/*'go-R'*
+'go-T'	options.txt	/*'go-T'*
+'go-a'	options.txt	/*'go-a'*
+'go-b'	options.txt	/*'go-b'*
+'go-c'	options.txt	/*'go-c'*
+'go-e'	options.txt	/*'go-e'*
+'go-f'	options.txt	/*'go-f'*
+'go-g'	options.txt	/*'go-g'*
+'go-h'	options.txt	/*'go-h'*
+'go-i'	options.txt	/*'go-i'*
+'go-l'	options.txt	/*'go-l'*
+'go-m'	options.txt	/*'go-m'*
+'go-p'	options.txt	/*'go-p'*
+'go-r'	options.txt	/*'go-r'*
+'go-t'	options.txt	/*'go-t'*
+'go-v'	options.txt	/*'go-v'*
 'gp'	options.txt	/*'gp'*
 'gr'	vi_diff.txt	/*'gr'*
 'graphic'	vi_diff.txt	/*'graphic'*
@@ -528,6 +548,8 @@
 'nomousehide'	options.txt	/*'nomousehide'*
 'nonu'	options.txt	/*'nonu'*
 'nonumber'	options.txt	/*'nonumber'*
+'noodev'	options.txt	/*'noodev'*
+'noopendevice'	options.txt	/*'noopendevice'*
 'nopaste'	options.txt	/*'nopaste'*
 'nopi'	options.txt	/*'nopi'*
 'nopreserveindent'	options.txt	/*'nopreserveindent'*
@@ -629,11 +651,13 @@
 'number'	options.txt	/*'number'*
 'numberwidth'	options.txt	/*'numberwidth'*
 'nuw'	options.txt	/*'nuw'*
+'odev'	options.txt	/*'odev'*
 'oft'	options.txt	/*'oft'*
 'ofu'	options.txt	/*'ofu'*
 'omnifunc'	options.txt	/*'omnifunc'*
 'op'	vi_diff.txt	/*'op'*
 'open'	vi_diff.txt	/*'open'*
+'opendevice'	options.txt	/*'opendevice'*
 'operatorfunc'	options.txt	/*'operatorfunc'*
 'opfunc'	options.txt	/*'opfunc'*
 'optimize'	vi_diff.txt	/*'optimize'*
@@ -1283,6 +1307,7 @@
 -xrm	gui_x11.txt	/*-xrm*
 -y	starting.txt	/*-y*
 .	repeat.txt	/*.*
+...	eval.txt	/*...*
 .Xdefaults	gui_x11.txt	/*.Xdefaults*
 .aff	spell.txt	/*.aff*
 .dic	spell.txt	/*.dic*
@@ -1296,6 +1321,7 @@
 /<CR>	pattern.txt	/*\/<CR>*
 /[[.	pattern.txt	/*\/[[.*
 /[[=	pattern.txt	/*\/[[=*
+/[\n]	pattern.txt	/*\/[\\n]*
 /[]	pattern.txt	/*\/[]*
 /\	pattern.txt	/*\/\\*
 /\$	pattern.txt	/*\/\\$*
@@ -1672,6 +1698,7 @@ 90.5	usr_90.txt	/*90.5*
 :!cmd	various.txt	/*:!cmd*
 :!start	os_win32.txt	/*:!start*
 :#	various.txt	/*:#*
+:#!	various.txt	/*:#!*
 :$	cmdline.txt	/*:$*
 :%	cmdline.txt	/*:%*
 :&	change.txt	/*:&*
@@ -1707,8 +1734,20 @@ 90.5	usr_90.txt	/*90.5*
 :@	repeat.txt	/*:@*
 :@:	repeat.txt	/*:@:*
 :@@	repeat.txt	/*:@@*
+:AdaLines	ada.txt	/*:AdaLines*
+:AdaRainbow	ada.txt	/*:AdaRainbow*
+:AdaSpaces	ada.txt	/*:AdaSpaces*
+:AdaTagDir	ada.txt	/*:AdaTagDir*
+:AdaTagFile	ada.txt	/*:AdaTagFile*
+:AdaTypes	ada.txt	/*:AdaTypes*
 :CompilerSet	usr_41.txt	/*:CompilerSet*
+:DiffOrig	diff.txt	/*:DiffOrig*
 :Explore	pi_netrw.txt	/*:Explore*
+:GLVS	pi_getscript.txt	/*:GLVS*
+:GetLatestVimScripts_dat	pi_getscript.txt	/*:GetLatestVimScripts_dat*
+:GnatFind	ada.txt	/*:GnatFind*
+:GnatPretty	ada.txt	/*:GnatPretty*
+:GnatTags	ada.txt	/*:GnatTags*
 :Hexplore	pi_netrw.txt	/*:Hexplore*
 :Man	filetype.txt	/*:Man*
 :MkVimball	pi_vimball.txt	/*:MkVimball*
@@ -1718,9 +1757,13 @@ 90.5	usr_90.txt	/*90.5*
 :P	various.txt	/*:P*
 :Pexplore	pi_netrw.txt	/*:Pexplore*
 :Print	various.txt	/*:Print*
+:RmVimball	pi_vimball.txt	/*:RmVimball*
 :Sexplore	pi_netrw.txt	/*:Sexplore*
 :TOhtml	syntax.txt	/*:TOhtml*
+:Texplore	pi_netrw.txt	/*:Texplore*
+:UseVimball	pi_vimball.txt	/*:UseVimball*
 :Vexplore	pi_netrw.txt	/*:Vexplore*
+:VimballList	pi_vimball.txt	/*:VimballList*
 :X	editing.txt	/*:X*
 :XMLent	insert.txt	/*:XMLent*
 :XMLns	insert.txt	/*:XMLns*
@@ -1906,9 +1949,17 @@ 90.5	usr_90.txt	/*90.5*
 :comc	map.txt	/*:comc*
 :comclear	map.txt	/*:comclear*
 :command	map.txt	/*:command*
+:command-bang	map.txt	/*:command-bang*
+:command-bar	map.txt	/*:command-bar*
+:command-buffer	map.txt	/*:command-buffer*
+:command-complete	map.txt	/*:command-complete*
 :command-completion	map.txt	/*:command-completion*
 :command-completion-custom	map.txt	/*:command-completion-custom*
 :command-completion-customlist	map.txt	/*:command-completion-customlist*
+:command-count	map.txt	/*:command-count*
+:command-nargs	map.txt	/*:command-nargs*
+:command-range	map.txt	/*:command-range*
+:command-register	map.txt	/*:command-register*
 :command-verbose	map.txt	/*:command-verbose*
 :comment	eval.txt	/*:comment*
 :comp	quickfix.txt	/*:comp*
@@ -1992,6 +2043,7 @@ 90.5	usr_90.txt	/*90.5*
 :earlier	undo.txt	/*:earlier*
 :ec	eval.txt	/*:ec*
 :echo	eval.txt	/*:echo*
+:echo-redraw	eval.txt	/*:echo-redraw*
 :echoe	eval.txt	/*:echoe*
 :echoerr	eval.txt	/*:echoerr*
 :echoh	eval.txt	/*:echoh*
@@ -2186,12 +2238,12 @@ 90.5	usr_90.txt	/*90.5*
 :let	eval.txt	/*:let*
 :let+=	eval.txt	/*:let+=*
 :let-$	eval.txt	/*:let-$*
+:let-&	eval.txt	/*:let-&*
 :let-=	eval.txt	/*:let-=*
 :let-@	eval.txt	/*:let-@*
 :let-environment	eval.txt	/*:let-environment*
 :let-option	eval.txt	/*:let-option*
 :let-register	eval.txt	/*:let-register*
-:let-star	eval.txt	/*:let-star*
 :let-unpack	eval.txt	/*:let-unpack*
 :let.=	eval.txt	/*:let.=*
 :lex	quickfix.txt	/*:lex*
@@ -2708,6 +2760,7 @@ 90.5	usr_90.txt	/*90.5*
 :syn-sync-second	syntax.txt	/*:syn-sync-second*
 :syn-sync-third	syntax.txt	/*:syn-sync-third*
 :syn-transparent	syntax.txt	/*:syn-transparent*
+:sync	scroll.txt	/*:sync*
 :syncbind	scroll.txt	/*:syncbind*
 :syntax	syntax.txt	/*:syntax*
 :syntax-enable	syntax.txt	/*:syntax-enable*
@@ -3027,6 +3080,7 @@ 90.5	usr_90.txt	/*90.5*
 <cfile>	cmdline.txt	/*<cfile>*
 <character>	intro.txt	/*<character>*
 <count>	map.txt	/*<count>*
+<f-args>	map.txt	/*<f-args>*
 <k0>	term.txt	/*<k0>*
 <k1>	term.txt	/*<k1>*
 <k2>	term.txt	/*<k2>*
@@ -3086,7 +3140,9 @@ 90.5	usr_90.txt	/*90.5*
 @	repeat.txt	/*@*
 @/	change.txt	/*@\/*
 @:	repeat.txt	/*@:*
+@=	change.txt	/*@=*
 @@	repeat.txt	/*@@*
+@r	eval.txt	/*@r*
 A	insert.txt	/*A*
 ACL	editing.txt	/*ACL*
 ATTENTION	usr_11.txt	/*ATTENTION*
@@ -4017,6 +4073,11 @@ E789	syntax.txt	/*E789*
 E79	message.txt	/*E79*
 E790	undo.txt	/*E790*
 E791	mbyte.txt	/*E791*
+E792	gui.txt	/*E792*
+E793	diff.txt	/*E793*
+E794	eval.txt	/*E794*
+E795	eval.txt	/*E795*
+E796	editing.txt	/*E796*
 E80	message.txt	/*E80*
 E800	arabic.txt	/*E800*
 E81	map.txt	/*E81*
@@ -4079,7 +4140,10 @@ GTK+	gui_x11.txt	/*GTK+*
 GUI	gui.txt	/*GUI*
 GUI-X11	gui_x11.txt	/*GUI-X11*
 GUIEnter	autocmd.txt	/*GUIEnter*
-GetLatestVimScripts-copyright	getscript.txt	/*GetLatestVimScripts-copyright*
+GUIFailed	autocmd.txt	/*GUIFailed*
+GetLatestVimScripts	pi_getscript.txt	/*GetLatestVimScripts*
+GetLatestVimScripts-copyright	pi_getscript.txt	/*GetLatestVimScripts-copyright*
+GetLatestVimScripts_dat	pi_getscript.txt	/*GetLatestVimScripts_dat*
 Gnome	gui_x11.txt	/*Gnome*
 H	motion.txt	/*H*
 I	insert.txt	/*I*
@@ -4129,6 +4193,7 @@ NetBSD-backspace	options.txt	/*NetBSD-ba
 Normal	intro.txt	/*Normal*
 Normal-mode	intro.txt	/*Normal-mode*
 Nread	pi_netrw.txt	/*Nread*
+Nsource	pi_netrw.txt	/*Nsource*
 Nvi	intro.txt	/*Nvi*
 Nwrite	pi_netrw.txt	/*Nwrite*
 O	insert.txt	/*O*
@@ -4222,6 +4287,7 @@ SessionLoad-variable	starting.txt	/*Sess
 SessionLoadPost	autocmd.txt	/*SessionLoadPost*
 ShellCmdPost	autocmd.txt	/*ShellCmdPost*
 ShellFilterPost	autocmd.txt	/*ShellFilterPost*
+SourceCmd	autocmd.txt	/*SourceCmd*
 SourcePre	autocmd.txt	/*SourcePre*
 SpellFileMissing	autocmd.txt	/*SpellFileMissing*
 StdinReadPost	autocmd.txt	/*StdinReadPost*
@@ -4418,7 +4484,17 @@ abandon	editing.txt	/*abandon*
 abbreviations	map.txt	/*abbreviations*
 abel.vim	syntax.txt	/*abel.vim*
 active-buffer	windows.txt	/*active-buffer*
-ada.vim	syntax.txt	/*ada.vim*
+ada#Create_Tags()	ada.txt	/*ada#Create_Tags()*
+ada#Jump_Tag()	ada.txt	/*ada#Jump_Tag()*
+ada#Listtags()	ada.txt	/*ada#Listtags()*
+ada#Switch_Syntax_Option()	ada.txt	/*ada#Switch_Syntax_Option()*
+ada#Word()	ada.txt	/*ada#Word()*
+ada-compiler	ada.txt	/*ada-compiler*
+ada-ctags	ada.txt	/*ada-ctags*
+ada-extra-plugins	ada.txt	/*ada-extra-plugins*
+ada-reference	ada.txt	/*ada-reference*
+ada.txt	ada.txt	/*ada.txt*
+ada.vim	ada.txt	/*ada.vim*
 add()	eval.txt	/*add()*
 add-filetype-plugin	usr_05.txt	/*add-filetype-plugin*
 add-global-plugin	usr_05.txt	/*add-global-plugin*
@@ -4437,6 +4513,7 @@ added-6.1	version6.txt	/*added-6.1*
 added-6.2	version6.txt	/*added-6.2*
 added-6.3	version6.txt	/*added-6.3*
 added-6.4	version6.txt	/*added-6.4*
+added-7.1	version7.txt	/*added-7.1*
 added-BeOS	version5.txt	/*added-BeOS*
 added-Mac	version5.txt	/*added-Mac*
 added-VMS	version5.txt	/*added-VMS*
@@ -4650,6 +4727,7 @@ c_CTRL-Y	cmdline.txt	/*c_CTRL-Y*
 c_CTRL-\_CTRL-G	intro.txt	/*c_CTRL-\\_CTRL-G*
 c_CTRL-\_CTRL-N	intro.txt	/*c_CTRL-\\_CTRL-N*
 c_CTRL-\_e	cmdline.txt	/*c_CTRL-\\_e*
+c_CTRL-]	cmdline.txt	/*c_CTRL-]*
 c_CTRL-^	cmdline.txt	/*c_CTRL-^*
 c_CTRL-_	cmdline.txt	/*c_CTRL-_*
 c_digraph	cmdline.txt	/*c_digraph*
@@ -4679,6 +4757,7 @@ changed-6.1	version6.txt	/*changed-6.1*
 changed-6.2	version6.txt	/*changed-6.2*
 changed-6.3	version6.txt	/*changed-6.3*
 changed-6.4	version6.txt	/*changed-6.4*
+changed-7.1	version7.txt	/*changed-7.1*
 changelist	motion.txt	/*changelist*
 changelog.vim	syntax.txt	/*changelog.vim*
 changenr()	eval.txt	/*changenr()*
@@ -4729,10 +4808,15 @@ compatible-default	starting.txt	/*compat
 compile-changes-5	version5.txt	/*compile-changes-5*
 compile-changes-6	version6.txt	/*compile-changes-6*
 compile-changes-7	version7.txt	/*compile-changes-7*
+compiler-compaqada	ada.txt	/*compiler-compaqada*
+compiler-decada	ada.txt	/*compiler-decada*
+compiler-gnat	ada.txt	/*compiler-gnat*
+compiler-hpada	ada.txt	/*compiler-hpada*
 compiler-manx	quickfix.txt	/*compiler-manx*
 compiler-pyunit	quickfix.txt	/*compiler-pyunit*
 compiler-select	quickfix.txt	/*compiler-select*
 compiler-tex	quickfix.txt	/*compiler-tex*
+compiler-vaxada	ada.txt	/*compiler-vaxada*
 compl-current	insert.txt	/*compl-current*
 compl-define	insert.txt	/*compl-define*
 compl-dictionary	insert.txt	/*compl-dictionary*
@@ -4916,6 +5000,7 @@ debugger-integration	debugger.txt	/*debu
 debugger-support	debugger.txt	/*debugger-support*
 debugger.txt	debugger.txt	/*debugger.txt*
 dec-mouse	options.txt	/*dec-mouse*
+decada_members	ada.txt	/*decada_members*
 deepcopy()	eval.txt	/*deepcopy()*
 definition-search	tagsrch.txt	/*definition-search*
 definitions	intro.txt	/*definitions*
@@ -4952,6 +5037,7 @@ diff	diff.txt	/*diff*
 diff-diffexpr	diff.txt	/*diff-diffexpr*
 diff-mode	diff.txt	/*diff-mode*
 diff-options	diff.txt	/*diff-options*
+diff-original-file	diff.txt	/*diff-original-file*
 diff-patchexpr	diff.txt	/*diff-patchexpr*
 diff.txt	diff.txt	/*diff.txt*
 diff_filler()	eval.txt	/*diff_filler()*
@@ -5203,6 +5289,7 @@ fixed-6.1	version6.txt	/*fixed-6.1*
 fixed-6.2	version6.txt	/*fixed-6.2*
 fixed-6.3	version6.txt	/*fixed-6.3*
 fixed-6.4	version6.txt	/*fixed-6.4*
+fixed-7.1	version7.txt	/*fixed-7.1*
 flexwiki.vim	syntax.txt	/*flexwiki.vim*
 fname_diff-variable	eval.txt	/*fname_diff-variable*
 fname_in-variable	eval.txt	/*fname_in-variable*
@@ -5250,7 +5337,15 @@ fortran.vim	syntax.txt	/*fortran.vim*
 french-maillist	intro.txt	/*french-maillist*
 frombook	usr_01.txt	/*frombook*
 ft-abel-syntax	syntax.txt	/*ft-abel-syntax*
-ft-ada-syntax	syntax.txt	/*ft-ada-syntax*
+ft-ada-commands	ada.txt	/*ft-ada-commands*
+ft-ada-constants	ada.txt	/*ft-ada-constants*
+ft-ada-functions	ada.txt	/*ft-ada-functions*
+ft-ada-indent	ada.txt	/*ft-ada-indent*
+ft-ada-omni	ada.txt	/*ft-ada-omni*
+ft-ada-options	ada.txt	/*ft-ada-options*
+ft-ada-plugin	ada.txt	/*ft-ada-plugin*
+ft-ada-syntax	ada.txt	/*ft-ada-syntax*
+ft-ada-variables	ada.txt	/*ft-ada-variables*
 ft-ant-syntax	syntax.txt	/*ft-ant-syntax*
 ft-apache-syntax	syntax.txt	/*ft-apache-syntax*
 ft-asm-syntax	syntax.txt	/*ft-asm-syntax*
@@ -5395,18 +5490,60 @@ g-	undo.txt	/*g-*
 g0	motion.txt	/*g0*
 g8	various.txt	/*g8*
 g:NetrwTopLvlMenu	pi_netrw.txt	/*g:NetrwTopLvlMenu*
+g:ada#Comment	ada.txt	/*g:ada#Comment*
+g:ada#Ctags_Kinds	ada.txt	/*g:ada#Ctags_Kinds*
+g:ada#DotWordRegex	ada.txt	/*g:ada#DotWordRegex*
+g:ada#Keywords	ada.txt	/*g:ada#Keywords*
+g:ada#WordRegex	ada.txt	/*g:ada#WordRegex*
+g:ada_abbrev	ada.txt	/*g:ada_abbrev*
+g:ada_all_tab_usage	ada.txt	/*g:ada_all_tab_usage*
+g:ada_begin_preproc	ada.txt	/*g:ada_begin_preproc*
+g:ada_default_compiler	ada.txt	/*g:ada_default_compiler*
+g:ada_extended_completion	ada.txt	/*g:ada_extended_completion*
+g:ada_extended_tagging	ada.txt	/*g:ada_extended_tagging*
+g:ada_folding	ada.txt	/*g:ada_folding*
+g:ada_gnat_extensions	ada.txt	/*g:ada_gnat_extensions*
+g:ada_line_errors	ada.txt	/*g:ada_line_errors*
+g:ada_no_tab_space_error	ada.txt	/*g:ada_no_tab_space_error*
+g:ada_no_trail_space_error	ada.txt	/*g:ada_no_trail_space_error*
+g:ada_omni_with_keywords	ada.txt	/*g:ada_omni_with_keywords*
+g:ada_rainbow_color	ada.txt	/*g:ada_rainbow_color*
+g:ada_space_errors	ada.txt	/*g:ada_space_errors*
+g:ada_standard_types	ada.txt	/*g:ada_standard_types*
+g:ada_with_gnat_project_files	ada.txt	/*g:ada_with_gnat_project_files*
+g:ada_withuse_ordinary	ada.txt	/*g:ada_withuse_ordinary*
+g:decada	ada.txt	/*g:decada*
+g:decada.Error_Format	ada.txt	/*g:decada.Error_Format*
+g:decada.Make()	ada.txt	/*g:decada.Make()*
+g:decada.Make_Command	ada.txt	/*g:decada.Make_Command*
+g:decada.Unit_Name()	ada.txt	/*g:decada.Unit_Name()*
+g:gnat	ada.txt	/*g:gnat*
+g:gnat.Error_Format	ada.txt	/*g:gnat.Error_Format*
+g:gnat.Find()	ada.txt	/*g:gnat.Find()*
+g:gnat.Find_Program	ada.txt	/*g:gnat.Find_Program*
+g:gnat.Make()	ada.txt	/*g:gnat.Make()*
+g:gnat.Make_Command	ada.txt	/*g:gnat.Make_Command*
+g:gnat.Pretty()	ada.txt	/*g:gnat.Pretty()*
+g:gnat.Pretty_Program	ada.txt	/*g:gnat.Pretty_Program*
+g:gnat.Project_File	ada.txt	/*g:gnat.Project_File*
+g:gnat.Set_Project_File()	ada.txt	/*g:gnat.Set_Project_File()*
+g:gnat.Tags()	ada.txt	/*g:gnat.Tags()*
+g:gnat.Tags_Command	ada.txt	/*g:gnat.Tags_Command*
 g:netrw_alto	pi_netrw.txt	/*g:netrw_alto*
 g:netrw_altv	pi_netrw.txt	/*g:netrw_altv*
 g:netrw_browse_split	pi_netrw.txt	/*g:netrw_browse_split*
 g:netrw_browsex_viewer	pi_netrw.txt	/*g:netrw_browsex_viewer*
 g:netrw_cygwin	pi_netrw.txt	/*g:netrw_cygwin*
 g:netrw_dav_cmd	pi_netrw.txt	/*g:netrw_dav_cmd*
+g:netrw_extracmd	pi_netrw.txt	/*g:netrw_extracmd*
 g:netrw_fastbrowse	pi_netrw.txt	/*g:netrw_fastbrowse*
 g:netrw_fetch_cmd	pi_netrw.txt	/*g:netrw_fetch_cmd*
 g:netrw_ftp	pi_netrw.txt	/*g:netrw_ftp*
 g:netrw_ftp_browse_reject	pi_netrw.txt	/*g:netrw_ftp_browse_reject*
 g:netrw_ftp_cmd	pi_netrw.txt	/*g:netrw_ftp_cmd*
 g:netrw_ftp_list_cmd	pi_netrw.txt	/*g:netrw_ftp_list_cmd*
+g:netrw_ftp_sizelist_cmd	pi_netrw.txt	/*g:netrw_ftp_sizelist_cmd*
+g:netrw_ftp_timelist_cmd	pi_netrw.txt	/*g:netrw_ftp_timelist_cmd*
 g:netrw_ftpmode	pi_netrw.txt	/*g:netrw_ftpmode*
 g:netrw_hide	pi_netrw.txt	/*g:netrw_hide*
 g:netrw_http_cmd	pi_netrw.txt	/*g:netrw_http_cmd*
@@ -5414,11 +5551,13 @@ g:netrw_ignorenetrc	pi_netrw.txt	/*g:net
 g:netrw_keepdir	pi_netrw.txt	/*g:netrw_keepdir*
 g:netrw_list_cmd	pi_netrw.txt	/*g:netrw_list_cmd*
 g:netrw_list_hide	pi_netrw.txt	/*g:netrw_list_hide*
+g:netrw_liststyle	pi_netrw.txt	/*g:netrw_liststyle*
 g:netrw_local_mkdir	pi_netrw.txt	/*g:netrw_local_mkdir*
 g:netrw_local_rmdir	pi_netrw.txt	/*g:netrw_local_rmdir*
-g:netrw_longlist	pi_netrw.txt	/*g:netrw_longlist*
 g:netrw_maxfilenamelen	pi_netrw.txt	/*g:netrw_maxfilenamelen*
+g:netrw_menu	pi_netrw.txt	/*g:netrw_menu*
 g:netrw_mkdir_cmd	pi_netrw.txt	/*g:netrw_mkdir_cmd*
+g:netrw_nogx	pi_netrw.txt	/*g:netrw_nogx*
 g:netrw_passwd	pi_netrw.txt	/*g:netrw_passwd*
 g:netrw_rcp_cmd	pi_netrw.txt	/*g:netrw_rcp_cmd*
 g:netrw_rm_cmd	pi_netrw.txt	/*g:netrw_rm_cmd*
@@ -5427,6 +5566,7 @@ g:netrw_rmf_cmd	pi_netrw.txt	/*g:netrw_r
 g:netrw_rsync_cmd	pi_netrw.txt	/*g:netrw_rsync_cmd*
 g:netrw_scp_cmd	pi_netrw.txt	/*g:netrw_scp_cmd*
 g:netrw_sftp_cmd	pi_netrw.txt	/*g:netrw_sftp_cmd*
+g:netrw_shq	pi_netrw.txt	/*g:netrw_shq*
 g:netrw_sort_by	pi_netrw.txt	/*g:netrw_sort_by*
 g:netrw_sort_direction	pi_netrw.txt	/*g:netrw_sort_direction*
 g:netrw_sort_sequence	pi_netrw.txt	/*g:netrw_sort_sequence*
@@ -5434,6 +5574,7 @@ g:netrw_ssh_browse_reject	pi_netrw.txt	/
 g:netrw_ssh_cmd	pi_netrw.txt	/*g:netrw_ssh_cmd*
 g:netrw_timefmt	pi_netrw.txt	/*g:netrw_timefmt*
 g:netrw_uid	pi_netrw.txt	/*g:netrw_uid*
+g:netrw_use_noswf	pi_netrw.txt	/*g:netrw_use_noswf*
 g:netrw_use_nt_rcp	pi_netrw.txt	/*g:netrw_use_nt_rcp*
 g:netrw_win95ftp	pi_netrw.txt	/*g:netrw_win95ftp*
 g:netrw_winsize	pi_netrw.txt	/*g:netrw_winsize*
@@ -5442,6 +5583,7 @@ g:tar_cmd	pi_tar.txt	/*g:tar_cmd*
 g:tar_readoptions	pi_tar.txt	/*g:tar_readoptions*
 g:tar_writeoptions	pi_tar.txt	/*g:tar_writeoptions*
 g:var	eval.txt	/*g:var*
+g:vimball_home	pi_vimball.txt	/*g:vimball_home*
 g;	motion.txt	/*g;*
 g<	message.txt	/*g<*
 g<Down>	motion.txt	/*g<Down>*
@@ -5496,20 +5638,19 @@ getfperm()	eval.txt	/*getfperm()*
 getfsize()	eval.txt	/*getfsize()*
 getftime()	eval.txt	/*getftime()*
 getftype()	eval.txt	/*getftype()*
-getlatestvimscripts	getscript.txt	/*getlatestvimscripts*
-getlatestvimscripts-algorithm	getscript.txt	/*getlatestvimscripts-algorithm*
-getlatestvimscripts-autoinstall	getscript.txt	/*getlatestvimscripts-autoinstall*
-getlatestvimscripts-data	getscript.txt	/*getlatestvimscripts-data*
-getlatestvimscripts-history	getscript.txt	/*getlatestvimscripts-history*
-getlatestvimscripts-plugins	getscript.txt	/*getlatestvimscripts-plugins*
+getlatestvimscripts-install	pi_getscript.txt	/*getlatestvimscripts-install*
 getline()	eval.txt	/*getline()*
 getloclist()	eval.txt	/*getloclist()*
 getpos()	eval.txt	/*getpos()*
 getqflist()	eval.txt	/*getqflist()*
 getreg()	eval.txt	/*getreg()*
 getregtype()	eval.txt	/*getregtype()*
-getscript	getscript.txt	/*getscript*
-getscript.txt	getscript.txt	/*getscript.txt*
+getscript	pi_getscript.txt	/*getscript*
+getscript-autoinstall	pi_getscript.txt	/*getscript-autoinstall*
+getscript-data	pi_getscript.txt	/*getscript-data*
+getscript-history	pi_getscript.txt	/*getscript-history*
+getscript-plugins	pi_getscript.txt	/*getscript-plugins*
+getscript-start	pi_getscript.txt	/*getscript-start*
 gettabwinvar()	eval.txt	/*gettabwinvar()*
 getwinposx()	eval.txt	/*getwinposx()*
 getwinposy()	eval.txt	/*getwinposy()*
@@ -5526,14 +5667,24 @@ global-ime	mbyte.txt	/*global-ime*
 global-local	options.txt	/*global-local*
 global-variable	eval.txt	/*global-variable*
 globpath()	eval.txt	/*globpath()*
-glvs	getscript.txt	/*glvs*
-glvs-alg	getscript.txt	/*glvs-alg*
-glvs-autoinstall	getscript.txt	/*glvs-autoinstall*
-glvs-contents	getscript.txt	/*glvs-contents*
-glvs-data	getscript.txt	/*glvs-data*
-glvs-hist	getscript.txt	/*glvs-hist*
-glvs-plugins	getscript.txt	/*glvs-plugins*
+glvs	pi_getscript.txt	/*glvs*
+glvs-alg	pi_getscript.txt	/*glvs-alg*
+glvs-algorithm	pi_getscript.txt	/*glvs-algorithm*
+glvs-autoinstall	pi_getscript.txt	/*glvs-autoinstall*
+glvs-contents	pi_getscript.txt	/*glvs-contents*
+glvs-copyright	pi_getscript.txt	/*glvs-copyright*
+glvs-data	pi_getscript.txt	/*glvs-data*
+glvs-dist-install	pi_getscript.txt	/*glvs-dist-install*
+glvs-hist	pi_getscript.txt	/*glvs-hist*
+glvs-install	pi_getscript.txt	/*glvs-install*
+glvs-options	pi_getscript.txt	/*glvs-options*
+glvs-plugins	pi_getscript.txt	/*glvs-plugins*
+glvs-usage	pi_getscript.txt	/*glvs-usage*
 gm	motion.txt	/*gm*
+gnat#Insert_Tags_Header()	ada.txt	/*gnat#Insert_Tags_Header()*
+gnat#New()	ada.txt	/*gnat#New()*
+gnat-xref	ada.txt	/*gnat-xref*
+gnat_members	ada.txt	/*gnat_members*
 gnome-session	gui_x11.txt	/*gnome-session*
 go	motion.txt	/*go*
 gp	change.txt	/*gp*
@@ -5621,7 +5772,6 @@ gvimrc	gui.txt	/*gvimrc*
 gw	change.txt	/*gw*
 gwgw	change.txt	/*gwgw*
 gww	change.txt	/*gww*
-gx	pi_netrw.txt	/*gx*
 gzip	pi_gzip.txt	/*gzip*
 gzip-autocmd	pi_gzip.txt	/*gzip-autocmd*
 gzip-example	autocmd.txt	/*gzip-example*
@@ -5636,11 +5786,13 @@ has()	eval.txt	/*has()*
 has-patch	eval.txt	/*has-patch*
 has_key()	eval.txt	/*has_key()*
 haskell.vim	syntax.txt	/*haskell.vim*
+haslocaldir()	eval.txt	/*haslocaldir()*
 hasmapto()	eval.txt	/*hasmapto()*
 hebrew	hebrew.txt	/*hebrew*
 hebrew.txt	hebrew.txt	/*hebrew.txt*
 help	various.txt	/*help*
 help-context	help.txt	/*help-context*
+help-summary	usr_02.txt	/*help-summary*
 help-translated	various.txt	/*help-translated*
 help-xterm-window	various.txt	/*help-xterm-window*
 help.txt	help.txt	/*help.txt*
@@ -6162,6 +6314,9 @@ mouse-mode-table	term.txt	/*mouse-mode-t
 mouse-overview	term.txt	/*mouse-overview*
 mouse-swap-buttons	term.txt	/*mouse-swap-buttons*
 mouse-using	term.txt	/*mouse-using*
+mouse_col-variable	eval.txt	/*mouse_col-variable*
+mouse_lnum-variable	eval.txt	/*mouse_lnum-variable*
+mouse_win-variable	eval.txt	/*mouse_win-variable*
 movement	intro.txt	/*movement*
 ms-dos	os_msdos.txt	/*ms-dos*
 msdos	os_msdos.txt	/*msdos*
@@ -6232,10 +6387,7 @@ netbeans.txt	netbeans.txt	/*netbeans.txt
 netreadfixup	pi_netrw.txt	/*netreadfixup*
 netrw	pi_netrw.txt	/*netrw*
 netrw--	pi_netrw.txt	/*netrw--*
-netrw-B	pi_netrw.txt	/*netrw-B*
 netrw-D	pi_netrw.txt	/*netrw-D*
-netrw-NB	pi_netrw.txt	/*netrw-NB*
-netrw-Nb	pi_netrw.txt	/*netrw-Nb*
 netrw-O	pi_netrw.txt	/*netrw-O*
 netrw-P	pi_netrw.txt	/*netrw-P*
 netrw-R	pi_netrw.txt	/*netrw-R*
@@ -6243,7 +6395,6 @@ netrw-S	pi_netrw.txt	/*netrw-S*
 netrw-U	pi_netrw.txt	/*netrw-U*
 netrw-a	pi_netrw.txt	/*netrw-a*
 netrw-activate	pi_netrw.txt	/*netrw-activate*
-netrw-b	pi_netrw.txt	/*netrw-b*
 netrw-bookmark	pi_netrw.txt	/*netrw-bookmark*
 netrw-bookmarks	pi_netrw.txt	/*netrw-bookmarks*
 netrw-browse	pi_netrw.txt	/*netrw-browse*
@@ -6258,6 +6409,8 @@ netrw-cr	pi_netrw.txt	/*netrw-cr*
 netrw-credits	pi_netrw.txt	/*netrw-credits*
 netrw-ctrl-h	pi_netrw.txt	/*netrw-ctrl-h*
 netrw-ctrl-l	pi_netrw.txt	/*netrw-ctrl-l*
+netrw-ctrl_h	pi_netrw.txt	/*netrw-ctrl_h*
+netrw-ctrl_l	pi_netrw.txt	/*netrw-ctrl_l*
 netrw-curdir	pi_netrw.txt	/*netrw-curdir*
 netrw-d	pi_netrw.txt	/*netrw-d*
 netrw-debug	pi_netrw.txt	/*netrw-debug*
@@ -6274,9 +6427,12 @@ netrw-externapp	pi_netrw.txt	/*netrw-ext
 netrw-file	pi_netrw.txt	/*netrw-file*
 netrw-fixup	pi_netrw.txt	/*netrw-fixup*
 netrw-ftp	pi_netrw.txt	/*netrw-ftp*
+netrw-gb	pi_netrw.txt	/*netrw-gb*
+netrw-gx	pi_netrw.txt	/*netrw-gx*
 netrw-handler	pi_netrw.txt	/*netrw-handler*
 netrw-help	pi_netrw.txt	/*netrw-help*
 netrw-hexplore	pi_netrw.txt	/*netrw-hexplore*
+netrw-hiding	pi_netrw.txt	/*netrw-hiding*
 netrw-history	pi_netrw.txt	/*netrw-history*
 netrw-horiz	pi_netrw.txt	/*netrw-horiz*
 netrw-i	pi_netrw.txt	/*netrw-i*
@@ -6284,7 +6440,10 @@ netrw-incompatible	pi_netrw.txt	/*netrw-
 netrw-list	pi_netrw.txt	/*netrw-list*
 netrw-listbookmark	pi_netrw.txt	/*netrw-listbookmark*
 netrw-listhack	pi_netrw.txt	/*netrw-listhack*
+netrw-login	pi_netrw.txt	/*netrw-login*
 netrw-maps	pi_netrw.txt	/*netrw-maps*
+netrw-mb	pi_netrw.txt	/*netrw-mb*
+netrw-ml_get	pi_netrw.txt	/*netrw-ml_get*
 netrw-move	pi_netrw.txt	/*netrw-move*
 netrw-netrc	pi_netrw.txt	/*netrw-netrc*
 netrw-nexplore	pi_netrw.txt	/*netrw-nexplore*
@@ -6299,7 +6458,11 @@ netrw-p3	pi_netrw.txt	/*netrw-p3*
 netrw-p4	pi_netrw.txt	/*netrw-p4*
 netrw-p5	pi_netrw.txt	/*netrw-p5*
 netrw-p6	pi_netrw.txt	/*netrw-p6*
+netrw-p7	pi_netrw.txt	/*netrw-p7*
+netrw-p8	pi_netrw.txt	/*netrw-p8*
+netrw-p9	pi_netrw.txt	/*netrw-p9*
 netrw-passwd	pi_netrw.txt	/*netrw-passwd*
+netrw-password	pi_netrw.txt	/*netrw-password*
 netrw-path	pi_netrw.txt	/*netrw-path*
 netrw-pexplore	pi_netrw.txt	/*netrw-pexplore*
 netrw-preview	pi_netrw.txt	/*netrw-preview*
@@ -6307,6 +6470,7 @@ netrw-problems	pi_netrw.txt	/*netrw-prob
 netrw-protocol	pi_netrw.txt	/*netrw-protocol*
 netrw-prvwin	pi_netrw.txt	/*netrw-prvwin*
 netrw-pscp	pi_netrw.txt	/*netrw-pscp*
+netrw-psftp	pi_netrw.txt	/*netrw-psftp*
 netrw-putty	pi_netrw.txt	/*netrw-putty*
 netrw-q	pi_netrw.txt	/*netrw-q*
 netrw-r	pi_netrw.txt	/*netrw-r*
@@ -6319,15 +6483,19 @@ netrw-settings	pi_netrw.txt	/*netrw-sett
 netrw-sexplore	pi_netrw.txt	/*netrw-sexplore*
 netrw-sort	pi_netrw.txt	/*netrw-sort*
 netrw-sortsequence	pi_netrw.txt	/*netrw-sortsequence*
+netrw-source	pi_netrw.txt	/*netrw-source*
 netrw-starpat	pi_netrw.txt	/*netrw-starpat*
 netrw-starstar	pi_netrw.txt	/*netrw-starstar*
 netrw-starstarpat	pi_netrw.txt	/*netrw-starstarpat*
 netrw-start	pi_netrw.txt	/*netrw-start*
+netrw-t	pi_netrw.txt	/*netrw-t*
+netrw-texplore	pi_netrw.txt	/*netrw-texplore*
 netrw-transparent	pi_netrw.txt	/*netrw-transparent*
 netrw-u	pi_netrw.txt	/*netrw-u*
 netrw-uidpass	pi_netrw.txt	/*netrw-uidpass*
 netrw-updir	pi_netrw.txt	/*netrw-updir*
 netrw-urls	pi_netrw.txt	/*netrw-urls*
+netrw-userpass	pi_netrw.txt	/*netrw-userpass*
 netrw-v	pi_netrw.txt	/*netrw-v*
 netrw-var	pi_netrw.txt	/*netrw-var*
 netrw-variables	pi_netrw.txt	/*netrw-variables*
@@ -6415,8 +6583,10 @@ new-vimgrep	version7.txt	/*new-vimgrep*
 new-virtedit	version6.txt	/*new-virtedit*
 news	intro.txt	/*news*
 nextnonblank()	eval.txt	/*nextnonblank()*
+nice	todo.txt	/*nice*
 no-eval-feature	eval.txt	/*no-eval-feature*
 no_buffers_menu	gui.txt	/*no_buffers_menu*
+non-greedy	pattern.txt	/*non-greedy*
 normal-index	index.txt	/*normal-index*
 not-compatible	usr_01.txt	/*not-compatible*
 not-edited	editing.txt	/*not-edited*
@@ -6523,6 +6693,7 @@ photon-gui	os_qnx.txt	/*photon-gui*
 php.vim	syntax.txt	/*php.vim*
 php3.vim	syntax.txt	/*php3.vim*
 phtml.vim	syntax.txt	/*phtml.vim*
+pi_getscript.txt	pi_getscript.txt	/*pi_getscript.txt*
 pi_gzip.txt	pi_gzip.txt	/*pi_gzip.txt*
 pi_netrw.txt	pi_netrw.txt	/*pi_netrw.txt*
 pi_paren.txt	pi_paren.txt	/*pi_paren.txt*
@@ -6694,6 +6865,7 @@ replacing	change.txt	/*replacing*
 replacing-ex	insert.txt	/*replacing-ex*
 reselect-Visual	visual.txt	/*reselect-Visual*
 resolve()	eval.txt	/*resolve()*
+restore-cursor	usr_05.txt	/*restore-cursor*
 restore-position	tips.txt	/*restore-position*
 restricted-mode	starting.txt	/*restricted-mode*
 retab-example	change.txt	/*retab-example*
@@ -6761,8 +6933,6 @@ s/\r	change.txt	/*s\/\\r*
 s/\t	change.txt	/*s\/\\t*
 s/\u	change.txt	/*s\/\\u*
 s/\~	change.txt	/*s\/\\~*
-s:netrw_col	pi_netrw.txt	/*s:netrw_col*
-s:netrw_line	pi_netrw.txt	/*s:netrw_line*
 s:var	eval.txt	/*s:var*
 s<CR>	change.txt	/*s<CR>*
 sandbox	eval.txt	/*sandbox*
@@ -6775,6 +6945,7 @@ script	usr_41.txt	/*script*
 script-here	if_perl.txt	/*script-here*
 script-local	map.txt	/*script-local*
 script-variable	eval.txt	/*script-variable*
+scriptnames-dictionary	eval.txt	/*scriptnames-dictionary*
 scriptout-changed	version4.txt	/*scriptout-changed*
 scroll-binding	scroll.txt	/*scroll-binding*
 scroll-cursor	scroll.txt	/*scroll-cursor*
@@ -6832,6 +7003,7 @@ sgml.vim	syntax.txt	/*sgml.vim*
 sh.vim	syntax.txt	/*sh.vim*
 shell-window	tips.txt	/*shell-window*
 shell_error-variable	eval.txt	/*shell_error-variable*
+shellescape()	eval.txt	/*shellescape()*
 shift	intro.txt	/*shift*
 shift-left-right	change.txt	/*shift-left-right*
 short-name-changed	version4.txt	/*short-name-changed*
@@ -7340,6 +7512,8 @@ termresponse-variable	eval.txt	/*termres
 tex-error	syntax.txt	/*tex-error*
 tex-folding	syntax.txt	/*tex-folding*
 tex-math	syntax.txt	/*tex-math*
+tex-morecommands	syntax.txt	/*tex-morecommands*
+tex-package	syntax.txt	/*tex-package*
 tex-runon	syntax.txt	/*tex-runon*
 tex-slow	syntax.txt	/*tex-slow*
 tex-style	syntax.txt	/*tex-style*
@@ -7481,6 +7655,9 @@ v:key	eval.txt	/*v:key*
 v:lang	eval.txt	/*v:lang*
 v:lc_time	eval.txt	/*v:lc_time*
 v:lnum	eval.txt	/*v:lnum*
+v:mouse_col	eval.txt	/*v:mouse_col*
+v:mouse_lnum	eval.txt	/*v:mouse_lnum*
+v:mouse_win	eval.txt	/*v:mouse_win*
 v:prevcount	eval.txt	/*v:prevcount*
 v:profiling	eval.txt	/*v:profiling*
 v:progname	eval.txt	/*v:progname*
@@ -7610,6 +7787,7 @@ various-cmds	various.txt	/*various-cmds*
 various-motions	motion.txt	/*various-motions*
 various.txt	various.txt	/*various.txt*
 vb.vim	syntax.txt	/*vb.vim*
+vba	pi_vimball.txt	/*vba*
 verbose	starting.txt	/*verbose*
 version-5.1	version5.txt	/*version-5.1*
 version-5.2	version5.txt	/*version-5.2*
@@ -7623,6 +7801,7 @@ version-6.1	version6.txt	/*version-6.1*
 version-6.2	version6.txt	/*version-6.2*
 version-6.3	version6.txt	/*version-6.3*
 version-6.4	version6.txt	/*version-6.4*
+version-7.1	version7.txt	/*version-7.1*
 version-variable	eval.txt	/*version-variable*
 version4.txt	version4.txt	/*version4.txt*
 version5.txt	version5.txt	/*version5.txt*
@@ -7648,13 +7827,13 @@ vim-multibyte	intro.txt	/*vim-multibyte*
 vim-script-intro	usr_41.txt	/*vim-script-intro*
 vim-variable	eval.txt	/*vim-variable*
 vim.vim	syntax.txt	/*vim.vim*
+vim7	version7.txt	/*vim7*
 vim:	options.txt	/*vim:*
 vimball	pi_vimball.txt	/*vimball*
 vimball-contents	pi_vimball.txt	/*vimball-contents*
 vimball-extract	pi_vimball.txt	/*vimball-extract*
 vimball-history	pi_vimball.txt	/*vimball-history*
 vimball-manual	pi_vimball.txt	/*vimball-manual*
-vimball-vimballlist	pi_vimball.txt	/*vimball-vimballlist*
 vimdev	intro.txt	/*vimdev*
 vimdiff	diff.txt	/*vimdiff*
 vimfiles	options.txt	/*vimfiles*
@@ -7709,6 +7888,7 @@ warningmsg-variable	eval.txt	/*warningms
 white-space	pattern.txt	/*white-space*
 whitespace	pattern.txt	/*whitespace*
 wildcard	editing.txt	/*wildcard*
+wildcards	editing.txt	/*wildcards*
 win16-!start	gui_w16.txt	/*win16-!start*
 win16-clipboard	gui_w16.txt	/*win16-clipboard*
 win16-colors	gui_w16.txt	/*win16-colors*
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -1,4 +1,4 @@
-*term.txt*      For Vim version 7.0.  Last change: 2006 Apr 30
+*term.txt*      For Vim version 7.1a.  Last change: 2007 Feb 28
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -749,7 +749,7 @@ to be used while keeping the shift key p
 which is editing another buffer, the Visual or Select mode is stopped.
 
 In Normal, Visual and Select mode clicking the right mouse button with the alt
-key pressed causes the Visual area to become blockwise.  When 'mousemodel is
+key pressed causes the Visual area to become blockwise.  When 'mousemodel' is
 "popup" the left button has to be used with the alt key.  Note that this won't
 work on systems where the window manager consumes the mouse events when the
 alt key is pressed (it may move the window).
--- a/runtime/doc/tips.txt
+++ b/runtime/doc/tips.txt
@@ -1,4 +1,4 @@
-*tips.txt*      For Vim version 7.0.  Last change: 2006 Apr 30
+*tips.txt*      For Vim version 7.1a.  Last change: 2006 Jul 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -149,8 +149,8 @@ these two variables are the correct plac
 sequences should go.
 
 Compare your xterm termcap entry (found in /etc/termcap) with your xterm
-terminfo entry (retrieved with /usr/5bin/infocmp -C xterm).  Both should
-contain entries similar to: >
+terminfo entry (retrieved with "infocmp -C xterm").  Both should contain
+entries similar to: >
 	:te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:
 
 PS: If you find any difference, someone (your sysadmin?) should better check
--- a/runtime/doc/uganda.txt
+++ b/runtime/doc/uganda.txt
@@ -1,4 +1,4 @@
-*uganda.txt*    For Vim version 7.0.  Last change: 2006 Apr 24
+*uganda.txt*    For Vim version 7.1a.  Last change: 2007 May 05
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -13,6 +13,7 @@ below or visit the ICCF web site, availa
 
 	http://iccf-holland.org/
 	http://www.vim.org/iccf/
+	http://www.iccf.nl/
 
 You can also sponsor the development of Vim.  Vim sponsors can vote for
 features.  See |sponsor|.  The money goes to Uganda anyway.
@@ -211,21 +212,12 @@ Sending money:						*iccf-donations*
 Check the ICCF web site for the latest information!  See |iccf| for the URL.
 
 
-USA:		The methods mentioned below can be used.  Alternatively, you
-		can send a check to the Nehemiah Group Outreach Society
-		(NGOS).  This will reduce banking costs and you can get an IRS
-		tax receipt.  The NGOS forwards the funds directly to the
-		Kibaale project in Uganda.  Checks must be made payable to
-		NGOS but please note on the check "donation Kibaale".  Mail
-		checks to:
-			NGOS
-			P.O. Box 50862
-			Indianapolis, IN 45250
-		Questions regarding the Nehemiah Group Outreach Society (NGOS)
-		should be directed to: Ross deMerchant, Executive Director -
-		r.demerchant AT sbcglobal DOT net.
-		For sponsoring a child contact KCF in Canada (see below) and
-		send the check to NGOS in Indianapolis.
+USA:		The methods mentioned below can be used.
+		Sending a check to the Nehemiah Group Outreach Society (NGOS)
+		is no longer possible, unfortunately. We are looking for
+		another way to get you an IRS tax receipt. 
+		For sponsoring a child contact KCF in Canada (see below). US
+		checks can be send to them to lower banking costs.
 
 Canada:		Contact Kibaale Children's Fund (KCF) in Surrey, Canada.  They
 		take care of the Canadian sponsors for the children in
@@ -264,7 +256,7 @@ Europe:		Use a bank transfer if possible
 Credit Card:	You can use PayPal to send money with a Credit card.  This is
 		the most widely used Internet based payment system.  It's
 		really simple to use.  Use this link to find more info:
-		    https://www.paypal.com/affil/pal=Bram%40iccf-holland.org
+		    https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q
 		The e-mail address for sending the money to is:
 		    Bram@iccf-holland.org
 		For amounts above 400 Euro ($500) sending a check is
--- a/runtime/doc/undo.txt
+++ b/runtime/doc/undo.txt
@@ -1,4 +1,4 @@
-*undo.txt*      For Vim version 7.0.  Last change: 2006 Apr 30
+*undo.txt*      For Vim version 7.1a.  Last change: 2006 Apr 30
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/usr_02.txt
+++ b/runtime/doc/usr_02.txt
@@ -1,4 +1,4 @@
-*usr_02.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_02.txt*	For Vim version 7.1a.  Last change: 2007 Feb 28
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -302,7 +302,7 @@ edited.  Typing this command twice cance
 
 The "U" command is a change by itself, which the "u" command undoes and CTRL-R
 redoes.  This might be a bit confusing.  Don't worry, with "u" and CTRL-R you
-can go to any of the situations you had.  More about that in section ||.
+can go to any of the situations you had.  More about that in section |32.1|.
 
 ==============================================================================
 *02.6*	Other editing commands
@@ -497,6 +497,66 @@ You can use the error ID at the start to
 
 	:help E37
 
+
+Summary: 					*help-summary*  >
+	:help
+<		Gives you very general help.  Scroll down to see a list of all
+		helpfiles, including those added locally (i.e. not distributed
+		with Vim). >
+	:help user-toc.txt
+<		Table of contents of the User Manual. >
+	:help :subject
+<		Ex-command "subject", for instance the following: >
+	:help :help
+<		Help on getting help. >
+	:help abc
+<		normal-mode command "abc". >
+	:help CTRL-B
+<		Control key <C-B> in Normal mode. >
+	:help i_abc
+	:help i_CTRL-B
+<		The same in Insert mode. >
+	:help v_abc
+	:help v_CTRL-B
+<		The same in Visual mode. >
+	:help c_abc
+	:help c_CTRL-B
+<		The same in Command-line mode. >
+	:help 'subject'
+<		Option 'subject'. >
+	:help subject()
+<		Function "subject". >
+	:help -subject
+<		Command-line option "-subject". >
+	:help +subject
+<		Compile-time feature "+subject'. >
+	:help EventName
+<		Autocommand event "EventName". >
+	:help digraphs.txt
+<		The top of the helpfile "digraph.txt".
+		Similarly for any other helpfile. >
+	:help pattern<Tab>
+<		Find a help tag starting with "pattern".  Repeat <Tab> for
+		others. >
+	:help pattern<Ctrl-D>
+<		See all possible help tag matches "pattern" at once. >
+	:helpgrep pattern
+<		Search the whole text of all help files for pattern "pattern".
+		Jumps to the first match.  Jump to other matches with: >
+	    :cn
+<			next match >
+	    :cprev
+	    :cN
+<			previous match >
+	    :cfirst
+	    :clast
+<			first or last match >
+	    :copen
+	    :cclose
+<			open/close the quickfix window; press <Enter> to jump
+			to the item under the cursor
+
+
 ==============================================================================
 
 Next chapter: |usr_03.txt|  Moving around
--- a/runtime/doc/usr_03.txt
+++ b/runtime/doc/usr_03.txt
@@ -1,4 +1,4 @@
-*usr_03.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_03.txt*	For Vim version 7.1a.  Last change: 2006 Jun 21
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -606,7 +606,7 @@ NAMED MARKS							*bookmark*
 Vim enables you to place your own marks in the text.  The command "ma" marks
 the place under the cursor as mark a.  You can place 26 marks (a through z) in
 your text.  You can't see them, it's just a position that Vim remembers.
-   To go to a mark, use the command `{mark}, where "{mark} is the mark letter.
+   To go to a mark, use the command `{mark}, where {mark} is the mark letter.
 Thus to move to the a mark:
 >
 	`a
@@ -622,7 +622,7 @@ while working on some text near the end 
 
 	ms
 
-The move to the text you want to work on and put the e (end) mark there: >
+Then move to the text you want to work on and put the e (end) mark there: >
 
 	me
 
--- a/runtime/doc/usr_08.txt
+++ b/runtime/doc/usr_08.txt
@@ -1,4 +1,4 @@
-*usr_08.txt*	For Vim version 7.0.  Last change: 2006 Apr 30
+*usr_08.txt*	For Vim version 7.1a.  Last change: 2006 Jul 18
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -197,8 +197,8 @@ unmodified.)
 MOVING BETWEEN WINDOWS
 
 Since you can split windows horizontally and vertically as much as you like,
-you can create any layout of windows.  Then you can use these commands to move
-between them:
+you can create almost any layout of windows.  Then you can use these commands
+to move between them:
 
 	CTRL-W h	move to the window on the left
 	CTRL-W j	move to the window below
@@ -242,7 +242,7 @@ and the type this command: >
 This uses the uppercase letter K.  What happens is that the window is moved to
 the very top.  You will notice that K is again used for moving upwards.
    When you have vertical splits, CTRL-W K will move the current window to the
-top and make it occupy the full with of the Vim window.  If this is your
+top and make it occupy the full width of the Vim window.  If this is your
 layout:
 
 	+-------------------------------------------+
--- a/runtime/doc/usr_09.txt
+++ b/runtime/doc/usr_09.txt
@@ -1,4 +1,4 @@
-*usr_09.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_09.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/usr_10.txt
+++ b/runtime/doc/usr_10.txt
@@ -1,4 +1,4 @@
-*usr_10.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_10.txt*	For Vim version 7.1a.  Last change: 2006 Nov 05
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -183,8 +183,9 @@ results in (starting with the original l
 	Teacher Smith criticized Teacher Johnson today. ~
 
 Other flags include p (print), which causes the ":substitute" command to print
-out each line it changes.  The c (confirm) flag tells ":substitute" to ask you
-for confirmation before it performs each substitution.  Enter the following: >
+out the last line it changes.  The c (confirm) flag tells ":substitute" to ask
+you for confirmation before it performs each substitution.  Enter the
+following: >
 
 	:%s/Professor/Teacher/c
 
--- a/runtime/doc/usr_25.txt
+++ b/runtime/doc/usr_25.txt
@@ -1,4 +1,4 @@
-*usr_25.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_25.txt*	For Vim version 7.1a.  Last change: 2006 Jun 21
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -122,7 +122,7 @@ whole file by typing this: >
 together.  A common mistake is to have a line with a space or Tab.  That's a
 blank line, but not an empty line.
 
-Vim is able format more than just plain text.  See |fo-table| for how to
+Vim is able to format more than just plain text.  See |fo-table| for how to
 change this.  See the 'joinspaces' option to change the number of spaces used
 after a full stop.
    It is possible to use an external program for formatting.  This is useful
--- a/runtime/doc/usr_26.txt
+++ b/runtime/doc/usr_26.txt
@@ -1,4 +1,4 @@
-*usr_26.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_26.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/usr_29.txt
+++ b/runtime/doc/usr_29.txt
@@ -1,4 +1,4 @@
-*usr_29.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_29.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/usr_32.txt
+++ b/runtime/doc/usr_32.txt
@@ -1,4 +1,4 @@
-*usr_32.txt*	For Vim version 7.0.  Last change: 2006 Apr 30
+*usr_32.txt*	For Vim version 7.1a.  Last change: 2006 Apr 30
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/usr_42.txt
+++ b/runtime/doc/usr_42.txt
@@ -1,4 +1,4 @@
-*usr_42.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_42.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/usr_44.txt
+++ b/runtime/doc/usr_44.txt
@@ -1,4 +1,4 @@
-*usr_44.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_44.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/usr_90.txt
+++ b/runtime/doc/usr_90.txt
@@ -1,4 +1,4 @@
-*usr_90.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_90.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/usr_toc.txt
+++ b/runtime/doc/usr_toc.txt
@@ -1,4 +1,4 @@
-*usr_toc.txt*	For Vim version 7.0.  Last change: 2006 Apr 24
+*usr_toc.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
--- a/runtime/doc/version5.txt
+++ b/runtime/doc/version5.txt
@@ -1,4 +1,4 @@
-*version5.txt*  For Vim version 7.0.  Last change: 2006 Apr 24
+*version5.txt*  For Vim version 7.1a.  Last change: 2006 Nov 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1865,7 +1865,7 @@ For ":syntax keyword" the "transparent" 
 mentioned in the help.  But synID() returned wrong name.
 
 "gqG" in a file with one-word-per-line (e.g. a dictionary) was very slow and
-not interruptable.
+not interruptible.
 
 "gq" operator inserted screen lines in the wrong situation.  Now screen
 lines are inserted or deleted when this speeds up displaying.
@@ -2870,7 +2870,7 @@ backspace key.  "\<Del>" produces 0x7f.
 
 The shell syntax didn't contain a "syn sync maxlines" setting.  In a long file
 without recognizable items, syncing took so long it looked like Vim hangs.
-Added a maxlines setting, and made syncing interruptable.
+Added a maxlines setting, and made syncing interruptible.
 
 The "gs" command didn't flush output before waiting.
 
@@ -7578,7 +7578,7 @@ Fixed compiling under NeXT. (Jeroen C.M.
 
 optwin.vim gave an error when used in Vi compatible mode ('cpo' contains 'C').
 
-Tcl interpreter: "buffer" command didn't check for presense of an argument.
+Tcl interpreter: "buffer" command didn't check for presence of an argument.
 (Dave Bodenstab)
 
 dosinst.c: Added checks for too long file name.
--- a/runtime/doc/version6.txt
+++ b/runtime/doc/version6.txt
@@ -1,4 +1,4 @@
-*version6.txt*  For Vim version 7.0.  Last change: 2006 Apr 30
+*version6.txt*  For Vim version 7.1a.  Last change: 2006 Nov 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -11128,7 +11128,7 @@ Solution:   Insert the indent.  Also fix
 Files:	    runtime/doc/eval.txt
 
 Patch 6.2.187
-Problem:    Using Insure++ reveals a number of bugs.  (Dominuque Pelle)
+Problem:    Using Insure++ reveals a number of bugs.  (Dominique Pelle)
 Solution:   Initialize variables where needed.  Free allocated memory to avoid
 	    leaks.  Fix comparing tags to avoid reading past allocated memory.
 Files:	    src/buffer.c, src/diff.c, src/fileio.c, src/mark.c, src/misc1.c,
@@ -14406,7 +14406,7 @@ Files:	    src/normal.c
 Patch 6.3.075
 Problem:    After unloading another buffer, syntax highlighting in the current
 	    buffer may be wrong when it uses "containedin". (Eric Arnold)
-Solution:   Use "buf" intead of "curbuf" in syntax_clear().
+Solution:   Use "buf" instead of "curbuf" in syntax_clear().
 Files:	    src/syntax.c
 
 Patch 6.3.076
--- a/runtime/doc/vim2html.pl
+++ b/runtime/doc/vim2html.pl
@@ -182,7 +182,6 @@ EOF
 }
 
 
-
 sub writeCSS
 {
 	open( CSS, ">vim-stylesheet.css"  ) || die "Couldn't write stylesheet: $!\n";
--- a/runtime/doc/visual.txt
+++ b/runtime/doc/visual.txt
@@ -1,4 +1,4 @@
-*visual.txt*    For Vim version 7.0.  Last change: 2006 Apr 24
+*visual.txt*    For Vim version 7.1a.  Last change: 2006 Sep 26
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -175,7 +175,7 @@ stops when a motion command is used that
 
 For moving the end of the block many commands can be used, but you cannot
 use Ex commands, commands that make changes or abandon the file.  Commands
-(starting with) ".pPiIaAO&", CTRL-^, "Z", CTRL-], CTRL-T, CTRL-R, CTRL-I
+(starting with) ".", "&", CTRL-^, "Z", CTRL-], CTRL-T, CTRL-R, CTRL-I
 and CTRL-O cause a beep and Visual mode continues.
 
 When switching to another window on the same buffer, the cursor position in
--- a/runtime/doc/xxd-it.1
+++ b/runtime/doc/xxd-it.1
@@ -226,7 +226,7 @@ Stampa 3 linee (0x30 bytes esadecimali) 
 \fI% xxd \-s \-0x30 file
 .PP
 .br
-Stampa 120 bytes come immagine esadecimale continua con 40 bytes per linea.
+Stampa 120 bytes come immagine esadecimale continua con 20 bytes per linea.
 .br
 \fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
 
--- a/runtime/doc/xxd-pl.UTF-8.1
+++ b/runtime/doc/xxd-pl.UTF-8.1
@@ -216,7 +216,7 @@ Wypisz trzy linie (heksowe 0x30 bajtów) z końca
 \fI% xxd \-s \-0x30 plik
 .PP
 .br
-Wypisz 120 bajtów jako ciągły zrzut heksowy z 40 oktetami na linię.
+Wypisz 120 bajtów jako ciągły zrzut heksowy z 20 oktetami na linię.
 .br
 \fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
 .br
--- a/runtime/doc/xxd-ru.UTF-8.1
+++ b/runtime/doc/xxd-ru.UTF-8.1
@@ -231,7 +231,7 @@ xxd Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ strace(1) или truss(1) в тех ÑлучаÑÑ…, когда применÑетÑÑ ÐºÐ»ÑŽÑ‡
 .PP
 .br
 ВывеÑти 120 байтов в виде непрерывного шеÑтнадцатеричного предÑтавлениÑ
-по 40 октетов в Ñтроке:
+по 20 октетов в Ñтроке:
 .PP
 \fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
 .br
--- a/runtime/ftplugin/ada.vim
+++ b/runtime/ftplugin/ada.vim
@@ -1,223 +1,190 @@
-" Vim Ada plugin file
-" Language:	Ada
-" Maintainer:	Neil Bird <neil@fnxweb.com>
-" Last Change:	2006 Apr 21
-" Version:	$Id$
-" Look for the latest version at http://vim.sourceforge.net/
-"
-" Perform Ada specific completion & tagging.
-"
-"
+"------------------------------------------------------------------------------
+"  Description: Perform Ada specific completion & tagging.
+"     Language: Ada (2005)
+"	   $Id$
+"   Maintainer: Martin Krischik
+"		Neil Bird <neil@fnxweb.com>
+"      $Author$
+"	 $Date$
+"      Version: 4.2
+"    $Revision$
+"     $HeadURL: https://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.
+"		16.07.2006 MK Ada-Mode as vim-ball
+"		02.10.2006 MK Better folding.
+"		15.10.2006 MK Bram's suggestion for runtime integration
+"               05.11.2006 MK Bram suggested not to use include protection for
+"                             autoload
+"		05.11.2006 MK Bram suggested to save on spaces
+"    Help Page: ft-ada-plugin
+"------------------------------------------------------------------------------
 " Provides mapping overrides for tag jumping that figure out the current
 " Ada object and tag jump to that, not the 'simple' vim word.
 " Similarly allows <Ctrl-N> matching of full-length ada entities from tags.
-" Exports 'AdaWord()' function to return full name of Ada entity under the
-" cursor( or at given line/column), stripping whitespace/newlines as necessary.
+"------------------------------------------------------------------------------
 
 " Only do this when not done yet for this buffer
-if exists("b:did_ftplugin")
-  finish
+if exists ("b:did_ftplugin") || version < 700
+   finish
 endif
 
 " Don't load another plugin for this buffer
-let b:did_ftplugin = 1
+let b:did_ftplugin = 38
 
+"
 " Temporarily set cpoptions to ensure the script loads OK
+"
 let s:cpoptions = &cpoptions
-set cpo-=C
+set cpoptions-=C
+
+" Section: Comments {{{1
+"
+setlocal comments=O:--,:--\ \
+setlocal commentstring=--\ \ %s
+setlocal complete=.,w,b,u,t,i
 
-" Ada comments
-setlocal comments+=O:--
-
-" Make local tag mappings for this buffer (if not already set)
-if mapcheck('<C-]>','n') == ''
-  nnoremap <unique> <buffer> <C-]>    :call JumpToTag_ada('')<cr>
-endif
-if mapcheck('g<C-]>','n') == ''
-  nnoremap <unique> <buffer> g<C-]>   :call JumpToTag_ada('','stj')<cr>
+" Section: Tagging {{{1
+"
+if exists ("g:ada_extended_tagging")
+   " Make local tag mappings for this buffer (if not already set)
+   if g:ada_extended_tagging == 'jump'
+      if mapcheck('<C-]>','n') == ''
+	 nnoremap <unique> <buffer> <C-]>    :call ada#Jump_Tag ('', 'tjump')<cr>
+      endif
+      if mapcheck('g<C-]>','n') == ''
+	 nnoremap <unique> <buffer> g<C-]>   :call ada#Jump_Tag ('','stjump')<cr>
+      endif
+   elseif g:ada_extended_tagging == 'list'
+      if mapcheck('<C-]>','n') == ''
+	 nnoremap <unique> <buffer> <C-]>    :call ada#List_Tag ()<cr>
+      endif
+      if mapcheck('g<C-]>','n') == ''
+	 nnoremap <unique> <buffer> g<C-]>   :call ada#List_Tag ()<cr>
+      endif
+   endif
 endif
 
-if mapcheck('<C-N>','i') == ''
-  inoremap <unique> <buffer> <C-N> <C-R>=<SID>AdaCompletion("\<lt>C-N>")<cr>
-endif
-if mapcheck('<C-P>','i') == ''
-  inoremap <unique> <buffer> <C-P> <C-R>=<SID>AdaCompletion("\<lt>C-P>")<cr>
-endif
-if mapcheck('<C-X><C-]>','i') == ''
-  inoremap <unique> <buffer> <C-X><C-]> <C-R>=<SID>AdaCompletion("\<lt>C-X>\<lt>C-]>")<cr>
-endif
-if mapcheck('<bs>','i') == ''
-  inoremap <silent> <unique> <buffer> <bs> <C-R>=<SID>AdaInsertBackspace()<cr>
-endif
-
+" Section: Completion {{{1
+"
+setlocal completefunc=ada#User_Complete
+setlocal omnifunc=adacomplete#Complete
 
-" Only do this when not done yet for this buffer & matchit is used
-if ! exists("b:match_words")  &&  exists("loaded_matchit")
-  " The following lines enable the macros/matchit.vim plugin for
-  " Ada-specific extended matching with the % key.
-  let s:notend = '\%(\<end\s\+\)\@<!'
-  let b:match_words=
-  \ s:notend . '\<if\>:\<elsif\>:\<else\>:\<end\>\s\+\<if\>,' .
-  \ s:notend . '\<case\>:\<when\>:\<end\>\s\+\<case\>,' .
-  \ '\%(\<while\>.*\|\<for\>.*\|'.s:notend.'\)\<loop\>:\<end\>\s\+\<loop\>,' .
-  \ '\%(\<do\>\|\<begin\>\):\<exception\>:\<end\>\s*\%($\|[;A-Z]\),' .
-  \ s:notend . '\<record\>:\<end\>\s\+\<record\>'
-endif
-
-
-" Prevent re-load of functions
-if exists('s:id')
-  finish
+if exists ("g:ada_extended_completion")
+   if mapcheck ('<C-N>','i') == ''
+      inoremap <unique> <buffer> <C-N> <C-R>=ada#Completion("\<lt>C-N>")<cr>
+   endif
+   if mapcheck ('<C-P>','i') == ''
+      inoremap <unique> <buffer> <C-P> <C-R>=ada#Completion("\<lt>C-P>")<cr>
+   endif
+   if mapcheck ('<C-X><C-]>','i') == ''
+      inoremap <unique> <buffer> <C-X><C-]> <C-R>=<SID>ada#Completion("\<lt>C-X>\<lt>C-]>")<cr>
+   endif
+   if mapcheck ('<bs>','i') == ''
+      inoremap <silent> <unique> <buffer> <bs> <C-R>=ada#Insert_Backspace ()<cr>
+   endif
 endif
 
-" Get this script's unique id
-map <script> <SID>?? <SID>??
-let s:id = substitute( maparg('<SID>??'), '^<SNR>\(.*\)_??$', '\1', '' )
-unmap <script> <SID>??
-
-
-" Extract current Ada word across multiple lines
-" AdaWord( [line, column] )\
-let s:AdaWordRegex = '\a\w*\(\_s*\.\_s*\a\w*\)*'
-let s:AdaComment   = "\\v^(\"[^\"]*\"|'.'|[^\"']){-}\\zs\\s*--.*"
-
-function! AdaWord(...)
-  if a:0 > 1
-    let linenr = a:1
-    let colnr  = a:2 - 1
-  else
-    let linenr = line('.')
-    let colnr  = col('.') - 1
-  endif
-  let line = substitute( getline(linenr), s:AdaComment, '', '' )
-  " Cope with tag searching for items in comments; if we are, don't loop
-  " backards looking for previous lines
-  if colnr > strlen(line)
-    " We were in a comment
-    let line = getline(linenr)
-    let search_prev_lines = 0
-  else
-    let search_prev_lines = 1
-  endif
+" Section: Matchit {{{1
+"
+" Only do this when not done yet for this buffer & matchit is used
+"
+if !exists ("b:match_words")  &&
+  \ exists ("loaded_matchit")
+   "
+   " The following lines enable the macros/matchit.vim plugin for
+   " Ada-specific extended matching with the % key.
+   "
+   let s:notend      = '\%(\<end\s\+\)\@<!'
+   let b:match_words =
+      \ s:notend . '\<if\>:\<elsif\>:\<else\>:\<end\>\s\+\<if\>,' .
+      \ s:notend . '\<case\>:\<when\>:\<end\>\s\+\<case\>,' .
+      \ '\%(\<while\>.*\|\<for\>.*\|'.s:notend.'\)\<loop\>:\<end\>\s\+\<loop\>,' .
+      \ '\%(\<do\>\|\<begin\>\):\<exception\>:\<end\>\s*\%($\|[;A-Z]\),' .
+      \ s:notend . '\<record\>:\<end\>\s\+\<record\>'
+endif
 
-  " Go backwards until we find a match (Ada ID) that *doesn't* include our
-  " location - i.e., the previous ID. This is because the current 'correct'
-  " match will toggle matching/not matching as we traverse characters
-  " backwards. Thus, we have to find the previous unrelated match, exclude
-  " it, then use the next full match (ours).
-  " Remember to convert vim column 'colnr' [1..n] to string offset [0..(n-1)]
-  " ... but start, here, one after the required char.
-  let newcol = colnr + 1
-  while 1
-    let newcol = newcol - 1
-    if newcol < 0
-      " Have to include previous line from file
-      let linenr = linenr - 1
-      if linenr < 1  ||  !search_prev_lines
-	" Start of file or matching in a comment
-	let linenr = 1
-	let newcol = 0
-	let ourmatch = match( line, s:AdaWordRegex )
-	break
-      endif
-      " Get previous line, and prepend it to our search string
-      let newline = substitute( getline(linenr), s:AdaComment, '', '' )
-      let newcol  = strlen(newline) - 1
-      let colnr   = colnr + newcol
-      let line    = newline . line
-    endif
-    " Check to see if this is a match excluding 'us'
-    let mend = newcol + matchend( strpart(line,newcol), s:AdaWordRegex ) - 1
-    if mend >= newcol  &&  mend < colnr
-      " Yes
-      let ourmatch = mend+1 + match( strpart(line,mend+1), s:AdaWordRegex )
-      break
-    endif
-  endwhile
+" Section: Compiler {{{1
+"
+if ! exists("current_compiler")			||
+   \ current_compiler != g:ada_default_compiler
+   execute "compiler " . g:ada_default_compiler
+endif
 
-  " Got anything?
-  if ourmatch < 0
-    return ''
-  else
-    let line = strpart( line, ourmatch)
-  endif
+" Section: Folding {{{1
+"
+if exists("g:ada_folding")
+   if g:ada_folding[0] == 'i'
+      setlocal foldmethod=indent
+      setlocal foldignore=--
+      setlocal foldnestmax=5
+   elseif g:ada_folding[0] == 'g'
+      setlocal foldmethod=expr
+      setlocal foldexpr=ada#Pretty_Print_Folding(v:lnum)
+   elseif g:ada_folding[0] == 's'
+      setlocal foldmethod=syntax
+   endif
+   setlocal tabstop=8
+   setlocal softtabstop=3
+   setlocal shiftwidth=3
+endif
 
-  " Now simply add further lines until the match gets no bigger
-  let matchstr = matchstr( line, s:AdaWordRegex )
-  let lastline  = line('$')
-  let linenr    = line('.') + 1
-  while linenr <= lastline
-    let lastmatch = matchstr
-    let line = line . substitute( getline(linenr), s:AdaComment, '', '' )
-    let matchstr = matchstr( line, s:AdaWordRegex )
-    if matchstr == lastmatch
-      break
-    endif
-  endwhile
-
-  " Strip whitespace & return
-  return substitute( matchstr, '\s\+', '', 'g' )
-endfunction
-
-
-" Word tag - include '.' and if Ada make uppercase
-" Name allows a common JumpToTag() to look for an ft specific JumpToTag_ft().
-function! JumpToTag_ada(word,...)
-  if a:word == ''
-    " Get current word
-    let word = AdaWord()
-    if word == ''
-      return
-    endif
-  else
-    let word = a:word
-  endif
-  if a:0 > 0
-    let mode = a:1
-  else
-    let mode = 'tj'
-  endif
+" Section: Abbrev {{{1
+"
+if exists("g:ada_abbrev")
+   iabbrev ret	return
+   iabbrev proc procedure
+   iabbrev pack package
+   iabbrev func function
+endif
 
-  let v:errmsg = ''
-  execute 'silent!' mode word
-  if v:errmsg != ''
-    if v:errmsg =~ '^E426:'  " Tag not found
-      let ignorecase = &ignorecase
-      set ignorecase
-      execute mode word
-      let &ignorecase = ignorecase
-    else
-      " Repeat to give error
-      execute mode word
-    endif
-  endif
-endfunction
-
+" Section: Commands, Mapping, Menus {{{1
+"
+call ada#Map_Popup (
+   \ 'Tag.List',
+   \  'l',
+   \ 'call ada#List_Tag ()')
+call ada#Map_Popup (
+   \'Tag.Jump',
+   \'j',
+   \'call ada#Jump_Tag ()')
+call ada#Map_Menu (
+   \'Tag.Create File',
+   \':AdaTagFile',
+   \'call ada#Create_Tags (''file'')')
+call ada#Map_Menu (
+   \'Tag.Create Dir',
+   \':AdaTagDir',
+   \'call ada#Create_Tags (''dir'')')
 
-" Word completion (^N/^R/^X^]) - force '.' inclusion
-function! s:AdaCompletion(cmd)
-  set iskeyword+=46
-  return a:cmd . "\<C-R>=<SNR>" . s:id . "_AdaCompletionEnd()\<CR>"
-endfunction
-function! s:AdaCompletionEnd()
-  set iskeyword-=46
-  return ''
-endfunction
-
+call ada#Map_Menu (
+   \'Highlight.Toggle Space Errors',
+   \ ':AdaSpaces',
+   \'call ada#Switch_Syntax_Option (''space_errors'')')
+call ada#Map_Menu (
+   \'Highlight.Toggle Lines Errors',
+   \ ':AdaLines',
+   \'call ada#Switch_Syntax_Option (''line_errors'')')
+call ada#Map_Menu (
+   \'Highlight.Toggle Rainbow Color',
+   \ ':AdaRainbow',
+   \'call ada#Switch_Syntax_Option (''rainbow_color'')')
+call ada#Map_Menu (
+   \'Highlight.Toggle Standard Types',
+   \ ':AdaTypes',
+   \'call ada#Switch_Syntax_Option (''standard_types'')')
 
-" Backspace at end of line after auto-inserted commentstring '-- ' wipes it
-function! s:AdaInsertBackspace()
-  let line = getline('.')
-  if col('.') > strlen(line) && match(line,'-- $') != -1 && match(&comments,'--') != -1
-    return "\<bs>\<bs>\<bs>"
-  else
-    return "\<bs>"
-  endif
-endfunction
-
-
+" 1}}}
 " Reset cpoptions
 let &cpoptions = s:cpoptions
 unlet s:cpoptions
 
-" vim: sts=2 sw=2 :
+finish " 1}}}
+
+"------------------------------------------------------------------------------
+"   Copyright (C) 2006	Martin Krischik
+"
+"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
+"------------------------------------------------------------------------------
+" vim: textwidth=78 nowrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
+" vim: foldmethod=marker
new file mode 100644
--- /dev/null
+++ b/runtime/ftplugin/bst.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin file
+" Language:	bst
+" Author:	Tim Pope <vimNOSPAM@tpope.info>
+" $Id$
+
+if exists("b:did_ftplugin")
+    finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=%\ %s
+setlocal comments=:%
+setlocal fo-=t fo+=croql
+
+let b:undo_ftplugin = "setlocal com< cms< fo<"
new file mode 100644
--- /dev/null
+++ b/runtime/ftplugin/cobol.vim
@@ -0,0 +1,266 @@
+" Vim filetype plugin file
+" Language:	cobol
+" Author:	Tim Pope <vimNOSPAM@tpope.info>
+" $Id$
+
+" Insert mode mappings: <C-T> <C-D> <Tab>
+" Normal mode mappings: < > << >> [[ ]] [] ][
+" Visual mode mappings: < >
+
+if exists("b:did_ftplugin")
+    finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal commentstring=\ \ \ \ \ \ *%s
+setlocal comments=:*
+setlocal fo+=croqlt
+setlocal expandtab
+setlocal textwidth=72
+
+" matchit support
+if exists("loaded_matchit")
+    let s:ordot = '\|\ze\.\%( \@=\|$\)'
+    let b:match_ignorecase=1
+    "let b:match_skip = 'getline(".") =~ "^.\\{6\\}[*/C]"'
+    let b:match_words=
+    \ '\$if\>:$else\>:\$endif\>,' .
+    \ '[$-]\@<!\<if\>:\<\%(then\|else\)\>:\<end-if\>'.s:ordot.',' .
+    \ '-\@<!\<perform\s\+\%(\d\+\s\+times\|until\|varying\|with\s\+test\)\>:\<end-perform\>'.s:ordot . ',' .
+    \ '-\@<!\<\%(search\|evaluate\)\>:\<\%(when\)\>:\<end-\%(search\|evaluate\)\>' .s:ordot . ',' .
+    \ '-\@<!\<\%(add\|compute\|divide\|multiply\|subtract\)\>\%(.*\(\%$\|\%(\n\%(\%(\s*\|.\{6\}\)[*/].*\n\)*\)\=\s*\%(not\s\+\)\=on\s\+size\s\+error\>\)\)\@=:\%(\<not\s\+\)\@<!\<\%(not\s\+\)\=on\s\+size\s\+error\>:\<end-\%(add\|compute\|divide\|multiply\|subtract\)\>' .s:ordot . ',' .
+    \ '-\@<!\<\%(string\|unstring\|accept\|display\|call\)\>\%(.*\(\%$\|\%(\n\%(\%(\s*\|.\{6\}\)[*/].*\n\)*\)\=\s*\%(not\s\+\)\=on\s\+\%(overflow\|exception\)\>\)\)\@=:\%(\<not\s\+\)\@<!\<\%(not\s\+\)\=on\s\+\%(overflow\|exception\)\>:\<end-\%(string\|unstring\|accept\|display\|call\)\>' .s:ordot . ',' .
+    \ '-\@<!\<\%(delete\|rewrite\|start\|write\|read\)\>\%(.*\(\%$\|\%(\n\%(\%(\s*\|.\{6\}\)[*/].*\n\)*\)\=\s*\%(invalid\s\+key\|at\s\+end\|no\s\+data\|at\s\+end-of-page\)\>\)\)\@=:\%(\<not\s\+\)\@<!\<\%(not\s\+\)\=\%(invalid\s\+key\|at\s\+end\|no\s\+data\|at\s\+end-of-page\)\>:\<end-\%(delete\|rewrite\|start\|write\|read\)\>' .s:ordot
+endif
+
+if has("gui_win32") && !exists("b:browsefilter")
+  let b:browsefilter = "COBOL Source Files (*.cbl, *.cob)\t*.cbl;*.cob;*.lib\n".
+		     \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setlocal com< cms< fo< et< tw<" .
+            \ " | unlet! b:browsefilter b:match_words b:match_ignorecase b:match_skip"
+if !exists("g:no_plugin_maps") && !exists("g:no_cobol_maps")
+    let b:undo_ftplugin = b:undo_ftplugin .
+            \ " | sil! exe 'nunmap <buffer> <'" .
+            \ " | sil! exe 'nunmap <buffer> >'" .
+            \ " | sil! exe 'nunmap <buffer> <<'" .
+            \ " | sil! exe 'nunmap <buffer> >>'" .
+            \ " | sil! exe 'vunmap <buffer> <'" .
+            \ " | sil! exe 'vunmap <buffer> >'" .
+            \ " | sil! exe 'iunmap <buffer> <C-D>'" .
+            \ " | sil! exe 'iunmap <buffer> <C-T>'" .
+            \ " | sil! exe 'iunmap <buffer> <Tab>'" .
+            \ " | sil! exe 'nunmap <buffer> <Plug>Traditional'" .
+            \ " | sil! exe 'nunmap <buffer> <Plug>Comment'" .
+            \ " | sil! exe 'nunmap <buffer> <Plug>DeComment'" .
+            \ " | sil! exe 'vunmap <buffer> <Plug>VisualTraditional'" .
+            \ " | sil! exe 'vunmap <buffer> <Plug>VisualComment'" .
+            \ " | sil! exe 'iunmap <buffer> <Plug>VisualDeComment'" .
+            \ " | sil! exe 'unmap  <buffer> [['" .
+            \ " | sil! exe 'unmap  <buffer> ]]'" .
+            \ " | sil! exe 'unmap  <buffer> []'" .
+            \ " | sil! exe 'unmap  <buffer> ]['"
+endif
+
+if !exists("g:no_plugin_maps") && !exists("g:no_cobol_maps")
+    if version >= 700
+        nnoremap <silent> <buffer> > :set opfunc=<SID>IncreaseFunc<CR>g@
+        nnoremap <silent> <buffer> < :set opfunc=<SID>DecreaseFunc<CR>g@
+    endif
+    nnoremap <silent> <buffer> >> :call CobolIndentBlock(1)<CR>
+    nnoremap <silent> <buffer> << :call CobolIndentBlock(-1)<CR>
+    vnoremap <silent> <buffer> > :call CobolIndentBlock(v:count1)<CR>
+    vnoremap <silent> <buffer> < :call CobolIndentBlock(-v:count1)<CR>
+    inoremap <silent> <buffer> <C-T> <C-R>=<SID>IncreaseIndent()<CR><C-R>=<SID>RestoreShiftwidth()<CR>
+    inoremap <silent> <buffer> <C-D> <C-R>=<SID>DecreaseIndent()<CR><C-R>=<SID>RestoreShiftwidth()<CR>
+    if !maparg("<Tab>","i")
+        inoremap <silent> <buffer> <Tab> <C-R>=<SID>Tab()<CR><C-R>=<SID>RestoreShiftwidth()<CR>
+    endif
+    noremap <silent> <buffer> [[ m':call search('\c^\%(\s*\<Bar>.\{6\}\s\+\)\zs[A-Za-z0-9-]\+\s\+\%(division\<Bar>section\)\s*\.','bW')<CR>
+    noremap <silent> <buffer> ]] m':call search('\c^\%(\s*\<Bar>.\{6\}\s\+\)\zs[A-Za-z0-9-]\+\s\+\%(division\<Bar>section\)\.','W')<CR>
+    noremap <silent> <buffer> [] m':call <SID>toend('b')<CR>
+    noremap <silent> <buffer> ][ m':call <SID>toend('')<CR>
+    " For EnhancedCommentify
+    noremap <silent> <buffer> <Plug>Traditional      :call <SID>Comment('t')<CR>
+    noremap <silent> <buffer> <Plug>Comment          :call <SID>Comment('c')<CR>
+    noremap <silent> <buffer> <Plug>DeComment        :call <SID>Comment('u')<CR>
+    noremap <silent> <buffer> <Plug>VisualTraditional :'<,'>call <SID>Comment('t')<CR>
+    noremap <silent> <buffer> <Plug>VisualComment     :'<,'>call <SID>Comment('c')<CR>
+    noremap <silent> <buffer> <Plug>VisualDeComment   :'<,'>call <SID>Comment('u')<CR>
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+if exists("g:did_cobol_ftplugin_functions")
+    finish
+endif
+let g:did_cobol_ftplugin_functions = 1
+
+function! s:repeat(str,count)
+    let i = 0
+    let ret = ""
+    while i < a:count
+        let ret = ret . a:str
+        let i = i + 1
+    endwhile
+    return ret
+endfunction
+
+function! s:increase(...)
+    let lnum = '.'
+    let sw = &shiftwidth
+    let i = a:0 ? a:1 : indent(lnum)
+    if i >= 11
+        return sw - (i - 11) % sw
+    elseif i >= 7
+        return 11-i
+    elseif i == 6
+        return 1
+    else
+        return 6-i
+    endif
+endfunction
+
+function! s:decrease(...)
+    let lnum = '.'
+    let sw = &shiftwidth
+    let i = indent(a:0 ? a:1 : lnum)
+    if i >= 11 + sw
+        return 1 + (i + 12) % sw
+    elseif i > 11
+        return i-11
+    elseif i > 7
+        return i-7
+    elseif i == 7
+        return 1
+    else
+        return i
+    endif
+endfunction
+
+function! CobolIndentBlock(shift)
+    let head = strpart(getline('.'),0,7)
+    let tail = strpart(getline('.'),7)
+    let indent = match(tail,'[^ ]')
+    let sw = &shiftwidth
+    let shift = a:shift
+    if shift > 0
+        if indent < 4
+            let tail = s:repeat(" ",4-indent).tail
+            let shift = shift - 1
+        endif
+        let tail = s:repeat(" ",shift*sw).tail
+        let shift = 0
+    elseif shift < 0
+        if (indent-4) > -shift * sw
+            let tail = strpart(tail,-shift * sw)
+        elseif (indent-4) > (-shift-1) * sw
+            let tail = strpart(tail,indent - 4)
+        else
+            let tail = strpart(tail,indent)
+        endif
+    endif
+    call setline('.',head.tail)
+endfunction
+
+function! s:IncreaseFunc(type)
+    '[,']call CobolIndentBlock(1)
+endfunction
+
+function! s:DecreaseFunc(type)
+    '[,']call CobolIndentBlock(-1)
+endfunction
+
+function! s:IncreaseIndent()
+    let c = "\<C-T>"
+    if exists("*InsertCtrlTWrapper")
+        let key = InsertCtrlTWrapper()
+        if key != c
+            return key
+        endif
+    endif
+    let interval = s:increase()
+    let b:cobol_shiftwidth = &shiftwidth
+    let &shiftwidth = 1
+    let lastchar = strpart(getline('.'),col('.')-2,1)
+    if lastchar == '0' || lastchar == '^'
+        return "\<BS>".lastchar.c
+    else
+        return s:repeat(c,interval)
+    endif
+endfunction
+
+function! s:DecreaseIndent()
+    let c = "\<C-D>"
+    if exists("*InsertCtrlDWrapper")
+        " I hack Ctrl-D to delete when not at the end of the line.
+        let key = InsertCtrlDWrapper()
+        if key != c
+            return key
+        endif
+    endif
+    let interval = s:decrease()
+    let b:cobol_shiftwidth = &shiftwidth
+    let &shiftwidth = 1
+    return s:repeat(c,interval)
+endfunction
+
+function! s:RestoreShiftwidth()
+    if exists("b:cobol_shiftwidth")
+        let &shiftwidth=b:cobol_shiftwidth
+        unlet b:cobol_shiftwidth
+    endif
+    return ""
+endfunction
+
+function! s:Tab()
+    if (strpart(getline('.'),0,col('.')-1) =~ '^\s*$' && &sta)
+        return s:IncreaseIndent()
+    elseif &sts == &sw && &sts != 8 && &et
+        return s:repeat(" ",s:increase(col('.')-1))
+    else
+        return "\<Tab>"
+    endif
+endfunction
+
+function! s:Comment(arg)
+    " For EnhancedCommentify
+    let line = getline('.')
+    if (line =~ '^.\{6\}[*/C]' || a:arg == 'c') && a:arg != 'u'
+        let line = substitute(line,'^.\{6\}\zs.',' ','')
+    else
+        let line = substitute(line,'^.\{6\}\zs.','*','')
+    endif
+    call setline('.',line)
+endfunction
+
+function! s:toend(direction)
+    let ignore = '^\(\s*\|.\{6\}\)\%([*/]\|\s*$\)'
+    let keep = line('.')
+    keepjumps +
+    while line('.') < line('$') && getline('.') =~ ignore
+        keepjumps +
+    endwhile
+    let res = search('\c^\%(\s*\|.\{6\}\s\+\)\zs[A-Za-z0-9-]\+\s\+\%(division\|section\)\s*\.',a:direction.'W')
+    if a:direction != 'b' && !res
+        let res = line('$')
+        keepjumps $
+    elseif res
+        keepjumps -
+    endif
+    if res
+        while line('.') > 1 && getline('.') =~ ignore
+            keepjumps -
+        endwhile
+        if line('.') == 1 && getline('.') =~ ignore
+            exe "keepjumps ".keep
+        endif
+    else
+        exe "keepjumps ".keep
+    endif
+endfunction
--- a/runtime/ftplugin/debchangelog.vim
+++ b/runtime/ftplugin/debchangelog.vim
@@ -2,14 +2,14 @@
 " Language:	Debian Changelog
 " Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
 "		Stefano Zacchiroli <zack@debian.org>
-" Last Change:	$LastChangedDate: 2006-04-28 12:15:12 -0400 (ven, 28 apr 2006) $
+" Last Change:	$LastChangedDate: 2006-08-24 23:41:26 +0200 (gio, 24 ago 2006) $
 " License:	GNU GPL, version 2.0 or later
 " URL:		http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/ftplugin/debchangelog.vim?op=file&rev=0&sc=0
 
 if exists("b:did_ftplugin")
   finish
 endif
-let b:did_ftplugin = 1
+let b:did_ftplugin=1
 
 " {{{1 Local settings (do on every load)
 setlocal foldmethod=expr
@@ -227,21 +227,22 @@ augroup END
 " }}}
 " {{{1 folding
 
-" look for an author name searching backward from a given line number
-function! s:getAuthor(lnum)
-  let line = getline(a:lnum)
-  let backsteps = 0
-  while line !~ '^ --'
-    let backsteps += 1
-    let line = getline(a:lnum - backsteps)
+" look for an author name in the [zonestart zoneend] lines searching backward
+function! s:getAuthor(zonestart, zoneend)
+  let linepos = a:zoneend
+  while linepos >= a:zonestart
+    let line = getline(linepos)
+    if line =~ '^ --'
+      return substitute(line, '^ --\s*\([^<]\+\)\s*.*', '\1', '')
+    endif
+    let linepos -= 1
   endwhile
-  let author = substitute(line, '^ --\s*\([^<]\+\)\s*.*', '\1', '')
-  return author
+  return '[unknown]'
 endfunction
 
 function! DebChangelogFoldText()
   if v:folddashes == '-'  " changelog entry fold
-    return foldtext() . ' -- ' . s:getAuthor(v:foldend) . ' '
+    return foldtext() . ' -- ' . s:getAuthor(v:foldstart, v:foldend) . ' '
   endif
   return foldtext()
 endfunction
@@ -260,6 +261,8 @@ function! GetDebChangelogFold(lnum)
   return '='
 endfunction
 
+foldopen!   " unfold the entry the cursor is on (usually the first one)
+
 " }}}
 
 " vim: set foldmethod=marker:
new file mode 100644
--- /dev/null
+++ b/runtime/ftplugin/hamster.vim
@@ -0,0 +1,61 @@
+" Vim filetype plugin
+" Language:    Hamster Script
+" Version:     2.0.6.0
+" Maintainer:  David Fishburn <fishburn@ianywhere.com>
+" Last Change: Wed Nov 08 2006 12:03:09 PM
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+  finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+let cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< 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
+
+" Use the # sign for comments
+setlocal comments=:#
+
+" Format comments to be up to 78 characters long
+if &tw == 0
+  setlocal tw=78
+endif
+
+" Comments start with a double quote
+setlocal commentstring=#%s
+
+" Move around functions.
+noremap <silent><buffer> [[ :call search('^\s*sub\>', "bW")<CR>
+noremap <silent><buffer> ]] :call search('^\s*sub\>', "W")<CR>
+noremap <silent><buffer> [] :call search('^\s*endsub\>', "bW")<CR>
+noremap <silent><buffer> ][ :call search('^\s*endsub\>', "W")<CR>
+
+" Move around comments
+noremap <silent><buffer> ]# :call search('^\s*#\@!', "W")<CR>
+noremap <silent><buffer> [# :call search('^\s*#\@!', "bW")<CR>
+
+" Let the matchit plugin know what items can be matched.
+if exists("loaded_matchit")
+  let b:match_ignorecase = 0
+  let b:match_words =
+	\ '\<sub\>:\<return\>:\<endsub\>,' .
+        \ '\<do\|while\|repeat\|for\>:\<break\>:\<continue\>:\<loop\|endwhile\|until\|endfor\>,' .
+	\ '\<if\>:\<else\%[if]\>:\<endif\>' 
+
+  " Ignore ":syntax region" commands, the 'end' argument clobbers if-endif
+  " let b:match_skip = 'getline(".") =~ "^\\s*sy\\%[ntax]\\s\\+region" ||
+  "	\ synIDattr(synID(line("."),col("."),1),"name") =~? "comment\\|string"'
+endif
+
+setlocal ignorecase
+let &cpo = cpo_save
+setlocal cpo+=M		" makes \%( match \)
--- a/runtime/ftplugin/haskell.vim
+++ b/runtime/ftplugin/haskell.vim
@@ -8,7 +8,7 @@ if exists("b:did_ftplugin")
 endif
 let b:did_ftplugin = 1
 
-let b:undo_plugin = "setl com< cms< fo<"
+let b:undo_ftplugin = "setl com< cms< fo<"
 
 setlocal comments=s1fl:{-,mb:-,ex:-},:-- commentstring=--\ %s
 setlocal formatoptions-=t formatoptions+=croql
--- 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:	2004 Feb 20
+" Last Change:	2007 Apr 30
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,7 +11,8 @@ let b:did_ftplugin = 1
 
 let b:undo_ftplugin = "setl modeline< tw< fo<"
 
-" Don't use modelines in e-mail messages, avoid trojan horses
+" Don't use modelines in e-mail messages, avoid trojan horses and nasty
+" "jokes" (e.g., setting 'textwidth' to 5).
 setlocal nomodeline
 
 " many people recommend keeping e-mail messages 72 chars wide
--- a/runtime/ftplugin/make.vim
+++ b/runtime/ftplugin/make.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Make
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2004 Dec 17
+" Last Change:	2006 Jun 17
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -9,7 +9,7 @@ if exists("b:did_ftplugin")
 endif
 let b:did_ftplugin = 1
 
-let b:undo_ftplugin = "setl et< fo< com< commentstring<"
+let b:undo_ftplugin = "setl et< sts< fo< com< cms< inc<"
 
 " Make sure a hard tab is used, required for most make programs
 setlocal noexpandtab softtabstop=0
--- a/runtime/ftplugin/ocaml.vim
+++ b/runtime/ftplugin/ocaml.vim
@@ -4,7 +4,8 @@
 "              Markus Mottl        <markus.mottl@gmail.com>
 "              Stefano Zacchiroli  <zack@bononia.it>
 " URL:         http://www.ocaml.info/vim/ftplugin/ocaml.vim
-" Last Change: 2006 Apr 11 - Fixed an initialization bug; fixed ASS abbrev (MM)
+" Last Change: 2006 May 01 - Added .annot support for file.whateverext (SZ)
+"	       2006 Apr 11 - Fixed an initialization bug; fixed ASS abbrev (MM)
 "              2005 Oct 13 - removed GPL; better matchit support (MM, SZ)
 "
 if exists("b:did_ftplugin")
@@ -202,6 +203,7 @@ python << EOF
 
 import re
 import os
+import os.path
 import string
 import time
 import vim
@@ -288,13 +290,13 @@ class Annotations:
                 line = f.readline() # position line
             f.close()
             self.__filename = fname
-            self.__ml_filename = re.sub("\.annot$", ".ml", fname)
+            self.__ml_filename = vim.current.buffer.name
             self.__timestamp = int(time.time())
         except IOError:
             raise no_annotations
 
     def parse(self):
-        annot_file = re.sub("\.ml$", ".annot", vim.current.buffer.name)
+        annot_file = os.path.splitext(vim.current.buffer.name)[0] + ".annot"
         self.__parse(annot_file)
 
     def get_type(self, (line1, col1), (line2, col2)):
--- a/runtime/indent/ada.vim
+++ b/runtime/indent/ada.vim
@@ -1,19 +1,32 @@
-" Vim indent file
-" Language:	Ada
-" Maintainer:	Neil Bird <neil@fnxweb.com>
-" Last Change:	2006 Apr 30
-" Version:	$Id$
-" Look for the latest version at http://vim.sourceforge.net/
-"
+"------------------------------------------------------------------------------
+"  Description: Vim Ada indent file
+"     Language: Ada (2005)
+"	   $Id$
+"    Copyright: Copyright (C) 2006 Martin Krischik
+"   Maintainer: Martin Krischik
+"		Neil Bird <neil@fnxweb.com>
+"      $Author$
+"	 $Date$
+"      Version: 4.2
+"    $Revision$
+"     $HeadURL: https://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
+"		15.10.2006 MK Bram's suggestion for runtime integration
+"		05.11.2006 MK Bram suggested to save on spaces
+"    Help Page: ft-vim-indent
+"------------------------------------------------------------------------------
 " ToDo:
 "  Verify handling of multi-line exprs. and recovery upon the final ';'.
 "  Correctly find comments given '"' and "" ==> " syntax.
 "  Combine the two large block-indent functions into one?
+"------------------------------------------------------------------------------
 
 " Only load this indent file when no other was loaded.
-if exists("b:did_indent")
+if exists("b:did_indent") || version < 700
    finish
 endif
+
 let b:did_indent = 1
 
 setlocal indentexpr=GetAdaIndent()
@@ -25,10 +38,14 @@ if exists("*GetAdaIndent")
    finish
 endif
 
-let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|then\>\|when\>\|is\>\)'
-let s:AdaComment = "\\v^(\"[^\"]*\"|'.'|[^\"']){-}\\zs\\s*--.*"
+if exists("g:ada_with_gnat_project_files")
+   let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|project\>\|then\>\|when\>\|is\>\)'
+else
+   let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|then\>\|when\>\|is\>\)'
+endif
 
-
+" Section: s:MainBlockIndent {{{1
+"
 " Try to find indent of the block we're in
 " prev_indent = the previous line's indent
 " prev_lnum   = previous line (to start looking on)
@@ -39,9 +56,9 @@ let s:AdaComment = "\\v^(\"[^\"]*\"|'.'|
 " This shouldn't work as well as it appears to with lines that are currently
 " nowhere near the correct indent (e.g., start of line)!
 " Seems to work OK as it 'starts' with the indent of the /previous/ line.
-function s:MainBlockIndent( prev_indent, prev_lnum, blockstart, stop_at )
+function s:MainBlockIndent (prev_indent, prev_lnum, blockstart, stop_at)
    let lnum = a:prev_lnum
-   let line = substitute( getline(lnum), s:AdaComment, '', '' )
+   let line = substitute( getline(lnum), ada#Comment, '', '' )
    while lnum > 1
       if a:stop_at != ''  &&  line =~ '^\s*' . a:stop_at  &&  indent(lnum) < a:prev_indent
 	 return a:prev_indent
@@ -55,7 +72,7 @@ function s:MainBlockIndent( prev_indent,
       let lnum = prevnonblank(lnum - 1)
       " Get previous non-blank/non-comment-only line
       while 1
-	 let line = substitute( getline(lnum), s:AdaComment, '', '' )
+	 let line = substitute( getline(lnum), ada#Comment, '', '' )
 	 if line !~ '^\s*$' && line !~ '^\s*#'
 	    break
 	 endif
@@ -67,8 +84,10 @@ function s:MainBlockIndent( prev_indent,
    endwhile
    " Fallback - just move back one
    return a:prev_indent - &sw
-endfunction
+endfunction MainBlockIndent
 
+" Section: s:EndBlockIndent {{{1
+"
 " Try to find indent of the block we're in (and about to complete),
 " including handling of nested blocks. Works on the 'end' of a block.
 " prev_indent = the previous line's indent
@@ -97,7 +116,7 @@ function s:EndBlockIndent( prev_indent, 
       " Get previous non-blank/non-comment-only line
       while 1
 	 let line = getline(lnum)
-	 let line = substitute( line, s:AdaComment, '', '' )
+	 let line = substitute( line, ada#Comment, '', '' )
 	 if line !~ '^\s*$'
 	    break
 	 endif
@@ -109,8 +128,10 @@ function s:EndBlockIndent( prev_indent, 
    endwhile
    " Fallback - just move back one
    return a:prev_indent - &sw
-endfunction
+endfunction EndBlockIndent
 
+" Section: s:StatementIndent {{{1
+"
 " Return indent of previous statement-start
 " (after we've indented due to multi-line statements).
 " This time, we start searching on the line *before* the one given (which is
@@ -122,7 +143,7 @@ function s:StatementIndent( current_inde
       let lnum = prevnonblank(lnum - 1)
       " Get previous non-blank/non-comment-only line
       while 1
-	 let line = substitute( getline(lnum), s:AdaComment, '', '' )
+	 let line = substitute( getline(lnum), ada#Comment, '', '' )
 	 if line !~ '^\s*$' && line !~ '^\s*#'
 	    break
 	 endif
@@ -145,10 +166,13 @@ function s:StatementIndent( current_inde
    endwhile
    " Fallback - just use current one
    return a:current_indent
-endfunction
+endfunction StatementIndent
 
 
+" Section: GetAdaIndent {{{1
+"
 " Find correct indent of a new line based upon what went before
+"
 function GetAdaIndent()
    " Find a non-blank line above the current line.
    let lnum = prevnonblank(v:lnum - 1)
@@ -157,7 +181,7 @@ function GetAdaIndent()
 
    " Get previous non-blank/non-comment-only/non-cpp line
    while 1
-      let line = substitute( getline(lnum), s:AdaComment, '', '' )
+      let line = substitute( getline(lnum), g:ada#Comment, '', '' )
       if line !~ '^\s*$' && line !~ '^\s*#'
 	 break
       endif
@@ -198,7 +222,7 @@ function GetAdaIndent()
       exe lnum
       exe 'normal! $F)%'
       if getline('.') =~ '^\s*('
-	 " Dire layout - use previous indent (could check for AdaComment here)
+	 " Dire layout - use previous indent (could check for ada#Comment here)
 	 let ind = indent( prevnonblank( line('.')-1 ) )
       else
 	 let ind = indent('.')
@@ -263,6 +287,14 @@ function GetAdaIndent()
    endif
 
    return ind
-endfunction
+endfunction GetAdaIndent
+
+finish " 1}}}
 
-" vim: set sw=3 sts=3 :
+"------------------------------------------------------------------------------
+"   Copyright (C) 2006	Martin Krischik
+"
+"   Vim is Charityware - see ":help license" or uganda.txt for licence details.
+"------------------------------------------------------------------------------
+" vim: textwidth=78 wrap tabstop=8 shiftwidth=3 softtabstop=3 noexpandtab
+" vim: foldmethod=marker
--- a/runtime/indent/eruby.vim
+++ b/runtime/indent/eruby.vim
@@ -1,16 +1,59 @@
 " Vim indent file
-" Language:		Ruby
-" Maintainer:		Doug Kearns <dougkearns@gmail.com>
+" Language:		eRuby
+" Maintainer:		Tim Pope <vimNOSPAM@tpope.info>
 " Info:			$Id$
 " URL:			http://vim-ruby.rubyforge.org
 " Anon CVS:		See above site
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
-" Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
 
+runtime! indent/ruby.vim
+unlet! b:did_indent
+
 runtime! indent/html.vim
+unlet! b:did_indent
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetErubyIndent(v:lnum)
+setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
+
+" Only define the function once.
+if exists("*GetErubyIndent")
+  finish
+endif
 
-" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
+function! GetErubyIndent(lnum)
+  let vcol = col('.')
+  call cursor(a:lnum,1)
+  let inruby = searchpair('<%','','%>')
+  call cursor(a:lnum,vcol)
+  if inruby && getline(a:lnum) !~ '^<%'
+    let ind = GetRubyIndent()
+  else
+    let ind = HtmlIndentGet(a:lnum)
+  endif
+  let lnum = prevnonblank(a:lnum-1)
+  let line = getline(lnum)
+  let cline = getline(a:lnum)
+  if cline =~# '<%\s*\%(end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%(-\=%>\|$\)'
+    let ind = ind - &sw
+  endif
+  if line =~# '\<do\%(\s*|[^|]*|\)\=\s*-\=%>'
+    let ind = ind + &sw
+  elseif line =~# '<%\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
+    let ind = ind + &sw
+  endif
+  if line =~# '^\s*<%[=#]\=\s*$' && cline !~# '^\s*end\>'
+    let ind = ind + &sw
+  endif
+  if cline =~# '^\s*-\=%>\s*$'
+    let ind = ind - &sw
+  endif
+  return ind
+endfunction
+
+" vim:set sw=2 sts=2 ts=8 noet ff=unix:
--- a/runtime/indent/html.vim
+++ b/runtime/indent/html.vim
@@ -1,6 +1,6 @@
 " Description:	html indenter
 " Author:	Johannes Zellner <johannes@zellner.org>
-" Last Change:	Tue, 27 Apr 2004 10:28:39 CEST
+" Last Change:	Mo, 05 Jun 2006 22:32:41 CEST
 " 		Restoring 'cpo' and 'ic' added by Bram 2006 May 5
 " Globals:	g:html_indent_tags	   -- indenting tags
 "		g:html_indent_strict       -- inhibit 'O O' elements
@@ -193,8 +193,17 @@ fun! HtmlIndentGet(lnum)
 
     " [-- special handling for <javascript>: use cindent --]
     let js = '<script.*type\s*=\s*.*java'
+
+    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+    " by Tye Zdrojewski <zdro@yahoo.com>, 05 Jun 2006
+    " ZDR: This needs to be an AND (we are 'after the start of the pair' AND
+    "      we are 'before the end of the pair').  Otherwise, indentation
+    "      before the start of the script block will be affected; the end of
+    "      the pair will still match if we are before the beginning of the
+    "      pair.
+    "
     if   0 < searchpair(js, '', '</script>', 'nWb')
-    \ || 0 < searchpair(js, '', '</script>', 'nW')
+    \ && 0 < searchpair(js, '', '</script>', 'nW')
 	" we're inside javascript
 	if getline(lnum) !~ js && getline(a:lnum) != '</script>'
 	    if restore_ic == 0
new file mode 100644
--- /dev/null
+++ b/runtime/indent/htmldjango.vim
@@ -0,0 +1,12 @@
+" Vim indent file
+" Language:	Django HTML template
+" Maintainer:	Dave Hodder <dmh@dmh.org.uk>
+" Last Change:	2007 Jan 25
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+
+" Use HTML formatting rules.
+runtime! indent/html.vim
new file mode 100644
--- /dev/null
+++ b/runtime/indent/jsp.vim
@@ -0,0 +1,17 @@
+" Vim filetype indent file
+" Language:    JSP files
+" Maintainer:  David Fishburn <fishburn@ianywhere.com>
+" Version:     1.0
+" Last Change: Wed Nov 08 2006 11:08:05 AM
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+
+" If there has been no specific JSP indent script created, 
+" use the default html indent script which will handle
+" html, javascript and most of the JSP constructs.
+runtime! indent/html.vim
+
+
--- a/runtime/indent/ocaml.vim
+++ b/runtime/indent/ocaml.vim
@@ -4,7 +4,7 @@
 "		Mike Leary	     <leary@nwlink.com>
 "		Markus Mottl	     <markus.mottl@gmail.com>
 " URL:		http://www.ocaml.info/vim/indent/ocaml.vim
-" Last Change:	2006 Apr 30
+" Last Change:  2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
 "		2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
 "		2005 Apr 11 - Fixed an indentation bug concerning "let" (MM)
 
--- a/runtime/indent/python.vim
+++ b/runtime/indent/python.vim
@@ -2,7 +2,7 @@
 " Language:		Python
 " Maintainer:		Bram Moolenaar <Bram@vim.org>
 " Original Author:	David Bustos <bustos@caltech.edu>
-" Last Change:		2006 Apr 30
+" Last Change:		2006 Jun 18
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -136,7 +136,7 @@ function GetPythonIndent(lnum)
   endif
 
   " If the previous line was a stop-execution statement...
-  if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\)\>'
+  if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>'
     " See if the user has already dedented
     if indent(a:lnum) > indent(plnum) - &sw
       " If not, recommend one dedent
--- a/runtime/indent/ruby.vim
+++ b/runtime/indent/ruby.vim
@@ -217,7 +217,11 @@ function GetRubyIndent()
     call cursor(v:lnum, col)
     let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
     if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
-      let ind = line[col-1]==')' ? virtcol('.')-1 : indent(s:GetMSL(line('.')))
+      if line[col-1]==')' && col('.') != col('$') - 1
+	let ind = virtcol('.')-1
+      else
+	let ind = indent(s:GetMSL(line('.')))
+      endif
     endif
     return ind
   endif
@@ -274,7 +278,11 @@ function GetRubyIndent()
   if line =~ '[[({]'
     let counts = s:LineHasOpeningBrackets(lnum)
     if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
-      return virtcol('.')
+      if col('.') + 1 == col('$')
+	return ind + &sw
+      else
+	return virtcol('.')
+      endif
     elseif counts[1] == '1' || counts[2] == '1'
       return ind + &sw
     else
@@ -361,3 +369,5 @@ endfunction
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
+
+" vim:set sw=2 sts=2 ts=8 noet ff=unix:
--- a/runtime/indent/vhdl.vim
+++ b/runtime/indent/vhdl.vim
@@ -1,8 +1,8 @@
 " VHDL indent ('93 syntax)
 " Language:    VHDL
 " Maintainer:  Gerald Lai <laigera+vim?gmail.com>
-" Version:     1.36
-" Last Change: 2006 Apr 12
+" Version:     1.50
+" Last Change: 2007 Jan 29
 " URL:         http://www.vim.org/scripts/script.php?script_id=1450
 
 " only load this indent file when no other was loaded
@@ -13,9 +13,11 @@ let b:did_indent = 1
 
 " setup indent options for local VHDL buffer
 setlocal indentexpr=GetVHDLindent()
-setlocal indentkeys=!^F,o,O,e,0(,0)
+setlocal indentkeys=!^F,o,O,0(,0)
+setlocal indentkeys+==~begin,=~end\ ,=~end\	,=~is,=~select,=~when
 setlocal indentkeys+==~if,=~then,=~elsif,=~else
-setlocal indentkeys+==~begin,=~is,=~select
+setlocal indentkeys+==~case,=~loop,=~for,=~generate,=~record,=~units,=~process,=~block,=~function,=~component,=~procedure
+setlocal indentkeys+==~architecture,=~configuration,=~entity,=~package
 
 " constants
 " not a comment
@@ -25,6 +27,16 @@ let s:ES = '\s*\%(--.*\)\=$'
 " no "end" keyword in front
 let s:NE = '\%(\<end\s\+\)\@<!'
 
+" option to disable alignment of generic/port mappings
+if !exists("g:vhdl_align_genportmap")
+  let g:vhdl_align_genportmap = 1
+endif
+
+" option to disable alignment of right-hand side assignment "<=" statements
+if !exists("g:vhdl_align_rhsassign")
+  let g:vhdl_align_rhsassign = 1
+endif
+
 " only define indent function once
 if exists("*GetVHDLindent")
   finish
@@ -100,7 +112,11 @@ function GetVHDLindent()
     if m != -1
       return m
     else
-      return stridx(prevs, '(') + &sw
+      if g:vhdl_align_genportmap
+        return stridx(prevs, '(') + &sw
+      else
+        return ind2 + &sw
+      endif
     endif
   endif
 
@@ -108,7 +124,11 @@ function GetVHDLindent()
   " keywords: variable + "<=" without ";" ending
   " where:    start of previous line
   if prevs =~? '^\s*\S\+\s*<=[^;]*'.s:ES
-    return matchend(prevs, '<=\s*\ze.')
+    if g:vhdl_align_rhsassign
+      return matchend(prevs, '<=\s*\ze.')
+    else
+      return ind2 + &sw
+    endif
   endif
 
   " indent:   backtrace previous non-comment lines for next smaller or equal size indent
@@ -190,7 +210,7 @@ function GetVHDLindent()
     " find previous opening statement of
     " keywords: "architecture", "block", "entity", "function", "generate", "procedure", "process"
     let s2 = s:NC.s:NE.'\<\%(architecture\|block\|entity\|function\|generate\|procedure\|process\)\>'
-    if curs !~? s2.'.*'.s:NC.'\<begin\>.*'.s:ES && prevs =~? s2
+    if (curs !~? s2.'.*'.s:NC.'\<begin\>.*'.s:ES && prevs =~? s2) || m == 1
       let ind = ind + &sw
     endif
     return ind
@@ -240,50 +260,55 @@ function GetVHDLindent()
   " where:    start of current line
   " find previous opening statement of
   " keywords: "for", "if"
-  if curs =~? '^\s*\<generate\>' && prevs =~? s:NC.s:NE.'\%(\%(\<wait\s\+\)\@<!\<for\>\|\<if\>\)'
+  if curs =~? '^\s*\<generate\>' && prevs =~? s:NC.s:NE.'\%(\%(\<wait\s\+\)\@<!\<for\|\<if\)\>'
     return ind2
   endif
 
   " indent:   +sw
-  " keywords: "begin", "block", "loop", "process", "record", "units"
-  " removed:  "case", "elsif", "if", "while"
+  " keywords: "block", "process"
+  " removed:  "begin", "case", "elsif", "if", "loop", "record", "units", "while"
   " where:    anywhere in previous line
-  if prevs =~? s:NC.'\%(\<begin\>\|'.s:NE.'\<\%(block\|loop\|process\|record\|units\)\>\)'
+  if prevs =~? s:NC.s:NE.'\<\%(block\|process\)\>'
     return ind + &sw
   endif
 
   " indent:   +sw
-  " keywords: "architecture", "component", "configuration", "entity", "for", "package"
-  " removed:  "when", "with"
+  " keywords: "architecture", "configuration", "entity", "package"
+  " removed:  "component", "for", "when", "with"
   " where:    start of previous line
-  if prevs =~? '^\s*\%(architecture\|component\|configuration\|entity\|for\|package\)\>'
+  if prevs =~? '^\s*\%(architecture\|configuration\|entity\|package\)\>'
     return ind + &sw
   endif
 
   " indent:   +sw
-  " keyword:  "generate", "is", "select", "=>"
+  " keyword:  "select"
+  " removed:  "generate", "is", "=>"
   " where:    end of previous line
-  if prevs =~? s:NC.'\%(\%('.s:NE.'\<generate\|\<is\|\<select\)\|=>\)'.s:ES
+  if prevs =~? s:NC.'\<select'.s:ES
     return ind + &sw
   endif
 
   " indent:   +sw
-  " keyword:  "else"
+  " keyword:  "begin", "loop", "record", "units"
+  " where:    anywhere in previous line
+  " keyword:  "component", "else", "for"
   " where:    start of previous line
-  " keyword:  "then"
+  " keyword:  "generate", "is", "then", "=>"
   " where:    end of previous line
   " _note_:   indent allowed to leave this filter
-  if prevs =~? '^\s*else\>' || prevs =~? s:NC.'\<then'.s:ES
+  if prevs =~? s:NC.'\%(\<begin\>\|'.s:NE.'\<\%(loop\|record\|units\)\>\)' || prevs =~? '^\s*\%(component\|else\|for\)\>' || prevs =~? s:NC.'\%('.s:NE.'\<generate\|\<\%(is\|then\)\|=>\)'.s:ES
     let ind = ind + &sw
   endif
 
   " ****************************************************************************************
   " indent:   -sw
-  " keywords: "when", provided previous line does not begin with "when"
+  " keywords: "when", provided previous line does not begin with "when", does not end with "is"
   " where:    start of current line
   let s4 = '^\s*when\>'
   if curs =~? s4
-    if prevs !~? s4
+    if prevs =~? s:NC.'\<is'.s:ES
+      return ind
+    elseif prevs !~? s4
       return ind - &sw
     else
       return ind2
@@ -291,42 +316,9 @@ function GetVHDLindent()
   endif
 
   " indent:   -sw
-  " keywords: "else", "elsif", provided previous line does not contain "then"
-  " where:    start of current line
-  if curs =~? '^\s*\%(else\|elsif\)\>'
-    if prevs !~? s:NC.'\<then\>'
-      return ind - &sw
-    else
-      return ind2
-    endif
-  endif
-
-  " indent:   -sw
-  " keywords: "end" + "if", provided previous line does not begin with "else", not contain "then"
+  " keywords: "else", "elsif", "end" + "block", "for", "function", "generate", "if", "loop", "procedure", "process", "record", "units"
   " where:    start of current line
-  if curs =~? '^\s*end\s\+if\>'
-    if prevs !~? '^\s*else\>' && prevs !~? s:NC.'\<then\>'
-      return ind - &sw
-    else
-      return ind2
-    endif
-  endif
-
-  " indent:   -sw
-  " keywords: "end" + "function", "procedure", provided previous line does not contain "begin"
-  " where:    start of current line
-  if curs =~? '^\s*end\s\+\%(function\|procedure\)\>'
-    if prevs !~? s:NC.'\<begin\>'
-      return ind - &sw
-    else
-      return ind2
-    endif
-  endif
-
-  " indent:   -sw
-  " keywords: "end" + "block", "for", "generate", "loop", "process", "record", "units"
-  " where:    start of current line
-  if curs =~? '^\s*end\s\+\%(block\|for\|generate\|loop\|process\|record\|units\)\>'
+  if curs =~? '^\s*\%(else\|elsif\|end\s\+\%(block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units\)\)\>'
     return ind - &sw
   endif
 
@@ -365,9 +357,9 @@ function GetVHDLindent()
           endif
         "indent:   follow
         "keyword:  "component"
-        "where:    anywhere in previous non-comment line
+        "where:    start of previous non-comment line
         elseif m == 2
-          if ps =~? s:NC.s:NE.'\<component\>'
+          if ps =~? '^\s*component\>'
             return indent(pn)
           endif
         endif
@@ -395,7 +387,8 @@ function GetVHDLindent()
   " indent:   -sw
   " keywords: "end" + identifier
   " where:    start of current line
-  if curs =~? '^\s*end\s\+\w\+\>'
+  "if curs =~? '^\s*end\s\+\w\+\>'
+  if curs =~? '^\s*end\s'
     return ind - &sw
   endif
 
new file mode 100644
--- /dev/null
+++ b/runtime/keymap/bulgarian-bds.vim
@@ -0,0 +1,127 @@
+" Vim keymap file for Bulgarian and Russian characters, `bds' layout.
+" Can be used with utf-8 or cp1251 file encodings.
+" This file itself is in utf-8
+
+" Maintainer: Boyko Bantchev <boykobb@gmail.com>
+" URI: http://www.math.bas.bg/softeng/bantchev/misc/vim/bulgarian-bds.vim
+" Last Changed: 2006 Oct 18
+
+" This keymap corresponds to what is called Bulgarian standard,
+" or BDS (БДС) typewriter keyboard layout.
+" In addition to the Bulgarian alphabet, BDS prescribes the presence
+" of the following characters:
+"     —  The Cyrillic letters Э (capital), and Ñ‹ and Ñ (small)
+"        (these are present in the Russian alphabet).
+"     —  The latin capital letters I and V (these are used to type
+"        Roman numerals without having to leave Cyrillic mode).
+"     —  „ and “ (Bulgarian quotation style), and « and » (Russian quotation
+"        style).
+"     —  §, №, —, •, ·, ±, ¬, ¤, and €
+"
+" Some punctuation characters that are present in ascii are mapped in BDS
+" to keys different from the ones they occupy in the qwerty layout, because
+" the latter are used to type other characters.
+"
+" In this keymap also defined (not in BDS) are the Russian letters Ð (capital)
+" and ё (small), as well as the Russian capital letter Ы (see above the small
+" counterpart).  This way, using the bulgarian-bds keymap, one can access both
+" the Bulgarian and the Russian alphabets.
+
+scriptencoding utf-8
+
+let b:keymap_name = "bds"
+
+loadkeymap
+D       Ð       CYRILLIC CAPITAL LETTER A
+?       Б       CYRILLIC CAPITAL LETTER BE
+L       Ð’       CYRILLIC CAPITAL LETTER VE
+H       Г       CYRILLIC CAPITAL LETTER GHE
+O       Д       CYRILLIC CAPITAL LETTER DE
+E       Е       CYRILLIC CAPITAL LETTER IE
+E::     Ð       CYRILLIC CAPITAL LETTER IO
+G       Ж       CYRILLIC CAPITAL LETTER ZHE
+P       З       CYRILLIC CAPITAL LETTER ZE
+R       И       CYRILLIC CAPITAL LETTER I
+X       Й       CYRILLIC CAPITAL LETTER SHORT I
+U       К       CYRILLIC CAPITAL LETTER KA
+>       Л       CYRILLIC CAPITAL LETTER EL
+:       М       CYRILLIC CAPITAL LETTER EM
+K       Ð       CYRILLIC CAPITAL LETTER EN
+F       О       CYRILLIC CAPITAL LETTER O
+M       П       CYRILLIC CAPITAL LETTER PE
+<       Р       CYRILLIC CAPITAL LETTER ER
+I       С       CYRILLIC CAPITAL LETTER ES
+J       Т       CYRILLIC CAPITAL LETTER TE
+W       У       CYRILLIC CAPITAL LETTER U
+B       Ф       CYRILLIC CAPITAL LETTER EF
+N       Х       CYRILLIC CAPITAL LETTER HA
+{       Ц       CYRILLIC CAPITAL LETTER TSE
+\"      Ч       CYRILLIC CAPITAL LETTER CHE
+T       Ш       CYRILLIC CAPITAL LETTER SHA
+Y       Щ       CYRILLIC CAPITAL LETTER SHCHA
+C       Ъ       CYRILLIC CAPITAL LETTER HARD SIGN
+CX      Ы       CYRILLIC CAPITAL LETTER YERU
+A       Ь       CYRILLIC CAPITAL LETTER SOFT SIGN
+V       Э       CYRILLIC CAPITAL LETTER REVERSED E
+Z       Ю       CYRILLIC CAPITAL LETTER YU
+S       Я       CYRILLIC CAPITAL LETTER YA
+d       а       CYRILLIC SMALL LETTER A
+\/      б       CYRILLIC SMALL LETTER BE
+l       в       CYRILLIC SMALL LETTER VE
+h       г       CYRILLIC SMALL LETTER GHE
+o       д       CYRILLIC SMALL LETTER DE
+e       е       CYRILLIC SMALL LETTER IE
+e::     Ñ‘       CYRILLIC SMALL LETTER IO
+g       ж       CYRILLIC SMALL LETTER ZHE
+p       з       CYRILLIC SMALL LETTER ZE
+r       и       CYRILLIC SMALL LETTER I
+x       й       CYRILLIC SMALL LETTER SHORT I
+u       к       CYRILLIC SMALL LETTER KA
+\.      л       CYRILLIC SMALL LETTER EL
+;       м       CYRILLIC SMALL LETTER EM
+k       н       CYRILLIC SMALL LETTER EN
+f       о       CYRILLIC SMALL LETTER O
+m       п       CYRILLIC SMALL LETTER PE
+,       р       CYRILLIC SMALL LETTER ER
+i       Ñ       CYRILLIC SMALL LETTER ES
+j       Ñ‚       CYRILLIC SMALL LETTER TE
+w       у       CYRILLIC SMALL LETTER U
+b       Ñ„       CYRILLIC SMALL LETTER EF
+n       Ñ…       CYRILLIC SMALL LETTER HA
+[       ц       CYRILLIC SMALL LETTER TSE
+'       ч       CYRILLIC SMALL LETTER CHE
+t       ш       CYRILLIC SMALL LETTER SHA
+y       щ       CYRILLIC SMALL LETTER SHCHA
+c       ÑŠ       CYRILLIC SMALL LETTER HARD SIGN
+Q       Ñ‹       CYRILLIC SMALL LETTER YERU
+a       ь       CYRILLIC SMALL LETTER SOFT SIGN
+v       Ñ       CYRILLIC SMALL LETTER REVERSED E
+z       ÑŽ       CYRILLIC SMALL LETTER YU
+s       Ñ       CYRILLIC SMALL LETTER YA
+_       I       LATIN CAPITAL LETTER I
++       V       LATIN CAPITAL LETTER V
+$       "       QUOTATION MARK
+\\      (       LEFT PARENTHESIS
+|       )       RIGHT PARENTHESIS
+#       +       PLUS SIGN
+q       ,       COMMA
+(       -       HYPHEN-MINUS
+=       .       FULL STOP (PERIOD)
+*       /       SOLIDUS (SLASH)
+&       :       COLON
+]       ;       SEMICOLON
+^       =       EQUALS SIGN
+@       ?       QUESTION MARK
+}       §       SECTION SIGN (PARAGRAPH SIGN)
+)       â„–       NUMERO SIGN
+--      —       EM DASH
+,,      „       DOUBLE LOW-9 QUOTATION MARK
+``      “       LEFT DOUBLE QUOTATION  MARK
+<<      «       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+>>      »       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00      •       BULLET
+..      ·       MIDDLE DOT      
++-      ±       PLUS-MINUS SIGN
+~~      ¬       NOT SIGN
+@@      ¤       CURRENCY SIGN
+$$      €       EURO SIGN
new file mode 100644
--- /dev/null
+++ b/runtime/keymap/bulgarian-phonetic.vim
@@ -0,0 +1,108 @@
+" Vim keymap file for Bulgarian and Russian characters, `phonetic' layout.
+" Can be used with utf-8 or cp1251 file encodings.
+" This file itself is in utf-8
+
+" Maintainer:   Boyko Bantchev <boykobb@gmail.com>
+" URI: http://www.math.bas.bg/softeng/bantchev/misc/vim/bulgarian-phonetic.vim
+" Last Changed: 2006 Oct 18
+
+" This keymap corresponds to what is called `phonetic layout' in Bulgaria:
+" Cyrillic letters homophonous with Latin letters tend to take the same
+" places as the latter ones.  Most of the keys corresponding to punctuation
+" characters are left unmapped, so they retain their usual (qwerty) meanings
+" while typing in Cyrillic.
+"
+" In addition to the Bulgarian alphabet, the keymap defines the following
+" characters:
+"     —  The Cyrillic letters Ð and Ñ‘, Э and Ñ, and Ы and Ñ‹ (in pairs of
+"        capital and small).  These are the letters in the Russian alphabet
+"        that are not present in Bulgarian, so using the bulgarian-phonetic
+"        keymap one can type in Russian, too.
+"     —  „ and “ (Bulgarian quotation style), and « and » (Russian quotation
+"        style).
+"     —  §, №, —, •, ·, ±, ¬, ¤, and €
+
+scriptencoding utf-8
+
+let b:keymap_name = "pho"
+
+loadkeymap
+A       Ð       CYRILLIC CAPITAL LETTER A
+B       Б       CYRILLIC CAPITAL LETTER BE
+W       Ð’       CYRILLIC CAPITAL LETTER VE
+G       Г       CYRILLIC CAPITAL LETTER GHE
+D       Д       CYRILLIC CAPITAL LETTER DE
+E       Е       CYRILLIC CAPITAL LETTER IE
+E::     Ð       CYRILLIC CAPITAL LETTER IO
+V       Ж       CYRILLIC CAPITAL LETTER ZHE
+Z       З       CYRILLIC CAPITAL LETTER ZE
+I       И       CYRILLIC CAPITAL LETTER I
+J       Й       CYRILLIC CAPITAL LETTER SHORT I
+K       К       CYRILLIC CAPITAL LETTER KA
+L       Л       CYRILLIC CAPITAL LETTER EL
+M       М       CYRILLIC CAPITAL LETTER EM
+N       Ð       CYRILLIC CAPITAL LETTER EN
+O       О       CYRILLIC CAPITAL LETTER O
+P       П       CYRILLIC CAPITAL LETTER PE
+R       Р       CYRILLIC CAPITAL LETTER ER
+S       С       CYRILLIC CAPITAL LETTER ES
+T       Т       CYRILLIC CAPITAL LETTER TE
+U       У       CYRILLIC CAPITAL LETTER U
+F       Ф       CYRILLIC CAPITAL LETTER EF
+H       Х       CYRILLIC CAPITAL LETTER HA
+C       Ц       CYRILLIC CAPITAL LETTER TSE
+~       Ч       CYRILLIC CAPITAL LETTER CHE
+{       Ш       CYRILLIC CAPITAL LETTER SHA
+}       Щ       CYRILLIC CAPITAL LETTER SHCHA
+Y       Ъ       CYRILLIC CAPITAL LETTER HARD SIGN
+YJ      Ы       CYRILLIC CAPITAL LETTER YERU
+X       Ь       CYRILLIC CAPITAL LETTER SOFT SIGN
+YE      Э       CYRILLIC CAPITAL LETTER REVERSED E
+|       Ю       CYRILLIC CAPITAL LETTER YU
+Q       Я       CYRILLIC CAPITAL LETTER YA
+a       а       CYRILLIC SMALL LETTER A
+b       б       CYRILLIC SMALL LETTER BE
+w       в       CYRILLIC SMALL LETTER VE
+g       г       CYRILLIC SMALL LETTER GHE
+d       д       CYRILLIC SMALL LETTER DE
+e       е       CYRILLIC SMALL LETTER IE
+e::     Ñ‘       CYRILLIC SMALL LETTER IO
+v       ж       CYRILLIC SMALL LETTER ZHE
+z       з       CYRILLIC SMALL LETTER ZE
+i       и       CYRILLIC SMALL LETTER I
+j       й       CYRILLIC SMALL LETTER SHORT I
+k       к       CYRILLIC SMALL LETTER KA
+l       л       CYRILLIC SMALL LETTER EL
+m       м       CYRILLIC SMALL LETTER EM
+n       н       CYRILLIC SMALL LETTER EN
+o       о       CYRILLIC SMALL LETTER O
+p       п       CYRILLIC SMALL LETTER PE
+r       р       CYRILLIC SMALL LETTER ER
+s       Ñ       CYRILLIC SMALL LETTER ES
+t       Ñ‚       CYRILLIC SMALL LETTER TE
+u       у       CYRILLIC SMALL LETTER U
+f       Ñ„       CYRILLIC SMALL LETTER EF
+h       Ñ…       CYRILLIC SMALL LETTER HA
+c       ц       CYRILLIC SMALL LETTER TSE
+`       ч       CYRILLIC SMALL LETTER CHE
+[       ш       CYRILLIC SMALL LETTER SHA
+]       щ       CYRILLIC SMALL LETTER SHCHA
+y       ÑŠ       CYRILLIC SMALL LETTER HARD SIGN
+yj      Ñ‹       CYRILLIC SMALL LETTER YERU
+x       ь       CYRILLIC SMALL LETTER SOFT SIGN
+ye      Ñ       CYRILLIC SMALL LETTER REVERSED E
+\\      ÑŽ       CYRILLIC SMALL LETTER YU
+q       Ñ       CYRILLIC SMALL LETTER YA
+!!      §       SECTION SIGN (PARAGRAPH SIGN)
+##      â„–       NUMERO SIGN
+--      —       EM DASH
+,,      „       DOUBLE LOW-9 QUOTATION MARK
+``      “       LEFT DOUBLE QUOTATION  MARK
+<<      «       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+>>      »       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00      •       BULLET
+..      ·       MIDDLE DOT      
++-      ±       PLUS-MINUS SIGN
+~~      ¬       NOT SIGN
+@@      ¤       CURRENCY SIGN
+$$      €       EURO SIGN
new file mode 100644
--- /dev/null
+++ b/runtime/keymap/thaana.vim
@@ -0,0 +1,3 @@
+if &enc == 'utf-8'
+	source <sfile>:p:h/thaana-phonetic_utf-8.vim
+endif
new file mode 100644
--- /dev/null
+++ b/runtime/keymap/vietnamese-viqr_utf-8.vim
@@ -0,0 +1,160 @@
+" Vim Keymap file for vietnamese through the usual viqr method
+" Maintainer: Samuel Thibault <samuel.thibault@ens-lyon.org>
+" Last Change: 2006 Jun 17
+
+scriptencoding utf-8
+
+let b:keymap_name = "vietnamese"
+
+loadkeymap
+a	a
+A	A
+a`	à
+A`	À
+a?	ả
+A?	Ả
+a~	ã
+A~	Ã
+a'	á
+A'	Ã
+a.	ạ
+A.	Ạ
+a(	ă
+A(	Ä‚
+a(`	ằ
+A(`	Ằ
+a(?	ẳ
+A(?	Ẳ
+a(~	ẵ
+A(~	Ẵ
+a('	ắ
+A('	Ắ
+a(.	ặ
+A(.	Ặ
+a^	â
+A^	Â
+a^`	ầ
+A^`	Ầ
+a^?	ẩ
+A^?	Ẩ
+a^~	ẫ
+A^~	Ẫ
+a^'	ấ
+A^'	Ấ
+a^.	ậ
+A^.	Ậ
+d	d
+D	D
+dd	Ä‘
+Dd	Ä
+DD	Ä
+e	e
+E	E
+e`	è
+E`	È
+e?	ẻ
+E?	Ẻ
+e~	ẽ
+E~	Ẽ
+e'	é
+E'	É
+e.	ẹ
+E.	Ẹ
+e^	ê
+E^	Ê
+e^`	á»
+E^`	Ề
+e^?	ể
+E^?	Ể
+e^~	á»…
+E^~	Ễ
+e^'	ế
+E^'	Ế
+e^.	ệ
+E^.	Ệ
+i	i
+I	I
+i`	ì
+I`	Ì
+i?	ỉ
+I?	Ỉ
+i~	Ä©
+I~	Ĩ
+i'	í
+I'	Ã
+i.	ị
+I.	Ị
+o	o
+O	O
+o`	ò
+O`	Ã’
+o?	á»
+O?	Ỏ
+o~	õ
+O~	Õ
+o'	ó
+O'	Ó
+o.	á»
+O.	Ọ
+o^	ô
+O^	Ô
+o^`	ồ
+O^`	á»’
+o^?	ổ
+O^?	á»”
+o^~	á»—
+O^~	á»–
+o^'	ố
+O^'	á»
+o^.	á»™
+O^.	Ộ
+o+	Æ¡
+O+	Æ 
+o+`	á»
+O+`	Ờ
+o+?	ở
+O+?	Ở
+o+~	ỡ
+O+~	á» 
+o+'	á»›
+O+'	Ớ
+o+.	ợ
+O+.	Ợ
+u	u
+U	U
+u`	ù
+U`	Ù
+u?	ủ
+U?	Ủ
+u~	Å©
+U~	Ũ
+u'	ú
+U'	Ú
+u.	ụ
+U.	Ụ
+u+	Æ°
+U+	Ư
+u+`	ừ
+U+`	Ừ
+u+?	á»­
+U+?	Ử
+u+~	ữ
+U+~	á»®
+u+'	ứ
+U+'	Ứ
+u+.	á»±
+U+.	á»°
+y	y
+Y	Y
+y`	ỳ
+Y`	Ỳ
+y?	á»·
+Y?	Ỷ
+y~	ỹ
+Y~	Ỹ
+y'	ý
+Y'	Ã
+y.	ỵ
+Y.	á»´
+\\d	d
+\\D	D
new file mode 100644
--- /dev/null
+++ b/runtime/lang/menu_sl_si.cp1250.vim
@@ -0,0 +1,294 @@
+" Menu Translations:	Slovenian / Slovensko
+" Maintainer:		Mojca Miklavec <mojca.miklavec.lists@gmail.com>
+" Originally By:	Mojca Miklavec <mojca.miklavec.lists@gmail.com>
+" Last Change:		Sat, 17 Jun 2006
+" vim:set foldmethod=marker tabstop=8:
+
+" TODO: add/check all '&'s
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+  finish
+endif
+let did_menu_trans = 1
+
+scriptencoding cp1250
+
+" {{{ FILE / DATOTEKA
+menutrans &File				&Datoteka
+menutrans &Open\.\.\.<Tab>:e		&Odpri\ \.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp	Odpri\ de&ljeno\ \.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Odpri\ v\ zavi&hku\ \.\.\.<Tab>:tabnew
+menutrans &New<Tab>:enew		&Nova<Tab>:enew
+menutrans &Close<Tab>:close		&Zapri<Tab>:close
+menutrans &Save<Tab>:w			&Shrani<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav	Shrani\ &kot\ \.\.\.<Tab>:sav
+menutrans &Print			Na&tisni
+menutrans Sa&ve-Exit<Tab>:wqa		Shrani\ in\ &konèaj<Tab>:wqa
+menutrans E&xit<Tab>:qa			&Izhod<Tab>:qa
+
+if has("diff")
+    menutrans Split\ &Diff\ with\.\.\.	Primerjaj\ z\ (di&ff)\ \.\.\.
+    menutrans Split\ Patched\ &By\.\.\.	&Popravi\ z\ (patch)\ \.\.\.
+endif
+" }}} FILE / DATOTEKA
+
+" {{{ EDIT / UREDI
+menutrans &Edit				&Uredi
+menutrans &Undo<Tab>u			&Razveljavi<Tab>u
+menutrans &Redo<Tab>^R			&Obnovi<Tab>^R
+menutrans Rep&eat<Tab>\.		Po&novi<Tab>\.
+menutrans Cu&t<Tab>"+x			&Izreži<Tab>"+x
+menutrans &Copy<Tab>"+y			&Kopiraj<Tab>"+y
+menutrans &Paste<Tab>"+gP		&Prilepi<Tab>"+gP
+menutrans Put\ &Before<Tab>[p		Vrini\ pred<Tab>[p
+menutrans Put\ &After<Tab>]p		Vrini\ za<Tab>]p
+menutrans &Delete<Tab>x			Iz&briši<Tab>x
+menutrans &Select\ all<Tab>ggVG		Izberi\ vse<Tab>ggVG
+menutrans &Find\.\.\.			Po&išèi\ \.\.\.
+menutrans Find\ and\ Rep&lace\.\.\.	Poišèi\ in\ &zamenjaj\ \.\.\.
+
+" [-- SETTINGS --]
+menutrans Settings\ &Window				Nastavitve\ \.\.\.
+menutrans Startup\ &Settings				Zaèetne\ nastavitve
+menutrans &Global\ Settings				&Globalne\ nastavitve
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	Vkljuèi/izkljuèi\ poudarjanje\ iskanega\ niza<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Vkljuèi/izkljuèi\ loèevanje\ velikih\ in\ malih\ èrk<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Vkljuèi/izkljuèi\ kratek\ skok\ na\ pripadajoèi\ oklepaj<Tab>:set\ sm!
+
+menutrans &Context\ lines				Št\.\ vidnih\ vrstic\ pred/za\ kurzorjem
+
+menutrans &Virtual\ Edit				Dovoli\ položaj\ kazalèka,\ kjer\ ni\ besedila
+menutrans Never						Nikoli
+menutrans Block\ Selection				Le\ med\ izbiranjem\ bloka
+menutrans Insert\ mode					Le\ v\ naèinu\ za\ pisanje
+menutrans Block\ and\ Insert				Pri\ obojem
+menutrans Always					Vedno
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Vkljuèi/izkljuèi\ naèin\ za\ pisanje<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Vkljuèi/izkljuèi\ združljivost\ z\ Vi-jem<Tab>:set\ cp!
+
+menutrans Search\ &Path\.\.\.				Pot\ za\ iskanje\ \.\.\.
+menutrans Ta&g\ Files\.\.\.				Ta&g-datoteke\.\.\.
+
+menutrans Toggle\ &Toolbar				Pokaži/skrij\ Orodja
+menutrans Toggle\ &Bottom\ Scrollbar			Pokaži/skrij\ spodnji\ drsnik
+menutrans Toggle\ &Left\ Scrollbar			Pokaži/skrij\ levi\ drsnik
+menutrans Toggle\ &Right\ Scrollbar			Pokaži/skrij\ desni\ drsnik
+
+" Edit/File Settings
+menutrans F&ile\ Settings				&Nastavitve\ datoteke
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Pokaži/skrij\ številke\ vrstic<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Pokaži/skrij\ nevidne\ znake<Tab>:set\ list! " space/tab
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Vkljuèi/izkljuèi\ prelome\ vrstic<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Vkljuèi/izkljuèi\ prelome\ vrstic\ med\ besedami<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!		Vkljuèi/izkljuèi\ zamenjavo\ tabulatorjev\ s\ presledki<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!		Vkljuèi/izkljuèi\ avtomatsko\ zamikanje\ vrstic<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!		Vkljuèi/izkljuèi\ C-jevski\ naèin\ zamikanja\ vrstic<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth					Širina\ zamika\ vrstic
+menutrans Soft\ &Tabstop				Širina\ &tabulatorja
+menutrans Te&xt\ Width\.\.\.				Širina\ besedila\ \.\.\.
+menutrans &File\ Format\.\.\.				Format\ &datoteke\ \.\.\.
+menutrans C&olor\ Scheme				&Barvna\ shema\ \.\.\.
+menutrans &Keymap					&Keymap
+menutrans Select\ Fo&nt\.\.\.				Pisava\ \.\.\.
+" }}} EDIT / UREDI
+
+" {{{  TOOLS / ORODJA
+menutrans &Tools					&Orodja
+menutrans &Jump\ to\ this\ tag<Tab>g^]			&Skoèi\ k\ tej\ znaèki<Tab>g^]
+menutrans Jump\ &back<Tab>^T				Skoèi\ Na&zaj<Tab>^T
+menutrans Build\ &Tags\ File				Napravi\ datoteke\ z\ znaèkami\ (tag)
+if has("spell")
+    menutrans &Spelling					Èrkovalnik
+    menutrans &Spell\ Check\ On				&Vkljuèi
+    menutrans Spell\ Check\ &Off			&Izkljuèi
+    menutrans To\ &Next\ error<Tab>]s			K\ &naslednji\ napaki<Tab>]s
+    menutrans To\ &Previous\ error<Tab>[s		K\ &prejšnji\ napaki<Tab>[s
+    menutrans Suggest\ &Corrections<Tab>z=		Predlagaj\ popravek<Tab>z=
+    menutrans &Repeat\ correction<Tab>:spellrepall	Po&novi\ popravke\ na\ vseh\ besedah<Tab>:spellrepall
+    menutrans Set\ language\ to\ "en"			Angleški\ "en"
+    menutrans Set\ language\ to\ "en_au"		Angleški\ "en_au"
+    menutrans Set\ language\ to\ "en_ca"		Angleški\ "en_ca"
+    menutrans Set\ language\ to\ "en_gb"		Angleški\ "en_gb"
+    menutrans Set\ language\ to\ "en_nz"		Angleški\ "en_nz"
+    menutrans Set\ language\ to\ "en_us"		Angleški\ "en_us"
+    menutrans Set\ language\ to\ "sl"			Slovenski\ "sl"
+    menutrans Set\ language\ to\ "de"			Nemški\ "de"
+    menutrans Set\ language\ to\ 			Èrkovalnik:\
+    menutrans &Find\ More\ Languages			&Ostali\ jeziki
+endif
+if has("folding")
+  menutrans &Folding					Zvijanje\ kode
+  " open close folds
+  menutrans &Enable/Disable\ folds<Tab>zi		Omogoèi/onemogoèi\ zvijanje<Tab>zi " Omogoèi/onemogoèi\ zavihke
+  menutrans &View\ Cursor\ Line<Tab>zv			Pokaži\ vrstico\ s\ kazalèkom<Tab>zv " kjer je kazalec
+  menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Pokaži\ samo\ vrstico\ s\ kazalèkom<Tab>zMzx
+  menutrans C&lose\ more\ folds<Tab>zm			Zvij\ naslednji\ nivo<Tab>zm " Zapri\ veè\ zavihkov
+  menutrans &Close\ all\ folds<Tab>zM			Zvij\ vso\ kodo<Tab>zM " Zapri\ vse\ zavihke
+  menutrans O&pen\ more\ folds<Tab>zr			Razvij\ en\ nivo<Tab>zr " Odpri\ veè\ zavihkov
+  menutrans &Open\ all\ folds<Tab>zR			Razvij\ vso\ kodo<Tab>zR " Odpri\ vse\ zavihke
+  " fold method
+  menutrans Fold\ Met&hod				Kriterij\ za\ zvijanje " Ustvarjanje\ zavihkov
+  menutrans M&anual					&Roèno
+  menutrans I&ndent					Glede\ na\ &poravnavo
+  menutrans E&xpression					Z\ &izrazi\ (foldexpr)
+  menutrans S&yntax					Glede\ na\ &sintakso
+  menutrans &Diff					Razlike\ (&diff)
+  menutrans Ma&rker					Z\ &markerji/oznaèbami
+  " create and delete folds
+  " TODO accelerators
+  menutrans Create\ &Fold<Tab>zf			Ustvari\ zvitek<Tab>zf
+  menutrans &Delete\ Fold<Tab>zd			Izbriši\ zvitek<Tab>zd
+  menutrans Delete\ &All\ Folds<Tab>zD			Izbriši\ vse\ zvitke<Tab>zD
+  " moving around in folds
+  menutrans Fold\ column\ &width			Širina\ drevesa\ z\ zvitki
+endif  " has folding
+
+if has("diff")
+  menutrans &Diff					Razlike\ (&Diff)
+  menutrans &Update					&Posodobi<Tab>
+  menutrans &Get\ Block					&Sprejmi\ (spremeni\ to\ okno) " XXX: check if translation is OK
+  menutrans &Put\ Block					&Pošlji\ (spremeni\ drugo\ okno)
+endif
+
+menutrans &Make<Tab>:make				Napravi\ (&make)<Tab>:make
+menutrans &List\ Errors<Tab>:cl				Pokaži\ napake<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!			Pokaži\ sporoèila<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn				K\ &naslednji\ napaki<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp			K\ &prejšnji\ napaki<Tab>:cp
+menutrans &Older\ List<Tab>:cold			K\ &starejšemu\ seznamu\ napak<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew			K\ &novejšemu\ seznamu\ napak<Tab>:cnew
+
+menutrans Error\ &Window				Okno\ z\ napakami
+menutrans &Update<Tab>:cwin				&Posodobi<Tab>:cwin
+menutrans &Open<Tab>:copen				&Odpri<Tab>:copen
+menutrans &Close<Tab>:cclose				&Zapri<Tab>:cclose
+
+menutrans &Set\ Compiler				Nastavi\ &prevajalnik
+menutrans Se&T\ Compiler				Nastavi\ &prevajalnik " bug in original translation?
+
+menutrans &Convert\ to\ HEX<Tab>:%!xxd			Pretvori\ v\ HE&X<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r			Pretvori\ nazaj<Tab>:%!xxd\ -r
+" }}}  TOOLS / ORODJA
+
+" {{{ SYNTAX / BARVANJE KODE
+menutrans &Syntax				&Barvanje\ kode
+menutrans &Show\ filetypes\ in\ menu		Podprte\ vrste\ datotek
+menutrans Set\ '&syntax'\ only			Samo\ barvanje\ ('&syntax')
+menutrans Set\ '&filetype'\ too			Tudi\ obnašanje\ ('&filetype')
+menutrans &Off					&Izkljuèeno
+menutrans &Manual				&Roèno
+menutrans A&utomatic				&Avtomatsko
+menutrans on/off\ for\ &This\ file		Vkljuèi/izkljuèi\ za\ to\ datoteko
+menutrans Co&lor\ test				Preizkus\ barv
+menutrans &Highlight\ test			Preizkus\ barvanja\ kode
+menutrans &Convert\ to\ HTML			Pretvori\ v\ &HTML
+" }}} SYNTAX / BARVANJE KODE
+
+" {{{ BUFFERS / MEDPOMNILNIK
+menutrans &Buffers					&Medpomnilnik " XXX: ni najbolje: okno bi bolj pristajalo, ampak okno je že
+menutrans &Refresh\ menu				&Osveži
+menutrans Delete					&Briši
+menutrans &Alternate					&Menjaj
+menutrans &Next						&Naslednji
+menutrans &Previous					&Prejšnji
+menutrans [No\ File]					[Brez\ datoteke]
+" }}} BUFFERS / MEDPOMNILNIK
+
+" {{{ WINDOW / OKNO
+menutrans &Window			&Okno
+menutrans &New<Tab>^Wn			&Novo<Tab>^Wn
+menutrans S&plit<Tab>^Ws		Razdeli<Tab>^Ws
+menutrans Split\ &Vertically<Tab>^Wv	Razdeli\ navpièno<Tab>^Ws
+menutrans Split\ File\ E&xplorer	Razdeli:\ Vsebina\ mape
+menutrans Sp&lit\ To\ #<Tab>^W^^	Razdeli\ v\ #<Tab>^W^^
+menutrans &Close<Tab>^Wc		&Zapri<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo	Zapri\ &ostala<Tab>^Wo
+menutrans Move\ &To			Premakni
+menutrans &Top<Tab>^WK			&Gor<Tab>^WK
+menutrans &Bottom<Tab>^WJ		&Dol<Tab>^WJ
+menutrans &Left\ side<Tab>^WH		&Levo<Tab>^WH
+menutrans &Right\ side<Tab>^WL		&Desno<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR		Zavrti\ navzgor<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr		Zavrti\ navzdol<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W=		&Enaka\ velikost<Tab>^W=
+menutrans &Max\ Height<Tab>^W_		Najvišje<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_		Najnižje<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|		Najširše<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|		Najožje<Tab>^W1\|
+" }}} WINDOW / OKNO
+
+" {{{ HELP / POMOÈ
+menutrans &Help			&Pomoè
+menutrans &Overview<Tab><F1>	Hitri\ pregled<Tab><F1>
+menutrans &User\ Manual		P&riroènik
+menutrans &How-to\ links	&How-to\ kazalo
+menutrans &Find\.\.\.		Po&išèi\ \.\.\.	" conflicts with Edit.Find
+menutrans &Credits		&Avtorji
+menutrans Co&pying		&Licenca
+menutrans &Sponsor/Register	Registracija\ in\ &donacije
+menutrans O&rphans		&Sirotam
+menutrans &Version		&Verzija
+menutrans &About		&O\ programu
+" }}} HELP / POMOÈ
+
+" {{{ POPUP
+menutrans &Undo				&Razveljavi
+menutrans Cu&t				&Izreži
+menutrans &Copy				&Kopieraj
+menutrans &Paste			&Prilepi
+menutrans &Delete			&Zbriši
+menutrans Select\ Blockwise		Izbiraj\ po\ blokih
+menutrans Select\ &Word			Izberi\ &besedo
+menutrans Select\ &Sentence		Izberi\ &stavek
+menutrans Select\ Pa&ragraph		Izberi\ &odstavek
+menutrans Select\ &Line			Izberi\ vrs&tico
+menutrans Select\ &Block		Izberi\ b&lok
+menutrans &Select\ All<Tab>ggVG		Izberi\ &vse<Tab>ggVG
+" }}} POPUP
+
+" {{{ TOOLBAR
+if has("toolbar")
+  if exists("*Do_toolbar_tmenu")
+    delfun Do_toolbar_tmenu
+  endif
+  fun Do_toolbar_tmenu()
+    tmenu ToolBar.Open		Odpri datoteko
+    tmenu ToolBar.Save		Shrani datoteko
+    tmenu ToolBar.SaveAll	Shrani vse datoteke
+    tmenu ToolBar.Print		Natisni
+    tmenu ToolBar.Undo		Razveljavi
+    tmenu ToolBar.Redo		Obnovi
+    tmenu ToolBar.Cut		Izreži
+    tmenu ToolBar.Copy		Kopiraj
+    tmenu ToolBar.Paste		Prilepi
+    tmenu ToolBar.Find		Najdi ...
+    tmenu ToolBar.FindNext	Najdi naslednje
+    tmenu ToolBar.FindPrev	Najdi prejšnje
+    tmenu ToolBar.Replace	Najdi in zamenjaj ...
+    tmenu ToolBar.LoadSesn	Naloži sejo
+    tmenu ToolBar.SaveSesn	Shrani trenutno sejo
+    tmenu ToolBar.RunScript	Izberi Vim skripto za izvajanje
+    tmenu ToolBar.Make		Napravi trenutni projekt (:make)
+    tmenu ToolBar.RunCtags	Napravi znaèke v trenutnem direktoriju (!ctags -R.)
+    tmenu ToolBar.TagJump	Skoèi k znaèki pod kurzorjem
+    tmenu ToolBar.Help		Pomoè za Vim
+    tmenu ToolBar.FindHelp	Išèi v pomoèi za Vim
+  endfun
+endif
+" }}} TOOLBAR
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[Brez datoteke]"
+let g:menutrans_help_dialog = "Vnesite ukaz ali besedo, za katero želite pomoè:\n\nUporabite predpono i_ za ukaze v naèinu za pisanje (npr.: i_CTRL-X)\nUporabite predpono c_ za ukaze v ukazni vrstici (command-line) (npr.: c_<Del>)\nUporabite predpono ' za imena opcij (npr.: 'shiftwidth')"
+let g:menutrans_path_dialog = "Vnesite poti za iskanje datotek.\nImena direktorijev loèite z vejico."
+let g:menutrans_tags_dialog = "Vnesite imena datotek z znaèkami ('tag').\nImana loèite z vejicami."
+let g:menutrans_textwidth_dialog = "Vnesite novo širino besedila (ali 0 za izklop formatiranja): "
+let g:menutrans_fileformat_dialog = "Izberite format datoteke"
+let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklièi"
+" }}}
new file mode 100644
--- /dev/null
+++ b/runtime/lang/menu_sl_si.latin2.vim
@@ -0,0 +1,294 @@
+" Menu Translations:	Slovenian / Slovensko
+" Maintainer:		Mojca Miklavec <mojca.miklavec.lists@gmail.com>
+" Originally By:	Mojca Miklavec <mojca.miklavec.lists@gmail.com>
+" Last Change:		Mon, 12 Jun 2006 00:00:00 CEST
+" vim:set foldmethod=marker tabstop=8:
+
+" TODO: add/check all '&'s
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+  finish
+endif
+let did_menu_trans = 1
+
+scriptencoding latin2
+
+" {{{ FILE / DATOTEKA
+menutrans &File				&Datoteka
+menutrans &Open\.\.\.<Tab>:e		&Odpri\ \.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp	Odpri\ de&ljeno\ \.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Odpri\ v\ zavi&hku\ \.\.\.<Tab>:tabnew
+menutrans &New<Tab>:enew		&Nova<Tab>:enew
+menutrans &Close<Tab>:close		&Zapri<Tab>:close
+menutrans &Save<Tab>:w			&Shrani<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav	Shrani\ &kot\ \.\.\.<Tab>:sav
+menutrans &Print			Na&tisni
+menutrans Sa&ve-Exit<Tab>:wqa		Shrani\ in\ &konèaj<Tab>:wqa
+menutrans E&xit<Tab>:qa			&Izhod<Tab>:qa
+
+if has("diff")
+    menutrans Split\ &Diff\ with\.\.\.	Primerjaj\ z\ (di&ff)\ \.\.\.
+    menutrans Split\ Patched\ &By\.\.\.	&Popravi\ z\ (patch)\ \.\.\.
+endif
+" }}} FILE / DATOTEKA
+
+" {{{ EDIT / UREDI
+menutrans &Edit				&Uredi
+menutrans &Undo<Tab>u			&Razveljavi<Tab>u
+menutrans &Redo<Tab>^R			&Obnovi<Tab>^R
+menutrans Rep&eat<Tab>\.		Po&novi<Tab>\.
+menutrans Cu&t<Tab>"+x			&Izre¾i<Tab>"+x
+menutrans &Copy<Tab>"+y			&Kopiraj<Tab>"+y
+menutrans &Paste<Tab>"+gP		&Prilepi<Tab>"+gP
+menutrans Put\ &Before<Tab>[p		Vrini\ pred<Tab>[p
+menutrans Put\ &After<Tab>]p		Vrini\ za<Tab>]p
+menutrans &Delete<Tab>x			Iz&bri¹i<Tab>x
+menutrans &Select\ all<Tab>ggVG		Izberi\ vse<Tab>ggVG
+menutrans &Find\.\.\.			Po&i¹èi\ \.\.\.
+menutrans Find\ and\ Rep&lace\.\.\.	Poi¹èi\ in\ &zamenjaj\ \.\.\.
+
+" [-- SETTINGS --]
+menutrans Settings\ &Window				Nastavitve\ \.\.\.
+menutrans Startup\ &Settings				Zaèetne nastavitve
+menutrans &Global\ Settings				&Globalne\ nastavitve
+
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	Vkljuèi/izkljuèi\ poudarjanje\ iskanega\ niza<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Vkljuèi/izkljuèi\ loèevanje\ velikih\ in\ malih\ èrk<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Vkljuèi/izkljuèi\ kratek\ skok\ na\ pripadajoèi\ oklepaj<Tab>:set\ sm!
+
+menutrans &Context\ lines				©t\.\ vidnih\ vrstic\ pred/za\ kurzorjem
+
+menutrans &Virtual\ Edit				Dovoli\ polo¾aj\ kazalèka,\ kjer\ ni\ besedila
+menutrans Never						Nikoli
+menutrans Block\ Selection				Le\ med\ izbiranjem\ bloka
+menutrans Insert\ mode					Le\ v\ naèinu\ za\ pisanje
+menutrans Block\ and\ Insert				Pri\ obojem
+menutrans Always					Vedno
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Vkljuèi/izkljuèi\ naèin\ za\ pisanje<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Vkljuèi/izkljuèi\ zdru¾ljivost\ z\ Vi-jem<Tab>:set\ cp!
+
+menutrans Search\ &Path\.\.\.				Pot\ za\ iskanje\ \.\.\.
+menutrans Ta&g\ Files\.\.\.				Ta&g-datoteke\.\.\.
+
+menutrans Toggle\ &Toolbar				Poka¾i/skrij\ Orodja
+menutrans Toggle\ &Bottom\ Scrollbar			Poka¾i/skrij\ spodnji\ drsnik
+menutrans Toggle\ &Left\ Scrollbar			Poka¾i/skrij\ levi\ drsnik
+menutrans Toggle\ &Right\ Scrollbar			Poka¾i/skrij\ desni\ drsnik
+
+" Edit/File Settings
+menutrans F&ile\ Settings				&Nastavitve\ datoteke
+
+" Boolean options
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Poka¾i/skrij\ ¹tevilke\ vrstic<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Poka¾i/skrij\ nevidne\ znake<Tab>:set\ list! " space/tab
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Vkljuèi/izkljuèi\ prelome\ vrstic<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Vkljuèi/izkljuèi\ prelome\ vrstic\ med\ besedami<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!		Vkljuèi/izkljuèi\ zamenjavo\ tabulatorjev\ s\ presledki<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!		Vkljuèi/izkljuèi\ avtomatsko\ zamikanje\ vrstic<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!		Vkljuèi/izkljuèi\ C-jevski\ naèin\ zamikanja\ vrstic<Tab>:set\ cin!
+
+" other options
+menutrans &Shiftwidth					©irina\ zamika\ vrstic
+menutrans Soft\ &Tabstop				©irina &tabulatorja
+menutrans Te&xt\ Width\.\.\.				©irina\ besedila\ \.\.\.
+menutrans &File\ Format\.\.\.				Format\ &datoteke\ \.\.\.
+menutrans C&olor\ Scheme				&Barvna\ shema\ \.\.\.
+menutrans &Keymap					&Keymap
+menutrans Select\ Fo&nt\.\.\.				Pisava\ \.\.\.
+" }}} EDIT / UREDI
+
+" {{{  TOOLS / ORODJA
+menutrans &Tools					&Orodja
+menutrans &Jump\ to\ this\ tag<Tab>g^]			&Skoèi\ k\ tej\ znaèki<Tab>g^]
+menutrans Jump\ &back<Tab>^T				Skoèi\ Na&zaj<Tab>^T
+menutrans Build\ &Tags\ File				Napravi\ datoteke\ z\ znaèkami\ (tag)
+if has("spell")
+    menutrans &Spelling					Èrkovalnik
+    menutrans &Spell\ Check\ On				&Vkljuèi
+    menutrans Spell\ Check\ &Off			&Izkljuèi
+    menutrans To\ &Next\ error<Tab>]s			K\ &naslednji\ napaki<Tab>]s
+    menutrans To\ &Previous\ error<Tab>[s		K\ &prej¹nji\ napaki<Tab>[s
+    menutrans Suggest\ &Corrections<Tab>z=		Predlagaj\ popravek<Tab>z=
+    menutrans &Repeat\ correction<Tab>:spellrepall	Po&novi\ popravke\ na\ vseh\ besedah<Tab>:spellrepall
+    menutrans Set\ language\ to\ "en"			Èrkovalnik:\ angle¹ki\ "en"
+    menutrans Set\ language\ to\ "en_au"		Èrkovalnik:\ angle¹ki\ "en_au"
+    menutrans Set\ language\ to\ "en_ca"		Èrkovalnik:\ angle¹ki\ "en_ca"
+    menutrans Set\ language\ to\ "en_gb"		Èrkovalnik:\ angle¹ki\ "en_gb"
+    menutrans Set\ language\ to\ "en_nz"		Èrkovalnik:\ angle¹ki\ "en_nz"
+    menutrans Set\ language\ to\ "en_us"		Èrkovalnik:\ angle¹ki\ "en_us"
+    menutrans Set\ language\ to\ "sl"			Èrkovalnik:\ slovenski\ "sl"
+    menutrans Set\ language\ to\ "de"			Èrkovalnik:\ nem¹ki\ "de"
+    menutrans Set\ language\ to\ 			Èrkovalnik:\
+    menutrans &Find\ More\ Languages			&Ostali\ jeziki
+endif
+if has("folding")
+  menutrans &Folding					Zavihek
+  " open close folds
+  menutrans &Enable/Disable\ folds<Tab>zi		Omogoèi/onemogoèi\ zavihke<Tab>zi
+  menutrans &View\ Cursor\ Line<Tab>zv			Poka¾i\ vrstico\ s\ kazalcem<Tab>zv " kjer je kazalec
+  menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Poka¾i\ samo\ vrstico\ s\ kazalcem<Tab>zMzx
+  menutrans C&lose\ more\ folds<Tab>zm			Zapri\ veè\ zavihkov<Tab>zm
+  menutrans &Close\ all\ folds<Tab>zM			Zapri\ vse\ zavihke<Tab>zM
+  menutrans O&pen\ more\ folds<Tab>zr			Odpri\ veè\ zavihkov<Tab>zr
+  menutrans &Open\ all\ folds<Tab>zR			Odpri\ vse\ zavihke<Tab>zR
+  " fold method
+  menutrans Fold\ Met&hod				Ustvarjanje\ zavihkov
+  menutrans M&anual					&Roèno
+  menutrans I&ndent					Glede\ na\ &poravnavo
+  menutrans E&xpression					Z\ &izrazi\ (foldexpr)
+  menutrans S&yntax					Glede\ na\ &sintakso
+  menutrans &Diff					Razlike\ (&diff)
+  menutrans Ma&rker					Z\ &markerji/oznaèbami
+  " create and delete folds
+  " TODO accelerators
+  menutrans Create\ &Fold<Tab>zf			Ustvari\ zavihek<Tab>zf
+  menutrans &Delete\ Fold<Tab>zd			Izbri¹i\ zavihek<Tab>zd
+  menutrans Delete\ &All\ Folds<Tab>zD			Izbri¹i\ vse\ zavihke<Tab>zD
+  " moving around in folds
+  menutrans Fold\ column\ &width			©irina\ stolpca\ z\ zavihkom
+endif  " has folding
+
+if has("diff")
+  menutrans &Diff					Razlike\ (&Diff)
+  menutrans &Update					&Posodobi<Tab>
+  menutrans &Get\ Block					&Sprejmi\ (spremeni\ to\ okno) " TODO: check if translation is OK
+  menutrans &Put\ Block					&Po¹lji\ (spremeni\ drugo\ okno)
+endif
+
+menutrans &Make<Tab>:make				Napravi\ (&make)<Tab>:make
+menutrans &List\ Errors<Tab>:cl				Poka¾i\ napake<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!			Poka¾i\ sporoèila<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn				K\ &naslednji\ napaki<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp			K\ &prej¹nji\ napaki<Tab>:cp
+menutrans &Older\ List<Tab>:cold			K\ &starej¹emu\ seznamu\ napak<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew			K\ &novej¹emu\ seznamu\ napak<Tab>:cnew
+
+menutrans Error\ &Window				Okno\ z\ napakami
+menutrans &Update<Tab>:cwin				&Posodobi<Tab>:cwin
+menutrans &Open<Tab>:copen				&Odpri<Tab>:copen
+menutrans &Close<Tab>:cclose				&Zapri<Tab>:cclose
+
+menutrans &Set\ Compiler				Nastavi\ &prevajalnik
+menutrans Se&T\ Compiler				Nastavi\ &prevajalnik " bug in original translation?
+
+menutrans &Convert\ to\ HEX<Tab>:%!xxd			Pretvori\ v\ HE&X<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r			Pretvori\ nazaj<Tab>:%!xxd\ -r
+" }}}  TOOLS / ORODJA
+
+" {{{ SYNTAX / BARVANJE KODE
+menutrans &Syntax				&Barvanje\ kode
+menutrans &Show\ filetypes\ in\ menu		Podprte\ vrste\ datotek
+menutrans Set\ '&syntax'\ only			Samo\ barvanje\ ('&syntax')
+menutrans Set\ '&filetype'\ too			Tudi\ obna¹anje\ ('&filetype')
+menutrans &Off					&Izkljuèeno
+menutrans &Manual				&Roèno
+menutrans A&utomatic				&Avtomatsko
+menutrans on/off\ for\ &This\ file		Vkljuèi/izkljuèi\ za\ to\ datoteko
+menutrans Co&lor\ test				Preizkus\ barv
+menutrans &Highlight\ test			Preizkus\ barvanja\ kode
+menutrans &Convert\ to\ HTML			Pretvori\ v\ &HTML
+" }}} SYNTAX / BARVANJE KODE
+
+" {{{ BUFFERS / MEDPOMNILNIK
+menutrans &Buffers					&Medpomnilnik " XXX: ni najbolje: okno bi bolj pristajalo, ampak okno je ¾e
+menutrans &Refresh\ menu				&Osve¾i
+menutrans Delete					&Bri¹i
+menutrans &Alternate					&Menjaj
+menutrans &Next						&Naslednji
+menutrans &Previous					&Prej¹nji
+menutrans [No\ File]					[Brez\ datoteke]
+" }}} BUFFERS / MEDPOMNILNIK
+
+" {{{ WINDOW / OKNO
+menutrans &Window			&Okno
+menutrans &New<Tab>^Wn			&Novo<Tab>^Wn
+menutrans S&plit<Tab>^Ws		Razdeli<Tab>^Ws
+menutrans Split\ &Vertically<Tab>^Wv	Razdeli\ navpièno<Tab>^Ws
+menutrans Split\ File\ E&xplorer	Razdeli:\ Vsebina\ mape
+menutrans Sp&lit\ To\ #<Tab>^W^^	Razdeli\ v\ #<Tab>^W^^
+menutrans &Close<Tab>^Wc		&Zapri<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo	Zapri\ &ostala<Tab>^Wo
+menutrans Move\ &To			Premakni
+menutrans &Top<Tab>^WK			&Gor<Tab>^WK
+menutrans &Bottom<Tab>^WJ		&Dol<Tab>^WJ
+menutrans &Left\ side<Tab>^WH		&Levo<Tab>^WH
+menutrans &Right\ side<Tab>^WL		&Desno<Tab>^WL
+menutrans Rotate\ &Up<Tab>^WR		Zavrti\ navzgor<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr		Zavrti\ navzdol<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W=		&Enaka\ velikost<Tab>^W=
+menutrans &Max\ Height<Tab>^W_		Najvi¹je<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_		Najni¾je<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|		Naj¹ir¹e<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|		Najo¾je<Tab>^W1\|
+" }}} WINDOW / OKNO
+
+" {{{ HELP / POMOÈ
+menutrans &Help			&Pomoè
+menutrans &Overview<Tab><F1>	Hitri\ pregled<Tab><F1>
+menutrans &User\ Manual		P&riroènik
+menutrans &How-to\ links	&How-to\ kazalo
+menutrans &Find\.\.\.		Po&i¹èi\ \.\.\.	" conflicts with Edit.Find
+menutrans &Credits		&Avtorji
+menutrans Co&pying		&Licenca
+menutrans &Sponsor/Register	Registracija\ in\ &donacije
+menutrans O&rphans		&Sirotam
+menutrans &Version		&Verzija
+menutrans &About		&O\ programu
+" }}} HELP / POMOÈ
+
+" {{{ POPUP
+menutrans &Undo				&Razveljavi
+menutrans Cu&t				&Izre¾i
+menutrans &Copy				&Kopieraj
+menutrans &Paste			&Prilepi
+menutrans &Delete			&Zbri¹i
+menutrans Select\ Blockwise		Izbiraj\ po\ blokih
+menutrans Select\ &Word			Izberi\ &besedo
+menutrans Select\ &Sentence		Izberi\ &stavek
+menutrans Select\ Pa&ragraph		Izberi\ &odstavek
+menutrans Select\ &Line			Izberi\ vrs&tico
+menutrans Select\ &Block		Izberi\ b&lok
+menutrans Select\ &All			Izberi\ &vse
+" }}} POPUP
+
+" {{{ TOOLBAR
+if has("toolbar")
+  if exists("*Do_toolbar_tmenu")
+    delfun Do_toolbar_tmenu
+  endif
+  fun Do_toolbar_tmenu()
+    tmenu ToolBar.Open		Odpri datoteko
+    tmenu ToolBar.Save		Shrani datoteko
+    tmenu ToolBar.SaveAll	Shrani vse datoteke
+    tmenu ToolBar.Print		Natisni
+    tmenu ToolBar.Undo		Razveljavi
+    tmenu ToolBar.Redo		Obnovi
+    tmenu ToolBar.Cut		Izre¾i
+    tmenu ToolBar.Copy		Kopiraj
+    tmenu ToolBar.Paste		Prilepi
+    tmenu ToolBar.Find		Najdi ...
+    tmenu ToolBar.FindNext	Najdi naslednje
+    tmenu ToolBar.FindPrev	Najdi prej¹nje
+    tmenu ToolBar.Replace	Najdi in zamenjaj ...
+    tmenu ToolBar.LoadSesn	Nalo¾i sejo
+    tmenu ToolBar.SaveSesn	Shrani trenutno sejo
+    tmenu ToolBar.RunScript	Izberi Vim skripto za izvajanje
+    tmenu ToolBar.Make		Napravi trenutni projekt (:make)
+    tmenu ToolBar.RunCtags	Napravi znaèke v trenutnem direktoriju (!ctags -R.)
+    tmenu ToolBar.TagJump	Skoèi k znaèki pod kurzorjem
+    tmenu ToolBar.Help		Pomoè za Vim
+    tmenu ToolBar.FindHelp	I¹èi v pomoèi za Vim
+  endfun
+endif
+" }}} TOOLBAR
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[Brez datoteke]"
+let g:menutrans_help_dialog = "Vnesite ukaz ali besedo, za katero ¾elite pomoè:\n\nUporabite predpono i_ za ukaze v naèinu za pisanje (npr.: i_CTRL-X)\nUporabite predpono c_ za ukaze v ukazni vrstici (command-line) (npr.: c_<Del>)\nUporabite predpono ' za imena opcij (npr.: 'shiftwidth')"
+let g:menutrans_path_dialog = "Vnesite poti za iskanje datotek.\nImena direktorijev loèite z vejico."
+let g:menutrans_tags_dialog = "Vnesite imena datotek z znaèkami ('tag').\nImana loèite z vejicami."
+let g:menutrans_textwidth_dialog = "Vnesite novo ¹irino besedila (ali 0 za izklop formatiranja): "
+let g:menutrans_fileformat_dialog = "Izberite format datoteke"
+let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklièi"
+" }}}
--- a/runtime/lang/menu_slovak_slovak_republic.1250.vim
+++ b/runtime/lang/menu_slovak_slovak_republic.1250.vim
@@ -1,6 +1,6 @@
 " Menu Translations:	Slovak
 " Translated By:	Martin Lacko <lacko@host.sk>
-" Last Change:		2003 Mar 30
+" Last Change:		2006 Jun 17
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
--- a/runtime/plugin/README.txt
+++ b/runtime/plugin/README.txt
@@ -1,15 +1,19 @@
 The plugin directory is for standard Vim plugin scripts.
 
 All files here ending in .vim will be sourced by Vim when it starts up.
+Look in the file for hints on how it can be disabled without deleting it.
 
-Standard plugins:
-gzip.vim	edit compressed files
-netrw.vim	edit files over a network and browse (remote) directories
-rrhelper.vim	used for --remote-wait editing
-tar.vim		edit (compressed) tar files
-tohtml.vim	convert a file with syntax highlighting to HTML
-vimball.vim	create and unpack .vba files
+getscriptPlugin.vim  get latest version of Vim scripts
+gzip.vim	     edit compressed files
+matchparen.vim	     highlight paren matching the one under the cursor
+netrwPlugin.vim	     edit files over a network and browse (remote) directories
+rrhelper.vim	     used for --remote-wait editing
+spellfile.vim	     download a spellfile when it's missing
+tarPlugin.vim	     edit (compressed) tar files
+tohtml.vim	     convert a file with syntax highlighting to HTML
+vimballPlugin.vim    create and unpack .vba files
+zipPlugin.vim	     edit zip archives
 
 Note: the explorer.vim plugin is no longer here, the netrw.vim plugin has
-taken over browsing directories (also over ftp).
+taken over browsing directories (also for remote directories).
 
--- a/runtime/plugin/vimballPlugin.vim
+++ b/runtime/plugin/vimballPlugin.vim
@@ -1,32 +1,36 @@
-" vimball : construct a file containing both paths and files
+" vimballPlugin : construct a file containing both paths and files
 " Author: Charles E. Campbell, Jr.
-" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
 " Copyright: (c) 2004-2006 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.
 "  *** ***   Use At-Your-Own-Risk!   *** ***
+"
+" (Rom 2:1 WEB) Therefore you are without excuse, O man, whoever you are who
+"      judge. For in that which you judge another, you condemn yourself. For
+"      you who judge practice the same things.
+" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
 
 " ---------------------------------------------------------------------
 "  Load Once: {{{1
-if &cp || exists("g:loaded_vimball") || exists("g:loaded_vimballplugin")
+if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballplugin= 1
-
-let s:keepcpo= &cpo
+let g:loaded_vimballPlugin = 1
+let s:keepcpo              = &cpo
 set cpo&vim
 
 " ------------------------------------------------------------------------------
 " Public Interface: {{{1
-com! -ra -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
-com! -na=0 UseVimball  call vimball#Vimball(1)
-com! -na=0 VimballList call vimball#Vimball(0)
+com! -ra   -complete=dir -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
+com! -na=? -complete=dir UseVimball  call vimball#Vimball(1,<f-args>)
+com! -na=0               VimballList call vimball#Vimball(0)
+com! -na=* -complete=dir RmVimball   call vimball#RmVimball(<f-args>)
 au BufEnter *.vba.gz,*.vba.bz2,*.vba.zip call vimball#Decompress(expand("<amatch>"))
-au BufEnter *.vba call vimball#ShowMesg("Source this file to extract it! (:so %)")
+au BufEnter *.vba set noma bt=nofile fmr=[[[,]]] fdm=marker|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
 
+" =====================================================================
+" Restoration And Modelines: {{{1
+" vim: fdm=marker
 let &cpo= s:keepcpo
 unlet s:keepcpo
-" =====================================================================
-" Modelines: {{{1
-" vim: fdm=marker
--- a/runtime/plugin/zipPlugin.vim
+++ b/runtime/plugin/zipPlugin.vim
@@ -1,9 +1,9 @@
 " zipPlugin.vim: Handles browsing zipfiles
 "            PLUGIN PORTION
-" Date:			Sep 14, 2005
-" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+" Date:			Jul 18, 2006
+" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005,2006 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,
@@ -12,10 +12,16 @@
 "               plugin, you agree that in no event will the copyright
 "               holder be liable for any damages resulting from the use
 "               of this software.
-
+"
+" (James 4:8 WEB) Draw near to God, and he will draw near to you.
+" Cleanse your hands, you sinners; and purify your hearts, you double-minded.
 " ---------------------------------------------------------------------
-" Initialization: {{{1
-let s:keepcpo= &cpo
+" Load Once: {{{1
+if &cp || exists("g:loaded_zipPlugin")
+ finish
+endif
+let g:loaded_zipPlugin = 1
+let s:keepcpo          = &cpo
 set cpo&vim
 
 " ---------------------------------------------------------------------
@@ -37,8 +43,8 @@ augroup zip
  au BufReadCmd   *.zip		call zip#Browse(expand("<amatch>"))
 augroup END
 
-" ------------------------------------------------------------------------
-" Modelines And Restoration: {{{1
+" ---------------------------------------------------------------------
+"  Restoration And Modelines: {{{1
+"  vim: fdm=marker
 let &cpo= s:keepcpo
 unlet s:keepcpo
-" vim:ts=8 fdm=marker
--- a/runtime/spell/da/main.aap
+++ b/runtime/spell/da/main.aap
@@ -35,7 +35,7 @@ da_DK.aff da_DK.dic: {buildcheck=}
         :fetch da_DK.zip
         :sys $UNZIP da_DK.zip
         :delete da_DK.zip
-        :delete contributors COPYING Makefile da_DK.excluded
+        :delete COPYING Makefile da_DK.excluded
         @if not os.path.exists('da_DK.orig.aff'):
             :copy da_DK.aff da_DK.orig.aff
         @if not os.path.exists('da_DK.orig.dic'):
--- a/runtime/spell/pl/main.aap
+++ b/runtime/spell/pl/main.aap
@@ -33,29 +33,19 @@ all: $SPELLDIR/pl.iso-8859-2.spl $SPELLD
 #
 # Fetching the files from
 #
-HTTPDIR = http://www.kurnik.pl/slownik/ort/
+HTTPDIR = http://www.kurnik.pl/dictionary
 
 # The files don't depend on the .zip file so that we can delete it.
 # Only download the zip file if the targets don't exist.
 # This is a bit tricky, since the file name includes the date.
 pl_PL.aff pl_PL.dic: {buildcheck=}
         :assertpkg tar bunzip2
-        @from time import strftime, gmtime, time
-        @for day in range(20):
-            date = `strftime('%Y%m%d', gmtime(time() - day * 24 * 60 * 60))`
-            base =  alt-myspell-pl-$date
-            fname = $base.tar.bz2
-            :attr {fetch = $HTTPDIR/%file%} $fname
-            @try:
-                :fetch $fname
-                ok = 1
-            @except:
-                ok = 0
-            @if ok:
-                @break
+        fname = alt-myspell-pl.tar.bz2
+        :attr {fetch = $HTTPDIR/%file%} $fname
+        :fetch $fname
         :sys bunzip2 -c $fname | tar xf -
-        :move $base/* .
-        :deldir $base
+        :move alt-myspell-pl-20[0-9]*/* .
+        :deldir alt-myspell-pl-20[0-9]*
         :delete $fname
         @if not os.path.exists('pl_PL.orig.aff'):
             :copy pl_PL.aff pl_PL.orig.aff
@@ -79,21 +69,11 @@ diff:
 
 check:
         :assertpkg tar bunzip2 diff
-        @from time import strftime, gmtime, time
-        @for day in range(20):
-            date = `strftime('%Y%m%d', gmtime(time() - day * 24 * 60 * 60))`
-            base =  alt-myspell-pl-$date
-            fname = $base.tar.bz2
-            :attr {fetch = $HTTPDIR/%file%} $fname
-            @try:
-                :fetch $fname
-                ok = 1
-            @except:
-                ok = 0
-            @if ok:
-                @break
+        fname = alt-myspell-pl.tar.bz2
+        :attr {fetch = $HTTPDIR/%file%} $fname
+        :fetch $fname
         :sys bunzip2 -c $fname | tar xf -
-        :cd $base
+        :cd alt-myspell-pl-20[0-9]*
         @try:
             @import stat
             :sys $UNZIP ../pl_PL.zip
--- a/runtime/spell/pt/pt_PT.diff
+++ b/runtime/spell/pt/pt_PT.diff
@@ -1,27 +1,35 @@
-*** pt_PT.orig.aff	Wed Aug 31 20:05:16 2005
---- pt_PT.aff	Wed Aug 31 20:05:16 2005
+*** pt_PT.orig.aff	Mon Apr 16 15:20:13 2007
+--- pt_PT.aff	Mon Apr 16 15:52:13 2007
 ***************
 *** 3,4 ****
---- 3,24 ----
+--- 3,7 ----
   
 + FOL  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
 + LOW  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
 + UPP  ßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞÿ
-+ 
-+ SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ¿
-+ SOFOTO   ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?
-+ 
-+ MIDWORD	'
-+ 
-+ MAP 9
-+ MAP aàáâãäå
-+ MAP eèéêë
-+ MAP iìíîï
-+ MAP oòóôõö
-+ MAP uùúûü
-+ MAP nñ
-+ MAP cç
-+ MAP yÿý
-+ MAP sß
-+ 
-  PFX A Y 1
+  
+***************
+*** 1065,1078 ****
+  
+! MAP 11
+! MAP aá
+! MAP aã
+! MAP aâ
+! MAP eé
+! MAP eê
+! MAP ií
+  MAP cç
+! MAP oó
+! MAP oô
+! MAP oõ
+! MAP uú
+! 
+--- 1068,1075 ----
+  
+! MAP 6
+! MAP aáãâAÁÃÂ
+! MAP eéêEÉÊ
+! MAP iíIÍ
+  MAP cç
+! MAP oóõôOÓÕÔ
+! MAP uúüUÚÜ
--- a/runtime/synmenu.vim
+++ b/runtime/synmenu.vim
@@ -74,20 +74,25 @@ an 50.10.450 &Syntax.AB.ASN\.1 :cal SetS
 an 50.10.460 &Syntax.AB.Asterisk\ config :cal SetSyn("asterisk")<CR>
 an 50.10.470 &Syntax.AB.Asterisk\ voicemail\ config :cal SetSyn("asteriskvm")<CR>
 an 50.10.480 &Syntax.AB.Atlas :cal SetSyn("atlas")<CR>
-an 50.10.490 &Syntax.AB.Automake :cal SetSyn("automake")<CR>
-an 50.10.500 &Syntax.AB.Avenue :cal SetSyn("ave")<CR>
-an 50.10.510 &Syntax.AB.Awk :cal SetSyn("awk")<CR>
-an 50.10.520 &Syntax.AB.AYacc :cal SetSyn("ayacc")<CR>
-an 50.10.540 &Syntax.AB.B :cal SetSyn("b")<CR>
-an 50.10.550 &Syntax.AB.Baan :cal SetSyn("baan")<CR>
-an 50.10.560 &Syntax.AB.BASIC :cal SetSyn("basic")<CR>
-an 50.10.570 &Syntax.AB.BC\ calculator :cal SetSyn("bc")<CR>
-an 50.10.580 &Syntax.AB.BDF\ font :cal SetSyn("bdf")<CR>
-an 50.10.590 &Syntax.AB.BibTeX.Bibliography\ database :cal SetSyn("bib")<CR>
-an 50.10.600 &Syntax.AB.BibTeX.Bibliography\ Style :cal SetSyn("bst")<CR>
-an 50.10.610 &Syntax.AB.BIND.BIND\ config :cal SetSyn("named")<CR>
-an 50.10.620 &Syntax.AB.BIND.BIND\ zone :cal SetSyn("bindzone")<CR>
-an 50.10.630 &Syntax.AB.Blank :cal SetSyn("blank")<CR>
+an 50.10.490 &Syntax.AB.AutoIt :cal SetSyn("autoit")<CR>
+an 50.10.500 &Syntax.AB.Automake :cal SetSyn("automake")<CR>
+an 50.10.510 &Syntax.AB.Avenue :cal SetSyn("ave")<CR>
+an 50.10.520 &Syntax.AB.Awk :cal SetSyn("awk")<CR>
+an 50.10.530 &Syntax.AB.AYacc :cal SetSyn("ayacc")<CR>
+an 50.10.550 &Syntax.AB.B :cal SetSyn("b")<CR>
+an 50.10.560 &Syntax.AB.Baan :cal SetSyn("baan")<CR>
+an 50.10.570 &Syntax.AB.Basic.FreeBasic :cal SetSyn("freebasic")<CR>
+an 50.10.580 &Syntax.AB.Basic.IBasic :cal SetSyn("ibasic")<CR>
+an 50.10.590 &Syntax.AB.Basic.QBasic :cal SetSyn("basic")<CR>
+an 50.10.600 &Syntax.AB.Basic.Visual\ Basic :cal SetSyn("vb")<CR>
+an 50.10.610 &Syntax.AB.Bazaar\ commit\ file :cal SetSyn("bzr")<CR>
+an 50.10.620 &Syntax.AB.BC\ calculator :cal SetSyn("bc")<CR>
+an 50.10.630 &Syntax.AB.BDF\ font :cal SetSyn("bdf")<CR>
+an 50.10.640 &Syntax.AB.BibTeX.Bibliography\ database :cal SetSyn("bib")<CR>
+an 50.10.650 &Syntax.AB.BibTeX.Bibliography\ Style :cal SetSyn("bst")<CR>
+an 50.10.660 &Syntax.AB.BIND.BIND\ config :cal SetSyn("named")<CR>
+an 50.10.670 &Syntax.AB.BIND.BIND\ zone :cal SetSyn("bindzone")<CR>
+an 50.10.680 &Syntax.AB.Blank :cal SetSyn("blank")<CR>
 an 50.20.100 &Syntax.C.C :cal SetSyn("c")<CR>
 an 50.20.110 &Syntax.C.C++ :cal SetSyn("cpp")<CR>
 an 50.20.120 &Syntax.C.C# :cal SetSyn("cs")<CR>
@@ -107,11 +112,11 @@ an 50.20.250 &Syntax.C.Clean :cal SetSyn
 an 50.20.260 &Syntax.C.Clever :cal SetSyn("cl")<CR>
 an 50.20.270 &Syntax.C.Clipper :cal SetSyn("clipper")<CR>
 an 50.20.280 &Syntax.C.Cmake :cal SetSyn("cmake")<CR>
-an 50.20.290 &Syntax.C.Cold\ Fusion :cal SetSyn("cf")<CR>
-an 50.20.300 &Syntax.C.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
-an 50.20.310 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
-an 50.20.320 &Syntax.C.Config.Configure\.in :cal SetSyn("config")<CR>
-an 50.20.330 &Syntax.C.ConTeXt :cal SetSyn("context")<CR>
+an 50.20.290 &Syntax.C.Cmusrc :cal SetSyn("cmusrc")<CR>
+an 50.20.300 &Syntax.C.Cold\ Fusion :cal SetSyn("cf")<CR>
+an 50.20.310 &Syntax.C.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
+an 50.20.320 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
+an 50.20.330 &Syntax.C.Config.Configure\.in :cal SetSyn("config")<CR>
 an 50.20.340 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
 an 50.20.350 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
 an 50.20.360 &Syntax.C.Cobol :cal SetSyn("cobol")<CR>
@@ -189,46 +194,48 @@ an 50.40.340 &Syntax.FG.Gretl :cal SetSy
 an 50.40.350 &Syntax.FG.Groff :cal SetSyn("groff")<CR>
 an 50.40.360 &Syntax.FG.Groovy :cal SetSyn("groovy")<CR>
 an 50.40.370 &Syntax.FG.GTKrc :cal SetSyn("gtkrc")<CR>
-an 50.50.100 &Syntax.HIJK.Haskell.Haskell :cal SetSyn("haskell")<CR>
-an 50.50.110 &Syntax.HIJK.Haskell.Haskell-c2hs :cal SetSyn("chaskell")<CR>
-an 50.50.120 &Syntax.HIJK.Haskell.Haskell-literate :cal SetSyn("lhaskell")<CR>
-an 50.50.130 &Syntax.HIJK.Hercules :cal SetSyn("hercules")<CR>
-an 50.50.140 &Syntax.HIJK.Hex\ dump.XXD :cal SetSyn("xxd")<CR>
-an 50.50.150 &Syntax.HIJK.Hex\ dump.Intel\ MCS51 :cal SetSyn("hex")<CR>
-an 50.50.160 &Syntax.HIJK.HTML.HTML :cal SetSyn("html")<CR>
-an 50.50.170 &Syntax.HIJK.HTML.HTML\ with\ M4 :cal SetSyn("htmlm4")<CR>
-an 50.50.180 &Syntax.HIJK.HTML.HTML\ with\ Ruby\ (eRuby) :cal SetSyn("eruby")<CR>
-an 50.50.190 &Syntax.HIJK.HTML.Cheetah\ HTML\ template :cal SetSyn("htmlcheetah")<CR>
-an 50.50.200 &Syntax.HIJK.HTML.Django\ HTML\ template :cal SetSyn("htmldjango")<CR>
-an 50.50.210 &Syntax.HIJK.HTML.HTML/OS :cal SetSyn("htmlos")<CR>
-an 50.50.220 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
-an 50.50.230 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
-an 50.50.250 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
-an 50.50.260 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
-an 50.50.270 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
-an 50.50.280 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
-an 50.50.290 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
-an 50.50.300 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
-an 50.50.310 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
-an 50.50.320 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
-an 50.50.330 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
-an 50.50.340 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
-an 50.50.350 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
-an 50.50.360 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
-an 50.50.380 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
-an 50.50.390 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
-an 50.50.400 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
-an 50.50.410 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
-an 50.50.420 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
-an 50.50.430 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
-an 50.50.440 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
-an 50.50.450 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
-an 50.50.460 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
-an 50.50.470 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
-an 50.50.490 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
-an 50.50.500 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
-an 50.50.510 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
-an 50.50.520 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
+an 50.50.100 &Syntax.HIJK.Hamster :cal SetSyn("hamster")<CR>
+an 50.50.110 &Syntax.HIJK.Haskell.Haskell :cal SetSyn("haskell")<CR>
+an 50.50.120 &Syntax.HIJK.Haskell.Haskell-c2hs :cal SetSyn("chaskell")<CR>
+an 50.50.130 &Syntax.HIJK.Haskell.Haskell-literate :cal SetSyn("lhaskell")<CR>
+an 50.50.140 &Syntax.HIJK.Hercules :cal SetSyn("hercules")<CR>
+an 50.50.150 &Syntax.HIJK.Hex\ dump.XXD :cal SetSyn("xxd")<CR>
+an 50.50.160 &Syntax.HIJK.Hex\ dump.Intel\ MCS51 :cal SetSyn("hex")<CR>
+an 50.50.170 &Syntax.HIJK.HTML.HTML :cal SetSyn("html")<CR>
+an 50.50.180 &Syntax.HIJK.HTML.HTML\ with\ M4 :cal SetSyn("htmlm4")<CR>
+an 50.50.190 &Syntax.HIJK.HTML.HTML\ with\ Ruby\ (eRuby) :cal SetSyn("eruby")<CR>
+an 50.50.200 &Syntax.HIJK.HTML.Cheetah\ HTML\ template :cal SetSyn("htmlcheetah")<CR>
+an 50.50.210 &Syntax.HIJK.HTML.Django\ HTML\ template :cal SetSyn("htmldjango")<CR>
+an 50.50.220 &Syntax.HIJK.HTML.HTML/OS :cal SetSyn("htmlos")<CR>
+an 50.50.230 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
+an 50.50.240 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
+an 50.50.260 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
+an 50.50.270 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
+an 50.50.280 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
+an 50.50.290 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
+an 50.50.300 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
+an 50.50.310 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
+an 50.50.320 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
+an 50.50.330 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
+an 50.50.340 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
+an 50.50.350 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
+an 50.50.360 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
+an 50.50.370 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
+an 50.50.380 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
+an 50.50.400 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
+an 50.50.410 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
+an 50.50.420 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
+an 50.50.430 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
+an 50.50.440 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
+an 50.50.450 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
+an 50.50.460 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
+an 50.50.470 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
+an 50.50.480 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
+an 50.50.490 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
+an 50.50.510 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
+an 50.50.520 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
+an 50.50.530 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
+an 50.50.540 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
 an 50.60.100 &Syntax.L-Ma.Lace :cal SetSyn("lace")<CR>
 an 50.60.110 &Syntax.L-Ma.LamdaProlog :cal SetSyn("lprolog")<CR>
 an 50.60.120 &Syntax.L-Ma.Latte :cal SetSyn("latte")<CR>
@@ -268,45 +275,46 @@ an 50.60.460 &Syntax.L-Ma.Mathematica :c
 an 50.60.470 &Syntax.L-Ma.Matlab :cal SetSyn("matlab")<CR>
 an 50.60.480 &Syntax.L-Ma.Maxima :cal SetSyn("maxima")<CR>
 an 50.70.100 &Syntax.Me-NO.MEL\ (for\ Maya) :cal SetSyn("mel")<CR>
-an 50.70.110 &Syntax.Me-NO.Metafont :cal SetSyn("mf")<CR>
-an 50.70.120 &Syntax.Me-NO.MetaPost :cal SetSyn("mp")<CR>
-an 50.70.130 &Syntax.Me-NO.MGL :cal SetSyn("mgl")<CR>
-an 50.70.140 &Syntax.Me-NO.MMIX :cal SetSyn("mmix")<CR>
-an 50.70.150 &Syntax.Me-NO.Modconf :cal SetSyn("modconf")<CR>
-an 50.70.160 &Syntax.Me-NO.Model :cal SetSyn("model")<CR>
-an 50.70.170 &Syntax.Me-NO.Modsim\ III :cal SetSyn("modsim3")<CR>
-an 50.70.180 &Syntax.Me-NO.Modula\ 2 :cal SetSyn("modula2")<CR>
-an 50.70.190 &Syntax.Me-NO.Modula\ 3 :cal SetSyn("modula3")<CR>
-an 50.70.200 &Syntax.Me-NO.Monk :cal SetSyn("monk")<CR>
-an 50.70.210 &Syntax.Me-NO.Mplayer\ config :cal SetSyn("mplayerconf")<CR>
-an 50.70.220 &Syntax.Me-NO.MOO :cal SetSyn("moo")<CR>
-an 50.70.230 &Syntax.Me-NO.Mrxvtrc :cal SetSyn("mrxvtrc")<CR>
-an 50.70.240 &Syntax.Me-NO.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR>
-an 50.70.250 &Syntax.Me-NO.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR>
-an 50.70.260 &Syntax.Me-NO.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR>
-an 50.70.270 &Syntax.Me-NO.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR>
-an 50.70.280 &Syntax.Me-NO.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR>
-an 50.70.290 &Syntax.Me-NO.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR>
-an 50.70.300 &Syntax.Me-NO.Msql :cal SetSyn("msql")<CR>
-an 50.70.310 &Syntax.Me-NO.MuPAD :cal SetSyn("mupad")<CR>
-an 50.70.320 &Syntax.Me-NO.MUSHcode :cal SetSyn("mush")<CR>
-an 50.70.330 &Syntax.Me-NO.Muttrc :cal SetSyn("muttrc")<CR>
-an 50.70.350 &Syntax.Me-NO.Nanorc :cal SetSyn("nanorc")<CR>
-an 50.70.360 &Syntax.Me-NO.Nastran\ input/DMAP :cal SetSyn("nastran")<CR>
-an 50.70.370 &Syntax.Me-NO.Natural :cal SetSyn("natural")<CR>
-an 50.70.380 &Syntax.Me-NO.Netrc :cal SetSyn("netrc")<CR>
-an 50.70.390 &Syntax.Me-NO.Novell\ NCF\ batch :cal SetSyn("ncf")<CR>
-an 50.70.400 &Syntax.Me-NO.Not\ Quite\ C\ (LEGO) :cal SetSyn("nqc")<CR>
-an 50.70.410 &Syntax.Me-NO.Nroff :cal SetSyn("nroff")<CR>
-an 50.70.420 &Syntax.Me-NO.NSIS\ script :cal SetSyn("nsis")<CR>
-an 50.70.440 &Syntax.Me-NO.Objective\ C :cal SetSyn("objc")<CR>
-an 50.70.450 &Syntax.Me-NO.Objective\ C++ :cal SetSyn("objcpp")<CR>
-an 50.70.460 &Syntax.Me-NO.OCAML :cal SetSyn("ocaml")<CR>
-an 50.70.470 &Syntax.Me-NO.Occam :cal SetSyn("occam")<CR>
-an 50.70.480 &Syntax.Me-NO.Omnimark :cal SetSyn("omnimark")<CR>
-an 50.70.490 &Syntax.Me-NO.OpenROAD :cal SetSyn("openroad")<CR>
-an 50.70.500 &Syntax.Me-NO.Open\ Psion\ Lang :cal SetSyn("opl")<CR>
-an 50.70.510 &Syntax.Me-NO.Oracle\ config :cal SetSyn("ora")<CR>
+an 50.70.110 &Syntax.Me-NO.Messages\ (/var/log) :cal SetSyn("messages")<CR>
+an 50.70.120 &Syntax.Me-NO.Metafont :cal SetSyn("mf")<CR>
+an 50.70.130 &Syntax.Me-NO.MetaPost :cal SetSyn("mp")<CR>
+an 50.70.140 &Syntax.Me-NO.MGL :cal SetSyn("mgl")<CR>
+an 50.70.150 &Syntax.Me-NO.MMIX :cal SetSyn("mmix")<CR>
+an 50.70.160 &Syntax.Me-NO.Modconf :cal SetSyn("modconf")<CR>
+an 50.70.170 &Syntax.Me-NO.Model :cal SetSyn("model")<CR>
+an 50.70.180 &Syntax.Me-NO.Modsim\ III :cal SetSyn("modsim3")<CR>
+an 50.70.190 &Syntax.Me-NO.Modula\ 2 :cal SetSyn("modula2")<CR>
+an 50.70.200 &Syntax.Me-NO.Modula\ 3 :cal SetSyn("modula3")<CR>
+an 50.70.210 &Syntax.Me-NO.Monk :cal SetSyn("monk")<CR>
+an 50.70.220 &Syntax.Me-NO.Mplayer\ config :cal SetSyn("mplayerconf")<CR>
+an 50.70.230 &Syntax.Me-NO.MOO :cal SetSyn("moo")<CR>
+an 50.70.240 &Syntax.Me-NO.Mrxvtrc :cal SetSyn("mrxvtrc")<CR>
+an 50.70.250 &Syntax.Me-NO.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR>
+an 50.70.260 &Syntax.Me-NO.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR>
+an 50.70.270 &Syntax.Me-NO.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR>
+an 50.70.280 &Syntax.Me-NO.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR>
+an 50.70.290 &Syntax.Me-NO.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR>
+an 50.70.300 &Syntax.Me-NO.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR>
+an 50.70.310 &Syntax.Me-NO.Msql :cal SetSyn("msql")<CR>
+an 50.70.320 &Syntax.Me-NO.MuPAD :cal SetSyn("mupad")<CR>
+an 50.70.330 &Syntax.Me-NO.MUSHcode :cal SetSyn("mush")<CR>
+an 50.70.340 &Syntax.Me-NO.Muttrc :cal SetSyn("muttrc")<CR>
+an 50.70.360 &Syntax.Me-NO.Nanorc :cal SetSyn("nanorc")<CR>
+an 50.70.370 &Syntax.Me-NO.Nastran\ input/DMAP :cal SetSyn("nastran")<CR>
+an 50.70.380 &Syntax.Me-NO.Natural :cal SetSyn("natural")<CR>
+an 50.70.390 &Syntax.Me-NO.Netrc :cal SetSyn("netrc")<CR>
+an 50.70.400 &Syntax.Me-NO.Novell\ NCF\ batch :cal SetSyn("ncf")<CR>
+an 50.70.410 &Syntax.Me-NO.Not\ Quite\ C\ (LEGO) :cal SetSyn("nqc")<CR>
+an 50.70.420 &Syntax.Me-NO.Nroff :cal SetSyn("nroff")<CR>
+an 50.70.430 &Syntax.Me-NO.NSIS\ script :cal SetSyn("nsis")<CR>
+an 50.70.450 &Syntax.Me-NO.Objective\ C :cal SetSyn("objc")<CR>
+an 50.70.460 &Syntax.Me-NO.Objective\ C++ :cal SetSyn("objcpp")<CR>
+an 50.70.470 &Syntax.Me-NO.OCAML :cal SetSyn("ocaml")<CR>
+an 50.70.480 &Syntax.Me-NO.Occam :cal SetSyn("occam")<CR>
+an 50.70.490 &Syntax.Me-NO.Omnimark :cal SetSyn("omnimark")<CR>
+an 50.70.500 &Syntax.Me-NO.OpenROAD :cal SetSyn("openroad")<CR>
+an 50.70.510 &Syntax.Me-NO.Open\ Psion\ Lang :cal SetSyn("opl")<CR>
+an 50.70.520 &Syntax.Me-NO.Oracle\ config :cal SetSyn("ora")<CR>
 an 50.80.100 &Syntax.PQ.Packet\ filter\ conf :cal SetSyn("pf")<CR>
 an 50.80.110 &Syntax.PQ.Palm\ resource\ compiler :cal SetSyn("pilrc")<CR>
 an 50.80.120 &Syntax.PQ.Pam\ config :cal SetSyn("pamconf")<CR>
@@ -334,16 +342,17 @@ an 50.80.330 &Syntax.PQ.Povray.Povray\ s
 an 50.80.340 &Syntax.PQ.Povray.Povray\ configuration :cal SetSyn("povini")<CR>
 an 50.80.350 &Syntax.PQ.Prescribe\ (Kyocera) :cal SetSyn("prescribe")<CR>
 an 50.80.360 &Syntax.PQ.Printcap :cal SetSyn("pcap")<CR>
-an 50.80.370 &Syntax.PQ.Procmail :cal SetSyn("procmail")<CR>
-an 50.80.380 &Syntax.PQ.Product\ Spec\ File :cal SetSyn("psf")<CR>
-an 50.80.390 &Syntax.PQ.Progress :cal SetSyn("progress")<CR>
-an 50.80.400 &Syntax.PQ.Prolog :cal SetSyn("prolog")<CR>
-an 50.80.410 &Syntax.PQ.Protocols :cal SetSyn("protocols")<CR>
-an 50.80.420 &Syntax.PQ.Purify\ log :cal SetSyn("purifylog")<CR>
-an 50.80.430 &Syntax.PQ.Pyrex :cal SetSyn("pyrex")<CR>
-an 50.80.440 &Syntax.PQ.Python :cal SetSyn("python")<CR>
-an 50.80.460 &Syntax.PQ.Quake :cal SetSyn("quake")<CR>
-an 50.80.470 &Syntax.PQ.Quickfix\ window :cal SetSyn("qf")<CR>
+an 50.80.370 &Syntax.PQ.Privoxy :cal SetSyn("privoxy")<CR>
+an 50.80.380 &Syntax.PQ.Procmail :cal SetSyn("procmail")<CR>
+an 50.80.390 &Syntax.PQ.Product\ Spec\ File :cal SetSyn("psf")<CR>
+an 50.80.400 &Syntax.PQ.Progress :cal SetSyn("progress")<CR>
+an 50.80.410 &Syntax.PQ.Prolog :cal SetSyn("prolog")<CR>
+an 50.80.420 &Syntax.PQ.Protocols :cal SetSyn("protocols")<CR>
+an 50.80.430 &Syntax.PQ.Purify\ log :cal SetSyn("purifylog")<CR>
+an 50.80.440 &Syntax.PQ.Pyrex :cal SetSyn("pyrex")<CR>
+an 50.80.450 &Syntax.PQ.Python :cal SetSyn("python")<CR>
+an 50.80.470 &Syntax.PQ.Quake :cal SetSyn("quake")<CR>
+an 50.80.480 &Syntax.PQ.Quickfix\ window :cal SetSyn("qf")<CR>
 an 50.90.100 &Syntax.R-Sg.R.R :cal SetSyn("r")<CR>
 an 50.90.110 &Syntax.R-Sg.R.R\ help :cal SetSyn("rhelp")<CR>
 an 50.90.120 &Syntax.R-Sg.R.R\ noweb :cal SetSyn("rnoweb")<CR>
@@ -438,9 +447,10 @@ an 50.100.560 &Syntax.Sh-S.Stata.SMCL :c
 an 50.100.570 &Syntax.Sh-S.Stata.Stata :cal SetSyn("stata")<CR>
 an 50.100.580 &Syntax.Sh-S.Stored\ Procedures :cal SetSyn("stp")<CR>
 an 50.100.590 &Syntax.Sh-S.Strace :cal SetSyn("strace")<CR>
-an 50.100.600 &Syntax.Sh-S.Subversion\ commit :cal SetSyn("svn")<CR>
-an 50.100.610 &Syntax.Sh-S.Sudoers :cal SetSyn("sudoers")<CR>
-an 50.100.620 &Syntax.Sh-S.Sysctl\.conf :cal SetSyn("sysctl")<CR>
+an 50.100.600 &Syntax.Sh-S.Streaming\ descriptor\ file :cal SetSyn("sd")<CR>
+an 50.100.610 &Syntax.Sh-S.Subversion\ commit :cal SetSyn("svn")<CR>
+an 50.100.620 &Syntax.Sh-S.Sudoers :cal SetSyn("sudoers")<CR>
+an 50.100.630 &Syntax.Sh-S.Sysctl\.conf :cal SetSyn("sysctl")<CR>
 an 50.110.100 &Syntax.TUV.TADS :cal SetSyn("tads")<CR>
 an 50.110.110 &Syntax.TUV.Tags :cal SetSyn("tags")<CR>
 an 50.110.120 &Syntax.TUV.TAK.TAK\ compare :cal SetSyn("takcmp")<CR>
@@ -451,37 +461,39 @@ an 50.110.160 &Syntax.TUV.TealInfo :cal 
 an 50.110.170 &Syntax.TUV.Telix\ Salt :cal SetSyn("tsalt")<CR>
 an 50.110.180 &Syntax.TUV.Termcap/Printcap :cal SetSyn("ptcap")<CR>
 an 50.110.190 &Syntax.TUV.Terminfo :cal SetSyn("terminfo")<CR>
-an 50.110.200 &Syntax.TUV.TeX.TeX :cal SetSyn("tex")<CR>
-an 50.110.210 &Syntax.TUV.TeX.TeX\ configuration :cal SetSyn("texmf")<CR>
-an 50.110.220 &Syntax.TUV.TeX.Texinfo :cal SetSyn("texinfo")<CR>
-an 50.110.230 &Syntax.TUV.TF\ mud\ client :cal SetSyn("tf")<CR>
-an 50.110.240 &Syntax.TUV.Tidy\ configuration :cal SetSyn("tidy")<CR>
-an 50.110.250 &Syntax.TUV.Tilde :cal SetSyn("tilde")<CR>
-an 50.110.260 &Syntax.TUV.TPP :cal SetSyn("tpp")<CR>
-an 50.110.270 &Syntax.TUV.Trasys\ input :cal SetSyn("trasys")<CR>
-an 50.110.280 &Syntax.TUV.Trustees :cal SetSyn("trustees")<CR>
-an 50.110.290 &Syntax.TUV.TSS.Command\ Line :cal SetSyn("tsscl")<CR>
-an 50.110.300 &Syntax.TUV.TSS.Geometry :cal SetSyn("tssgm")<CR>
-an 50.110.310 &Syntax.TUV.TSS.Optics :cal SetSyn("tssop")<CR>
-an 50.110.330 &Syntax.TUV.Udev\ config :cal SetSyn("udevconf")<CR>
-an 50.110.340 &Syntax.TUV.Udev\ permissions :cal SetSyn("udevperm")<CR>
-an 50.110.350 &Syntax.TUV.Udev\ rules :cal SetSyn("udevrules")<CR>
-an 50.110.360 &Syntax.TUV.UIT/UIL :cal SetSyn("uil")<CR>
-an 50.110.370 &Syntax.TUV.UnrealScript :cal SetSyn("uc")<CR>
-an 50.110.380 &Syntax.TUV.Updatedb\.conf :cal SetSyn("updatedb")<CR>
-an 50.110.400 &Syntax.TUV.Valgrind :cal SetSyn("valgrind")<CR>
-an 50.110.410 &Syntax.TUV.Vera :cal SetSyn("vera")<CR>
-an 50.110.420 &Syntax.TUV.Verilog-AMS\ HDL :cal SetSyn("verilogams")<CR>
-an 50.110.430 &Syntax.TUV.Verilog\ HDL :cal SetSyn("verilog")<CR>
-an 50.110.440 &Syntax.TUV.Vgrindefs :cal SetSyn("vgrindefs")<CR>
-an 50.110.450 &Syntax.TUV.VHDL :cal SetSyn("vhdl")<CR>
-an 50.110.460 &Syntax.TUV.Vim.Vim\ help\ file :cal SetSyn("help")<CR>
-an 50.110.470 &Syntax.TUV.Vim.Vim\ script :cal SetSyn("vim")<CR>
-an 50.110.480 &Syntax.TUV.Vim.Viminfo\ file :cal SetSyn("viminfo")<CR>
-an 50.110.490 &Syntax.TUV.Virata\ config :cal SetSyn("virata")<CR>
-an 50.110.500 &Syntax.TUV.Visual\ Basic :cal SetSyn("vb")<CR>
-an 50.110.510 &Syntax.TUV.VRML :cal SetSyn("vrml")<CR>
-an 50.110.520 &Syntax.TUV.VSE\ JCL :cal SetSyn("vsejcl")<CR>
+an 50.110.200 &Syntax.TUV.TeX.TeX/LaTeX :cal SetSyn("tex")<CR>
+an 50.110.210 &Syntax.TUV.TeX.plain\ TeX :cal SetSyn("plaintex")<CR>
+an 50.110.220 &Syntax.TUV.TeX.ConTeXt :cal SetSyn("context")<CR>
+an 50.110.230 &Syntax.TUV.TeX.TeX\ configuration :cal SetSyn("texmf")<CR>
+an 50.110.240 &Syntax.TUV.TeX.Texinfo :cal SetSyn("texinfo")<CR>
+an 50.110.250 &Syntax.TUV.TF\ mud\ client :cal SetSyn("tf")<CR>
+an 50.110.260 &Syntax.TUV.Tidy\ configuration :cal SetSyn("tidy")<CR>
+an 50.110.270 &Syntax.TUV.Tilde :cal SetSyn("tilde")<CR>
+an 50.110.280 &Syntax.TUV.TPP :cal SetSyn("tpp")<CR>
+an 50.110.290 &Syntax.TUV.Trasys\ input :cal SetSyn("trasys")<CR>
+an 50.110.300 &Syntax.TUV.Trustees :cal SetSyn("trustees")<CR>
+an 50.110.310 &Syntax.TUV.TSS.Command\ Line :cal SetSyn("tsscl")<CR>
+an 50.110.320 &Syntax.TUV.TSS.Geometry :cal SetSyn("tssgm")<CR>
+an 50.110.330 &Syntax.TUV.TSS.Optics :cal SetSyn("tssop")<CR>
+an 50.110.350 &Syntax.TUV.Udev\ config :cal SetSyn("udevconf")<CR>
+an 50.110.360 &Syntax.TUV.Udev\ permissions :cal SetSyn("udevperm")<CR>
+an 50.110.370 &Syntax.TUV.Udev\ rules :cal SetSyn("udevrules")<CR>
+an 50.110.380 &Syntax.TUV.UIT/UIL :cal SetSyn("uil")<CR>
+an 50.110.390 &Syntax.TUV.UnrealScript :cal SetSyn("uc")<CR>
+an 50.110.400 &Syntax.TUV.Updatedb\.conf :cal SetSyn("updatedb")<CR>
+an 50.110.420 &Syntax.TUV.Valgrind :cal SetSyn("valgrind")<CR>
+an 50.110.430 &Syntax.TUV.Vera :cal SetSyn("vera")<CR>
+an 50.110.440 &Syntax.TUV.Verilog-AMS\ HDL :cal SetSyn("verilogams")<CR>
+an 50.110.450 &Syntax.TUV.Verilog\ HDL :cal SetSyn("verilog")<CR>
+an 50.110.460 &Syntax.TUV.Vgrindefs :cal SetSyn("vgrindefs")<CR>
+an 50.110.470 &Syntax.TUV.VHDL :cal SetSyn("vhdl")<CR>
+an 50.110.480 &Syntax.TUV.Vim.Vim\ help\ file :cal SetSyn("help")<CR>
+an 50.110.490 &Syntax.TUV.Vim.Vim\ script :cal SetSyn("vim")<CR>
+an 50.110.500 &Syntax.TUV.Vim.Viminfo\ file :cal SetSyn("viminfo")<CR>
+an 50.110.510 &Syntax.TUV.Virata\ config :cal SetSyn("virata")<CR>
+an 50.110.520 &Syntax.TUV.Visual\ Basic :cal SetSyn("vb")<CR>
+an 50.110.530 &Syntax.TUV.VRML :cal SetSyn("vrml")<CR>
+an 50.110.540 &Syntax.TUV.VSE\ JCL :cal SetSyn("vsejcl")<CR>
 an 50.120.100 &Syntax.WXYZ.WEB.CWEB :cal SetSyn("cweb")<CR>
 an 50.120.110 &Syntax.WXYZ.WEB.WEB :cal SetSyn("web")<CR>
 an 50.120.120 &Syntax.WXYZ.WEB.WEB\ Changes :cal SetSyn("change")<CR>
--- a/runtime/syntax/amiga.vim
+++ b/runtime/syntax/amiga.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	AmigaDos
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Sep 06, 2005
-" Version:     5
+" Last Change:	Sep 11, 2006
+" Version:     6
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 
 " For version 5.x: Clear all syntax items
@@ -23,7 +23,7 @@ syn match amiAlias	"\<[a-zA-Z][a-zA-Z0-9
 syn match amiAlias	"\<[a-zA-Z][a-zA-Z0-9]\+:[a-zA-Z0-9/]*/"
 
 " strings
-syn region amiString	start=+"+ end=+"+ oneline
+syn region amiString	start=+"+ end=+"+ oneline contains=@Spell
 
 " numbers
 syn match amiNumber	"\<\d\+\>"
--- a/runtime/syntax/aspvbs.vim
+++ b/runtime/syntax/aspvbs.vim
@@ -2,7 +2,8 @@
 " Language:	Microsoft VBScript Web Content (ASP)
 " Maintainer:	Devin Weaver <ktohg@tritarget.com> (non-functional)
 " URL:		http://tritarget.com/pub/vim/syntax/aspvbs.vim (broken)
-" Last Change:	2004 Jul 29
+" Last Change:	2006 Jun 19
+" 		by Dan Casey
 " Version:	$Revision$
 " Thanks to Jay-Jay <vim@jay-jay.net> for a syntax sync hack, hungarian
 " notation, and extra highlighting.
@@ -35,7 +36,7 @@ syn cluster htmlPreProc add=AspVBScriptI
 hi def AspVBSVariableSimple   term=standout  ctermfg=3  guifg=#99ee99
 hi def AspVBSVariableComplex  term=standout  ctermfg=3  guifg=#ee9900
 syn match AspVBSVariableSimple  contained "\<\(bln\|byt\|dtm\=\|dbl\|int\|str\)\u\w*"
-syn match AspVBSVariableComplex contained "\<\(arr\|obj\)\u\w*"
+syn match AspVBSVariableComplex contained "\<\(arr\|ary\|obj\)\u\w*"
 
 
 " Functions and methods that are in VB but will cause errors in an ASP page
@@ -67,8 +68,9 @@ syn match AspVBSError contained "Respose
 
 " AspVBScript Reserved Words.
 syn match AspVBSStatement contained "\<On\s\+Error\s\+\(Resume\s\+Next\|goto\s\+0\)\>\|\<Next\>"
-syn match AspVBSStatement contained "\<End\s\+\(If\|For\|Select\|Class\|Function\|Sub\|With\)\>"
+syn match AspVBSStatement contained "\<End\s\+\(If\|For\|Select\|Class\|Function\|Sub\|With\|Property\)\>"
 syn match AspVBSStatement contained "\<Exit\s\+\(Do\|For\|Sub\|Function\)\>"
+syn match AspVBSStatement contained "\<Exit\s\+\(Do\|For\|Sub\|Function\|Property\)\>"
 syn match AspVBSStatement contained "\<Option\s\+Explicit\>"
 syn match AspVBSStatement contained "\<For\s\+Each\>\|\<For\>"
 syn match AspVBSStatement contained "\<Set\>"
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/autoit.vim
@@ -0,0 +1,1111 @@
+" Vim syntax file
+"
+" Language:	AutoIt v3 (http://www.autoitscript.com/autoit3/)
+" Maintainer:	Jared Breland <jbreland@legroom.net>
+" Authored By:	Riccardo Casini <ric@libero.it>
+" Script URL:	http://www.vim.org/scripts/script.php?script_id=1239
+" ChangeLog:	Please visit the script URL for detailed change information
+
+" AutoIt is not case dependent
+syn case ignore
+
+" Definitions for AutoIt reserved keywords
+syn keyword autoitKeyword Default False True
+syn keyword autoitKeyword Const Dim Global Local ReDim
+syn keyword autoitKeyword If Else ElseIf Then EndIf
+syn keyword autoitKeyword Select Switch Case EndSelect EndSwitch
+syn keyword autoitKeyword Enum For In To Step Next
+syn keyword autoitKeyword With While EndWith Wend Do Until
+syn keyword autoitKeyword ContinueCase ContinueLoop ExitLoop Exit
+
+" inside script inclusion and global options
+syn match autoitIncluded display contained "<[^>]*>"
+syn match autoitInclude	display "^\s*#\s*include\>\s*["<]"
+	\ contains=autoitIncluded,autoitString
+syn match autoitInclude "^\s*#include-once\>"
+syn match autoitInclude "^\s*#NoTrayIcon\>"
+syn match autoitInclude "^\s*#RequireAdmin\>"
+
+" user-defined functions
+syn keyword autoitKeyword Func ByRef EndFunc Return OnAutoItStart OnAutoItExit
+
+" built-in functions
+" environment management
+syn keyword autoitFunction ClipGet ClipPut EnvGet EnvSet EnvUpdate MemGetStats
+" file, directory, and disk management
+syn keyword autoitFunction ConsoleRead ConsoleWrite ConsoleWriteError
+syn keyword autoitFunction DirCopy DirCreate DirGetSize DirMove DirRemove
+syn keyword autoitFunction DriveGetDrive DriveGetFileSystem DriveGetLabel
+	\ DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet
+	\ DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus
+syn keyword autoitFunction FileChangeDir FileClose FileCopy FileCreateNTFSLink
+	\ FileCreateShortcut FileDelete FileExists FileFindFirstFile
+	\ FileFindNextFile FileGetAttrib FileGetLongName FileGetShortcut
+	\ FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall
+	\ FileMove FileOpen FileOpenDialog FileRead FileReadLine FileRecycle
+	\ FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib
+	\ FileSetTime FileWrite FileWriteLine
+syn keyword autoitFunction IniDelete IniRead IniReadSection IniReadSectionNames
+	\ IniRenameSection IniWrite IniWriteSection
+syn keyword autoitFunction StderrRead StdinWrite StdoutRead
+" graphic and sound
+syn keyword autoitFunction Beep PixelChecksum PixelGetColor PixelSearch
+	\ SoundPlay SoundSetWaveVolume
+" gui reference
+syn keyword autoitFunction GUICreate GUIDelete GUICtrlGetHandle GUICtrlGetState
+	\ GUICtrlRead GUICtrlRecvMsg GUICtrlSendMsg GUICtrlSendToDummy
+	\ GUIGetCursorInfo GUIGetMsg GUIRegisterMsg GUIStartGroup GUISwitch
+syn keyword autoitFunction GUICtrlCreateAvi GUICtrlCreateButton
+	\ GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu
+	\ GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit
+	\ GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon
+	\ GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList
+	\ GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu
+	\ GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj
+	\ GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio
+	\ GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem
+	\ GUICtrlCreateTreeView GUICtrlCreateTreeViewItem
+	\ GUICtrlCreateUpDown GUICtrlDelete
+syn keyword autoitFunction GUICtrlRegisterListViewSort GUICtrlSetBkColor
+	\ GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetFont
+	\ GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent
+	\ GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle
+	\ GUICtrlSetTip
+syn keyword autoitFunction GUISetBkColor GUISetCoord GUISetCursor GUISetFont
+	\ GUISetHelp GUISetIcon GUISetOnEvent GUISetState
+" keyboard control
+syn keyword autoitFunction HotKeySet Send
+" math
+syn keyword autoitFunction Abs ACos ASin ATan BitAND BitNOT BitOR BitRotate
+	\ BitShift BitXOR Cos Ceiling Exp Floor Log Mod Random Round Sin Sqrt
+	\ SRandom Tan
+" message boxes and dialogs
+syn keyword autoitFunction InputBox MsgBox ProgressOff ProgressOn ProgressSet
+	\ SplashImageOn SplashOff SplashTextOn ToolTip
+" miscellaneous
+syn keyword autoitFunction AdlibDisable AdlibEnable AutoItSetOption
+	\ AutoItWinGetTitle AutoItWinSetTitle BlockInput Break Call CDTray
+	\ Execute Opt SetError SetExtended
+" mouse control
+syn keyword autoitFunction MouseClick MouseClickDrag MouseDown MouseGetCursor
+	\ MouseGetPos MouseMove MouseUp MouseWheel
+" network
+syn keyword autoitFunction FtpSetProxy HttpSetProxy InetGet InetGetSize Ping
+	\ TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIp TCPRecv
+	\ TCPSend TCPShutDown TCPStartup UDPBind UDPCloseSocket UDPOpen UDPRecv
+	\ UDPSend UDPShutdown UDPStartup
+" obj/com reference
+syn keyword autoitFunction ObjCreate ObjEvent ObjGet ObjName
+" process management
+syn keyword autoitFunction DllCall DllClose DllOpen DllStructCreate
+	\ DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData
+	\ ProcessClose ProcessExists ProcessSetPriority ProcessList ProcessWait
+	\ ProcessWaitClose Run RunAsSet RunWait ShellExecute ShellExecuteWait
+	\ Shutdown
+	" removed from 3.2.0 docs - PluginClose PluginOpen
+" registry management
+syn keyword autoitFunction RegDelete RegEnumKey RegEnumVal RegRead RegWrite
+" string management
+syn keyword autoitFunction StringAddCR StringFormat StringInStr StringIsAlNum
+	\ StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt
+	\ StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft
+	\ StringLen StringLower StringMid StringRegExp StringRegExpReplace
+	\ StringReplace StringRight StringSplit StringStripCR StringStripWS
+	\ StringTrimLeft StringTrimRight StringUpper
+" timer and delay
+syn keyword autoitFunction Sleep TimerInit TimerDiff
+" tray
+syn keyword autoitFunction TrayCreateItem TrayCreateMenu TrayItemDelete
+	\ TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent
+	\ TrayItemSetState TrayItemSetText TrayGetMsg TraySetClick TraySetIcon
+	\ TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip
+" variables and conversions
+syn keyword autoitFunction Asc Assign Binary Chr Dec Eval Hex HWnd Int IsAdmin
+	\ IsArray IsBinaryString IsBool IsDeclared IsDllStruct IsFloat IsHWnd
+	\ IsInt IsKeyword IsNumber IsObj IsString Number String UBound
+" window management
+syn keyword autoitFunction WinActivate WinActive WinClose WinExists WinFlash
+	\ WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos
+	\ WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList
+	\ WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove
+	\ WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive
+	\ WinWaitClose WinWaitNotActive
+syn keyword autoitFunction ControlClick ControlCommand ControlDisable
+	\ ControlEnable ControlFocus ControlGetFocus ControlGetHandle
+	\ ControlGetPos ControlGetText ControlHide ControlListView ControlMove
+	\ ControlSend ControlSetText ControlShow StatusBarGetText
+
+" user defined functions
+" array
+syn keyword autoitFunction _ArrayAdd _ArrayBinarySearch _ArrayCreate
+	\ _ArrayDelete _ArrayDisplay _ArrayInsert _ArrayMax _ArrayMaxIndex
+	\ _ArrayMin _ArrayMinIndex _ArrayPop _ArrayPush _ArrayReverse
+	\ _ArraySearch _ArraySort _ArraySwap _ArrayToClip _ArrayToString
+	\ _ArrayTrim
+" color
+syn keyword autoitFunction _ColorgetBlue _ColorGetGreen _ColorGetRed
+" date
+syn keyword autoitFunction _DateAdd _DateDayOfWeek _DateDaysInMonth _DateDiff
+	\ _DateIsLeapYear _DateIsValid _DateTimeFormat _DateTimeSplit
+	\ _DateToDayOfWeek _ToDayOfWeekISO _DateToDayValue _DayValueToDate _Now
+	\ _NowCalc _NowCalcDate _NowDate _NowTime _SetDate _SetTime _TicksToTime
+	\ _TimeToTicks _WeekNumberISO
+" file
+syn keyword autoitFunction _FileCountLines _FileCreate _FileListToArray
+	\ _FilePrint _FileReadToArray _FileWriteFromArray _FileWriteLog
+	\ _FileWriteToLine _PathFull _PathMake _PathSplit _ReplaceStringInFile
+	\ _TempFile
+" guicombo
+syn keyword autoitFunction _GUICtrlComboAddDir _GUICtrlComboAddString
+	\ _GUICtrlComboAutoComplete _GUICtrlComboDeleteString
+	\ _GUICtrlComboFindString _GUICtrlComboGetCount _GUICtrlComboGetCurSel
+	\ _GUICtrlComboGetDroppedControlRect _GUICtrlComboGetDroppedState
+	\ _GUICtrlComboGetDroppedWidth _GUICtrlComboGetEditSel
+	\ _GUICtrlComboGetExtendedUI _GUICtrlComboGetHorizontalExtent
+	\ _GUICtrlComboGetItemHeight _GUICtrlComboGetLBText
+	\ _GUICtrlComboGetLBTextLen _GUICtrlComboGetList _GUICtrlComboGetLocale
+	\ _GUICtrlComboGetMinVisible _GUICtrlComboGetTopIndex
+	\ _GUICtrlComboInitStorage _GUICtrlComboInsertString
+	\ _GUICtrlComboLimitText _GUICtrlComboResetContent
+	\ _GUICtrlComboSelectString _GUICtrlComboSetCurSel
+	\ _GUICtrlComboSetDroppedWidth _GUICtrlComboSetEditSel
+	\ _GUICtrlComboSetExtendedUI _GUICtrlComboSetHorizontalExtent
+	\ _GUICtrlComboSetItemHeight _GUICtrlComboSetMinVisible
+	\ _GUICtrlComboSetTopIndex _GUICtrlComboShowDropDown
+" guiedit
+syn keyword autoitFunction _GUICtrlEditCanUndo _GUICtrlEditEmptyUndoBuffer
+	\ _GuiCtrlEditFind _GUICtrlEditGetFirstVisibleLine _GUICtrlEditGetLine
+	\ _GUICtrlEditGetLineCount _GUICtrlEditGetModify _GUICtrlEditGetRect
+	\ _GUICtrlEditGetSel _GUICtrlEditLineFromChar _GUICtrlEditLineIndex
+	\ _GUICtrlEditLineLength _GUICtrlEditLineScroll _GUICtrlEditReplaceSel
+	\ _GUICtrlEditScroll _GUICtrlEditSetModify _GUICtrlEditSetRect
+	\ _GUICtrlEditSetSel _GUICtrlEditUndo
+" guiipaddress
+syn keyword autoitFunction _GUICtrlIpAddressClear _GUICtrlIpAddressCreate
+	\ _GUICtrlIpAddressDelete _GUICtrlIpAddressGet _GUICtrlIpAddressIsBlank
+	\ _GUICtrlIpAddressSet _GUICtrlIpAddressSetFocus
+	\ _GUICtrlIpAddressSetFont
+	\ _GUICtrlIpAddressSetRange _GUICtrlIpAddressShowHide
+" guilist
+syn keyword autoitFunction _GUICtrlListAddDir _GUICtrlListAddItem
+	\ _GUICtrlListClear
+	\ _GUICtrlListCount _GUICtrlListDeleteItem _GUICtrlListFindString
+	\ _GUICtrlListGetAnchorIndex _GUICtrlListGetCaretIndex
+	\ _GUICtrlListGetHorizontalExtent _GUICtrlListGetInfo
+	\ _GUICtrlListGetItemRect _GUICtrlListGetLocale _GUICtrlListGetSelCount
+	\ _GUICtrlListGetSelItems _GUICtrlListGetSelItemsText
+	\ _GUICtrlListGetSelState _GUICtrlListGetText _GUICtrlListGetTextLen
+	\ _GUICtrlListGetTopIndex _GUICtrlListInsertItem
+	\ _GUICtrlListReplaceString _GUICtrlListSelectedIndex
+	\ _GUICtrlListSelectIndex _GUICtrlListSelectString
+	\ _GUICtrlListSelItemRange _GUICtrlListSelItemRangeEx
+	\ _GUICtrlListSetAnchorIndex _GUICtrlListSetCaretIndex
+	\ _GUICtrlListSetHorizontalExtent _GUICtrlListSetLocale
+	\ _GUICtrlListSetSel _GUICtrlListSetTopIndex _GUICtrlListSort
+	\ _GUICtrlListSwapString
+" guilistview
+syn keyword autoitFunction _GUICtrlListViewCopyItems
+	\ _GUICtrlListViewDeleteAllItems _GUICtrlListViewDeleteColumn
+	\ _GUICtrlListViewDeleteItem _GUICtrlListViewDeleteItemsSelected
+	\ _GUICtrlListViewEnsureVisible _GUICtrlListViewFindItem
+	\ _GUICtrlListViewGetBackColor _GUICtrlListViewGetCallBackMask
+	\ _GUICtrlListViewGetCheckedState _GUICtrlListViewGetColumnOrder
+	\ _GUICtrlListViewGetColumnWidth _GUICtrlListViewGetCounterPage
+	\ _GUICtrlListViewGetCurSel _GUICtrlListViewGetExtendedListViewStyle
+	\ _GUICtrlListViewGetHeader _GUICtrlListViewGetHotCursor
+	\ _GUICtrlListViewGetHotItem _GUICtrlListViewGetHoverTime
+	\ _GUICtrlListViewGetItemCount _GUICtrlListViewGetItemText
+	\ _GUICtrlListViewGetItemTextArray _GUICtrlListViewGetNextItem
+	\ _GUICtrlListViewGetSelectedCount _GUICtrlListViewGetSelectedIndices
+	\ _GUICtrlListViewGetSubItemsCount _GUICtrlListViewGetTopIndex
+	\ _GUICtrlListViewGetUnicodeFormat _GUICtrlListViewHideColumn
+	\ _GUICtrlListViewInsertColumn _GUICtrlListViewInsertItem
+	\ _GUICtrlListViewJustifyColumn _GUICtrlListViewScroll
+	\ _GUICtrlListViewSetCheckState _GUICtrlListViewSetColumnHeaderText
+	\ _GUICtrlListViewSetColumnOrder _GUICtrlListViewSetColumnWidth
+	\ _GUICtrlListViewSetHotItem _GUICtrlListViewSetHoverTime
+	\ _GUICtrlListViewSetItemCount _GUICtrlListViewSetItemSelState
+	\ _GUICtrlListViewSetItemText _GUICtrlListViewSort
+" guimonthcal
+syn keyword autoitFunction _GUICtrlMonthCalGet1stDOW _GUICtrlMonthCalGetColor
+	\ _GUICtrlMonthCalGetDelta _GUICtrlMonthCalGetMaxSelCount
+	\ _GUICtrlMonthCalGetMaxTodayWidth _GUICtrlMonthCalGetMinReqRect
+	\ _GUICtrlMonthCalSet1stDOW _GUICtrlMonthCalSetColor
+	\ _GUICtrlMonthCalSetDelta _GUICtrlMonthCalSetMaxSelCount
+" guislider
+syn keyword autoitFunction _GUICtrlSliderClearTics _GUICtrlSliderGetLineSize
+	\ _GUICtrlSliderGetNumTics _GUICtrlSliderGetPageSize
+	\ _GUICtrlSliderGetPos _GUICtrlSliderGetRangeMax
+	\ _GUICtrlSliderGetRangeMin _GUICtrlSliderSetLineSize
+	\ _GUICtrlSliderSetPageSize _GUICtrlSliderSetPos
+	\ _GUICtrlSliderSetTicFreq
+" guistatusbar
+syn keyword autoitFunction _GuiCtrlStatusBarCreate
+	\ _GUICtrlStatusBarCreateProgress _GUICtrlStatusBarDelete
+	\ _GuiCtrlStatusBarGetBorders _GuiCtrlStatusBarGetIcon
+	\ _GuiCtrlStatusBarGetParts _GuiCtrlStatusBarGetRect
+	\ _GuiCtrlStatusBarGetText _GuiCtrlStatusBarGetTextLength
+	\ _GuiCtrlStatusBarGetTip _GuiCtrlStatusBarGetUnicode
+	\ _GUICtrlStatusBarIsSimple _GuiCtrlStatusBarResize
+	\ _GuiCtrlStatusBarSetBKColor _GuiCtrlStatusBarSetIcon
+	\ _GuiCtrlStatusBarSetMinHeight _GUICtrlStatusBarSetParts
+	\ _GuiCtrlStatusBarSetSimple _GuiCtrlStatusBarSetText
+	\ _GuiCtrlStatusBarSetTip _GuiCtrlStatusBarSetUnicode
+	\ _GUICtrlStatusBarShowHide 
+" guitab
+syn keyword autoitFunction _GUICtrlTabDeleteAllItems _GUICtrlTabDeleteItem
+	\ _GUICtrlTabDeselectAll _GUICtrlTabGetCurFocus _GUICtrlTabGetCurSel
+	\ _GUICtrlTabGetExtendedStyle _GUICtrlTabGetItemCount
+	\ _GUICtrlTabGetItemRect _GUICtrlTabGetRowCount
+	\ _GUICtrlTabGetUnicodeFormat _GUICtrlTabHighlightItem
+	\ _GUICtrlTabSetCurFocus _GUICtrlTabSetCurSel
+	\ _GUICtrlTabSetMinTabWidth _GUICtrlTabSetUnicodeFormat
+" guitreeview
+syn keyword autoitFunction _GUICtrlTreeViewDeleteAllItems
+	\ _GUICtrlTreeViewDeleteItem _GUICtrlTreeViewExpand
+	\ _GUICtrlTreeViewGetBkColor _GUICtrlTreeViewGetCount
+	\ _GUICtrlTreeViewGetIndent _GUICtrlTreeViewGetLineColor
+	\ _GUICtrlTreeViewGetParentHandle _GUICtrlTreeViewGetParentID
+	\ _GUICtrlTreeViewGetState _GUICtrlTreeViewGetText
+	\ _GUICtrlTreeViewGetTextColor _GUICtrlTreeViewItemGetTree
+	\ _GUICtrlTreeViewInsertItem _GUICtrlTreeViewSetBkColor
+	\ _GUICtrlTreeViewSetIcon _GUICtrlTreeViewSetIndent
+	\ _GUICtrlTreeViewSetLineColor GUICtrlTreeViewSetState
+	\ _GUICtrlTreeViewSetText _GUICtrlTreeViewSetTextColor
+	\ _GUICtrlTreeViewSort
+" ie
+syn keyword autoitFunction _IE_Example _IE_Introduction _IE_VersionInfo
+	\ _IEAction _IEAttach _IEBodyReadHTML _IEBodyReadText _IEBodyWriteHTML
+	\ _IECreate _IECreateEmbedded _IEDocGetObj _IEDocInsertHTML
+	\ _IEDocInsertText _IEDocReadHTML _IEDocWriteHTML
+	\ _IEErrorHandlerDeRegister _IEErrorHandlerRegister _IEErrorNotify
+	\ _IEFormElementCheckboxSelect _IEFormElementGetCollection
+	\ _IEFormElementGetObjByName _IEFormElementGetValue
+	\ _IEFormElementOptionSelect _IEFormElementRadioSelect
+	\ _IEFormElementSetValue _IEFormGetCollection _IEFormGetObjByName
+	\ _IEFormImageClick _IEFormReset _IEFormSubmit _IEFrameGetCollection
+	\ _IEFrameGetObjByName _IEGetObjByName _IEHeadInsertEventScript
+	\ _IEImgClick _IEImgGetCollection _IEIsFrameSet _IELinkClickByIndex
+	\ _IELinkClickByText _IELinkGetCollection _IELoadWait _IELoadWaitTimeout
+	\ _IENavigate _IEPropertyGet _IEPropertySet _IEQuit
+	\ _IETableGetCollection _IETableWriteToArray _IETagNameAllGetCollection
+	\  _IETagNameGetCollection
+" inet
+syn keyword autoitFunction _GetIP _INetExplorerCapable _INetGetSource _INetMail
+	\ _INetSmtpMail _TCPIpToName
+" math
+syn keyword autoitFunction _Degree _MathCheckDiv _Max _Min _Radian
+" miscellaneous
+syn keyword autoitFunction _ChooseColor _ChooseFont _ClipPutFile _Iif
+	\ _IsPressed _MouseTrap _SendMessage _Singleton
+" process
+syn keyword autoitFunction _ProcessGetName _ProcessGetPriority _RunDOS
+" sound
+syn keyword autoitFunction _SoundClose _SoundLength _SoundOpen _SoundPause
+	\ _SoundPlay _SoundPos _SoundResume _SoundSeek _SoundStatus _SoundStop
+" sqlite
+syn keyword autoitFunction _SQLite_Changes _SQLite_Close
+	\ _SQLite_Display2DResult _SQLite_Encode _SQLite_ErrCode _SQLite_ErrMsg
+	\ _SQLite_Escape _SQLite_Exec _SQLite_FetchData _SQLite_FetchNames
+	\ _SQLite_GetTable _SQLite_GetTable2D _SQLite_LastInsertRowID
+	\ _SQLite_LibVersion _SQLite_Open _SQLite_Query _SQLite_QueryFinalize
+	\ _SQLite_QueryReset _SQLite_QuerySingleRow _SQLite_SaveMode
+	\ _SQLite_SetTimeout _SQLite_Shutdown _SQLite_SQLiteExe _SQLite_Startup
+	\ _SQLite_TotalChanges
+" string
+syn keyword autoitFunction _HexToString _StringAddComma _StringBetween
+	\ _StringEncrypt _StringInsert _StringProper _StringRepeat
+	\ _StringReverse _StringToHex
+" visa
+syn keyword autoitFunction _viClose _viExecCommand _viFindGpib _viGpibBusReset
+	\ _viGTL _viOpen _viSetAttribute _viSetTimeout
+
+" read-only macros
+syn match autoitBuiltin "@AppData\(Common\)\=Dir"
+syn match autoitBuiltin "@AutoItExe"
+syn match autoitBuiltin "@AutoItPID"
+syn match autoitBuiltin "@AutoItVersion"
+syn match autoitBuiltin "@COM_EventObj"
+syn match autoitBuiltin "@CommonFilesDir"
+syn match autoitBuiltin "@Compiled"
+syn match autoitBuiltin "@ComputerName"
+syn match autoitBuiltin "@ComSpec"
+syn match autoitBuiltin "@CR\(LF\)\="
+syn match autoitBuiltin "@Desktop\(Common\)\=Dir"
+syn match autoitBuiltin "@DesktopDepth"
+syn match autoitBuiltin "@DesktopHeight"
+syn match autoitBuiltin "@DesktopRefresh"
+syn match autoitBuiltin "@DesktopWidth"
+syn match autoitBuiltin "@DocumentsCommonDir"
+syn match autoitBuiltin "@Error"
+syn match autoitBuiltin "@ExitCode"
+syn match autoitBuiltin "@ExitMethod"
+syn match autoitBuiltin "@Extended"
+syn match autoitBuiltin "@Favorites\(Common\)\=Dir"
+syn match autoitBuiltin "@GUI_CtrlId"
+syn match autoitBuiltin "@GUI_CtrlHandle"
+syn match autoitBuiltin "@GUI_DragId"
+syn match autoitBuiltin "@GUI_DragFile"
+syn match autoitBuiltin "@GUI_DropId"
+syn match autoitBuiltin "@GUI_WinHandle"
+syn match autoitBuiltin "@HomeDrive"
+syn match autoitBuiltin "@HomePath"
+syn match autoitBuiltin "@HomeShare"
+syn match autoitBuiltin "@HOUR"
+syn match autoitBuiltin "@HotKeyPressed"
+syn match autoitBuiltin "@InetGetActive"
+syn match autoitBuiltin "@InetGetBytesRead"
+syn match autoitBuiltin "@IPAddress[1234]"
+syn match autoitBuiltin "@KBLayout"
+syn match autoitBuiltin "@LF"
+syn match autoitBuiltin "@Logon\(DNS\)\=Domain"
+syn match autoitBuiltin "@LogonServer"
+syn match autoitBuiltin "@MDAY"
+syn match autoitBuiltin "@MIN"
+syn match autoitBuiltin "@MON"
+syn match autoitBuiltin "@MyDocumentsDir"
+syn match autoitBuiltin "@NumParams"
+syn match autoitBuiltin "@OSBuild"
+syn match autoitBuiltin "@OSLang"
+syn match autoitBuiltin "@OSServicePack"
+syn match autoitBuiltin "@OSTYPE"
+syn match autoitBuiltin "@OSVersion"
+syn match autoitBuiltin "@ProcessorArch"
+syn match autoitBuiltin "@ProgramFilesDir"
+syn match autoitBuiltin "@Programs\(Common\)\=Dir"
+syn match autoitBuiltin "@ScriptDir"
+syn match autoitBuiltin "@ScriptFullPath"
+syn match autoitBuiltin "@ScriptLineNumber"
+syn match autoitBuiltin "@ScriptName"
+syn match autoitBuiltin "@SEC"
+syn match autoitBuiltin "@StartMenu\(Common\)\=Dir"
+syn match autoitBuiltin "@Startup\(Common\)\=Dir"
+syn match autoitBuiltin "@SW_DISABLE"
+syn match autoitBuiltin "@SW_ENABLE"
+syn match autoitBuiltin "@SW_HIDE"
+syn match autoitBuiltin "@SW_LOCK"
+syn match autoitBuiltin "@SW_MAXIMIZE"
+syn match autoitBuiltin "@SW_MINIMIZE"
+syn match autoitBuiltin "@SW_RESTORE"
+syn match autoitBuiltin "@SW_SHOW"
+syn match autoitBuiltin "@SW_SHOWDEFAULT"
+syn match autoitBuiltin "@SW_SHOWMAXIMIZED"
+syn match autoitBuiltin "@SW_SHOWMINIMIZED"
+syn match autoitBuiltin "@SW_SHOWMINNOACTIVE"
+syn match autoitBuiltin "@SW_SHOWNA"
+syn match autoitBuiltin "@SW_SHOWNOACTIVATE"
+syn match autoitBuiltin "@SW_SHOWNORMAL"
+syn match autoitBuiltin "@SW_UNLOCK"
+syn match autoitBuiltin "@SystemDir"
+syn match autoitBuiltin "@TAB"
+syn match autoitBuiltin "@TempDir"
+syn match autoitBuiltin "@TRAY_ID"
+syn match autoitBuiltin "@TrayIconFlashing"
+syn match autoitBuiltin "@TrayIconVisible"
+syn match autoitBuiltin "@UserProfileDir"
+syn match autoitBuiltin "@UserName"
+syn match autoitBuiltin "@WDAY"
+syn match autoitBuiltin "@WindowsDir"
+syn match autoitBuiltin "@WorkingDir"
+syn match autoitBuiltin "@YDAY"
+syn match autoitBuiltin "@YEAR"
+
+"comments and commenting-out
+syn match autoitComment ";.*"
+"in this way also #ce alone will be highlighted
+syn match autoitCommDelimiter "^\s*#comments-start\>"
+syn match autoitCommDelimiter "^\s*#cs\>"
+syn match autoitCommDelimiter "^\s*#comments-end\>"
+syn match autoitCommDelimiter "^\s*#ce\>"
+syn region autoitComment
+	\ matchgroup=autoitCommDelimiter
+	\ start="^\s*#comments-start\>" start="^\s*#cs\>"
+	\ end="^\s*#comments-end\>" end="^\s*#ce\>"
+
+"one character operators
+syn match autoitOperator "[-+*/&^=<>][^-+*/&^=<>]"me=e-1
+"two characters operators
+syn match autoitOperator "==[^=]"me=e-1
+syn match autoitOperator "<>"
+syn match autoitOperator "<="
+syn match autoitOperator ">="
+syn match autoitOperator "+="
+syn match autoitOperator "-="
+syn match autoitOperator "*="
+syn match autoitOperator "/="
+syn match autoitOperator "&="
+syn keyword autoitOperator NOT AND OR
+
+syn match autoitParen "(\|)"
+syn match autoitBracket "\[\|\]"
+syn match autoitComma ","
+
+"numbers must come after operator '-'
+"decimal numbers without a dot
+syn match autoitNumber "-\=\<\d\+\>"
+"hexadecimal numbers without a dot
+syn match autoitNumber "-\=\<0x\x\+\>"
+"floating point number with dot (inside or at end)
+
+syn match autoitNumber "-\=\<\d\+\.\d*\>"
+"floating point number, starting with a dot
+syn match autoitNumber "-\=\<\.\d\+\>"
+"scientific notation numbers without dots
+syn match autoitNumber "-\=\<\d\+e[-+]\=\d\+\>"
+"scientific notation numbers with dots
+syn match autoitNumber "-\=\<\(\(\d\+\.\d*\)\|\(\.\d\+\)\)\(e[-+]\=\d\+\)\=\>"
+
+"string constants
+"we want the escaped quotes marked in red
+syn match autoitDoubledSingles +''+ contained
+syn match autoitDoubledDoubles +""+ contained
+"we want the continuation character marked in red
+"(also at the top level, not just contained)
+syn match autoitCont "_$"
+
+" send key list - must be defined before autoitStrings
+syn match autoitSend "{!}" contained
+syn match autoitSend "{#}" contained
+syn match autoitSend "{+}" contained
+syn match autoitSend "{^}" contained
+syn match autoitSend "{{}" contained
+syn match autoitSend "{}}" contained
+syn match autoitSend "{SPACE}" contained
+syn match autoitSend "{ENTER}" contained
+syn match autoitSend "{ALT}" contained
+syn match autoitSend "{BACKSPACE}" contained
+syn match autoitSend "{BS}" contained
+syn match autoitSend "{DELETE}" contained
+syn match autoitSend "{DEL}" contained
+syn match autoitSend "{UP}" contained
+syn match autoitSend "{DOWN}" contained
+syn match autoitSend "{LEFT}" contained
+syn match autoitSend "{RIGHT}" contained
+syn match autoitSend "{HOME}" contained
+syn match autoitSend "{END}" contained
+syn match autoitSend "{ESCAPE}" contained
+syn match autoitSend "{ESC}" contained
+syn match autoitSend "{INSERT}" contained
+syn match autoitSend "{INS}" contained
+syn match autoitSend "{PGUP}" contained
+syn match autoitSend "{PGDN}" contained
+syn match autoitSend "{F1}" contained
+syn match autoitSend "{F2}" contained
+syn match autoitSend "{F3}" contained
+syn match autoitSend "{F4}" contained
+syn match autoitSend "{F5}" contained
+syn match autoitSend "{F6}" contained
+syn match autoitSend "{F7}" contained
+syn match autoitSend "{F8}" contained
+syn match autoitSend "{F9}" contained
+syn match autoitSend "{F10}" contained
+syn match autoitSend "{F11}" contained
+syn match autoitSend "{F12}" contained
+syn match autoitSend "{TAB}" contained
+syn match autoitSend "{PRINTSCREEN}" contained
+syn match autoitSend "{LWIN}" contained
+syn match autoitSend "{RWIN}" contained
+syn match autoitSend "{NUMLOCK}" contained
+syn match autoitSend "{CTRLBREAK}" contained
+syn match autoitSend "{PAUSE}" contained
+syn match autoitSend "{CAPSLOCK}" contained
+syn match autoitSend "{NUMPAD0}" contained
+syn match autoitSend "{NUMPAD1}" contained
+syn match autoitSend "{NUMPAD2}" contained
+syn match autoitSend "{NUMPAD3}" contained
+syn match autoitSend "{NUMPAD4}" contained
+syn match autoitSend "{NUMPAD5}" contained
+syn match autoitSend "{NUMPAD6}" contained
+syn match autoitSend "{NUMPAD7}" contained
+syn match autoitSend "{NUMPAD8}" contained
+syn match autoitSend "{NUMPAD9}" contained
+syn match autoitSend "{NUMPADMULT}" contained
+syn match autoitSend "{NUMPADADD}" contained
+syn match autoitSend "{NUMPADSUB}" contained
+syn match autoitSend "{NUMPADDIV}" contained
+syn match autoitSend "{NUMPADDOT}" contained
+syn match autoitSend "{NUMPADENTER}" contained
+syn match autoitSend "{APPSKEY}" contained
+syn match autoitSend "{LALT}" contained
+syn match autoitSend "{RALT}" contained
+syn match autoitSend "{LCTRL}" contained
+syn match autoitSend "{RCTRL}" contained
+syn match autoitSend "{LSHIFT}" contained
+syn match autoitSend "{RSHIFT}" contained
+syn match autoitSend "{SLEEP}" contained
+syn match autoitSend "{ALTDOWN}" contained
+syn match autoitSend "{SHIFTDOWN}" contained
+syn match autoitSend "{CTRLDOWN}" contained
+syn match autoitSend "{LWINDOWN}" contained
+syn match autoitSend "{RWINDOWN}" contained
+syn match autoitSend "{ASC \d\d\d\d}" contained
+syn match autoitSend "{BROWSER_BACK}" contained
+syn match autoitSend "{BROWSER_FORWARD}" contained
+syn match autoitSend "{BROWSER_REFRESH}" contained
+syn match autoitSend "{BROWSER_STOP}" contained
+syn match autoitSend "{BROWSER_SEARCH}" contained
+syn match autoitSend "{BROWSER_FAVORITES}" contained
+syn match autoitSend "{BROWSER_HOME}" contained
+syn match autoitSend "{VOLUME_MUTE}" contained
+syn match autoitSend "{VOLUME_DOWN}" contained
+syn match autoitSend "{VOLUME_UP}" contained
+syn match autoitSend "{MEDIA_NEXT}" contained
+syn match autoitSend "{MEDIA_PREV}" contained
+syn match autoitSend "{MEDIA_STOP}" contained
+syn match autoitSend "{MEDIA_PLAY_PAUSE}" contained
+syn match autoitSend "{LAUNCH_MAIL}" contained
+syn match autoitSend "{LAUNCH_MEDIA}" contained
+syn match autoitSend "{LAUNCH_APP1}" contained
+syn match autoitSend "{LAUNCH_APP2}" contained
+
+"this was tricky!
+"we use an oneline region, instead of a match, in order to use skip=
+"matchgroup= so start and end quotes are not considered as au3Doubled
+"contained
+syn region autoitString oneline contains=autoitSend matchgroup=autoitQuote start=+"+
+	\ end=+"+ end=+_\n\{1}.*"+
+	\ contains=autoitCont,autoitDoubledDoubles skip=+""+
+syn region autoitString oneline matchgroup=autoitQuote start=+'+
+	\ end=+'+ end=+_\n\{1}.*'+
+	\ contains=autoitCont,autoitDoubledSingles skip=+''+
+
+syn match autoitVarSelector "\$"	contained display
+syn match autoitVariable "$\w\+" contains=autoitVarSelector
+
+" options - must be defined after autoitStrings
+syn match autoitOption "\([\"\']\)CaretCoordMode\1"
+syn match autoitOption "\([\"\']\)ColorMode\1"
+syn match autoitOption "\([\"\']\)ExpandEnvStrings\1"
+syn match autoitOption "\([\"\']\)ExpandVarStrings\1"
+syn match autoitOption "\([\"\']\)FtpBinaryMode\1"
+syn match autoitOption "\([\"\']\)GUICloseOnEsc\1"
+syn match autoitOption "\([\"\']\)GUICoordMode\1"
+syn match autoitOption "\([\"\']\)GUIDataSeparatorChar\1"
+syn match autoitOption "\([\"\']\)GUIOnEventMode\1"
+syn match autoitOption "\([\"\']\)GUIResizeMode\1"
+syn match autoitOption "\([\"\']\)GUIEventCompatibilityMode\1"
+syn match autoitOption "\([\"\']\)MouseClickDelay\1"
+syn match autoitOption "\([\"\']\)MouseClickDownDelay\1"
+syn match autoitOption "\([\"\']\)MouseClickDragDelay\1"
+syn match autoitOption "\([\"\']\)MouseCoordMode\1"
+syn match autoitOption "\([\"\']\)MustDeclareVars\1"
+syn match autoitOption "\([\"\']\)OnExitFunc\1"
+syn match autoitOption "\([\"\']\)PixelCoordMode\1"
+syn match autoitOption "\([\"\']\)RunErrorsFatal\1"
+syn match autoitOption "\([\"\']\)SendAttachMode\1"
+syn match autoitOption "\([\"\']\)SendCapslockMode\1"
+syn match autoitOption "\([\"\']\)SendKeyDelay\1"
+syn match autoitOption "\([\"\']\)SendKeyDownDelay\1"
+syn match autoitOption "\([\"\']\)TCPTimeout\1"
+syn match autoitOption "\([\"\']\)TrayAutoPause\1"
+syn match autoitOption "\([\"\']\)TrayIconDebug\1"
+syn match autoitOption "\([\"\']\)TrayIconHide\1"
+syn match autoitOption "\([\"\']\)TrayMenuMode\1"
+syn match autoitOption "\([\"\']\)TrayOnEventMode\1"
+syn match autoitOption "\([\"\']\)WinDetectHiddenText\1"
+syn match autoitOption "\([\"\']\)WinSearchChildren\1"
+syn match autoitOption "\([\"\']\)WinTextMatchMode\1"
+syn match autoitOption "\([\"\']\)WinTitleMatchMode\1"
+syn match autoitOption "\([\"\']\)WinWaitDelay\1"
+
+" styles - must be defined after autoitVariable
+" common
+syn match autoitStyle "\$WS_BORDER"
+syn match autoitStyle "\$WS_POPUP"
+syn match autoitStyle "\$WS_CAPTION"
+syn match autoitStyle "\$WS_CLIPCHILDREN"
+syn match autoitStyle "\$WS_CLIPSIBLINGS"
+syn match autoitStyle "\$WS_DISABLED"
+syn match autoitStyle "\$WS_DLGFRAME"
+syn match autoitStyle "\$WS_HSCROLL"
+syn match autoitStyle "\$WS_MAXIMIZE"
+syn match autoitStyle "\$WS_MAXIMIZEBOX"
+syn match autoitStyle "\$WS_MINIMIZE"
+syn match autoitStyle "\$WS_MINIMIZEBOX"
+syn match autoitStyle "\$WS_OVERLAPPED"
+syn match autoitStyle "\$WS_OVERLAPPEDWINDOW"
+syn match autoitStyle "\$WS_POPUPWINDOW"
+syn match autoitStyle "\$WS_SIZEBOX"
+syn match autoitStyle "\$WS_SYSMENU"
+syn match autoitStyle "\$WS_THICKFRAME"
+syn match autoitStyle "\$WS_VSCROLL"
+syn match autoitStyle "\$WS_VISIBLE"
+syn match autoitStyle "\$WS_CHILD"
+syn match autoitStyle "\$WS_GROUP"
+syn match autoitStyle "\$WS_TABSTOP"
+syn match autoitStyle "\$DS_MODALFRAME"
+syn match autoitStyle "\$DS_SETFOREGROUND"
+syn match autoitStyle "\$DS_CONTEXTHELP"
+" common extended
+syn match autoitStyle "\$WS_EX_ACCEPTFILES"
+syn match autoitStyle "\$WS_EX_APPWINDOW"
+syn match autoitStyle "\$WS_EX_CLIENTEDGE"
+syn match autoitStyle "\$WS_EX_CONTEXTHELP"
+syn match autoitStyle "\$WS_EX_DLGMODALFRAME"
+syn match autoitStyle "\$WS_EX_MDICHILD"
+syn match autoitStyle "\$WS_EX_OVERLAPPEDWINDOW"
+syn match autoitStyle "\$WS_EX_STATICEDGE"
+syn match autoitStyle "\$WS_EX_TOPMOST"
+syn match autoitStyle "\$WS_EX_TRANSPARENT"
+syn match autoitStyle "\$WS_EX_TOOLWINDOW"
+syn match autoitStyle "\$WS_EX_WINDOWEDGE"
+syn match autoitStyle "\$WS_EX_LAYERED"
+syn match autoitStyle "\$GUI_WS_EX_PARENTDRAG"
+" checkbox
+syn match autoitStyle "\$BS_3STATE"
+syn match autoitStyle "\$BS_AUTO3STATE"
+syn match autoitStyle "\$BS_AUTOCHECKBOX"
+syn match autoitStyle "\$BS_CHECKBOX"
+syn match autoitStyle "\$BS_LEFT"
+syn match autoitStyle "\$BS_PUSHLIKE"
+syn match autoitStyle "\$BS_RIGHT"
+syn match autoitStyle "\$BS_RIGHTBUTTON"
+syn match autoitStyle "\$BS_GROUPBOX"
+syn match autoitStyle "\$BS_AUTORADIOBUTTON"
+" push button
+syn match autoitStyle "\$BS_BOTTOM"
+syn match autoitStyle "\$BS_CENTER"
+syn match autoitStyle "\$BS_DEFPUSHBUTTON"
+syn match autoitStyle "\$BS_MULTILINE"
+syn match autoitStyle "\$BS_TOP"
+syn match autoitStyle "\$BS_VCENTER"
+syn match autoitStyle "\$BS_ICON"
+syn match autoitStyle "\$BS_BITMAP"
+syn match autoitStyle "\$BS_FLAT"
+" combo
+syn match autoitStyle "\$CBS_AUTOHSCROLL"
+syn match autoitStyle "\$CBS_DISABLENOSCROLL"
+syn match autoitStyle "\$CBS_DROPDOWN"
+syn match autoitStyle "\$CBS_DROPDOWNLIST"
+syn match autoitStyle "\$CBS_LOWERCASE"
+syn match autoitStyle "\$CBS_NOINTEGRALHEIGHT"
+syn match autoitStyle "\$CBS_OEMCONVERT"
+syn match autoitStyle "\$CBS_SIMPLE"
+syn match autoitStyle "\$CBS_SORT"
+syn match autoitStyle "\$CBS_UPPERCASE"
+" list
+syn match autoitStyle "\$LBS_DISABLENOSCROLL"
+syn match autoitStyle "\$LBS_NOINTEGRALHEIGHT"
+syn match autoitStyle "\$LBS_NOSEL"
+syn match autoitStyle "\$LBS_NOTIFY"
+syn match autoitStyle "\$LBS_SORT"
+syn match autoitStyle "\$LBS_STANDARD"
+syn match autoitStyle "\$LBS_USETABSTOPS"
+" edit/input
+syn match autoitStyle "\$ES_AUTOHSCROLL"
+syn match autoitStyle "\$ES_AUTOVSCROLL"
+syn match autoitStyle "\$ES_CENTER"
+syn match autoitStyle "\$ES_LOWERCASE"
+syn match autoitStyle "\$ES_NOHIDESEL"
+syn match autoitStyle "\$ES_NUMBER"
+syn match autoitStyle "\$ES_OEMCONVERT"
+syn match autoitStyle "\$ES_MULTILINE"
+syn match autoitStyle "\$ES_PASSWORD"
+syn match autoitStyle "\$ES_READONLY"
+syn match autoitStyle "\$ES_RIGHT"
+syn match autoitStyle "\$ES_UPPERCASE"
+syn match autoitStyle "\$ES_WANTRETURN"
+" progress bar
+syn match autoitStyle "\$PBS_SMOOTH"
+syn match autoitStyle "\$PBS_VERTICAL"
+" up-down
+syn match autoitStyle "\$UDS_ALIGNLEFT"
+syn match autoitStyle "\$UDS_ALIGNRIGHT"
+syn match autoitStyle "\$UDS_ARROWKEYS"
+syn match autoitStyle "\$UDS_HORZ"
+syn match autoitStyle "\$UDS_NOTHOUSANDS"
+syn match autoitStyle "\$UDS_WRAP"
+" label/static
+syn match autoitStyle "\$SS_BLACKFRAME"
+syn match autoitStyle "\$SS_BLACKRECT"
+syn match autoitStyle "\$SS_CENTER"
+syn match autoitStyle "\$SS_CENTERIMAGE"
+syn match autoitStyle "\$SS_ETCHEDFRAME"
+syn match autoitStyle "\$SS_ETCHEDHORZ"
+syn match autoitStyle "\$SS_ETCHEDVERT"
+syn match autoitStyle "\$SS_GRAYFRAME"
+syn match autoitStyle "\$SS_GRAYRECT"
+syn match autoitStyle "\$SS_LEFT"
+syn match autoitStyle "\$SS_LEFTNOWORDWRAP"
+syn match autoitStyle "\$SS_NOPREFIX"
+syn match autoitStyle "\$SS_NOTIFY"
+syn match autoitStyle "\$SS_RIGHT"
+syn match autoitStyle "\$SS_RIGHTJUST"
+syn match autoitStyle "\$SS_SIMPLE"
+syn match autoitStyle "\$SS_SUNKEN"
+syn match autoitStyle "\$SS_WHITEFRAME"
+syn match autoitStyle "\$SS_WHITERECT"
+" tab
+syn match autoitStyle "\$TCS_SCROLLOPPOSITE"
+syn match autoitStyle "\$TCS_BOTTOM"
+syn match autoitStyle "\$TCS_RIGHT"
+syn match autoitStyle "\$TCS_MULTISELECT"
+syn match autoitStyle "\$TCS_FLATBUTTONS"
+syn match autoitStyle "\$TCS_FORCEICONLEFT"
+syn match autoitStyle "\$TCS_FORCELABELLEFT"
+syn match autoitStyle "\$TCS_HOTTRACK"
+syn match autoitStyle "\$TCS_VERTICAL"
+syn match autoitStyle "\$TCS_TABS"
+syn match autoitStyle "\$TCS_BUTTONS"
+syn match autoitStyle "\$TCS_SINGLELINE"
+syn match autoitStyle "\$TCS_MULTILINE"
+syn match autoitStyle "\$TCS_RIGHTJUSTIFY"
+syn match autoitStyle "\$TCS_FIXEDWIDTH"
+syn match autoitStyle "\$TCS_RAGGEDRIGHT"
+syn match autoitStyle "\$TCS_FOCUSONBUTTONDOWN"
+syn match autoitStyle "\$TCS_OWNERDRAWFIXED"
+syn match autoitStyle "\$TCS_TOOLTIPS"
+syn match autoitStyle "\$TCS_FOCUSNEVER"
+" avi clip
+syn match autoitStyle "\$ACS_AUTOPLAY"
+syn match autoitStyle "\$ACS_CENTER"
+syn match autoitStyle "\$ACS_TRANSPARENT"
+syn match autoitStyle "\$ACS_NONTRANSPARENT"
+" date
+syn match autoitStyle "\$DTS_UPDOWN"
+syn match autoitStyle "\$DTS_SHOWNONE"
+syn match autoitStyle "\$DTS_LONGDATEFORMAT"
+syn match autoitStyle "\$DTS_TIMEFORMAT"
+syn match autoitStyle "\$DTS_RIGHTALIGN"
+syn match autoitStyle "\$DTS_SHORTDATEFORMAT"
+" monthcal
+syn match autoitStyle "\$MCS_NOTODAY"
+syn match autoitStyle "\$MCS_NOTODAYCIRCLE"
+syn match autoitStyle "\$MCS_WEEKNUMBERS"
+" treeview
+syn match autoitStyle "\$TVS_HASBUTTONS"
+syn match autoitStyle "\$TVS_HASLINES"
+syn match autoitStyle "\$TVS_LINESATROOT"
+syn match autoitStyle "\$TVS_DISABLEDRAGDROP"
+syn match autoitStyle "\$TVS_SHOWSELALWAYS"
+syn match autoitStyle "\$TVS_RTLREADING"
+syn match autoitStyle "\$TVS_NOTOOLTIPS"
+syn match autoitStyle "\$TVS_CHECKBOXES"
+syn match autoitStyle "\$TVS_TRACKSELECT"
+syn match autoitStyle "\$TVS_SINGLEEXPAND"
+syn match autoitStyle "\$TVS_FULLROWSELECT"
+syn match autoitStyle "\$TVS_NOSCROLL"
+syn match autoitStyle "\$TVS_NONEVENHEIGHT"
+" slider
+syn match autoitStyle "\$TBS_AUTOTICKS"
+syn match autoitStyle "\$TBS_BOTH"
+syn match autoitStyle "\$TBS_BOTTOM"
+syn match autoitStyle "\$TBS_HORZ"
+syn match autoitStyle "\$TBS_VERT"
+syn match autoitStyle "\$TBS_NOTHUMB"
+syn match autoitStyle "\$TBS_NOTICKS"
+syn match autoitStyle "\$TBS_LEFT"
+syn match autoitStyle "\$TBS_RIGHT"
+syn match autoitStyle "\$TBS_TOP"
+" listview
+syn match autoitStyle "\$LVS_ICON"
+syn match autoitStyle "\$LVS_REPORT"
+syn match autoitStyle "\$LVS_SMALLICON"
+syn match autoitStyle "\$LVS_LIST"
+syn match autoitStyle "\$LVS_EDITLABELS"
+syn match autoitStyle "\$LVS_NOCOLUMNHEADER"
+syn match autoitStyle "\$LVS_NOSORTHEADER"
+syn match autoitStyle "\$LVS_SINGLESEL"
+syn match autoitStyle "\$LVS_SHOWSELALWAYS"
+syn match autoitStyle "\$LVS_SORTASCENDING"
+syn match autoitStyle "\$LVS_SORTDESCENDING"
+" listview extended
+syn match autoitStyle "\$LVS_EX_FULLROWSELECT"
+syn match autoitStyle "\$LVS_EX_GRIDLINES"
+syn match autoitStyle "\$LVS_EX_HEADERDRAGDROP"
+syn match autoitStyle "\$LVS_EX_TRACKSELECT"
+syn match autoitStyle "\$LVS_EX_CHECKBOXES"
+syn match autoitStyle "\$LVS_EX_BORDERSELECT"
+syn match autoitStyle "\$LVS_EX_DOUBLEBUFFER"
+syn match autoitStyle "\$LVS_EX_FLATSB"
+syn match autoitStyle "\$LVS_EX_MULTIWORKAREAS"
+syn match autoitStyle "\$LVS_EX_SNAPTOGRID"
+syn match autoitStyle "\$LVS_EX_SUBITEMIMAGES"
+
+" constants - must be defined after autoitVariable - excludes styles
+" constants - autoit options
+syn match autoitConst "\$OPT_COORDSRELATIVE"
+syn match autoitConst "\$OPT_COORDSABSOLUTE"
+syn match autoitConst "\$OPT_COORDSCLIENT"
+syn match autoitConst "\$OPT_ERRORSILENT"
+syn match autoitConst "\$OPT_ERRORFATAL"
+syn match autoitConst "\$OPT_CAPSNOSTORE"
+syn match autoitConst "\$OPT_CAPSSTORE"
+syn match autoitConst "\$OPT_MATCHSTART"
+syn match autoitConst "\$OPT_MATCHANY"
+syn match autoitConst "\$OPT_MATCHEXACT"
+syn match autoitConst "\$OPT_MATCHADVANCED"
+" constants - file
+syn match autoitConst "\$FC_NOOVERWRITE"
+syn match autoitConst "\$FC_OVERWRITE"
+syn match autoitConst "\$FT_MODIFIED"
+syn match autoitConst "\$FT_CREATED"
+syn match autoitConst "\$FT_ACCESSED"
+syn match autoitConst "\$FO_READ"
+syn match autoitConst "\$FO_APPEND"
+syn match autoitConst "\$FO_OVERWRITE"
+syn match autoitConst "\$EOF"
+syn match autoitConst "\$FD_FILEMUSTEXIST"
+syn match autoitConst "\$FD_PATHMUSTEXIST"
+syn match autoitConst "\$FD_MULTISELECT"
+syn match autoitConst "\$FD_PROMPTCREATENEW"
+syn match autoitConst "\$FD_PROMPTOVERWRITE"
+" constants - keyboard
+syn match autoitConst "\$KB_SENDSPECIAL"
+syn match autoitConst "\$KB_SENDRAW"
+syn match autoitConst "\$KB_CAPSOFF"
+syn match autoitConst "\$KB_CAPSON"
+" constants - message box
+syn match autoitConst "\$MB_OK"
+syn match autoitConst "\$MB_OKCANCEL"
+syn match autoitConst "\$MB_ABORTRETRYIGNORE"
+syn match autoitConst "\$MB_YESNOCANCEL"
+syn match autoitConst "\$MB_YESNO"
+syn match autoitConst "\$MB_RETRYCANCEL"
+syn match autoitConst "\$MB_ICONHAND"
+syn match autoitConst "\$MB_ICONQUESTION"
+syn match autoitConst "\$MB_ICONEXCLAMATION"
+syn match autoitConst "\$MB_ICONASTERISK"
+syn match autoitConst "\$MB_DEFBUTTON1"
+syn match autoitConst "\$MB_DEFBUTTON2"
+syn match autoitConst "\$MB_DEFBUTTON3"
+syn match autoitConst "\$MB_APPLMODAL"
+syn match autoitConst "\$MB_SYSTEMMODAL"
+syn match autoitConst "\$MB_TASKMODAL"
+syn match autoitConst "\$MB_TOPMOST"
+syn match autoitConst "\$MB_RIGHTJUSTIFIED"
+syn match autoitConst "\$IDTIMEOUT"
+syn match autoitConst "\$IDOK"
+syn match autoitConst "\$IDCANCEL"
+syn match autoitConst "\$IDABORT"
+syn match autoitConst "\$IDRETRY"
+syn match autoitConst "\$IDIGNORE"
+syn match autoitConst "\$IDYES"
+syn match autoitConst "\$IDNO"
+syn match autoitConst "\$IDTRYAGAIN"
+syn match autoitConst "\$IDCONTINUE"
+" constants - progress and splash
+syn match autoitConst "\$DLG_NOTITLE"
+syn match autoitConst "\$DLG_NOTONTOP"
+syn match autoitConst "\$DLG_TEXTLEFT"
+syn match autoitConst "\$DLG_TEXTRIGHT"
+syn match autoitConst "\$DLG_MOVEABLE"
+syn match autoitConst "\$DLG_TEXTVCENTER"
+" constants - tray tip
+syn match autoitConst "\$TIP_ICONNONE"
+syn match autoitConst "\$TIP_ICONASTERISK"
+syn match autoitConst "\$TIP_ICONEXCLAMATION"
+syn match autoitConst "\$TIP_ICONHAND"
+syn match autoitConst "\$TIP_NOSOUND"
+" constants - mouse
+syn match autoitConst "\$IDC_UNKNOWN"
+syn match autoitConst "\$IDC_APPSTARTING"
+syn match autoitConst "\$IDC_ARROW"
+syn match autoitConst "\$IDC_CROSS"
+syn match autoitConst "\$IDC_HELP"
+syn match autoitConst "\$IDC_IBEAM"
+syn match autoitConst "\$IDC_ICON"
+syn match autoitConst "\$IDC_NO"
+syn match autoitConst "\$IDC_SIZE"
+syn match autoitConst "\$IDC_SIZEALL"
+syn match autoitConst "\$IDC_SIZENESW"
+syn match autoitConst "\$IDC_SIZENS"
+syn match autoitConst "\$IDC_SIZENWSE"
+syn match autoitConst "\$IDC_SIZEWE"
+syn match autoitConst "\$IDC_UPARROW"
+syn match autoitConst "\$IDC_WAIT"
+" constants - process
+syn match autoitConst "\$SD_LOGOFF"
+syn match autoitConst "\$SD_SHUTDOWN"
+syn match autoitConst "\$SD_REBOOT"
+syn match autoitConst "\$SD_FORCE"
+syn match autoitConst "\$SD_POWERDOWN"
+" constants - string
+syn match autoitConst "\$STR_NOCASESENSE"
+syn match autoitConst "\$STR_CASESENSE"
+syn match autoitConst "\STR_STRIPLEADING"
+syn match autoitConst "\$STR_STRIPTRAILING"
+syn match autoitConst "\$STR_STRIPSPACES"
+syn match autoitConst "\$STR_STRIPALL"
+" constants - tray
+syn match autoitConst "\$TRAY_ITEM_EXIT"
+syn match autoitConst "\$TRAY_ITEM_PAUSE"
+syn match autoitConst "\$TRAY_ITEM_FIRST"
+syn match autoitConst "\$TRAY_CHECKED"
+syn match autoitConst "\$TRAY_UNCHECKED"
+syn match autoitConst "\$TRAY_ENABLE"
+syn match autoitConst "\$TRAY_DISABLE"
+syn match autoitConst "\$TRAY_FOCUS"
+syn match autoitConst "\$TRAY_DEFAULT"
+syn match autoitConst "\$TRAY_EVENT_SHOWICON"
+syn match autoitConst "\$TRAY_EVENT_HIDEICON"
+syn match autoitConst "\$TRAY_EVENT_FLASHICON"
+syn match autoitConst "\$TRAY_EVENT_NOFLASHICON"
+syn match autoitConst "\$TRAY_EVENT_PRIMARYDOWN"
+syn match autoitConst "\$TRAY_EVENT_PRIMARYUP"
+syn match autoitConst "\$TRAY_EVENT_SECONDARYDOWN"
+syn match autoitConst "\$TRAY_EVENT_SECONDARYUP"
+syn match autoitConst "\$TRAY_EVENT_MOUSEOVER"
+syn match autoitConst "\$TRAY_EVENT_MOUSEOUT"
+syn match autoitConst "\$TRAY_EVENT_PRIMARYDOUBLE"
+syn match autoitConst "\$TRAY_EVENT_SECONDARYDOUBLE"
+" constants - stdio
+syn match autoitConst "\$STDIN_CHILD"
+syn match autoitConst "\$STDOUT_CHILD"
+syn match autoitConst "\$STDERR_CHILD"
+" constants - color
+syn match autoitConst "\$COLOR_BLACK"
+syn match autoitConst "\$COLOR_SILVER"
+syn match autoitConst "\$COLOR_GRAY"
+syn match autoitConst "\$COLOR_WHITE"
+syn match autoitConst "\$COLOR_MAROON"
+syn match autoitConst "\$COLOR_RED"
+syn match autoitConst "\$COLOR_PURPLE"
+syn match autoitConst "\$COLOR_FUCHSIA"
+syn match autoitConst "\$COLOR_GREEN"
+syn match autoitConst "\$COLOR_LIME"
+syn match autoitConst "\$COLOR_OLIVE"
+syn match autoitConst "\$COLOR_YELLOW"
+syn match autoitConst "\$COLOR_NAVY"
+syn match autoitConst "\$COLOR_BLUE"
+syn match autoitConst "\$COLOR_TEAL"
+syn match autoitConst "\$COLOR_AQUA"
+" constants - reg value type
+syn match autoitConst "\$REG_NONE"
+syn match autoitConst "\$REG_SZ"
+syn match autoitConst "\$REG_EXPAND_SZ"
+syn match autoitConst "\$REG_BINARY"
+syn match autoitConst "\$REG_DWORD"
+syn match autoitConst "\$REG_DWORD_BIG_ENDIAN"
+syn match autoitConst "\$REG_LINK"
+syn match autoitConst "\$REG_MULTI_SZ"
+syn match autoitConst "\$REG_RESOURCE_LIST"
+syn match autoitConst "\$REG_FULL_RESOURCE_DESCRIPTOR"
+syn match autoitConst "\$REG_RESOURCE_REQUIREMENTS_LIST"
+" guiconstants - events and messages
+syn match autoitConst "\$GUI_EVENT_CLOSE"
+syn match autoitConst "\$GUI_EVENT_MINIMIZE"
+syn match autoitConst "\$GUI_EVENT_RESTORE"
+syn match autoitConst "\$GUI_EVENT_MAXIMIZE"
+syn match autoitConst "\$GUI_EVENT_PRIMARYDOWN"
+syn match autoitConst "\$GUI_EVENT_PRIMARYUP"
+syn match autoitConst "\$GUI_EVENT_SECONDARYDOWN"
+syn match autoitConst "\$GUI_EVENT_SECONDARYUP"
+syn match autoitConst "\$GUI_EVENT_MOUSEMOVE"
+syn match autoitConst "\$GUI_EVENT_RESIZED"
+syn match autoitConst "\$GUI_EVENT_DROPPED"
+syn match autoitConst "\$GUI_RUNDEFMSG"
+" guiconstants - state
+syn match autoitConst "\$GUI_AVISTOP"
+syn match autoitConst "\$GUI_AVISTART"
+syn match autoitConst "\$GUI_AVICLOSE"
+syn match autoitConst "\$GUI_CHECKED"
+syn match autoitConst "\$GUI_INDETERMINATE"
+syn match autoitConst "\$GUI_UNCHECKED"
+syn match autoitConst "\$GUI_DROPACCEPTED"
+syn match autoitConst "\$GUI_DROPNOTACCEPTED"
+syn match autoitConst "\$GUI_ACCEPTFILES"
+syn match autoitConst "\$GUI_SHOW"
+syn match autoitConst "\$GUI_HIDE"
+syn match autoitConst "\$GUI_ENABLE"
+syn match autoitConst "\$GUI_DISABLE"
+syn match autoitConst "\$GUI_FOCUS"
+syn match autoitConst "\$GUI_NOFOCUS"
+syn match autoitConst "\$GUI_DEFBUTTON"
+syn match autoitConst "\$GUI_EXPAND"
+syn match autoitConst "\$GUI_ONTOP"
+" guiconstants - font
+syn match autoitConst "\$GUI_FONTITALIC"
+syn match autoitConst "\$GUI_FONTUNDER"
+syn match autoitConst "\$GUI_FONTSTRIKE"
+" guiconstants - resizing
+syn match autoitConst "\$GUI_DOCKAUTO"
+syn match autoitConst "\$GUI_DOCKLEFT"
+syn match autoitConst "\$GUI_DOCKRIGHT"
+syn match autoitConst "\$GUI_DOCKHCENTER"
+syn match autoitConst "\$GUI_DOCKTOP"
+syn match autoitConst "\$GUI_DOCKBOTTOM"
+syn match autoitConst "\$GUI_DOCKVCENTER"
+syn match autoitConst "\$GUI_DOCKWIDTH"
+syn match autoitConst "\$GUI_DOCKHEIGHT"
+syn match autoitConst "\$GUI_DOCKSIZE"
+syn match autoitConst "\$GUI_DOCKMENUBAR"
+syn match autoitConst "\$GUI_DOCKSTATEBAR"
+syn match autoitConst "\$GUI_DOCKALL"
+syn match autoitConst "\$GUI_DOCKBORDERS"
+" guiconstants - graphic
+syn match autoitConst "\$GUI_GR_CLOSE"
+syn match autoitConst "\$GUI_GR_LINE"
+syn match autoitConst "\$GUI_GR_BEZIER"
+syn match autoitConst "\$GUI_GR_MOVE"
+syn match autoitConst "\$GUI_GR_COLOR"
+syn match autoitConst "\$GUI_GR_RECT"
+syn match autoitConst "\$GUI_GR_ELLIPSE"
+syn match autoitConst "\$GUI_GR_PIE"
+syn match autoitConst "\$GUI_GR_DOT"
+syn match autoitConst "\$GUI_GR_PIXEL"
+syn match autoitConst "\$GUI_GR_HINT"
+syn match autoitConst "\$GUI_GR_REFRESH"
+syn match autoitConst "\$GUI_GR_PENSIZE"
+syn match autoitConst "\$GUI_GR_NOBKCOLOR"
+" guiconstants - control default styles
+syn match autoitConst "\$GUI_SS_DEFAULT_AVI"
+syn match autoitConst "\$GUI_SS_DEFAULT_BUTTON"
+syn match autoitConst "\$GUI_SS_DEFAULT_CHECKBOX"
+syn match autoitConst "\$GUI_SS_DEFAULT_COMBO"
+syn match autoitConst "\$GUI_SS_DEFAULT_DATE"
+syn match autoitConst "\$GUI_SS_DEFAULT_EDIT"
+syn match autoitConst "\$GUI_SS_DEFAULT_GRAPHIC"
+syn match autoitConst "\$GUI_SS_DEFAULT_GROUP"
+syn match autoitConst "\$GUI_SS_DEFAULT_ICON"
+syn match autoitConst "\$GUI_SS_DEFAULT_INPUT"
+syn match autoitConst "\$GUI_SS_DEFAULT_LABEL"
+syn match autoitConst "\$GUI_SS_DEFAULT_LIST"
+syn match autoitConst "\$GUI_SS_DEFAULT_LISTVIEW"
+syn match autoitConst "\$GUI_SS_DEFAULT_MONTHCAL"
+syn match autoitConst "\$GUI_SS_DEFAULT_PIC"
+syn match autoitConst "\$GUI_SS_DEFAULT_PROGRESS"
+syn match autoitConst "\$GUI_SS_DEFAULT_RADIO"
+syn match autoitConst "\$GUI_SS_DEFAULT_SLIDER"
+syn match autoitConst "\$GUI_SS_DEFAULT_TAB"
+syn match autoitConst "\$GUI_SS_DEFAULT_TREEVIEW"
+syn match autoitConst "\$GUI_SS_DEFAULT_UPDOWN"
+syn match autoitConst "\$GUI_SS_DEFAULT_GUI"
+" guiconstants - background color special flags
+syn match autoitConst "\$GUI_BKCOLOR_DEFAULT"
+syn match autoitConst "\$GUI_BKCOLOR_LV_ALTERNATE"
+syn match autoitConst "\$GUI_BKCOLOR_TRANSPARENT"
+
+" registry constants
+syn match autoitConst "\([\"\']\)REG_BINARY\1"
+syn match autoitConst "\([\"\']\)REG_SZ\1"
+syn match autoitConst "\([\"\']\)REG_MULTI_SZ\1"
+syn match autoitConst "\([\"\']\)REG_EXPAND_SZ\1"
+syn match autoitConst "\([\"\']\)REG_DWORD\1"
+
+" Define the default highlighting.
+" Unused colors: Underlined, Ignore, Error, Todo
+hi def link autoitFunction Statement  " yellow/yellow
+hi def link autoitKeyword Statement
+hi def link autoitOperator Operator
+hi def link autoitVarSelector Operator
+hi def link autoitComment	Comment  " cyan/blue
+hi def link autoitParen Comment
+hi def link autoitComma Comment
+hi def link autoitBracket Comment
+hi def link autoitNumber Constant " magenta/red
+hi def link autoitString Constant
+hi def link autoitQuote Constant
+hi def link autoitIncluded Constant
+hi def link autoitCont Special  " red/orange
+hi def link autoitDoubledSingles Special
+hi def link autoitDoubledDoubles Special
+hi def link autoitCommDelimiter PreProc  " blue/magenta
+hi def link autoitInclude PreProc
+hi def link autoitVariable Identifier  " cyan/cyan
+hi def link autoitBuiltin Type  " green/green
+hi def link autoitOption Type
+hi def link autoitStyle Type
+hi def link autoitConst Type
+hi def link autoitSend Type
+syn sync minlines=50
--- a/runtime/syntax/automake.vim
+++ b/runtime/syntax/automake.vim
@@ -1,16 +1,10 @@
 " Vim syntax file
-" Language:	automake Makefile.am
-" Maintainer:   Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Former Maintainer:	John Williams <jrw@pobox.com>
-" Last Change:	$LastChangedDate: 2006-04-16 22:06:40 -0400 (dom, 16 apr 2006) $
+" Language: automake Makefile.am
+" Maintainer: Felipe Contreras <felipe.contreras@gmail.com>
+" Former Maintainer: John Williams <jrw@pobox.com>
+" Last Change: $LastChangedDate: 2006-04-16 22:06:40 -0400 (dom, 16 apr 2006) $
 " URL: http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/syntax/automake.vim?op=file&rev=0&sc=0
 "
-" XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain
-"     it only because patches have been submitted for it by Debian users and the
-"     former maintainer was MIA (Missing In Action), taking over its
-"     maintenance was thus the only way to include those patches.
-"     If you care about this file, and have time to maintain it please do so!
-"
 " This script adds support for automake's Makefile.am format. It highlights
 " Makefile variables significant to automake as well as highlighting
 " autoconf-style @variable@ substitutions . Subsitutions are marked as errors
@@ -25,11 +19,18 @@ else
   runtime! syntax/make.vim
 endif
 
-syn match automakePrimary "^[A-Za-z0-9_]\+\(_PROGRAMS\|LIBRARIES\|_LIST\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_JAVA\|_LTLIBRARIES\)\s*="me=e-1
+syn match automakePrimary "^[A-Za-z0-9_]\+_\(PROGRAMS\|LIBRARIES\|LISP\|PYTHON\|JAVA\|SCRIPTS\|DATA\|HEADERS\|MANS\|TEXINFOS\|LTLIBRARIES\)\s*="me=e-1
+
+syn match automakeSecondary "^[A-Za-z0-9_]\+_\(SOURCES\|AR\|LIBADD\|LDADD\|LDFLAGS\|DEPENDENCIES\|LINK\|SHORTNAME\)\s*="me=e-1
+syn match automakeSecondary "^[A-Za-z0-9_]\+_\(CCASFLAGS\|CFLAGS\|CPPFLAGS\|CXXFLAGS\|FFLAGS\|GCJFLAGS\|LFLAGS\|OBJCFLAGS\|RFLAGS\|YFLAGS\)\s*="me=e-1
+
+syn match automakeExtra "^EXTRA_DIST\s*="me=e-1
+syn match automakeExtra "^EXTRA_PROGRAMS\s*="me=e-1
+syn match automakeExtra "^EXTRA_[A-Za-z0-9_]\+_SOURCES\s*="me=e-1
+
+" TODO: Check these:
 syn match automakePrimary "^TESTS\s*="me=e-1
-syn match automakeSecondary "^[A-Za-z0-9_]\+\(_SOURCES\|_LDADD\|_LIBADD\|_LDFLAGS\|_DEPENDENCIES\|_CPPFLAGS\)\s*="me=e-1
 syn match automakeSecondary "^OMIT_DEPENDENCIES\s*="me=e-1
-syn match automakeExtra "^EXTRA_[A-Za-z0-9_]\+\s*="me=e-1
 syn match automakeOptions "^\(AUTOMAKE_OPTIONS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*="me=e-1
 syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*="me=e-1
 syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*="me=e-1
--- a/runtime/syntax/b.vim
+++ b/runtime/syntax/b.vim
@@ -137,6 +137,6 @@ if version >= 508 || !exists("did_b_synt
   delcommand HiLink
 endif
 
-let current_syntax = "b"
+let b:current_syntax = "b"
 
 " vim: ts=8
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/bzr.vim
@@ -0,0 +1,51 @@
+" Vim syntax file
+" 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$
+" Filenames:    bzr_log.*
+" Version:      1.0
+
+" 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 region bzrRegion   start="^-\{14} This line and the following will be ignored -\{14}$" end="\%$" contains=ALL
+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
+
+" Synchronization.
+syn sync clear
+syn sync match bzrSync  grouphere bzrRegion "^-\{14} This line and the following will be ignored -\{14}$"me=s-1
+
+" Define the default highlighting.
+" 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_bzr_syn_inits")
+  if version <= 508
+    let did_bzr_syn_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink bzrRegion     Comment
+  HiLink bzrRemoved    Constant
+  HiLink bzrAdded      Identifier
+  HiLink bzrModified   Special
+  HiLink bzrRenamed    Special
+  HiLink bzrUnchanged  Special
+  HiLink bzrUnknown    Special
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "bzr"
--- 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:	2006 May 01
+" Last Change:	2007 Feb 13
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -64,6 +64,9 @@ if exists("c_space_errors")
   endif
 endif
 
+" This should be before cErrInParen to avoid problems with #define ({ xxx })
+syntax region	cBlock		start="{" end="}" transparent fold
+
 "catch errors caused by wrong parenthesis and brackets
 " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
 " But avoid matching <::.
@@ -132,9 +135,11 @@ if exists("c_comment_strings")
   syntax region cComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
   syntax region  cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
   if exists("c_no_comment_fold")
-    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell
+    " Use "extend" here to have preprocessor lines not terminate halfway a
+    " comment.
+    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
   else
-    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold
+    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
   endif
 else
   syn region	cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
@@ -148,8 +153,6 @@ endif
 syntax match	cCommentError	display "\*/"
 syntax match	cCommentStartError display "/\*"me=e-1 contained
 
-syntax region	cBlock		start="{" end="}" transparent fold
-
 syn keyword	cOperator	sizeof
 if exists("c_gnu")
   syn keyword	cStatement	__asm__
@@ -158,7 +161,7 @@ endif
 syn keyword	cType		int long short char void
 syn keyword	cType		signed unsigned float double
 if !exists("c_no_ansi") || exists("c_ansi_typedefs")
-  syn keyword   cType		size_t ssize_t wchar_t ptrdiff_t sig_atomic_t fpos_t
+  syn keyword   cType		size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t
   syn keyword   cType		clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t
   syn keyword   cType		mbstate_t wctrans_t wint_t wctype_t
 endif
@@ -273,7 +276,7 @@ syn match	cIncluded	display contained "<
 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 contains=ALLBUT,@cPreProcGroup,@Spell
+syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 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
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/cmusrc.vim
@@ -0,0 +1,309 @@
+" Vim syntax file
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2006-07-22
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal iskeyword=@,48-57,_,-
+
+syn keyword cmusrcTodo          contained TODO FIXME XXX NOTE
+
+syn match   cmusrcComment       contained display '^\s*#.*$'
+
+syn match   cmusrcBegin         display '^'
+                                \ nextgroup=cmusrcKeyword,cmusrcComment
+                                \ skipwhite
+
+syn keyword cmusrcKeyword       contained add
+                                \ nextgroup=cmusrcAddSwitches,cmusrcURI
+                                \ skipwhite
+
+syn match   cmusrcAddSwitches   contained display '-[lpqQ]'
+                                \ nextgroup=cmusrcURI
+                                \ skipwhite
+
+syn match   cmusrcURI           contained display '.\+'
+
+syn keyword cmusrcKeyword       contained bind
+                                \ nextgroup=cmusrcBindSwitches,
+                                \           cmusrcBindContext
+                                \ skipwhite
+
+syn match   cmusrcBindSwitches  contained display '-[f]'
+                                \ nextgroup=cmusrcBindContext
+                                \ skipwhite
+
+syn keyword cmusrcBindContext   contained common library playlist queue
+                                \ browser filters
+                                \ nextgroup=cmusrcBindKey
+                                \ skipwhite
+
+syn match   cmusrcBindKey       contained display '\S\+'
+                                \ nextgroup=cmusrcKeyword
+                                \ skipwhite
+
+syn keyword cmusrcKeyword       contained browser-up colorscheme echo factivate
+                                \ filter invert player-next player-pause
+                                \ player-play player-prev player-stop quit
+                                \ refresh run search-next search-prev shuffle
+                                \ unmark win-activate win-add-l win-add-p
+                                \ win-add-Q win-add-q win-bottom win-down
+                                \ win-mv-after win-mv-before win-next
+                                \ win-page-down win-page-up win-remove
+                                \ win-sel-cur win-toggle win-top win-up
+                                \ win-update
+
+syn keyword cmusrcKeyword       contained cd
+                                \ nextgroup=cmusrcDirectory
+                                \ skipwhite
+
+syn match   cmusrcDirectory     contained display '.\+'
+
+syn keyword cmusrcKeyword       contained clear
+                                \ nextgroup=cmusrcClearSwitches
+
+syn match   cmusrcClearSwitches contained display '-[lpq]'
+
+syn keyword cmusrcKeyword       contained fset
+                                \ nextgroup=cmusrcFSetName
+                                \ skipwhite
+
+syn match   cmusrcFSetName      contained display '[^=]\+'
+                                \ nextgroup=cmusrcFSetEq
+
+syn match   cmusrcFSetEq        contained display '='
+                                \ nextgroup=cmusrcFilterExpr
+
+syn match   cmusrcFilterExpr    contained display '.\+'
+
+syn keyword cmusrcKeyword       contained load
+                                \ nextgroup=cmusrcLoadSwitches,cmusrcURI
+                                \ skipwhite
+
+syn match   cmusrcLoadSwitches  contained display '-[lp]'
+                                \ nextgroup=cmusrcURI
+                                \ skipwhite
+
+syn keyword cmusrcKeyword       contained mark
+                                \ nextgroup=cmusrcFilterExpr
+
+syn keyword cmusrcKeyword       contained save
+                                \ nextgroup=cmusrcSaveSwitches,cmusrcFile
+                                \ skipwhite
+
+syn match   cmusrcSaveSwitches  contained display '-[lp]'
+                                \ nextgroup=cmusrcFile
+                                \ skipwhite
+
+syn match   cmusrcFile          contained display '.\+'
+
+syn keyword cmusrcKeyword       contained seek
+                                \ nextgroup=cmusrcSeekOffset
+                                \ skipwhite
+
+syn match   cmusrcSeekOffset    contained display
+      \ '[+-]\=\%(\d\+[mh]\=\|\%(\%(0\=\d\|[1-5]\d\):\)\=\%(0\=\d\|[1-5]\d\):\%(0\=\d\|[1-5]\d\)\)'
+
+syn keyword cmusrcKeyword       contained set
+                                \ nextgroup=cmusrcOption
+                                \ skipwhite
+
+syn keyword cmusrcOption        contained auto_reshuffle confirm_run
+                                \ continue play_library play_sorted repeat
+                                \ show_hidden show_remaining_time shuffle
+                                \ nextgroup=cmusrcSetTest,cmusrcOptEqBoolean
+
+syn match   cmusrcSetTest       contained display '?'
+
+syn match   cmusrcOptEqBoolean  contained display '='
+                                \ nextgroup=cmusrcOptBoolean
+
+syn keyword cmusrcOptBoolean    contained true false
+
+syn keyword cmusrcOption        contained aaa_mode
+                                \ nextgroup=cmusrcOptEqAAA
+
+syn match   cmusrcOptEqAAA      contained display '='
+                                \ nextgroup=cmusrcOptAAA
+
+syn keyword cmusrcOptAAA        contained all artist album
+
+syn keyword cmusrcOption        contained buffer_seconds
+                                \ nextgroup=cmusrcOptEqNumber
+
+syn match   cmusrcOptEqNumber   contained display '='
+                                \ nextgroup=cmusrcOptNumber
+
+syn match   cmusrcOptNumber     contained display '\d\+'
+
+syn keyword cmusrcOption        contained altformat_current altformat_playlist
+                                \ altformat_title altformat_trackwin
+                                \ format_current format_playlist format_title
+                                \ format_trackwin
+                                \ nextgroup=cmusrcOptEqFormat
+
+syn match   cmusrcOptEqFormat   contained display '='
+                                \ nextgroup=cmusrcOptFormat
+
+syn match   cmusrcOptFormat     contained display '.\+'
+                                \ contains=cmusrcFormatSpecial
+
+syn match   cmusrcFormatSpecial contained display '%[0-]*\d*[alDntgydfF=%]'
+
+syn keyword cmusrcOption        contained color_cmdline_bg color_cmdline_fg
+                                \ color_error color_info color_separator
+                                \ color_statusline_bg color_statusline_fg
+                                \ color_titleline_bg color_titleline_fg
+                                \ color_win_bg color_win_cur
+                                \ color_win_cur_sel_bg color_win_cur_sel_fg
+                                \ color_win_dir color_win_fg
+                                \ color_win_inactive_cur_sel_bg
+                                \ color_win_inactive_cur_sel_fg
+                                \ color_win_inactive_sel_bg
+                                \ color_win_inactive_sel_fg
+                                \ color_win_sel_bg color_win_sel_fg
+                                \ color_win_title_bg color_win_title_fg
+                                \ nextgroup=cmusrcOptEqColor
+
+syn match   cmusrcOptEqColor    contained display '='
+                                \ nextgroup=@cmusrcOptColor
+
+syn cluster cmusrcOptColor      contains=cmusrcOptColorName,cmusrcOptColorValue
+
+syn keyword cmusrcOptColorName  contained default black red green yellow blue
+                                \ magenta cyan gray darkgray lightred lightred
+                                \ lightgreen lightyellow lightblue lightmagenta
+                                \ lightcyan white
+
+syn match   cmusrcOptColorValue contained display
+                        \ '-1\|0*\%(\d\|[1-9]\d\|1\d\d\|2\%([0-4]\d\|5[0-5]\)\)'
+
+syn keyword cmusrcOption        contained id3_default_charset output_plugin
+                                \ status_display_program
+                                \ nextgroup=cmusrcOptEqString
+
+syn match   cmusrcOption        contained
+                    \ '\%(dsp\|mixer\)\.\%(alsa\|oss\|sun\)\.\%(channel\|device\)'
+                    \ nextgroup=cmusrcOptEqString
+
+syn match   cmusrcOption        contained
+                    \ 'dsp\.ao\.\%(buffer_size\|driver\|wav_counter\|wav_dir\)'
+                    \ nextgroup=cmusrcOptEqString
+
+syn match   cmusrcOptEqString   contained display '='
+                                \ nextgroup=cmusrcOptString
+
+syn match   cmusrcOptString     contained display '.\+'
+
+syn keyword cmusrcOption        contained lib_sort pl_sort
+                                \ nextgroup=cmusrcOptEqSortKeys
+
+syn match   cmusrcOptEqSortKeys contained display '='
+                                \ nextgroup=cmusrcOptSortKeys
+
+syn keyword cmusrcOptSortKeys   contained artist album title tracknumber
+                                \ discnumber date genre filename
+                                \ nextgroup=cmusrcOptSortKeys
+                                \ skipwhite
+
+syn keyword cmusrcKeyword       contained showbind
+                                \ nextgroup=cmusrcSBindContext
+                                \ skipwhite
+
+syn keyword cmusrcSBindContext  contained common library playlist queue
+                                \ browser filters
+                                \ nextgroup=cmusrcSBindKey
+                                \ skipwhite
+
+syn match   cmusrcSBindKey      contained display '\S\+'
+
+syn keyword cmusrcKeyword       contained toggle
+                                \ nextgroup=cmusrcTogglableOpt
+                                \ skipwhite
+
+syn keyword cmusrcTogglableOpt  contained auto_reshuffle aaa_mode
+                                \ confirm_run continue play_library play_sorted
+                                \ repeat show_hidden show_remaining_time shuffle
+
+syn keyword cmusrcKeyword       contained unbind
+                                \ nextgroup=cmusrcUnbindSwitches,
+                                \           cmusrcSBindContext
+                                \ skipwhite
+
+syn match   cmusrcUnbindSwitches  contained display '-[f]'
+                                  \ nextgroup=cmusrcSBindContext
+                                  \ skipwhite
+
+syn keyword cmusrcKeyword       contained view
+                                \ nextgroup=cmusrcView
+                                \ skipwhite
+
+syn keyword cmusrcView          contained library playlist queue browser filters
+syn match   cmusrcView          contained display '[1-6]'
+
+syn keyword cmusrcKeyword       contained vol
+                                \ nextgroup=cmusrcVolume1
+                                \ skipwhite
+
+syn match   cmusrcVolume1       contained display '[+-]\=\d\+%'
+                                \ nextgroup=cmusrcVolume2
+                                \ skipwhite
+
+syn match   cmusrcVolume2       contained display '[+-]\=\d\+%'
+
+hi def link cmusrcTodo            Todo
+hi def link cmusrcComment         Comment
+hi def link cmusrcKeyword         Keyword
+hi def link cmusrcSwitches        Special
+hi def link cmusrcAddSwitches     cmusrcSwitches
+hi def link cmusrcURI             Normal
+hi def link cmusrcBindSwitches    cmusrcSwitches
+hi def link cmusrcContext         Type
+hi def link cmusrcBindContext     cmusrcContext
+hi def link cmusrcKey             String
+hi def link cmusrcBindKey         cmusrcKey
+hi def link cmusrcDirectory       Normal
+hi def link cmusrcClearSwitches   cmusrcSwitches
+hi def link cmusrcFSetName        PreProc
+hi def link cmusrcEq              Normal
+hi def link cmusrcFSetEq          cmusrcEq
+hi def link cmusrcFilterExpr      Normal
+hi def link cmusrcLoadSwitches    cmusrcSwitches
+hi def link cmusrcSaveSwitches    cmusrcSwitches
+hi def link cmusrcFile            Normal
+hi def link cmusrcSeekOffset      Number
+hi def link cmusrcOption          PreProc
+hi def link cmusrcSetTest         Normal
+hi def link cmusrcOptBoolean      Boolean
+hi def link cmusrcOptEqAAA        cmusrcEq
+hi def link cmusrcOptAAA          Identifier
+hi def link cmusrcOptEqNumber     cmusrcEq
+hi def link cmusrcOptNumber       Number
+hi def link cmusrcOptEqFormat     cmusrcEq
+hi def link cmusrcOptFormat       String
+hi def link cmusrcFormatSpecial   SpecialChar
+hi def link cmusrcOptEqColor      cmusrcEq
+hi def link cmusrcOptColor        Normal
+hi def link cmusrcOptColorName    cmusrcOptColor
+hi def link cmusrcOptColorValue   cmusrcOptColor
+hi def link cmusrcOptEqString     cmusrcEq
+hi def link cmusrcOptString       Normal
+hi def link cmusrcOptEqSortKeys   cmusrcEq
+hi def link cmusrcOptSortKeys     Identifier
+hi def link cmusrcSBindContext    cmusrcContext
+hi def link cmusrcSBindKey        cmusrcKey
+hi def link cmusrcTogglableOpt    cmusrcOption
+hi def link cmusrcUnbindSwitches  cmusrcSwitches
+hi def link cmusrcView            Normal
+hi def link cmusrcVolume1         Number
+hi def link cmusrcVolume2         Number
+
+let b:current_syntax = "cmusrc"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/syntax/csh.vim
+++ b/runtime/syntax/csh.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	C-shell (csh)
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Version:	9
-" Last Change:	Sep 06, 2005
+" Version:	10
+" Last Change:	Sep 11, 2006
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 
 " For version 5.x: Clear all syntax items
@@ -35,12 +35,12 @@ syn match   cshNoEndlineDQ	contained "[^
 syn match   cshNoEndlineSQ	contained "[^\']\(\\\\\)*$"
 syn match   cshNoEndlineBQ	contained "[^\`]\(\\\\\)*$"
 
-syn region  cshDblQuote	start=+[^\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+	contains=cshSpecial,cshShellVariables,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,cshBckQuote
-syn region  cshSnglQuote	start=+[^\\]'+lc=1 skip=+\\\\\|\\'+ end=+'+	contains=cshNoEndlineSQ
-syn region  cshBckQuote	start=+[^\\]`+lc=1 skip=+\\\\\|\\`+ end=+`+	contains=cshNoEndlineBQ
-syn region  cshDblQuote	start=+^"+ skip=+\\\\\|\\"+ end=+"+		contains=cshSpecial,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ
-syn region  cshSnglQuote	start=+^'+ skip=+\\\\\|\\'+ end=+'+		contains=cshNoEndlineSQ
-syn region  cshBckQuote	start=+^`+ skip=+\\\\\|\\`+ end=+`+		contains=cshNoEndlineBQ
+syn region  cshDblQuote	start=+[^\\]"+lc=1 skip=+\\\\\|\\"+ end=+"+	contains=cshSpecial,cshShellVariables,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,cshBckQuote,@Spell
+syn region  cshSnglQuote	start=+[^\\]'+lc=1 skip=+\\\\\|\\'+ end=+'+	contains=cshNoEndlineSQ,@Spell
+syn region  cshBckQuote	start=+[^\\]`+lc=1 skip=+\\\\\|\\`+ end=+`+	contains=cshNoEndlineBQ,@Spell
+syn region  cshDblQuote	start=+^"+ skip=+\\\\\|\\"+ end=+"+		contains=cshSpecial,cshExtVar,cshSelector,cshQtyWord,cshArgv,cshSubst,cshNoEndlineDQ,@Spell
+syn region  cshSnglQuote	start=+^'+ skip=+\\\\\|\\'+ end=+'+		contains=cshNoEndlineSQ,@Spell
+syn region  cshBckQuote	start=+^`+ skip=+\\\\\|\\`+ end=+`+		contains=cshNoEndlineBQ,@Spell
 syn cluster cshCommentGroup	contains=cshTodo,@Spell
 syn match   cshComment	"#.*$" contains=@cshCommentGroup
 
--- a/runtime/syntax/dcl.vim
+++ b/runtime/syntax/dcl.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	DCL (Digital Command Language - vms)
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Apr 12, 2006
-" Version:	5
+" Last Change:	Sep 11, 2006
+" Version:	6
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 
 " For version 5.x: Clear all syntax items
@@ -75,7 +75,7 @@ syn match   dclFilename	"\I\i*\.\(\I\i*\
 syn match   dclDirSep	"[[\].;]"
 
 " Strings
-syn region  dclString	start='"'	skip='""'	end='"'
+syn region  dclString	start='"'	skip='""'	end='"'	contains=@Spell
 
 " $ stuff and comments
 syn cluster dclCommentGroup	contains=dclStart,dclTodo,@Spell
--- a/runtime/syntax/desc.vim
+++ b/runtime/syntax/desc.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	T2 / ROCK Linux .desc
 " Maintainer:	René Rebe <rene@exactcode.de>, Piotr Esden-Tempski <esden@rocklinux.org>
-" Last Change:	2006 Mar 30
+" Last Change:	2006 Aug 14
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -14,7 +14,7 @@ endif
 " syntax definitions
 
 setl iskeyword+=-
-syn keyword descFlag DIETLIBC KAFFE JAIL FPIC-QUIRK NO-LIBTOOL-QUIRK AUTOMAKE-QUIRK NO-AS-NEEDED NO-SSP contained
+syn keyword descFlag DIETLIBC KAFFE JAIL NOPARALLEL FPIC-QUIRK LIBTOOL-WUIRK NO-LIBTOOL-FIX AUTOMAKE-QUIRK NO-AS-NEEDED NO-SSP KERNEL INIT LIBC CC CXX F77 KCC contained
 syn keyword descLicense Unknown GPL LGPL FDL MIT BSD OpenSource Free-to-use Commercial contained
 
 " tags
--- a/runtime/syntax/elmfilt.vim
+++ b/runtime/syntax/elmfilt.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Elm Filter rules
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Sep 06, 2005
-" Version:	4
+" Last Change:	Sep 11, 2006
+" Version:	5
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 
 " For version 5.x: Clear all syntax items
@@ -33,8 +33,8 @@ syn match	elmfiltNumber	contained	"\d\+"
 syn keyword	elmfiltOperKey	contained	and not				skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey,elmfiltString
 syn match	elmfiltOper	contained	"\~"				skipnl skipwhite nextgroup=elmfiltMatch
 syn match	elmfiltOper	contained	"<=\|>=\|!=\|<\|<\|="		skipnl skipwhite nextgroup=elmfiltString,elmfiltCond,elmfiltOperKey
-syn region	elmfiltString	contained	start='"' skip='"\(\\\\\)*\\["%]' end='"'	contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey
-syn region	elmfiltString	contained	start="'" skip="'\(\\\\\)*\\['%]" end="'"	contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey
+syn region	elmfiltString	contained	start='"' skip='"\(\\\\\)*\\["%]' end='"'	contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey,@Spell
+syn region	elmfiltString	contained	start="'" skip="'\(\\\\\)*\\['%]" end="'"	contains=elmfiltArg skipnl skipwhite nextgroup=elmfiltOper,elmfiltOperKey,@Spell
 syn match	elmfiltSpaceError	contained	"\s.*$"
 
 " Define the default highlighting.
--- a/runtime/syntax/eruby.vim
+++ b/runtime/syntax/eruby.vim
@@ -29,10 +29,10 @@ endif
 
 syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment
 
-syn region  erubyOneLiner   matchgroup=erubyDelimiter start="^%%\@!" end="$"  contains=@rubyTop	       containedin=ALLBUT,@erubyRegions keepend oneline
-syn region  erubyBlock	    matchgroup=erubyDelimiter start="<%%\@!" end="%>" contains=@rubyTop	       containedin=ALLBUT,@erubyRegions
-syn region  erubyExpression matchgroup=erubyDelimiter start="<%="    end="%>" contains=@rubyTop	       containedin=ALLBUT,@erubyRegions
-syn region  erubyComment    matchgroup=erubyDelimiter start="<%#"    end="%>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend
+syn region  erubyOneLiner   matchgroup=erubyDelimiter start="^%%\@!"    end="$"     contains=@rubyTop	     containedin=ALLBUT,@erubyRegions keepend oneline
+syn region  erubyBlock	    matchgroup=erubyDelimiter start="<%%\@!-\=" end="-\=%>" contains=@rubyTop	     containedin=ALLBUT,@erubyRegions
+syn region  erubyExpression matchgroup=erubyDelimiter start="<%="       end="-\=%>" contains=@rubyTop	     containedin=ALLBUT,@erubyRegions
+syn region  erubyComment    matchgroup=erubyDelimiter start="<%#"       end="-\=%>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
--- a/runtime/syntax/foxpro.vim
+++ b/runtime/syntax/foxpro.vim
@@ -1,16 +1,46 @@
 " Vim syntax file
-" Language:     FoxPro for DOS v2.x
-" Maintainer:   Powing Tse <powing@hkem.com>
-" Last Change:  06 September 2001
+" Filename:     foxpro.vim
+" Version:      1.0
+" Language:     FoxPro for DOS/UNIX v2.6
+" Maintainer:   Bill W. Smith, Jr. <donal@brewich.com>
+" Last Change:  15 May 2006
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
+"     This file replaces the FoxPro for DOS v2.x syntax file 
+" maintained by Powing Tse <powing@mcmug.org>
+" 
+" Change Log:	added support for FoxPro Codebook highlighting
+" 		corrected highlighting of comments that do NOT start in col 1
+" 		corrected highlighting of comments at end of line (&&)
+" 
+" 
 if version < 600
     syntax clear
 elseif exists("b:current_syntax")
     finish
 endif
 
+" FoxPro Codebook Naming Conventions
+syn match foxproCBConst "\<[c][A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBVar "\<[lgrt][acndlmf][A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBField "\<[a-z0-9]*\.[A-Za-z0-9_]*\>"
+" PROPER CodeBook field names start with the data type and do NOT have _
+syn match foxproCBField "\<[A-Za-z0-9]*\.[acndlm][A-Z][A-Za-z0-9]*\>"
+syn match foxproCBWin "\<w[rbcm][A-Z][A-Za-z0-9_]*\>"
+" CodeBook 2.0 defined objects as follows
+" This uses the hotkey from the screen builder as the second character
+syn match foxproCBObject "\<[lgr][bfthnkoli][A-Z][A-Za-z0-9_]*\>"
+" A later version added the following conventions for objects
+syn match foxproCBObject "\<box[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<fld[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<txt[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<phb[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<rdo[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<chk[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<pop[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<lst[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<inv[A-Z][A-Za-z0-9_]*\>"
+syn match foxproCBObject "\<mnu[A-Z][A-Za-z0-9_]*\>"
+
 syntax case ignore
 
 " Highlight special characters
@@ -685,6 +715,11 @@ if version >= 508 || !exists("did_foxpro
     HiLink foxproFloat    Float
     HiLink foxproComment  Comment
     HiLink foxproParenErr Error
+    HiLink foxproCBConst  PreProc
+    HiLink foxproCBField  Special
+    HiLink foxproCBVar    Identifier
+    HiLink foxproCBWin    Special
+    HiLink foxproCBObject Identifier
 
     delcommand HiLink
 endif
--- a/runtime/syntax/fvwm.vim
+++ b/runtime/syntax/fvwm.vim
@@ -1,15 +1,15 @@
 " Vim syntax file
-" Language:	Fvwm{1,2} configuration file
-" Maintainer:	Haakon Riiser <hakonrk@fys.uio.no>
-" Last Change:	2002 Jun 2
+" Language:		Fvwm{1,2} configuration file
+" Maintainer:		Gautam Iyer <gi1242@users.sourceforge.net>
+" Previous Maintainer:	Haakon Riiser <hakonrk@fys.uio.no>
+" Last Change:		Sat 04 Nov 2006 11:28:37 PM PST
 "
 " Thanks to David Necas (Yeti) for adding Fvwm 2.4 support.
+"
+" 2006-05-09 gi1242: Rewrote fvwm2 syntax completely. Also since fvwm1 is now
+" mostly obsolete, made the syntax file pick fvwm2 syntax by default.
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-    syn clear
-elseif exists("b:current_syntax")
+if exists("b:current_syntax")
     finish
 endif
 
@@ -18,332 +18,600 @@ syn case ignore
 
 " Identifiers in Fvwm can contain most characters, so we only
 " include the most common ones here.
-if version >= 600
-    setlocal iskeyword=_,-,+,.,a-z,A-Z,48-57
-else
-    set iskeyword=_,-,+,.,a-z,A-Z,48-57
-endif
+setlocal iskeyword=_,-,+,.,a-z,A-Z,48-57
 
-" Read system colors from the color database (rgb.txt)
-if exists("rgb_file")
-    " We don't want any hit-return prompts, so we make sure that
-    " &shortmess is set to `O'
-    let __fvwm_oldshm = &shortmess
-    set shortmess=O
-
-    " And we set &report to a huge number, so that no hit-return prompts
-    " will be given
-    let __fvwm_oldreport = &report
-    set report=10000
+" Syntax items common to fvwm1 and fvwm2 config files
+syn cluster fvwmConstants	contains=fvwmEnvVar,fvwmNumber
+syn match   fvwmEnvVar		"\$\w\+"
+syn match   fvwmNumber		'\v<(\d+|0x[0-9a-f]+)>' 
 
-    " Append the color database to the fvwm configuration, and read the
-    " colors from this buffer
-    let __fvwm_i = line("$") + 1
-    exe "$r" rgb_file
-    let __fvwm_lastline = line("$")
-    while __fvwm_i <= __fvwm_lastline
-	let __fvwm_s = matchstr(getline(__fvwm_i), '^\s*\d\+\s\+\d\+\s\+\d\+\s\+\h.*$')
-	if __fvwm_s != ""
-	    exe "syn keyword fvwmColors ".substitute(__fvwm_s, '^\s*\d\+\s\+\d\+\s\+\d\+\s\+\(\h.*\)$', '\1', "")
-	endif
-	let __fvwm_i = __fvwm_i + 1
-    endwhile
+syn match   fvwmModConf		nextgroup=fvwmModArg	"\v^\s*\*\a+"
+syn region  fvwmModArg		contained contains=fvwmString,fvwmRGBValue
+				\ start='.' skip='\\$' end='$'
 
-    " Remove the appended data
-    undo
-
-    " Goto first line again
-    1
+syn region  fvwmString		contains=fvwmBackslash start='"'
+				\ matchgroup=fvwmBackslash skip='\v\\"' end='"'
+syn region  fvwmString		contains=fvwmBackslash start='`'
+				\ matchgroup=fvwmBackslash skip='\v\\`' end='`'
+syn region  fvwmString		contains=fvwmBackslash start="'"
+				\ matchgroup=fvwmBackslash skip="\v\\'" end="'"
+syn match   fvwmBackslash	contained '\\[^"'`]'
 
-    " and restore the old values of the variables
-    let &shortmess = __fvwm_oldshm
-    let &report = __fvwm_oldreport
-    unlet __fvwm_i __fvwm_s __fvwm_lastline __fvwm_oldshm __fvwm_oldreport
-endif
-" done reading colors
-
-syn match   fvwmWhitespace	"\s\+" contained
-syn match   fvwmEnvVar		"\$\w\+"
-syn match   fvwmModConf		"^\s*\*\a\+" contains=fvwmWhitespace
-syn match   fvwmString		'".\{-}"'
 syn match   fvwmRGBValue	"#\x\{3}"
 syn match   fvwmRGBValue	"#\x\{6}"
 syn match   fvwmRGBValue	"#\x\{9}"
 syn match   fvwmRGBValue	"#\x\{12}"
 syn match   fvwmRGBValue	"rgb:\x\{1,4}/\x\{1,4}/\x\{1,4}"
-syn match   fvwmPath		"\<IconPath\s.*$"lc=8 contains=fvwmEnvVar
-syn match   fvwmPath		"\<ModulePath\s.*$"lc=10 contains=fvwmEnvVar
-syn match   fvwmPath		"\<PixmapPath\s.*$"lc=10 contains=fvwmEnvVar
-syn match   fvwmModule		"\<Module\s\+\w\+"he=s+6
-syn match   fvwmKey		"\<Key\s\+\w\+"he=s+3
-syn keyword fvwmExec		Exec
-syn match   fvwmComment		"^#.*$"
+
+syn region  fvwmComment		contains=@Spell start="^\s*#" skip='\\$' end='$'
+
+if (exists("b:fvwm_version") && b:fvwm_version == 1)
+	    \ || (exists("use_fvwm_1") && use_fvwm_1)
+
+    "
+    " Syntax highlighting for Fvwm1 files.
+    "
 
-if (exists("b:fvwm_version") && b:fvwm_version == 1) || (exists("use_fvwm_1") && use_fvwm_1)
+    " Moved from common syntax items
+    syn match   fvwmModule	"\<Module\s\+\w\+"he=s+6
+    syn keyword fvwmExec	Exec
+    syn match   fvwmPath	"\<IconPath\s.*$"lc=8 contains=fvwmEnvVar
+    syn match   fvwmPath	"\<ModulePath\s.*$"lc=10 contains=fvwmEnvVar
+    syn match   fvwmPath	"\<PixmapPath\s.*$"lc=10 contains=fvwmEnvVar
+    syn match   fvwmKey		"\<Key\s\+\w\+"he=s+3
+
+    " fvwm1 specific items
     syn match  fvwmEnvVar	"\$(\w\+)"
-    syn region fvwmStyle	matchgroup=fvwmFunction start="^\s*Style\>"hs=e-5 end="$" oneline keepend contains=fvwmString,fvwmKeyword,fvwmWhiteSpace
+    syn match  fvwmWhitespace	contained "\s\+"
+    syn region fvwmStyle	oneline keepend
+				\ contains=fvwmString,fvwmKeyword,fvwmWhiteSpace
+				\ matchgroup=fvwmFunction
+				\ start="^\s*Style\>"hs=e-5 end="$"
 
-    syn keyword fvwmFunction	AppsBackingStore AutoRaise BackingStore
-    syn keyword fvwmFunction	Beep BoundaryWidth ButtonStyle
-    syn keyword fvwmFunction	CenterOnCirculate CirculateDown
-    syn keyword fvwmFunction	CirculateHit CirculateSkip
-    syn keyword fvwmFunction	CirculateSkipIcons CirculateUp
-    syn keyword fvwmFunction	ClickTime ClickToFocus Close Cursor
-    syn keyword fvwmFunction	CursorMove DecorateTransients Delete
-    syn keyword fvwmFunction	Desk DeskTopScale DeskTopSize Destroy
-    syn keyword fvwmFunction	DontMoveOff EdgeResistance EdgeScroll
-    syn keyword fvwmFunction	EndFunction EndMenu EndPopup Focus
-    syn keyword fvwmFunction	Font Function GotoPage HiBackColor
-    syn keyword fvwmFunction	HiForeColor Icon IconBox IconFont
-    syn keyword fvwmFunction	Iconify IconPath Key Lenience Lower
-    syn keyword fvwmFunction	Maximize MenuBackColor MenuForeColor
-    syn keyword fvwmFunction	MenuStippleColor Module ModulePath Mouse
-    syn keyword fvwmFunction	Move MWMBorders MWMButtons MWMDecorHints
-    syn keyword fvwmFunction	MWMFunctionHints MWMHintOverride MWMMenus
-    syn keyword fvwmFunction	NoBorder NoBoundaryWidth Nop NoPPosition
-    syn keyword fvwmFunction	NoTitle OpaqueMove OpaqueResize Pager
-    syn keyword fvwmFunction	PagerBackColor PagerFont PagerForeColor
-    syn keyword fvwmFunction	PagingDefault PixmapPath Popup Quit Raise
-    syn keyword fvwmFunction	RaiseLower RandomPlacement Refresh Resize
-    syn keyword fvwmFunction	Restart SaveUnders Scroll SloppyFocus
-    syn keyword fvwmFunction	SmartPlacement StartsOnDesk StaysOnTop
-    syn keyword fvwmFunction	StdBackColor StdForeColor Stick Sticky
-    syn keyword fvwmFunction	StickyBackColor StickyForeColor
-    syn keyword fvwmFunction	StickyIcons StubbornIconPlacement
-    syn keyword fvwmFunction	StubbornIcons StubbornPlacement
-    syn keyword fvwmFunction	SuppressIcons Title TogglePage Wait Warp
-    syn keyword fvwmFunction	WindowFont WindowList WindowListSkip
-    syn keyword fvwmFunction	WindowsDesk WindowShade XORvalue
+    syn keyword fvwmFunction	AppsBackingStore AutoRaise BackingStore Beep
+				\ BoundaryWidth ButtonStyle CenterOnCirculate
+				\ CirculateDown CirculateHit CirculateSkip
+				\ CirculateSkipIcons CirculateUp ClickTime
+				\ ClickToFocus Close Cursor CursorMove
+				\ DecorateTransients Delete Desk DeskTopScale
+				\ DeskTopSize Destroy DontMoveOff
+				\ EdgeResistance EdgeScroll EndFunction
+				\ EndMenu EndPopup Focus Font Function
+				\ GotoPage HiBackColor HiForeColor Icon
+				\ IconBox IconFont Iconify IconPath Key
+				\ Lenience Lower Maximize MenuBackColor
+				\ MenuForeColor MenuStippleColor Module
+				\ ModulePath Mouse Move MWMBorders MWMButtons
+				\ MWMDecorHints MWMFunctionHints
+				\ MWMHintOverride MWMMenus NoBorder
+				\ NoBoundaryWidth Nop NoPPosition NoTitle
+				\ OpaqueMove OpaqueResize Pager PagerBackColor
+				\ PagerFont PagerForeColor PagingDefault
+				\ PixmapPath Popup Quit Raise RaiseLower
+				\ RandomPlacement Refresh Resize Restart
+				\ SaveUnders Scroll SloppyFocus SmartPlacement
+				\ StartsOnDesk StaysOnTop StdBackColor
+				\ StdForeColor Stick Sticky StickyBackColor
+				\ StickyForeColor StickyIcons
+				\ StubbornIconPlacement StubbornIcons
+				\ StubbornPlacement SuppressIcons Title
+				\ TogglePage Wait Warp WindowFont WindowList
+				\ WindowListSkip WindowsDesk WindowShade
+				\ XORvalue
 
     " These keywords are only used after the "Style" command.  To avoid
     " name collision with several commands, they are contained.
-    syn keyword fvwmKeyword	BackColor BorderWidth BoundaryWidth contained
-    syn keyword fvwmKeyword	Button CirculateHit CirculateSkip Color contained
-    syn keyword fvwmKeyword	DoubleClick ForeColor Handles HandleWidth contained
-    syn keyword fvwmKeyword	Icon IconTitle NoBorder NoBoundaryWidth contained
-    syn keyword fvwmKeyword	NoButton NoHandles NoIcon NoIconTitle contained
-    syn keyword fvwmKeyword	NoTitle Slippery StartIconic StartNormal contained
-    syn keyword fvwmKeyword	StartsAnyWhere StartsOnDesk StaysOnTop contained
-    syn keyword fvwmKeyword	StaysPut Sticky Title WindowListHit contained
-    syn keyword fvwmKeyword	WindowListSkip contained
-elseif (exists("b:fvwm_version") && b:fvwm_version == 2) || (exists("use_fvwm_2") && use_fvwm_2)
+    syn keyword fvwmKeyword	contained
+				\ BackColor BorderWidth BoundaryWidth Button
+				\ CirculateHit CirculateSkip Color DoubleClick
+				\ ForeColor Handles HandleWidth Icon IconTitle
+				\ NoBorder NoBoundaryWidth NoButton NoHandles
+				\ NoIcon NoIconTitle NoTitle Slippery
+				\ StartIconic StartNormal StartsAnyWhere
+				\ StartsOnDesk StaysOnTop StaysPut Sticky
+				\ Title WindowListHit WindowListSkip
+
+" elseif (exists("b:fvwm_version") && b:fvwm_version == 2)
+" 	    \ || (exists("use_fvwm_2") && use_fvwm_2)
+else
+
+    "
+    " Syntax highlighting for fvwm2 files.
+    "
     syn match   fvwmEnvVar	"\${\w\+}"
     syn match   fvwmEnvVar	"\$\[[^]]\+\]"
     syn match   fvwmEnvVar	"\$[$0-9*]"
-    syn match   fvwmDef		'^\s*+\s*".\{-}"' contains=fvwmMenuString,fvwmWhitespace
-    syn match   fvwmIcon	'%.\{-}%' contained
-    syn match   fvwmIcon	'\*.\{-}\*' contained
-    syn match   fvwmMenuString	'".\{-}"' contains=fvwmIcon,fvwmShortcutKey contained
-    syn match   fvwmShortcutKey	"&." contained
-    syn match   fvwmModule	"\<KillModule\s\+\w\+"he=s+10 contains=fvwmModuleName
-    syn match   fvwmModule	"\<SendToModule\s\+\w\+"he=s+12 contains=fvwmModuleName
-    syn match   fvwmModule	"\<DestroyModuleConfig\s\+\w\+"he=s+19 contains=fvwmModuleName
+
+    syn match   fvwmDef		contains=fvwmMenuString,fvwmWhitespace
+				\ '^\s*+\s*".\{-}"'
+    syn region  fvwmMenuString	contains=fvwmIcon,fvwmShortcutKey
+				\ start='^\s*+\s*\zs"' skip='\v\\\\|\\\"' end='"'
+    syn region	fvwmIcon	contained start='\v\%\%@!' end='%'
+    syn match   fvwmShortcutKey	contained "&."
+
+    syn keyword fvwmModuleName	FvwmAnimate FvwmAudio FvwmAuto FvwmBacker
+				\ FvwmBanner FvwmButtons FvwmCommandS
+				\ FvwmConsole FvwmCpp FvwmDebug FvwmDragWell
+				\ FvwmEvent FvwmForm FvwmGtk FvwmIconBox
+				\ FvwmIconMan FvwmIdent FvwmM4 FvwmPager
+				\ FvwmSave FvwmSaveDesk FvwmScript FvwmScroll
+				\ FvwmTaskBar FvwmWinList FvwmWharf
+    " Obsolete fvwmModuleName: FvwmTheme
+
+    syn keyword fvwmKeyword	AddToMenu ChangeMenuStyle CopyMenuStyle
+				\ DestroyMenu DestroyMenuStyle Menu
+				\ Popup TearMenuOff Title BugOpts BusyCursor
+				\ ClickTime ColorLimit ColormapFocus
+				\ DefaultColors DefaultColorset DefaultFont
+				\ DefaultIcon DefaultLayers Deschedule Emulate
+				\ EscapeFunc FakeClick FakeKeypress GlobalOpts
+				\ HilightColor HilightColorset IconFont
+				\ PrintInfo Repeat Schedule State WindowFont
+				\ XSync XSynchronize AnimatedMove
+				\ HideGeometryWindow Layer Lower Move
+				\ MoveToDesk MoveThreshold MoveToPage
+				\ MoveToScreen OpaqueMoveSize PlaceAgain Raise
+				\ RaiseLower ResizeMaximize ResizeMove
+				\ ResizeMoveMaximize RestackTransients
+				\ SetAnimation SnapAttraction SnapGrid
+				\ WindowsDesk XorPixmap XorValue CursorMove
+				\ FlipFocus Focus WarpToWindow Close Delete
+				\ Destroy Iconify Recapture RecaptureWindow
+				\ Refresh RefreshWindow Stick StickAcrossPages
+				\ StickAcrossDesks WindowShade
+				\ WindowShadeAnimate IgnoreModifiers
+				\ EdgeCommand EdgeLeaveCommand GnomeButton
+				\ Stroke StrokeFunc FocusStyle DestroyStyle
+				\ UpdateStyles AddToDecor BorderStyle
+				\ ChangeDecor DestroyDecor UpdateDecor
+				\ DesktopName DeskTopSize EdgeResistance
+				\ EdgeScroll EdgeThickness EwmhBaseStruts
+				\ EWMHNumberOfDesktops GotoDeskAndPage
+				\ GotoPage Scroll Xinerama
+				\ XineramaPrimaryScreen XineramaSls
+				\ XineramaSlsSize XineramaSlsScreens AddToFunc
+				\ Beep DestroyFunc Echo Exec ExecUseShell
+				\ Function Nop PipeRead Read SetEnv Silent
+				\ UnsetEnv Wait DestroyModuleConfig KillModule
+				\ Module ModuleSynchronous ModuleTimeout
+				\ SendToModule Quit QuitScreen QuitSession
+				\ Restart SaveSession SaveQuitSession KeepRc
+				\ NoWindow Break CleanupColorsets
 
-    syn keyword fvwmFunction	AddButtonStyle AddTitleStyle AddToDecor AddToFunc
-    syn keyword fvwmFunction	AddToMenu AnimatedMove Beep BorderStyle BugOpts
-    syn keyword fvwmFunction	BusyCursor ButtonState ButtonStyle ChangeDecor
-    syn keyword fvwmFunction	ChangeMenuStyle ClickTime Close ColorLimit
-    syn keyword fvwmFunction	ColormapFocus CopyMenuStyle Current CursorMove
-    syn keyword fvwmFunction	CursorStyle DefaultColors DefaultColorset
-    syn keyword fvwmFunction	DefaultFont DefaultIcon DefaultLayers Delete Desk
-    syn keyword fvwmFunction	DeskTopSize Destroy DestroyDecor DestroyFunc
-    syn keyword fvwmFunction	DestroyMenu DestroyMenuStyle Direction Echo
-    syn keyword fvwmFunction	EdgeResistance EdgeScroll EdgeThickness Emulate
-    syn keyword fvwmFunction	EscapeFunc Exec ExecUseShell ExitFunction
-    syn keyword fvwmFunction	FakeClick FlipFocus Focus Function GlobalOpts
-    syn keyword fvwmFunction	GnomeButton GotoDesk GotoDeskAndPage GotoPage
-    syn keyword fvwmFunction	HideGeometryWindow HilightColor HilightColorset
-    syn keyword fvwmFunction	IconFont IconPath Iconify IgnoreModifiers
-    syn keyword fvwmFunction	ImagePath Key Layer Lower Maximize Menu MenuStyle
-    syn keyword fvwmFunction	ModulePath ModuleSynchronous ModuleTimeout
-    syn keyword fvwmFunction	Mouse Move MoveThreshold MoveToDesk MoveToPage
-    syn keyword fvwmFunction	MoveToScreen Next None Nop OpaqueMoveSize
-    syn keyword fvwmFunction	PipeRead PixmapPath PlaceAgain PointerKey
-    syn keyword fvwmFunction	Popup Prev Quit QuitScreen QuitSession Raise
-    syn keyword fvwmFunction	RaiseLower Read Recapture RecaptureWindow
-    syn keyword fvwmFunction	Refresh RefreshWindow Resize ResizeMove
-    syn keyword fvwmFunction	Restart SaveQuitSession SaveSession Scroll
-    syn keyword fvwmFunction	SetAnimation SetEnv SetMenuDelay SetMenuStyle
-    syn keyword fvwmFunction	Silent SnapAttraction SnapGrid Stick Stroke
-    syn keyword fvwmFunction	StrokeFunc Style Title TitleStyle UnsetEnv
-    syn keyword fvwmFunction	UpdateDecor UpdateStyles Wait WarpToWindow
-    syn keyword fvwmFunction	WindowFont WindowId WindowList WindowShade
-    syn keyword fvwmFunction	WindowShadeAnimate WindowsDesk Xinerama
-    syn keyword fvwmFunction	XineramaPrimaryScreen XineramaSls XineramaSlsSize
-    syn keyword fvwmFunction	XorPixmap XorValue
+    " Conditional commands
+    syn keyword fvwmKeyword	nextgroup=fvwmCondition skipwhite
+				\ All Any Current Next None Pick PointerWindow
+				\ Prev ThisWindow
+    syn keyword fvwmKeyword	nextgroup=fvwmDirection skipwhite
+				\ Direction
+    syn keyword fvwmDirection	contained nextgroup=fvwmDirection skipwhite
+				\ FromPointer
+    syn keyword fvwmDirection	contained nextgroup=fvwmCondition skipwhite
+				\ North Northeast East Southeast South
+				\ Southwest West Northwest Center
+    syn region	fvwmCondition	contained contains=fvwmCondNames,fvwmString
+				\ matchgroup=fvwmKeyword start='(' skip=','
+				\ end=')'
+    syn keyword fvwmCondNames	contained
+				\ AcceptsFocus AnyScreen CirculateHit
+				\ CirculateHitIcon CirculateHitShaded Closable
+				\ CurrentDesk CurrentGlobalPage
+				\ CurrentGlobalPageAnyDesk CurrentPage
+				\ CurrentPageAnyDesk CurrentScreen FixedSize
+				\ Focused HasHandles HasPointer Iconic
+				\ Iconifiable Maximizable Maximized
+				\ Overlapped PlacedByButton3 PlacedByFvwm Raised
+				\ Shaded Sticky StickyAcrossDesks
+				\ StickyAcrossPages Transient Visible
+    syn keyword fvwmCondNames	contained skipwhite nextgroup=@fvwmConstants
+				\ State Layer
+
+    " Test
+    syn keyword fvwmKeyword	nextgroup=fvwmTCond skipwhite
+				\ Test
+    syn region	fvwmTCond	contained contains=fvwmTCNames,fvwmString
+				\ matchgroup=fvwmKeyword start='(' end=')'
+    syn keyword	fvwmTCNames	contained
+				\ Version EnvIsSet EnvMatch EdgeHasPointer
+				\ EdgeIsActive Start Init Restart Exit Quit
+				\ ToRestart True False F R W X I
+    
+    " TestRc
+    syn keyword fvwmKeyword	nextgroup=fvwmTRCond skipwhite
+				\ TestRc
+    syn region	fvwmTRCond	contained contains=fvwmTRNames,fvwmNumber
+				\ matchgroup=fvwmKeyword start='(' end=')'
+    syn keyword	fvwmTRNames	contained NoMatch Match Error Break
+
+    " Colorsets
+    syn keyword fvwmKeyword	nextgroup=fvwmCSArgs	skipwhite
+				\ ColorSet
+    syn region	fvwmCSArgs	contained transparent contains=fvwmCSNames,@fvwmConstants,fvwmString,fvwmRGBValue,fvwmGradient
+		\ start='.' skip='\\$' end='$'
+    syn keyword	fvwmCSNames	contained
+				\ fg Fore Foreground bg Back Background hi
+				\ Hilite Hilight sh Shade Shadow fgsh Pixmap
+				\ TiledPixmap AspectPixmap RootTransparent
+				\ Shape TiledShape AspectShape Tint fgTint
+				\ bgTint Alpha fgAlpha Dither IconTint
+				\ IconAlpha NoShape Plain Translucent
+    syn match	fvwmCSNames	contained	'\v<Transparent>'
+    syn match	fvwmGradient	contained	'\v<[HVDBSCRY]Gradient>'
 
-    syn keyword fvwmKeyword	Active ActiveColorset ActiveDown
-    syn keyword fvwmKeyword	ActiveFore ActiveForeOff ActivePlacement
-    syn keyword fvwmKeyword	ActivePlacementHonorsStartsOnPage
-    syn keyword fvwmKeyword	ActivePlacementIgnoresStartsOnPage ActiveUp All
-    syn keyword fvwmKeyword	AllowRestack Alphabetic Anim Animated Animation
-    syn keyword fvwmKeyword	AnimationOff AutomaticHotkeys AutomaticHotkeysOff
-    syn keyword fvwmKeyword	BGradient BackColor Background BackingStore
-    syn keyword fvwmKeyword	BackingStoreOff BorderColorset BorderWidth
-    syn keyword fvwmKeyword	Bottom Button Button0 Button1 Button2 Button3
-    syn keyword fvwmKeyword	Button4 Button5 Button6 Button7 Button8
-    syn keyword fvwmKeyword	Button9 CGradient CaptureHonorsStartsOnPage
-    syn keyword fvwmKeyword	CaptureIgnoresStartsOnPage CascadePlacement
-    syn keyword fvwmKeyword	Centered CirculateHit CirculateHitIcon
-    syn keyword fvwmKeyword	CirculateHitShaded CirculateSkip
-    syn keyword fvwmKeyword	CirculateSkipIcon CirculateSkipShaded Clear
-    syn keyword fvwmKeyword	ClickToFocus ClickToFocusDoesntPassClick
-    syn keyword fvwmKeyword	ClickToFocusDoesntRaise ClickToFocusPassesClick
-    syn keyword fvwmKeyword	ClickToFocusPassesClickOff ClickToFocusRaises
-    syn keyword fvwmKeyword	ClickToFocusRaisesOff Color Colorset Context
-    syn keyword fvwmKeyword	CurrentDesk CurrentPage CurrentPageAnyDesk
-    syn keyword fvwmKeyword	DGradient DecorateTransient Default
-    syn keyword fvwmKeyword	DepressableBorder Desk DontLowerTransient
-    syn keyword fvwmKeyword	DontRaiseTransient DontStackTransientParent
-    syn keyword fvwmKeyword	DoubleClickTime Down DumbPlacement DynamicMenu
-    syn keyword fvwmKeyword	DynamicPopDownAction DynamicPopUpAction
-    syn keyword fvwmKeyword	East Expect FVWM FirmBorder Fixed
-    syn keyword fvwmKeyword	FixedPosition Flat FlickeringMoveWorkaround
-    syn keyword fvwmKeyword	FlickeringQtDialogsWorkaround FocusFollowsMouse
-    syn keyword fvwmKeyword	FollowsFocus FollowsMouse Font ForeColor
-    syn keyword fvwmKeyword	Foreground Function Fvwm FvwmBorder
-    syn keyword fvwmKeyword	FvwmButtons GNOMEIgnoreHints GNOMEUseHints
-    syn keyword fvwmKeyword	GrabFocus GrabFocusOff GrabFocusTransient
-    syn keyword fvwmKeyword	GrabFocusTransientOff Greyed GreyedColorset
-    syn keyword fvwmKeyword	HGradient HandleWidth Handles Height
-    syn keyword fvwmKeyword	HiddenHandles Hilight3DOff Hilight3DThick
-    syn keyword fvwmKeyword	Hilight3DThickness Hilight3DThin HilightBack
-    syn keyword fvwmKeyword	HilightBackOff HilightBorderColorset
-    syn keyword fvwmKeyword	HilightColorset HilightFore HintOverride
-    syn keyword fvwmKeyword	HoldSubmenus Icon IconBox IconFill IconFont
-    syn keyword fvwmKeyword	IconGrid IconOverride IconTitle Iconic
-    syn keyword fvwmKeyword	IconifyWindowGroups IconifyWindowGroupsOff
-    syn keyword fvwmKeyword	Icons IgnoreRestack Inactive Interior Item
-    syn keyword fvwmKeyword	ItemFormat KeepWindowGroupsOnDesk Layer Left
-    syn keyword fvwmKeyword	LeftJustified Lenience LowerTransient MWM
-    syn keyword fvwmKeyword	MWMBorder MWMButtons MWMDecor MWMDecorMax
-    syn keyword fvwmKeyword	MWMDecorMenu MWMDecorMin MWMFunctions
-    syn keyword fvwmKeyword	ManualPlacement ManualPlacementHonorsStartsOnPage
-    syn keyword fvwmKeyword	ManualPlacementIgnoresStartsOnPage MaxWindowSize
-    syn keyword fvwmKeyword	Maximized Menu MenuColorset MenuFace
-    syn keyword fvwmKeyword	MinOverlapPercentPlacement MinOverlapPlacement
-    syn keyword fvwmKeyword	MiniIcon MixedVisualWorkaround ModalityIsEvil
-    syn keyword fvwmKeyword	ModuleSynchronous Mouse MouseFocus
-    syn keyword fvwmKeyword	MouseFocusClickDoesntRaise MouseFocusClickRaises
-    syn keyword fvwmKeyword	MouseFocusClickRaisesOff Move Mwm MwmBorder
-    syn keyword fvwmKeyword	MwmButtons MwmDecor MwmFunctions NakedTransient
-    syn keyword fvwmKeyword	Never NeverFocus NoActiveIconOverride NoButton
-    syn keyword fvwmKeyword	NoDecorHint NoDeskSort NoFuncHint NoGeometry
-    syn keyword fvwmKeyword	NoGeometryWithInfo NoHandles NoHotkeys NoIcon
-    syn keyword fvwmKeyword	NoIconOverride NoIconPosition NoIconTitle
-    syn keyword fvwmKeyword	NoIcons NoInset NoLenience NoNormal
-    syn keyword fvwmKeyword	NoOLDecor NoOnBottom NoOnTop NoOverride
-    syn keyword fvwmKeyword	NoPPosition NoResizeOverride NoSticky
-    syn keyword fvwmKeyword	NoStipledTitles NoTitle NoTransientPPosition
-    syn keyword fvwmKeyword	NoTransientUSPosition NoUSPosition
-    syn keyword fvwmKeyword	NoWarp Normal North Northeast Northwest
-    syn keyword fvwmKeyword	NotAlphabetic OLDecor OnBottom OnTop Once
-    syn keyword fvwmKeyword	OnlyIcons OnlyListSkip OnlyNormal OnlyOnBottom
-    syn keyword fvwmKeyword	OnlyOnTop OnlySticky Opacity ParentalRelativity
-    syn keyword fvwmKeyword	Pixmap PopdownDelayed PopdownDelay PopupDelay
-    syn keyword fvwmKeyword	PopupAsRootMenu PopupAsSubmenu PopdownImmediately
-    syn keyword fvwmKeyword	PopupDelayed PopupImmediately PopupOffset
-    syn keyword fvwmKeyword	Quiet RGradient RaiseOverNativeWindows
-    syn keyword fvwmKeyword	RaiseOverUnmanaged RaiseTransient
-    syn keyword fvwmKeyword	Raised Read RecaptureHonorsStartsOnPage
-    syn keyword fvwmKeyword	RecaptureIgnoresStartsOnPage Rectangle
-    syn keyword fvwmKeyword	RemoveSubmenus Reset Resize ResizeHintOverride
-    syn keyword fvwmKeyword	ResizeOpaque ResizeOutline ReverseOrder
-    syn keyword fvwmKeyword	Right RightJustified Root SGradient SameType
-    syn keyword fvwmKeyword	SaveUnder SaveUnderOff ScatterWindowGroups
-    syn keyword fvwmKeyword	Screen SelectInPlace SelectOnRelease
-    syn keyword fvwmKeyword	SelectWarp SeparatorsLong SeparatorsShort
-    syn keyword fvwmKeyword	ShowMapping SideColor SidePic Simple
-    syn keyword fvwmKeyword	SkipMapping Slippery SlipperyIcon SloppyFocus
-    syn keyword fvwmKeyword	SmartPlacement SmartPlacementIsNormal
-    syn keyword fvwmKeyword	SmartPlacementIsReallySmart Solid South
-    syn keyword fvwmKeyword	Southeast Southwest StackTransientParent
-    syn keyword fvwmKeyword	StartIconic StartNormal StartsAnyWhere
-    syn keyword fvwmKeyword	StartsLowered StartsOnDesk StartsOnPage
-    syn keyword fvwmKeyword	StartsOnPageIgnoresTransients
-    syn keyword fvwmKeyword	StartsOnPageIncludesTransients StartsOnScreen
-    syn keyword fvwmKeyword	StartsRaised StaysOnBottom StaysOnTop StaysPut
-    syn keyword fvwmKeyword	Sticky StickyIcon StipledTitles StippledTitle
-    syn keyword fvwmKeyword	StippledTitleOff SubmenusLeft SubmenusRight Sunk
-    syn keyword fvwmKeyword	This TileCascadePlacement TileManualPlacement
-    syn keyword fvwmKeyword	TiledPixmap Timeout Title TitleAtBottom
-    syn keyword fvwmKeyword	TitleAtTop TitleUnderlines0 TitleUnderlines1
-    syn keyword fvwmKeyword	TitleUnderlines2 TitleWarp TitleWarpOff Top
-    syn keyword fvwmKeyword	Transient TrianglesRelief TrianglesSolid
-    syn keyword fvwmKeyword	Up UseBorderStyle UseDecor UseIconName
-    syn keyword fvwmKeyword	UseIconPosition UseListSkip UsePPosition
-    syn keyword fvwmKeyword	UseStyle UseTitleStyle UseTransientPPosition
-    syn keyword fvwmKeyword	UseTransientUSPosition UseUSPosition VGradient
-    syn keyword fvwmKeyword	VariablePosition Vector VerticalItemSpacing
-    syn keyword fvwmKeyword	VerticalTitleSpacing WIN Wait Warp WarpTitle
-    syn keyword fvwmKeyword	West Win Window WindowListHit WindowListSkip
-    syn keyword fvwmKeyword	WindowShadeScrolls WindowShadeShrinks
-    syn keyword fvwmKeyword	WindowShadeSteps Windows XineramaRoot YGradient
-    syn keyword fvwmKeyword	bottomright default pointer prev quiet
-    syn keyword fvwmKeyword	True False Toggle
+    " Styles
+    syn keyword fvwmKeyword	nextgroup=fvwmStyleArgs skipwhite
+				\ Style WindowStyle
+    syn region	fvwmStyleArgs	contained transparent contains=fvwmStyleNames,@fvwmConstants,fvwmString,fvwmRGBValue
+				\ start='.' skip='\\$' end='$'
+    syn keyword	fvwmStyleNames	contained
+				\ BorderWidth HandleWidth NoIcon Icon MiniIcon
+				\ IconBox IconGrid IconFill IconSize NoTitle
+				\ Title TitleAtBottom TitleAtLeft TitleAtRight
+				\ TitleAtTop LeftTitleRotatedCW
+				\ LeftTitleRotatedCCW RightTitleRotatedCCW
+				\ RightTitleRotatedCW TopTitleRotated
+				\ TopTitleNotRotated BottomTitleRotated
+				\ BottomTitleNotRotated UseTitleDecorRotation
+				\ StippledTitle StippledTitleOff
+				\ IndexedWindowName ExactWindowName
+				\ IndexedIconName ExactIconName Borders
+				\ NoHandles Handles WindowListSkip
+				\ WindowListHit CirculateSkip CirculateHit
+				\ CirculateSkipShaded CirculateHitShaded Layer
+				\ StaysOnTop StaysOnBottom StaysPut Sticky
+				\ Slippery StickyAcrossPages StickyAcrossDesks
+				\ StartIconic StartNormal Color ForeColor
+				\ BackColor Colorset HilightFore HilightBack
+				\ HilightColorset BorderColorset
+				\ HilightBorderColorset IconTitleColorset
+				\ HilightIconTitleColorset
+				\ IconBackgroundColorset IconTitleRelief
+				\ IconBackgroundRelief IconBackgroundPadding
+				\ Font IconFont StartsOnDesk StartsOnPage
+				\ StartsAnyWhere StartsOnScreen
+				\ ManualPlacementHonorsStartsOnPage
+				\ ManualPlacementIgnoresStartsOnPage
+				\ CaptureHonorsStartsOnPage
+				\ CaptureIgnoresStartsOnPage
+				\ RecaptureHonorsStartsOnPage
+				\ RecaptureIgnoresStartsOnPage
+				\ StartsOnPageIncludesTransients
+				\ StartsOnPageIgnoresTransients IconTitle
+				\ NoIconTitle MwmButtons FvwmButtons MwmBorder
+				\ FvwmBorder MwmDecor NoDecorHint MwmFunctions
+				\ NoFuncHint HintOverride NoOverride NoButton
+				\ Button ResizeHintOverride NoResizeOverride
+				\ OLDecor NoOLDecor GNOMEUseHints
+				\ GNOMEIgnoreHints StickyIcon SlipperyIcon
+				\ StickyAcrossPagesIcon StickyAcrossDesksIcon
+				\ ManualPlacement CascadePlacement
+				\ MinOverlapPlacement
+				\ MinOverlapPercentPlacement
+				\ TileManualPlacement TileCascadePlacement
+				\ CenterPlacement MinOverlapPlacementPenalties
+				\ MinOverlapPercentPlacementPenalties
+				\ DecorateTransient NakedTransient
+				\ DontRaiseTransient RaiseTransient
+				\ DontLowerTransient LowerTransient
+				\ DontStackTransientParent
+				\ StackTransientParent SkipMapping ShowMapping
+				\ ScatterWindowGroups KeepWindowGroupsOnDesk
+				\ UseDecor UseStyle NoPPosition UsePPosition
+				\ NoUSPosition UseUSPosition
+				\ NoTransientPPosition UseTransientPPosition
+				\ NoTransientUSPosition UseTransientUSPosition
+				\ NoIconPosition UseIconPosition Lenience
+				\ NoLenience ClickToFocus SloppyFocus
+				\ MouseFocus FocusFollowsMouse NeverFocus
+				\ ClickToFocusPassesClickOff
+				\ ClickToFocusPassesClick
+				\ ClickToFocusRaisesOff ClickToFocusRaises
+				\ MouseFocusClickRaises
+				\ MouseFocusClickRaisesOff GrabFocus
+				\ GrabFocusOff GrabFocusTransientOff
+				\ GrabFocusTransient FPFocusClickButtons
+				\ FPFocusClickModifiers
+				\ FPSortWindowlistByFocus FPClickRaisesFocused
+				\ FPClickDecorRaisesFocused
+				\ FPClickIconRaisesFocused
+				\ FPClickRaisesUnfocused
+				\ FPClickDecorRaisesUnfocused
+				\ FPClickIconRaisesUnfocused FPClickToFocus
+				\ FPClickDecorToFocus FPClickIconToFocus
+				\ FPEnterToFocus FPLeaveToUnfocus
+				\ FPFocusByProgram FPFocusByFunction
+				\ FPFocusByFunctionWarpPointer FPLenient
+				\ FPPassFocusClick FPPassRaiseClick
+				\ FPIgnoreFocusClickMotion
+				\ FPIgnoreRaiseClickMotion
+				\ FPAllowFocusClickFunction
+				\ FPAllowRaiseClickFunction FPGrabFocus
+				\ FPGrabFocusTransient FPOverrideGrabFocus
+				\ FPReleaseFocus FPReleaseFocusTransient
+				\ FPOverrideReleaseFocus StartsLowered
+				\ StartsRaised IgnoreRestack AllowRestack
+				\ FixedPosition VariablePosition
+				\ FixedUSPosition VariableUSPosition
+				\ FixedPPosition VariablePPosition FixedSize
+				\ VariableSize FixedUSSize VariableUSSize
+				\ FixedPSize VariablePSize Closable
+				\ Iconifiable Maximizable
+				\ AllowMaximizeFixedSize IconOverride
+				\ NoIconOverride NoActiveIconOverride
+				\ DepressableBorder FirmBorder MaxWindowSize
+				\ IconifyWindowGroups IconifyWindowGroupsOff
+				\ ResizeOpaque ResizeOutline BackingStore
+				\ BackingStoreOff BackingStoreWindowDefault
+				\ Opacity ParentalRelativity SaveUnder
+				\ SaveUnderOff WindowShadeShrinks
+				\ WindowShadeScrolls WindowShadeSteps
+				\ WindowShadeAlwaysLazy WindowShadeBusy
+				\ WindowShadeLazy EWMHDonateIcon
+				\ EWMHDontDonateIcon EWMHDonateMiniIcon
+				\ EWMHDontDonateMiniIcon EWMHMiniIconOverride
+				\ EWMHNoMiniIconOverride
+				\ EWMHUseStackingOrderHints
+				\ EWMHIgnoreStackingOrderHints
+				\ EWMHIgnoreStateHints EWMHUseStateHints
+				\ EWMHIgnoreStrutHints EWMHUseStrutHints
+				\ EWMHMaximizeIgnoreWorkingArea
+				\ EWMHMaximizeUseWorkingArea
+				\ EWMHMaximizeUseDynamicWorkingArea
+				\ EWMHPlacementIgnoreWorkingArea
+				\ EWMHPlacementUseWorkingArea
+				\ EWMHPlacementUseDynamicWorkingArea
+				\ MoveByProgramMethod Unmanaged State
+
+    " Cursor styles
+    syn keyword fvwmKeyword	nextgroup=fvwmCursorStyle skipwhite
+				\ CursorStyle
+    syn case match
+    syn keyword fvwmCursorStyle	contained
+				\ POSITION TITLE DEFAULT SYS MOVE RESIZE WAIT
+				\ MENU SELECT DESTROY TOP RIGHT BOTTOM LEFT
+				\ TOP_LEFT TOP_RIGHT BOTTOM_LEFT BOTTOM_RIGHT
+				\ TOP_EDGE RIGHT_EDGE BOTTOM_EDGE LEFT_EDGE
+				\ ROOT STROKE
+    syn case ignore
 
-    syn keyword fvwmConditionName	AcceptsFocus CurrentDesk CurrentGlobalPage
-    syn keyword fvwmConditionName	CurrentGlobalPageAnyDesk CurrentPage
-    syn keyword fvwmConditionName	CurrentPageAnyDesk CurrentScreen Iconic Layer
-    syn keyword fvwmConditionName	Maximized PlacedByButton3 PlacedByFvwm Raised
-    syn keyword fvwmConditionName	Shaded Sticky Transient Visible
+    " Menu style
+    syn keyword fvwmKeyword	nextgroup=fvwmMStyleArgs skipwhite
+				\ MenuStyle
+    syn region	fvwmMStyleArgs	contained transparent contains=fvwmMStyleNames,@fvwmConstants,fvwmString,fvwmGradient,fvwmRGBValue
+				\ start='.' skip='\\$' end='$'
+    syn keyword	fvwmMStyleNames	contained
+				\ Fvwm Mwm Win BorderWidth Foreground
+				\ Background Greyed HilightBack HilightBackOff
+				\ ActiveFore ActiveForeOff MenuColorset
+				\ ActiveColorset GreyedColorset Hilight3DThick
+				\ Hilight3DThin Hilight3DOff
+				\ Hilight3DThickness Animation AnimationOff
+				\ Font MenuFace PopupDelay PopupOffset
+				\ TitleWarp TitleWarpOff TitleUnderlines0
+				\ TitleUnderlines1 TitleUnderlines2
+				\ SeparatorsLong SeparatorsShort
+				\ TrianglesSolid TrianglesRelief
+				\ PopupImmediately PopupDelayed
+				\ PopdownImmediately PopdownDelayed
+				\ PopupActiveArea DoubleClickTime SidePic
+				\ SideColor PopupAsRootMenu PopupAsSubmenu
+				\ PopupIgnore PopupClose RemoveSubmenus
+				\ HoldSubmenus SubmenusRight SubmenusLeft
+				\ SelectOnRelease ItemFormat
+				\ VerticalItemSpacing VerticalTitleSpacing
+				\ AutomaticHotkeys AutomaticHotkeysOff
 
-    syn keyword fvwmContextName	BOTTOM BOTTOM_EDGE BOTTOM_LEFT BOTTOM_RIGHT
-    syn keyword fvwmContextName	DEFAULT DESTROY LEFT LEFT_EDGE MENU MOVE
-    syn keyword fvwmContextName	RESIZE RIGHT RIGHT_EDGE ROOT SELECT STROKE SYS
-    syn keyword fvwmContextName	TITLE TOP TOP_EDGE TOP_LEFT TOP_RIGHT WAIT
-    syn keyword fvwmContextName	POSITION
+    " Button style
+    syn keyword fvwmKeyword	nextgroup=fvwmBNum	skipwhite
+				\ ButtonStyle AddButtonStyle
+    syn match	fvwmBNum	contained
+				\ nextgroup=fvwmBState,fvwmBStyleArgs skipwhite 
+				\ '\v<([0-9]|All|Left|Right|Reset)>'
+    syn keyword	fvwmBState	contained nextgroup=fvwmBStyleArgs skipwhite
+				\ ActiveUp ActiveDown InactiveUp InactiveDown
+				\ Active Inactive ToggledActiveUp
+				\ ToggledActiveDown ToggledInactiveUp
+				\ ToggledInactiveDown ToggledActive
+				\ ToggledInactive AllNormal AllToggled
+				\ AllActive AllInactive AllUp AllDown
+    syn region	fvwmBStyleArgs	contained contains=fvwmBStyleFlags,fvwmBStyleNames,fvwmGradient,fvwmRGBValue,@fvwmConstants,fvwmString
+				\ start='\S' skip='\\$' end='$'
+    syn keyword	fvwmBStyleNames	contained
+				\ Simple Default Solid Colorset Vector Pixmap
+				\ AdjustedPixmap ShrunkPixmap StretchedPixmap
+				\ TiledPixmap MiniIcon
+    syn keyword fvwmBStyleFlags	contained
+				\ Raised Sunk Flat UseTitleStyle
+				\ UseBorderStyle
+
+    " Border style
+    syn keyword fvwmKeyword	skipwhite nextgroup=fvwmBdState,fvwmBdStyleArgs
+				\ BorderStyle
+    syn keyword	fvwmBdState	contained skipwhite nextgroup=fvwmBdStyleArgs
+				\ Active Inactive
+    syn region	fvwmBdStyleArgs	contained contains=fvwmBdStyNames,fvwmBdStyFlags
+				\ start='\S' skip='\\$' end='$'
+    syn keyword	fvwmBdStyNames	contained
+				\ TiledPixmap Colorset
+    syn keyword	fvwmBdStyFlags	contained
+				\ HiddenHandles NoInset Raised Sunk Flat
 
-    syn keyword fvwmFunctionName	contained FvwmAnimate FvwmAudio FvwmAuto
-    syn keyword fvwmFunctionName	contained FvwmBacker FvwmBanner FvwmButtons
-    syn keyword fvwmFunctionName	contained FvwmCascade FvwmCommandS
-    syn keyword fvwmFunctionName	contained FvwmConsole FvwmConsoleC FvwmCpp
-    syn keyword fvwmFunctionName	contained FvwmDebug FvwmDragWell FvwmEvent
-    syn keyword fvwmFunctionName	contained FvwmForm FvwmGtk FvwmIconBox
-    syn keyword fvwmFunctionName	contained FvwmIconMan FvwmIdent FvwmM4
-    syn keyword fvwmFunctionName	contained FvwmPager FvwmRearrange FvwmSave
-    syn keyword fvwmFunctionName	contained FvwmSaveDesk FvwmScript FvwmScroll
-    syn keyword fvwmFunctionName	contained FvwmTalk FvwmTaskBar FvwmTheme
-    syn keyword fvwmFunctionName	contained FvwmTile FvwmWharf FvwmWinList
+    " Title styles
+    syn keyword	fvwmKeyword	skipwhite nextgroup=fvwmTState,fvwmTStyleArgs
+				\ TitleStyle AddTitleStyle
+    syn keyword	fvwmTState	contained skipwhite nextgroup=fvwmTStyleArgs
+				\ ActiveUp ActiveDown InactiveUp InactiveDown
+				\ Active Inactive ToggledActiveUp
+				\ ToggledActiveDown ToggledInactiveUp
+				\ ToggledInactiveDown ToggledActive
+				\ ToggledInactive AllNormal AllToggled
+				\ AllActive AllInactive AllUp AllDown
+    syn region	fvwmTStyleArgs	contained contains=fvwmBStyleNames,fvwmTStyleNames,fvwmMPmapNames,fvwmTStyleFlags,fvwmGradient,fvwmRGBValue,@fvwmConstants
+				\ start='\S' skip='\\$' end='$'
+    syn keyword	fvwmTStyleNames	contained
+				\ MultiPixmap
+    syn keyword fvwmTStyleNames	contained
+				\ LeftJustified Centered RightJustified Height
+				\ MinHeight
+    syn keyword	fvwmMPmapNames	contained
+				\ Main LeftMain RightMain UnderText LeftOfText
+				\ RightOfText LeftEnd RightEnd Buttons
+				\ LeftButtons RightButtons
+    syn keyword	fvwmTStyleFlags	contained
+				\ Raised Flat Sunk
+
+    " Button state
+    syn keyword fvwmKeyword	nextgroup=fvwmBStateArgs
+				\ ButtonState
+    syn region	fvwmBStateArgs	contained contains=fvwmBStateTF,fvwmBStateNames
+				\ start='.' skip='\\$' end='$'
+    syn keyword	fvwmBStateNames	contained ActiveDown Inactive InactiveDown
+    syn keyword fvwmBStateTF	contained True False
+
+    " Paths
+    syn keyword fvwmKeyword	nextgroup=fvwmPath	skipwhite
+				\ IconPath ImagePath LocalePath PixmapPath
+				\ ModulePath 
+    syn match	fvwmPath	contained contains=fvwmEnvVar '\v.+$'
 
-    syn keyword fvwmFunctionName	StartFunction InitFunction RestartFunction
-    syn keyword fvwmFunctionName	ExitFunction SessionInitFunction
-    syn keyword fvwmFunctionName	SessionRestartFunction SessionExitFunction
-    syn keyword fvwmFunctionName	MissingSubmenuFunction
+    " Window list command
+    syn keyword fvwmKeyword	nextgroup=fvwmWLArgs skipwhite
+				\ WindowList
+    syn region	fvwmWLArgs	contained
+		\ contains=fvwmCondition,@fvwmConstants,fvwmString,fvwmWLOpts
+		\ start='.' skip='\\$' end='$'
+    syn keyword fvwmWLOpts	contained
+				\ Geometry NoGeometry NoGeometryWithInfo
+				\ NoDeskNum NoNumInDeskTitle
+				\ NoCurrentDeskTitle MaxLabelWidth width
+				\ TitleForAllDesks Function funcname Desk
+				\ desknum CurrentDesk NoIcons Icons OnlyIcons
+				\ NoNormal Normal OnlyNormal NoSticky Sticky
+				\ OnlySticky NoStickyAcrossPages
+				\ StickyAcrossPages OnlyStickyAcrossPages
+				\ NoStickyAcrossDesks StickyAcrossDesks
+				\ OnlyStickyAcrossDesks NoOnTop OnTop
+				\ OnlyOnTop NoOnBottom OnBottom OnlyOnBottom
+				\ Layer UseListSkip OnlyListSkip NoDeskSort
+				\ ReverseOrder CurrentAtEnd IconifiedAtEnd
+				\ UseIconName Alphabetic NotAlphabetic
+				\ SortByResource SortByClass NoHotkeys
+				\ SelectOnRelease
+
+    syn keyword fvwmSpecialFn	StartFunction InitFunction RestartFunction
+				\ ExitFunction SessionInitFunction
+				\ SessionRestartFunction SessionExitFunction
+				\ MissingSubmenuFunction WindowListFunc
+
+    syn keyword fvwmKeyword	skipwhite nextgroup=fvwmKeyWin,fvwmKeyName
+				\ Key PointerKey
+    syn region	fvwmKeyWin	contained skipwhite nextgroup=fvwmKeyName
+				\ start='(' end=')'
+    syn case match
+    syn match	fvwmKeyName	contained skipwhite nextgroup=fvwmKeyContext
+				\ '\v<([a-zA-Z0-9]|F\d+|KP_\d)>'
+    syn keyword fvwmKeyName	contained skipwhite nextgroup=fvwmKeyContext
+				\ BackSpace Begin Break Cancel Clear Delete
+				\ Down End Escape Execute Find Help Home
+				\ Insert KP_Add KP_Begin KP_Decimal KP_Delete
+				\ KP_Divide KP_Down KP_End KP_Enter KP_Equal
+				\ KP_Home KP_Insert KP_Left KP_Multiply
+				\ KP_Next KP_Page_Down KP_Page_Up KP_Prior
+				\ KP_Right KP_Separator KP_Space KP_Subtract
+				\ KP_Tab KP_Up Left Linefeed Menu Mode_switch
+				\ Next Num_Lock Page_Down Page_Up Pause Print
+				\ Prior Redo Return Right script_switch
+				\ Scroll_Lock Select Sys_Req Tab Undo Up space
+				\ exclam quotedbl numbersign dollar percent
+				\ ampersand apostrophe quoteright parenleft
+				\ parenright asterisk plus comma minus period
+				\ slash colon semicolon less equal greater
+				\ question at bracketleft backslash
+				\ bracketright asciicircum underscore grave
+				\ quoteleft braceleft bar braceright
+				\ asciitilde
+
+    syn match	fvwmKeyContext	contained skipwhite nextgroup=fvwmKeyMods
+				\ '\v<[][RWDTS_F<^>vI0-9AM-]+>'
+    syn match	fvwmKeyMods	contained '\v[NCSMLA1-5]+'
+    syn case ignore
+
+    syn keyword	fvwmKeyword	skipwhite nextgroup=fvwmMouseWin,fvwmMouseButton
+				\ Mouse
+    syn region	fvwmMouseWin	contained skipwhite nextgroup=fvwmMouseButton
+				\ start='(' end=')'
+    syn match	fvwmMouseButton	contained skipwhite nextgroup=fvwmKeyContext
+				\ '[0-5]'
 endif
 
-if version >= 508 || !exists("did_fvwm_syntax_inits")
-    if version < 508
-	let did_fvwm_syntax_inits = 1
-	command -nargs=+ HiLink hi link <args>
-    else
-	command -nargs=+ HiLink hi def link <args>
-    endif
+" Define syntax highlighting groups
+
+"
+" Common highlighting groups
+"
+hi def link fvwmComment		Comment
+hi def link fvwmEnvVar		Macro
+hi def link fvwmNumber		Number
+hi def link fvwmKeyword		Keyword
+hi def link fvwmPath		Constant
+hi def link fvwmModConf		Macro
+hi def link fvwmRGBValue	Constant
+hi def link fvwmString		String
+hi def link fvwmBackslash	SpecialChar
+
+
+"
+" Highlighting groups for fvwm1 specific items
+"
+hi def link fvwmExec		fvwmKeyword
+hi def link fvwmKey		fvwmKeyword
+hi def link fvwmModule		fvwmKeyword
+hi def link fvwmFunction	Function
 
-    HiLink fvwmComment		Comment
-    HiLink fvwmEnvVar		Macro
-    HiLink fvwmExec		Function
-    HiLink fvwmFunction		Function
-    HiLink fvwmFunctionName	Special
-    HiLink fvwmContextName	Function
-    HiLink fvwmConditionName	Function
-    HiLink fvwmIcon		Comment
-    HiLink fvwmKey		Function
-    HiLink fvwmKeyword		Keyword
-    HiLink fvwmMenuString	String
-    HiLink fvwmModConf		Macro
-    HiLink fvwmModule		Function
-    HiLink fvwmModuleName	Special
-    HiLink fvwmRGBValue		Type
-    HiLink fvwmShortcutKey	SpecialChar
-    HiLink fvwmString		String
+"
+" Highlighting groups for fvwm2 specific items
+"
+hi def link fvwmSpecialFn	Type
+hi def link fvwmCursorStyle	fvwmStyleNames
+hi def link fvwmStyleNames	Identifier
+hi def link fvwmMStyleNames	fvwmStyleNames
+hi def link fvwmCSNames		fvwmStyleNames
+hi def link fvwmGradient	fvwmStyleNames
+hi def link fvwmCondNames	fvwmStyleNames
+hi def link fvwmTCNames		fvwmStyleNames
+hi def link fvwmTRNames		fvwmStyleNames
+hi def link fvwmWLOpts		fvwmStyleNames
+
+hi def link fvwmBNum		Number
+hi def link fvwmBState		Type
+hi def link fvwmBStyleNames	fvwmStyleNames
+hi def link fvwmBStyleFlags	Special
+
+hi def link fvwmBStateTF	Constant
+hi def link fvwmBStateNames	fvwmStyleNames
 
-    if exists("rgb_file")
-	HiLink fvwmColors	Type
-    endif
+hi def link fvwmBdState		fvwmBState
+hi def link fvwmBdStyNames	fvwmStyleNames
+hi def link fvwmBdStyFlags	fvwmBStyleFlags
+
+hi def link fvwmTState		fvwmBState
+hi def link fvwmTStyleNames	fvwmStyleNames
+hi def link fvwmMPmapNames	fvwmBStyleFlags
+hi def link fvwmTStyleFlags	fvwmBStyleFlags
+
+hi def link fvwmDirection	fvwmBStyleFlags
 
-    delcommand HiLink
-endif
+hi def link fvwmKeyWin		Constant
+hi def link fvwmMouseWin	fvwmKeyWin
+hi def link fvwmKeyName		Special
+hi def link fvwmKeyContext	fvwmKeyName
+hi def link fvwmKeyMods		fvwmKeyName
+hi def link fvwmMouseButton	fvwmKeyName
+
+hi def link fvwmMenuString	String
+hi def link fvwmIcon		Type
+hi def link fvwmShortcutKey	SpecialChar
+
+hi def link fvwmModuleName	Function
 
 let b:current_syntax = "fvwm"
-" vim: sts=4 sw=4 ts=8
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/hamster.vim
@@ -0,0 +1,382 @@
+" Vim syntax file
+" Language:    Hamster Scripting Language
+" Maintainer:  David Fishburn <fishburn@ianywhere.com>
+" Last Change: Sun Oct 24 2004 7:11:50 PM
+" Version:     2.0.6.0
+
+" Description: Hamster Classic
+" Hamster is a local server for news and mail. It's a windows-32-bit-program.
+" It allows the use of multiple news- and mailserver and combines them to one
+" mail- and newsserver for the news/mail-client. It load faster than a normal
+" newsreader because many threads can run simultaneous. It contains scorefile
+" for news and mail, a build-in script language, the GUI allows translation to
+" other languages, it can be used in a network and that's not all features...
+"
+" 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 case ignore
+
+syn keyword hamsterSpecial abs
+syn keyword hamsterSpecial artaddheader
+syn keyword hamsterSpecial artalloc
+syn keyword hamsterSpecial artdelheader
+syn keyword hamsterSpecial artfree
+syn keyword hamsterSpecial artgetbody
+syn keyword hamsterSpecial artgetheader
+syn keyword hamsterSpecial artgetheaders
+syn keyword hamsterSpecial artgettext
+syn keyword hamsterSpecial artheaderexists
+syn keyword hamsterSpecial artload
+syn keyword hamsterSpecial artsave
+syn keyword hamsterSpecial artsetbody
+syn keyword hamsterSpecial artsetheader
+syn keyword hamsterSpecial artsetheaders
+syn keyword hamsterSpecial artsettext
+syn keyword hamsterSpecial assert
+syn keyword hamsterSpecial atadd
+syn keyword hamsterSpecial atclear
+syn keyword hamsterSpecial atcount
+syn keyword hamsterSpecial ateverymins
+syn keyword hamsterSpecial atexecute
+syn keyword hamsterSpecial atfrom
+syn keyword hamsterSpecial atondays
+syn keyword hamsterSpecial atsubfunction
+syn keyword hamsterSpecial atuntil
+syn keyword hamsterSpecial beep
+syn keyword hamsterSpecial break
+syn keyword hamsterSpecial chr
+syn keyword hamsterSpecial clearxcounter
+syn keyword hamsterSpecial clipread
+syn keyword hamsterSpecial clipwrite
+syn keyword hamsterSpecial const
+syn keyword hamsterSpecial constenum
+syn keyword hamsterSpecial continue
+syn keyword hamsterSpecial copy
+syn keyword hamsterSpecial debug
+syn keyword hamsterSpecial dec
+syn keyword hamsterSpecial decodebase64
+syn keyword hamsterSpecial decodeqp
+syn keyword hamsterSpecial decodetime
+syn keyword hamsterSpecial decxcounter
+syn keyword hamsterSpecial delete
+syn keyword hamsterSpecial deletehostsentry
+syn keyword hamsterSpecial digest
+syn keyword hamsterSpecial dirchange
+syn keyword hamsterSpecial dircurrent
+syn keyword hamsterSpecial direxists
+syn keyword hamsterSpecial dirmake
+syn keyword hamsterSpecial dirremove
+syn keyword hamsterSpecial dirsystem
+syn keyword hamsterSpecial dirwindows
+syn keyword hamsterSpecial diskfreekb
+syn keyword hamsterSpecial dllcall
+syn keyword hamsterSpecial dllfree
+syn keyword hamsterSpecial dlllasterror
+syn keyword hamsterSpecial dllload
+syn keyword hamsterSpecial dump
+syn keyword hamsterSpecial encodetime
+syn keyword hamsterSpecial entercontext
+syn keyword hamsterSpecial errcatch
+syn keyword hamsterSpecial errline
+syn keyword hamsterSpecial errlineno
+syn keyword hamsterSpecial errmodule
+syn keyword hamsterSpecial errmsg
+syn keyword hamsterSpecial errnum
+syn keyword hamsterSpecial error
+syn keyword hamsterSpecial errsender
+syn keyword hamsterSpecial eval
+syn keyword hamsterSpecial eventclose
+syn keyword hamsterSpecial eventcreate
+syn keyword hamsterSpecial eventmultiplewait
+syn keyword hamsterSpecial eventpulse
+syn keyword hamsterSpecial eventreset
+syn keyword hamsterSpecial eventset
+syn keyword hamsterSpecial eventwait
+syn keyword hamsterSpecial execute
+syn keyword hamsterSpecial false
+syn keyword hamsterSpecial filecopy
+syn keyword hamsterSpecial filedelete
+syn keyword hamsterSpecial fileexists
+syn keyword hamsterSpecial filemove
+syn keyword hamsterSpecial filerename
+syn keyword hamsterSpecial filesize
+syn keyword hamsterSpecial filetime
+syn keyword hamsterSpecial getenv
+syn keyword hamsterSpecial getprocessidentifier
+syn keyword hamsterSpecial getuptimedays
+syn keyword hamsterSpecial getuptimehours
+syn keyword hamsterSpecial getuptimemins
+syn keyword hamsterSpecial getuptimesecs
+syn keyword hamsterSpecial gosub
+syn keyword hamsterSpecial goto
+syn keyword hamsterSpecial hex
+syn keyword hamsterSpecial icase
+syn keyword hamsterSpecial iif
+syn keyword hamsterSpecial inc
+syn keyword hamsterSpecial incxcounter
+syn keyword hamsterSpecial inidelete
+syn keyword hamsterSpecial inierasesection
+syn keyword hamsterSpecial iniread
+syn keyword hamsterSpecial iniwrite
+syn keyword hamsterSpecial inputbox
+syn keyword hamsterSpecial inputpw
+syn keyword hamsterSpecial int
+syn keyword hamsterSpecial isint
+syn keyword hamsterSpecial isstr
+syn keyword hamsterSpecial leavecontext
+syn keyword hamsterSpecial len
+syn keyword hamsterSpecial listadd
+syn keyword hamsterSpecial listalloc
+syn keyword hamsterSpecial listappend
+syn keyword hamsterSpecial listbox
+syn keyword hamsterSpecial listclear
+syn keyword hamsterSpecial listcount
+syn keyword hamsterSpecial listdelete
+syn keyword hamsterSpecial listdirs
+syn keyword hamsterSpecial listexists
+syn keyword hamsterSpecial listfiles
+syn keyword hamsterSpecial listfiles
+syn keyword hamsterSpecial listfree
+syn keyword hamsterSpecial listget
+syn keyword hamsterSpecial listgetkey
+syn keyword hamsterSpecial listgettag
+syn keyword hamsterSpecial listgettext
+syn keyword hamsterSpecial listindexof
+syn keyword hamsterSpecial listinsert
+syn keyword hamsterSpecial listload
+syn keyword hamsterSpecial listrasentries
+syn keyword hamsterSpecial listsave
+syn keyword hamsterSpecial listset
+syn keyword hamsterSpecial listsetkey
+syn keyword hamsterSpecial listsettag
+syn keyword hamsterSpecial listsettext
+syn keyword hamsterSpecial listsort
+syn keyword hamsterSpecial localhostaddr
+syn keyword hamsterSpecial localhostname
+syn keyword hamsterSpecial lookuphostaddr
+syn keyword hamsterSpecial lookuphostname
+syn keyword hamsterSpecial lowercase
+syn keyword hamsterSpecial memalloc
+syn keyword hamsterSpecial memforget
+syn keyword hamsterSpecial memfree
+syn keyword hamsterSpecial memgetint
+syn keyword hamsterSpecial memgetstr
+syn keyword hamsterSpecial memsetint
+syn keyword hamsterSpecial memsetstr
+syn keyword hamsterSpecial memsize
+syn keyword hamsterSpecial memvarptr
+syn keyword hamsterSpecial msgbox
+syn keyword hamsterSpecial ord
+syn keyword hamsterSpecial paramcount
+syn keyword hamsterSpecial paramstr
+syn keyword hamsterSpecial popupbox
+syn keyword hamsterSpecial pos
+syn keyword hamsterSpecial print
+syn keyword hamsterSpecial quit
+syn keyword hamsterSpecial random
+syn keyword hamsterSpecial randomize
+syn keyword hamsterSpecial rasdial
+syn keyword hamsterSpecial rasgetconnection
+syn keyword hamsterSpecial rasgetip
+syn keyword hamsterSpecial rashangup
+syn keyword hamsterSpecial rasisconnected
+syn keyword hamsterSpecial re_extract
+syn keyword hamsterSpecial re_match
+syn keyword hamsterSpecial re_parse
+syn keyword hamsterSpecial re_split
+syn keyword hamsterSpecial replace
+syn keyword hamsterSpecial return
+syn keyword hamsterSpecial runscript
+syn keyword hamsterSpecial scriptpriority
+syn keyword hamsterSpecial set
+syn keyword hamsterSpecial sethostsentry_byaddr
+syn keyword hamsterSpecial sethostsentry_byname
+syn keyword hamsterSpecial setxcounter
+syn keyword hamsterSpecial sgn
+syn keyword hamsterSpecial shell
+syn keyword hamsterSpecial sleep
+syn keyword hamsterSpecial stopthread
+syn keyword hamsterSpecial str
+syn keyword hamsterSpecial syserrormessage
+syn keyword hamsterSpecial testmailfilterline
+syn keyword hamsterSpecial testnewsfilterline
+syn keyword hamsterSpecial ticks
+syn keyword hamsterSpecial time
+syn keyword hamsterSpecial timegmt
+syn keyword hamsterSpecial trace
+syn keyword hamsterSpecial trim
+syn keyword hamsterSpecial true
+syn keyword hamsterSpecial uppercase
+syn keyword hamsterSpecial utf7toucs16
+syn keyword hamsterSpecial utf8toucs32
+syn keyword hamsterSpecial var
+syn keyword hamsterSpecial varset
+syn keyword hamsterSpecial warning
+syn keyword hamsterSpecial xcounter
+
+" common functions
+syn keyword hamsterFunction addlog
+syn keyword hamsterFunction decodemimeheaderstring
+syn keyword hamsterFunction decodetolocalcharset
+syn keyword hamsterFunction gettasksactive
+syn keyword hamsterFunction gettasksrun
+syn keyword hamsterFunction gettaskswait
+syn keyword hamsterFunction hamaddgroup
+syn keyword hamsterFunction hamaddlog
+syn keyword hamsterFunction hamaddpull
+syn keyword hamsterFunction hamartcount
+syn keyword hamsterFunction hamartdeletemid
+syn keyword hamsterFunction hamartdeletemidingroup
+syn keyword hamsterFunction hamartdeletenringroup
+syn keyword hamsterFunction hamartimport
+syn keyword hamsterFunction hamartlocatemid
+syn keyword hamsterFunction hamartlocatemidingroup
+syn keyword hamsterFunction hamartnomax
+syn keyword hamsterFunction hamartnomin
+syn keyword hamsterFunction hamarttext
+syn keyword hamsterFunction hamarttextexport
+syn keyword hamsterFunction hamchangepassword
+syn keyword hamsterFunction hamcheckpurge
+syn keyword hamsterFunction hamdelgroup
+syn keyword hamsterFunction hamdelpull
+syn keyword hamsterFunction hamdialogaddpull
+syn keyword hamsterFunction hamdialogeditdirs
+syn keyword hamsterFunction hamdialogmailkillfilelog
+syn keyword hamsterFunction hamdialognewskillfilelog
+syn keyword hamsterFunction hamdialogscripts
+syn keyword hamsterFunction hamenvelopefrom
+syn keyword hamsterFunction hamexepath
+syn keyword hamsterFunction hamfetchmail
+syn keyword hamsterFunction hamflush
+syn keyword hamsterFunction hamgetstatus
+syn keyword hamsterFunction hamgroupclose
+syn keyword hamsterFunction hamgroupcount
+syn keyword hamsterFunction hamgroupindex
+syn keyword hamsterFunction hamgroupname
+syn keyword hamsterFunction hamgroupnamebyhandle
+syn keyword hamsterFunction hamgroupopen
+syn keyword hamsterFunction hamgroupspath
+syn keyword hamsterFunction hamhscpath
+syn keyword hamsterFunction hamhsmpath
+syn keyword hamsterFunction hamimapserver
+syn keyword hamsterFunction hamisidle
+syn keyword hamsterFunction hamlogspath
+syn keyword hamsterFunction hammailexchange
+syn keyword hamsterFunction hammailpath
+syn keyword hamsterFunction hammailsoutpath
+syn keyword hamsterFunction hammainfqdn
+syn keyword hamsterFunction hammainwindow
+syn keyword hamsterFunction hammessage
+syn keyword hamsterFunction hammidfqdn
+syn keyword hamsterFunction hamnewmail
+syn keyword hamsterFunction hamnewserrpath
+syn keyword hamsterFunction hamnewsjobsadd
+syn keyword hamsterFunction hamnewsjobscheckactive
+syn keyword hamsterFunction hamnewsjobsclear
+syn keyword hamsterFunction hamnewsjobsdelete
+syn keyword hamsterFunction hamnewsjobsfeed
+syn keyword hamsterFunction hamnewsjobsgetcounter
+syn keyword hamsterFunction hamnewsjobsgetparam
+syn keyword hamsterFunction hamnewsjobsgetpriority
+syn keyword hamsterFunction hamnewsjobsgetserver
+syn keyword hamsterFunction hamnewsjobsgettype
+syn keyword hamsterFunction hamnewsjobspost
+syn keyword hamsterFunction hamnewsjobspostdef
+syn keyword hamsterFunction hamnewsjobspull
+syn keyword hamsterFunction hamnewsjobspulldef
+syn keyword hamsterFunction hamnewsjobssetpriority
+syn keyword hamsterFunction hamnewsjobsstart
+syn keyword hamsterFunction hamnewsoutpath
+syn keyword hamsterFunction hamnewspost
+syn keyword hamsterFunction hamnewspull
+syn keyword hamsterFunction hamnntpserver
+syn keyword hamsterFunction hampassreload
+syn keyword hamsterFunction hampath
+syn keyword hamsterFunction hampop3server
+syn keyword hamsterFunction hampostmaster
+syn keyword hamsterFunction hampurge
+syn keyword hamsterFunction hamrasdial
+syn keyword hamsterFunction hamrashangup
+syn keyword hamsterFunction hamrcpath
+syn keyword hamsterFunction hamrebuildgloballists
+syn keyword hamsterFunction hamrebuildhistory
+syn keyword hamsterFunction hamrecoserver
+syn keyword hamsterFunction hamreloadconfig
+syn keyword hamsterFunction hamreloadipaccess
+syn keyword hamsterFunction hamresetcounters
+syn keyword hamsterFunction hamrotatelog
+syn keyword hamsterFunction hamscorelist
+syn keyword hamsterFunction hamscoretest
+syn keyword hamsterFunction hamsendmail
+syn keyword hamsterFunction hamsendmailauth
+syn keyword hamsterFunction hamserverpath
+syn keyword hamsterFunction hamsetlogin
+syn keyword hamsterFunction hamshutdown
+syn keyword hamsterFunction hamsmtpserver
+syn keyword hamsterFunction hamstopalltasks
+syn keyword hamsterFunction hamthreadcount
+syn keyword hamsterFunction hamtrayicon
+syn keyword hamsterFunction hamusenetacc
+syn keyword hamsterFunction hamversion
+syn keyword hamsterFunction hamwaitidle
+syn keyword hamsterFunction raslasterror
+syn keyword hamsterFunction rfctimezone
+syn keyword hamsterFunction settasklimiter
+
+syn keyword hamsterStatement if
+syn keyword hamsterStatement else
+syn keyword hamsterStatement elseif
+syn keyword hamsterStatement endif
+syn keyword hamsterStatement do
+syn keyword hamsterStatement loop
+syn keyword hamsterStatement while
+syn keyword hamsterStatement endwhile
+syn keyword hamsterStatement repeat
+syn keyword hamsterStatement until
+syn keyword hamsterStatement for
+syn keyword hamsterStatement endfor
+syn keyword hamsterStatement sub
+syn keyword hamsterStatement endsub
+syn keyword hamsterStatement label
+
+
+" Strings and characters:
+syn region hamsterString	start=+"+    end=+"+ contains=@Spell
+syn region hamsterString	start=+'+    end=+'+ contains=@Spell
+
+" Numbers:
+syn match hamsterNumber		"-\=\<\d*\.\=[0-9_]\>"
+
+" Comments:
+syn region hamsterHashComment	start=/#/ end=/$/ contains=@Spell
+syn cluster hamsterComment	contains=hamsterHashComment
+syn sync ccomment hamsterHashComment
+
+" Define the default highlighting.
+" 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_hamster_syn_inits")
+    if version < 508
+        let did_hamster_syn_inits = 1
+        command -nargs=+ HiLink hi link <args>
+    else
+        command -nargs=+ HiLink hi def link <args>
+    endif
+
+    HiLink hamsterHashComment	Comment
+    HiLink hamsterSpecial	Special
+    HiLink hamsterStatement	Statement
+    HiLink hamsterString	String
+    HiLink hamsterFunction	Function
+
+    delcommand HiLink
+endif
+
+let b:current_syntax = "hamster"
+
+" vim:sw=4
--- a/runtime/syntax/ia64.vim
+++ b/runtime/syntax/ia64.vim
@@ -4,7 +4,7 @@
 " URL:		http://www.geocities.com/pmalwankar (Home Page with link to my Vim page)
 "		http://www.geocities.com/pmalwankar/vim.htm (for VIM)
 " File Version: 0.7
-" Last Change:  2004 May 04
+" Last Change:  2006 Sep 08
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -309,4 +309,3 @@ endif
 let b:current_syntax = "ia64"
 
 " vim: ts=8 sw=2
-
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/ibasic.vim
@@ -0,0 +1,176 @@
+" Vim syntax file
+" Language:	ibasic
+" Maintainer:	Mark Manning <markem@airmail.net>
+" Originator:	Allan Kelly <Allan.Kelly@ed.ac.uk>
+" Created:	10/1/2006
+" Updated:	10/21/2006
+" Description:  A vim file to handle the IBasic file format.
+" Notes:
+"	Updated by Mark Manning <markem@airmail.net>
+"	Applied IBasic support to the already excellent support for standard
+"	basic syntax (like QB).
+"
+"	First version based on Micro$soft QBASIC circa 1989, as documented in
+"	'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
+"	This syntax file not a complete implementation yet.
+"	Send suggestions to the maintainer.
+"
+"	This version is based upon the commands found in IBasic (www.pyxia.com).
+"	MEM 10/6/2006
+"
+"	Quit when a (custom) syntax file was already loaded (Taken from c.vim)
+"
+if exists("b:current_syntax")
+  finish
+endif
+"
+"	Be sure to turn on the "case ignore" since current versions of basic
+"	support both upper as well as lowercase letters.
+"
+syn case ignore
+"
+" A bunch of useful BASIC keywords
+"
+syn keyword ibasicStatement	beep bload bsave call absolute chain chdir circle
+syn keyword ibasicStatement	clear close cls color com common const data
+syn keyword ibasicStatement	loop draw end environ erase error exit field
+syn keyword ibasicStatement	files function get gosub goto
+syn keyword ibasicStatement	input input# ioctl key kill let line locate
+syn keyword ibasicStatement	lock unlock lprint using lset mkdir name
+syn keyword ibasicStatement	on error open option base out paint palette pcopy
+syn keyword ibasicStatement	pen play pmap poke preset print print# using pset
+syn keyword ibasicStatement	put randomize read redim reset restore resume
+syn keyword ibasicStatement	return rmdir rset run seek screen
+syn keyword ibasicStatement	shared shell sleep sound static stop strig sub
+syn keyword ibasicStatement	swap system timer troff tron type unlock
+syn keyword ibasicStatement	view wait width window write
+syn keyword ibasicStatement	date$ mid$ time$
+"
+"	Do the basic variables names first.  This is because it
+"	is the most inclusive of the tests.  Later on we change
+"	this so the identifiers are split up into the various
+"	types of identifiers like functions, basic commands and
+"	such. MEM 9/9/2006
+"
+syn match	ibasicIdentifier			"\<[a-zA-Z_][a-zA-Z0-9_]*\>"
+syn match	ibasicGenericFunction	"\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1
+"
+"	Function list
+"
+syn keyword ibasicBuiltInFunction	abs asc atn cdbl cint clng cos csng csrlin cvd cvdmbf
+syn keyword ibasicBuiltInFunction	cvi cvl cvs cvsmbf eof erdev erl err exp fileattr
+syn keyword ibasicBuiltInFunction	fix fre freefile inp instr lbound len loc lof
+syn keyword ibasicBuiltInFunction	log lpos mod peek pen point pos rnd sadd screen seek
+syn keyword ibasicBuiltInFunction	setmem sgn sin spc sqr stick strig tab tan ubound
+syn keyword ibasicBuiltInFunction	val valptr valseg varptr varseg
+syn keyword ibasicBuiltInFunction	chr\$ command$ date$ environ$ erdev$ hex$ inkey$
+syn keyword ibasicBuiltInFunction	input$ ioctl$ lcases$ laft$ ltrim$ mid$ mkdmbf$ mkd$
+syn keyword ibasicBuiltInFunction	mki$ mkl$ mksmbf$ mks$ oct$ right$ rtrim$ space$
+syn keyword ibasicBuiltInFunction	str$ string$ time$ ucase$ varptr$
+syn keyword ibasicTodo contained	TODO
+syn cluster	ibasicFunctionCluster	contains=ibasicBuiltInFunction,ibasicGenericFunction
+
+syn keyword Conditional	if else then elseif endif select case endselect
+syn keyword Repeat	for do while next enddo endwhile wend
+
+syn keyword ibasicTypeSpecifier	single double defdbl defsng
+syn keyword ibasicTypeSpecifier	int integer uint uinteger int64 uint64 defint deflng
+syn keyword ibasicTypeSpecifier	byte char string istring defstr
+syn keyword ibasicDefine	dim def declare
+"
+"catch errors caused by wrong parenthesis
+"
+syn cluster	ibasicParenGroup	contains=ibasicParenError,ibasicIncluded,ibasicSpecial,ibasicTodo,ibasicUserCont,ibasicUserLabel,ibasicBitField
+syn region	ibasicParen		transparent start='(' end=')' contains=ALLBUT,@bParenGroup
+syn match	ibasicParenError	")"
+syn match	ibasicInParen	contained "[{}]"
+"
+"integer number, or floating point number without a dot and with "f".
+"
+syn region	ibasicHex		start="&h" end="\W"
+syn region	ibasicHexError	start="&h\x*[g-zG-Z]" end="\W"
+syn match	ibasicInteger	"\<\d\+\(u\=l\=\|lu\|f\)\>"
+"
+"floating point number, with dot, optional exponent
+"
+syn match	ibasicFloat		"\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
+"
+"floating point number, starting with a dot, optional exponent
+"
+syn match	ibasicFloat		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+"
+"floating point number, without dot, with exponent
+"
+syn match	ibasicFloat		"\<\d\+e[-+]\=\d\+[fl]\=\>"
+"
+"hex number
+"
+syn match	ibasicIdentifier	"\<[a-zA-Z_][a-zA-Z0-9_]*\>"
+syn match	ibasicFunction	"\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1
+syn case match
+syn match	ibasicOctalError	"\<0\o*[89]"
+"
+" String and Character contstants
+"
+syn region	ibasicString		start='"' end='"' contains=ibasicSpecial,ibasicTodo
+syn region	ibasicString		start="'" end="'" contains=ibasicSpecial,ibasicTodo
+"
+"	Comments
+"
+syn match	ibasicSpecial	contained "\\."
+syn region  ibasicComment	start="^rem" end="$" contains=ibasicSpecial,ibasicTodo
+syn region  ibasicComment	start=":\s*rem" end="$" contains=ibasicSpecial,ibasicTodo
+syn region	ibasicComment	start="\s*'" end="$" contains=ibasicSpecial,ibasicTodo
+syn region	ibasicComment	start="^'" end="$" contains=ibasicSpecial,ibasicTodo
+"
+"	Now do the comments and labels
+"
+syn match	ibasicLabel		"^\d"
+syn region  ibasicLineNumber	start="^\d" end="\s"
+"
+"	Pre-compiler options : FreeBasic
+"
+syn region	ibasicPreCondit	start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=ibasicString,ibasicCharacter,ibasicNumber,ibasicCommentError,ibasicSpaceError
+syn match	ibasicInclude	"^\s*#\s*include\s*"
+"
+"	Create the clusters
+"
+syn cluster ibasicNumber contains=ibasicHex,ibasicInteger,ibasicFloat
+syn cluster	ibasicError	contains=ibasicHexError
+"
+"	Used with OPEN statement
+"
+syn match   ibasicFilenumber  "#\d\+"
+"
+"syn sync ccomment ibasicComment
+"
+syn match	ibasicMathOperator	"[\+\-\=\|\*\/\>\<\%\()[\]]" contains=ibasicParen
+"
+" The default methods for highlighting.  Can be overridden later
+"
+hi def link ibasicLabel			Label
+hi def link ibasicConditional		Conditional
+hi def link ibasicRepeat		Repeat
+hi def link ibasicHex			Number
+hi def link ibasicInteger		Number
+hi def link ibasicFloat			Number
+hi def link ibasicError			Error
+hi def link ibasicHexError		Error
+hi def link ibasicStatement		Statement
+hi def link ibasicString		String
+hi def link ibasicComment		Comment
+hi def link ibasicLineNumber		Comment
+hi def link ibasicSpecial		Special
+hi def link ibasicTodo			Todo
+hi def link ibasicGenericFunction	Function
+hi def link ibasicBuiltInFunction	Function
+hi def link ibasicTypeSpecifier		Type
+hi def link ibasicDefine		Type
+hi def link ibasicInclude		Include
+hi def link ibasicIdentifier		Identifier
+hi def link ibasicFilenumber		ibasicTypeSpecifier
+hi def link ibasicMathOperator		Operator
+
+let b:current_syntax = "ibasic"
+
+" vim: ts=8
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/initng.vim
@@ -0,0 +1,91 @@
+" Vim syntax file
+" Language:	initng .i files
+" Maintainer:	Elan Ruusamäe <glen@pld-linux.org>
+" URL:		http://glen.alkohol.ee/pld/initng/
+" License:	GPL v2
+" Version:	0.13
+" Last Change:	$Date$
+"
+" 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.
+
+if &compatible || v:version < 603
+	finish
+endif
+
+if exists("b:current_syntax")
+	finish
+endif
+
+syn case match
+
+let is_bash = 1
+unlet! b:current_syntax
+syn include @shTop syntax/sh.vim
+
+syn region	initngService			matchgroup=initngServiceHeader start="^\s*\(service\|virtual\|daemon\|class\|cron\)\s\+\(\(\w\|[-/*]\)\+\(\s\+:\s\+\(\w\|[-/*]\)\+\)\?\)\s\+{" end="}" contains=@initngServiceCluster
+syn cluster initngServiceCluster	contains=initngComment,initngAction,initngServiceOption,initngServiceHeader,initngDelim,initngVariable
+
+syn region	initngAction			matchgroup=initngActionHeader start="^\s*\(script start\|script stop\|script run\)\s*=\s*{" end="}" contains=@initngActionCluster
+syn cluster initngActionCluster		contains=@shTop
+
+syn match	initngDelim				/[{}]/	contained
+
+syn region	initngString			start=/"/ end=/"/ skip=/\\"/
+
+" option = value
+syn match	initngServiceOption		/.\+\s*=.\+;/ contains=initngServiceKeywords,initngSubstMacro contained
+" option without value
+syn match	initngServiceOption		/\w\+;/ contains=initngServiceKeywords,initngSubstMacro contained
+
+" options with value
+syn keyword	initngServiceKeywords	also_stop need use nice setuid contained
+syn keyword	initngServiceKeywords	delay chdir suid sgid start_pause env_file env_parse pid_file pidfile contained
+syn keyword	initngServiceKeywords	pid_of up_when_pid_set stdout stderr syncron just_before contained
+syn keyword	initngServiceKeywords	provide lockfile daemon_stops_badly contained
+syn match	initngServiceKeywords	/\(script\|exec\(_args\)\?\) \(start\|stop\|daemon\)/ contained
+syn match	initngServiceKeywords	/env\s\+\w\+/ contained
+
+" rlimits
+syn keyword	initngServiceKeywords	rlimit_cpu_hard rlimit_core_soft contained
+
+" single options
+syn keyword	initngServiceKeywords	last respawn network_provider require_network require_file critical forks contained
+" cron options
+syn keyword	initngServiceKeywords	hourly contained
+syn match	initngVariable			/\${\?\w\+\}\?/
+
+" Substituted @foo@ macros:
+" ==========
+syn match	initngSubstMacro		/@[^@]\+@/	contained
+syn cluster initngActionCluster		add=initngSubstMacro
+syn cluster shCommandSubList		add=initngSubstMacro
+
+" Comments:
+" ==========
+syn cluster	initngCommentGroup		contains=initngTodo,@Spell
+syn keyword	initngTodo				TODO FIXME XXX contained
+syn match	initngComment			/#.*$/ contains=@initngCommentGroup
+
+" install_service #macros
+" TODO: syntax check for ifd-endd pairs
+" ==========
+syn region	initngDefine			start="^#\(endd\|elsed\|exec\|ifd\|endexec\|endd\)\>" skip="\\$" end="$" end="#"me=s-1
+syn cluster shCommentGroup			add=initngDefine
+syn cluster initngCommentGroup		add=initngDefine
+
+hi def link	initngComment			Comment
+hi def link initngTodo				Todo
+
+hi def link	initngString			String
+hi def link initngServiceKeywords	Define
+
+hi def link	initngServiceHeader		Keyword
+hi def link	initngActionHeader		Type
+hi def link initngDelim				Delimiter
+
+hi def link	initngVariable			PreProc
+hi def link	initngSubstMacro		Comment
+hi def link	initngDefine			Macro
+
+let b:current_syntax = "initng"
--- a/runtime/syntax/javascript.vim
+++ b/runtime/syntax/javascript.vim
@@ -7,7 +7,7 @@
 "		(ss) repaired several quoting and grouping glitches
 "		(ss) fixed regex parsing issue with multiple qualifiers [gi]
 "		(ss) additional factoring of keywords, globals, and members
-" Last Change:	2006 Jan 15
+" Last Change:	2006 Jun 19
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -32,9 +32,9 @@ syn case ignore
 
 
 syn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
-syn match   javaScriptLineComment      "\/\/.*" contains=javaScriptCommentTodo
+syn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
 syn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
-syn region  javaScriptComment	       start="/\*"  end="\*/" contains=javaScriptCommentTodo
+syn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
 syn match   javaScriptSpecial	       "\\\d\d\d\|\\."
 syn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+  contains=javaScriptSpecial,@htmlPreproc
 syn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+  contains=javaScriptSpecial,@htmlPreproc
--- a/runtime/syntax/lua.vim
+++ b/runtime/syntax/lua.vim
@@ -2,7 +2,7 @@
 " Language:	Lua 4.0, Lua 5.0 and Lua 5.1
 " Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol com br>
 " First Author:	Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
-" Last Change:	2006 Apr 21
+" Last Change:	2006 Aug 10
 " Options:	lua_version = 4 or 5
 "		lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
 "		default 5.1
@@ -31,13 +31,13 @@ syn sync minlines=100
 
 " Comments
 syn keyword luaTodo             contained TODO FIXME XXX
-syn match   luaComment          "--.*$" contains=luaTodo
+syn match   luaComment          "--.*$" contains=luaTodo,@Spell
 if lua_version == 5 && lua_subversion == 0
-  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment
+  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
   syn region  luaInnerComment   contained transparent start="\[\[" end="\]\]"
 elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
   " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
-  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]"
+  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
 endif
 
 " First line may start with #!
@@ -95,22 +95,27 @@ if lua_version < 5
   syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
 elseif lua_version == 5 && lua_subversion == 0
   syn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
-  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2
+  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
 elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
   syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
-  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]"
+  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
 endif
-syn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial
-syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial
+syn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell
+syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell
 
 " integer number
-syn match luaNumber "\<[0-9]\+\>"
+syn match luaNumber "\<\d\+\>"
 " floating point number, with dot, optional exponent
-syn match luaFloat  "\<[0-9]\+\.[0-9]*\%(e[-+]\=[0-9]\+\)\=\>"
+syn match luaFloat  "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>"
 " floating point number, starting with a dot, optional exponent
-syn match luaFloat  "\.[0-9]\+\%(e[-+]\=[0-9]\+\)\=\>"
+syn match luaFloat  "\.\d\+\%(e[-+]\=\d\+\)\=\>"
 " floating point number, without dot, with exponent
-syn match luaFloat  "\<[0-9]\+e[-+]\=[0-9]\+\>"
+syn match luaFloat  "\<\d\+e[-+]\=\d\+\>"
+
+" hex numbers
+if lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+  syn match luaNumber "\<0x\x\+\>"
+endif
 
 " tables
 syn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
--- a/runtime/syntax/lynx.vim
+++ b/runtime/syntax/lynx.vim
@@ -1,25 +1,23 @@
-" Lynx syntax file
-" Filename:	lynx.vim
-" Language:	Lynx configuration file ( lynx.cfg )
-" Maintainer:	Doug Kearns <djkea2@gus.gscit.monash.edu.au>
+" Vim syntax file
+" Language:	Lynx configuration file (lynx.cfg)
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
 " URL:		http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/lynx.vim
-" Last Change:	2004 Nov 27
+" Last Change:	2007 Mar 20
 
-" TODO: more intelligent and complete argument highlighting
+" Lynx 2.8.5
 
-" 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")
+if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn match   lynxLeadingWS  "^\s*" transparent nextgroup=lynxOption
 
 syn match   lynxComment    "\(^\|\s\+\)#.*$" contains=lynxTodo
 
-syn keyword lynxTodo       TODO NOTE FIXME XXX contained
+syn keyword lynxTodo	   TODO NOTE FIXME XXX contained
 
 syn match   lynxDelimiter  ":" contained nextgroup=lynxBoolean,lynxNumber
 
@@ -27,41 +25,50 @@ syn case ignore
 syn keyword lynxBoolean    TRUE FALSE contained
 syn case match
 
-syn match   lynxNumber     "-\=\<\d\+\>" contained
+syn match   lynxNumber	   "-\=\<\d\+\>" contained
 
 syn case ignore
-syn keyword lynxOption ACCEPT_ALL_COOKIES ALERTSECS ALWAYS_RESUBMIT_POSTS ALWAYS_TRUSTED_EXEC ASSUME_CHARSET ASSUMED_COLOR  contained nextgroup=lynxDelimiter
-syn keyword lynxOption ASSUMED_DOC_CHARSET_CHOICE ASSUME_LOCAL_CHARSET ASSUME_UNREC_CHARSET AUTO_UNCACHE_DIRLISTS	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption BIBP_BIBHOST BIBP_GLOBAL_SERVER BLOCK_MULTI_BOOKMARKS BOLD_H1 BOLD_HEADERS BOLD_NAME_ANCHORS	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption CASE_SENSITIVE_ALWAYS_ON CHARACTER_SET CHARSETS_DIRECTORY CHARSET_SWITCH_RULES CHECKMAIL		    contained nextgroup=lynxDelimiter
-syn keyword lynxOption COLLAPSE_BR_TAGS COLOR CONNECT_TIMEOUT COOKIE_ACCEPT_DOMAINS COOKIE_FILE				    contained nextgroup=lynxDelimiter
-syn keyword lynxOption COOKIE_LOOSE_INVALID_DOMAINS COOKIE_QUERY_INVALID_DOMAINS COOKIE_REJECT_DOMAINS COOKIE_SAVE_FILE     contained nextgroup=lynxDelimiter
-syn keyword lynxOption COOKIE_STRICT_INVALID_DOMAINS CSO_PROXY CSWING_PATH DEFAULT_BOOKMARK_FILE DEFAULT_CACHE_SIZE	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption DEFAULT_EDITOR DEFAULT_INDEX_FILE DEFAULT_KEYPAD_MODE DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption DEFAULT_USER_MODE DEFAULT_VIRTUAL_MEMORY_SIZE DIRED_MENU DISPLAY_CHARSET_CHOICE DOWNLOADER	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption EMACS_KEYS_ALWAYS_ON ENABLE_LYNXRC ENABLE_SCROLLBACK EXTERNAL FINGER_PROXY FOCUS_WINDOW		    contained nextgroup=lynxDelimiter
-syn keyword lynxOption FORCE_8BIT_TOUPPER FORCE_EMPTY_HREFLESS_A FORCE_SSL_COOKIES_SECURE FORMS_OPTIONS FTP_PASSIVE	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption FTP_PROXY GLOBAL_EXTENSION_MAP GLOBAL_MAILCAP GOPHER_PROXY GOTOBUFFER HELPFILE HIDDEN_LINK_MARKER    contained nextgroup=lynxDelimiter
-syn keyword lynxOption HISTORICAL_COMMENTS HTMLSRC_ATTRNAME_XFORM HTMLSRC_TAGNAME_XFORM HTTP_PROXY HTTPS_PROXY INCLUDE	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption INFOSECS JUMPBUFFER JUMPFILE JUMP_PROMPT JUSTIFY JUSTIFY_MAX_VOID_PERCENT KEYBOARD_LAYOUT KEYMAP     contained nextgroup=lynxDelimiter
-syn keyword lynxOption LEFTARROW_IN_TEXTFIELD_PROMPT LIST_FORMAT LIST_NEWS_DATES LIST_NEWS_NUMBERS LOCAL_DOMAIN		    contained nextgroup=lynxDelimiter
-syn keyword lynxOption LOCAL_EXECUTION_LINKS_ALWAYS_ON LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE LOCALHOST_ALIAS		    contained nextgroup=lynxDelimiter
-syn keyword lynxOption LYNXCGI_DOCUMENT_ROOT LYNXCGI_ENVIRONMENT LYNX_HOST_NAME LYNX_SIG_FILE MAIL_ADRS			    contained nextgroup=lynxDelimiter
-syn keyword lynxOption MAIL_SYSTEM_ERROR_LOGGING MAKE_LINKS_FOR_ALL_IMAGES MAKE_PSEUDO_ALTS_FOR_INLINES MESSAGESECS	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption MINIMAL_COMMENTS MULTI_BOOKMARK_SUPPORT NCR_IN_BOOKMARKS NEWS_CHUNK_SIZE NEWS_MAX_CHUNK		    contained nextgroup=lynxDelimiter
-syn keyword lynxOption NEWS_POSTING NEWSPOST_PROXY NEWS_PROXY NEWSREPLY_PROXY NNTP_PROXY NNTPSERVER NO_DOT_FILES	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption NO_FILE_REFERER NO_FORCED_CORE_DUMP NO_FROM_HEADER NO_ISMAP_IF_USEMAP NONRESTARTING_SIGWINCH	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption NO_PROXY NO_REFERER_HEADER NO_TABLE_CENTER OUTGOING_MAIL_CHARSET PARTIAL PARTIAL_THRES		    contained nextgroup=lynxDelimiter
-syn keyword lynxOption PERSISTENT_COOKIES PERSONAL_EXTENSION_MAP PERSONAL_MAILCAP PREFERRED_CHARSET PREFERRED_LANGUAGE	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption PREPEND_BASE_TO_SOURCE PREPEND_CHARSET_TO_SOURCE PRETTYSRC PRETTYSRC_SPEC			    contained nextgroup=lynxDelimiter
-syn keyword lynxOption PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING PRINTER QUIT_DEFAULT_YES REFERER_WITH_QUERY REUSE_TEMPFILES	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption RULE RULESFILE SAVE_SPACE SCAN_FOR_BURIED_NEWS_REFS SCROLLBAR SCROLLBAR_ARROW SEEK_FRAG_AREA_IN_CUR  contained nextgroup=lynxDelimiter
-syn keyword lynxOption SEEK_FRAG_MAP_IN_CUR SET_COOKIES SHOW_CURSOR SHOW_KB_RATE SNEWSPOST_PROXY SNEWS_PROXY		    contained nextgroup=lynxDelimiter
-syn keyword lynxOption SNEWSREPLY_PROXY SOFT_DQUOTES SOURCE_CACHE SOURCE_CACHE_FOR_ABORTED STARTFILE STRIP_DOTDOT_URLS	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption SUBSTITUTE_UNDERSCORES SUFFIX SUFFIX_ORDER SYSTEM_EDITOR SYSTEM_MAIL SYSTEM_MAIL_FLAGS TAGSOUP	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption TEXTFIELDS_NEED_ACTIVATION TIMEOUT TRIM_INPUT_FIELDS TRUSTED_EXEC TRUSTED_LYNXCGI UPLOADER	    contained nextgroup=lynxDelimiter
-syn keyword lynxOption URL_DOMAIN_PREFIXES URL_DOMAIN_SUFFIXES USE_FIXED_RECORDS USE_MOUSE USE_SELECT_POPUPS VERBOSE_IMAGES contained nextgroup=lynxDelimiter
-syn keyword lynxOption VIEWER VI_KEYS_ALWAYS_ON WAIS_PROXY XLOADIMAGE_COMMAND						    contained nextgroup=lynxDelimiter
+syn keyword lynxOption ACCEPT_ALL_COOKIES ALERTSECS ALWAYS_RESUBMIT_POSTS ALWAYS_TRUSTED_EXEC ASSUME_CHARSET
+		     \ ASSUMED_COLOR ASSUMED_DOC_CHARSET_CHOICE ASSUME_LOCAL_CHARSET ASSUME_UNREC_CHARSET AUTO_UNCACHE_DIRLISTS
+		     \ BIBP_BIBHOST BIBP_GLOBAL_SERVER BLOCK_MULTI_BOOKMARKS BOLD_H1 BOLD_HEADERS
+		     \ BOLD_NAME_ANCHORS CASE_SENSITIVE_ALWAYS_ON CHARACTER_SET CHARSETS_DIRECTORY CHARSET_SWITCH_RULES
+		     \ CHECKMAIL COLLAPSE_BR_TAGS COLOR CONNECT_TIMEOUT COOKIE_ACCEPT_DOMAINS
+		     \ COOKIE_FILE COOKIE_LOOSE_INVALID_DOMAINS COOKIE_QUERY_INVALID_DOMAINS COOKIE_REJECT_DOMAINS COOKIE_SAVE_FILE
+		     \ COOKIE_STRICT_INVALID_DOMAINS CSO_PROXY CSWING_PATH DEBUGSECS DEFAULT_BOOKMARK_FILE
+		     \ DEFAULT_CACHE_SIZE DEFAULT_EDITOR DEFAULT_INDEX_FILE DEFAULT_KEYPAD_MODE DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS
+		     \ DEFAULT_USER_MODE DEFAULT_VIRTUAL_MEMORY_SIZE DIRED_MENU DISPLAY_CHARSET_CHOICE DOWNLOADER
+		     \ EMACS_KEYS_ALWAYS_ON ENABLE_LYNXRC ENABLE_SCROLLBACK EXTERNAL FINGER_PROXY
+		     \ FOCUS_WINDOW FORCE_8BIT_TOUPPER FORCE_COOKIE_PROMPT FORCE_EMPTY_HREFLESS_A FORCE_SSL_COOKIES_SECURE
+		     \ FORCE_SSL_PROMPT FORMS_OPTIONS FTP_PASSIVE FTP_PROXY GLOBAL_EXTENSION_MAP
+		     \ GLOBAL_MAILCAP GOPHER_PROXY GOTOBUFFER HELPFILE HIDDEN_LINK_MARKER
+		     \ HISTORICAL_COMMENTS HTMLSRC_ATTRNAME_XFORM HTMLSRC_TAGNAME_XFORM HTTP_PROXY HTTPS_PROXY
+		     \ INCLUDE INFOSECS JUMPBUFFER JUMPFILE JUMP_PROMPT
+		     \ JUSTIFY JUSTIFY_MAX_VOID_PERCENT KEYBOARD_LAYOUT KEYMAP LEFTARROW_IN_TEXTFIELD_PROMPT
+		     \ LIST_FORMAT LIST_NEWS_DATES LIST_NEWS_NUMBERS LOCAL_DOMAIN LOCALE_CHARSET
+		     \ LOCAL_EXECUTION_LINKS_ALWAYS_ON LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE LOCALHOST_ALIAS LYNXCGI_DOCUMENT_ROOT LYNXCGI_ENVIRONMENT
+		     \ LYNX_HOST_NAME LYNX_SIG_FILE MAIL_ADRS MAIL_SYSTEM_ERROR_LOGGING MAKE_LINKS_FOR_ALL_IMAGES
+		     \ MAKE_PSEUDO_ALTS_FOR_INLINES MESSAGESECS MINIMAL_COMMENTS MULTI_BOOKMARK_SUPPORT NCR_IN_BOOKMARKS
+		     \ NEWS_CHUNK_SIZE NEWS_MAX_CHUNK NEWS_POSTING NEWSPOST_PROXY NEWS_PROXY
+		     \ NEWSREPLY_PROXY NNTP_PROXY NNTPSERVER NO_DOT_FILES NO_FILE_REFERER
+		     \ NO_FORCED_CORE_DUMP NO_FROM_HEADER NO_ISMAP_IF_USEMAP NONRESTARTING_SIGWINCH NO_PROXY
+		     \ NO_REFERER_HEADER NO_TABLE_CENTER NUMBER_FIELDS_ON_LEFT NUMBER_LINKS_ON_LEFT OUTGOING_MAIL_CHARSET
+		     \ PARTIAL PARTIAL_THRES PERSISTENT_COOKIES PERSONAL_EXTENSION_MAP PERSONAL_MAILCAP
+		     \ PREFERRED_CHARSET PREFERRED_LANGUAGE PREPEND_BASE_TO_SOURCE PREPEND_CHARSET_TO_SOURCE PRETTYSRC
+		     \ PRETTYSRC_SPEC PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING PRINTER QUIT_DEFAULT_YES REFERER_WITH_QUERY
+		     \ REPLAYSECS REUSE_TEMPFILES RULE RULESFILE SAVE_SPACE
+		     \ SCAN_FOR_BURIED_NEWS_REFS SCREEN_SIZE SCROLLBAR SCROLLBAR_ARROW SEEK_FRAG_AREA_IN_CUR
+		     \ SEEK_FRAG_MAP_IN_CUR SET_COOKIES SHOW_CURSOR SHOW_KB_NAME SHOW_KB_RATE
+		     \ SNEWSPOST_PROXY SNEWS_PROXY SNEWSREPLY_PROXY SOFT_DQUOTES SOURCE_CACHE
+		     \ SOURCE_CACHE_FOR_ABORTED STARTFILE STRIP_DOTDOT_URLS SUBSTITUTE_UNDERSCORES SUFFIX
+		     \ SUFFIX_ORDER SYSTEM_EDITOR SYSTEM_MAIL SYSTEM_MAIL_FLAGS TAGSOUP
+		     \ TEXTFIELDS_NEED_ACTIVATION TIMEOUT TRIM_INPUT_FIELDS TRUSTED_EXEC TRUSTED_LYNXCGI
+		     \ UNDERLINE_LINKS UPLOADER URL_DOMAIN_PREFIXES URL_DOMAIN_SUFFIXES USE_FIXED_RECORDS
+		     \ USE_MOUSE USE_SELECT_POPUPS VERBOSE_IMAGES VIEWER VI_KEYS_ALWAYS_ON
+		     \ WAIS_PROXY XLOADIMAGE_COMMAND contained nextgroup=lynxDelimiter
+syn keyword lynxOption BZIP2_PATH CHMOD_PATH COMPRESS_PATH COPY_PATH GZIP_PATH
+		     \ INSTALL_PATH MKDIR_PATH MV_PATH RLOGIN_PATH RMDIR_PATH
+		     \ RM_PATH TAR_PATH TELNET_PATH TN3270_PATH TOUCH_PATH
+		     \ UNCOMPRESS_PATH UNZIP_PATH UUDECODE_PATH ZCAT_PATH ZIP_PATH contained nextgroup=lynxDelimiter
 syn case match
 
 " NOTE: set this if you want the cfg2html.pl formatting directives to be highlighted
@@ -71,28 +78,17 @@ if exists("lynx_formatting_directives")
   syn match lynxFormatDir  "^\.fi$"
 endif
 
-" Define the default highlighting.
-" 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_lynx_syn_inits")
-  if version < 508
-    let did_lynx_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  HiLink lynxBoolean    Boolean
-  HiLink lynxComment    Comment
-  HiLink lynxDelimiter  Special
-  HiLink lynxFormatDir  Special
-  HiLink lynxNumber     Number
-  HiLink lynxOption     Identifier
-  HiLink lynxTodo       Todo
-
-  delcommand HiLink
-endif
+hi def link lynxBoolean		Boolean
+hi def link lynxComment		Comment
+hi def link lynxDelimiter	Special
+hi def link lynxFormatDir	Special
+hi def link lynxNumber		Number
+hi def link lynxOption		Identifier
+hi def link lynxTodo		Todo
 
 let b:current_syntax = "lynx"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
--- a/runtime/syntax/make.vim
+++ b/runtime/syntax/make.vim
@@ -2,7 +2,7 @@
 " Language:	Makefile
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/make.vim
-" Last Change:	2006 Apr 5
+" Last Change:	2007 Apr 30
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -63,14 +63,14 @@ syn match makeCmdNextLine	"\\\n."he=e-1 
 
 
 " Statements / Functions (GNU make)
-syn match makeStatement contained "(\(subst\|addprefix\|addsuffix\|basename\|call\|dir\|error\|filter-out\|filter\|findstring\|firstword\|foreach\|if\|join\|notdir\|origin\|patsubst\|shell\|sort\|strip\|suffix\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
+syn match makeStatement contained "(\(subst\|addprefix\|addsuffix\|basename\|call\|dir\|error\|eval\|filter-out\|filter\|findstring\|firstword\|foreach\|if\|join\|notdir\|origin\|patsubst\|shell\|sort\|strip\|suffix\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
 
 " Comment
 if exists("make_microsoft")
-   syn match  makeComment "#.*" contains=makeTodo
+   syn match  makeComment "#.*" contains=@Spell,makeTodo
 elseif !exists("make_no_comments")
-   syn region  makeComment	start="#" end="^$" end="[^\\]$" keepend contains=makeTodo
-   syn match   makeComment	"#$"
+   syn region  makeComment	start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
+   syn match   makeComment	"#$" contains=@Spell
 endif
 syn keyword makeTodo TODO FIXME XXX contained
 
--- a/runtime/syntax/maple.vim
+++ b/runtime/syntax/maple.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Maple V (based on release 4)
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Apr 12, 2006
-" Version:	8
+" Last Change:	Sep 11, 2006
+" Version:	9
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Package Function Selection: {{{1
@@ -115,14 +115,14 @@ syn keyword mvPackage	VectorCalculus	Wor
 " Language Support: {{{1
 syn keyword mvTodo	contained	COMBAK	FIXME	TODO	XXX
 if exists("g:mapleversion") && g:mapleversion < 9
- syn region  mvString	start=+`+ skip=+``+ end=+`+	keepend	contains=mvTodo
- syn region  mvString	start=+"+ skip=+""+ end=+"+	keepend
+ syn region  mvString	start=+`+ skip=+``+ end=+`+	keepend	contains=mvTodo,@Spell
+ syn region  mvString	start=+"+ skip=+""+ end=+"+	keepend	contains=@Spell
  syn region  mvDelayEval	start=+'+ end=+'+	keepend contains=ALLBUT,mvError,mvBraceError,mvCurlyError,mvParenError,mvSemiError
  syn match   mvVarAssign	"[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:=" contains=mvAssign
  syn match   mvAssign	":="	contained
 else
  syn region  mvName		start=+`+ skip=+``+ end=+`+	keepend	contains=mvTodo
- syn region  mvString	start=+"+ skip=+""+ end=+"+	keepend
+ syn region  mvString	start=+"+ skip=+""+ end=+"+	keepend	contains=@Spell
  syn region  mvDelayEval	start=+'+ end=+'+	keepend contains=ALLBUT,mvError,mvBraceError,mvCurlyError,mvParenError
  syn match   mvDelim		"[;:]"	display
  syn match   mvAssign	":="
--- a/runtime/syntax/masm.vim
+++ b/runtime/syntax/masm.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
-" Language:	Microsoft Assembler (80x86)
-" Maintainer:	Rob Brady <robb@datatone.com>
+" Language:	Microsoft Macro Assembler (80x86)
+" Orig Author:	Rob Brady <robb@datatone.com>
+" Maintainer:	Wu Yongwei <wuyongwei@gmail.com>
 " Last Change:	$Date$
-" URL: http://www.datatone.com/~robb/vim/syntax/masm.vim
 " $Revision$
 
 " For version 5.x: Clear all syntax items
@@ -16,86 +16,209 @@ endif
 syn case ignore
 
 
-" syn match masmType "\.word"
+syn match masmIdentifier	"[@a-z_$?][@a-z0-9_$?]*"
+syn match masmLabel		"^\s*[@a-z_$?][@a-z0-9_$?]*:"he=e-1
 
-syn match masmIdentifier	"[a-z_$][a-z0-9_$]*"
-syn match masmLabel		"^[A-Z_$][A-Z0-9_$]*:"he=e-1
+syn match masmDecimal		"[-+]\?\d\+[dt]\?"
+syn match masmBinary		"[-+]\?[0-1]\+[by]"  "put this before hex or 0bfh dies!
+syn match masmOctal		"[-+]\?[0-7]\+[oq]"
+syn match masmHexadecimal	"[-+]\?[0-9]\x*h"
+syn match masmFloatRaw		"[-+]\?[0-9]\x*r"
+syn match masmFloat		"[-+]\?\d\+\.\(\d*\(E[-+]\?\d\+\)\?\)\?"
 
-syn match masmDecimal		"\d*"
-syn match masmBinary		"[0-1]\+b"  "put this before hex or 0bfh dies!
-syn match masmHexadecimal	"[0-9]\x*h"
-syn match masmFloat		"[0-9]\x*r"
+syn match masmComment		";.*" contains=@Spell
+syn region masmComment		start=+COMMENT\s*\z(\S\)+ end=+\z1.*+ contains=@Spell
+syn region masmString		start=+'+ end=+'+ oneline contains=@Spell
+syn region masmString		start=+"+ end=+"+ oneline contains=@Spell
 
-syn match masmComment		";.*"
-syn region masmString		start=+'+ end=+'+
+syn region masmTitleArea	start=+\<TITLE\s+lc=5 start=+\<SUBTITLE\s+lc=8 start=+\<SUBTTL\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmTitle
+syn region masmTextArea		start=+\<NAME\s+lc=4 start=+\<INCLUDE\s+lc=7 start=+\<INCLUDELIB\s+lc=10 end=+$+ end=+;+me=e-1 contains=masmText
+syn match masmTitle		"[^\t ;]\([^;]*[^\t ;]\)\?" contained
+syn match masmText		"[^\t ;]\([^;]*[^\t ;]\)\?" contained
+
+syn region masmOptionOpt	start=+\<OPTION\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmOption
+syn region masmModelOpt		start=+\.MODEL\s+lc=6 end=+$+ end=+;+me=e-1 contains=masmOption,masmType
+syn region masmSegmentOpt	start=+\<SEGMENT\s+lc=7 end=+$+ end=+;+me=e-1 contains=masmOption,masmString
+syn region masmProcOpt		start=+\<PROC\s+lc=4 end=+$+ end=+;+me=e-1 contains=masmOption,masmType,masmRegister,masmIdentifier
+syn region masmExpression	start=+\.IF\s+lc=3 start=+\.WHILE\s+lc=6 start=+\.UNTIL\s+lc=6 start=+\<IF\s+lc=2 start=+\<IF2\s+lc=3 start=+\<ELSEIF\s+lc=6 start=+\<ELSEIF2\s+lc=7 start=+\<REPEAT\s+lc=6 start=+\<WHILE\s+lc=5 end=+$+ end=+;+me=e-1 contains=masmType,masmOperator,masmRegister,masmIdentifier,masmDecimal,masmBinary,masmHexadecimal,masmFloatRaw,masmString
 
-syn keyword masmOperator	AND BYTE PTR CODEPTR DATAPTR DUP DWORD EQ FAR
-syn keyword masmOperator	FWORD GE GT HIGH LARGE LE LOW LT MOD NE NEAR
-syn keyword masmOperator	NOT OFFSET OR PROC PWORD QWORD SEG SHORT TBYTE
-syn keyword masmOperator	TYPE WORD PARA
-syn keyword masmDirective	ALIGN ARG ASSUME CODESEG COMM
-syn keyword masmDirective	CONST DATASEG DB DD DF DISPLAY DOSSEG DP
-syn keyword masmDirective	DQ DT DW ELSE ELSEIF EMUL END ENDIF ENDM ENDP
-syn keyword masmDirective	ENDS ENUM EQU PROC PUBLIC PUBLICDLL RADIX
-syn keyword masmDirective	EXTRN FARDATA GLOBAL RECORD SEGMENT SMALLSTACK
-syn keyword masmDirective	GROUP IF IF1 IF2 IFB IFDEF IFDIF IFDIFI
-syn keyword masmDirective	IFE IFIDN IFIDNI IFNB IFNDEF INCLUDE INCLUDLIB
-syn keyword masmDirective	LABEL LARGESTACK STACK STRUC SUBTTL TITLE
-syn keyword masmDirective	MODEL NAME NOEMUL UNION USES VERSION
-syn keyword masmDirective	ORG FLAT
-syn match   masmDirective	"\.model"
-syn match   masmDirective	"\.186"
-syn match   masmDirective	"\.286"
-syn match   masmDirective	"\.286c"
-syn match   masmDirective	"\.286p"
-syn match   masmDirective	"\.287"
-syn match   masmDirective	"\.386"
-syn match   masmDirective	"\.386c"
-syn match   masmDirective	"\.386p"
-syn match   masmDirective	"\.387"
-syn match   masmDirective	"\.486"
-syn match   masmDirective	"\.486c"
-syn match   masmDirective	"\.486p"
-syn match   masmDirective	"\.8086"
-syn match   masmDirective	"\.8087"
-syn match   masmDirective	"\.ALPHA"
-syn match   masmDirective	"\.CODE"
-syn match   masmDirective	"\.DATA"
+syn keyword masmOption		TINY SMALL COMPACT MEDIUM LARGE HUGE contained
+syn keyword masmOption		NEARSTACK FARSTACK contained
+syn keyword masmOption		PUBLIC PRIVATE STACK COMMON MEMORY AT contained
+syn keyword masmOption		BYTE WORD DWORD PARA PAGE contained
+syn keyword masmOption		USE16 USE32 FLAT contained
+syn keyword masmOption		INFO READ WRITE EXECUTE SHARED contained
+syn keyword masmOption		NOPAGE NOCACHE DISCARD contained
+syn keyword masmOption		READONLY USES FRAME contained
+syn keyword masmOption		CASEMAP DOTNAME NODOTNAME EMULATOR contained
+syn keyword masmOption		NOEMULATOR EPILOGUE EXPR16 EXPR32 contained
+syn keyword masmOption		LANGUAGE LJMP NOLJMP M510 NOM510 contained
+syn keyword masmOption		NOKEYWORD NOSIGNEXTEND OFFSET contained
+syn keyword masmOption		OLDMACROS NOOLDMACROS OLDSTRUCTS contained
+syn keyword masmOption		NOOLDSTRUCTS PROC PROLOGUE READONLY contained
+syn keyword masmOption		NOREADONLY SCOPED NOSCOPED SEGMENT contained
+syn keyword masmOption		SETIF2 contained
+syn keyword masmType		STDCALL SYSCALL C BASIC FORTRAN PASCAL
+syn keyword masmType		PTR NEAR FAR NEAR16 FAR16 NEAR32 FAR32
+syn keyword masmType		REAL4 REAL8 REAL10 BYTE SBYTE TBYTE
+syn keyword masmType		WORD DWORD QWORD FWORD SWORD SDWORD
+syn keyword masmOperator	AND NOT OR SHL SHR XOR MOD DUP
+syn keyword masmOperator	EQ GE GT LE LT NE
+syn keyword masmOperator	LROFFSET SEG LENGTH LENGTHOF SIZE SIZEOF
+syn keyword masmOperator	CODEPTR DATAPTR FAR NEAR SHORT THIS TYPE
+syn keyword masmOperator	HIGH HIGHWORD LOW LOWWORD OPATTR MASK WIDTH
+syn match   masmOperator	"OFFSET\(\sFLAT:\)\?"
+syn match   masmOperator	".TYPE\>"
+syn match   masmOperator	"CARRY?"
+syn match   masmOperator	"OVERFLOW?"
+syn match   masmOperator	"PARITY?"
+syn match   masmOperator	"SIGN?"
+syn match   masmOperator	"ZERO?"
+syn keyword masmDirective	ALIAS ASSUME CATSTR COMM DB DD DF DOSSEG DQ DT
+syn keyword masmDirective	DW ECHO ELSE ELSEIF ELSEIF1 ELSEIF2 ELSEIFB
+syn keyword masmDirective	ELSEIFDEF ELSEIFDIF ELSEIFDIFI ELSEIFE
+syn keyword masmDirective	ELSEIFIDN ELSEIFIDNI ELSEIFNB ELSEIFNDEF END
+syn keyword masmDirective	ENDIF ENDM ENDP ENDS EQU EVEN EXITM EXTERN
+syn keyword masmDirective	EXTERNDEF EXTRN FOR FORC GOTO GROUP IF IF1 IF2
+syn keyword masmDirective	IFB IFDEF IFDIF IFDIFI IFE IFIDN IFIDNI IFNB
+syn keyword masmDirective	IFNDEF INCLUDE INCLUDELIB INSTR INVOKE IRP
+syn keyword masmDirective	IRPC LABEL LOCAL MACRO NAME OPTION ORG PAGE
+syn keyword masmDirective	POPCONTEXT PROC PROTO PUBLIC PURGE PUSHCONTEXT
+syn keyword masmDirective	RECORD REPEAT REPT SEGMENT SIZESTR STRUC
+syn keyword masmDirective	STRUCT SUBSTR SUBTITLE SUBTTL TEXTEQU TITLE
+syn keyword masmDirective	TYPEDEF UNION WHILE
+syn match   masmDirective	"\.8086\>"
+syn match   masmDirective	"\.8087\>"
+syn match   masmDirective	"\.NO87\>"
+syn match   masmDirective	"\.186\>"
+syn match   masmDirective	"\.286\>"
+syn match   masmDirective	"\.286C\>"
+syn match   masmDirective	"\.286P\>"
+syn match   masmDirective	"\.287\>"
+syn match   masmDirective	"\.386\>"
+syn match   masmDirective	"\.386C\>"
+syn match   masmDirective	"\.386P\>"
+syn match   masmDirective	"\.387\>"
+syn match   masmDirective	"\.486\>"
+syn match   masmDirective	"\.486P\>"
+syn match   masmDirective	"\.586\>"
+syn match   masmDirective	"\.586P\>"
+syn match   masmDirective	"\.686\>"
+syn match   masmDirective	"\.686P\>"
+syn match   masmDirective	"\.K3D\>"
+syn match   masmDirective	"\.MMX\>"
+syn match   masmDirective	"\.XMM\>"
+syn match   masmDirective	"\.ALPHA\>"
+syn match   masmDirective	"\.DOSSEG\>"
+syn match   masmDirective	"\.SEQ\>"
+syn match   masmDirective	"\.CODE\>"
+syn match   masmDirective	"\.CONST\>"
+syn match   masmDirective	"\.DATA\>"
+syn match   masmDirective	"\.DATA?"
+syn match   masmDirective	"\.EXIT\>"
+syn match   masmDirective	"\.FARDATA\>"
+syn match   masmDirective	"\.FARDATA?"
+syn match   masmDirective	"\.MODEL\>"
+syn match   masmDirective	"\.STACK\>"
+syn match   masmDirective	"\.STARTUP\>"
+syn match   masmDirective	"\.IF\>"
+syn match   masmDirective	"\.ELSE\>"
+syn match   masmDirective	"\.ELSEIF\>"
+syn match   masmDirective	"\.ENDIF\>"
+syn match   masmDirective	"\.REPEAT\>"
+syn match   masmDirective	"\.UNTIL\>"
+syn match   masmDirective	"\.UNTILCXZ\>"
+syn match   masmDirective	"\.WHILE\>"
+syn match   masmDirective	"\.ENDW\>"
+syn match   masmDirective	"\.BREAK\>"
+syn match   masmDirective	"\.CONTINUE\>"
+syn match   masmDirective	"\.ERR\>"
+syn match   masmDirective	"\.ERR1\>"
+syn match   masmDirective	"\.ERR2\>"
+syn match   masmDirective	"\.ERRB\>"
+syn match   masmDirective	"\.ERRDEF\>"
+syn match   masmDirective	"\.ERRDIF\>"
+syn match   masmDirective	"\.ERRDIFI\>"
+syn match   masmDirective	"\.ERRE\>"
+syn match   masmDirective	"\.ERRIDN\>"
+syn match   masmDirective	"\.ERRIDNI\>"
+syn match   masmDirective	"\.ERRNB\>"
+syn match   masmDirective	"\.ERRNDEF\>"
+syn match   masmDirective	"\.ERRNZ\>"
+syn match   masmDirective	"\.LALL\>"
+syn match   masmDirective	"\.SALL\>"
+syn match   masmDirective	"\.XALL\>"
+syn match   masmDirective	"\.LFCOND\>"
+syn match   masmDirective	"\.SFCOND\>"
+syn match   masmDirective	"\.TFCOND\>"
+syn match   masmDirective	"\.CREF\>"
+syn match   masmDirective	"\.NOCREF\>"
+syn match   masmDirective	"\.XCREF\>"
+syn match   masmDirective	"\.LIST\>"
+syn match   masmDirective	"\.NOLIST\>"
+syn match   masmDirective	"\.XLIST\>"
+syn match   masmDirective	"\.LISTALL\>"
+syn match   masmDirective	"\.LISTIF\>"
+syn match   masmDirective	"\.NOLISTIF\>"
+syn match   masmDirective	"\.LISTMACRO\>"
+syn match   masmDirective	"\.NOLISTMACRO\>"
+syn match   masmDirective	"\.LISTMACROALL\>"
+syn match   masmDirective	"\.FPO\>"
+syn match   masmDirective	"\.RADIX\>"
+syn match   masmDirective	"\.SAFESEH\>"
+syn match   masmDirective	"%OUT\>"
+syn match   masmDirective	"ALIGN\>"
+syn match   masmOption		"ALIGN([0-9]\+)"
 
 syn keyword masmRegister	AX BX CX DX SI DI BP SP
-syn keyword masmRegister	ES DS SS CS
+syn keyword masmRegister	CS DS SS ES FS GS
 syn keyword masmRegister	AH BH CH DH AL BL CL DL
 syn keyword masmRegister	EAX EBX ECX EDX ESI EDI EBP ESP
+syn keyword masmRegister	CR0 CR2 CR3 CR4
+syn keyword masmRegister	DR0 DR1 DR2 DR3 DR6 DR7
+syn keyword masmRegister	TR3 TR4 TR5 TR6 TR7
+syn match   masmRegister	"ST([0-7])"
 
 
-" these are current as of the 486 - don't have any pentium manuals handy
-syn keyword masmOpcode		AAA AAD AAM AAS ADC ADD AND ARPL BOUND BSF
-syn keyword masmOpcode		BSR BSWAP BT BTC BTR BTS BSWAP BT BTC BTR
-syn keyword masmOpcode		BTS CALL CBW CDQ CLC CLD CLI CLTS CMC CMP
-syn keyword masmOpcode		CMPS CMPSB CMPSW CMPSD CMPXCHG CWD CWDE DAA
-syn keyword masmOpcode		DAS DEC DIV ENTER HLT IDIV IMUL IN INC INS
-syn keyword masmOpcode		INSB INSW INSD INT INTO INVD INVLPG IRET
-syn keyword masmOpcode		IRETD JA JAE JB JBE JC JCXZ JECXZ JE JZ JG
-syn keyword masmOpcode		JGE JL JLE JNA JNAE JNB JNBE JNC JNE JNG JNGE
-syn keyword masmOpcode		JNL JNLE JNO JNP JNS JNZ JO JP JPE JPO JS JZ
-syn keyword masmOpcode		JMP LAHF LAR LEA LEAVE LGDT LIDT LGS LSS LFS
-syn keyword masmOpcode		LODS LODSB LODSW LODSD LOOP LOOPE LOOPZ LOONE
-syn keyword masmOpcode		LOOPNE RETF RETN
-syn keyword masmOpcode		LDS LES LLDT LMSW LOCK LSL LTR MOV MOVS MOVSB
-syn keyword masmOpcode		MOVSW MOVSD MOVSX MOVZX MUL NEG NOP NOT OR
-syn keyword masmOpcode		OUT OUTS OUTSB OUTSW OUTSD POP POPA POPD
-syn keyword masmOpcode		POPF POPFD PUSH PUSHA PUSHAD PUSHF PUSHFD
-syn keyword masmOpcode		RCL RCR ROL ROR REP REPE REPZ REPNE REPNZ
-syn keyword masmOpcode		RET SAHF SAL SAR SHL SHR SBB SCAS SCASB
-syn keyword masmOpcode		SCASW SCASD SETA SETAE SETB SETBE SETC SETE
-syn keyword masmOpcode		SETG SETGE SETL SETLE SETNA SETNAE SETNB
-syn keyword masmOpcode		SETNBE SETNC SETNE SETNG SETNGE SETNL SETNLE
-syn keyword masmOpcode		SETNO SETNP SETNS SETNZ SETO SETP SETPE SETPO
-syn keyword masmOpcode		SETS SETZ SGDT SIDT SHLD SHRD SLDT SMSW STC
-syn keyword masmOpcode		STD STI STOS STOSB STOSW STOSD STR SUB TEST
-syn keyword masmOpcode		VERR VERW WAIT WBINVD XADD XCHG XLAT XLATB XOR
+" Instruction prefixes
+syn keyword masmOpcode		LOCK REP REPE REPNE REPNZ REPZ
+
+" 8086/8088 opcodes
+syn keyword masmOpcode		AAA AAD AAM AAS ADC ADD AND CALL CBW CLC CLD
+syn keyword masmOpcode		CLI CMC CMP CMPS CMPSB CMPSW CWD DAA DAS DEC
+syn keyword masmOpcode		DIV ESC HLT IDIV IMUL IN INC INT INTO IRET
+syn keyword masmOpcode		JCXZ JMP LAHF LDS LEA LES LODS LODSB LODSW
+syn keyword masmOpcode		LOOP LOOPE LOOPEW LOOPNE LOOPNEW LOOPNZ
+syn keyword masmOpcode		LOOPNZW LOOPW LOOPZ LOOPZW MOV MOVS MOVSB
+syn keyword masmOpcode		MOVSW MUL NEG NOP NOT OR OUT POP POPF PUSH
+syn keyword masmOpcode		PUSHF RCL RCR RET RETF RETN ROL ROR SAHF SAL
+syn keyword masmOpcode		SAR SBB SCAS SCASB SCASW SHL SHR STC STD STI
+syn keyword masmOpcode		STOS STOSB STOSW SUB TEST WAIT XCHG XLAT XLATB
+syn keyword masmOpcode		XOR
+syn match   masmOpcode	      "J\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>"
 
-" floating point coprocessor as of 487
+" 80186 opcodes
+syn keyword masmOpcode		BOUND ENTER INS INSB INSW LEAVE OUTS OUTSB
+syn keyword masmOpcode		OUTSW POPA PUSHA PUSHW
+
+" 80286 opcodes
+syn keyword masmOpcode		ARPL LAR LSL SGDT SIDT SLDT SMSW STR VERR VERW
+
+" 80286/80386 privileged opcodes
+syn keyword masmOpcode		CLTS LGDT LIDT LLDT LMSW LTR
+
+" 80386 opcodes
+syn keyword masmOpcode		BSF BSR BT BTC BTR BTS CDQ CMPSD CWDE INSD
+syn keyword masmOpcode		IRETD IRETDF IRETF JECXZ LFS LGS LODSD LOOPD
+syn keyword masmOpcode		LOOPED LOOPNED LOOPNZD LOOPZD LSS MOVSD MOVSX
+syn keyword masmOpcode		MOVZX OUTSD POPAD POPFD PUSHAD PUSHD PUSHFD
+syn keyword masmOpcode		SCASD SHLD SHRD STOSD
+syn match   masmOpcode	    "SET\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>"
+
+" 80486 opcodes
+syn keyword masmOpcode		BSWAP CMPXCHG INVD INVLPG WBINVD XADD
+
+" Floating-point opcodes as of 487
 syn keyword masmOpFloat		F2XM1 FABS FADD FADDP FBLD FBSTP FCHS FCLEX
 syn keyword masmOpFloat		FNCLEX FCOM FCOMP FCOMPP FCOS FDECSTP FDISI
 syn keyword masmOpFloat		FNDISI FDIV FDIVP FDIVR FDIVRP FENI FNENI
@@ -103,13 +226,73 @@ syn keyword masmOpFloat		FFREE FIADD FIC
 syn keyword masmOpFloat		FIMUL FINCSTP FINIT FNINIT FIST FISTP FISUB
 syn keyword masmOpFloat		FISUBR FLD FLDCW FLDENV FLDLG2 FLDLN2 FLDL2E
 syn keyword masmOpFloat		FLDL2T FLDPI FLDZ FLD1 FMUL FMULP FNOP FPATAN
-syn keyword masmOpFloat		FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE
-syn keyword masmOpFloat		FNSAVE FSCALE FSETPM FSIN FSINCOS FSQRT FST
-syn keyword masmOpFloat		FSTCW FNSTCW FSTENV FNSTENV FSTP FSTSW FNSTSW
-syn keyword masmOpFloat		FSUB FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP
-syn keyword masmOpFloat		FUCOMPP FWAIT FXAM FXCH FXTRACT FYL2X FYL2XP1
-syn match   masmOpFloat		"FSTSW[ \t]\+AX"
-syn match   masmOpFloat		"FNSTSW[ \t]\+AX"
+syn keyword masmOpFloat		FPREM FPREM1 FPTAN FRNDINT FRSTOR FSAVE FNSAVE
+syn keyword masmOpFloat		FSCALE FSETPM FSIN FSINCOS FSQRT FST FSTCW
+syn keyword masmOpFloat		FNSTCW FSTENV FNSTENV FSTP FSTSW FNSTSW FSUB
+syn keyword masmOpFloat		FSUBP FSUBR FSUBRP FTST FUCOM FUCOMP FUCOMPP
+syn keyword masmOpFloat		FWAIT FXAM FXCH FXTRACT FYL2X FYL2XP1
+
+" Floating-point opcodes in Pentium and later processors
+syn keyword masmOpFloat		FCMOVE FCMOVNE FCMOVB FCMOVBE FCMOVNB FCMOVNBE
+syn keyword masmOpFloat		FCMOVU FCMOVNU FCOMI FUCOMI FCOMIP FUCOMIP
+syn keyword masmOpFloat		FXSAVE FXRSTOR
+
+" MMX opcodes (Pentium w/ MMX, Pentium II, and later)
+syn keyword masmOpcode		MOVD MOVQ PACKSSWB PACKSSDW PACKUSWB
+syn keyword masmOpcode		PUNPCKHBW PUNPCKHWD PUNPCKHDQ
+syn keyword masmOpcode		PUNPCKLBW PUNPCKLWD PUNPCKLDQ
+syn keyword masmOpcode		PADDB PADDW PADDD PADDSB PADDSW PADDUSB PADDUSW
+syn keyword masmOpcode		PSUBB PSUBW PSUBD PSUBSB PSUBSW PSUBUSB PSUBUSW
+syn keyword masmOpcode		PMULHW PMULLW PMADDWD
+syn keyword masmOpcode		PCMPEQB PCMPEQW PCMPEQD PCMPGTB PCMPGTW PCMPGTD
+syn keyword masmOpcode		PAND PANDN POR PXOR
+syn keyword masmOpcode		PSLLW PSLLD PSLLQ PSRLW PSRLD PSRLQ PSRAW PSRAD
+syn keyword masmOpcode		EMMS
+
+" SSE opcodes (Pentium III and later)
+syn keyword masmOpcode		MOVAPS MOVUPS MOVHPS MOVHLPS MOVLPS MOVLHPS
+syn keyword masmOpcode		MOVMSKPS MOVSS
+syn keyword masmOpcode		ADDPS ADDSS SUBPS SUBSS MULPS MULSS DIVPS DIVSS
+syn keyword masmOpcode		RCPPS RCPSS SQRTPS SQRTSS RSQRTPS RSQRTSS
+syn keyword masmOpcode		MAXPS MAXSS MINPS MINSS
+syn keyword masmOpcode		CMPPS CMPSS COMISS UCOMISS
+syn keyword masmOpcode		ANDPS ANDNPS ORPS XORPS
+syn keyword masmOpcode		SHUFPS UNPCKHPS UNPCKLPS
+syn keyword masmOpcode		CVTPI2PS CVTSI2SS CVTPS2PI CVTTPS2PI
+syn keyword masmOpcode		CVTSS2SI CVTTSS2SI
+syn keyword masmOpcode		LDMXCSR STMXCSR
+syn keyword masmOpcode		PAVGB PAVGW PEXTRW PINSRW PMAXUB PMAXSW
+syn keyword masmOpcode		PMINUB PMINSW PMOVMSKB PMULHUW PSADBW PSHUFW
+syn keyword masmOpcode		MASKMOVQ MOVNTQ MOVNTPS SFENCE
+syn keyword masmOpcode		PREFETCHT0 PREFETCHT1 PREFETCHT2 PREFETCHNTA
+
+" SSE2 opcodes (Pentium 4 and later)
+syn keyword masmOpcode		MOVAPD MOVUPD MOVHPD MOVLPD MOVMSKPD MOVSD
+syn keyword masmOpcode		ADDPD ADDSD SUBPD SUBSD MULPD MULSD DIVPD DIVSD
+syn keyword masmOpcode		SQRTPD SQRTSD MAXPD MAXSD MINPD MINSD
+syn keyword masmOpcode		ANDPD ANDNPD ORPD XORPD
+syn keyword masmOpcode		CMPPD CMPSD COMISD UCOMISD
+syn keyword masmOpcode		SHUFPD UNPCKHPD UNPCKLPD
+syn keyword masmOpcode		CVTPD2PI CVTTPD2PI CVTPI2PD CVTPD2DQ
+syn keyword masmOpcode		CVTTPD2DQ CVTDQ2PD CVTPS2PD CVTPD2PS
+syn keyword masmOpcode		CVTSS2SD CVTSD2SS CVTSD2SI CVTTSD2SI CVTSI2SD
+syn keyword masmOpcode		CVTDQ2PS CVTPS2DQ CVTTPS2DQ
+syn keyword masmOpcode		MOVDQA MOVDQU MOVQ2DQ MOVDQ2Q PMULUDQ
+syn keyword masmOpcode		PADDQ PSUBQ PSHUFLW PSHUFHW PSHUFD
+syn keyword masmOpcode		PSLLDQ PSRLDQ PUNPCKHQDQ PUNPCKLQDQ
+syn keyword masmOpcode		CLFLUSH LFENCE MFENCE PAUSE MASKMOVDQU
+syn keyword masmOpcode		MOVNTPD MOVNTDQ MOVNTI
+
+" SSE3 opcodes (Pentium 4 w/ Hyper-Threading and later)
+syn keyword masmOpcode		FISTTP LDDQU ADDSUBPS ADDSUBPD
+syn keyword masmOpcode		HADDPS HSUBPS HADDPD HSUBPD
+syn keyword masmOpcode		MOVSHDUP MOVSLDUP MOVDDUP MONITOR MWAIT
+
+" Other opcodes in Pentium and later processors
+syn keyword masmOpcode		CMPXCHG8B CPUID UD2
+syn keyword masmOpcode		RSM RDMSR WRMSR RDPMC RDTSC SYSENTER SYSEXIT
+syn match   masmOpcode	   "CMOV\(P[EO]\|\(N\?\([ABGL]E\?\|[CEOPSZ]\)\)\)\>"
+
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -123,19 +306,30 @@ if version >= 508 || !exists("did_masm_s
   endif
 
   " The default methods for highlighting.  Can be overridden later
-  HiLink masmLabel	Label
+  HiLink masmLabel	PreProc
   HiLink masmComment	Comment
   HiLink masmDirective	Statement
-  HiLink masmOperator	Statement
+  HiLink masmType	Type
+  HiLink masmOperator	Type
+  HiLink masmOption	Special
+  HiLink masmRegister	Special
   HiLink masmString	String
+  HiLink masmText	String
+  HiLink masmTitle	Title
+  HiLink masmOpcode	Statement
+  HiLink masmOpFloat	Statement
 
   HiLink masmHexadecimal Number
   HiLink masmDecimal	Number
+  HiLink masmOctal	Number
   HiLink masmBinary	Number
+  HiLink masmFloatRaw	Number
   HiLink masmFloat	Number
 
   HiLink masmIdentifier Identifier
 
+  syntax sync minlines=50
+
   delcommand HiLink
 endif
 
--- a/runtime/syntax/muttrc.vim
+++ b/runtime/syntax/muttrc.vim
@@ -2,9 +2,9 @@
 " Language:	Mutt setup files
 " Original:	Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
 " Maintainer:	Kyle Wheeler <kyle-muttrc.vim@memoryhole.net>
-" Last Change:	22 Apr 2006
+" Last Change:	5 Mar 2007
 
-" This file covers mutt version 1.5.11
+" This file covers mutt version 1.5.14 (and most of CVS HEAD)
 " Included are also a few features from 1.4.2.1
 
 " For version 5.x: Clear all syntax items
@@ -22,17 +22,19 @@ else
   setlocal isk=@,48-57,_,-
 endif
 
-syn match muttrcComment		"^#.*$"
+syn match muttrcComment		"^# .*$" contains=@Spell
+syn match muttrcComment		"^#[^ ].*$"
+syn match muttrcComment		"^#$"
 syn match muttrcComment		"[^\\]#.*$"lc=1
 
 " Escape sequences (back-tick and pipe goes here too)
-syn match muttrcEscape		+\\[#tnr"'Cc]+
+syn match muttrcEscape		+\\[#tnr"'Cc ]+
 syn match muttrcEscape		+[`|]+
 
 " The variables takes the following arguments
 syn match  muttrcString		"=\s*[^ #"'`]\+"lc=1 contains=muttrcEscape
-syn region muttrcString		start=+"+ms=e skip=+\\"+ end=+"+ contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcMacro,muttrcCommand,muttrcAction
-syn region muttrcString		start=+'+ms=e skip=+\\'+ end=+'+ contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcMacro,muttrcCommand,muttrcAction
+syn region muttrcString		start=+"+ms=e skip=+\\"+ end=+"+ contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction
+syn region muttrcString		start=+'+ms=e skip=+\\'+ end=+'+ contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction
 
 syn region muttrcShellString	matchgroup=muttrcEscape keepend start=+`+ skip=+\\`+ end=+`+ contains=muttrcVarStr,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcCommand,muttrcSet
 
@@ -41,8 +43,11 @@ syn match  muttrcRXChars	contained /[][|
 syn match  muttrcRXChars	contained /'^/ms=s+1
 syn match  muttrcRXChars	contained /$'/me=e-1
 syn match  muttrcRXChars	contained /\\/
+" Why does muttrcRXString2 work with one \ when muttrcRXString requires two?
 syn region muttrcRXString	contained start=+'+ skip=+\\'+ end=+'+ contains=muttrcRXChars
 syn region muttrcRXString	contained start=+"+ skip=+\\"+ end=+"+ contains=muttrcRXChars
+syn region muttrcRXString2	contained start=+'+ skip=+\'+ end=+'+ contains=muttrcRXChars
+syn region muttrcRXString2	contained start=+"+ skip=+\"+ end=+"+ contains=muttrcRXChars
 
 syn region muttrcRXPat		contained start=+'+ skip=+\\'+ end=+'\s*+ keepend skipwhite contains=muttrcRXString nextgroup=muttrcRXPat
 syn region muttrcRXPat		contained start=+"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString nextgroup=muttrcRXPat
@@ -102,7 +107,7 @@ syn keyword muttrcVarBool	contained save
 syn keyword muttrcVarBool	contained smart_wrap smime_ask_cert_label smime_decrypt_use_default_key
 syn keyword muttrcVarBool	contained smime_is_default sort_re ssl_force_tls ssl_use_sslv2
 syn keyword muttrcVarBool	contained ssl_use_sslv3 ssl_use_tlsv1 ssl_usesystemcerts status_on_top
-syn keyword muttrcVarBool	contained strict_threads suspend text_flowed thorough_search
+syn keyword muttrcVarBool	contained strict_mime strict_threads suspend text_flowed thorough_search
 syn keyword muttrcVarBool	contained thread_received tilde uncollapse_jump use_8bitmime
 syn keyword muttrcVarBool	contained use_domain use_envelope_from use_from use_idn use_ipv6
 syn keyword muttrcVarBool	contained user_agent wait_key weed wrap_search write_bcc
@@ -199,24 +204,26 @@ syn keyword muttrcVarQuad	contained invp
 
 syn keyword muttrcVarNum	contained connect_timeout history imap_keepalive mail_check menu_context net_inc
 syn keyword muttrcVarNum	contained pager_context pager_index_lines pgp_timeout pop_checkinterval read_inc
-syn keyword muttrcVarNum	contained score_threshold_delete score_threshold_flag score_threshold_read
-syn keyword muttrcVarNum	contained sendmail_wait sleep_time smime_timeout ssl_min_dh_prime_bits timeout
-syn keyword muttrcVarNum	contained wrapmargin write_inc
+syn keyword muttrcVarNum	contained save_history score_threshold_delete score_threshold_flag
+syn keyword muttrcVarNum	contained score_threshold_read sendmail_wait sleep_time smime_timeout
+syn keyword muttrcVarNum	contained ssl_min_dh_prime_bits timeout wrap wrapmargin write_inc
 
-syn keyword muttrcVarStr	contained alias_file alias_format attach_format attach_sep attribution
+syn match muttrcVarStr		contained 'my_[a-zA-Z0-9_]\+'
+syn keyword muttrcVarStr	contained alias_file alias_format assumed_charset attach_format attach_sep attribution
 syn keyword muttrcVarStr	contained certificate_file charset compose_format config_charset content_type
 syn keyword muttrcVarStr	contained date_format default_hook display_filter dotlock_program dsn_notify
 syn keyword muttrcVarStr	contained dsn_return editor entropy_file envelope_from_address escape folder
 syn keyword muttrcVarStr	contained folder_format forw_format forward_format from gecos_mask hdr_format
-syn keyword muttrcVarStr	contained header_cache header_cache_pagesize hostname imap_authenticators
-syn keyword muttrcVarStr	contained imap_delim_chars imap_headers imap_home_namespace imap_login imap_pass
+syn keyword muttrcVarStr	contained header_cache header_cache_pagesize history_file hostname imap_authenticators
+syn keyword muttrcVarStr	contained imap_delim_chars imap_headers imap_home_namespace imap_idle imap_login imap_pass
 syn keyword muttrcVarStr	contained imap_user indent_str indent_string index_format ispell locale mailcap_path
-syn keyword muttrcVarStr	contained mask mbox mbox_type message_format mh_seq_flagged mh_seq_replied
+syn keyword muttrcVarStr	contained mask mbox mbox_type message_format message_cachedir mh_seq_flagged mh_seq_replied
 syn keyword muttrcVarStr	contained mh_seq_unseen mix_entry_format mixmaster msg_format pager pager_format
 syn keyword muttrcVarStr	contained pgp_clearsign_command pgp_decode_command pgp_decrypt_command
 syn keyword muttrcVarStr	contained pgp_encrypt_only_command pgp_encrypt_sign_command pgp_entry_format
 syn keyword muttrcVarStr	contained pgp_export_command pgp_getkeys_command pgp_good_sign pgp_import_command
-syn keyword muttrcVarStr	contained pgp_list_pubring_command pgp_list_secring_command pgp_sign_as
+syn keyword muttrcVarStr	contained pgp_list_pubring_command pgp_list_secring_command pgp_mime_signature_filename
+syn keyword muttrcVarStr	contained pgp_mime_signature_description pgp_sign_as
 syn keyword muttrcVarStr	contained pgp_sign_command pgp_sort_keys pgp_verify_command pgp_verify_key_command
 syn keyword muttrcVarStr	contained pipe_sep pop_authenticators pop_host pop_pass pop_user post_indent_str
 syn keyword muttrcVarStr	contained post_indent_string postponed preconnect print_cmd print_command
@@ -227,8 +234,8 @@ syn keyword muttrcVarStr	contained smime
 syn keyword muttrcVarStr	contained smime_get_cert_email_command smime_get_signer_cert_command
 syn keyword muttrcVarStr	contained smime_import_cert_command smime_keys smime_pk7out_command smime_sign_as
 syn keyword muttrcVarStr	contained smime_sign_command smime_sign_opaque_command smime_verify_command
-syn keyword muttrcVarStr	contained smime_verify_opaque_command sort sort_alias sort_aux sort_browser
-syn keyword muttrcVarStr	contained spam_separator spoolfile ssl_ca_certificates_file ssl_client_cert
+syn keyword muttrcVarStr	contained smime_verify_opaque_command smtp_url smtp_authenticators sort sort_alias sort_aux
+syn keyword muttrcVarStr	contained sort_browser spam_separator spoolfile ssl_ca_certificates_file ssl_client_cert
 syn keyword muttrcVarStr	contained status_chars status_format tmpdir to_chars tunnel visual
 
 " Present in 1.4.2.1 (pgp_create_traditional was a bool then)
@@ -243,10 +250,14 @@ syn match muttrcMenuCommas /,/ contained
 syn keyword muttrcCommand	auto_view alternative_order charset-hook exec unalternative_order
 syn keyword muttrcCommand	hdr_order iconv-hook ignore mailboxes my_hdr unmailboxes
 syn keyword muttrcCommand	pgp-hook push score source unauto_view unhdr_order
-syn keyword muttrcCommand	unhook unignore unmono unmy_hdr unscore
+syn keyword muttrcCommand	unignore unmono unmy_hdr unscore
 syn keyword muttrcCommand	mime_lookup unmime_lookup spam ungroup
 syn keyword muttrcCommand	nospam unalternative_order
 
+syn keyword muttrcHooks		contained account-hook charset-hook iconv-hook message-hook folder-hook mbox-hook save-hook fcc-hook fcc-save-hook send-hook send2-hook reply-hook crypt-hook
+syn keyword muttrcUnhook	contained unhook
+syn region muttrcUnhookLine	keepend start=+^\s*unhook\s+ skip=+\\$+ end=+$+ contains=muttrcUnhook,muttrcHooks,muttrcUnHighlightSpace,muttrcComment
+
 syn match muttrcAttachmentsMimeType contained "[*a-z0-9_-]\+/[*a-z0-9._-]\+\s*" skipwhite nextgroup=muttrcAttachmentsMimeType
 syn match muttrcAttachmentsFlag contained "[+-]\%([AI]\|inline\|attachment\)\s\+" skipwhite nextgroup=muttrcAttachmentsMimeType
 syn match muttrcAttachmentsLine "^\s*\%(un\)\?attachments\s\+" skipwhite nextgroup=muttrcAttachmentsFlag
@@ -286,12 +297,12 @@ syn match muttrcFunction	contained "\<pr
 syn match muttrcFunction	contained "\<search\%(-\%(next\|opposite\|reverse\|toggle\)\)\?\>"
 syn match muttrcFunction	contained "\<show-\%(limit\|version\)\>"
 syn match muttrcFunction	contained "\<sort-\%(mailbox\|reverse\)\>"
-syn match muttrcFunction	contained "\<tag-\%(pattern\|prefix\)\>"
+syn match muttrcFunction	contained "\<tag-\%(pattern\|prefix\%(-cond\)\?\)\>"
 syn match muttrcFunction	contained "\<toggle-\%(mailboxes\|new\|quoted\|subscribed\|unlink\|write\)\>"
 syn match muttrcFunction	contained "\<undelete-\%(pattern\|subthread\)\>"
 syn match muttrcFunction	contained "\<collapse-\%(parts\|thread\|all\)\>"
 syn match muttrcFunction	contained "\<view-\%(attach\|attachments\|file\|mailcap\|name\|text\)\>"
-syn match muttrcFunction	contained "\<\%(backspace\|backward-char\|bol\|bottom\|bottom-page\|buffy-cycle\|clear-flag\|complete\%(-query\)\?\|copy-file\|create-alias\|detach-file\|eol\|exit\|extract-keys\|\%(imap-\)\?fetch-mail\|forget-passphrase\|forward-char\|group-reply\|help\|ispell\|jump\|limit\|list-reply\|mail\|mail-key\|mark-as-new\|middle-page\|new-mime\|pgp-menu\|query\|query-append\|quit\|quote-char\|read-subthread\|redraw-screen\|refresh\|rename-file\|reply\|select-new\|set-flag\|shell-escape\|skip-quoted\|sort\|subscribe\|sync-mailbox\|top\|top-page\|transpose-chars\|unsubscribe\|untag-pattern\|verify-key\|write-fcc\)\>"
+syn match muttrcFunction	contained "\<\%(backspace\|backward-char\|bol\|bottom\|bottom-page\|buffy-cycle\|clear-flag\|complete\%(-query\)\?\|copy-file\|create-alias\|detach-file\|eol\|exit\|extract-keys\|\%(imap-\)\?fetch-mail\|forget-passphrase\|forward-char\|group-reply\|help\|ispell\|jump\|limit\|list-reply\|mail\|mail-key\|mark-as-new\|middle-page\|new-mime\|noop\|pgp-menu\|query\|query-append\|quit\|quote-char\|read-subthread\|redraw-screen\|refresh\|rename-file\|reply\|select-new\|set-flag\|shell-escape\|skip-quoted\|sort\|subscribe\|sync-mailbox\|top\|top-page\|transpose-chars\|unsubscribe\|untag-pattern\|verify-key\|what-key\|write-fcc\)\>"
 syn match muttrcAction		contained "<[^>]\{-}>" contains=muttrcBadAction,muttrcFunction,muttrcKeyName
 
 syn keyword muttrcSet		set     skipwhite nextgroup=muttrcVar.*
@@ -315,7 +326,15 @@ syn match muttrcBindMenuList	contained /
 syn match muttrcBindMenuListNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindMenuList,muttrcBindMenuListNL
 syn match muttrcBind		/^\s*bind\s\?/ skipwhite nextgroup=muttrcBindMenuList,muttrcBindMenuListNL
 
-syn match muttrcMacroKey	contained /\S\+/ skipwhite contains=muttrcKey
+syn region muttrcMacroDescr	contained keepend skipwhite start=+\s*\S+ms=e skip=+\\ + end=+ \|$+me=s
+syn region muttrcMacroDescr	contained keepend skipwhite start=+'+ms=e skip=+\\'+ end=+'+me=s
+syn region muttrcMacroDescr	contained keepend skipwhite start=+"+ms=e skip=+\\"+ end=+"+me=s
+syn match muttrcMacroDescrNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
+syn region muttrcMacroBody	contained skipwhite start="\S" skip='\\ \|\\$' end=' \|$' contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
+syn region muttrcMacroBody matchgroup=Type contained skipwhite start=+'+ms=e skip=+\\'+ end=+'+me=s contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
+syn region muttrcMacroBody matchgroup=Type contained skipwhite start=+"+ms=e skip=+\\"+ end=+"+me=s contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction nextgroup=muttrcMacroDescr,muttrcMacroDescrNL
+syn match muttrcMacroBodyNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroBody,muttrcMacroBodyNL
+syn match muttrcMacroKey	contained /\S\+/ skipwhite contains=muttrcKey nextgroup=muttrcMacroBody,muttrcMacroBodyNL
 syn match muttrcMacroKeyNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroKey,muttrcMacroKeyNL
 syn match muttrcMacroMenuList	contained /\S\+/ skipwhite contains=muttrcMenu,muttrcMenuCommas nextgroup=muttrcMacroKey,muttrcMacroKeyNL
 syn match muttrcMacroMenuListNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroMenuList,muttrcMacroMenuListNL
@@ -332,32 +351,36 @@ syn region muttrcGroupDef	contained star
 syn keyword muttrcGroupKeyword	contained group ungroup
 syn region muttrcGroupLine	keepend start=+^\s*\%(un\)\?group\s+ skip=+\\$+ end=+$+ contains=muttrcGroupKeyword,muttrcGroupDef,muttrcAddrDef,muttrcRXDef,muttrcUnHighlightSpace,muttrcComment
 
-syn match muttrcAliasGroupName	contained /\w\+/ skipwhite nextgroup=muttrcAliasGroupDef,muttrcAliasAbbr,muttrcAliasNL
+syn match muttrcAliasGroupName	contained /\w\+/ skipwhite nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL
 syn match muttrcAliasGroupDefNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasGroupName,muttrcAliasGroupDefNL
 syn match muttrcAliasGroupDef	contained /\s*-group/ skipwhite nextgroup=muttrcAliasGroupName,muttrcAliasGroupDefNL contains=muttrcGroupFlag
-syn match muttrcAliasEmail	contained /\S\+@\S\+/ contains=muttrcEmail nextgroup=muttrcAliasName,muttrcAliasNameNL
-syn match muttrcAliasEncEmail	contained /<[^>]\+>/ contains=muttrcEmail
+syn match muttrcAliasComma	contained /,/ skipwhite nextgroup=muttrcAliasEmail,muttrcAliasEncEmail,muttrcAliasNameNoParens,muttrcAliasENNL
+syn match muttrcAliasEmail	contained /\S\+@\S\+/ contains=muttrcEmail nextgroup=muttrcAliasName,muttrcAliasNameNL skipwhite
+syn match muttrcAliasEncEmail	contained /<[^>]\+>/ contains=muttrcEmail nextgroup=muttrcAliasComma
 syn match muttrcAliasEncEmailNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasEncEmail,muttrcAliasEncEmailNL
 syn match muttrcAliasNameNoParens contained /[^<(@]\+\s\+/ nextgroup=muttrcAliasEncEmail,muttrcAliasEncEmailNL
 syn region muttrcAliasName	contained matchgroup=Type start=/(/ end=/)/ skipwhite
 syn match muttrcAliasNameNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasName,muttrcAliasNameNL
-syn match muttrcAliasENNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasEmail,muttrcAliasNameNoParens,muttrcAliasENNL
-syn match muttrcAliasAbbr	contained /\s*[^- \t]\S\+/ skipwhite nextgroup=muttrcAliasEmail,muttrcAliasNameNoParens,muttrcAliasENNL
-syn match muttrcAliasNL		contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasGroupDef,muttrcAliasAbbr,muttrcAliasNL
-syn match muttrcAlias		/^\s*alias\s/ skipwhite nextgroup=muttrcAliasGroupDef,muttrcAliasAbbr,muttrcAliasNL
+syn match muttrcAliasENNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasEmail,muttrcAliasEncEmail,muttrcAliasNameNoParens,muttrcAliasENNL
+syn match muttrcAliasKey	contained /\s*[^- \t]\S\+/ skipwhite nextgroup=muttrcAliasEmail,muttrcAliasEncEmail,muttrcAliasNameNoParens,muttrcAliasENNL
+syn match muttrcAliasNL		contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL
+syn match muttrcAlias		/^\s*alias\s/ skipwhite nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL
 
-syn match muttrcUnAliasAbbr	contained "\s*\w\+\s*" skipwhite nextgroup=muttrcUnAliasAbbr,muttrcUnAliasNL
-syn match muttrcUnAliasNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcUnAliasAbbr,muttrcUnAliasNL
-syn match muttrcUnAlias		/^\s*unalias\s\?/ nextgroup=muttrcUnAliasAbbr,muttrcUnAliasNL
+syn match muttrcUnAliasKey	contained "\s*\w\+\s*" skipwhite nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
+syn match muttrcUnAliasNL	contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
+syn match muttrcUnAlias		/^\s*unalias\s\?/ nextgroup=muttrcUnAliasKey,muttrcUnAliasNL
 
 syn match muttrcSimplePat contained "!\?\^\?[~][ADEFgGklNOpPQRSTuUvV=$]"
 syn match muttrcSimplePat contained "!\?\^\?[~][mnXz]\s\+\%([<>-][0-9]\+\|[0-9]\+[-][0-9]*\)"
-syn match muttrcSimplePat contained "!\?\^\?[~][dr]\s\+[0-9]\{2}\%(/[0-9]\{2}\%(/[0-9]\{2}\%([0-9]\{2}\)\)\?\)\?"
+syn match muttrcSimplePat contained "!\?\^\?[~][dr]\s\+\%(\%(-\?[0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)\|\%(\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)-\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)\?\)\?\)\|\%([<>=][0-9]\+[ymwd]\)\)"
 syn match muttrcSimplePat contained "!\?\^\?[~][bBcCefhHiLstxy]\s\+" nextgroup=muttrcSimplePatRXContainer
-syn match muttrcSimplePat contained "!\?\^\?[%][bBcCefhHiLstxy]\s\+" nextgroup=muttrcSimplePatGroup
+syn match muttrcSimplePat contained "!\?\^\?[%][bBcCefhHiLstxy]\s\+" nextgroup=muttrcSimplePatString
+syn match muttrcSimplePat contained "!\?\^\?[=][bh]\s\+" nextgroup=muttrcSimplePatString
 "syn match muttrcSimplePat contained /"[^~=%][^"]*/ contains=muttrcRXPat
 "syn match muttrcSimplePat contained /'[^~=%][^']*/ contains=muttrcRXPat
-syn match muttrcSimplePatGroup contained /[a-zA-Z0-9]\+/
+syn match muttrcSimplePatString contained /[a-zA-Z0-9]\+/
+syn region muttrcSimplePatString contained keepend start=+"+ end=+"+ skip=+\\"+
+syn region muttrcSimplePatString contained keepend start=+'+ end=+'+ skip=+\\'+
 syn region muttrcSimplePatRXContainer contained keepend start=+"+ end=+"+ skip=+\\"+ contains=muttrcRXPat
 syn region muttrcSimplePatRXContainer contained keepend start=+'+ end=+'+ skip=+\\'+ contains=muttrcRXPat
 syn match muttrcSimplePatRXContainer contained /\S\+/ contains=muttrcRXPat
@@ -372,32 +395,32 @@ syn region muttrcPatternInner contained 
 " Colour definitions takes object, foreground and background arguments (regexps excluded).
 syn match muttrcColorMatchCount	contained "[0-9]\+"
 syn match muttrcColorMatchCountNL contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
-syn region muttrcColorRXPat	contained start=+\s\+'+ skip=+\\'+ end=+'\s*+ keepend skipwhite contains=muttrcRXString nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
-syn region muttrcColorRXPat	contained start=+\s\+"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
+syn region muttrcColorRXPat	contained start=+\s*'+ skip=+\\'+ end=+'\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
+syn region muttrcColorRXPat	contained start=+\s*"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
 syn keyword muttrcColorField	contained attachment body bold error hdrdefault header index indicator markers message normal quoted search signature status tilde tree underline
 syn match   muttrcColorField	contained "\<quoted\d\=\>"
 syn keyword muttrcColor	contained black blue cyan default green magenta red white yellow
 syn keyword muttrcColor	contained brightblack brightblue brightcyan brightdefault brightgreen brightmagenta brightred brightwhite brightyellow
 syn match   muttrcColor	contained "\<\%(bright\)\=color\d\{1,2}\>"
 " Now for the structure of the color line
-syn match muttrcColorRXNL	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL
-syn match muttrcColorBG 	contained skipwhite /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL
-syn match muttrcColorBGNL	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorBG,muttrcColorBGNL
-syn match muttrcColorFG 	contained skipwhite /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBG,muttrcColorBGNL
-syn match muttrcColorFGNL	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorFG,muttrcColorFGNL
-syn match muttrcColorContext 	contained skipwhite /\s*[$]\?\w\+/ contains=muttrcColorField,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorFG,muttrcColorFGNL
-syn match muttrcColorNL 	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorContext,muttrcColorNL
-syn match muttrcColorKeyword	contained skipwhite /^\s*color\s\+/ nextgroup=muttrcColorContext,muttrcColorNL
+syn match muttrcColorRXNL	contained skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL
+syn match muttrcColorBG 	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL
+syn match muttrcColorBGNL	contained skipnl "\s*\\$" nextgroup=muttrcColorBG,muttrcColorBGNL
+syn match muttrcColorFG 	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBG,muttrcColorBGNL
+syn match muttrcColorFGNL	contained skipnl "\s*\\$" nextgroup=muttrcColorFG,muttrcColorFGNL
+syn match muttrcColorContext 	contained /\s*[$]\?\w\+/ contains=muttrcColorField,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorFG,muttrcColorFGNL
+syn match muttrcColorNL 	contained skipnl "\s*\\$" nextgroup=muttrcColorContext,muttrcColorNL
+syn match muttrcColorKeyword	contained /^\s*color\s\+/ nextgroup=muttrcColorContext,muttrcColorNL
 syn region muttrcColorLine keepend start=/^\s*color\s\+\%(index\)\@!/ skip=+\\$+ end=+$+ contains=muttrcColorKeyword,muttrcComment,muttrcUnHighlightSpace
 " Now for the structure of the color index line
-syn match muttrcPatternNL	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcPattern,muttrcPatternNL
-syn match muttrcColorBGI	contained skipwhite /\s*[$]\?\w\+\s*/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcPattern,muttrcPatternNL
-syn match muttrcColorBGNLI	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorBGI,muttrcColorBGNLI
-syn match muttrcColorFGI	contained skipwhite /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBGI,muttrcColorBGNLI
-syn match muttrcColorFGNLI	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorFGI,muttrcColorFGNLI
-syn match muttrcColorContextI	contained skipwhite /\s*index/ contains=muttrcUnHighlightSpace nextgroup=muttrcColorFGI,muttrcColorFGNLI
-syn match muttrcColorNLI	contained skipwhite skipnl "\s*\\$" nextgroup=muttrcColorContextI,muttrcColorNLI
-syn match muttrcColorKeywordI	contained skipwhite /^\s*color\s\+/ nextgroup=muttrcColorContextI,muttrcColorNLI
+syn match muttrcPatternNL	contained skipnl "\s*\\$" nextgroup=muttrcPattern,muttrcPatternNL
+syn match muttrcColorBGI	contained /\s*[$]\?\w\+\s*/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcPattern,muttrcPatternNL
+syn match muttrcColorBGNLI	contained skipnl "\s*\\$" nextgroup=muttrcColorBGI,muttrcColorBGNLI
+syn match muttrcColorFGI	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBGI,muttrcColorBGNLI
+syn match muttrcColorFGNLI	contained skipnl "\s*\\$" nextgroup=muttrcColorFGI,muttrcColorFGNLI
+syn match muttrcColorContextI	contained /\s*index/ contains=muttrcUnHighlightSpace nextgroup=muttrcColorFGI,muttrcColorFGNLI
+syn match muttrcColorNLI	contained skipnl "\s*\\$" nextgroup=muttrcColorContextI,muttrcColorNLI
+syn match muttrcColorKeywordI	contained /^\s*color\s\+/ nextgroup=muttrcColorContextI,muttrcColorNLI
 syn region muttrcColorLine keepend start=/^\s*color\s\+index/ skip=+\\$+ end=+$+ contains=muttrcColorKeywordI,muttrcComment,muttrcUnHighlightSpace
 " And now color's brother:
 syn region muttrcUnColorPatterns contained skipwhite start=+\s*'+ end=+'+ skip=+\\'+ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL
@@ -432,15 +455,17 @@ if version >= 508 || !exists("did_muttrc
   HiLink muttrcRXChars		SpecialChar
   HiLink muttrcString		String
   HiLink muttrcRXString		String
+  HiLink muttrcRXString2	String
   HiLink muttrcSpecial		Special
+  HiLink muttrcHooks		Type
   HiLink muttrcGroupFlag	Type
   HiLink muttrcGroupDef		Macro
   HiLink muttrcAddrDef		muttrcGroupFlag
   HiLink muttrcRXDef		muttrcGroupFlag
   HiLink muttrcRXPat		String
   HiLink muttrcAliasGroupName	Macro
-  HiLink muttrcAliasAbbr	Identifier
-  HiLink muttrcUnAliasAbbr	Identifier
+  HiLink muttrcAliasKey	Identifier
+  HiLink muttrcUnAliasKey	Identifier
   HiLink muttrcAliasEncEmail	Identifier
   HiLink muttrcAliasParens	Type
   HiLink muttrcNumber		Number
@@ -463,8 +488,11 @@ if version >= 508 || !exists("did_muttrc
   HiLink muttrcToggle		muttrcCommand
   HiLink muttrcBind		muttrcCommand
   HiLink muttrcMacro		muttrcCommand
+  HiLink muttrcMacroDescr	String
   HiLink muttrcAlias		muttrcCommand
   HiLink muttrcUnAlias		muttrcCommand
+  HiLink muttrcUnhook		muttrcCommand
+  HiLink muttrcUnhookLine	Error
   HiLink muttrcAction		Macro
   HiLink muttrcBadAction	Error
   HiLink muttrcBindFunction	Error
@@ -487,7 +515,7 @@ if version >= 508 || !exists("did_muttrc
   HiLink muttrcColorKeyword	muttrcCommand
   HiLink muttrcColorKeywordI	muttrcColorKeyword
   HiLink muttrcColorField	Identifier
-  HiLink muttrcColor		String
+  HiLink muttrcColor		Type
   HiLink muttrcColorFG		Error
   HiLink muttrcColorFGI		Error
   HiLink muttrcColorBG		Error
@@ -495,7 +523,7 @@ if version >= 508 || !exists("did_muttrc
   HiLink muttrcMonoAttrib	muttrcColor
   HiLink muttrcMono		muttrcCommand
   HiLink muttrcSimplePat	Identifier
-  HiLink muttrcSimplePatGroup	Macro
+  HiLink muttrcSimplePatString	Macro
   HiLink muttrcSimplePatMetas	Special
   HiLink muttrcPattern		Type
   HiLink muttrcPatternInner	Error
@@ -508,6 +536,29 @@ if version >= 508 || !exists("did_muttrc
   HiLink muttrcPatHooks		muttrcCommand
   HiLink muttrcPatHookNot	Type
 
+  HiLink muttrcBindFunctionNL	SpecialChar
+  HiLink muttrcBindKeyNL	SpecialChar
+  HiLink muttrcBindMenuListNL	SpecialChar
+  HiLink muttrcMacroDescrNL	SpecialChar
+  HiLink muttrcMacroBodyNL	SpecialChar
+  HiLink muttrcMacroKeyNL	SpecialChar
+  HiLink muttrcMacroMenuListNL	SpecialChar
+  HiLink muttrcColorMatchCountNL SpecialChar
+  HiLink muttrcColorNL		SpecialChar
+  HiLink muttrcColorRXNL	SpecialChar
+  HiLink muttrcColorBGNL	SpecialChar
+  HiLink muttrcColorFGNL	SpecialChar
+  HiLink muttrcAliasNameNL	SpecialChar
+  HiLink muttrcAliasENNL	SpecialChar
+  HiLink muttrcAliasNL		SpecialChar
+  HiLink muttrcUnAliasNL	SpecialChar
+  HiLink muttrcAliasGroupDefNL	SpecialChar
+  HiLink muttrcAliasEncEmailNL	SpecialChar
+  HiLink muttrcPatternNL	SpecialChar
+  HiLink muttrcUnColorPatNL	SpecialChar
+  HiLink muttrcUnColorAPNL	SpecialChar
+  HiLink muttrcUnColorIndexNL	SpecialChar
+
   delcommand HiLink
 endif
 
--- a/runtime/syntax/named.vim
+++ b/runtime/syntax/named.vim
@@ -1,17 +1,16 @@
 " Vim syntax file
-" Language:	BIND 8.x configuration file
-" Maintainer:	glory hump <rnd@web-drive.ru>
-" Last change:	Mon May 21 04:51:01 SAMST 2001
-" Updated:	by Marcin Dalecki 2004-12-31
-" Filenames:	named.conf
-" URL:	http://rnd.web-drive.ru/vim/syntax/named.vim [DEFUNCT]
-" $Id$
+" Language:	BIND configuration file
+" Maintainer:	Nick Hibma <nick@van-laarhoven.org>
+" Last change:	2007-01-30
+" Filenames:	named.conf, rndc.conf
+" Location:	http://www.van-laarhoven.org/vim/syntax/named.vim
 "
-" NOTE
-"    it was not widely tested, i just tried it on my simple
-"    single-master-single-slave configuration. most syntax was borrowed
-"    directly from "BIND Configuration File Guide" without testing.
-
+" Previously maintained by glory hump <rnd@web-drive.ru> and updated by Marcin
+" Dalecki.
+"
+" This file could do with a lot of improvements, so comments are welcome.
+" Please submit the named.conf (segment) with any comments.
+"
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
@@ -28,6 +27,10 @@ else
   set iskeyword=.,-,48-58,A-Z,a-z,_
 endif
 
+if version >= 600
+  syn sync match namedSync grouphere NONE "^(zone|controls|acl|key)"
+endif
+
 let s:save_cpo = &cpo
 set cpo-=C
 
@@ -79,6 +82,11 @@ syn keyword	namedIntKeyword	contained un
 syn keyword	namedIntKeyword	contained port perm owner group nextgroup=namedNumber,namedNotNumber skipwhite
 syn keyword	namedIntKeyword	contained allow nextgroup=namedIntSection skipwhite
 
+" + these keywords are contained within `update-policy' section only
+syn keyword	namedIntKeyword	contained grant nextgroup=namedString skipwhite
+syn keyword	namedIntKeyword	contained name self subdomain wildcard nextgroup=namedString skipwhite
+syn keyword	namedIntKeyword	TXT A PTR NS SOA A6 CNAME MX ANY skipwhite
+
 " --- options
 syn region	namedOptSection	contained start=+{+ end=+};+ contains=namedOption,namedCNOption,namedComment,namedParenError
 
@@ -101,9 +109,10 @@ syn keyword	namedOption	contained notify
 syn keyword	namedOption	contained use-id-pool treat-cr-as-space
 \		nextgroup=namedBool,namedNotBool skipwhite
 syn keyword	namedOption	contained also-notify forwarders
-\		nextgroup=namedIntSection skipwhite
+\		nextgroup=namedIPlist skipwhite
 syn keyword	namedOption	contained forward check-names
-syn keyword	namedOption	contained allow-query allow-transfer allow-recursion	nextgroup=namedAML skipwhite
+syn keyword	namedOption	contained allow-query allow-transfer allow-recursion
+\		nextgroup=namedAML skipwhite
 syn keyword	namedOption	contained blackhole listen-on
 \		nextgroup=namedIntSection skipwhite
 syn keyword	namedOption	contained lame-ttl max-transfer-time-in
@@ -159,8 +168,10 @@ syn keyword	namedZoneType	contained mast
 syn keyword	namedZoneOpt	contained masters forwarders
 \		nextgroup=namedIPlist skipwhite
 syn region	namedIPlist	contained start=+{+ end=+};+ contains=namedIPaddr,namedIPerror,namedParenError,namedComment
-syn match	namedZoneOpt	contained "\<allow-\(update\|query\|transfer\)"
+syn keyword	namedZoneOpt	contained allow-update allow-query allow-transfer
 \		nextgroup=namedAML skipwhite
+syn keyword	namedZoneOpt	contained update-policy
+\		nextgroup=namedIntSection skipwhite
 
 " --- boolean parameter
 syn match	namedNotBool	contained "[^ 	;]\+"
@@ -171,7 +182,7 @@ syn match	namedNotNumber	contained "[^ 	
 syn match	namedNumber	contained "\d\+"
 
 " --- address match list
-syn region	namedAML	contained start=+{+ end=+};+ contains=namedParenError,namedComment
+syn region	namedAML	contained start=+{+ end=+};+ contains=namedParenError,namedComment,namedString
 
 " --- IPs & Domains
 syn match	namedIPaddr	contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{3};/he=e-1
@@ -215,6 +226,7 @@ if version >= 508 || !exists("did_named_
   HiLink namedQSKeywords	Type
   HiLink namedCNKeywords	Type
   HiLink namedLogCategory	Type
+  HiLink namedIPaddr	Number
   HiLink namedDomain	Identifier
   HiLink namedZoneOpt	namedKeyword
   HiLink namedZoneType	Type
--- 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: Aug 29, 2005
-" Version    : 7
+" Last change: Nov 27, 2006
+" Version    : 9
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -19,10 +19,15 @@ syn match  netrwSpecial		"\%(\S\+ \)*\S\
 syn match  netrwDir		"\.\{1,2}/"			contains=netrwClassify
 syn match  netrwDir		"\%(\S\+ \)*\S\+/"		contains=netrwClassify
 syn match  netrwDir		"^\S*/"				contains=netrwClassify
+syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"	contains=netrwDateSep skipwhite nextgroup=netrwTime
 syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  contains=netrwClassify
-syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify
+syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify,netrwTreeIgnore
+syn match  netrwTreeIgnore 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  netrwTimeSep		":"
 
 syn match  netrwComment		'".*\%(\t\|$\)'			contains=@NetrwGroup
 syn match  netrwHide		'^"\s*\(Hid\|Show\)ing:'	skipwhite nextgroup=netrwHidePat
@@ -53,7 +58,9 @@ if !exists("did_drchip_dbg_syntax")
  hi link netrwVersion	Identifier
  hi link netrwSymLink	Special
  hi link netrwExe	PreProc
+ hi link netrwDateSep	Delimiter
 
+ hi link netrwTimeSep	netrwDateSep
  hi link netrwComma	netrwComment
  hi link netrwHide	netrwComment
 endif
--- a/runtime/syntax/objc.vim
+++ b/runtime/syntax/objc.vim
@@ -3,7 +3,7 @@
 " Maintainer:	    Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
 " Ex-maintainer:    Anthony Hodsdon <ahodsdon@fastmail.fm>
 " First Author:	    Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
-" Last Change:	    2006 Mar 4
+" Last Change:	    2007 Feb 21
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -36,7 +36,7 @@ syn keyword objcConstant	nil Nil
 
 " Match the ObjC #import directive (like C's #include)
 syn region objcImported display contained start=+"+  skip=+\\\\\|\\"+  end=+"+
-syn match  objcImported display contained "<[_0-9a-zA-Z.\/]*>"
+syn match  objcImported display contained "<[-_0-9a-zA-Z.\/]*>"
 syn match  objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
 
 " Match the important ObjC directives
--- a/runtime/syntax/ocaml.vim
+++ b/runtime/syntax/ocaml.vim
@@ -5,9 +5,9 @@
 "               Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
 "               Issac Trotts      <ijtrotts@ucdavis.edu>
 " URL:          http://www.ocaml.info/vim/syntax/ocaml.vim
-" Last Change:  2006 Apr 11 - Fixed an initialization bug (MM)
-"               2005 May 18 - Added 'NOTE' to highlighted comment words (MM)
-"               2005 Apr 14 - Fixed a small bug concerning 'include' (MM)
+" Last Change:  2007 Apr 13 - Added highlighting of nativeints (MM)
+"               2006 Oct 09 - More highlighting improvements to numbers (MM)
+"               2006 Sep 19 - Improved highlighting of numbers (Florent Monnier)
 
 " A minor patch was applied to the official version so that object/end
 " can be distinguished from begin/end, which is used for indentation,
@@ -30,6 +30,9 @@ syn match    ocamlComment   "^#!.*"
 " Scripting directives
 syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\)\>"
 
+" Script headers highlighted like comments
+syn match    ocamlComment      "^#!.*"
+
 " lowercase identifier - the standard way to match
 syn match    ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
 
@@ -213,11 +216,11 @@ else
   syn match    ocamlOperator   "<-"
 endif
 
-syn match    ocamlNumber        "\<-\=\d\+[l|L]\?\>"
-syn match    ocamlNumber        "\<-\=0[x|X]\x\+[l|L]\?\>"
-syn match    ocamlNumber        "\<-\=0[o|O]\o\+[l|L]\?\>"
-syn match    ocamlNumber        "\<-\=0[b|B][01]\+[l|L]\?\>"
-syn match    ocamlFloat         "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
+syn match    ocamlNumber        "\<-\=\d\(_\|\d\)*[l|L|n]\?\>"
+syn match    ocamlNumber        "\<-\=0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
+syn match    ocamlNumber        "\<-\=0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
+syn match    ocamlNumber        "\<-\=0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
+syn match    ocamlFloat         "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
 
 " Labels
 syn match    ocamlLabel        "\~\(\l\|_\)\(\w\|'\)*"lc=1
@@ -294,6 +297,7 @@ if version >= 508 || !exists("did_ocaml_
   HiLink ocamlModPreRHS    Keyword
   HiLink ocamlMPRestr2	   Keyword
   HiLink ocamlKeyword	   Keyword
+  HiLink ocamlMethod	   Include
   HiLink ocamlFunDef	   Keyword
   HiLink ocamlRefAssign    Keyword
   HiLink ocamlKeyChar	   Keyword
--- a/runtime/syntax/php.vim
+++ b/runtime/syntax/php.vim
@@ -1,46 +1,68 @@
 " Vim syntax file
-" Language:	php PHP 3/4/5
-" Maintainer:   Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Former Maintainer:	Lutz Eymers <ixtab@polzin.com>
-" Last Change:	$LastChangedDate: 2006-04-16 22:06:40 -0400 (dom, 16 apr 2006) $
-" URL: http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/syntax/php.vim?op=file&rev=0&sc=0
+" Language: php PHP 3/4/5
+" Maintainer: Peter Hodge <toomuchphp-vim@yahoo.com>
+" Last Change:  June 9, 2006
+" URL: http://www.vim.org/scripts/script.php?script_id=1571
 "
-" XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain
-"     it only because patches have been submitted for it by Debian users and the
-"     former maintainer was MIA (Missing In Action), taking over its
-"     maintenance was thus the only way to include those patches.
-"     If you care about this file, and have time to maintain it please do so!
+" Former Maintainer:  Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+" Former URL: http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/syntax/php.vim?op=file&rev=0&sc=0
+"
+" Note: If you are using a colour terminal with dark background, you will probably find
+"       the 'elflord' colorscheme is much better for PHP's syntax than the default
+"       colourscheme, because elflord's colours will better highlight the break-points
+"       (Statements) in your code.
 "
-" Options	php_sql_query = 1  for SQL syntax highlighting inside strings
-"		php_htmlInStrings = 1  for HTML syntax highlighting inside strings
-"		php_baselib = 1  for highlighting baselib functions
-"		php_asp_tags = 1  for highlighting ASP-style short tags
-"		php_parent_error_close = 1  for highlighting parent error ] or )
-"		php_parent_error_open = 1  for skipping an php end tag, if there exists an open ( or [ without a closing one
-"		php_oldStyle = 1  for using old colorstyle
-"		php_noShortTags = 1  don't sync <? ?> as php
-"		php_folding = 1  for folding classes and functions
-"		php_folding = 2  for folding all { } regions
-"		php_sync_method = x
-"			x=-1 to sync by search ( default )
-"			x>0 to sync at least x lines backwards
-"			x=0 to sync from start
-
-" Note
+" Options:  php_sql_query = 1  for SQL syntax highlighting inside strings
+"           php_htmlInStrings = 1  for HTML syntax highlighting inside strings
+"           php_baselib = 1  for highlighting baselib functions
+"           php_asp_tags = 1  for highlighting ASP-style short tags
+"           php_parent_error_close = 1  for highlighting parent error ] or )
+"           php_parent_error_open = 1  for skipping an php end tag, if there exists an open ( or [ without a closing one
+"           php_oldStyle = 1  for using old colorstyle
+"           php_noShortTags = 1  don't sync <? ?> as php
+"           php_folding = 1  for folding classes and functions
+"           php_folding = 2  for folding all { } regions
+"           php_sync_method = x
+"                             x=-1 to sync by search ( default )
+"                             x>0 to sync at least x lines backwards
+"                             x=0 to sync from start
+"
+"       Added by Peter Hodge On June 9, 2006:
+"           php_special_functions = 1|0 to highlight functions with abnormal behaviour
+"           php_alt_comparisons = 1|0 to highlight comparison operators in an alternate colour
+"           php_alt_assignByReference = 1|0 to highlight '= &' in an alternate colour
+"
+"           Note: these all default to 1 (On), so you would set them to '0' to turn them off.
+"                 E.g., in your .vimrc or _vimrc file:
+"                   let php_special_functions = 0
+"                   let php_alt_comparisons = 0
+"                   let php_alt_assignByReference = 0
+"                 Unletting these variables will revert back to their default (On).
+"
+"
+" Note:
 " Setting php_folding=1 will match a closing } by comparing the indent
 " before the class or function keyword with the indent of a matching }.
 " Setting php_folding=2 will match all of pairs of {,} ( see known
 " bugs ii )
 
-" Known bugs
-" setting  php_parent_error_close  on  and  php_parent_error_open  off
-" has these two leaks:
-"  i) An closing ) or ] inside a string match to the last open ( or [
-"     before the string, when the the closing ) or ] is on the same line
-"     where the string started. In this case a following ) or ] after
-"     the string would be highlighted as an error, what is incorrect.
-" ii) Same problem if you are setting php_folding = 2 with a closing
-"     } inside an string on the first line of this string.
+" Known Bugs:
+"  - setting  php_parent_error_close  on  and  php_parent_error_open  off
+"    has these two leaks:
+"     i) A closing ) or ] inside a string match to the last open ( or [
+"        before the string, when the the closing ) or ] is on the same line
+"        where the string started. In this case a following ) or ] after
+"        the string would be highlighted as an error, what is incorrect.
+"    ii) Same problem if you are setting php_folding = 2 with a closing
+"        } inside an string on the first line of this string.
+"
+"  - A double-quoted string like this:
+"      "$foo->someVar->someOtherVar->bar"
+"    will highight '->someOtherVar->bar' as though they will be parsed
+"    as object member variables, but PHP only recognizes the first
+"    object member variable ($foo->someVar).
+"
+"
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -100,334 +122,438 @@ endif
 syn case match
 
 " Env Variables
-syn keyword	phpEnvVar	GATEWAY_INTERFACE SERVER_NAME SERVER_SOFTWARE SERVER_PROTOCOL REQUEST_METHOD QUERY_STRING DOCUMENT_ROOT HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION HTTP_HOST HTTP_REFERER HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT SCRIPT_FILENAME SERVER_ADMIN SERVER_PORT SERVER_SIGNATURE PATH_TRANSLATED SCRIPT_NAME REQUEST_URI	contained
+syn keyword phpEnvVar GATEWAY_INTERFACE SERVER_NAME SERVER_SOFTWARE SERVER_PROTOCOL REQUEST_METHOD QUERY_STRING DOCUMENT_ROOT HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ENCODING HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION HTTP_HOST HTTP_REFERER HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT SCRIPT_FILENAME SERVER_ADMIN SERVER_PORT SERVER_SIGNATURE PATH_TRANSLATED SCRIPT_NAME REQUEST_URI contained
 
 " Internal Variables
-syn keyword	phpIntVar	GLOBALS PHP_ERRMSG PHP_SELF HTTP_GET_VARS HTTP_POST_VARS HTTP_COOKIE_VARS HTTP_POST_FILES HTTP_ENV_VARS HTTP_SERVER_VARS HTTP_SESSION_VARS HTTP_RAW_POST_DATA HTTP_STATE_VARS _GET _POST _COOKIE _FILES _SERVER _ENV _SERVER _REQUEST _SESSION	contained
+syn keyword phpIntVar GLOBALS PHP_ERRMSG PHP_SELF HTTP_GET_VARS HTTP_POST_VARS HTTP_COOKIE_VARS HTTP_POST_FILES HTTP_ENV_VARS HTTP_SERVER_VARS HTTP_SESSION_VARS HTTP_RAW_POST_DATA HTTP_STATE_VARS _GET _POST _COOKIE _FILES _SERVER _ENV _SERVER _REQUEST _SESSION  contained
 
 " Constants
-syn keyword	phpCoreConstant	PHP_VERSION PHP_OS DEFAULT_INCLUDE_PATH PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_BINDIR PHP_LIBDIR PHP_DATADIR PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_ALL	contained
+syn keyword phpCoreConstant PHP_VERSION PHP_OS DEFAULT_INCLUDE_PATH PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_BINDIR PHP_LIBDIR PHP_DATADIR PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_ALL  contained
 
 syn case ignore
 
-syn keyword	phpConstant	 __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__	contained
+syn keyword phpConstant  __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__  contained
 
 
 " Function and Methods ripped from php_manual_de.tar.gz Jan 2003
-syn keyword	phpFunctions	apache_child_terminate apache_get_modules apache_get_version apache_getenv apache_lookup_uri apache_note apache_request_headers apache_response_headers apache_setenv ascii2ebcdic ebcdic2ascii getallheaders virtual	contained
-syn keyword	phpFunctions	array_change_key_case array_chunk array_combine array_count_values array_diff_assoc array_diff_uassoc array_diff array_fill array_filter array_flip array_intersect_assoc array_intersect array_key_exists array_keys array_map array_merge_recursive array_merge array_multisort array_pad array_pop array_push array_rand array_reduce array_reverse array_search array_shift array_slice array_splice array_sum array_udiff_assoc array_udiff_uassoc array_udiff array_unique array_unshift array_values array_walk array arsort asort compact count current each end extract in_array key krsort ksort list natcasesort natsort next pos prev range reset rsort shuffle sizeof sort uasort uksort usort	contained
-syn keyword	phpFunctions	aspell_check aspell_new aspell_suggest	contained
-syn keyword	phpFunctions	bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub	contained
-syn keyword	phpFunctions	bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite	contained
-syn keyword	phpFunctions	cal_days_in_month cal_from_jd cal_info cal_to_jd easter_date easter_days frenchtojd gregoriantojd jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd juliantojd unixtojd	contained
-syn keyword	phpFunctions	ccvs_add ccvs_auth ccvs_command ccvs_count ccvs_delete ccvs_done ccvs_init ccvs_lookup ccvs_new ccvs_report ccvs_return ccvs_reverse ccvs_sale ccvs_status ccvs_textvalue ccvs_void	contained
-syn keyword	phpFunctions	call_user_method_array call_user_method class_exists get_class_methods get_class_vars get_class get_declared_classes get_object_vars get_parent_class is_a is_subclass_of method_exists	contained
-syn keyword	phpFunctions	com VARIANT com_addref com_get com_invoke com_isenum com_load_typelib com_load com_propget com_propput com_propset com_release com_set	contained
-syn keyword	phpFunctions	cpdf_add_annotation cpdf_add_outline cpdf_arc cpdf_begin_text cpdf_circle cpdf_clip cpdf_close cpdf_closepath_fill_stroke cpdf_closepath_stroke cpdf_closepath cpdf_continue_text cpdf_curveto cpdf_end_text cpdf_fill_stroke cpdf_fill cpdf_finalize_page cpdf_finalize cpdf_global_set_document_limits cpdf_import_jpeg cpdf_lineto cpdf_moveto cpdf_newpath cpdf_open cpdf_output_buffer cpdf_page_init cpdf_place_inline_image cpdf_rect cpdf_restore cpdf_rlineto cpdf_rmoveto cpdf_rotate_text cpdf_rotate cpdf_save_to_file cpdf_save cpdf_scale cpdf_set_action_url cpdf_set_char_spacing cpdf_set_creator cpdf_set_current_page cpdf_set_font_directories cpdf_set_font_map_file cpdf_set_font cpdf_set_horiz_scaling cpdf_set_keywords cpdf_set_leading cpdf_set_page_animation cpdf_set_subject cpdf_set_text_matrix cpdf_set_text_pos cpdf_set_text_rendering cpdf_set_text_rise cpdf_set_title cpdf_set_viewer_preferences cpdf_set_word_spacing cpdf_setdash cpdf_setflat cpdf_setgray_fill cpdf_setgray_stroke cpdf_setgray cpdf_setlinecap cpdf_setlinejoin cpdf_setlinewidth cpdf_setmiterlimit cpdf_setrgbcolor_fill cpdf_setrgbcolor_stroke cpdf_setrgbcolor cpdf_show_xy cpdf_show cpdf_stringwidth cpdf_stroke cpdf_text cpdf_translate	contained
-syn keyword	phpFunctions	crack_check crack_closedict crack_getlastmessage crack_opendict	contained
-syn keyword	phpFunctions	ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_graph ctype_lower ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit	contained
-syn keyword	phpFunctions	curl_close curl_errno curl_error curl_exec curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_setopt curl_version	contained
-syn keyword	phpFunctions	cybercash_base64_decode cybercash_base64_encode cybercash_decr cybercash_encr	contained
-syn keyword	phpFunctions	cyrus_authenticate cyrus_bind cyrus_close cyrus_connect cyrus_query cyrus_unbind	contained
-syn keyword	phpFunctions	checkdate date getdate gettimeofday gmdate gmmktime gmstrftime localtime microtime mktime strftime strtotime time	contained
-syn keyword	phpFunctions	dba_close dba_delete dba_exists dba_fetch dba_firstkey dba_handlers dba_insert dba_key_split dba_list dba_nextkey dba_open dba_optimize dba_popen dba_replace dba_sync	contained
-syn keyword	phpFunctions	dbase_add_record dbase_close dbase_create dbase_delete_record dbase_get_header_info dbase_get_record_with_names dbase_get_record dbase_numfields dbase_numrecords dbase_open dbase_pack dbase_replace_record	contained
-syn keyword	phpFunctions	dblist dbmclose dbmdelete dbmexists dbmfetch dbmfirstkey dbminsert dbmnextkey dbmopen dbmreplace	contained
-syn keyword	phpFunctions	dbplus_add dbplus_aql dbplus_chdir dbplus_close dbplus_curr dbplus_errcode dbplus_errno dbplus_find dbplus_first dbplus_flush dbplus_freealllocks dbplus_freelock dbplus_freerlocks dbplus_getlock dbplus_getunique dbplus_info dbplus_last dbplus_lockrel dbplus_next dbplus_open dbplus_prev dbplus_rchperm dbplus_rcreate dbplus_rcrtexact dbplus_rcrtlike dbplus_resolve dbplus_restorepos dbplus_rkeys dbplus_ropen dbplus_rquery dbplus_rrename dbplus_rsecindex dbplus_runlink dbplus_rzap dbplus_savepos dbplus_setindex dbplus_setindexbynumber dbplus_sql dbplus_tcl dbplus_tremove dbplus_undo dbplus_undoprepare dbplus_unlockrel dbplus_unselect dbplus_update dbplus_xlockrel dbplus_xunlockrel	contained
-syn keyword	phpFunctions	dbx_close dbx_compare dbx_connect dbx_error dbx_escape_string dbx_fetch_row dbx_query dbx_sort	contained
-syn keyword	phpFunctions	dio_close dio_fcntl dio_open dio_read dio_seek dio_stat dio_tcsetattr dio_truncate dio_write	contained
-syn keyword	phpFunctions	chdir chroot dir closedir getcwd opendir readdir rewinddir scandir	contained
-syn keyword	phpFunctions	domxml_new_doc domxml_open_file domxml_open_mem domxml_version domxml_xmltree domxml_xslt_stylesheet_doc domxml_xslt_stylesheet_file domxml_xslt_stylesheet xpath_eval_expression xpath_eval xpath_new_context xptr_eval xptr_new_context	contained
-syn keyword	phpMethods	name specified value create_attribute create_cdata_section create_comment create_element_ns create_element create_entity_reference create_processing_instruction create_text_node doctype document_element dump_file dump_mem get_element_by_id get_elements_by_tagname html_dump_mem xinclude entities internal_subset name notations public_id system_id get_attribute_node get_attribute get_elements_by_tagname has_attribute remove_attribute set_attribute tagname add_namespace append_child append_sibling attributes child_nodes clone_node dump_node first_child get_content has_attributes has_child_nodes insert_before is_blank_node last_child next_sibling node_name node_type node_value owner_document parent_node prefix previous_sibling remove_child replace_child replace_node set_content set_name set_namespace unlink_node data target process result_dump_file result_dump_mem	contained
-syn keyword	phpFunctions	dotnet_load	contained
-syn keyword	phpFunctions	debug_backtrace debug_print_backtrace error_log error_reporting restore_error_handler set_error_handler trigger_error user_error	contained
-syn keyword	phpFunctions	escapeshellarg escapeshellcmd exec passthru proc_close proc_get_status proc_nice proc_open proc_terminate shell_exec system	contained
-syn keyword	phpFunctions	fam_cancel_monitor fam_close fam_monitor_collection fam_monitor_directory fam_monitor_file fam_next_event fam_open fam_pending fam_resume_monitor fam_suspend_monitor	contained
-syn keyword	phpFunctions	fbsql_affected_rows fbsql_autocommit fbsql_change_user fbsql_close fbsql_commit fbsql_connect fbsql_create_blob fbsql_create_clob fbsql_create_db fbsql_data_seek fbsql_database_password fbsql_database fbsql_db_query fbsql_db_status fbsql_drop_db fbsql_errno fbsql_error fbsql_fetch_array fbsql_fetch_assoc fbsql_fetch_field fbsql_fetch_lengths fbsql_fetch_object fbsql_fetch_row fbsql_field_flags fbsql_field_len fbsql_field_name fbsql_field_seek fbsql_field_table fbsql_field_type fbsql_free_result fbsql_get_autostart_info fbsql_hostname fbsql_insert_id fbsql_list_dbs fbsql_list_fields fbsql_list_tables fbsql_next_result fbsql_num_fields fbsql_num_rows fbsql_password fbsql_pconnect fbsql_query fbsql_read_blob fbsql_read_clob fbsql_result fbsql_rollback fbsql_select_db fbsql_set_lob_mode fbsql_set_transaction fbsql_start_db fbsql_stop_db fbsql_tablename fbsql_username fbsql_warnings	contained
-syn keyword	phpFunctions	fdf_add_doc_javascript fdf_add_template fdf_close fdf_create fdf_enum_values fdf_errno fdf_error fdf_get_ap fdf_get_attachment fdf_get_encoding fdf_get_file fdf_get_flags fdf_get_opt fdf_get_status fdf_get_value fdf_get_version fdf_header fdf_next_field_name fdf_open_string fdf_open fdf_remove_item fdf_save_string fdf_save fdf_set_ap fdf_set_encoding fdf_set_file fdf_set_flags fdf_set_javascript_action fdf_set_opt fdf_set_status fdf_set_submit_form_action fdf_set_target_frame fdf_set_value fdf_set_version	contained
-syn keyword	phpFunctions	filepro_fieldcount filepro_fieldname filepro_fieldtype filepro_fieldwidth filepro_retrieve filepro_rowcount filepro	contained
-syn keyword	phpFunctions	basename chgrp chmod chown clearstatcache copy delete dirname disk_free_space disk_total_space diskfreespace fclose feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents file fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype flock fnmatch fopen fpassthru fputs fread fscanf fseek fstat ftell ftruncate fwrite glob is_dir is_executable is_file is_link is_readable is_uploaded_file is_writable is_writeable link linkinfo lstat mkdir move_uploaded_file parse_ini_file pathinfo pclose popen readfile readlink realpath rename rewind rmdir set_file_buffer stat symlink tempnam tmpfile touch umask unlink	contained
-syn keyword	phpFunctions	fribidi_log2vis	contained
-syn keyword	phpFunctions	ftp_alloc ftp_cdup ftp_chdir ftp_chmod ftp_close ftp_connect ftp_delete ftp_exec ftp_fget ftp_fput ftp_get_option ftp_get ftp_login ftp_mdtm ftp_mkdir ftp_nb_continue ftp_nb_fget ftp_nb_fput ftp_nb_get ftp_nb_put ftp_nlist ftp_pasv ftp_put ftp_pwd ftp_quit ftp_raw ftp_rawlist ftp_rename ftp_rmdir ftp_set_option ftp_site ftp_size ftp_ssl_connect ftp_systype	contained
-syn keyword	phpFunctions	call_user_func_array call_user_func create_function func_get_arg func_get_args func_num_args function_exists get_defined_functions register_shutdown_function register_tick_function unregister_tick_function	contained
-syn keyword	phpFunctions	bind_textdomain_codeset bindtextdomain dcgettext dcngettext dgettext dngettext gettext ngettext textdomain	contained
-syn keyword	phpFunctions	gmp_abs gmp_add gmp_and gmp_clrbit gmp_cmp gmp_com gmp_div_q gmp_div_qr gmp_div_r gmp_div gmp_divexact gmp_fact gmp_gcd gmp_gcdext gmp_hamdist gmp_init gmp_intval gmp_invert gmp_jacobi gmp_legendre gmp_mod gmp_mul gmp_neg gmp_or gmp_perfect_square gmp_popcount gmp_pow gmp_powm gmp_prob_prime gmp_random gmp_scan0 gmp_scan1 gmp_setbit gmp_sign gmp_sqrt gmp_sqrtrem gmp_sqrtrm gmp_strval gmp_sub gmp_xor	contained
-syn keyword	phpFunctions	header headers_list headers_sent setcookie	contained
-syn keyword	phpFunctions	hw_api_attribute hwapi_hgcsp hw_api_content hw_api_object	contained
-syn keyword	phpMethods	key langdepvalue value values checkin checkout children mimetype read content copy dbstat dcstat dstanchors dstofsrcanchors count reason find ftstat hwstat identify info insert insertanchor insertcollection insertdocument link lock move assign attreditable count insert remove title value object objectbyanchor parents description type remove replace setcommitedversion srcanchors srcsofdst unlock user userlist	contained
-syn keyword	phpFunctions	hw_Array2Objrec hw_changeobject hw_Children hw_ChildrenObj hw_Close hw_Connect hw_connection_info hw_cp hw_Deleteobject hw_DocByAnchor hw_DocByAnchorObj hw_Document_Attributes hw_Document_BodyTag hw_Document_Content hw_Document_SetContent hw_Document_Size hw_dummy hw_EditText hw_Error hw_ErrorMsg hw_Free_Document hw_GetAnchors hw_GetAnchorsObj hw_GetAndLock hw_GetChildColl hw_GetChildCollObj hw_GetChildDocColl hw_GetChildDocCollObj hw_GetObject hw_GetObjectByQuery hw_GetObjectByQueryColl hw_GetObjectByQueryCollObj hw_GetObjectByQueryObj hw_GetParents hw_GetParentsObj hw_getrellink hw_GetRemote hw_getremotechildren hw_GetSrcByDestObj hw_GetText hw_getusername hw_Identify hw_InCollections hw_Info hw_InsColl hw_InsDoc hw_insertanchors hw_InsertDocument hw_InsertObject hw_mapid hw_Modifyobject hw_mv hw_New_Document hw_objrec2array hw_Output_Document hw_pConnect hw_PipeDocument hw_Root hw_setlinkroot hw_stat hw_Unlock hw_Who	contained
-syn keyword	phpFunctions	ibase_add_user ibase_affected_rows ibase_blob_add ibase_blob_cancel ibase_blob_close ibase_blob_create ibase_blob_echo ibase_blob_get ibase_blob_import ibase_blob_info ibase_blob_open ibase_close ibase_commit_ret ibase_commit ibase_connect ibase_delete_user ibase_drop_db ibase_errcode ibase_errmsg ibase_execute ibase_fetch_assoc ibase_fetch_object ibase_fetch_row ibase_field_info ibase_free_event_handler ibase_free_query ibase_free_result ibase_gen_id ibase_modify_user ibase_name_result ibase_num_fields ibase_num_params ibase_param_info ibase_pconnect ibase_prepare ibase_query ibase_rollback_ret ibase_rollback ibase_set_event_handler ibase_timefmt ibase_trans ibase_wait_event	contained
-syn keyword	phpFunctions	iconv_get_encoding iconv_mime_decode_headers iconv_mime_decode iconv_mime_encode iconv_set_encoding iconv_strlen iconv_strpos iconv_strrpos iconv_substr iconv ob_iconv_handler	contained
-syn keyword	phpFunctions	ifx_affected_rows ifx_blobinfile_mode ifx_byteasvarchar ifx_close ifx_connect ifx_copy_blob ifx_create_blob ifx_create_char ifx_do ifx_error ifx_errormsg ifx_fetch_row ifx_fieldproperties ifx_fieldtypes ifx_free_blob ifx_free_char ifx_free_result ifx_get_blob ifx_get_char ifx_getsqlca ifx_htmltbl_result ifx_nullformat ifx_num_fields ifx_num_rows ifx_pconnect ifx_prepare ifx_query ifx_textasvarchar ifx_update_blob ifx_update_char ifxus_close_slob ifxus_create_slob ifxus_free_slob ifxus_open_slob ifxus_read_slob ifxus_seek_slob ifxus_tell_slob ifxus_write_slob	contained
-syn keyword	phpFunctions	exif_imagetype exif_read_data exif_thumbnail gd_info getimagesize image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imageinterlace imageistruecolor imagejpeg imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepscopyfont imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp iptcembed iptcparse jpeg2wbmp png2wbmp read_exif_data	contained
-syn keyword	phpFunctions	imap_8bit imap_alerts imap_append imap_base64 imap_binary imap_body imap_bodystruct imap_check imap_clearflag_full imap_close imap_createmailbox imap_delete imap_deletemailbox imap_errors imap_expunge imap_fetch_overview imap_fetchbody imap_fetchheader imap_fetchstructure imap_get_quota imap_get_quotaroot imap_getacl imap_getmailboxes imap_getsubscribed imap_header imap_headerinfo imap_headers imap_last_error imap_list imap_listmailbox imap_listscan imap_listsubscribed imap_lsub imap_mail_compose imap_mail_copy imap_mail_move imap_mail imap_mailboxmsginfo imap_mime_header_decode imap_msgno imap_num_msg imap_num_recent imap_open imap_ping imap_qprint imap_renamemailbox imap_reopen imap_rfc822_parse_adrlist imap_rfc822_parse_headers imap_rfc822_write_address imap_scanmailbox imap_search imap_set_quota imap_setacl imap_setflag_full imap_sort imap_status imap_subscribe imap_thread imap_timeout imap_uid imap_undelete imap_unsubscribe imap_utf7_decode imap_utf7_encode imap_utf8	contained
-syn keyword	phpFunctions	assert_options assert dl extension_loaded get_cfg_var get_current_user get_defined_constants get_extension_funcs get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime get_required_files getenv getlastmod getmygid getmyinode getmypid getmyuid getopt getrusage ini_alter ini_get_all ini_get ini_restore ini_set main memory_get_usage php_ini_scanned_files php_logo_guid php_sapi_name php_uname phpcredits phpinfo phpversion putenv restore_include_path set_include_path set_magic_quotes_runtime set_time_limit version_compare zend_logo_guid zend_version	contained
-syn keyword	phpFunctions	ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback	contained
-syn keyword	phpFunctions	ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois	contained
-syn keyword	phpFunctions	java_last_exception_clear java_last_exception_get	contained
-syn keyword	phpFunctions	ldap_8859_to_t61 ldap_add ldap_bind ldap_close ldap_compare ldap_connect ldap_count_entries ldap_delete ldap_dn2ufn ldap_err2str ldap_errno ldap_error ldap_explode_dn ldap_first_attribute ldap_first_entry ldap_first_reference ldap_free_result ldap_get_attributes ldap_get_dn ldap_get_entries ldap_get_option ldap_get_values_len ldap_get_values ldap_list ldap_mod_add ldap_mod_del ldap_mod_replace ldap_modify ldap_next_attribute ldap_next_entry ldap_next_reference ldap_parse_reference ldap_parse_result ldap_read ldap_rename ldap_search ldap_set_option ldap_set_rebind_proc ldap_sort ldap_start_tls ldap_t61_to_8859 ldap_unbind	contained
-syn keyword	phpFunctions	lzf_compress lzf_decompress lzf_optimized_for	contained
-syn keyword	phpFunctions	ezmlm_hash mail	contained
-syn keyword	phpFunctions	mailparse_determine_best_xfer_encoding mailparse_msg_create mailparse_msg_extract_part_file mailparse_msg_extract_part mailparse_msg_free mailparse_msg_get_part_data mailparse_msg_get_part mailparse_msg_get_structure mailparse_msg_parse_file mailparse_msg_parse mailparse_rfc822_parse_addresses mailparse_stream_encode mailparse_uudecode_all	contained
-syn keyword	phpFunctions	abs acos acosh asin asinh atan2 atan atanh base_convert bindec ceil cos cosh decbin dechex decoct deg2rad exp expm1 floor fmod getrandmax hexdec hypot is_finite is_infinite is_nan lcg_value log10 log1p log max min mt_getrandmax mt_rand mt_srand octdec pi pow rad2deg rand round sin sinh sqrt srand tan tanh	contained
-syn keyword	phpFunctions	mb_convert_case mb_convert_encoding mb_convert_kana mb_convert_variables mb_decode_mimeheader mb_decode_numericentity mb_detect_encoding mb_detect_order mb_encode_mimeheader mb_encode_numericentity mb_ereg_match mb_ereg_replace mb_ereg_search_getpos mb_ereg_search_getregs mb_ereg_search_init mb_ereg_search_pos mb_ereg_search_regs mb_ereg_search_setpos mb_ereg_search mb_ereg mb_eregi_replace mb_eregi mb_get_info mb_http_input mb_http_output mb_internal_encoding mb_language mb_output_handler mb_parse_str mb_preferred_mime_name mb_regex_encoding mb_regex_set_options mb_send_mail mb_split mb_strcut mb_strimwidth mb_strlen mb_strpos mb_strrpos mb_strtolower mb_strtoupper mb_strwidth mb_substitute_character mb_substr_count mb_substr	contained
-syn keyword	phpFunctions	mcal_append_event mcal_close mcal_create_calendar mcal_date_compare mcal_date_valid mcal_day_of_week mcal_day_of_year mcal_days_in_month mcal_delete_calendar mcal_delete_event mcal_event_add_attribute mcal_event_init mcal_event_set_alarm mcal_event_set_category mcal_event_set_class mcal_event_set_description mcal_event_set_end mcal_event_set_recur_daily mcal_event_set_recur_monthly_mday mcal_event_set_recur_monthly_wday mcal_event_set_recur_none mcal_event_set_recur_weekly mcal_event_set_recur_yearly mcal_event_set_start mcal_event_set_title mcal_expunge mcal_fetch_current_stream_event mcal_fetch_event mcal_is_leap_year mcal_list_alarms mcal_list_events mcal_next_recurrence mcal_open mcal_popen mcal_rename_calendar mcal_reopen mcal_snooze mcal_store_event mcal_time_valid mcal_week_of_year	contained
-syn keyword	phpFunctions	mcrypt_cbc mcrypt_cfb mcrypt_create_iv mcrypt_decrypt mcrypt_ecb mcrypt_enc_get_algorithms_name mcrypt_enc_get_block_size mcrypt_enc_get_iv_size mcrypt_enc_get_key_size mcrypt_enc_get_modes_name mcrypt_enc_get_supported_key_sizes mcrypt_enc_is_block_algorithm_mode mcrypt_enc_is_block_algorithm mcrypt_enc_is_block_mode mcrypt_enc_self_test mcrypt_encrypt mcrypt_generic_deinit mcrypt_generic_end mcrypt_generic_init mcrypt_generic mcrypt_get_block_size mcrypt_get_cipher_name mcrypt_get_iv_size mcrypt_get_key_size mcrypt_list_algorithms mcrypt_list_modes mcrypt_module_close mcrypt_module_get_algo_block_size mcrypt_module_get_algo_key_size mcrypt_module_get_supported_key_sizes mcrypt_module_is_block_algorithm_mode mcrypt_module_is_block_algorithm mcrypt_module_is_block_mode mcrypt_module_open mcrypt_module_self_test mcrypt_ofb mdecrypt_generic	contained
-syn keyword	phpFunctions	mcve_adduser mcve_adduserarg mcve_bt mcve_checkstatus mcve_chkpwd mcve_chngpwd mcve_completeauthorizations mcve_connect mcve_connectionerror mcve_deleteresponse mcve_deletetrans mcve_deleteusersetup mcve_deluser mcve_destroyconn mcve_destroyengine mcve_disableuser mcve_edituser mcve_enableuser mcve_force mcve_getcell mcve_getcellbynum mcve_getcommadelimited mcve_getheader mcve_getuserarg mcve_getuserparam mcve_gft mcve_gl mcve_gut mcve_initconn mcve_initengine mcve_initusersetup mcve_iscommadelimited mcve_liststats mcve_listusers mcve_maxconntimeout mcve_monitor mcve_numcolumns mcve_numrows mcve_override mcve_parsecommadelimited mcve_ping mcve_preauth mcve_preauthcompletion mcve_qc mcve_responseparam mcve_return mcve_returncode mcve_returnstatus mcve_sale mcve_setblocking mcve_setdropfile mcve_setip mcve_setssl_files mcve_setssl mcve_settimeout mcve_settle mcve_text_avs mcve_text_code mcve_text_cv mcve_transactionauth mcve_transactionavs mcve_transactionbatch mcve_transactioncv mcve_transactionid mcve_transactionitem mcve_transactionssent mcve_transactiontext mcve_transinqueue mcve_transnew mcve_transparam mcve_transsend mcve_ub mcve_uwait mcve_verifyconnection mcve_verifysslcert mcve_void	contained
-syn keyword	phpFunctions	mhash_count mhash_get_block_size mhash_get_hash_name mhash_keygen_s2k mhash	contained
-syn keyword	phpFunctions	mime_content_type	contained
-syn keyword	phpFunctions	ming_setcubicthreshold ming_setscale ming_useswfversion SWFAction SWFBitmap swfbutton_keypress SWFbutton SWFDisplayItem SWFFill SWFFont SWFGradient SWFMorph SWFMovie SWFShape SWFSprite SWFText SWFTextField	contained
-syn keyword	phpMethods	getHeight getWidth addAction addShape setAction setdown setHit setOver setUp addColor move moveTo multColor remove Rotate rotateTo scale scaleTo setDepth setName setRatio skewX skewXTo skewY skewYTo moveTo rotateTo scaleTo skewXTo skewYTo getwidth addEntry getshape1 getshape2 add nextframe output remove save setbackground setdimension setframes setrate streammp3 addFill drawCurve drawCurveTo drawLine drawLineTo movePen movePenTo setLeftFill setLine setRightFill add nextframe remove setframes addString getWidth moveTo setColor setFont setHeight setSpacing addstring align setbounds setcolor setFont setHeight setindentation setLeftMargin setLineSpacing setMargins setname setrightMargin	contained
-syn keyword	phpFunctions	connection_aborted connection_status connection_timeout constant define defined die eval exit get_browser highlight_file highlight_string ignore_user_abort pack show_source sleep uniqid unpack usleep	contained
-syn keyword	phpFunctions	udm_add_search_limit udm_alloc_agent udm_api_version udm_cat_list udm_cat_path udm_check_charset udm_check_stored udm_clear_search_limits udm_close_stored udm_crc32 udm_errno udm_error udm_find udm_free_agent udm_free_ispell_data udm_free_res udm_get_doc_count udm_get_res_field udm_get_res_param udm_load_ispell_data udm_open_stored udm_set_agent_param	contained
-syn keyword	phpFunctions	msession_connect msession_count msession_create msession_destroy msession_disconnect msession_find msession_get_array msession_get msession_getdata msession_inc msession_list msession_listvar msession_lock msession_plugin msession_randstr msession_set_array msession_set msession_setdata msession_timeout msession_uniq msession_unlock	contained
-syn keyword	phpFunctions	msql_affected_rows msql_close msql_connect msql_create_db msql_createdb msql_data_seek msql_dbname msql_drop_db msql_dropdb msql_error msql_fetch_array msql_fetch_field msql_fetch_object msql_fetch_row msql_field_seek msql_fieldflags msql_fieldlen msql_fieldname msql_fieldtable msql_fieldtype msql_free_result msql_freeresult msql_list_dbs msql_list_fields msql_list_tables msql_listdbs msql_listfields msql_listtables msql_num_fields msql_num_rows msql_numfields msql_numrows msql_pconnect msql_query msql_regcase msql_result msql_select_db msql_selectdb msql_tablename msql	contained
-syn keyword	phpFunctions	mssql_bind mssql_close mssql_connect mssql_data_seek mssql_execute mssql_fetch_array mssql_fetch_assoc mssql_fetch_batch mssql_fetch_field mssql_fetch_object mssql_fetch_row mssql_field_length mssql_field_name mssql_field_seek mssql_field_type mssql_free_result mssql_free_statement mssql_get_last_message mssql_guid_string mssql_init mssql_min_error_severity mssql_min_message_severity mssql_next_result mssql_num_fields mssql_num_rows mssql_pconnect mssql_query mssql_result mssql_rows_affected mssql_select_db	contained
-syn keyword	phpFunctions	muscat_close muscat_get muscat_give muscat_setup_net muscat_setup	contained
-syn keyword	phpFunctions	mysql_affected_rows mysql_change_user mysql_client_encoding mysql_close mysql_connect mysql_create_db mysql_data_seek mysql_db_name mysql_db_query mysql_drop_db mysql_errno mysql_error mysql_escape_string mysql_fetch_array mysql_fetch_assoc mysql_fetch_field mysql_fetch_lengths mysql_fetch_object mysql_fetch_row mysql_field_flags mysql_field_len mysql_field_name mysql_field_seek mysql_field_table mysql_field_type mysql_free_result mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql_insert_id mysql_list_dbs mysql_list_fields mysql_list_processes mysql_list_tables mysql_num_fields mysql_num_rows mysql_pconnect mysql_ping mysql_query mysql_real_escape_string mysql_result mysql_select_db mysql_stat mysql_tablename mysql_thread_id mysql_unbuffered_query	contained
-syn keyword	phpFunctions	mysqli_affected_rows mysqli_autocommit mysqli_bind_param mysqli_bind_result mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect mysqli_data_seek mysqli_debug mysqli_disable_reads_from_master mysqli_disable_rpl_parse mysqli_dump_debug_info mysqli_enable_reads_from_master mysqli_enable_rpl_parse mysqli_errno mysqli_error mysqli_execute mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_fetch mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_client_info mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_master_query mysqli_num_fields mysqli_num_rows mysqli_options mysqli_param_count mysqli_ping mysqli_prepare_result mysqli_prepare mysqli_profiler mysqli_query mysqli_read_query_result mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reload mysqli_rollback mysqli_rpl_parse_enabled mysqli_rpl_probe mysqli_rpl_query_type mysqli_select_db mysqli_send_long_data mysqli_send_query mysqli_slave_query mysqli_ssl_set mysqli_stat mysqli_stmt_affected_rows mysqli_stmt_close mysqli_stmt_errno mysqli_stmt_error mysqli_stmt_store_result mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count	contained
-syn keyword	phpFunctions	ncurses_addch ncurses_addchnstr ncurses_addchstr ncurses_addnstr ncurses_addstr ncurses_assume_default_colors ncurses_attroff ncurses_attron ncurses_attrset ncurses_baudrate ncurses_beep ncurses_bkgd ncurses_bkgdset ncurses_border ncurses_bottom_panel ncurses_can_change_color ncurses_cbreak ncurses_clear ncurses_clrtobot ncurses_clrtoeol ncurses_color_content ncurses_color_set ncurses_curs_set ncurses_def_prog_mode ncurses_def_shell_mode ncurses_define_key ncurses_del_panel ncurses_delay_output ncurses_delch ncurses_deleteln ncurses_delwin ncurses_doupdate ncurses_echo ncurses_echochar ncurses_end ncurses_erase ncurses_erasechar ncurses_filter ncurses_flash ncurses_flushinp ncurses_getch ncurses_getmaxyx ncurses_getmouse ncurses_getyx ncurses_halfdelay ncurses_has_colors ncurses_has_ic ncurses_has_il ncurses_has_key ncurses_hide_panel ncurses_hline ncurses_inch ncurses_init_color ncurses_init_pair ncurses_init ncurses_insch ncurses_insdelln ncurses_insertln ncurses_insstr ncurses_instr ncurses_isendwin ncurses_keyok ncurses_keypad ncurses_killchar ncurses_longname ncurses_meta ncurses_mouse_trafo ncurses_mouseinterval ncurses_mousemask ncurses_move_panel ncurses_move ncurses_mvaddch ncurses_mvaddchnstr ncurses_mvaddchstr ncurses_mvaddnstr ncurses_mvaddstr ncurses_mvcur ncurses_mvdelch ncurses_mvgetch ncurses_mvhline ncurses_mvinch ncurses_mvvline ncurses_mvwaddstr ncurses_napms ncurses_new_panel ncurses_newpad ncurses_newwin ncurses_nl ncurses_nocbreak ncurses_noecho ncurses_nonl ncurses_noqiflush ncurses_noraw ncurses_pair_content ncurses_panel_above ncurses_panel_below ncurses_panel_window ncurses_pnoutrefresh ncurses_prefresh ncurses_putp ncurses_qiflush ncurses_raw ncurses_refresh ncurses_replace_panel ncurses_reset_prog_mode ncurses_reset_shell_mode ncurses_resetty ncurses_savetty ncurses_scr_dump ncurses_scr_init ncurses_scr_restore ncurses_scr_set ncurses_scrl ncurses_show_panel ncurses_slk_attr ncurses_slk_attroff ncurses_slk_attron ncurses_slk_attrset ncurses_slk_clear ncurses_slk_color ncurses_slk_init ncurses_slk_noutrefresh ncurses_slk_refresh ncurses_slk_restore ncurses_slk_set ncurses_slk_touch ncurses_standend ncurses_standout ncurses_start_color ncurses_termattrs ncurses_termname ncurses_timeout ncurses_top_panel ncurses_typeahead ncurses_ungetch ncurses_ungetmouse ncurses_update_panels ncurses_use_default_colors ncurses_use_env ncurses_use_extended_names ncurses_vidattr ncurses_vline ncurses_waddch ncurses_waddstr ncurses_wattroff ncurses_wattron ncurses_wattrset ncurses_wborder ncurses_wclear ncurses_wcolor_set ncurses_werase ncurses_wgetch ncurses_whline ncurses_wmouse_trafo ncurses_wmove ncurses_wnoutrefresh ncurses_wrefresh ncurses_wstandend ncurses_wstandout ncurses_wvline	contained
-syn keyword	phpFunctions	checkdnsrr closelog debugger_off debugger_on define_syslog_variables dns_check_record dns_get_mx dns_get_record fsockopen gethostbyaddr gethostbyname gethostbynamel getmxrr getprotobyname getprotobynumber getservbyname getservbyport ip2long long2ip openlog pfsockopen socket_get_status socket_set_blocking socket_set_timeout syslog	contained
-syn keyword	phpFunctions	yp_all yp_cat yp_err_string yp_errno yp_first yp_get_default_domain yp_master yp_match yp_next yp_order	contained
-syn keyword	phpFunctions	notes_body notes_copy_db notes_create_db notes_create_note notes_drop_db notes_find_note notes_header_info notes_list_msgs notes_mark_read notes_mark_unread notes_nav_create notes_search notes_unread notes_version	contained
-syn keyword	phpFunctions	nsapi_request_headers nsapi_response_headers nsapi_virtual	contained
-syn keyword	phpFunctions	aggregate_info aggregate_methods_by_list aggregate_methods_by_regexp aggregate_methods aggregate_properties_by_list aggregate_properties_by_regexp aggregate_properties aggregate aggregation_info deaggregate	contained
-syn keyword	phpFunctions	ocibindbyname ocicancel ocicloselob ocicollappend ocicollassign ocicollassignelem ocicollgetelem ocicollmax ocicollsize ocicolltrim ocicolumnisnull ocicolumnname ocicolumnprecision ocicolumnscale ocicolumnsize ocicolumntype ocicolumntyperaw ocicommit ocidefinebyname ocierror ociexecute ocifetch ocifetchinto ocifetchstatement ocifreecollection ocifreecursor ocifreedesc ocifreestatement ociinternaldebug ociloadlob ocilogoff ocilogon ocinewcollection ocinewcursor ocinewdescriptor ocinlogon ocinumcols ociparse ociplogon ociresult ocirollback ocirowcount ocisavelob ocisavelobfile ociserverversion ocisetprefetch ocistatementtype ociwritelobtofile ociwritetemporarylob	contained
-syn keyword	phpFunctions	odbc_autocommit odbc_binmode odbc_close_all odbc_close odbc_columnprivileges odbc_columns odbc_commit odbc_connect odbc_cursor odbc_data_source odbc_do odbc_error odbc_errormsg odbc_exec odbc_execute odbc_fetch_array odbc_fetch_into odbc_fetch_object odbc_fetch_row odbc_field_len odbc_field_name odbc_field_num odbc_field_precision odbc_field_scale odbc_field_type odbc_foreignkeys odbc_free_result odbc_gettypeinfo odbc_longreadlen odbc_next_result odbc_num_fields odbc_num_rows odbc_pconnect odbc_prepare odbc_primarykeys odbc_procedurecolumns odbc_procedures odbc_result_all odbc_result odbc_rollback odbc_setoption odbc_specialcolumns odbc_statistics odbc_tableprivileges odbc_tables	contained
-syn keyword	phpFunctions	openssl_csr_export_to_file openssl_csr_export openssl_csr_new openssl_csr_sign openssl_error_string openssl_free_key openssl_get_privatekey openssl_get_publickey openssl_open openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_seal openssl_sign openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_free openssl_x509_parse openssl_x509_read	contained
-syn keyword	phpFunctions	ora_bind ora_close ora_columnname ora_columnsize ora_columntype ora_commit ora_commitoff ora_commiton ora_do ora_error ora_errorcode ora_exec ora_fetch_into ora_fetch ora_getcolumn ora_logoff ora_logon ora_numcols ora_numrows ora_open ora_parse ora_plogon ora_rollback	contained
-syn keyword	phpFunctions	flush ob_clean ob_end_clean ob_end_flush ob_flush ob_get_clean ob_get_contents ob_get_flush ob_get_length ob_get_level ob_get_status ob_gzhandler ob_implicit_flush ob_list_handlers ob_start output_add_rewrite_var output_reset_rewrite_vars	contained
-syn keyword	phpFunctions	overload	contained
-syn keyword	phpFunctions	ovrimos_close ovrimos_commit ovrimos_connect ovrimos_cursor ovrimos_exec ovrimos_execute ovrimos_fetch_into ovrimos_fetch_row ovrimos_field_len ovrimos_field_name ovrimos_field_num ovrimos_field_type ovrimos_free_result ovrimos_longreadlen ovrimos_num_fields ovrimos_num_rows ovrimos_prepare ovrimos_result_all ovrimos_result ovrimos_rollback	contained
-syn keyword	phpFunctions	pcntl_exec pcntl_fork pcntl_signal pcntl_waitpid pcntl_wexitstatus pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig	contained
-syn keyword	phpFunctions	preg_grep preg_match_all preg_match preg_quote preg_replace_callback preg_replace preg_split	contained
-syn keyword	phpFunctions	pdf_add_annotation pdf_add_bookmark pdf_add_launchlink pdf_add_locallink pdf_add_note pdf_add_outline pdf_add_pdflink pdf_add_thumbnail pdf_add_weblink pdf_arc pdf_arcn pdf_attach_file pdf_begin_page pdf_begin_pattern pdf_begin_template pdf_circle pdf_clip pdf_close_image pdf_close_pdi_page pdf_close_pdi pdf_close pdf_closepath_fill_stroke pdf_closepath_stroke pdf_closepath pdf_concat pdf_continue_text pdf_curveto pdf_delete pdf_end_page pdf_end_pattern pdf_end_template pdf_endpath pdf_fill_stroke pdf_fill pdf_findfont pdf_get_buffer pdf_get_font pdf_get_fontname pdf_get_fontsize pdf_get_image_height pdf_get_image_width pdf_get_majorversion pdf_get_minorversion pdf_get_parameter pdf_get_pdi_parameter pdf_get_pdi_value pdf_get_value pdf_initgraphics pdf_lineto pdf_makespotcolor pdf_moveto pdf_new pdf_open_CCITT pdf_open_file pdf_open_gif pdf_open_image_file pdf_open_image pdf_open_jpeg pdf_open_memory_image pdf_open_pdi_page pdf_open_pdi pdf_open_png pdf_open_tiff pdf_open pdf_place_image pdf_place_pdi_page pdf_rect pdf_restore pdf_rotate pdf_save pdf_scale pdf_set_border_color pdf_set_border_dash pdf_set_border_style pdf_set_char_spacing pdf_set_duration pdf_set_font pdf_set_horiz_scaling pdf_set_info_author pdf_set_info_creator pdf_set_info_keywords pdf_set_info_subject pdf_set_info_title pdf_set_info pdf_set_leading pdf_set_parameter pdf_set_text_matrix pdf_set_text_pos pdf_set_text_rendering pdf_set_text_rise pdf_set_value pdf_set_word_spacing pdf_setcolor pdf_setdash pdf_setflat pdf_setfont pdf_setgray_fill pdf_setgray_stroke pdf_setgray pdf_setlinecap pdf_setlinejoin pdf_setlinewidth pdf_setmatrix pdf_setmiterlimit pdf_setpolydash pdf_setrgbcolor_fill pdf_setrgbcolor_stroke pdf_setrgbcolor pdf_show_boxed pdf_show_xy pdf_show pdf_skew pdf_stringwidth pdf_stroke pdf_translate	contained
-syn keyword	phpFunctions	pfpro_cleanup pfpro_init pfpro_process_raw pfpro_process pfpro_version	contained
-syn keyword	phpFunctions	pg_affected_rows pg_cancel_query pg_client_encoding pg_close pg_connect pg_connection_busy pg_connection_reset pg_connection_status pg_convert pg_copy_from pg_copy_to pg_dbname pg_delete pg_end_copy pg_escape_bytea pg_escape_string pg_fetch_all pg_fetch_array pg_fetch_assoc pg_fetch_object pg_fetch_result pg_fetch_row pg_field_is_null pg_field_name pg_field_num pg_field_prtlen pg_field_size pg_field_type pg_free_result pg_get_notify pg_get_pid pg_get_result pg_host pg_insert pg_last_error pg_last_notice pg_last_oid pg_lo_close pg_lo_create pg_lo_export pg_lo_import pg_lo_open pg_lo_read_all pg_lo_read pg_lo_seek pg_lo_tell pg_lo_unlink pg_lo_write pg_meta_data pg_num_fields pg_num_rows pg_options pg_pconnect pg_ping pg_port pg_put_line pg_query pg_result_error pg_result_seek pg_result_status pg_select pg_send_query pg_set_client_encoding pg_trace pg_tty pg_unescape_bytea pg_untrace pg_update	contained
-syn keyword	phpFunctions	posix_ctermid posix_get_last_error posix_getcwd posix_getegid posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid posix_isatty posix_kill posix_mkfifo posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid posix_setuid posix_strerror posix_times posix_ttyname posix_uname	contained
-syn keyword	phpFunctions	printer_abort printer_close printer_create_brush printer_create_dc printer_create_font printer_create_pen printer_delete_brush printer_delete_dc printer_delete_font printer_delete_pen printer_draw_bmp printer_draw_chord printer_draw_elipse printer_draw_line printer_draw_pie printer_draw_rectangle printer_draw_roundrect printer_draw_text printer_end_doc printer_end_page printer_get_option printer_list printer_logical_fontheight printer_open printer_select_brush printer_select_font printer_select_pen printer_set_option printer_start_doc printer_start_page printer_write	contained
-syn keyword	phpFunctions	pspell_add_to_personal pspell_add_to_session pspell_check pspell_clear_session pspell_config_create pspell_config_ignore pspell_config_mode pspell_config_personal pspell_config_repl pspell_config_runtogether pspell_config_save_repl pspell_new_config pspell_new_personal pspell_new pspell_save_wordlist pspell_store_replacement pspell_suggest	contained
-syn keyword	phpFunctions	qdom_error qdom_tree	contained
-syn keyword	phpFunctions	readline_add_history readline_clear_history readline_completion_function readline_info readline_list_history readline_read_history readline_write_history readline	contained
-syn keyword	phpFunctions	recode_file recode_string recode	contained
-syn keyword	phpFunctions	ereg_replace ereg eregi_replace eregi split spliti sql_regcase	contained
-syn keyword	phpFunctions	ftok msg_get_queue msg_receive msg_remove_queue msg_send msg_set_queue msg_stat_queue sem_acquire sem_get sem_release sem_remove shm_attach shm_detach shm_get_var shm_put_var shm_remove_var shm_remove	contained
-syn keyword	phpFunctions	sesam_affected_rows sesam_commit sesam_connect sesam_diagnostic sesam_disconnect sesam_errormsg sesam_execimm sesam_fetch_array sesam_fetch_result sesam_fetch_row sesam_field_array sesam_field_name sesam_free_result sesam_num_fields sesam_query sesam_rollback sesam_seek_row sesam_settransaction	contained
-syn keyword	phpFunctions	session_cache_expire session_cache_limiter session_decode session_destroy session_encode session_get_cookie_params session_id session_is_registered session_module_name session_name session_regenerate_id session_register session_save_path session_set_cookie_params session_set_save_handler session_start session_unregister session_unset session_write_close	contained
-syn keyword	phpFunctions	shmop_close shmop_delete shmop_open shmop_read shmop_size shmop_write	contained
-syn keyword	phpFunctions	snmp_get_quick_print snmp_set_quick_print snmpget snmprealwalk snmpset snmpwalk snmpwalkoid	contained
-syn keyword	phpFunctions	socket_accept socket_bind socket_clear_error socket_close socket_connect socket_create_listen socket_create_pair socket_create socket_get_option socket_getpeername socket_getsockname socket_iovec_add socket_iovec_alloc socket_iovec_delete socket_iovec_fetch socket_iovec_free socket_iovec_set socket_last_error socket_listen socket_read socket_readv socket_recv socket_recvfrom socket_recvmsg socket_select socket_send socket_sendmsg socket_sendto socket_set_block socket_set_nonblock socket_set_option socket_shutdown socket_strerror socket_write socket_writev	contained
-syn keyword	phpFunctions	sqlite_array_query sqlite_busy_timeout sqlite_changes sqlite_close sqlite_column sqlite_create_aggregate sqlite_create_function sqlite_current sqlite_error_string sqlite_escape_string sqlite_fetch_array sqlite_fetch_single sqlite_fetch_string sqlite_field_name sqlite_has_more sqlite_last_error sqlite_last_insert_rowid sqlite_libencoding sqlite_libversion sqlite_next sqlite_num_fields sqlite_num_rows sqlite_open sqlite_popen sqlite_query sqlite_rewind sqlite_seek sqlite_udf_decode_binary sqlite_udf_encode_binary sqlite_unbuffered_query	contained
-syn keyword	phpFunctions	stream_context_create stream_context_get_options stream_context_set_option stream_context_set_params stream_copy_to_stream stream_filter_append stream_filter_prepend stream_filter_register stream_get_contents stream_get_filters stream_get_line stream_get_meta_data stream_get_transports stream_get_wrappers stream_register_wrapper stream_select stream_set_blocking stream_set_timeout stream_set_write_buffer stream_socket_accept stream_socket_client stream_socket_get_name stream_socket_recvfrom stream_socket_sendto stream_socket_server stream_wrapper_register	contained
-syn keyword	phpFunctions	addcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string count_chars crc32 crypt echo explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str print printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vprintf vsprintf wordwrap	contained
-syn keyword	phpFunctions	swf_actiongeturl swf_actiongotoframe swf_actiongotolabel swf_actionnextframe swf_actionplay swf_actionprevframe swf_actionsettarget swf_actionstop swf_actiontogglequality swf_actionwaitforframe swf_addbuttonrecord swf_addcolor swf_closefile swf_definebitmap swf_definefont swf_defineline swf_definepoly swf_definerect swf_definetext swf_endbutton swf_enddoaction swf_endshape swf_endsymbol swf_fontsize swf_fontslant swf_fonttracking swf_getbitmapinfo swf_getfontinfo swf_getframe swf_labelframe swf_lookat swf_modifyobject swf_mulcolor swf_nextid swf_oncondition swf_openfile swf_ortho2 swf_ortho swf_perspective swf_placeobject swf_polarview swf_popmatrix swf_posround swf_pushmatrix swf_removeobject swf_rotate swf_scale swf_setfont swf_setframe swf_shapearc swf_shapecurveto3 swf_shapecurveto swf_shapefillbitmapclip swf_shapefillbitmaptile swf_shapefilloff swf_shapefillsolid swf_shapelinesolid swf_shapelineto swf_shapemoveto swf_showframe swf_startbutton swf_startdoaction swf_startshape swf_startsymbol swf_textwidth swf_translate swf_viewport	contained
-syn keyword	phpFunctions	sybase_affected_rows sybase_close sybase_connect sybase_data_seek sybase_deadlock_retry_count sybase_fetch_array sybase_fetch_assoc sybase_fetch_field sybase_fetch_object sybase_fetch_row sybase_field_seek sybase_free_result sybase_get_last_message sybase_min_client_severity sybase_min_error_severity sybase_min_message_severity sybase_min_server_severity sybase_num_fields sybase_num_rows sybase_pconnect sybase_query sybase_result sybase_select_db sybase_set_message_handler sybase_unbuffered_query	contained
-syn keyword	phpFunctions	tidy_access_count tidy_clean_repair tidy_config_count tidy_diagnose tidy_error_count tidy_get_body tidy_get_config tidy_get_error_buffer tidy_get_head tidy_get_html_ver tidy_get_html tidy_get_output tidy_get_release tidy_get_root tidy_get_status tidy_getopt tidy_is_xhtml tidy_load_config tidy_parse_file tidy_parse_string tidy_repair_file tidy_repair_string tidy_reset_config tidy_save_config tidy_set_encoding tidy_setopt tidy_warning_count	contained
-syn keyword	phpMethods	attributes children get_attr get_nodes has_children has_siblings is_asp is_comment is_html is_jsp is_jste is_text is_xhtml is_xml next prev tidy_node	contained
-syn keyword	phpFunctions	token_get_all token_name	contained
-syn keyword	phpFunctions	base64_decode base64_encode get_meta_tags http_build_query parse_url rawurldecode rawurlencode urldecode urlencode	contained
-syn keyword	phpFunctions	doubleval empty floatval get_defined_vars get_resource_type gettype import_request_variables intval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_null is_numeric is_object is_real is_resource is_scalar is_string isset print_r serialize settype strval unserialize unset var_dump var_export	contained
-syn keyword	phpFunctions	vpopmail_add_alias_domain_ex vpopmail_add_alias_domain vpopmail_add_domain_ex vpopmail_add_domain vpopmail_add_user vpopmail_alias_add vpopmail_alias_del_domain vpopmail_alias_del vpopmail_alias_get_all vpopmail_alias_get vpopmail_auth_user vpopmail_del_domain_ex vpopmail_del_domain vpopmail_del_user vpopmail_error vpopmail_passwd vpopmail_set_user_quota	contained
-syn keyword	phpFunctions	w32api_deftype w32api_init_dtype w32api_invoke_function w32api_register_function w32api_set_call_method	contained
-syn keyword	phpFunctions	wddx_add_vars wddx_deserialize wddx_packet_end wddx_packet_start wddx_serialize_value wddx_serialize_vars	contained
-syn keyword	phpFunctions	utf8_decode utf8_encode xml_error_string xml_get_current_byte_index xml_get_current_column_number xml_get_current_line_number xml_get_error_code xml_parse_into_struct xml_parse xml_parser_create_ns xml_parser_create xml_parser_free xml_parser_get_option xml_parser_set_option xml_set_character_data_handler xml_set_default_handler xml_set_element_handler xml_set_end_namespace_decl_handler xml_set_external_entity_ref_handler xml_set_notation_decl_handler xml_set_object xml_set_processing_instruction_handler xml_set_start_namespace_decl_handler xml_set_unparsed_entity_decl_handler	contained
-syn keyword	phpFunctions	xmlrpc_decode_request xmlrpc_decode xmlrpc_encode_request xmlrpc_encode xmlrpc_get_type xmlrpc_parse_method_descriptions xmlrpc_server_add_introspection_data xmlrpc_server_call_method xmlrpc_server_create xmlrpc_server_destroy xmlrpc_server_register_introspection_callback xmlrpc_server_register_method xmlrpc_set_type	contained
-syn keyword	phpFunctions	xslt_create xslt_errno xslt_error xslt_free xslt_output_process xslt_set_base xslt_set_encoding xslt_set_error_handler xslt_set_log xslt_set_sax_handler xslt_set_sax_handlers xslt_set_scheme_handler xslt_set_scheme_handlers	contained
-syn keyword	phpFunctions	yaz_addinfo yaz_ccl_conf yaz_ccl_parse yaz_close yaz_connect yaz_database yaz_element yaz_errno yaz_error yaz_es_result yaz_get_option yaz_hits yaz_itemorder yaz_present yaz_range yaz_record yaz_scan_result yaz_scan yaz_schema yaz_search yaz_set_option yaz_sort yaz_syntax yaz_wait	contained
-syn keyword	phpFunctions	zip_close zip_entry_close zip_entry_compressedsize zip_entry_compressionmethod zip_entry_filesize zip_entry_name zip_entry_open zip_entry_read zip_open zip_read	contained
-syn keyword	phpFunctions	gzclose gzcompress gzdeflate gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell gzuncompress gzwrite readgzfile zlib_get_coding_type	contained
+syn keyword phpFunctions  apache_child_terminate apache_get_modules apache_get_version apache_getenv apache_lookup_uri apache_note apache_request_headers apache_response_headers apache_setenv ascii2ebcdic ebcdic2ascii getallheaders virtual contained
+syn keyword phpFunctions  array_change_key_case array_chunk array_combine array_count_values array_diff_assoc array_diff_uassoc array_diff array_fill array_filter array_flip array_intersect_assoc array_intersect array_key_exists array_keys array_map array_merge_recursive array_merge array_multisort array_pad array_pop array_push array_rand array_reduce array_reverse array_search array_shift array_slice array_splice array_sum array_udiff_assoc array_udiff_uassoc array_udiff array_unique array_unshift array_values array_walk array arsort asort compact count current each end extract in_array key krsort ksort list natcasesort natsort next pos prev range reset rsort shuffle sizeof sort uasort uksort usort contained
+syn keyword phpFunctions  aspell_check aspell_new aspell_suggest  contained
+syn keyword phpFunctions  bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub  contained
+syn keyword phpFunctions  bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite  contained
+syn keyword phpFunctions  cal_days_in_month cal_from_jd cal_info cal_to_jd easter_date easter_days frenchtojd gregoriantojd jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd juliantojd unixtojd  contained
+syn keyword phpFunctions  ccvs_add ccvs_auth ccvs_command ccvs_count ccvs_delete ccvs_done ccvs_init ccvs_lookup ccvs_new ccvs_report ccvs_return ccvs_reverse ccvs_sale ccvs_status ccvs_textvalue ccvs_void contained
+syn keyword phpFunctions  call_user_method_array call_user_method class_exists get_class_methods get_class_vars get_class get_declared_classes get_object_vars get_parent_class is_a is_subclass_of method_exists contained
+syn keyword phpFunctions  com VARIANT com_addref com_get com_invoke com_isenum com_load_typelib com_load com_propget com_propput com_propset com_release com_set  contained
+syn keyword phpFunctions  cpdf_add_annotation cpdf_add_outline cpdf_arc cpdf_begin_text cpdf_circle cpdf_clip cpdf_close cpdf_closepath_fill_stroke cpdf_closepath_stroke cpdf_closepath cpdf_continue_text cpdf_curveto cpdf_end_text cpdf_fill_stroke cpdf_fill cpdf_finalize_page cpdf_finalize cpdf_global_set_document_limits cpdf_import_jpeg cpdf_lineto cpdf_moveto cpdf_newpath cpdf_open cpdf_output_buffer cpdf_page_init cpdf_place_inline_image cpdf_rect cpdf_restore cpdf_rlineto cpdf_rmoveto cpdf_rotate_text cpdf_rotate cpdf_save_to_file cpdf_save cpdf_scale cpdf_set_action_url cpdf_set_char_spacing cpdf_set_creator cpdf_set_current_page cpdf_set_font_directories cpdf_set_font_map_file cpdf_set_font cpdf_set_horiz_scaling cpdf_set_keywords cpdf_set_leading cpdf_set_page_animation cpdf_set_subject cpdf_set_text_matrix cpdf_set_text_pos cpdf_set_text_rendering cpdf_set_text_rise cpdf_set_title cpdf_set_viewer_preferences cpdf_set_word_spacing cpdf_setdash cpdf_setflat cpdf_setgray_fill cpdf_setgray_stroke cpdf_setgray cpdf_setlinecap cpdf_setlinejoin cpdf_setlinewidth cpdf_setmiterlimit cpdf_setrgbcolor_fill cpdf_setrgbcolor_stroke cpdf_setrgbcolor cpdf_show_xy cpdf_show cpdf_stringwidth cpdf_stroke cpdf_text cpdf_translate  contained
+syn keyword phpFunctions  crack_check crack_closedict crack_getlastmessage crack_opendict contained
+syn keyword phpFunctions  ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_graph ctype_lower ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit  contained
+syn keyword phpFunctions  curl_close curl_errno curl_error curl_exec curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_setopt curl_version contained
+syn keyword phpFunctions  cybercash_base64_decode cybercash_base64_encode cybercash_decr cybercash_encr contained
+syn keyword phpFunctions  cyrus_authenticate cyrus_bind cyrus_close cyrus_connect cyrus_query cyrus_unbind  contained
+syn keyword phpFunctions  checkdate date getdate gettimeofday gmdate gmmktime gmstrftime localtime microtime mktime strftime strtotime time contained
+syn keyword phpFunctions  dba_close dba_delete dba_exists dba_fetch dba_firstkey dba_handlers dba_insert dba_key_split dba_list dba_nextkey dba_open dba_optimize dba_popen dba_replace dba_sync  contained
+syn keyword phpFunctions  dbase_add_record dbase_close dbase_create dbase_delete_record dbase_get_header_info dbase_get_record_with_names dbase_get_record dbase_numfields dbase_numrecords dbase_open dbase_pack dbase_replace_record  contained
+syn keyword phpFunctions  dblist dbmclose dbmdelete dbmexists dbmfetch dbmfirstkey dbminsert dbmnextkey dbmopen dbmreplace  contained
+syn keyword phpFunctions  dbplus_add dbplus_aql dbplus_chdir dbplus_close dbplus_curr dbplus_errcode dbplus_errno dbplus_find dbplus_first dbplus_flush dbplus_freealllocks dbplus_freelock dbplus_freerlocks dbplus_getlock dbplus_getunique dbplus_info dbplus_last dbplus_lockrel dbplus_next dbplus_open dbplus_prev dbplus_rchperm dbplus_rcreate dbplus_rcrtexact dbplus_rcrtlike dbplus_resolve dbplus_restorepos dbplus_rkeys dbplus_ropen dbplus_rquery dbplus_rrename dbplus_rsecindex dbplus_runlink dbplus_rzap dbplus_savepos dbplus_setindex dbplus_setindexbynumber dbplus_sql dbplus_tcl dbplus_tremove dbplus_undo dbplus_undoprepare dbplus_unlockrel dbplus_unselect dbplus_update dbplus_xlockrel dbplus_xunlockrel contained
+syn keyword phpFunctions  dbx_close dbx_compare dbx_connect dbx_error dbx_escape_string dbx_fetch_row dbx_query dbx_sort  contained
+syn keyword phpFunctions  dio_close dio_fcntl dio_open dio_read dio_seek dio_stat dio_tcsetattr dio_truncate dio_write  contained
+syn keyword phpFunctions  chdir chroot dir closedir getcwd opendir readdir rewinddir scandir  contained
+syn keyword phpFunctions  domxml_new_doc domxml_open_file domxml_open_mem domxml_version domxml_xmltree domxml_xslt_stylesheet_doc domxml_xslt_stylesheet_file domxml_xslt_stylesheet xpath_eval_expression xpath_eval xpath_new_context xptr_eval xptr_new_context contained
+syn keyword phpMethods  name specified value create_attribute create_cdata_section create_comment create_element_ns create_element create_entity_reference create_processing_instruction create_text_node doctype document_element dump_file dump_mem get_element_by_id get_elements_by_tagname html_dump_mem xinclude entities internal_subset name notations public_id system_id get_attribute_node get_attribute get_elements_by_tagname has_attribute remove_attribute set_attribute tagname add_namespace append_child append_sibling attributes child_nodes clone_node dump_node first_child get_content has_attributes has_child_nodes insert_before is_blank_node last_child next_sibling node_name node_type node_value owner_document parent_node prefix previous_sibling remove_child replace_child replace_node set_content set_name set_namespace unlink_node data target process result_dump_file result_dump_mem contained
+syn keyword phpFunctions  dotnet_load contained
+syn keyword phpFunctions  debug_backtrace debug_print_backtrace error_log error_reporting restore_error_handler set_error_handler trigger_error user_error  contained
+syn keyword phpFunctions  escapeshellarg escapeshellcmd exec passthru proc_close proc_get_status proc_nice proc_open proc_terminate shell_exec system contained
+syn keyword phpFunctions  fam_cancel_monitor fam_close fam_monitor_collection fam_monitor_directory fam_monitor_file fam_next_event fam_open fam_pending fam_resume_monitor fam_suspend_monitor contained
+syn keyword phpFunctions  fbsql_affected_rows fbsql_autocommit fbsql_change_user fbsql_close fbsql_commit fbsql_connect fbsql_create_blob fbsql_create_clob fbsql_create_db fbsql_data_seek fbsql_database_password fbsql_database fbsql_db_query fbsql_db_status fbsql_drop_db fbsql_errno fbsql_error fbsql_fetch_array fbsql_fetch_assoc fbsql_fetch_field fbsql_fetch_lengths fbsql_fetch_object fbsql_fetch_row fbsql_field_flags fbsql_field_len fbsql_field_name fbsql_field_seek fbsql_field_table fbsql_field_type fbsql_free_result fbsql_get_autostart_info fbsql_hostname fbsql_insert_id fbsql_list_dbs fbsql_list_fields fbsql_list_tables fbsql_next_result fbsql_num_fields fbsql_num_rows fbsql_password fbsql_pconnect fbsql_query fbsql_read_blob fbsql_read_clob fbsql_result fbsql_rollback fbsql_select_db fbsql_set_lob_mode fbsql_set_transaction fbsql_start_db fbsql_stop_db fbsql_tablename fbsql_username fbsql_warnings  contained
+syn keyword phpFunctions  fdf_add_doc_javascript fdf_add_template fdf_close fdf_create fdf_enum_values fdf_errno fdf_error fdf_get_ap fdf_get_attachment fdf_get_encoding fdf_get_file fdf_get_flags fdf_get_opt fdf_get_status fdf_get_value fdf_get_version fdf_header fdf_next_field_name fdf_open_string fdf_open fdf_remove_item fdf_save_string fdf_save fdf_set_ap fdf_set_encoding fdf_set_file fdf_set_flags fdf_set_javascript_action fdf_set_opt fdf_set_status fdf_set_submit_form_action fdf_set_target_frame fdf_set_value fdf_set_version  contained
+syn keyword phpFunctions  filepro_fieldcount filepro_fieldname filepro_fieldtype filepro_fieldwidth filepro_retrieve filepro_rowcount filepro contained
+syn keyword phpFunctions  basename chgrp chmod chown clearstatcache copy delete dirname disk_free_space disk_total_space diskfreespace fclose feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents file fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype flock fnmatch fopen fpassthru fputs fread fscanf fseek fstat ftell ftruncate fwrite glob is_dir is_executable is_file is_link is_readable is_uploaded_file is_writable is_writeable link linkinfo lstat mkdir move_uploaded_file parse_ini_file pathinfo pclose popen readfile readlink realpath rename rewind rmdir set_file_buffer stat symlink tempnam tmpfile touch umask unlink  contained
+syn keyword phpFunctions  fribidi_log2vis contained
+syn keyword phpFunctions  ftp_alloc ftp_cdup ftp_chdir ftp_chmod ftp_close ftp_connect ftp_delete ftp_exec ftp_fget ftp_fput ftp_get_option ftp_get ftp_login ftp_mdtm ftp_mkdir ftp_nb_continue ftp_nb_fget ftp_nb_fput ftp_nb_get ftp_nb_put ftp_nlist ftp_pasv ftp_put ftp_pwd ftp_quit ftp_raw ftp_rawlist ftp_rename ftp_rmdir ftp_set_option ftp_site ftp_size ftp_ssl_connect ftp_systype  contained
+syn keyword phpFunctions  call_user_func_array call_user_func create_function func_get_arg func_get_args func_num_args function_exists get_defined_functions register_shutdown_function register_tick_function unregister_tick_function contained
+syn keyword phpFunctions  bind_textdomain_codeset bindtextdomain dcgettext dcngettext dgettext dngettext gettext ngettext textdomain  contained
+syn keyword phpFunctions  gmp_abs gmp_add gmp_and gmp_clrbit gmp_cmp gmp_com gmp_div_q gmp_div_qr gmp_div_r gmp_div gmp_divexact gmp_fact gmp_gcd gmp_gcdext gmp_hamdist gmp_init gmp_intval gmp_invert gmp_jacobi gmp_legendre gmp_mod gmp_mul gmp_neg gmp_or gmp_perfect_square gmp_popcount gmp_pow gmp_powm gmp_prob_prime gmp_random gmp_scan0 gmp_scan1 gmp_setbit gmp_sign gmp_sqrt gmp_sqrtrem gmp_sqrtrm gmp_strval gmp_sub gmp_xor  contained
+syn keyword phpFunctions  header headers_list headers_sent setcookie  contained
+syn keyword phpFunctions  hw_api_attribute hwapi_hgcsp hw_api_content hw_api_object contained
+syn keyword phpMethods  key langdepvalue value values checkin checkout children mimetype read content copy dbstat dcstat dstanchors dstofsrcanchors count reason find ftstat hwstat identify info insert insertanchor insertcollection insertdocument link lock move assign attreditable count insert remove title value object objectbyanchor parents description type remove replace setcommitedversion srcanchors srcsofdst unlock user userlist contained
+syn keyword phpFunctions  hw_Array2Objrec hw_changeobject hw_Children hw_ChildrenObj hw_Close hw_Connect hw_connection_info hw_cp hw_Deleteobject hw_DocByAnchor hw_DocByAnchorObj hw_Document_Attributes hw_Document_BodyTag hw_Document_Content hw_Document_SetContent hw_Document_Size hw_dummy hw_EditText hw_Error hw_ErrorMsg hw_Free_Document hw_GetAnchors hw_GetAnchorsObj hw_GetAndLock hw_GetChildColl hw_GetChildCollObj hw_GetChildDocColl hw_GetChildDocCollObj hw_GetObject hw_GetObjectByQuery hw_GetObjectByQueryColl hw_GetObjectByQueryCollObj hw_GetObjectByQueryObj hw_GetParents hw_GetParentsObj hw_getrellink hw_GetRemote hw_getremotechildren hw_GetSrcByDestObj hw_GetText hw_getusername hw_Identify hw_InCollections hw_Info hw_InsColl hw_InsDoc hw_insertanchors hw_InsertDocument hw_InsertObject hw_mapid hw_Modifyobject hw_mv hw_New_Document hw_objrec2array hw_Output_Document hw_pConnect hw_PipeDocument hw_Root hw_setlinkroot hw_stat hw_Unlock hw_Who contained
+syn keyword phpFunctions  ibase_add_user ibase_affected_rows ibase_blob_add ibase_blob_cancel ibase_blob_close ibase_blob_create ibase_blob_echo ibase_blob_get ibase_blob_import ibase_blob_info ibase_blob_open ibase_close ibase_commit_ret ibase_commit ibase_connect ibase_delete_user ibase_drop_db ibase_errcode ibase_errmsg ibase_execute ibase_fetch_assoc ibase_fetch_object ibase_fetch_row ibase_field_info ibase_free_event_handler ibase_free_query ibase_free_result ibase_gen_id ibase_modify_user ibase_name_result ibase_num_fields ibase_num_params ibase_param_info ibase_pconnect ibase_prepare ibase_query ibase_rollback_ret ibase_rollback ibase_set_event_handler ibase_timefmt ibase_trans ibase_wait_event  contained
+syn keyword phpFunctions  iconv_get_encoding iconv_mime_decode_headers iconv_mime_decode iconv_mime_encode iconv_set_encoding iconv_strlen iconv_strpos iconv_strrpos iconv_substr iconv ob_iconv_handler contained
+syn keyword phpFunctions  ifx_affected_rows ifx_blobinfile_mode ifx_byteasvarchar ifx_close ifx_connect ifx_copy_blob ifx_create_blob ifx_create_char ifx_do ifx_error ifx_errormsg ifx_fetch_row ifx_fieldproperties ifx_fieldtypes ifx_free_blob ifx_free_char ifx_free_result ifx_get_blob ifx_get_char ifx_getsqlca ifx_htmltbl_result ifx_nullformat ifx_num_fields ifx_num_rows ifx_pconnect ifx_prepare ifx_query ifx_textasvarchar ifx_update_blob ifx_update_char ifxus_close_slob ifxus_create_slob ifxus_free_slob ifxus_open_slob ifxus_read_slob ifxus_seek_slob ifxus_tell_slob ifxus_write_slob  contained
+syn keyword phpFunctions  exif_imagetype exif_read_data exif_thumbnail gd_info getimagesize image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imageinterlace imageistruecolor imagejpeg imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepscopyfont imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp iptcembed iptcparse jpeg2wbmp png2wbmp read_exif_data contained
+syn keyword phpFunctions  imap_8bit imap_alerts imap_append imap_base64 imap_binary imap_body imap_bodystruct imap_check imap_clearflag_full imap_close imap_createmailbox imap_delete imap_deletemailbox imap_errors imap_expunge imap_fetch_overview imap_fetchbody imap_fetchheader imap_fetchstructure imap_get_quota imap_get_quotaroot imap_getacl imap_getmailboxes imap_getsubscribed imap_header imap_headerinfo imap_headers imap_last_error imap_list imap_listmailbox imap_listscan imap_listsubscribed imap_lsub imap_mail_compose imap_mail_copy imap_mail_move imap_mail imap_mailboxmsginfo imap_mime_header_decode imap_msgno imap_num_msg imap_num_recent imap_open imap_ping imap_qprint imap_renamemailbox imap_reopen imap_rfc822_parse_adrlist imap_rfc822_parse_headers imap_rfc822_write_address imap_scanmailbox imap_search imap_set_quota imap_setacl imap_setflag_full imap_sort imap_status imap_subscribe imap_thread imap_timeout imap_uid imap_undelete imap_unsubscribe imap_utf7_decode imap_utf7_encode imap_utf8  contained
+syn keyword phpFunctions  assert_options assert dl extension_loaded get_cfg_var get_current_user get_defined_constants get_extension_funcs get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime get_required_files getenv getlastmod getmygid getmyinode getmypid getmyuid getopt getrusage ini_alter ini_get_all ini_get ini_restore ini_set main memory_get_usage php_ini_scanned_files php_logo_guid php_sapi_name php_uname phpcredits phpinfo phpversion putenv restore_include_path set_include_path set_magic_quotes_runtime set_time_limit version_compare zend_logo_guid zend_version contained
+syn keyword phpFunctions  ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback  contained
+syn keyword phpFunctions  ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois  contained
+syn keyword phpFunctions  java_last_exception_clear java_last_exception_get contained
+syn keyword phpFunctions  ldap_8859_to_t61 ldap_add ldap_bind ldap_close ldap_compare ldap_connect ldap_count_entries ldap_delete ldap_dn2ufn ldap_err2str ldap_errno ldap_error ldap_explode_dn ldap_first_attribute ldap_first_entry ldap_first_reference ldap_free_result ldap_get_attributes ldap_get_dn ldap_get_entries ldap_get_option ldap_get_values_len ldap_get_values ldap_list ldap_mod_add ldap_mod_del ldap_mod_replace ldap_modify ldap_next_attribute ldap_next_entry ldap_next_reference ldap_parse_reference ldap_parse_result ldap_read ldap_rename ldap_search ldap_set_option ldap_set_rebind_proc ldap_sort ldap_start_tls ldap_t61_to_8859 ldap_unbind  contained
+syn keyword phpFunctions  lzf_compress lzf_decompress lzf_optimized_for contained
+syn keyword phpFunctions  ezmlm_hash mail contained
+syn keyword phpFunctions  mailparse_determine_best_xfer_encoding mailparse_msg_create mailparse_msg_extract_part_file mailparse_msg_extract_part mailparse_msg_free mailparse_msg_get_part_data mailparse_msg_get_part mailparse_msg_get_structure mailparse_msg_parse_file mailparse_msg_parse mailparse_rfc822_parse_addresses mailparse_stream_encode mailparse_uudecode_all contained
+syn keyword phpFunctions  abs acos acosh asin asinh atan2 atan atanh base_convert bindec ceil cos cosh decbin dechex decoct deg2rad exp expm1 floor fmod getrandmax hexdec hypot is_finite is_infinite is_nan lcg_value log10 log1p log max min mt_getrandmax mt_rand mt_srand octdec pi pow rad2deg rand round sin sinh sqrt srand tan tanh  contained
+syn keyword phpFunctions  mb_convert_case mb_convert_encoding mb_convert_kana mb_convert_variables mb_decode_mimeheader mb_decode_numericentity mb_detect_encoding mb_detect_order mb_encode_mimeheader mb_encode_numericentity mb_ereg_match mb_ereg_replace mb_ereg_search_getpos mb_ereg_search_getregs mb_ereg_search_init mb_ereg_search_pos mb_ereg_search_regs mb_ereg_search_setpos mb_ereg_search mb_ereg mb_eregi_replace mb_eregi mb_get_info mb_http_input mb_http_output mb_internal_encoding mb_language mb_output_handler mb_parse_str mb_preferred_mime_name mb_regex_encoding mb_regex_set_options mb_send_mail mb_split mb_strcut mb_strimwidth mb_strlen mb_strpos mb_strrpos mb_strtolower mb_strtoupper mb_strwidth mb_substitute_character mb_substr_count mb_substr  contained
+syn keyword phpFunctions  mcal_append_event mcal_close mcal_create_calendar mcal_date_compare mcal_date_valid mcal_day_of_week mcal_day_of_year mcal_days_in_month mcal_delete_calendar mcal_delete_event mcal_event_add_attribute mcal_event_init mcal_event_set_alarm mcal_event_set_category mcal_event_set_class mcal_event_set_description mcal_event_set_end mcal_event_set_recur_daily mcal_event_set_recur_monthly_mday mcal_event_set_recur_monthly_wday mcal_event_set_recur_none mcal_event_set_recur_weekly mcal_event_set_recur_yearly mcal_event_set_start mcal_event_set_title mcal_expunge mcal_fetch_current_stream_event mcal_fetch_event mcal_is_leap_year mcal_list_alarms mcal_list_events mcal_next_recurrence mcal_open mcal_popen mcal_rename_calendar mcal_reopen mcal_snooze mcal_store_event mcal_time_valid mcal_week_of_year contained
+syn keyword phpFunctions  mcrypt_cbc mcrypt_cfb mcrypt_create_iv mcrypt_decrypt mcrypt_ecb mcrypt_enc_get_algorithms_name mcrypt_enc_get_block_size mcrypt_enc_get_iv_size mcrypt_enc_get_key_size mcrypt_enc_get_modes_name mcrypt_enc_get_supported_key_sizes mcrypt_enc_is_block_algorithm_mode mcrypt_enc_is_block_algorithm mcrypt_enc_is_block_mode mcrypt_enc_self_test mcrypt_encrypt mcrypt_generic_deinit mcrypt_generic_end mcrypt_generic_init mcrypt_generic mcrypt_get_block_size mcrypt_get_cipher_name mcrypt_get_iv_size mcrypt_get_key_size mcrypt_list_algorithms mcrypt_list_modes mcrypt_module_close mcrypt_module_get_algo_block_size mcrypt_module_get_algo_key_size mcrypt_module_get_supported_key_sizes mcrypt_module_is_block_algorithm_mode mcrypt_module_is_block_algorithm mcrypt_module_is_block_mode mcrypt_module_open mcrypt_module_self_test mcrypt_ofb mdecrypt_generic  contained
+syn keyword phpFunctions  mcve_adduser mcve_adduserarg mcve_bt mcve_checkstatus mcve_chkpwd mcve_chngpwd mcve_completeauthorizations mcve_connect mcve_connectionerror mcve_deleteresponse mcve_deletetrans mcve_deleteusersetup mcve_deluser mcve_destroyconn mcve_destroyengine mcve_disableuser mcve_edituser mcve_enableuser mcve_force mcve_getcell mcve_getcellbynum mcve_getcommadelimited mcve_getheader mcve_getuserarg mcve_getuserparam mcve_gft mcve_gl mcve_gut mcve_initconn mcve_initengine mcve_initusersetup mcve_iscommadelimited mcve_liststats mcve_listusers mcve_maxconntimeout mcve_monitor mcve_numcolumns mcve_numrows mcve_override mcve_parsecommadelimited mcve_ping mcve_preauth mcve_preauthcompletion mcve_qc mcve_responseparam mcve_return mcve_returncode mcve_returnstatus mcve_sale mcve_setblocking mcve_setdropfile mcve_setip mcve_setssl_files mcve_setssl mcve_settimeout mcve_settle mcve_text_avs mcve_text_code mcve_text_cv mcve_transactionauth mcve_transactionavs mcve_transactionbatch mcve_transactioncv mcve_transactionid mcve_transactionitem mcve_transactionssent mcve_transactiontext mcve_transinqueue mcve_transnew mcve_transparam mcve_transsend mcve_ub mcve_uwait mcve_verifyconnection mcve_verifysslcert mcve_void  contained
+syn keyword phpFunctions  mhash_count mhash_get_block_size mhash_get_hash_name mhash_keygen_s2k mhash contained
+syn keyword phpFunctions  mime_content_type contained
+syn keyword phpFunctions  ming_setcubicthreshold ming_setscale ming_useswfversion SWFAction SWFBitmap swfbutton_keypress SWFbutton SWFDisplayItem SWFFill SWFFont SWFGradient SWFMorph SWFMovie SWFShape SWFSprite SWFText SWFTextField contained
+syn keyword phpMethods  getHeight getWidth addAction addShape setAction setdown setHit setOver setUp addColor move moveTo multColor remove Rotate rotateTo scale scaleTo setDepth setName setRatio skewX skewXTo skewY skewYTo moveTo rotateTo scaleTo skewXTo skewYTo getwidth addEntry getshape1 getshape2 add nextframe output remove save setbackground setdimension setframes setrate streammp3 addFill drawCurve drawCurveTo drawLine drawLineTo movePen movePenTo setLeftFill setLine setRightFill add nextframe remove setframes addString getWidth moveTo setColor setFont setHeight setSpacing addstring align setbounds setcolor setFont setHeight setindentation setLeftMargin setLineSpacing setMargins setname setrightMargin contained
+syn keyword phpFunctions  connection_aborted connection_status connection_timeout constant define defined die eval exit get_browser highlight_file highlight_string ignore_user_abort pack show_source sleep uniqid unpack usleep contained
+syn keyword phpFunctions  udm_add_search_limit udm_alloc_agent udm_api_version udm_cat_list udm_cat_path udm_check_charset udm_check_stored udm_clear_search_limits udm_close_stored udm_crc32 udm_errno udm_error udm_find udm_free_agent udm_free_ispell_data udm_free_res udm_get_doc_count udm_get_res_field udm_get_res_param udm_load_ispell_data udm_open_stored udm_set_agent_param contained
+syn keyword phpFunctions  msession_connect msession_count msession_create msession_destroy msession_disconnect msession_find msession_get_array msession_get msession_getdata msession_inc msession_list msession_listvar msession_lock msession_plugin msession_randstr msession_set_array msession_set msession_setdata msession_timeout msession_uniq msession_unlock  contained
+syn keyword phpFunctions  msql_affected_rows msql_close msql_connect msql_create_db msql_createdb msql_data_seek msql_dbname msql_drop_db msql_dropdb msql_error msql_fetch_array msql_fetch_field msql_fetch_object msql_fetch_row msql_field_seek msql_fieldflags msql_fieldlen msql_fieldname msql_fieldtable msql_fieldtype msql_free_result msql_freeresult msql_list_dbs msql_list_fields msql_list_tables msql_listdbs msql_listfields msql_listtables msql_num_fields msql_num_rows msql_numfields msql_numrows msql_pconnect msql_query msql_regcase msql_result msql_select_db msql_selectdb msql_tablename msql  contained
+syn keyword phpFunctions  mssql_bind mssql_close mssql_connect mssql_data_seek mssql_execute mssql_fetch_array mssql_fetch_assoc mssql_fetch_batch mssql_fetch_field mssql_fetch_object mssql_fetch_row mssql_field_length mssql_field_name mssql_field_seek mssql_field_type mssql_free_result mssql_free_statement mssql_get_last_message mssql_guid_string mssql_init mssql_min_error_severity mssql_min_message_severity mssql_next_result mssql_num_fields mssql_num_rows mssql_pconnect mssql_query mssql_result mssql_rows_affected mssql_select_db  contained
+syn keyword phpFunctions  muscat_close muscat_get muscat_give muscat_setup_net muscat_setup contained
+syn keyword phpFunctions  mysql_affected_rows mysql_change_user mysql_client_encoding mysql_close mysql_connect mysql_create_db mysql_data_seek mysql_db_name mysql_db_query mysql_drop_db mysql_errno mysql_error mysql_escape_string mysql_fetch_array mysql_fetch_assoc mysql_fetch_field mysql_fetch_lengths mysql_fetch_object mysql_fetch_row mysql_field_flags mysql_field_len mysql_field_name mysql_field_seek mysql_field_table mysql_field_type mysql_free_result mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql_insert_id mysql_list_dbs mysql_list_fields mysql_list_processes mysql_list_tables mysql_num_fields mysql_num_rows mysql_pconnect mysql_ping mysql_query mysql_real_escape_string mysql_result mysql_select_db mysql_stat mysql_tablename mysql_thread_id mysql_unbuffered_query  contained
+syn keyword phpFunctions  mysqli_affected_rows mysqli_autocommit mysqli_bind_param mysqli_bind_result mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect mysqli_data_seek mysqli_debug mysqli_disable_reads_from_master mysqli_disable_rpl_parse mysqli_dump_debug_info mysqli_enable_reads_from_master mysqli_enable_rpl_parse mysqli_errno mysqli_error mysqli_execute mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_fetch mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_client_info mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_master_query mysqli_num_fields mysqli_num_rows mysqli_options mysqli_param_count mysqli_ping mysqli_prepare_result mysqli_prepare mysqli_profiler mysqli_query mysqli_read_query_result mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reload mysqli_rollback mysqli_rpl_parse_enabled mysqli_rpl_probe mysqli_rpl_query_type mysqli_select_db mysqli_send_long_data mysqli_send_query mysqli_slave_query mysqli_ssl_set mysqli_stat mysqli_stmt_affected_rows mysqli_stmt_close mysqli_stmt_errno mysqli_stmt_error mysqli_stmt_store_result mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count  contained
+syn keyword phpFunctions  ncurses_addch ncurses_addchnstr ncurses_addchstr ncurses_addnstr ncurses_addstr ncurses_assume_default_colors ncurses_attroff ncurses_attron ncurses_attrset ncurses_baudrate ncurses_beep ncurses_bkgd ncurses_bkgdset ncurses_border ncurses_bottom_panel ncurses_can_change_color ncurses_cbreak ncurses_clear ncurses_clrtobot ncurses_clrtoeol ncurses_color_content ncurses_color_set ncurses_curs_set ncurses_def_prog_mode ncurses_def_shell_mode ncurses_define_key ncurses_del_panel ncurses_delay_output ncurses_delch ncurses_deleteln ncurses_delwin ncurses_doupdate ncurses_echo ncurses_echochar ncurses_end ncurses_erase ncurses_erasechar ncurses_filter ncurses_flash ncurses_flushinp ncurses_getch ncurses_getmaxyx ncurses_getmouse ncurses_getyx ncurses_halfdelay ncurses_has_colors ncurses_has_ic ncurses_has_il ncurses_has_key ncurses_hide_panel ncurses_hline ncurses_inch ncurses_init_color ncurses_init_pair ncurses_init ncurses_insch ncurses_insdelln ncurses_insertln ncurses_insstr ncurses_instr ncurses_isendwin ncurses_keyok ncurses_keypad ncurses_killchar ncurses_longname ncurses_meta ncurses_mouse_trafo ncurses_mouseinterval ncurses_mousemask ncurses_move_panel ncurses_move ncurses_mvaddch ncurses_mvaddchnstr ncurses_mvaddchstr ncurses_mvaddnstr ncurses_mvaddstr ncurses_mvcur ncurses_mvdelch ncurses_mvgetch ncurses_mvhline ncurses_mvinch ncurses_mvvline ncurses_mvwaddstr ncurses_napms ncurses_new_panel ncurses_newpad ncurses_newwin ncurses_nl ncurses_nocbreak ncurses_noecho ncurses_nonl ncurses_noqiflush ncurses_noraw ncurses_pair_content ncurses_panel_above ncurses_panel_below ncurses_panel_window ncurses_pnoutrefresh ncurses_prefresh ncurses_putp ncurses_qiflush ncurses_raw ncurses_refresh ncurses_replace_panel ncurses_reset_prog_mode ncurses_reset_shell_mode ncurses_resetty ncurses_savetty ncurses_scr_dump ncurses_scr_init ncurses_scr_restore ncurses_scr_set ncurses_scrl ncurses_show_panel ncurses_slk_attr ncurses_slk_attroff ncurses_slk_attron ncurses_slk_attrset ncurses_slk_clear ncurses_slk_color ncurses_slk_init ncurses_slk_noutrefresh ncurses_slk_refresh ncurses_slk_restore ncurses_slk_set ncurses_slk_touch ncurses_standend ncurses_standout ncurses_start_color ncurses_termattrs ncurses_termname ncurses_timeout ncurses_top_panel ncurses_typeahead ncurses_ungetch ncurses_ungetmouse ncurses_update_panels ncurses_use_default_colors ncurses_use_env ncurses_use_extended_names ncurses_vidattr ncurses_vline ncurses_waddch ncurses_waddstr ncurses_wattroff ncurses_wattron ncurses_wattrset ncurses_wborder ncurses_wclear ncurses_wcolor_set ncurses_werase ncurses_wgetch ncurses_whline ncurses_wmouse_trafo ncurses_wmove ncurses_wnoutrefresh ncurses_wrefresh ncurses_wstandend ncurses_wstandout ncurses_wvline contained
+syn keyword phpFunctions  checkdnsrr closelog debugger_off debugger_on define_syslog_variables dns_check_record dns_get_mx dns_get_record fsockopen gethostbyaddr gethostbyname gethostbynamel getmxrr getprotobyname getprotobynumber getservbyname getservbyport ip2long long2ip openlog pfsockopen socket_get_status socket_set_blocking socket_set_timeout syslog contained
+syn keyword phpFunctions  yp_all yp_cat yp_err_string yp_errno yp_first yp_get_default_domain yp_master yp_match yp_next yp_order contained
+syn keyword phpFunctions  notes_body notes_copy_db notes_create_db notes_create_note notes_drop_db notes_find_note notes_header_info notes_list_msgs notes_mark_read notes_mark_unread notes_nav_create notes_search notes_unread notes_version contained
+syn keyword phpFunctions  nsapi_request_headers nsapi_response_headers nsapi_virtual  contained
+syn keyword phpFunctions  aggregate_info aggregate_methods_by_list aggregate_methods_by_regexp aggregate_methods aggregate_properties_by_list aggregate_properties_by_regexp aggregate_properties aggregate aggregation_info deaggregate  contained
+syn keyword phpFunctions  ocibindbyname ocicancel ocicloselob ocicollappend ocicollassign ocicollassignelem ocicollgetelem ocicollmax ocicollsize ocicolltrim ocicolumnisnull ocicolumnname ocicolumnprecision ocicolumnscale ocicolumnsize ocicolumntype ocicolumntyperaw ocicommit ocidefinebyname ocierror ociexecute ocifetch ocifetchinto ocifetchstatement ocifreecollection ocifreecursor ocifreedesc ocifreestatement ociinternaldebug ociloadlob ocilogoff ocilogon ocinewcollection ocinewcursor ocinewdescriptor ocinlogon ocinumcols ociparse ociplogon ociresult ocirollback ocirowcount ocisavelob ocisavelobfile ociserverversion ocisetprefetch ocistatementtype ociwritelobtofile ociwritetemporarylob contained
+syn keyword phpFunctions  odbc_autocommit odbc_binmode odbc_close_all odbc_close odbc_columnprivileges odbc_columns odbc_commit odbc_connect odbc_cursor odbc_data_source odbc_do odbc_error odbc_errormsg odbc_exec odbc_execute odbc_fetch_array odbc_fetch_into odbc_fetch_object odbc_fetch_row odbc_field_len odbc_field_name odbc_field_num odbc_field_precision odbc_field_scale odbc_field_type odbc_foreignkeys odbc_free_result odbc_gettypeinfo odbc_longreadlen odbc_next_result odbc_num_fields odbc_num_rows odbc_pconnect odbc_prepare odbc_primarykeys odbc_procedurecolumns odbc_procedures odbc_result_all odbc_result odbc_rollback odbc_setoption odbc_specialcolumns odbc_statistics odbc_tableprivileges odbc_tables  contained
+syn keyword phpFunctions  openssl_csr_export_to_file openssl_csr_export openssl_csr_new openssl_csr_sign openssl_error_string openssl_free_key openssl_get_privatekey openssl_get_publickey openssl_open openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_seal openssl_sign openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_free openssl_x509_parse openssl_x509_read contained
+syn keyword phpFunctions  ora_bind ora_close ora_columnname ora_columnsize ora_columntype ora_commit ora_commitoff ora_commiton ora_do ora_error ora_errorcode ora_exec ora_fetch_into ora_fetch ora_getcolumn ora_logoff ora_logon ora_numcols ora_numrows ora_open ora_parse ora_plogon ora_rollback  contained
+syn keyword phpFunctions  flush ob_clean ob_end_clean ob_end_flush ob_flush ob_get_clean ob_get_contents ob_get_flush ob_get_length ob_get_level ob_get_status ob_gzhandler ob_implicit_flush ob_list_handlers ob_start output_add_rewrite_var output_reset_rewrite_vars  contained
+syn keyword phpFunctions  overload  contained
+syn keyword phpFunctions  ovrimos_close ovrimos_commit ovrimos_connect ovrimos_cursor ovrimos_exec ovrimos_execute ovrimos_fetch_into ovrimos_fetch_row ovrimos_field_len ovrimos_field_name ovrimos_field_num ovrimos_field_type ovrimos_free_result ovrimos_longreadlen ovrimos_num_fields ovrimos_num_rows ovrimos_prepare ovrimos_result_all ovrimos_result ovrimos_rollback  contained
+syn keyword phpFunctions  pcntl_exec pcntl_fork pcntl_signal pcntl_waitpid pcntl_wexitstatus pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig contained
+syn keyword phpFunctions  preg_grep preg_match_all preg_match preg_quote preg_replace_callback preg_replace preg_split  contained
+syn keyword phpFunctions  pdf_add_annotation pdf_add_bookmark pdf_add_launchlink pdf_add_locallink pdf_add_note pdf_add_outline pdf_add_pdflink pdf_add_thumbnail pdf_add_weblink pdf_arc pdf_arcn pdf_attach_file pdf_begin_page pdf_begin_pattern pdf_begin_template pdf_circle pdf_clip pdf_close_image pdf_close_pdi_page pdf_close_pdi pdf_close pdf_closepath_fill_stroke pdf_closepath_stroke pdf_closepath pdf_concat pdf_continue_text pdf_curveto pdf_delete pdf_end_page pdf_end_pattern pdf_end_template pdf_endpath pdf_fill_stroke pdf_fill pdf_findfont pdf_get_buffer pdf_get_font pdf_get_fontname pdf_get_fontsize pdf_get_image_height pdf_get_image_width pdf_get_majorversion pdf_get_minorversion pdf_get_parameter pdf_get_pdi_parameter pdf_get_pdi_value pdf_get_value pdf_initgraphics pdf_lineto pdf_makespotcolor pdf_moveto pdf_new pdf_open_CCITT pdf_open_file pdf_open_gif pdf_open_image_file pdf_open_image pdf_open_jpeg pdf_open_memory_image pdf_open_pdi_page pdf_open_pdi pdf_open_png pdf_open_tiff pdf_open pdf_place_image pdf_place_pdi_page pdf_rect pdf_restore pdf_rotate pdf_save pdf_scale pdf_set_border_color pdf_set_border_dash pdf_set_border_style pdf_set_char_spacing pdf_set_duration pdf_set_font pdf_set_horiz_scaling pdf_set_info_author pdf_set_info_creator pdf_set_info_keywords pdf_set_info_subject pdf_set_info_title pdf_set_info pdf_set_leading pdf_set_parameter pdf_set_text_matrix pdf_set_text_pos pdf_set_text_rendering pdf_set_text_rise pdf_set_value pdf_set_word_spacing pdf_setcolor pdf_setdash pdf_setflat pdf_setfont pdf_setgray_fill pdf_setgray_stroke pdf_setgray pdf_setlinecap pdf_setlinejoin pdf_setlinewidth pdf_setmatrix pdf_setmiterlimit pdf_setpolydash pdf_setrgbcolor_fill pdf_setrgbcolor_stroke pdf_setrgbcolor pdf_show_boxed pdf_show_xy pdf_show pdf_skew pdf_stringwidth pdf_stroke pdf_translate contained
+syn keyword phpFunctions  pfpro_cleanup pfpro_init pfpro_process_raw pfpro_process pfpro_version  contained
+syn keyword phpFunctions  pg_affected_rows pg_cancel_query pg_client_encoding pg_close pg_connect pg_connection_busy pg_connection_reset pg_connection_status pg_convert pg_copy_from pg_copy_to pg_dbname pg_delete pg_end_copy pg_escape_bytea pg_escape_string pg_fetch_all pg_fetch_array pg_fetch_assoc pg_fetch_object pg_fetch_result pg_fetch_row pg_field_is_null pg_field_name pg_field_num pg_field_prtlen pg_field_size pg_field_type pg_free_result pg_get_notify pg_get_pid pg_get_result pg_host pg_insert pg_last_error pg_last_notice pg_last_oid pg_lo_close pg_lo_create pg_lo_export pg_lo_import pg_lo_open pg_lo_read_all pg_lo_read pg_lo_seek pg_lo_tell pg_lo_unlink pg_lo_write pg_meta_data pg_num_fields pg_num_rows pg_options pg_pconnect pg_ping pg_port pg_put_line pg_query pg_result_error pg_result_seek pg_result_status pg_select pg_send_query pg_set_client_encoding pg_trace pg_tty pg_unescape_bytea pg_untrace pg_update  contained
+syn keyword phpFunctions  posix_ctermid posix_get_last_error posix_getcwd posix_getegid posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid posix_isatty posix_kill posix_mkfifo posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid posix_setuid posix_strerror posix_times posix_ttyname posix_uname contained
+syn keyword phpFunctions  printer_abort printer_close printer_create_brush printer_create_dc printer_create_font printer_create_pen printer_delete_brush printer_delete_dc printer_delete_font printer_delete_pen printer_draw_bmp printer_draw_chord printer_draw_elipse printer_draw_line printer_draw_pie printer_draw_rectangle printer_draw_roundrect printer_draw_text printer_end_doc printer_end_page printer_get_option printer_list printer_logical_fontheight printer_open printer_select_brush printer_select_font printer_select_pen printer_set_option printer_start_doc printer_start_page printer_write contained
+syn keyword phpFunctions  pspell_add_to_personal pspell_add_to_session pspell_check pspell_clear_session pspell_config_create pspell_config_ignore pspell_config_mode pspell_config_personal pspell_config_repl pspell_config_runtogether pspell_config_save_repl pspell_new_config pspell_new_personal pspell_new pspell_save_wordlist pspell_store_replacement pspell_suggest contained
+syn keyword phpFunctions  qdom_error qdom_tree  contained
+syn keyword phpFunctions  readline_add_history readline_clear_history readline_completion_function readline_info readline_list_history readline_read_history readline_write_history readline  contained
+syn keyword phpFunctions  recode_file recode_string recode  contained
+syn keyword phpFunctions  ereg_replace ereg eregi_replace eregi split spliti sql_regcase  contained
+syn keyword phpFunctions  ftok msg_get_queue msg_receive msg_remove_queue msg_send msg_set_queue msg_stat_queue sem_acquire sem_get sem_release sem_remove shm_attach shm_detach shm_get_var shm_put_var shm_remove_var shm_remove  contained
+syn keyword phpFunctions  sesam_affected_rows sesam_commit sesam_connect sesam_diagnostic sesam_disconnect sesam_errormsg sesam_execimm sesam_fetch_array sesam_fetch_result sesam_fetch_row sesam_field_array sesam_field_name sesam_free_result sesam_num_fields sesam_query sesam_rollback sesam_seek_row sesam_settransaction contained
+syn keyword phpFunctions  session_cache_expire session_cache_limiter session_decode session_destroy session_encode session_get_cookie_params session_id session_is_registered session_module_name session_name session_regenerate_id session_register session_save_path session_set_cookie_params session_set_save_handler session_start session_unregister session_unset session_write_close contained
+syn keyword phpFunctions  shmop_close shmop_delete shmop_open shmop_read shmop_size shmop_write contained
+syn keyword phpFunctions  snmp_get_quick_print snmp_set_quick_print snmpget snmprealwalk snmpset snmpwalk snmpwalkoid contained
+syn keyword phpFunctions  socket_accept socket_bind socket_clear_error socket_close socket_connect socket_create_listen socket_create_pair socket_create socket_get_option socket_getpeername socket_getsockname socket_iovec_add socket_iovec_alloc socket_iovec_delete socket_iovec_fetch socket_iovec_free socket_iovec_set socket_last_error socket_listen socket_read socket_readv socket_recv socket_recvfrom socket_recvmsg socket_select socket_send socket_sendmsg socket_sendto socket_set_block socket_set_nonblock socket_set_option socket_shutdown socket_strerror socket_write socket_writev contained
+syn keyword phpFunctions  sqlite_array_query sqlite_busy_timeout sqlite_changes sqlite_close sqlite_column sqlite_create_aggregate sqlite_create_function sqlite_current sqlite_error_string sqlite_escape_string sqlite_fetch_array sqlite_fetch_single sqlite_fetch_string sqlite_field_name sqlite_has_more sqlite_last_error sqlite_last_insert_rowid sqlite_libencoding sqlite_libversion sqlite_next sqlite_num_fields sqlite_num_rows sqlite_open sqlite_popen sqlite_query sqlite_rewind sqlite_seek sqlite_udf_decode_binary sqlite_udf_encode_binary sqlite_unbuffered_query  contained
+syn keyword phpFunctions  stream_context_create stream_context_get_options stream_context_set_option stream_context_set_params stream_copy_to_stream stream_filter_append stream_filter_prepend stream_filter_register stream_get_contents stream_get_filters stream_get_line stream_get_meta_data stream_get_transports stream_get_wrappers stream_register_wrapper stream_select stream_set_blocking stream_set_timeout stream_set_write_buffer stream_socket_accept stream_socket_client stream_socket_get_name stream_socket_recvfrom stream_socket_sendto stream_socket_server stream_wrapper_register contained
+syn keyword phpFunctions  addcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string count_chars crc32 crypt explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str print printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vprintf vsprintf wordwrap contained
+syn keyword phpFunctions  swf_actiongeturl swf_actiongotoframe swf_actiongotolabel swf_actionnextframe swf_actionplay swf_actionprevframe swf_actionsettarget swf_actionstop swf_actiontogglequality swf_actionwaitforframe swf_addbuttonrecord swf_addcolor swf_closefile swf_definebitmap swf_definefont swf_defineline swf_definepoly swf_definerect swf_definetext swf_endbutton swf_enddoaction swf_endshape swf_endsymbol swf_fontsize swf_fontslant swf_fonttracking swf_getbitmapinfo swf_getfontinfo swf_getframe swf_labelframe swf_lookat swf_modifyobject swf_mulcolor swf_nextid swf_oncondition swf_openfile swf_ortho2 swf_ortho swf_perspective swf_placeobject swf_polarview swf_popmatrix swf_posround swf_pushmatrix swf_removeobject swf_rotate swf_scale swf_setfont swf_setframe swf_shapearc swf_shapecurveto3 swf_shapecurveto swf_shapefillbitmapclip swf_shapefillbitmaptile swf_shapefilloff swf_shapefillsolid swf_shapelinesolid swf_shapelineto swf_shapemoveto swf_showframe swf_startbutton swf_startdoaction swf_startshape swf_startsymbol swf_textwidth swf_translate swf_viewport contained
+syn keyword phpFunctions  sybase_affected_rows sybase_close sybase_connect sybase_data_seek sybase_deadlock_retry_count sybase_fetch_array sybase_fetch_assoc sybase_fetch_field sybase_fetch_object sybase_fetch_row sybase_field_seek sybase_free_result sybase_get_last_message sybase_min_client_severity sybase_min_error_severity sybase_min_message_severity sybase_min_server_severity sybase_num_fields sybase_num_rows sybase_pconnect sybase_query sybase_result sybase_select_db sybase_set_message_handler sybase_unbuffered_query contained
+syn keyword phpFunctions  tidy_access_count tidy_clean_repair tidy_config_count tidy_diagnose tidy_error_count tidy_get_body tidy_get_config tidy_get_error_buffer tidy_get_head tidy_get_html_ver tidy_get_html tidy_get_output tidy_get_release tidy_get_root tidy_get_status tidy_getopt tidy_is_xhtml tidy_load_config tidy_parse_file tidy_parse_string tidy_repair_file tidy_repair_string tidy_reset_config tidy_save_config tidy_set_encoding tidy_setopt tidy_warning_count  contained
+syn keyword phpMethods  attributes children get_attr get_nodes has_children has_siblings is_asp is_comment is_html is_jsp is_jste is_text is_xhtml is_xml next prev tidy_node contained
+syn keyword phpFunctions  token_get_all token_name  contained
+syn keyword phpFunctions  base64_decode base64_encode get_meta_tags http_build_query parse_url rawurldecode rawurlencode urldecode urlencode  contained
+syn keyword phpFunctions  doubleval empty floatval get_defined_vars get_resource_type gettype import_request_variables intval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_null is_numeric is_object is_real is_resource is_scalar is_string isset print_r serialize settype strval unserialize unset var_dump var_export contained
+syn keyword phpFunctions  vpopmail_add_alias_domain_ex vpopmail_add_alias_domain vpopmail_add_domain_ex vpopmail_add_domain vpopmail_add_user vpopmail_alias_add vpopmail_alias_del_domain vpopmail_alias_del vpopmail_alias_get_all vpopmail_alias_get vpopmail_auth_user vpopmail_del_domain_ex vpopmail_del_domain vpopmail_del_user vpopmail_error vpopmail_passwd vpopmail_set_user_quota  contained
+syn keyword phpFunctions  w32api_deftype w32api_init_dtype w32api_invoke_function w32api_register_function w32api_set_call_method contained
+syn keyword phpFunctions  wddx_add_vars wddx_deserialize wddx_packet_end wddx_packet_start wddx_serialize_value wddx_serialize_vars contained
+syn keyword phpFunctions  utf8_decode utf8_encode xml_error_string xml_get_current_byte_index xml_get_current_column_number xml_get_current_line_number xml_get_error_code xml_parse_into_struct xml_parse xml_parser_create_ns xml_parser_create xml_parser_free xml_parser_get_option xml_parser_set_option xml_set_character_data_handler xml_set_default_handler xml_set_element_handler xml_set_end_namespace_decl_handler xml_set_external_entity_ref_handler xml_set_notation_decl_handler xml_set_object xml_set_processing_instruction_handler xml_set_start_namespace_decl_handler xml_set_unparsed_entity_decl_handler contained
+syn keyword phpFunctions  xmlrpc_decode_request xmlrpc_decode xmlrpc_encode_request xmlrpc_encode xmlrpc_get_type xmlrpc_parse_method_descriptions xmlrpc_server_add_introspection_data xmlrpc_server_call_method xmlrpc_server_create xmlrpc_server_destroy xmlrpc_server_register_introspection_callback xmlrpc_server_register_method xmlrpc_set_type  contained
+syn keyword phpFunctions  xslt_create xslt_errno xslt_error xslt_free xslt_output_process xslt_set_base xslt_set_encoding xslt_set_error_handler xslt_set_log xslt_set_sax_handler xslt_set_sax_handlers xslt_set_scheme_handler xslt_set_scheme_handlers contained
+syn keyword phpFunctions  yaz_addinfo yaz_ccl_conf yaz_ccl_parse yaz_close yaz_connect yaz_database yaz_element yaz_errno yaz_error yaz_es_result yaz_get_option yaz_hits yaz_itemorder yaz_present yaz_range yaz_record yaz_scan_result yaz_scan yaz_schema yaz_search yaz_set_option yaz_sort yaz_syntax yaz_wait contained
+syn keyword phpFunctions  zip_close zip_entry_close zip_entry_compressedsize zip_entry_compressionmethod zip_entry_filesize zip_entry_name zip_entry_open zip_entry_read zip_open zip_read  contained
+syn keyword phpFunctions  gzclose gzcompress gzdeflate gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell gzuncompress gzwrite readgzfile zlib_get_coding_type  contained
 
 if exists( "php_baselib" )
-  syn keyword	phpMethods	query next_record num_rows affected_rows nf f p np num_fields haltmsg seek link_id query_id metadata table_names nextid connect halt free register unregister is_registered delete url purl self_url pself_url hidden_session add_query padd_query reimport_get_vars reimport_post_vars reimport_cookie_vars set_container set_tokenname release_token put_headers get_id get_id put_id freeze thaw gc reimport_any_vars start url purl login_if is_authenticated auth_preauth auth_loginform auth_validatelogin auth_refreshlogin auth_registerform auth_doregister start check have_perm permsum perm_invalid	contained
-  syn keyword	phpFunctions	page_open page_close sess_load sess_save	contained
+  syn keyword phpMethods  query next_record num_rows affected_rows nf f p np num_fields haltmsg seek link_id query_id metadata table_names nextid connect halt free register unregister is_registered delete url purl self_url pself_url hidden_session add_query padd_query reimport_get_vars reimport_post_vars reimport_cookie_vars set_container set_tokenname release_token put_headers get_id get_id put_id freeze thaw gc reimport_any_vars start url purl login_if is_authenticated auth_preauth auth_loginform auth_validatelogin auth_refreshlogin auth_registerform auth_doregister start check have_perm permsum perm_invalid contained
+  syn keyword phpFunctions  page_open page_close sess_load sess_save  contained
 endif
 
 " Conditional
-syn keyword	phpConditional	declare else enddeclare endswitch elseif endif if switch	contained
+syn keyword phpConditional  declare else enddeclare endswitch elseif endif if switch  contained
 
 " Repeat
-syn keyword	phpRepeat	as do endfor endforeach endwhile for foreach while	contained
+syn keyword phpRepeat as do endfor endforeach endwhile for foreach while  contained
 
 " Repeat
-syn keyword	phpLabel	case default switch	contained
+syn keyword phpLabel  case default switch contained
 
 " Statement
-syn keyword	phpStatement	return break continue exit	contained
+syn keyword phpStatement  return break continue exit  contained
 
 " Keyword
-syn keyword	phpKeyword	var const	contained
+syn keyword phpKeyword  var const contained
 
 " Type
-syn keyword	phpType	bool[ean] int[eger] real double float string array object NULL	contained
+syn keyword phpType bool[ean] int[eger] real double float string array object NULL  contained
 
 " Structure
-syn keyword	phpStructure	extends implements instanceof parent self	contained
+syn keyword phpStructure  extends implements instanceof parent self contained
 
 " Operator
-syn match	phpOperator	"[-=+%^&|*!.~?:]"	contained display
-syn match	phpOperator	"[-+*/%^&|.]="	contained display
-syn match	phpOperator	"/[^*/]"me=e-1	contained display
-syn match	phpOperator	"\$"	contained display
-syn match	phpOperator	"&&\|\<and\>"	contained display
-syn match	phpOperator	"||\|\<x\=or\>"	contained display
-syn match	phpRelation	"[!=<>]="	contained display
-syn match	phpRelation	"[<>]"	contained display
-syn match	phpMemberSelector	"->"	contained display
-syn match	phpVarSelector	"\$"	contained display
+syn match phpOperator "[-=+%^&|*!.~?:]" contained display
+syn match phpOperator "[-+*/%^&|.]="  contained display
+syn match phpOperator "/[^*/]"me=e-1  contained display
+syn match phpOperator "\$"  contained display
+syn match phpOperator "&&\|\<and\>" contained display
+syn match phpOperator "||\|\<x\=or\>" contained display
+syn match phpRelation "[!=<>]=" contained display
+syn match phpRelation "[<>]"  contained display
+syn match phpMemberSelector "->"  contained display
+syn match phpVarSelector  "\$"  contained display
 
 " Identifier
-syn match	phpIdentifier	"$\h\w*"	contained contains=phpEnvVar,phpIntVar,phpVarSelector display
-syn match	phpIdentifierSimply	"${\h\w*}"	contains=phpOperator,phpParent	contained display
-syn region	phpIdentifierComplex	matchgroup=phpParent start="{\$"rs=e-1 end="}"	contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP	contained extend
-syn region	phpIdentifierComplexP	matchgroup=phpParent start="\[" end="]"	contains=@phpClInside	contained
+syn match phpIdentifier "$\h\w*"  contained contains=phpEnvVar,phpIntVar,phpVarSelector display
+syn match phpIdentifierSimply "${\h\w*}"  contains=phpOperator,phpParent  contained display
+syn region  phpIdentifierComplex  matchgroup=phpParent start="{\$"rs=e-1 end="}"  contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
+syn region  phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
 
 " Methoden
-syn match	phpMethodsVar	"->\h\w*"	contained contains=phpMethods,phpMemberSelector display
+syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display
 
 " Include
-syn keyword	phpInclude	include require include_once require_once	contained
+syn keyword phpInclude  include require include_once require_once contained
 
+" Peter Hodge - added 'clone' keyword
 " Define
-syn keyword	phpDefine	new	contained
+syn keyword phpDefine new clone contained
 
 " Boolean
-syn keyword	phpBoolean	true false	contained
+syn keyword phpBoolean  true false  contained
 
 " Number
-syn match phpNumber	"-\=\<\d\+\>"	contained display
-syn match phpNumber	"\<0x\x\{1,8}\>"	contained display
+syn match phpNumber "-\=\<\d\+\>" contained display
+syn match phpNumber "\<0x\x\{1,8}\>"  contained display
 
 " Float
-syn match phpFloat	"\(-\=\<\d+\|-\=\)\.\d\+\>"	contained display
+syn match phpFloat  "\(-\=\<\d+\|-\=\)\.\d\+\>" contained display
 
 " SpecialChar
-syn match phpSpecialChar	"\\[abcfnrtyv\\]"	contained display
-syn match phpSpecialChar	"\\\d\{3}"	contained contains=phpOctalError display
-syn match phpSpecialChar	"\\x\x\{2}"	contained display
+syn match phpSpecialChar  "\\[abcfnrtyv\\]" contained display
+syn match phpSpecialChar  "\\\d\{3}"  contained contains=phpOctalError display
+syn match phpSpecialChar  "\\x\x\{2}" contained display
 
 " Error
-syn match phpOctalError	"[89]"	contained display
+syn match phpOctalError "[89]"  contained display
 if exists("php_parent_error_close")
-  syn match phpParentError	"[)\]}]"	contained display
+  syn match phpParentError  "[)\]}]"  contained display
 endif
 
 " Todo
-syn keyword	phpTodo	todo fixme xxx	contained
+syn keyword phpTodo todo fixme xxx  contained
 
 " Comment
 if exists("php_parent_error_open")
-  syn region	phpComment	start="/\*" end="\*/"	contained contains=phpTodo
+  syn region  phpComment  start="/\*" end="\*/" contained contains=phpTodo
 else
-  syn region	phpComment	start="/\*" end="\*/"	contained contains=phpTodo extend
+  syn region  phpComment  start="/\*" end="\*/" contained contains=phpTodo extend
 endif
 if version >= 600
-  syn match	phpComment	"#.\{-}\(?>\|$\)\@="	contained contains=phpTodo
-  syn match	phpComment	"//.\{-}\(?>\|$\)\@="	contained contains=phpTodo
+  syn match phpComment  "#.\{-}\(?>\|$\)\@="  contained contains=phpTodo
+  syn match phpComment  "//.\{-}\(?>\|$\)\@=" contained contains=phpTodo
 else
-  syn match	phpComment	"#.\{-}$"	contained contains=phpTodo
-  syn match	phpComment	"#.\{-}?>"me=e-2	contained contains=phpTodo
-  syn match	phpComment	"//.\{-}$"	contained contains=phpTodo
-  syn match	phpComment	"//.\{-}?>"me=e-2	contained contains=phpTodo
+  syn match phpComment  "#.\{-}$" contained contains=phpTodo
+  syn match phpComment  "#.\{-}?>"me=e-2  contained contains=phpTodo
+  syn match phpComment  "//.\{-}$"  contained contains=phpTodo
+  syn match phpComment  "//.\{-}?>"me=e-2 contained contains=phpTodo
 endif
 
 " String
 if exists("php_parent_error_open")
-  syn region	phpStringDouble	matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+	contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex	contained keepend
-  syn region	phpBacktick	matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+	contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex	contained keepend
-  syn region	phpStringSingle	matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+	contains=@phpAddStrings contained keepend
+  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
+  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
+  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend
 else
-  syn region	phpStringDouble	matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+	contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
-  syn region	phpBacktick	matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+	contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
-  syn region	phpStringSingle	matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+	contains=@phpAddStrings contained keepend extend
+  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
+  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
+  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend extend
 endif
 
 " HereDoc
 if version >= 600
   syn case match
-  syn region	phpHereDoc	matchgroup=Delimiter start="\(<<<\)\@<=\z(\I\i*\)$" end="^\z1\(;\=$\)\@="	contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\I\i*\)$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
 " including HTML,JavaScript,SQL even if not enabled via options
-  syn region	phpHereDoc	matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="	contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
-  syn region	phpHereDoc	matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="	contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
-  syn region	phpHereDoc	matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="	contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
   syn case ignore
 endif
 
 " Parent
 if exists("php_parent_error_close") || exists("php_parent_error_open")
-  syn match	phpParent	"[{}]"	contained
-  syn region	phpParent	matchgroup=Delimiter start="(" end=")"	contained contains=@phpClInside transparent
-  syn region	phpParent	matchgroup=Delimiter start="\[" end="\]"	contained contains=@phpClInside transparent
+  syn match phpParent "[{}]"  contained
+  syn region  phpParent matchgroup=Delimiter start="(" end=")"  contained contains=@phpClInside transparent
+  syn region  phpParent matchgroup=Delimiter start="\[" end="\]"  contained contains=@phpClInside transparent
   if !exists("php_parent_error_close")
-    syn match phpParent	"[\])]" contained
+    syn match phpParent "[\])]" contained
   endif
 else
-  syn match phpParent	"[({[\]})]"	contained
+  syn match phpParent "[({[\]})]" contained
 endif
 
-syn cluster	phpClConst	contains=phpFunctions,phpIdentifier,phpConditional,phpRepeat,phpStatement,phpOperator,phpRelation,phpStringSingle,phpStringDouble,phpBacktick,phpNumber,phpFloat,phpKeyword,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstant,phpCoreConstant,phpException
-syn cluster	phpClInside	contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc
-syn cluster	phpClFunction	contains=@phpClInside,phpDefine,phpParentError,phpStorageClass
-syn cluster	phpClTop	contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch
+syn cluster phpClConst  contains=phpFunctions,phpIdentifier,phpConditional,phpRepeat,phpStatement,phpOperator,phpRelation,phpStringSingle,phpStringDouble,phpBacktick,phpNumber,phpFloat,phpKeyword,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstant,phpCoreConstant,phpException
+syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc
+syn cluster phpClFunction contains=@phpClInside,phpDefine,phpParentError,phpStorageClass
+syn cluster phpClTop  contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch
 
 " Php Region
 if exists("php_parent_error_open")
   if exists("php_noShortTags")
-    syn region	 phpRegion	matchgroup=Delimiter start="<?php" end="?>"	contains=@phpClTop
+    syn region   phpRegion  matchgroup=Delimiter start="<?php" end="?>" contains=@phpClTop
   else
-    syn region	 phpRegion	matchgroup=Delimiter start="<?\(php\)\=" end="?>"	contains=@phpClTop
+    syn region   phpRegion  matchgroup=Delimiter start="<?\(php\)\=" end="?>" contains=@phpClTop
   endif
-  syn region	 phpRegionSc	matchgroup=Delimiter start=+<script language="php">+ end=+</script>+	contains=@phpClTop
+  syn region   phpRegionSc  matchgroup=Delimiter start=+<script language="php">+ end=+</script>+  contains=@phpClTop
   if exists("php_asp_tags")
-    syn region	 phpRegionAsp	matchgroup=Delimiter start="<%\(=\)\=" end="%>"	contains=@phpClTop
+    syn region   phpRegionAsp matchgroup=Delimiter start="<%\(=\)\=" end="%>" contains=@phpClTop
   endif
 else
   if exists("php_noShortTags")
-    syn region	 phpRegion	matchgroup=Delimiter start="<?php" end="?>"	contains=@phpClTop keepend
+    syn region   phpRegion  matchgroup=Delimiter start="<?php" end="?>" contains=@phpClTop keepend
   else
-    syn region	 phpRegion	matchgroup=Delimiter start="<?\(php\)\=" end="?>"	contains=@phpClTop keepend
+    syn region   phpRegion  matchgroup=Delimiter start="<?\(php\)\=" end="?>" contains=@phpClTop keepend
   endif
-  syn region	 phpRegionSc	matchgroup=Delimiter start=+<script language="php">+ end=+</script>+	contains=@phpClTop keepend
+  syn region   phpRegionSc  matchgroup=Delimiter start=+<script language="php">+ end=+</script>+  contains=@phpClTop keepend
   if exists("php_asp_tags")
-    syn region	 phpRegionAsp	matchgroup=Delimiter start="<%\(=\)\=" end="%>"	contains=@phpClTop keepend
+    syn region   phpRegionAsp matchgroup=Delimiter start="<%\(=\)\=" end="%>" contains=@phpClTop keepend
   endif
 endif
 
 " Fold
 if exists("php_folding") && php_folding==1
 " match one line constructs here and skip them at folding
-  syn keyword	phpSCKeyword	abstract final private protected public static	contained
-  syn keyword	phpFCKeyword	function	contained
-  syn keyword	phpStorageClass	global	contained
-  syn match	phpDefine	"\(\s\|^\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\(\s\+.*[;}]\)\@="	contained contains=phpSCKeyword
-  syn match	phpStructure	"\(\s\|^\)\(abstract\s\+\|final\s\+\)*class\(\s\+.*}\)\@="	contained
-  syn match	phpStructure	"\(\s\|^\)interface\(\s\+.*}\)\@="	contained
-  syn match	phpException	"\(\s\|^\)try\(\s\+.*}\)\@="	contained
-  syn match	phpException	"\(\s\|^\)catch\(\s\+.*}\)\@="	contained
+  syn keyword phpSCKeyword  abstract final private protected public static  contained
+  syn keyword phpFCKeyword  function  contained
+  syn keyword phpStorageClass global  contained
+  syn match phpDefine "\(\s\|^\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\(\s\+.*[;}]\)\@="  contained contains=phpSCKeyword
+  syn match phpStructure  "\(\s\|^\)\(abstract\s\+\|final\s\+\)*class\(\s\+.*}\)\@="  contained
+  syn match phpStructure  "\(\s\|^\)interface\(\s\+.*}\)\@="  contained
+  syn match phpException  "\(\s\|^\)try\(\s\+.*}\)\@="  contained
+  syn match phpException  "\(\s\|^\)catch\(\s\+.*}\)\@="  contained
+
+  set foldmethod=syntax
+  syn region  phpFoldHtmlInside matchgroup=Delimiter start="?>" end="<?\(php\)\=" contained transparent contains=@htmlTop
+  syn region  phpFoldFunction matchgroup=Storageclass start="^\z(\s*\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\s\([^};]*$\)\@="rs=e-9 matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldHtmlInside,phpFCKeyword contained transparent fold extend
+  syn region  phpFoldFunction matchgroup=Define start="^function\s\([^};]*$\)\@=" matchgroup=Delimiter end="^}" contains=@phpClFunction,phpFoldHtmlInside contained transparent fold extend
+  syn region  phpFoldClass  matchgroup=Structure start="^\z(\s*\)\(abstract\s\+\|final\s\+\)*class\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction,phpSCKeyword contained transparent fold extend
+  syn region  phpFoldInterface  matchgroup=Structure start="^\z(\s*\)interface\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
+  syn region  phpFoldCatch  matchgroup=Exception start="^\z(\s*\)catch\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
+  syn region  phpFoldTry  matchgroup=Exception start="^\z(\s*\)try\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
+elseif exists("php_folding") && php_folding==2
+  syn keyword phpDefine function  contained
+  syn keyword phpStructure  abstract class interface  contained
+  syn keyword phpException  catch throw try contained
+  syn keyword phpStorageClass final global private protected public static  contained
 
   set foldmethod=syntax
-  syn region	phpFoldHtmlInside	matchgroup=Delimiter start="?>" end="<?\(php\)\=" contained transparent contains=@htmlTop
-  syn region	phpFoldFunction	matchgroup=Storageclass start="^\z(\s*\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\s\([^};]*$\)\@="rs=e-9 matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldHtmlInside,phpFCKeyword contained transparent fold extend
-  syn region	phpFoldFunction	matchgroup=Define start="^function\s\([^};]*$\)\@=" matchgroup=Delimiter end="^}" contains=@phpClFunction,phpFoldHtmlInside contained transparent fold extend
-  syn region	phpFoldClass	matchgroup=Structure start="^\z(\s*\)\(abstract\s\+\|final\s\+\)*class\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction,phpSCKeyword contained transparent fold extend
-  syn region	phpFoldInterface	matchgroup=Structure start="^\z(\s*\)interface\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
-  syn region	phpFoldCatch	matchgroup=Exception start="^\z(\s*\)catch\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
-  syn region	phpFoldTry	matchgroup=Exception start="^\z(\s*\)try\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
-elseif exists("php_folding") && php_folding==2
-  syn keyword	phpDefine	function	contained
-  syn keyword	phpStructure	abstract class interface	contained
-  syn keyword	phpException	catch throw try	contained
-  syn keyword	phpStorageClass	final global private protected public static	contained
-
-  set foldmethod=syntax
-  syn region	phpFoldHtmlInside	matchgroup=Delimiter start="?>" end="<?\(php\)\=" contained transparent contains=@htmlTop
-  syn region	phpParent	matchgroup=Delimiter start="{" end="}"	contained contains=@phpClFunction,phpFoldHtmlInside transparent fold
+  syn region  phpFoldHtmlInside matchgroup=Delimiter start="?>" end="<?\(php\)\=" contained transparent contains=@htmlTop
+  syn region  phpParent matchgroup=Delimiter start="{" end="}"  contained contains=@phpClFunction,phpFoldHtmlInside transparent fold
 else
-  syn keyword	phpDefine	function	contained
-  syn keyword	phpStructure	abstract class interface	contained
-  syn keyword	phpException	catch throw try	contained
-  syn keyword	phpStorageClass	final global private protected public static	contained
+  syn keyword phpDefine function  contained
+  syn keyword phpStructure  abstract class interface  contained
+  syn keyword phpException  catch throw try contained
+  syn keyword phpStorageClass final global private protected public static  contained
 endif
 
+" ================================================================
+" Peter Hodge - June 9, 2006
+" Some of these changes (highlighting isset/unset/echo etc) are not so
+" critical, but they make things more colourful. :-)
+
+" corrected highlighting for an escaped '\$' inside a double-quoted string
+syn match phpSpecialChar  "\\\$"  contained display
+
+" highlight object variables inside strings
+syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display containedin=phpStringDouble
+
+" highlight constant E_STRICT
+syntax case match
+syntax keyword phpCoreConstant E_STRICT contained
+syntax case ignore
+
+" different syntax highlighting for 'echo', 'print', 'switch', 'die' and 'list' keywords
+" to better indicate what they are.
+syntax keyword phpDefine echo print contained
+syntax keyword phpStructure list contained
+syntax keyword phpConditional switch contained
+syntax keyword phpStatement die contained
+
+" Highlighting for PHP5's user-definable magic class methods
+syntax keyword phpSpecialFunction containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle,phpIdentifier
+  \ __construct __destruct __call __toString __sleep __wakeup __set __get __unset __isset __clone __set_state
+" Highlighting for __autoload slightly different from line above
+syntax keyword phpSpecialFunction containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle,phpIdentifier,phpMethodsVar
+  \ __autoload
+highlight link phpSpecialFunction phpOperator
+
+" Highlighting for PHP5's built-in classes
+" - built-in classes harvested from get_declared_classes() in 5.1.4
+syntax keyword phpClasses containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle,phpIdentifier,phpMethodsVar
+  \ stdClass __PHP_Incomplete_Class php_user_filter Directory ArrayObject
+  \ Exception ErrorException LogicException BadFunctionCallException BadMethodCallException DomainException
+  \ RecursiveIteratorIterator IteratorIterator FilterIterator RecursiveFilterIterator ParentIterator LimitIterator
+  \ CachingIterator RecursiveCachingIterator NoRewindIterator AppendIterator InfiniteIterator EmptyIterator
+  \ ArrayIterator RecursiveArrayIterator DirectoryIterator RecursiveDirectoryIterator
+  \ InvalidArgumentException LengthException OutOfRangeException RuntimeException OutOfBoundsException
+  \ OverflowException RangeException UnderflowException UnexpectedValueException
+  \ PDO PDOException PDOStatement PDORow
+  \ Reflection ReflectionFunction ReflectionParameter ReflectionMethod ReflectionClass
+  \ ReflectionObject ReflectionProperty ReflectionExtension ReflectionException
+  \ SplFileInfo SplFileObject SplTempFileObject SplObjectStorage
+  \ XMLWriter LibXMLError XMLReader SimpleXMLElement SimpleXMLIterator
+  \ DOMException DOMStringList DOMNameList DOMDomError DOMErrorHandler
+  \ DOMImplementation DOMImplementationList DOMImplementationSource
+  \ DOMNode DOMNameSpaceNode DOMDocumentFragment DOMDocument DOMNodeList DOMNamedNodeMap
+  \ DOMCharacterData DOMAttr DOMElement DOMText DOMComment DOMTypeinfo DOMUserDataHandler
+  \ DOMLocator DOMConfiguration DOMCdataSection DOMDocumentType DOMNotation DOMEntity
+  \ DOMEntityReference DOMProcessingInstruction DOMStringExtend DOMXPath
+highlight link phpClasses phpFunctions
+
+" Highlighting for PHP5's built-in interfaces
+" - built-in classes harvested from get_declared_interfaces() in 5.1.4
+syntax keyword phpInterfaces containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle,phpIdentifier,phpMethodsVar
+  \ Iterator IteratorAggregate RecursiveIterator OuterIterator SeekableIterator
+  \ Traversable ArrayAccess Serializable Countable SplObserver SplSubject Reflector
+highlight link phpInterfaces phpConstant
+
+" option defaults:
+if ! exists('php_special_functions')
+    let php_special_functions = 1
+endif
+if ! exists('php_alt_comparisons')
+    let php_alt_comparisons = 1
+endif
+if ! exists('php_alt_assignByReference')
+    let php_alt_assignByReference = 1
+endif
+
+if php_special_functions
+    " Highlighting for PHP built-in functions which exhibit special behaviours
+    " - isset()/unset()/empty() are not real functions.
+    " - compact()/extract() directly manipulate variables in the local scope where
+    "   regular functions would not be able to.
+    " - eval() is the token 'make_your_code_twice_as_complex()' function for PHP.
+    " - user_error()/trigger_error() can be overloaded by set_error_handler and also
+    "   have the capacity to terminate your script when type is E_USER_ERROR.
+    syntax keyword phpSpecialFunction containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle
+  \ user_error trigger_error isset unset eval extract compact empty
+endif
+
+if php_alt_assignByReference
+    " special highlighting for '=&' operator
+    syntax match phpAssignByRef /=\s*&/ containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle
+    highlight link phpAssignByRef Type
+endif
+
+if php_alt_comparisons
+  " highlight comparison operators differently
+  syntax match phpComparison "\v[=!]\=\=?" contained containedin=phpRegion
+  syntax match phpComparison "\v[=<>-]@<![<>]\=?[<>]@!" contained containedin=phpRegion
+
+  " highlight the 'instanceof' operator as a comparison operator rather than a structure
+  syntax case ignore
+  syntax keyword phpComparison instanceof contained containedin=phpRegion
+
+  hi link phpComparison Statement
+endif
+
+" ================================================================
 
 " Sync
 if php_sync_method==-1
@@ -461,54 +587,54 @@ if version >= 508 || !exists("did_php_sy
     command -nargs=+ HiLink hi def link <args>
   endif
 
-  HiLink	 phpConstant	Constant
-  HiLink	 phpCoreConstant	Constant
-  HiLink	 phpComment	Comment
-  HiLink	 phpException	Exception
-  HiLink	 phpBoolean	Boolean
-  HiLink	 phpStorageClass	StorageClass
-  HiLink	 phpSCKeyword	StorageClass
-  HiLink	 phpFCKeyword	Define
-  HiLink	 phpStructure	Structure
-  HiLink	 phpStringSingle	String
-  HiLink	 phpStringDouble	String
-  HiLink	 phpBacktick	String
-  HiLink	 phpNumber	Number
-  HiLink	 phpFloat	Float
-  HiLink	 phpMethods	Function
-  HiLink	 phpFunctions	Function
-  HiLink	 phpBaselib	Function
-  HiLink	 phpRepeat	Repeat
-  HiLink	 phpConditional	Conditional
-  HiLink	 phpLabel	Label
-  HiLink	 phpStatement	Statement
-  HiLink	 phpKeyword	Statement
-  HiLink	 phpType	Type
-  HiLink	 phpInclude	Include
-  HiLink	 phpDefine	Define
-  HiLink	 phpSpecialChar	SpecialChar
-  HiLink	 phpParent	Delimiter
-  HiLink	 phpIdentifierConst	Delimiter
-  HiLink	 phpParentError	Error
-  HiLink	 phpOctalError	Error
-  HiLink	 phpTodo	Todo
-  HiLink	 phpMemberSelector	Structure
+  HiLink   phpConstant  Constant
+  HiLink   phpCoreConstant  Constant
+  HiLink   phpComment Comment
+  HiLink   phpException Exception
+  HiLink   phpBoolean Boolean
+  HiLink   phpStorageClass  StorageClass
+  HiLink   phpSCKeyword StorageClass
+  HiLink   phpFCKeyword Define
+  HiLink   phpStructure Structure
+  HiLink   phpStringSingle  String
+  HiLink   phpStringDouble  String
+  HiLink   phpBacktick  String
+  HiLink   phpNumber  Number
+  HiLink   phpFloat Float
+  HiLink   phpMethods Function
+  HiLink   phpFunctions Function
+  HiLink   phpBaselib Function
+  HiLink   phpRepeat  Repeat
+  HiLink   phpConditional Conditional
+  HiLink   phpLabel Label
+  HiLink   phpStatement Statement
+  HiLink   phpKeyword Statement
+  HiLink   phpType  Type
+  HiLink   phpInclude Include
+  HiLink   phpDefine  Define
+  HiLink   phpSpecialChar SpecialChar
+  HiLink   phpParent  Delimiter
+  HiLink   phpIdentifierConst Delimiter
+  HiLink   phpParentError Error
+  HiLink   phpOctalError  Error
+  HiLink   phpTodo  Todo
+  HiLink   phpMemberSelector  Structure
   if exists("php_oldStyle")
-	hi	phpIntVar guifg=Red ctermfg=DarkRed
-	hi	phpEnvVar guifg=Red ctermfg=DarkRed
-	hi	phpOperator guifg=SeaGreen ctermfg=DarkGreen
-	hi	phpVarSelector guifg=SeaGreen ctermfg=DarkGreen
-	hi	phpRelation guifg=SeaGreen ctermfg=DarkGreen
-	hi	phpIdentifier guifg=DarkGray ctermfg=Brown
-	hi	phpIdentifierSimply guifg=DarkGray ctermfg=Brown
+  hi  phpIntVar guifg=Red ctermfg=DarkRed
+  hi  phpEnvVar guifg=Red ctermfg=DarkRed
+  hi  phpOperator guifg=SeaGreen ctermfg=DarkGreen
+  hi  phpVarSelector guifg=SeaGreen ctermfg=DarkGreen
+  hi  phpRelation guifg=SeaGreen ctermfg=DarkGreen
+  hi  phpIdentifier guifg=DarkGray ctermfg=Brown
+  hi  phpIdentifierSimply guifg=DarkGray ctermfg=Brown
   else
-	HiLink	phpIntVar	Identifier
-	HiLink	phpEnvVar	Identifier
-	HiLink	phpOperator	Operator
-	HiLink	phpVarSelector	Operator
-	HiLink	phpRelation	Operator
-	HiLink	phpIdentifier	Identifier
-	HiLink	phpIdentifierSimply	Identifier
+  HiLink  phpIntVar Identifier
+  HiLink  phpEnvVar Identifier
+  HiLink  phpOperator Operator
+  HiLink  phpVarSelector  Operator
+  HiLink  phpRelation Operator
+  HiLink  phpIdentifier Identifier
+  HiLink  phpIdentifierSimply Identifier
   endif
 
   delcommand HiLink
@@ -520,4 +646,4 @@ if main_syntax == 'php'
   unlet main_syntax
 endif
 
-" vim: ts=8
+" vim: ts=8 sts=2 sw=2 expandtab
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/privoxy.vim
@@ -0,0 +1,71 @@
+" Vim syntax file
+" Language:	Privoxy actions file
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" URL:		http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/privoxy.vim
+" Last Change:	2007 Mar 30
+
+" Privoxy 3.0.6
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal iskeyword=@,48-57,_,-
+
+syn keyword privoxyTodo		 contained TODO FIXME XXX NOTE
+syn match   privoxyComment "#.*" contains=privoxyTodo,@Spell
+
+syn region privoxyActionLine matchgroup=privoxyActionLineDelimiter start="^\s*\zs{" end="}\ze\s*$"
+	\ contains=privoxyEnabledPrefix,privoxyDisabledPrefix
+
+syn match privoxyEnabledPrefix	"\%(^\|\s\|{\)\@<=+\l\@=" nextgroup=privoxyAction,privoxyFilterAction contained
+syn match privoxyDisabledPrefix "\%(^\|\s\|{\)\@<=-\l\@=" nextgroup=privoxyAction,privoxyFilterAction contained
+
+syn match privoxyAction "\%(add-header\|block\|content-type-overwrite\|crunch-client-header\|crunch-if-none-match\)\>" contained
+syn match privoxyAction "\%(crunch-incoming-cookies\|crunch-outgoing-cookies\|crunch-server-header\|deanimate-gifs\)\>" contained
+syn match privoxyAction "\%(downgrade-http-version\|fast-redirects\|filter-client-headers\|filter-server-headers\)\>" contained
+syn match privoxyAction "\%(filter\|force-text-mode\|handle-as-empty-document\|handle-as-image\)\>" contained
+syn match privoxyAction "\%(hide-accept-language\|hide-content-disposition\|hide-forwarded-for-headers\)\>" contained
+syn match privoxyAction "\%(hide-from-header\|hide-if-modified-since\|hide-referrer\|hide-user-agent\|inspect-jpegs\)\>" contained
+syn match privoxyAction "\%(kill-popups\|limit-connect\|overwrite-last-modified\|prevent-compression\|redirect\)\>" contained
+syn match privoxyAction "\%(send-vanilla-wafer\|send-wafer\|session-cookies-only\|set-image-blocker\)\>" contained
+syn match privoxyAction "\%(treat-forbidden-connects-like-blocks\)\>"
+
+syn match privoxyFilterAction "filter{[^}]*}" contained contains=privoxyFilterArg,privoxyActionBraces
+syn match privoxyActionBraces "[{}]" contained
+syn keyword privoxyFilterArg js-annoyances js-events html-annoyances content-cookies refresh-tags unsolicited-popups all-popups
+	\ img-reorder banners-by-size banners-by-link webbugs tiny-textforms jumping-windows frameset-borders demoronizer
+	\ shockwave-flash quicktime-kioskmode fun crude-parental ie-exploits site-specifics no-ping google yahoo msn blogspot
+	\ x-httpd-php-to-html html-to-xml xml-to-html hide-tor-exit-notation contained
+
+" Alternative spellings
+syn match privoxyAction "\%(kill-popup\|hide-referer\|prevent-keeping-cookies\)\>" contained
+
+" Pre-3.0 compatibility
+syn match privoxyAction "\%(no-cookie-read\|no-cookie-set\|prevent-reading-cookies\|prevent-setting-cookies\)\>" contained
+syn match privoxyAction "\%(downgrade\|hide-forwarded\|hide-from\|image\|image-blocker\|no-compression\)\>" contained
+syn match privoxyAction "\%(no-cookies-keep\|no-cookies-read\|no-cookies-set\|no-popups\|vanilla-wafer\|wafer\)\>" contained
+
+syn match privoxySetting "\<for-privoxy-version\>"
+
+syn match privoxyHeader "^\s*\zs{{\%(alias\|settings\)}}\ze\s*$"
+
+hi def link privoxyAction		Identifier
+hi def link privoxyFilterAction		Identifier
+hi def link privoxyActionLineDelimiter	Delimiter
+hi def link privoxyDisabledPrefix	SpecialChar
+hi def link privoxyEnabledPrefix	SpecialChar
+hi def link privoxyHeader		PreProc
+hi def link privoxySetting		Identifier
+hi def link privoxyFilterArg		Constant
+
+hi def link privoxyComment		Comment
+hi def link privoxyTodo			Todo
+
+let b:current_syntax = "privoxy"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/syntax/remind.vim
+++ b/runtime/syntax/remind.vim
@@ -1,12 +1,12 @@
 " Vim syntax file
 " Language:	Remind
-" Maintainer:	Davide Alberani <alberanid@bigfoot.com>
-" Last Change:	28 Apr 2001
-" Version:	0.2
-" URL:		http://digilander.iol.it/alberanid/vim/syntax/remind.vim
+" Maintainer:	Davide Alberani <alberanid@libero.it>
+" Last Change:	10 May 2006
+" Version:	0.3
+" 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/remind.html
+" 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
@@ -32,6 +32,10 @@ syn keyword remindDebug		DEBUG DUMPVARS 
 syn match remindVar		"\$[_a-zA-Z][_a-zA-Z0-9]*"
 syn match remindSubst		"%[^ ]"
 syn match remindAdvanceNumber	"\(\*\|+\|-\|++\|--\)[0-9]\+"
+" This will match trailing whitespaces that seem to break rem2ps.
+" Courtesy of Michael Dunn.
+syn match remindWarning		display excludenl "\S\s\+$"ms=s+1
+
 
 if version >= 508 || !exists("did_remind_syn_inits")
   if version < 508
@@ -55,6 +59,7 @@ if version >= 508 || !exists("did_remind
   HiLink remindVar		Identifier
   HiLink remindSubst		Constant
   HiLink remindAdvanceNumber	Number
+  HiLink remindWarning		Error
 
   delcommand HiLink
 endif
--- a/runtime/syntax/ruby.vim
+++ b/runtime/syntax/ruby.vim
@@ -32,13 +32,23 @@ if exists("ruby_space_errors")
   endif
 endif
 
+" Operators
+if exists("ruby_operators")
+  syn match  rubyOperator	 "\%(\^\|\~\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|>\||\|-\|/\|\*\*\|\*\|&\|%\|+\)"
+  syn match  rubyPseudoOperator  "\%(-=\|/=\|\*\*=\|\*=\|&&\|&=\|&&=\|||\||=\|||=\|%=\|+=\|!\~\|!=\)"
+  syn region rubyBracketOperator matchgroup=rubyOperator start="\%([_[:lower:]]\w*[?!=]\=\|}\)\@<=\[\s*" end="\s*]"
+endif
+
 " Expression Substitution and Backslash Notation
-syn match rubyEscape		"\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"								contained display
-syn match rubyEscape		"\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)"	contained display
-syn match rubyInterpolation	"#{[^}]*}"				contained
-syn match rubyInterpolation	"#\%(\$\|@@\=\)\w\+"			contained display
-syn match rubyNoInterpolation	"\\#{[^}]*}"				contained
-syn match rubyNoInterpolation	"\\#\%(\$\|@@\=\)\w\+"			contained display
+syn match rubyEscape	"\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"							 contained display
+syn match rubyEscape	"\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
+
+syn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=TOP
+syn match  rubyInterpolation	      "#\%(\$\|@@\=\)\w\+"    display contained  contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable
+syn match  rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
+syn region rubyNoInterpolation	      start="\\#{" end="}"    contained
+syn match  rubyNoInterpolation	      "\\#{"		      display contained
+syn match  rubyNoInterpolation	      "\\#\%(\$\|@@\=\)\w\+"  display contained
 
 syn match rubyDelimEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
 
@@ -63,7 +73,7 @@ syn match rubyFloat	"\<\%(0\|[1-9]\d*\%(
 syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
 syn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
 
-syn match  rubyConstant			"\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!"
+syn match  rubyConstant			"\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
 syn match  rubyClassVariable		"@@\h\w*" display
 syn match  rubyInstanceVariable		"@\h\w*"  display
 syn match  rubyGlobalVariable		"$\%(\h\w*\|-.\)"
@@ -71,7 +81,12 @@ syn match  rubySymbol			":\@<!:\%(\^\|\~
 syn match  rubySymbol			":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
 syn match  rubySymbol			":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\="
 syn region rubySymbol			start=":\@<!:\"" end="\"" skip="\\\\\|\\\""
-syn match  rubyBlockParameter		"\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
+syn region rubySymbol			start=":\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
+if exists("ruby_operators")
+  syn match  rubyBlockParameter		"\%(\%(\%(\<do\>\|{\)\s*\)|\s*\)\@<=[( ,a-zA-Z0-9_*)]\+\%(\s*|\)\@=" display
+else
+  syn match  rubyBlockParameter		"\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
+endif
 
 syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
 syn match rubyPredefinedVariable "$_\>"											   display
@@ -86,20 +101,20 @@ syn match rubyPredefinedConstant "\%(\%(
 "syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
 
 " Normal Regular Expression
-syn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
-syn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial fold
 
 " Normal String and Shell Command Output
-syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
-syn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"
-syn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial
+syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
+syn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"			       fold
+syn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial fold
 
 " Generalized Regular Expression
-syn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%r{"				end="}[iomx]*"	 skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%r<"				end=">[iomx]*"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%r\["				end="\][iomx]*"	 skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%r("				end=")[iomx]*"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomx]*"	 skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomx]*"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomx]*"	 skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomx]*"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
 
 " Generalized Single Quoted String, Symbol and Array of Strings
 syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
@@ -123,46 +138,58 @@ syn region rubyHeredocStart matchgroup=r
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP
 
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<\z(\h\w*\)\ze+hs=s+2    matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart		      nextgroup=rubyFunction fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<\z(\h\w*\)\ze+hs=s+2    matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart		      fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
 
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\z(\h\w*\)\ze+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     nextgroup=rubyFunction fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\z(\h\w*\)\ze+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     fold keepend
+syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
 
 if exists('main_syntax') && main_syntax == 'eruby'
   let b:ruby_no_expensive = 1
 end
 
+syn match  rubyAliasDeclaration    "[^[:space:];#.()]\+"  contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
+syn match  rubyAliasDeclaration2   "[^[:space:];#.()]\+"  contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
+syn match  rubyMethodDeclaration   "[^[:space:];#(]\+"	  contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
+syn match  rubyClassDeclaration    "[^[:space:];#<]\+"	  contained contains=rubyConstant
+syn match  rubyModuleDeclaration   "[^[:space:];#]\+"	  contained contains=rubyConstant
+syn match  rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:].:?!=]\@!" contained containedin=rubyMethodDeclaration
+syn match  rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
+syn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|==\|=\~\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
 " Expensive Mode - colorize *end* according to opening statement
 if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
-  syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+"    end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline
-  syn region rubyClass	  matchgroup=rubyDefine start="\<class\s\+"  end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline
-  syn match  rubyDefine   "\<class\ze<<"
-  syn region rubyModule   matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@="	  oneline
-
-  syn region rubyBlock start="\<def\>"	  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold
-  syn region rubyBlock start="\<class\>"  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass	 fold
-  syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule	 fold
+  syn match  rubyDefine "\<alias\>"		nextgroup=rubyAliasDeclaration	skipwhite skipnl
+  syn match  rubyDefine "\<def\>"		nextgroup=rubyMethodDeclaration skipwhite skipnl
+  syn match  rubyClass	"\<class\>"		nextgroup=rubyClassDeclaration	skipwhite skipnl
+  syn match  rubyModule "\<module\>"		nextgroup=rubyModuleDeclaration skipwhite skipnl
+  syn region rubyBlock start="\<def\>"		matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=TOP fold
+  syn region rubyBlock start="\<class\>"	matchgroup=rubyClass  end="\<end\>" contains=TOP fold
+  syn region rubyBlock start="\<module\>"	matchgroup=rubyModule end="\<end\>" contains=TOP fold
 
   " modifiers
-  syn match  rubyControl "\<\%(if\|unless\|while\|until\)\>" display
+  syn match  rubyConditional "\<\%(if\|unless\)\>"   display
+  syn match  rubyRepeat	     "\<\%(while\|until\)\>" display
 
   " *do* requiring *end*
-  syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
+  syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=TOP fold
 
   " *{* requiring *}*
-  syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
+  syn region rubyCurlyBlock start="{" end="}" contains=TOP fold
 
   " statements without *do*
-  syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
+  syn region rubyNoDoBlock	  matchgroup=rubyControl     start="\<begin\>" end="\<end\>" contains=TOP fold
+  syn region rubyCaseBlock	  matchgroup=rubyConditional start="\<case\>"  end="\<end\>" contains=TOP fold
+  syn region rubyConditionalBlock matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\%(if\|unless\)\>" end="\<end\>" contains=TOP fold
+  syn keyword rubyConditional then else when  contained containedin=rubyCaseBlock
+  syn keyword rubyConditional then else elsif contained containedin=rubyConditionalBlock
 
   " statement with optional *do*
-  syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
-  syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
+  syn region rubyOptDoLine matchgroup=rubyRepeat start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=TOP
+  syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=TOP nextgroup=rubyOptDoLine fold
 
   if !exists("ruby_minlines")
     let ruby_minlines = 50
@@ -170,19 +197,19 @@ if !exists("b:ruby_no_expensive") && !ex
   exec "syn sync minlines=" . ruby_minlines
 
 else
-  syn region  rubyFunction matchgroup=rubyControl start="\<def\s\+"    end="\ze\%(\s\|(\|;\|$\)" oneline
-  syn region  rubyClass    matchgroup=rubyControl start="\<class\s\+"  end="\ze\%(\s\|<\|;\|$\)" oneline
-  syn match   rubyControl  "\<class\ze<<"
-  syn region  rubyModule   matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)"	 oneline
-  syn keyword rubyControl case begin do for if unless while until end
+  syn match   rubyControl "\<def\>"	nextgroup=rubyMethodDeclaration skipwhite skipnl
+  syn match   rubyControl "\<class\>"	nextgroup=rubyClassDeclaration	skipwhite skipnl
+  syn match   rubyControl "\<module\>"	nextgroup=rubyModuleDeclaration skipwhite skipnl
+  syn keyword rubyControl case begin do for if unless while until else elsif then when end
+  syn keyword rubyKeyword alias
 endif
 
 " Keywords
 " Note: the following keywords have already been defined:
 " begin case class def do end for if module unless until while
-syn keyword rubyControl		and break else elsif ensure in next not or redo rescue retry return then when
+syn keyword rubyControl		and break ensure in next not or redo rescue retry return
 syn match   rubyOperator	"\<defined?" display
-syn keyword rubyKeyword		alias super undef yield
+syn keyword rubyKeyword		super undef yield
 syn keyword rubyBoolean		true false
 syn keyword rubyPseudoVariable	nil self __FILE__ __LINE__
 syn keyword rubyBeginEnd	BEGIN END
@@ -202,7 +229,12 @@ endif
 syn match   rubySharpBang     "\%^#!.*" display
 syn keyword rubyTodo	      FIXME NOTE TODO XXX contained
 syn match   rubyComment       "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
-syn region  rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold
+if !exists("ruby_no_comment_fold")
+  syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
+  syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell fold
+else
+  syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
+endif
 
 " Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
 syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>"			transparent contains=NONE
@@ -231,33 +263,36 @@ if version >= 508 || !exists("did_ruby_s
     command -nargs=+ HiLink hi def link <args>
   endif
 
+  HiLink rubyClass			rubyDefine
+  HiLink rubyModule			rubyDefine
   HiLink rubyDefine			Define
   HiLink rubyFunction			Function
+  HiLink rubyConditional		Conditional
+  HiLink rubyRepeat			Repeat
   HiLink rubyControl			Statement
   HiLink rubyInclude			Include
   HiLink rubyInteger			Number
-  HiLink rubyASCIICode			rubyInteger
+  HiLink rubyASCIICode			Character
   HiLink rubyFloat			Float
-  HiLink rubyBoolean			rubyPseudoVariable
+  HiLink rubyBoolean			Boolean
   HiLink rubyException			Exception
-  HiLink rubyClass			Type
-  HiLink rubyModule			Type
   if !exists("ruby_no_identifiers")
     HiLink rubyIdentifier		Identifier
   else
     HiLink rubyIdentifier		NONE
   endif
   HiLink rubyClassVariable		rubyIdentifier
-  HiLink rubyConstant			rubyIdentifier
+  HiLink rubyConstant			Type
   HiLink rubyGlobalVariable		rubyIdentifier
   HiLink rubyBlockParameter		rubyIdentifier
   HiLink rubyInstanceVariable		rubyIdentifier
   HiLink rubyPredefinedIdentifier	rubyIdentifier
   HiLink rubyPredefinedConstant		rubyPredefinedIdentifier
   HiLink rubyPredefinedVariable		rubyPredefinedIdentifier
-  HiLink rubySymbol			rubyIdentifier
+  HiLink rubySymbol			Constant
   HiLink rubyKeyword			Keyword
   HiLink rubyOperator			Operator
+  HiLink rubyPseudoOperator		rubyOperator
   HiLink rubyBeginEnd			Statement
   HiLink rubyAccess			Statement
   HiLink rubyAttribute			Statement
@@ -269,10 +304,12 @@ if version >= 508 || !exists("did_ruby_s
   HiLink rubyDataDirective		Delimiter
   HiLink rubyDocumentation		Comment
   HiLink rubyEscape			Special
-  HiLink rubyInterpolation		Special
+  HiLink rubyInterpolationDelimiter	Delimiter
   HiLink rubyNoInterpolation		rubyString
   HiLink rubySharpBang			PreProc
+  HiLink rubyRegexpDelimiter		rubyStringDelimiter
   HiLink rubyStringDelimiter		Delimiter
+  HiLink rubyRegexp			rubyString
   HiLink rubyString			String
   HiLink rubyTodo			Todo
 
@@ -284,4 +321,4 @@ endif
 
 let b:current_syntax = "ruby"
 
-" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
+" vim: nowrap sw=2 sts=2 ts=8 noet ff=unix:
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/sd.vim
@@ -0,0 +1,75 @@
+" Language: streaming descriptor file
+" Maintainer: Puria Nafisi Azizi (pna) <pna@netstudent.polito.it>
+" License: This file can be redistribued and/or modified under the same terms
+"   as Vim itself.
+" URL: http://netstudent.polito.it/vim_syntax/
+" Last Change: 2006-09-27
+
+if version < 600
+        syntax clear
+elseif exists("b:current_syntax")
+        finish
+endif
+
+" Always ignore case
+syn case ignore
+
+" Comments
+syn match sdComment /\s*[#;].*$/
+
+" IP Adresses
+syn cluster sdIPCluster contains=sdIPError,sdIPSpecial
+syn match sdIPError /\%(\d\{4,}\|25[6-9]\|2[6-9]\d\|[3-9]\d\{2}\)[\.0-9]*/ contained
+syn match sdIPSpecial /\%(127\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\)/ contained
+syn match sdIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@sdIPCluster
+
+" Statements
+syn keyword sdStatement AGGREGATE AUDIO_CHANNELS 
+syn keyword sdStatement BYTE_PER_PCKT BIT_PER_SAMPLE BITRATE
+syn keyword sdStatement CLOCK_RATE CODING_TYPE CREATOR
+syn match sdStatement /^\s*CODING_TYPE\>/ nextgroup=sdCoding skipwhite
+syn match sdStatement /^\s*ENCODING_NAME\>/ nextgroup=sdEncoding skipwhite
+syn keyword sdStatement FILE_NAME FRAME_LEN FRAME_RATE FORCE_FRAME_RATE
+syn keyword sdStatement LICENSE 
+syn match sdStatement /^\s*MEDIA_SOURCE\>/ nextgroup=sdSource skipwhite
+syn match sdStatement /^\s*MULTICAST\>/ nextgroup=sdIP skipwhite
+syn keyword sdStatement PAYLOAD_TYPE PKT_LEN PRIORITY
+syn keyword sdStatement SAMPLE_RATE
+syn keyword sdStatement TITLE TWIN
+syn keyword sdStatement VERIFY
+
+" Known Options
+syn keyword sdEncoding H26L MPV MP2T MP4V-ES
+syn keyword sdCoding FRAME SAMPLE
+syn keyword sdSource STORED LIVE
+
+"Specials
+syn keyword sdSpecial TRUE FALSE NULL
+syn keyword sdDelimiter STREAM STREAM_END
+syn match sdError /^search .\{257,}/
+
+if version >= 508 || !exists("did_config_syntax_inits")
+        if version < 508
+                let did_config_syntax_inits = 1
+                command! -nargs=+ HiLink hi link <args>
+        else
+                command! -nargs=+ HiLink hi def link <args>
+        endif
+
+        HiLink sdIP Number
+		  HiLink sdHostname Type
+        HiLink sdEncoding Identifier
+        HiLink sdCoding Identifier
+        HiLink sdSource Identifier
+        HiLink sdComment Comment
+        HiLink sdIPError Error
+        HiLink sdError Error
+        HiLink sdStatement Statement
+        HiLink sdIPSpecial Special
+        HiLink sdSpecial Special
+		  HiLink sdDelimiter Delimiter
+
+        delcommand HiLink
+endif
+
+let b:current_syntax = "sd"
--- 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:		Apr 12, 2006
-" Version:		84
+" Last Change:		Sep 15, 2006
+" Version:		88
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Using the following VIM variables: {{{1
@@ -70,25 +70,25 @@ syn case match
 
 " Clusters: contains=@... clusters {{{1
 "==================================
-syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shSpecial
-syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shSpecial
+syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq
+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,shNumber,shOperator,shPosnParm,shSpecial,shExSingleQuote,shSingleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest
+syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq
 syn cluster shCurlyList	contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial
-syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shSpecial,shPosnParm
+syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shPosnParm,shExSingleQuote,shCtrlSeq
 syn cluster shDerefList	contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPPS
 syn cluster shDerefVarList	contains=shDerefOp,shDerefVarArray,shDerefOpError
-syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shExSingleQuote,shSingleQuote,shDoubleQuote,shSpecial
-syn cluster shExprList1	contains=shCharClass,shNumber,shOperator,shExSingleQuote,shSingleQuote,shDoubleQuote,shSpecial,shExpr,shDblBrace,shDeref,shDerefSimple
+syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shExSingleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq
+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,shSpecial,shOperator,shFunctionStart
+syn cluster shFunctionList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shFunctionStart,shCtrlSeq
 syn cluster shHereBeginList	contains=@shCommandSubList
 syn cluster shHereList	contains=shBeginHere,shHerePayload
 syn cluster shHereListDQ	contains=shBeginHere,@shDblQuoteList,shHerePayload
-syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shIdWhiteSpace,shDeref,shDerefSimple,shSpecial,shRedir,shExSingleQuote,shSingleQuote,shDoubleQuote,shExpr
+syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shIdWhiteSpace,shDeref,shDerefSimple,shRedir,shExSingleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq
 syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest
 syn cluster shSubShList	contains=@shCaseList
-syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shSpecial,shTestOpr,shTest
+syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
 
 
 " Echo: {{{1
@@ -98,7 +98,7 @@ syn region shEcho matchgroup=shStatement
 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
 
 " This must be after the strings, so that bla \" 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,shSpecial,shOperator,shDoubleQuote,shCharClass
+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
 
 " Alias: {{{1
 " =====
@@ -142,9 +142,14 @@ syn region shSubSh transparent matchgrou
 " 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 match   shTestOpr contained "<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!=<>]"
+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 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\+'
+syn match  shTestDoubleQuote	contained	'"[^"]*"'
+syn match  shTestSingleQuote	contained	'\\.'
+syn match  shTestSingleQuote	contained	"'[^']*'"
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn region  shDblBrace matchgroup=Delimiter start="\[\[" skip=+\\\\\|\\$+ end="\]\]"	contains=@shTestList
  syn region  shDblParen matchgroup=Delimiter start="((" skip=+\\\\\|\\$+ end="))"	contains=@shTestList
@@ -237,19 +242,18 @@ syn region  shColon	start="^\s*:" end="$
 
 " String And Character Constants: {{{1
 "================================
-syn match   shNumber	"-\=\<\d\+\>"
+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
-else
- syn match   shSpecial	"\\\d\d\d\|\\[abcfnrtv0]"	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,shSpecial
+ syn region  shExSingleQuote	matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial
 endif
-syn region  shSingleQuote	matchgroup=shOperator start=+'+ end=+'+		contains=shStringSpecial
-syn region  shDoubleQuote	matchgroup=shOperator start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial
+syn region  shSingleQuote	matchgroup=shOperator start=+'+ end=+'+		contains=shStringSpecial,@Spell
+syn region  shDoubleQuote	matchgroup=shOperator start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
 syn match   shStringSpecial	"[^[:print:]]"	contained
 syn match   shSpecial	"\\[\\\"\'`$()#]"
 
@@ -257,7 +261,8 @@ syn match   shSpecial	"\\[\\\"\'`$()#]"
 "==========
 syn cluster    shCommentGroup	contains=shTodo,@Spell
 syn keyword    shTodo	contained	COMBAK FIXME TODO XXX
-syn match      shComment	"#.*$" contains=@shCommentGroup
+syn match      shComment	"^#.*$"	contains=@shCommentGroup
+syn match      shComment	"[^0-9]#.*$"	contains=@shCommentGroup
 
 " File Redirection Highlighted As Operators: {{{1
 "===========================================
@@ -277,7 +282,7 @@ if version < 600
  syn region shHereDoc matchgroup=shRedir start="<<-\s*\**\.\**"	matchgroup=shRedir	end="^\s*\.$"	contains=@shDblQuoteList
 
 elseif g:sh_fold_enabled
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"		contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"	contains=@shDblQuoteList
  syn region shHereDoc matchgroup=shRedir fold start="<<\s*\"\z(\S*\)\""		matchgroup=shRedir end="^\z1\s*$"
  syn region shHereDoc matchgroup=shRedir fold start="<<\s*'\z(\S*\)'"		matchgroup=shRedir end="^\z1\s*$"
  syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$"	contains=@shDblQuoteList
@@ -289,6 +294,7 @@ elseif g:sh_fold_enabled
  syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$"
  syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
  syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*'\z(\S*\)'"		matchgroup=shRedir end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir fold start="<<\\\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
 
 else
  syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z(\S*\)"	matchgroup=shRedir end="^\z1\s*$"    contains=@shDblQuoteList
@@ -303,6 +309,7 @@ else
  syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*'\z(\S*\)'"	matchgroup=shRedir end="^\z1\s*$"
  syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1\s*$"
  syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir start="<<\\\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
 endif
 
 " Here Strings: {{{1
@@ -317,16 +324,16 @@ syn match  shVariable "\<\([bwglsav]:\)\
 syn match  shIdWhiteSpace  contained	"\s"
 syn match  shSetIdentifier contained	"="	nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shSingleQuote,shExSingleQuote
 if exists("b:is_bash")
-  syn region shSetList matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="#\|="me=e-1 contains=@shIdList
-  syn region shSetList matchgroup=shSet start="\<set\>[^/]"me=e-1 end="$" end="\\ze[|)]"		 matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
-  syn match  shSet "\<\(declare\|typeset\|local\|export\|set\|unset\)$"
+  syn region shSetList matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"	matchgroup=shOperator end="\ze[|);&]"me=e-1 matchgroup=NONE end="#\|="me=e-1 contains=@shIdList
+  syn region shSetList matchgroup=shSet start="\<set\>[^/]"me=e-1 end="$" end="\\ze[|)]"		matchgroup=shOperator end="\ze[|);&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn match  shSet "\<\(declare\|typeset\|local\|export\|set\|unset\)\>"
 elseif exists("b:is_kornshell")
-  syn region shSetList matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
-  syn region shSetList matchgroup=shSet start="\<set\>\ze[^/]" end="$\|\ze[})]"			matchgroup=shOperator end="[;&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
-  syn match  shSet "\<\(typeset\|set\|export\|unset\)$"
+  syn region shSetList matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shOperator end="\ze[|);&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn region shSetList matchgroup=shSet start="\<set\>\ze[^/]" end="$\|\ze[})]"			matchgroup=shOperator end="\ze[|);&]"me=e-1 matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn match  shSet "\<\(typeset\|set\|export\|unset\)\>"
 else
-  syn region shSetList matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$\|\ze[|)]"	matchgroup=shOperator end="[;&]" matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
-  syn match  shStatement "\<\(set\|export\|unset\)$"
+  syn region shSetList matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$\|\ze[|)]"	matchgroup=shOperator end="\ze[|);&]" matchgroup=NONE end="[#=]"me=e-1 contains=@shIdList
+  syn match  shStatement "\<\(set\|export\|unset\)\>"
 endif
 
 " Functions: {{{1
@@ -480,6 +487,9 @@ hi def link shSource	shOperator
 hi def link shStringSpecial	shSpecial
 hi def link shSubShRegion	shOperator
 hi def link shTestOpr	shConditional
+hi def link shTestPattern	shString
+hi def link shTestDoubleQuote	shString
+hi def link shTestSingleQuote	shString
 hi def link shVariable	shSetList
 hi def link shWrapLineOperator	shOperator
 
@@ -518,6 +528,7 @@ hi def link shSnglCase		Statement
 hi def link shCommandSub		Special
 hi def link shComment		Comment
 hi def link shConditional		Conditional
+hi def link shCtrlSeq		Special
 hi def link shExprRegion		Delimiter
 hi def link shFunctionKey		Function
 hi def link shFunctionName		Function
--- a/runtime/syntax/tcsh.vim
+++ b/runtime/syntax/tcsh.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:		C-shell (tcsh)
-" Maintainor:		Gautam Iyer <gautam@math.uchicago.edu>
-" Last Modified:	Sat 11 Mar 2006 11:16:47 AM CST
+" Maintainer:		Gautam Iyer <gi1242@users.sourceforge.net>
+" Last Modified:	Thu 16 Nov 2006 01:07:04 PM PST
 "
 " 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
@@ -48,9 +48,10 @@ syn keyword tcshSetEnv	nextgroup=tcshEnv
 syn region  tcshEnvEnd	contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshEnvVar,@tcshStatementEnds
 
 " alias and unalias (contains special aliases)
-syn keyword tcshAliases contained beemcmd cwdcmd jobcmd helpcommand periodic precmd postcmd shell
-syn keyword tcshAlias	nextgroup=tcshAliEnd alias unalias
-syn region  tcshAliEnd	contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=tcshAliases,@tcshStatementEnds
+syn keyword tcshAliases contained beepcmd cwdcmd jobcmd helpcommand periodic precmd postcmd shell
+syn keyword tcshAlias	nextgroup=tcshAliCmd skipwhite alias unalias
+syn match   tcshAliCmd	contained nextgroup=tcshAliEnd skipwhite '\v[\w-]+' contains=tcshAliases
+syn region  tcshAliEnd	contained transparent matchgroup=tcshBuiltins start='' skip="\\$" end="$\|;" contains=@tcshStatementEnds
 
 " if statements (contains expressions / operators)
 syn keyword tcshIf	nextgroup=tcshIfEnd if
@@ -72,10 +73,10 @@ syn match tcshExprEnd	contained "\v.*$"h
 syn match tcshExprEnd	contained "\v.{-};"hs=e	contains=tcshOperator,tcshNumber,@tcshVarList
 
 " ----- Comments: -----
-syn match tcshComment	"#.*" contains=tcshTodo,tcshCommentTi,tcshCommentSp,@Spell
-syn match tcshSharpBang "^#! .*$"
+syn match tcshComment	'#\s.*' contains=tcshTodo,tcshCommentTi,@Spell
+syn match tcshComment	'\v#($|\S.*)' contains=tcshTodo,tcshCommentTi
+syn match tcshSharpBang '^#! .*$'
 syn match tcshCommentTi contained '\v#\s*\u\w*(\s+\u\w*)*:'hs=s+1 contains=tcshTodo
-syn match tcshCommentSp contained '\v<\u{3,}>' contains=tcshTodo
 syn match tcshTodo	contained '\v\c<todo>'
 
 " ----- Strings -----
@@ -152,6 +153,7 @@ hi def link tcshBuiltins	statement
 hi def link tcshShellVar	preproc
 hi def link tcshEnvVar		tcshShellVar
 hi def link tcshAliases		tcshShellVar
+hi def link tcshAliCmd		identifier
 hi def link tcshCommands	identifier
 hi def link tcshSet		tcshBuiltins
 hi def link tcshSetEnv		tcshBuiltins
@@ -165,7 +167,6 @@ hi def link tcshExprOp		tcshOperator
 hi def link tcshExprEnd		tcshOperator
 hi def link tcshComment		comment
 hi def link tcshCommentTi	preproc
-hi def link tcshCommentSp	tcshCommentTi
 hi def link tcshSharpBang	tcshCommentTi
 hi def link tcshTodo		todo
 hi def link tcshSQuote		constant
--- 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:	Apr 18, 2006
-" Version:	35
+" Last Change:	Feb 27, 2007
+" Version:	37
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Notes: {{{1
@@ -261,25 +261,25 @@ syn match texSpaceCodeChar    "`\\\=.\(\
 
 " Sections, subsections, etc: {{{1
 if g:tex_fold_enabled && has("folding")
- syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'	fold keepend contains=@texFoldGroup,@texDocGroup,@Spell
- syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\n\ze\s*\\part\>'		fold keepend contains=@texFoldGroup,@texPartGroup,@Spell
- syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\n\ze\s*\\chapter\>'	fold keepend contains=@texFoldGroup,@texChapterGroup,@Spell
- syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\n\ze\s*\\section\>'	fold keepend contains=@texFoldGroup,@texSectionGroup,@Spell
- syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\n\ze\s*\\subsection\>'	fold keepend contains=@texFoldGroup,@texSubSectionGroup,@Spell
- syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		end='\n\ze\s*\\subsubsection\>'	fold keepend contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
- syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\n\ze\s*\\paragraph\>'	fold keepend contains=@texFoldGroup,@texParaGroup,@Spell
- syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\n\ze\s*\\subparagraph\>'	fold keepend contains=@texFoldGroup,@Spell
+ syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'	fold contains=@texFoldGroup,@texDocGroup,@Spell
+ syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\n\ze\s*\\part\>'		fold contains=@texFoldGroup,@texPartGroup,@Spell
+ syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\n\ze\s*\\chapter\>'	fold contains=@texFoldGroup,@texChapterGroup,@Spell
+ syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\n\ze\s*\\section\>'	fold contains=@texFoldGroup,@texSectionGroup,@Spell
+ syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\n\ze\s*\\subsection\>'	fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
+ syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		end='\n\ze\s*\\subsubsection\>'	fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+ syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\n\ze\s*\\paragraph\>'	fold contains=@texFoldGroup,@texParaGroup,@Spell
+ syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\n\ze\s*\\subparagraph\>'	fold contains=@texFoldGroup,@Spell
  syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'		fold contains=@texFoldGroup,@Spell
  syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'	fold contains=@texFoldGroup,@Spell
 else
- syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'	keepend contains=@texFoldGroup,@texDocGroup,@Spell
- syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\n\ze\s*\\part\>'		keepend contains=@texFoldGroup,@texPartGroup,@Spell
- syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\n\ze\s*\\chapter\>'	keepend contains=@texFoldGroup,@texChapterGroup,@Spell
- syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\n\ze\s*\\section\>'	keepend contains=@texFoldGroup,@texSectionGroup,@Spell
- syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\n\ze\s*\\subsection\>'	keepend contains=@texFoldGroup,@texSubSectionGroup,@Spell
- syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		end='\n\ze\s*\\subsubsection\>'	keepend contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
- syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\n\ze\s*\\paragraph\>'	keepend contains=@texFoldGroup,@texParaGroup,@Spell
- syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\n\ze\s*\\subparagraph\>'	keepend contains=@texFoldGroup,@Spell
+ syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'	contains=@texFoldGroup,@texDocGroup,@Spell
+ syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\n\ze\s*\\part\>'		contains=@texFoldGroup,@texPartGroup,@Spell
+ syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\n\ze\s*\\chapter\>'	contains=@texFoldGroup,@texChapterGroup,@Spell
+ syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\n\ze\s*\\section\>'	contains=@texFoldGroup,@texSectionGroup,@Spell
+ syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\n\ze\s*\\subsection\>'	contains=@texFoldGroup,@texSubSectionGroup,@Spell
+ syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		end='\n\ze\s*\\subsubsection\>'	contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+ syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\n\ze\s*\\paragraph\>'	contains=@texFoldGroup,@texParaGroup,@Spell
+ syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\n\ze\s*\\subparagraph\>'	contains=@texFoldGroup,@Spell
  syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'			contains=@texFoldGroup,@Spell
  syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'	contains=@texFoldGroup,@Spell
 endif
@@ -442,7 +442,7 @@ syn match texDefParms  contained		"#[^{]
 syn match  texDefParm  contained		"#\d\+"
 
 " TeX Lengths: {{{1
-syn match  texLength		"\<\d\+\(\.\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
+syn match  texLength		"\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
 
 " TeX String Delimiters: {{{1
 syn match texString		"\(``\|''\|,,\)"
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 7.0 script
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	May 02, 2006
-" Version:	7.0-50
+" Last Change:	April 25, 2007
+" Version:	7.0-62
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
@@ -16,20 +16,20 @@ syn keyword vimTodo contained	COMBAK	FIX
 syn cluster vimCommentGroup	contains=vimTodo,@Spell
 
 " regular vim commands {{{2
-syn keyword vimCommand contained	ab[breviate] abc[lear] abo[veleft] al[l] arga[dd] argd[elete] argdo arge[dit] argg[lobal] argl[ocal] ar[gs] argu[ment] as[cii] bad[d] ba[ll] bd[elete] be bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bN[ext] bo[tright] bp[revious] brea[k] breaka[dd] breakd[el] breakl[ist] br[ewind] bro[wse] bufdo b[uffer] buffers bun[load] bw[ipeout] ca[bbrev] cabc[lear] caddb[uffer] cad[dexpr] caddf[ile] cal[l] cat[ch] cb[uffer] cc ccl[ose] cd ce[nter] cex[pr] cf[ile] cfir[st] cgetb[uffer] cgete[xpr] cg[etfile] c[hange] changes chd[ir] che[ckpath] checkt[ime] cla[st] cl[ist] clo[se] cmapc[lear] cnew[er] cn[ext] cN[ext] cnf[ile] cNf[ile] cnorea[bbrev] col[der] colo[rscheme] comc[lear] comp[iler] conf[irm] con[tinue] cope[n] co[py] cpf[ile] cp[revious] cq[uit] cr[ewind] cuna[bbrev] cu[nmap] cw[indow] debugg[reedy] delc[ommand] d[elete] DeleteFirst delf[unction] delm[arks] diffg[et] diffoff diffpatch diffpu[t] diffsplit diffthis diffu[pdate] dig[raphs] di[splay] dj[ump] dl[ist] dr[op] ds[earch] dsp[lit] earlier echoe[rr] echom[sg] echon e[dit] el[se] elsei[f] em[enu] emenu* endfo[r] endf[unction] en[dif] endt[ry] endw[hile] ene[w] ex exi[t] Explore exu[sage] f[ile] files filetype fina[lly] fin[d] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] folddoc[losed] foldd[oopen] foldo[pen] for fu[nction] go[to] gr[ep] grepa[dd] ha[rdcopy] h[elp] helpf[ind] helpg[rep] helpt[ags] Hexplore hid[e] his[tory] I ia[bbrev] iabc[lear] if ij[ump] il[ist] imapc[lear] inorea[bbrev] is[earch] isp[lit] iuna[bbrev] iu[nmap] j[oin] ju[mps] k keepalt keepj[umps] kee[pmarks] laddb[uffer] lad[dexpr] laddf[ile] lan[guage] la[st] later lb[uffer] lc[d] lch[dir] lcl[ose] le[ft] lefta[bove] lex[pr] lf[ile] lfir[st] lgetb[uffer] lgete[xpr] lg[etfile] lgr[ep] lgrepa[dd] lh[elpgrep] l[ist] ll lla[st] lli[st] lmak[e] lm[ap] lmapc[lear] lnew[er] lne[xt] lN[ext] lnf[ile] lNf[ile] ln[oremap] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lpf[ile] lp[revious] lr[ewind] ls lt[ag] lu[nmap] lv[imgrep] lvimgrepa[dd] lw[indow] mak[e] ma[rk] marks mat[ch] menut[ranslate] mk[exrc] mks[ession] mksp[ell] mkvie[w] mkv[imrc] mod[e] m[ove] mzf[ile] mz[scheme] nbkey NetrwSettings new n[ext] N[ext] nmapc[lear] noh[lsearch] norea[bbrev] Nread nu[mber] nun[map] Nw omapc[lear] on[ly] o[pen] opt[ions] ou[nmap] pc[lose] ped[it] pe[rl] perld[o] po[p] popu popu[p] pp[op] pre[serve] prev[ious] p[rint] P[rint] profd[el] prof[ile] prompt promptf[ind] promptr[epl] ps[earch] pta[g] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptN[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] pyf[ile] py[thon] qa[ll] q[uit] quita[ll] r[ead] rec[over] redi[r] red[o] redr[aw] redraws[tatus] reg[isters] res[ize] ret[ab] retu[rn] rew[ind] ri[ght] rightb[elow] rub[y] rubyd[o] rubyf[ile] ru[ntime] rv[iminfo] sal[l] san[dbox] sa[rgument] sav[eas] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbN[ext] sbp[revious] sbr[ewind] sb[uffer] scripte[ncoding] scrip[tnames] se[t] setf[iletype] setg[lobal] setl[ocal] Sexplore sf[ind] sfir[st] sh[ell] sign sil[ent] sim[alt] sla[st] sl[eep] sm[agic] sm[ap] smapc[lear] sme smenu sn[ext] sN[ext] sni[ff] sno[magic] snor[emap] snoreme snoremenu sor[t] so[urce] spelld[ump] spe[llgood] spelli[nfo] spellr[epall] spellu[ndo] spellw[rong] sp[lit] spr[evious] sre[wind] sta[g] startg[replace] star[tinsert] startr[eplace] stj[ump] st[op] stopi[nsert] sts[elect] sun[hide] sunm[ap] sus[pend] sv[iew] syncbind t tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabl[ast] tabmove tabnew tabn[ext] tabN[ext] tabo[nly] tabp[revious] tabr[ewind] tabs ta[g] tags tc[l] tcld[o] tclf[ile] te[aroff] tf[irst] the th[row] tj[ump] tl[ast] tm tm[enu] tn[ext] tN[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] tu tu[nmenu] una[bbreviate] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] unm[ap] up[date] verb[ose] ve[rsion] vert[ical] Vexplore vie[w] vim[grep] vimgrepa[dd] vi[sual] viu[sage] vmapc[lear] vne[w] vs[plit] vu[nmap] wa[ll] wh[ile] winc[md] windo winp[os] win[size] wn[ext] wN[ext] wp[revious] wq wqa[ll] w[rite] ws[verb] wv[iminfo] X xa[ll] x[it] xm[ap] xmapc[lear] xme xmenu XMLent XMLns xn[oremap] xnoreme xnoremenu xu[nmap] y[ank] 
+syn keyword vimCommand contained	ab[breviate] abc[lear] abo[veleft] al[l] arga[dd] argd[elete] argdo arge[dit] argg[lobal] argl[ocal] ar[gs] argu[ment] as[cii] bad[d] ba[ll] bd[elete] be bel[owright] bf[irst] bl[ast] bm[odified] bn[ext] bN[ext] bo[tright] bp[revious] brea[k] breaka[dd] breakd[el] breakl[ist] br[ewind] bro[wse] bufdo b[uffer] buffers bun[load] bw[ipeout] ca[bbrev] cabc[lear] caddb[uffer] cad[dexpr] caddf[ile] cal[l] cat[ch] cb[uffer] cc ccl[ose] cd ce[nter] cex[pr] cf[ile] cfir[st] cgetb[uffer] cgete[xpr] cg[etfile] c[hange] changes chd[ir] che[ckpath] checkt[ime] cla[st] cl[ist] clo[se] cmapc[lear] cnew[er] cn[ext] cN[ext] cnf[ile] cNf[ile] cnorea[bbrev] col[der] colo[rscheme] comc[lear] comp[iler] conf[irm] con[tinue] cope[n] co[py] cpf[ile] cp[revious] cq[uit] cr[ewind] cuna[bbrev] cu[nmap] cw[indow] debugg[reedy] delc[ommand] d[elete] DeleteFirst delf[unction] delm[arks] diffg[et] diffoff diffpatch diffpu[t] diffsplit diffthis diffu[pdate] dig[raphs] di[splay] dj[ump] dl[ist] dr[op] ds[earch] dsp[lit] earlier echoe[rr] echom[sg] echon e[dit] el[se] elsei[f] em[enu] emenu* endfo[r] endf[unction] en[dif] endt[ry] endw[hile] ene[w] ex exi[t] Explore exu[sage] f[ile] files filetype fina[lly] fin[d] fini[sh] fir[st] fix[del] fo[ld] foldc[lose] folddoc[losed] foldd[oopen] foldo[pen] for fu[nction] go[to] gr[ep] grepa[dd] ha[rdcopy] h[elp] helpf[ind] helpg[rep] helpt[ags] Hexplore hid[e] his[tory] I ia[bbrev] iabc[lear] if ij[ump] il[ist] imapc[lear] inorea[bbrev] is[earch] isp[lit] iuna[bbrev] iu[nmap] j[oin] ju[mps] k keepalt keepj[umps] kee[pmarks] laddb[uffer] lad[dexpr] laddf[ile] lan[guage] la[st] later lb[uffer] lc[d] lch[dir] lcl[ose] le[ft] lefta[bove] lex[pr] lf[ile] lfir[st] lgetb[uffer] lgete[xpr] lg[etfile] lgr[ep] lgrepa[dd] lh[elpgrep] l[ist] ll lla[st] lli[st] lmak[e] lm[ap] lmapc[lear] lnew[er] lne[xt] lN[ext] lnf[ile] lNf[ile] ln[oremap] lo[adview] loc[kmarks] lockv[ar] lol[der] lop[en] lpf[ile] lp[revious] lr[ewind] ls lt[ag] lu[nmap] lv[imgrep] lvimgrepa[dd] lw[indow] mak[e] ma[rk] marks mat[ch] menut[ranslate] mk[exrc] mks[ession] mksp[ell] mkvie[w] mkv[imrc] mod[e] m[ove] mzf[ile] mz[scheme] nbkey NetrwSettings new n[ext] N[ext] nmapc[lear] noh[lsearch] norea[bbrev] Nread nu[mber] nun[map] Nw omapc[lear] on[ly] o[pen] opt[ions] ou[nmap] pc[lose] ped[it] pe[rl] perld[o] po[p] popu popu[p] pp[op] pre[serve] prev[ious] p[rint] P[rint] profd[el] prof[ile] prompt promptf[ind] promptr[epl] ps[earch] pta[g] ptf[irst] ptj[ump] ptl[ast] ptn[ext] ptN[ext] ptp[revious] ptr[ewind] pts[elect] pu[t] pw[d] pyf[ile] py[thon] qa[ll] q[uit] quita[ll] r[ead] rec[over] redi[r] red[o] redr[aw] redraws[tatus] reg[isters] res[ize] ret[ab] retu[rn] rew[ind] ri[ght] rightb[elow] rub[y] rubyd[o] rubyf[ile] ru[ntime] rv[iminfo] sal[l] san[dbox] sa[rgument] sav[eas] sba[ll] sbf[irst] sbl[ast] sbm[odified] sbn[ext] sbN[ext] sbp[revious] sbr[ewind] sb[uffer] scripte[ncoding] scrip[tnames] se[t] setf[iletype] setg[lobal] setl[ocal] Sexplore sf[ind] sfir[st] sh[ell] sign sil[ent] sim[alt] sla[st] sl[eep] sm[agic] sm[ap] smapc[lear] sme smenu sn[ext] sN[ext] sni[ff] sno[magic] snor[emap] snoreme snoremenu sor[t] so[urce] spelld[ump] spe[llgood] spelli[nfo] spellr[epall] spellu[ndo] spellw[rong] sp[lit] spr[evious] sre[wind] sta[g] startg[replace] star[tinsert] startr[eplace] stj[ump] st[op] stopi[nsert] sts[elect] sun[hide] sunm[ap] sus[pend] sv[iew] syncbind t tab tabc[lose] tabd[o] tabe[dit] tabf[ind] tabfir[st] tabl[ast] tabm[ove] tabnew tabn[ext] tabN[ext] tabo[nly] tabp[revious] tabr[ewind] tabs ta[g] tags tc[l] tcld[o] tclf[ile] te[aroff] tf[irst] the th[row] tj[ump] tl[ast] tm tm[enu] tn[ext] tN[ext] to[pleft] tp[revious] tr[ewind] try ts[elect] tu tu[nmenu] una[bbreviate] u[ndo] undoj[oin] undol[ist] unh[ide] unlo[ckvar] unm[ap] up[date] verb[ose] ve[rsion] vert[ical] Vexplore vie[w] vim[grep] vimgrepa[dd] vi[sual] viu[sage] vmapc[lear] vne[w] vs[plit] vu[nmap] wa[ll] wh[ile] winc[md] windo winp[os] win[size] wn[ext] wN[ext] wp[revious] wq wqa[ll] w[rite] ws[verb] wv[iminfo] X xa[ll] x[it] xm[ap] xmapc[lear] xme xmenu XMLent XMLns xn[oremap] xnoreme xnoremenu xu[nmap] y[ank] 
 syn match   vimCommand contained	"\<z[-+^.=]"
 
 " vimOptions are caught only when contained in a vimSet {{{2
-syn keyword vimOption contained	acd ai akm al aleph allowrevins altkeymap ambiwidth ambw anti antialias ar arab arabic arabicshape ari arshape autochdir autoindent autoread autowrite autowriteall aw awa background backspace backup backupcopy backupdir backupext backupskip balloondelay ballooneval balloonexpr bdir bdlay beval bex bexpr bg bh bin binary biosk bioskey bk bkc bl bomb breakat brk browsedir bs bsdir bsk bt bufhidden buflisted buftype casemap cb ccv cd cdpath cedit cf cfu ch charconvert ci cin cindent cink cinkeys cino cinoptions cinw cinwords clipboard cmdheight cmdwinheight cmp cms co columns com comments commentstring compatible complete completefunc completeopt confirm consk conskey copyindent cot cp cpo cpoptions cpt cscopepathcomp cscopeprg cscopequickfix cscopetag cscopetagorder cscopeverbose cspc csprg csqf cst csto csverb cuc cul cursorcolumn cursorline cwh debug deco def define delcombine dex dg dict dictionary diff diffexpr diffopt digraph dip dir directory display dy ea ead eadirection eb ed edcompatible ef efm ei ek enc encoding endofline eol ep equalalways equalprg errorbells errorfile errorformat esckeys et eventignore ex expandtab exrc fcl fcs fdc fde fdi fdl fdls fdm fdn fdo fdt fen fenc fencs fex ff ffs fileencoding fileencodings fileformat fileformats filetype fillchars fk fkmap flp fml fmr fo foldclose foldcolumn foldenable foldexpr foldignore foldlevel foldlevelstart foldmarker foldmethod foldminlines foldnestmax foldopen foldtext formatexpr formatlistpat formatoptions formatprg fp fs fsync ft gcr gd gdefault gfm gfn gfs gfw ghr go gp grepformat grepprg gtl gtt guicursor guifont guifontset guifontwide guiheadroom guioptions guipty guitablabel guitabtooltip helpfile helpheight helplang hf hh hi hid hidden highlight history hk hkmap hkmapp hkp hl hlg hls hlsearch ic icon iconstring ignorecase im imactivatekey imak imc imcmdline imd imdisable imi iminsert ims imsearch inc include includeexpr incsearch inde indentexpr indentkeys indk inex inf infercase insertmode is isf isfname isi isident isk iskeyword isp isprint joinspaces js key keymap keymodel keywordprg km kmp kp langmap langmenu laststatus lazyredraw lbr lcs linebreak lines linespace lisp lispwords list listchars lm lmap loadplugins lpl ls lsp lw lz ma macatsui magic makeef makeprg mat matchpairs matchtime maxcombine maxfuncdepth maxmapdepth maxmem maxmempattern maxmemtot mco mef menuitems mfd mh mis mkspellmem ml mls mm mmd mmp mmt mod modeline modelines modifiable modified more mouse mousef mousefocus mousehide mousem mousemodel mouses mouseshape mouset mousetime mp mps msm mzq mzquantum nf nrformats nu number numberwidth nuw oft ofu omnifunc operatorfunc opfunc osfiletype pa para paragraphs paste pastetoggle patchexpr patchmode path pdev penc pex pexpr pfn ph pheader pi pm pmbcs pmbfn popt preserveindent previewheight previewwindow printdevice printencoding printexpr printfont printheader printmbcharset printmbfont printoptions prompt pt pumheight pvh pvw qe quoteescape readonly remap report restorescreen revins ri rightleft rightleftcmd rl rlc ro rs rtp ru ruf ruler rulerformat runtimepath sb sbo sbr sc scb scr scroll scrollbind scrolljump scrolloff scrollopt scs sect sections secure sel selection selectmode sessionoptions sft sh shcf shell shellcmdflag shellpipe shellquote shellredir shellslash shelltemp shelltype shellxquote shiftround shiftwidth shm shortmess shortname showbreak showcmd showfulltag showmatch showmode showtabline shq si sidescroll sidescrolloff siso sj slm sm smartcase smartindent smarttab smc smd sn so softtabstop sol sp spc spell spellcapcheck spellfile spelllang spellsuggest spf spl splitbelow splitright spr sps sr srr ss ssl ssop st sta stal startofline statusline stl stmp sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn synmaxcol syntax ta tabline tabpagemax tabstop tag tagbsearch taglength tagrelative tags tagstack tal tb tbi tbidi tbis tbs tenc term termbidi termencoding terse textauto textmode textwidth tf tgst thesaurus tildeop timeout timeoutlen title titlelen titleold titlestring tl tm to toolbar toolbariconsize top tpm tr ts tsl tsr ttimeout ttimeoutlen ttm tty ttybuiltin ttyfast ttym ttymouse ttyscroll ttytype tw tx uc ul undolevels updatecount updatetime ut vb vbs vdir ve verbose verbosefile vfile vi viewdir viewoptions viminfo virtualedit visualbell vop wa wak warn wb wc wcm wd weirdinvert wfh wfw wh whichwrap wi wig wildchar wildcharm wildignore wildmenu wildmode wildoptions wim winaltkeys window winfixheight winfixwidth winheight winminheight winminwidth winwidth wiv wiw wm wmh wmnu wmw wop wrap wrapmargin wrapscan write writeany writebackup writedelay ws ww 
+syn keyword vimOption contained	acd ai akm al aleph allowrevins altkeymap ambiwidth ambw anti antialias ar arab arabic arabicshape ari arshape autochdir autoindent autoread autowrite autowriteall aw awa background backspace backup backupcopy backupdir backupext backupskip balloondelay ballooneval balloonexpr bdir bdlay beval bex bexpr bg bh bin binary biosk bioskey bk bkc bl bomb breakat brk browsedir bs bsdir bsk bt bufhidden buflisted buftype casemap cb ccv cd cdpath cedit cf cfu ch charconvert ci cin cindent cink cinkeys cino cinoptions cinw cinwords clipboard cmdheight cmdwinheight cmp cms co columns com comments commentstring compatible complete completefunc completeopt confirm consk conskey copyindent cot cp cpo cpoptions cpt cscopepathcomp cscopeprg cscopequickfix cscopetag cscopetagorder cscopeverbose cspc csprg csqf cst csto csverb cuc cul cursorcolumn cursorline cwh debug deco def define delcombine dex dg dict dictionary diff diffexpr diffopt digraph dip dir directory display dy ea ead eadirection eb ed edcompatible ef efm ei ek enc encoding endofline eol ep equalalways equalprg errorbells errorfile errorformat esckeys et eventignore ex expandtab exrc fcl fcs fdc fde fdi fdl fdls fdm fdn fdo fdt fen fenc fencs fex ff ffs fileencoding fileencodings fileformat fileformats filetype fillchars fk fkmap flp fml fmr fo foldclose foldcolumn foldenable foldexpr foldignore foldlevel foldlevelstart foldmarker foldmethod foldminlines foldnestmax foldopen foldtext formatexpr formatlistpat formatoptions formatprg fp fs fsync ft gcr gd gdefault gfm gfn gfs gfw ghr go gp grepformat grepprg gtl gtt guicursor guifont guifontset guifontwide guiheadroom guioptions guipty guitablabel guitabtooltip helpfile helpheight helplang hf hh hi hid hidden highlight history hk hkmap hkmapp hkp hl hlg hls hlsearch ic icon iconstring ignorecase im imactivatekey imak imc imcmdline imd imdisable imi iminsert ims imsearch inc include includeexpr incsearch inde indentexpr indentkeys indk inex inf infercase insertmode is isf isfname isi isident isk iskeyword isp isprint joinspaces js key keymap keymodel keywordprg km kmp kp langmap langmenu laststatus lazyredraw lbr lcs linebreak lines linespace lisp lispwords list listchars lm lmap loadplugins lpl ls lsp lw lz ma macatsui magic makeef makeprg mat matchpairs matchtime maxcombine maxfuncdepth maxmapdepth maxmem maxmempattern maxmemtot mco mef menuitems mfd mh mis mkspellmem ml mls mm mmd mmp mmt mod modeline modelines modifiable modified more mouse mousef mousefocus mousehide mousem mousemodel mouses mouseshape mouset mousetime mp mps msm mzq mzquantum nf nrformats nu number numberwidth nuw odev oft ofu omnifunc opendevice operatorfunc opfunc osfiletype pa para paragraphs paste pastetoggle patchexpr patchmode path pdev penc pex pexpr pfn ph pheader pi pm pmbcs pmbfn popt preserveindent previewheight previewwindow printdevice printencoding printexpr printfont printheader printmbcharset printmbfont printoptions prompt pt pumheight pvh pvw qe quoteescape readonly remap report restorescreen revins ri rightleft rightleftcmd rl rlc ro rs rtp ru ruf ruler rulerformat runtimepath sb sbo sbr sc scb scr scroll scrollbind scrolljump scrolloff scrollopt scs sect sections secure sel selection selectmode sessionoptions sft sh shcf shell shellcmdflag shellpipe shellquote shellredir shellslash shelltemp shelltype shellxquote shiftround shiftwidth shm shortmess shortname showbreak showcmd showfulltag showmatch showmode showtabline shq si sidescroll sidescrolloff siso sj slm sm smartcase smartindent smarttab smc smd sn so softtabstop sol sp spc spell spellcapcheck spellfile spelllang spellsuggest spf spl splitbelow splitright spr sps sr srr ss ssl ssop st sta stal startofline statusline stl stmp sts su sua suffixes suffixesadd sw swapfile swapsync swb swf switchbuf sws sxq syn synmaxcol syntax ta tabline tabpagemax tabstop tag tagbsearch taglength tagrelative tags tagstack tal tb tbi tbidi tbis tbs tenc term termbidi termencoding terse textauto textmode textwidth tf tgst thesaurus tildeop timeout timeoutlen title titlelen titleold titlestring tl tm to toolbar toolbariconsize top tpm tr ts tsl tsr ttimeout ttimeoutlen ttm tty ttybuiltin ttyfast ttym ttymouse ttyscroll ttytype tw tx uc ul undolevels updatecount updatetime ut vb vbs vdir ve verbose verbosefile vfile vi viewdir viewoptions viminfo virtualedit visualbell vop wa wak warn wb wc wcm wd weirdinvert wfh wfw wh whichwrap wi wig wildchar wildcharm wildignore wildmenu wildmode wildoptions wim winaltkeys window winfixheight winfixwidth winheight winminheight winminwidth winwidth wiv wiw wm wmh wmnu wmw wop wrap wrapmargin wrapscan write writeany writebackup writedelay ws ww 
 
 " vimOptions: These are the turn-off setting variants {{{2
-syn keyword vimOption contained	noacd noai noakm noallowrevins noaltkeymap noanti noantialias noar noarab noarabic noarabicshape noari noarshape noautochdir noautoindent noautoread noautowrite noautowriteall noaw noawa nobackup noballooneval nobeval nobin nobinary nobiosk nobioskey nobk nobl nobomb nobuflisted nocf noci nocin nocindent nocompatible noconfirm noconsk noconskey nocopyindent nocp nocscopetag nocscopeverbose nocst nocsverb nocuc nocul nocursorcolumn nocursorline nodeco nodelcombine nodg nodiff nodigraph nodisable noea noeb noed noedcompatible noek noendofline noeol noequalalways noerrorbells noesckeys noet noex noexpandtab noexrc nofen nofk nofkmap nofoldenable nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkmapp nohkp nohls nohlsearch noic noicon noignorecase noim noimc noimcmdline noimd noincsearch noinf noinfercase noinsertmode nois nojoinspaces nojs nolazyredraw nolbr nolinebreak nolisp nolist noloadplugins nolpl nolz noma nomacatsui nomagic nomh noml nomod nomodeline nomodifiable nomodified nomore nomousef nomousefocus nomousehide nonu nonumber nopaste nopi nopreserveindent nopreviewwindow noprompt nopvw noreadonly noremap norestorescreen norevins nori norightleft norightleftcmd norl norlc noro nors noru noruler nosb nosc noscb noscrollbind noscs nosecure nosft noshellslash noshelltemp noshiftround noshortname noshowcmd noshowfulltag noshowmatch noshowmode nosi nosm nosmartcase nosmartindent nosmarttab nosmd nosn nosol nospell nosplitbelow nosplitright nospr nosr nossl nosta nostartofline nostmp noswapfile noswf nota notagbsearch notagrelative notagstack notbi notbidi notbs notermbidi noterse notextauto notextmode notf notgst notildeop notimeout notitle noto notop notr nottimeout nottybuiltin nottyfast notx novb novisualbell nowa nowarn nowb noweirdinvert nowfh nowfw nowildmenu nowinfixheight nowinfixwidth nowiv nowmnu nowrap nowrapscan nowrite nowriteany nowritebackup nows 
+syn keyword vimOption contained	noacd noai noakm noallowrevins noaltkeymap noanti noantialias noar noarab noarabic noarabicshape noari noarshape noautochdir noautoindent noautoread noautowrite noautowriteall noaw noawa nobackup noballooneval nobeval nobin nobinary nobiosk nobioskey nobk nobl nobomb nobuflisted nocf noci nocin nocindent nocompatible noconfirm noconsk noconskey nocopyindent nocp nocscopetag nocscopeverbose nocst nocsverb nocuc nocul nocursorcolumn nocursorline nodeco nodelcombine nodg nodiff nodigraph nodisable noea noeb noed noedcompatible noek noendofline noeol noequalalways noerrorbells noesckeys noet noex noexpandtab noexrc nofen nofk nofkmap nofoldenable nogd nogdefault noguipty nohid nohidden nohk nohkmap nohkmapp nohkp nohls nohlsearch noic noicon noignorecase noim noimc noimcmdline noimd noincsearch noinf noinfercase noinsertmode nois nojoinspaces nojs nolazyredraw nolbr nolinebreak nolisp nolist noloadplugins nolpl nolz noma nomacatsui nomagic nomh noml nomod nomodeline nomodifiable nomodified nomore nomousef nomousefocus nomousehide nonu nonumber noopendevice* * nopaste nopi nopreserveindent nopreviewwindow noprompt nopvw noreadonly noremap norestorescreen norevins nori norightleft norightleftcmd norl norlc noro nors noru noruler nosb nosc noscb noscrollbind noscs nosecure nosft noshellslash noshelltemp noshiftround noshortname noshowcmd noshowfulltag noshowmatch noshowmode nosi nosm nosmartcase nosmartindent nosmarttab nosmd nosn nosol nospell nosplitbelow nosplitright nospr nosr nossl nosta nostartofline nostmp noswapfile noswf nota notagbsearch notagrelative notagstack notbi notbidi notbs notermbidi noterse notextauto notextmode notf notgst notildeop notimeout notitle noto notop notr nottimeout nottybuiltin nottyfast notx novb novisualbell nowa nowarn nowb noweirdinvert nowfh nowfw nowildmenu nowinfixheight nowinfixwidth nowiv nowmnu nowrap nowrapscan nowrite nowriteany nowritebackup nows 
 
 " vimOptions: These are the invertible variants {{{2
-syn keyword vimOption contained	invacd invai invakm invallowrevins invaltkeymap invanti invantialias invar invarab invarabic invarabicshape invari invarshape invautochdir invautoindent invautoread invautowrite invautowriteall invaw invawa invbackup invballooneval invbeval invbin invbinary invbiosk invbioskey invbk invbl invbomb invbuflisted invcf invci invcin invcindent invcompatible invconfirm invconsk invconskey invcopyindent invcp invcscopetag invcscopeverbose invcst invcsverb invcuc invcul invcursorcolumn invcursorline invdeco invdelcombine invdg invdiff invdigraph invdisable invea inveb inved invedcompatible invek invendofline inveol invequalalways inverrorbells invesckeys invet invex invexpandtab invexrc invfen invfk invfkmap invfoldenable invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkmapp invhkp invhls invhlsearch invic invicon invignorecase invim invimc invimcmdline invimd invincsearch invinf invinfercase invinsertmode invis invjoinspaces invjs invlazyredraw invlbr invlinebreak invlisp invlist invloadplugins invlpl invlz invma invmacatsui invmagic invmh invml invmod invmodeline invmodifiable invmodified invmore invmousef invmousefocus invmousehide invnu invnumber invpaste invpi invpreserveindent invpreviewwindow invprompt invpvw invreadonly invremap invrestorescreen invrevins invri invrightleft invrightleftcmd invrl invrlc invro invrs invru invruler invsb invsc invscb invscrollbind invscs invsecure invsft invshellslash invshelltemp invshiftround invshortname invshowcmd invshowfulltag invshowmatch invshowmode invsi invsm invsmartcase invsmartindent invsmarttab invsmd invsn invsol invspell invsplitbelow invsplitright invspr invsr invssl invsta invstartofline invstmp invswapfile invswf invta invtagbsearch invtagrelative invtagstack invtbi invtbidi invtbs invtermbidi invterse invtextauto invtextmode invtf invtgst invtildeop invtimeout invtitle invto invtop invtr invttimeout invttybuiltin invttyfast invtx invvb invvisualbell invwa invwarn invwb invweirdinvert invwfh invwfw invwildmenu invwinfixheight invwinfixwidth invwiv invwmnu invwrap invwrapscan invwrite invwriteany invwritebackup invws 
+syn keyword vimOption contained	invacd invai invakm invallowrevins invaltkeymap invanti invantialias invar invarab invarabic invarabicshape invari invarshape invautochdir invautoindent invautoread invautowrite invautowriteall invaw invawa invbackup invballooneval invbeval invbin invbinary invbiosk invbioskey invbk invbl invbomb invbuflisted invcf invci invcin invcindent invcompatible invconfirm invconsk invconskey invcopyindent invcp invcscopetag invcscopeverbose invcst invcsverb invcuc invcul invcursorcolumn invcursorline invdeco invdelcombine invdg invdiff invdigraph invdisable invea inveb inved invedcompatible invek invendofline inveol invequalalways inverrorbells invesckeys invet invex invexpandtab invexrc invfen invfk invfkmap invfoldenable invgd invgdefault invguipty invhid invhidden invhk invhkmap invhkmapp invhkp invhls invhlsearch invic invicon invignorecase invim invimc invimcmdline invimd invincsearch invinf invinfercase invinsertmode invis invjoinspaces invjs invlazyredraw invlbr invlinebreak invlisp invlist invloadplugins invlpl invlz invma invmacatsui invmagic invmh invml invmod invmodeline invmodifiable invmodified invmore invmousef invmousefocus invmousehide invnu invnumber invopendevice* * invpaste invpi invpreserveindent invpreviewwindow invprompt invpvw invreadonly invremap invrestorescreen invrevins invri invrightleft invrightleftcmd invrl invrlc invro invrs invru invruler invsb invsc invscb invscrollbind invscs invsecure invsft invshellslash invshelltemp invshiftround invshortname invshowcmd invshowfulltag invshowmatch invshowmode invsi invsm invsmartcase invsmartindent invsmarttab invsmd invsn invsol invspell invsplitbelow invsplitright invspr invsr invssl invsta invstartofline invstmp invswapfile invswf invta invtagbsearch invtagrelative invtagstack invtbi invtbidi invtbs invtermbidi invterse invtextauto invtextmode invtf invtgst invtildeop invtimeout invtitle invto invtop invtr invttimeout invttybuiltin invttyfast invtx invvb invvisualbell invwa invwarn invwb invweirdinvert invwfh invwfw invwildmenu invwinfixheight invwinfixwidth invwiv invwmnu invwrap invwrapscan invwrite invwriteany invwritebackup invws 
 
 " termcap codes (which can also be set) {{{2
-syn keyword vimOption contained	t_AB t_AF t_al t_AL t_bc t_cd t_ce t_Ce t_cl t_cm t_Co t_cs t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI    end insert mode (block cursor shape)            *t_EI* *'t_EI'* t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI    start insert mode (bar cursor shape)            *t_SI* *'t_SI'* t_so t_sr t_te t_ti t_ts t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR 
+syn keyword vimOption contained	t_AB t_AF t_al t_AL t_bc t_cd t_ce t_Ce t_cl t_cm t_Co t_cs t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_te t_ti t_ts t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR 
 syn match   vimOption contained	"t_%1"
 syn match   vimOption contained	"t_#2"
 syn match   vimOption contained	"t_#4"
@@ -44,7 +44,7 @@ syn keyword vimErrSetting contained	hard
 
 " AutoCmd Events {{{2
 syn case ignore
-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 InsertChange InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
+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 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 
@@ -55,7 +55,7 @@ syn match vimHLGroup contained	"Conceal"
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained	add append argc argidx argv browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call changenr char2nr cindent col complete complete_add complete_check confirm copy count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists expand expr8 extend feedkeys filereadable filewritable filter finddir findfile fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getpos getqflist getreg getregtype gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime map maparg mapcheck match matcharg matchend matchlist matchstr max min mkdir mode nextnonblank nr2char pathshorten prevnonblank printf pumvisible range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setpos setqflist setreg settabwinvar setwinvar simplify sort soundfold spellbadword spellsuggest split str2nr strftime stridx string strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tempname tolower toupper tr type values virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile 
+syn keyword vimFuncName contained	add append argc argidx argv browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call changenr char2nr cindent col complete complete_add complete_check confirm copy count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists expand expr8 extend feedkeys filereadable filewritable filter finddir findfile fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getpos getqflist getreg getregtype gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key haslocaldir hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime map maparg mapcheck match matcharg matchend matchlist matchstr max min mkdir mode nextnonblank nr2char pathshorten prevnonblank printf pumvisible range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setpos setqflist setreg settabwinvar setwinvar shellescape simplify sort soundfold spellbadword spellsuggest split str2nr strftime stridx string strlen strpart strridx strtrans submatch substitute synID synIDattr synIDtrans system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tempname tolower toupper tr type values virtcol visualmode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile 
 
 "--- syntax above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
@@ -114,7 +114,7 @@ syn cluster vimFuncBodyList	contains=vim
 if !exists("g:vimsyntax_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*\ze\s*("	contains=@vimFuncList nextgroup=vimFuncBody
+syn match   vimFunction	"\<fu\%[nction]!\=\s\+\(\(<[sS][iI][dD]>\|[Ss]:\|\u\)\i*\|g:\(\I\i*\.\)\+\I\i*\)\ze\s*("	contains=@vimFuncList nextgroup=vimFuncBody
 syn region  vimFuncBody  contained	start=")"	end="\<endf\%[unction]"		contains=@vimFuncBodyList
 syn match   vimFuncVar   contained	"a:\(\I\i*\|\d\+\)"
 syn match   vimFuncSID   contained	"\c<sid>\|\<s:"
@@ -163,7 +163,7 @@ 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	",\%(\h\w*\%(#\u\w*\)\+\|\u\w*\)"hs=s+1 nextgroup=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*"
@@ -195,7 +195,7 @@ 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
+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
@@ -235,7 +235,7 @@ syn match  vimMark	"\<norm\%[al]\s\zs'[a
 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.%#:_\-/][^a-zA-Z_"]\ze'
+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	'@"'
@@ -281,7 +281,7 @@ 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] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] vm[ap] vn[oremap] skipwhite nextgroup=vimMapBang,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 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
@@ -306,7 +306,7 @@ syn match   vimMenuBang	"!"	contained sk
 " Angle-Bracket Notation (tnx to Michael Geddes) {{{2
 " ======================
 syn case ignore
-syn match vimNotation	"\(\\\|<lt>\)\=<\([scam]-\)\{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>\)\=<\([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
@@ -317,9 +317,9 @@ syn case match
 
 " User Function Highlighting (following Gautam Iyer's suggestion) {{{2
 " ==========================
-syn match vimFunc		"\%([sS]:\|<[sS][iI][dD]>\)\=\I\i*\ze\s*("	contains=vimFuncName,vimUserFunc,vimCommand,vimNotFunc,vimExecute
-syn match vimUserFunc contained	"\%([sS]:\|<[sS][iI][dD]>\)\i\+\|\<\u\i*\>\|\<if\>"	contains=vimNotation,vimCommand
-syn match vimNotFunc  contained	"\<[aiAIrR]("
+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]\>"
 
 " Norm
 " ====
@@ -470,7 +470,7 @@ syn match vimCtrlChar	"[--]"
 " Beginners - Patterns that involve ^ {{{2
 " =========
 syn match  vimLineComment	+^[ \t:]*".*$+	contains=@vimCommentGroup,vimCommentString,vimCommentTitle
-syn match  vimCommentTitle	'"\s*\u\w*\(\s\+\u\w*\)*:'hs=s+1	contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup
+syn match  vimCommentTitle	'"\s*\%([sS]:\)\=\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
@@ -517,12 +517,21 @@ if (has("python") || g:vimembedscript) &
 endif
 
 " [-- tcl --] {{{3
-if (has("tcl") || g:vimembedscript) && filereadable(expand("<sfile>:p:h")."/tcl.vim")
- unlet! b:current_syntax
- syn include @vimTclScript <sfile>:p:h/tcl.vim
- 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
+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\>\|\<zsh\>\)\%(\.exe\)\=$') || g:vimembedscript
+else
+ let trytcl= 1
 endif
+if trytcl
+ if (has("tcl") || g:vimembedscript) && filereadable(expand("<sfile>:p:h")."/tcl.vim")
+  unlet! b:current_syntax
+  syn include @vimTclScript <sfile>:p:h/tcl.vim
+  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
+endif
+unlet trytcl
 
 " [-- mzscheme --] {{{3
 if (has("mzscheme") || g:vimembedscript) && filereadable(expand("<sfile>:p:h")."/scheme.vim")
@@ -610,7 +619,6 @@ hi def link vimMenuMod	vimMapMod
 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
@@ -670,6 +678,7 @@ 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 vimOper	Operator
 hi def link vimOption	PreProc
--- a/runtime/syntax/xdefaults.vim
+++ b/runtime/syntax/xdefaults.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 "		Author and previous maintainer:
 "		Gautam H. Mudunuri <gmudunur@informatica.com>
-" Last Change:	Tue, 27 Apr 2004 14:54:59 CEST
+" Last Change:	Di, 09 Mai 2006 23:10:23 CEST
 " $Id$
 "
 " REFERENCES:
@@ -48,7 +48,7 @@ syn match   xdefaultsLineEnd	contained +
 " COMMENTS
 
 " note, that the '!' must be at the very first position of the line
-syn match   xdefaultsComment "^!.*$"                     contains=xdefaultsTodo
+syn match   xdefaultsComment "^!.*$"                     contains=xdefaultsTodo,@Spell
 
 " lines starting with a '#' mark and which are not preprocessor
 " lines are skipped.  This is not part of the xrdb documentation.
@@ -56,7 +56,7 @@ syn match   xdefaultsComment "^!.*$"    
 " having a look at xrdb.c:GetEntries()
 syn match   xdefaultsCommentH		"^#.*$"
 "syn region  xdefaultsComment start="^#"  end="$" keepend contains=ALL
-syn region  xdefaultsComment start="/\*" end="\*/"       contains=xdefaultsTodo
+syn region  xdefaultsComment start="/\*" end="\*/"       contains=xdefaultsTodo,@Spell
 
 syntax match xdefaultsCommentError	"\*/"
 
new file mode 100644
--- /dev/null
+++ b/runtime/tutor/tutor.cs
@@ -0,0 +1,812 @@
+===============================================================================
+=    V í t e j t e   v  t u t o r i a l u   V I M       -    Verze 1.5        =
+===============================================================================
+
+     Vim je velmi výkonný editor, který má pøíli¹ mnoho pøíkazù na to, aby
+     mohly být v¹echny vysvìtlené ve výuce jako tato. Tato výuka obsahuje
+     dostateèné mno¾ství pøíkazù na to, aby bylo mo¾né pou¾ívat Vim jako
+     víceúèelový editor.
+
+     Pøibli¾ný èas potøebný ke zvládnutí této výuky je 25-30 minut, zále¾í
+     na tom, kolik èasu strávíte pøezku¹ováním.
+
+     Pøíkazy v lekcích upravují text. Vytvoø kopii tohoto souboru pro
+     procvièování (pøi startu "vimtutor" je ji¾ toto kopie).
+
+     Je dùle¾ité pamatovat, ¾e tato výuka je vytvoøena pro výuku pou¾íváním.
+     To znamená, ¾e je potøeba si pøíkazy vyzkou¹et pro jejich správné
+     nauèení. Pokud si jen ète¹ text, pøíkazy zapomene¹!
+
+     Nyní se pøesvìdète, ¾e Shift-Lock NENÍ stlaèený a nìkolikrát stisknìte
+     klávesu  j   aby se kurzor posunul natolik, ¾e lekce 1.1 zaplní celou
+     obrazovku.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 1.1:  POHYB KURZORU
+
+
+   ** Pro pohyb kurzoru pou¾ívej klávesy h,j,k,l jak je znázornìno ní¾e. **
+	     ^
+	     k		   Funkce: Klávesa h je vlevo a vykoná pohyb vlevo.
+       < h	 l >		   Klávesa l je vpravo a vykoná pohyb vpravo.
+	     j			   Klávesa j vypadá na ¹ipku dolu.
+	     v
+  1. Pohybuj kurzorem po obrazovce dokud si na to nezvykne¹.
+
+  2. Dr¾ klávesu pro pohyb dolu (j), dokud se její funkce nezopakuje.
+---> Teï ví¹ jak se pøesunout na následující lekci.
+
+  3. Pou¾itím klávesy dolu pøejdi na lekci 1.2.
+
+Poznámka: Pokud si nìkdy nejsi jist nìèím, co jsi napsal, stlaè <ESC> pro
+          pøechod do Normálního módu. Poté pøepi¹ po¾adovaný pøíkaz.
+
+Poznámka: Kurzorové klávesy také fungují, av¹ak pou¾ívání hjkl je rychlej¹í
+          jakmile si na nìj zvykne¹.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.2: SPU©TÌNÍ A UKONÈENÍ VIM
+
+
+  !! POZNÁMKA: Pøed vykonáním tìchto krokù si pøeèti celou lekci!!
+
+  1. Stlaè <ESC> (pro uji¹tìní, ¾e se nachází¹ v Normálním módu).
+
+  2. Napi¹:			:q! <ENTER>.
+
+---> Tímto ukonèí¹ editor BEZ ulo¾ení zmìn, které si vykonal.
+     Pokud chce¹ ulo¾it zmìny a ukonèit editor napi¹:
+				:wq  <ENTER>
+
+  3. A¾ se dostane¹ na pøíkazový øádek, napi¹ pøíkaz, kterým se dostane¹ zpìt
+     do této výuky. To mù¾e být: vimtutor <ENTER>
+     Bì¾nì se pou¾ívá:		 vim tutor <ENTER>
+
+---> 'vim' znamená spu¹tìní editoru, 'tutor' je soubor k editaci.
+
+  4. Pokud si tyto kroky spolehlivì pamatuje¹, vykonej kroky 1 a¾ 3, èím¾
+     ukonèí¹ a znovu spustí¹ editor. Potom pøesuò kurzor dolu na lekci 1.3.
+     
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.3: ÚPRAVA TEXTU - MAZÁNÍ
+
+
+  ** Stisknutím klávesy  x  v Normálním módu sma¾e¹ znak na místì kurzoru. **
+
+  1. Pøesuò kurzor ní¾e na øádek oznaèený --->.
+
+  2. K odstranìní chyb pøejdi kurzorem na znak, který chce¹ smazat.
+
+  3. Stlaè klávesu  x  k odstranìní nechtìných znakù.
+
+  4. Opakuj kroky 2 a¾ 4 dokud není vìta správnì.
+
+---> Krááva skoèèilla pøess mìssíc.
+
+  5. Pokud je vìta správnì, pøejdi na lekci 1.4.
+
+POZNÁMKA: Nesna¾ se pouze zapamatovat pøedvádìné pøíkazy, uè se je pou¾íváním.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.4: ÚPRAVA TEXTU - VKLÁDÁNÍ
+
+
+      ** Stlaèení klávesy  i  v Normálním módu umo¾òuje vkládání textu. **
+
+  1. Pøesuò kurzor na první øádek oznaèený --->.
+
+  2. Pro upravení prvního øádku do podoby øádku druhého, pøesuò kurzor na
+     první znak za místo, kde má být text vlo¾ený.
+
+  3. Stlaè  i  a napi¹ potøebný dodatek.
+
+  4. Po opravení ka¾dé chyby stlaè <ESC> pro návrat do Normálního módu.
+     Opakuj kroky 2 a¾ 4 dokud není vìta správnì.
+
+---> Nìjaký txt na této .
+---> Nìjaký text chybí na této øádce.
+
+  5. Pokud ji¾ ovládá¹ vkládání textu, pøejdi na následující shrnutí.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 1
+
+
+  1. Kurzorem se pohybuje pomocí ¹ipek nebo klávesami hjkl.
+	h (vlevo)	j (dolu)	k (nahoru)	l (vpravo)
+
+  2. Pro spu¹tìní Vimu (z pøíkazového øádku) napi¹: vim SOUBOR <ENTER>
+
+  3. Pro ukonèení Vimu napi¹: <ESC>  :q!  <ENTER>  bez ulo¾ení zmìn.
+	     	       anebo: <ESC>  :wq  <ENTER>  pro ulo¾ení zmìn.
+
+  4. Pro smazání znaku pod kurzorem napi¹ v Normálním módu:  x
+
+  5. Pro vkládání textu od místa kurzoru napi¹ v Normálním módu:
+	 i     vkládaný text	<ESC>
+
+POZNÁMKA: Stlaèení <ESC> tì pøemístí do Normálního módu nebo zru¹í nechtìný
+      a èásteènì dokonèený pøíkaz.
+
+Nyní pokraèuj Lekcí 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 2.1: PØÍKAZY MAZÁNÍ
+
+
+	       ** Pøíkaz  dw  sma¾e znaky do konce slova. **
+
+  1. Stlaè  <ESC>  k ubezpeèení, ¾e jsi v Normálním módu.
+
+  2. Pøesuò kurzor ní¾e na øádek oznaèený --->.
+
+  3. Pøesuò kurzor na zaèátek slova, které je potøeba smazat.
+
+  4. Napi¹   dw	 , aby slovo zmizelo.
+
+POZNÁMKA: Písmena dw se zobrazí na posledním øádku obrazovky jakmile je
+	  napí¹e¹. Kdy¾ napí¹e¹ nìco ¹patnì, stlaè  <ESC>  a zaèni znova.
+
+---> Jsou tu nìjaká slova zábava, která nepatøí list do této vìty.
+
+  5. Opakuj kroky 3 a¾ 4 dokud není vìta správnì a pøejdi na lekci 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 2.2: VÍCE PØÍKAZÙ MAZÁNÍ
+
+
+	   ** Napsání pøíkazu  d$  sma¾e v¹e a¾ do konce øádky. **
+
+  1. Stlaè  <ESC>  k ubezpeèení, ¾e jsi v Normálním módu.
+
+  2. Pøesuò kurzor ní¾e na øádek oznaèený --->.
+
+  3. Pøesuò kurzor na konec správné vìty (ZA první teèku).
+
+  4. Napi¹  d$  ,aby jsi smazal znaky a¾ do konce øádku.
+
+---> Nìkdo napsal konec této vìty dvakrát. konec této vìty dvakrát.
+
+
+  5. Pøejdi na lekci 2.3 pro pochopení toho, co se stalo.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  Lekce 2.3: ROZ©IØOVACÍ PØÍKAZY A OBJEKTY
+
+
+  Formát mazacího pøíkazu  d  je následující:
+
+	 [èíslo]   d   objekt     NEBO     d   [èíslo]   objekt
+  Kde:
+    èíslo - udává kolikrát se pøíkaz vykoná (volitelné, výchozí=1).
+    d - je pøíkaz mazání.
+    objekt - udává na èem se pøíkaz vykonává (vypsané ní¾e).
+
+  Krátký výpis objektù:
+    w - od kurzoru do konce slova, vèetnì mezer.
+    e - od kurzoru do konce slova, BEZ mezer.
+    $ - od kurzoru do konce øádku.
+
+POZNÁMKA:  Stlaèením klávesy objektu v Normálním módu se kurzor pøesune na
+           místo upøesnìné ve výpisu objektù.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 2.4: VÝJIMKA Z 'PØÍKAZ-OBJEKT'
+
+
+    	          ** Napsáním   dd   sma¾e¹ celý øádek. **
+
+  Vzhledem k èastosti mazání celého øádku se autoøi Vimu rozhodli, ¾e bude
+  jednodu¹í napsat prostì dvì d k smazání celého øádku.
+
+  1. Pøesuò kurzor na druhý øádek spodního textu.
+  2. Napi¹  dd  pro smazání øádku.
+  3. Pøejdi na ètvrtý øádek.
+  4. Napi¹   2dd   (vzpomeò si  èíslo-pøíkaz-objekt) pro smazání dvou øádkù.
+
+      1)  Rù¾e jsou èervené,
+      2)  Bláto je zábavné,
+      3)  Fialky jsou modré,
+      4)  Mám auto,
+      5)  Hodinky ukazují èas,
+      6)  Cukr je sladký,
+      7)  A to jsi i ty.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   Lekce 2.5: PØÍKAZ UNDO
+
+
+   ** Stlaè  u	pro vrácení posledního pøíkazu,  U  pro celou øádku. **
+
+  1. Pøesuò kurzor ní¾e na øádek oznaèený ---> a pøemísti ho na první chybu.
+  2. Napi¹  x  pro smazání prvního nechtìného znaku.
+  3. Teï napi¹  u  èím¾ vrátí¹ zpìt poslední vykonaný pøíkaz.
+  4. Nyní oprav v¹echny chyby na øádku pomocí pøíkazu  x  .
+  5. Napi¹ velké  U  èím¾ vrátí¹ øádek do pùvodního stavu.
+  6. Teï napi¹  u  nìkolikrát, èím¾ vrátí¹ zpìt pøíkaz  U  .
+  7. Stlaè CTRL-R (klávesu CTRL dr¾ stlaèenou a stiskni R) nìkolikrát,
+     èím¾ vrátí¹ zpìt pøedtím vrácené pøíkazy (redo).
+
+---> Opprav chybby nna toomto øádku a nahraï je pommocí undo.
+
+  8. Toto jsou velmi u¾iteèné pøíkazy. Nyní pøejdi na souhrn Lekce 2.
+
+  
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 2
+
+
+  1. Pro smazání znakù od kurzoru do konce slova napi¹:    dw
+
+  2. Pro smazání znakù od kurzoru do konce øádku napi¹:    d$
+
+  3. Pro smazání celého øádku napi¹:    dd
+
+  4. Formát pøíkazu v Normálním módu je:
+
+       [èíslo]   pøíkaz   objekt    NEBO    pøíkaz     [èíslo]   objekt
+     kde:
+       èíslo - udává poèet opakování pøíkazu
+       pøíkaz - udává co je tøeba vykonat, napøíklad  d  ma¾e
+       objekt - udává rozsah pøíkazu, napøíklad  w  (slovo),
+		$ (do konce øádku), atd.
+
+  5. Pro vrácení pøede¹lé èinnosti, napi¹:	u (malé u)
+     Pro vrácení v¹ech úprav na øádku napi¹:	U (velké U)
+     Pro vrácení vrácených úprav (redo) napi¹:	CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Lekce 3.1: PØÍKAZ VLO®IT
+
+
+       ** Pøíka  p  vlo¾í poslední vymazaný text za kurzor. **
+
+  1. Pøesuò kurzor ní¾e na poslední øádek textu.
+
+  2. Napi¹  dd  pro smazání øádku a jeho ulo¾ení do bufferu.
+
+  3. Pøesuò kurzor VÝ©E tam, kam smazaný øádek patøí.
+
+  4. V Normálním módu napi¹  p  pro opìtné vlo¾ení øádku.
+
+  5. Opakuj kroky 2 a¾ 4 dokud øádky nebudou ve správném poøadí.
+
+     d) Také se doká¾e¹ vzdìlávat?
+     b) Fialky jsou modré,
+     c) Inteligence se uèí,
+     a) Rù¾e jsou èervené,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lekce 3.2: PØÍKAZ NAHRAZENÍ
+
+
+          ** Napsáním  r  a znaku se nahradí znak pod kurzorem. **
+
+  1. Pøesuò kurzor ní¾e na první øádek oznaèený --->.
+
+  2. Pøesuò kurzor na zaèátek první chyby.
+
+  3. Napi¹  r  a potom znak, který nahradí chybu.
+
+  4. Opakuj kroky 2 a¾ 3 dokud není první øádka správnì.
+
+--->  Kdi¾ byl pzán tento øádeg, nìkdu stla¾il ¹paqné klávesy!
+--->  Kdy¾ byl psán tento øádek, nìkdo stlaèíl ¹patné klávesy!
+
+  5. Nyní pøejdi na Lekci 3.2.
+
+POZNÁMKA: Zapamatuj si, ¾e by ses mìl uèit pou¾íváním, ne zapamatováním.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		           Lekce 3.3: PØÍKAZ ÚPRAVY
+
+
+	  ** Pokud chce¹ zmìnit èást nebo celé slovo, napi¹  cw . **
+
+  1. Pøesuò kurzor ní¾e na první øádek oznaèený --->.
+
+  2. Umísti kurzor na písmeno i v slovì øi»ok.
+
+  3. Napi¹  cw  a oprav slovo (v tomto pøípadì napi¹ 'ádek'.)
+
+  4. Stlaè <ESC> a pøejdi na dal¹í chybu (první znak, který tøeba zmìnit.)
+
+  5. Opakuj kroky 3 a¾ 4 dokud není první vìta stejná jako ta druhá.
+
+---> Tento øi»ok má nìkolik skic, které psadoinsa zmìnit pasdgf pøíkazu.
+---> Tento øádek má nìkolik slov, které potøebují zmìnit pomocí pøíkazu.
+
+V¹imni si, ¾e  cw  nejen nahrazuje slovo, ale také pøemístí do vkládání.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lekce 3.4: VÍCE ZMÌN POU®ITÍM c
+
+
+   ** Pøíkaz pro úpravu se dru¾í se stejnými objekty jako ten pro mazání. **
+
+  1. Pøíkaz pro úpravu pracuje stejnì jako pro mazání. Formát je:
+
+       [èíslo]   c   objekt	 NEBO	   c	[èíslo]   objekt
+
+  2. Objekty jsou také shodné, jako napø.: w (slovo), $ (konec øádku), atd.
+
+  3. Pøejdi ní¾e na první øádek oznaèený --->.
+
+  4. Pøesuò kurzor na první rozdíl.
+
+  5. Napi¹  c$  pro upravení zbytku øádku podle toho druhého a stlaè <ESC>.
+
+---> Konec tohoto øádku potøebuje pomoc, aby byl jako ten druhý.
+---> Konec tohoto øádku potøebuje opravit pou¾itím pøíkazu  c$  .
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 3
+
+
+  1. Pro vlo¾ení textu, který byl smazán, napi¹  p  . To vlo¾í smazaný text
+     ZA kurzor (pokud byl øádek smazaný, pøejde na øádek pod kurzorem).
+
+  2. Pro nahrazení znaku pod kurzorem, napi¹  r  a potom znak, kterým
+     chce¹ pùvodní znak nahradit.
+
+  3. Pøíkaz na upravování umo¾òuje zmìnit specifikovaný objekt od kurzoru
+     do konce objektu. Napøíklad: Napi¹  cw  ,èím¾ zmìní¹ text od pozice
+     kurzoru do konce slova,  c$  zmìní text do konce øádku.
+
+  4. Formát pro nahrazování je:
+
+	 [èíslo]   c   objekt      NEBO     c   [èíslo]   objekt
+
+Nyní pøejdi na následující lekci.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 4.1: POZICE A STATUS SOUBORU
+
+
+  ** Stlaè CTRL-g pro zobrazení své pozice v souboru a statusu souboru.
+     Stlaè SHIFT-G pro pøechod na øádek v souboru. **
+
+  Poznámka: Pøeèti si celou lekci ne¾ zaène¹ vykonávat kroky!!
+
+  1. Dr¾ klávesu Ctrl stlaèenou a stiskni  g  . Vespod obrazovky se zobrazí
+     stavový øádek s názvem souboru a øádkou na které se nachází¹. Zapamatuj
+     si èíslo øádku pro krok 3.
+
+  2. Stlaè shift-G pro pøesun na konec souboru.
+
+  3. Napi¹ èíslo øádku na kterém si se nacházel a stlaè shift-G. To tì
+     vrátí na øádek, na kterém jsi døíve stiskl Ctrl-g.
+     (Kdy¾ pí¹e¹ èísla, tak se NEZOBRAZUJÍ na obrazovce.)
+
+  4. Pokud se cítí¹ schopný vykonat tyto kroky, vykonej je.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 4.2: PØÍKAZ VYHLEDÁVÁNÍ
+
+
+     ** Napi¹  /  následované øetìzcem pro vyhledání onoho øetìzce. **
+
+  1. Stiskni / v Normálním módu.  V¹imni si, ¾e tento znak se spolu s
+     kurzorem zobrazí v dolní èásti obrazovky jako pøíkaz  :  .
+
+  2. Nyní napi¹ 'chhybba' <ENTER>.  To je slovo, které chce¹ vyhledat.
+
+  3. Pro vyhledání dal¹ího výsledku stejného øetìzce, jednodu¹e stlaè  n  .
+     Pro vyhledání dal¹ího výsledku stejného øetìzce opaèným smìrem, stiskni
+     Shift-N.
+
+  4. Pokud chce¹ vyhledat øetìzec v opaèném smìru, pou¾ij pøíkaz  ?  místo
+     pøíkazu  /  .
+
+---> "chhybba" není zpùsob, jak hláskovat chyba; chhybba je chyba.
+
+Poznámka: Kdy¾ vyhledávání dosáhne konce souboru, bude pokraèovat na jeho
+          zaèátku.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Lekce 4.3: VYHLEDÁVÁNÍ PÁROVÉ ZÁVORKY
+
+
+	      ** Napi¹  %  pro nalezení párové ),], nebo } . **
+
+  1. Pøemísti kurzor na kteroukoli (, [, nebo { v øádku oznaèeném --->.
+
+  2. Nyní napi¹ znak  %  .
+
+  3. Kurzor se pøemístí na odpovídající závorku.
+
+  4. Stlaè  %  pro pøesun kurzoru zpìt na otvírající závorku.
+
+---> Toto ( je testovací øádek ('s, ['s ] a {'s } v nìm. ))
+
+Poznámka: Toto je velmi u¾iteèné pøí ladìní programu s chybìjícími
+          uzavíracími závorkami.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 4.4: ZPÙSOB JAK ZMÌNIT CHYBY
+		      
+
+   ** Napi¹  :s/staré/nové/g  pro nahrazení slova 'nové' za 'staré'. **
+
+  1. Pøesuò kurzor na øádek oznaèený --->.
+
+  2. Napi¹  :s/dobréé/dobré <ENTER> .  V¹imni si, ¾e tento pøíkaz zmìní pouze
+     první výskyt v øádku.
+
+  3. Nyní napi¹	 :s/dobréé/dobré/g  co¾ znamená celkové nahrazení v øádku.
+     Toto nahradí v¹echny výskyty v øádku.
+
+---> dobréé suroviny a dobréé náèiní jsou základem dobréé kuchynì.
+
+  4. Pro zmìnu v¹ech výskytù øetìzce mezi dvìma øádky,
+     Napi¹   :#,#s/staré/nové/g  kde #,# jsou èísla onìch øádek.
+     Napi¹   :%s/staré/nové/g    pro zmìnu v¹ech výskytù v celém souboru.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 4
+
+
+  1. Ctrl-g  vypí¹e tvou pozici v souboru a status souboru.
+     Shift-G  tì pøemístí na konec souboru.  Èíslo následované
+     Shift-G  tì pøesune na dané èíslo øádku.
+
+  2. Napsání  /  následované øetìzcem vyhledá øetìzec smìrem DOPØEDU.
+     Napsání  ?  následované øetìzcem vyhledá øetìzec smìrem DOZADU.
+     Napsání  n  po vyhledávání najde následující výskyt øetìzce ve stejném
+     smìru, Shift-N ve smìru opaèném.
+
+  3. Stisknutí  %  kdy¾ je kurzor na (,),[,],{, nebo } najde odpovídající
+     párovou závorku.
+
+  4. Pro nahrazení nového za první starý v øádku napi¹     :s/staré/nové
+     Pro nahrazení nového za v¹echny staré v øádku napi¹   :s/staré/nové/g
+     Pro nahrazení øetìzcù mezi dvìmi øádkami # napi¹      :#,#s/staré/nové/g
+     Pro nahrazení v¹ech výskytù v souboru napi¹	   :%s/staré/nové/g
+     Pro potvrzení ka¾dého nahrazení pøidej 'c'		   :%s/staré/nové/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Lekce 5.1: JAK VYKONAT VNÌJ©Í PØÍKAZ
+
+
+   ** Napi¹  :!  následované vnìj¹ím pøíkazem pro spu¹tìní pøíkazu. **
+
+  1. Napi¹ obvyklý pøíkaz  :  , který umístí kurzor na spodek obrazovky
+     To umo¾ní napsat pøíkaz.
+
+  2. Nyní stiskni  !  (vykøièník). To umo¾ní vykonat jakýkoliv vnìj¹í
+     pøíkaz z pøíkazového øádku.
+
+  3. Napøíklad napi¹  ls  za ! a stiskni <ENTER>.  Tento pøíkaz zobrazí
+     obsah tvého adresáøe jako v pøíkazovém øádku.
+     Vyzkou¹ej  :!dir  pokud ls nefunguje.
+
+Poznámka:  Takto je mo¾né vykonat jakýkoliv pøíkaz.
+
+Poznámka:  V¹echny pøíkazy  :  musí být dokonèené stisknutím <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 5.2: VÍCE O UKLÁDÁNÍ SOUBORÙ
+
+
+	    ** Pro ulo¾ení zmìn v souboru napi¹  :w SOUBOR. **
+
+  1. Napi¹  :!dir  nebo  :!ls  pro výpis aktuálního adresáøe.
+     U¾ ví¹, ¾e za tímto musí¹ stisknout <ENTER>.
+
+  2. Vyber si název souboru, který je¹tì neexistuje, napøíklad TEST.
+
+  3. Nyní napi¹:  :w TEST  (kde TEST je vybraný název souboru.)
+
+  4. To ulo¾í celý soubor  (Výuka Vimu)  pod názvem TEST.
+     Pro ovìøení napi¹ znovu :!dir  , èím¾ zobrazí¹ obsah adresáøe.
+
+Poznámka: Jakmile ukonèí¹ Vim a znovu ho spustí¹ s názvem souboru TEST,
+          soubor bude pøesná kopie výuky, kdy¾ si ji ukládal.
+
+  5. Nyní odstraò soubor napsáním (MS-DOS):    :!del TEST
+			     nebo (Unix):      :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 5.3: VÝBÌROVÝ PØÍKAZ ULO®ENÍ
+
+
+	    ** Pro ulo¾ení èásti souboru napi¹  :#,# w SOUBOR **
+
+  1. Je¹tì jednou napi¹  :!dir  nebo  :!ls  pro výpis aktuálního adresáøe
+     a vyber vhodný název souboru jako napø. TEST.
+
+  2. Pøesuò kurzor na vrch této stránky a stiskni  Ctrl-g  pro zobrazení
+     èísla øádku.  ZAPAMATUJ SI TOTO ÈÍSLO!
+
+  3. Nyní se pøesuò na spodek této stránky a opìt stiskni Ctrl-g.
+     ZAPAMATUJ SI I ÈÍSLO TOHOTO ØÁDKU!
+
+  4. Pro ulo¾ení POUZE èásti souboru, napi¹  :#,# w TEST  kde #,# jsou
+     èísla dvou zapamatovaných øádkù (vrch, spodek) a TEST je název souboru.
+
+  5. Znova se ujisti, ¾e tam ten soubor je pomocí  :!dir  ale NEODSTRAÒUJ ho.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		        Lekce 5.4: SLUÈOVÁNÍ SOUBORÙ
+
+
+      	   ** K vlo¾ení obsahu souboru napi¹  :r NÁZEV_SOUBORU **
+
+  1. Napi¹  :!dir  pro uji¹tìní, ¾e soubor TEST stále existuje.
+
+  2. Pøesuò kurzor na vrch této stránky.
+
+POZNÁMKA: Po vykonání kroku 3 uvidí¹ lekci 5.3.	Potom se opìt pøesuò dolù
+          na tuto lekci.
+
+  3. Nyní vlo¾ soubor TEST pou¾itím pøíkazu  :r TEST  kde TEST je název
+     souboru.
+
+POZNÁMKA: Soubor, který vkládá¹ se vlo¾í od místa, kde se nachází kurzor.
+
+  4. Pro potvrzení vlo¾ení souboru, pøesuò kurzor zpìt a v¹imni si, ¾e teï
+     má¹ dvì kopie lekce 5.3, originál a souborovou verzi.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 5
+
+
+  1.  :!pøíkaz  vykoná vnìj¹í pøíkaz.
+
+      Nìkteré u¾iteèné pøíklady jsou:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  zobrazí obsah souboru.
+	  :!del SOUBOR     :!rm SOUBOR     -  odstraní SOUBOR.
+
+  2.  :w SOUBOR  ulo¾í aktuální text jako SOUBOR na disk.
+
+  3.  :#,#w SOUBOR  ulo¾í øádky od # do # do SOUBORU.
+
+  4.  :r SOUBOR  vybere z disku SOUBOR a vlo¾í ho do editovaného souboru
+      za pozici kurzoru.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Lekce 6.1: PØÍKAZ OTEVØÍT
+
+
+  ** Napi¹  o  pro vlo¾ení øádku pod kurzor a pøepnutí do Vkládacího módu. **
+
+  1. Pøemísti kurzor ní¾e na øádek oznaèený --->.
+
+  2. Napi¹  o (malé) pro vlo¾ení øádku POD kurzor a pøepnutí do
+     Vkládacího módu.
+
+  3. Nyní zkopíruj øádek oznaèený ---> a stiskni <ESC> pro ukonèení
+     Vkládacího módu.
+  
+---> Po stisknutí  o  se kurzor pøemístí na vlo¾ený øádek do Vkládacího
+     módu.
+
+  4. Pro otevøení øádku NAD kurzorem jednodu¹e napi¹ velké  O  , místo
+     malého o. Vyzkou¹ej si to na následujícím øádku.
+Vlo¾ øádek nad tímto napsáním Shift-O po umístìní kurzoru na tento øádek.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Lekce 6.2: PØÍKAZ PØIDAT
+
+
+	     ** Stiskni  a  pro vlo¾ení textu ZA kurzor. **
+
+  1. Pøesuò kurzor na ní¾e na konec øádky oznaèené --->
+     stisknutím $ v Normálním módu.
+
+  2. Stiskni  a  (malé) pro pøidání textu ZA znak, který je pod kurzorem.
+     (Velké  A  pøidá na konec øádku.)
+
+Poznámka: Tímto se vyhne¹ stisknutí  i  , posledního znaku, textu na vlo¾ení,
+          <ESC>, kurzor doprava, a nakonec  x  na pøidávání na konec øádku!
+
+  3. Nyní dokonèí první øádek. V¹imni si, ¾e pøidávání je vlastnì stejné jako
+     Vkládací mód, kromì místa, kam se text vkládá.
+
+---> Tento øádek ti umo¾òuje nacvièit
+---> Tento øádek ti umo¾òuje nacvièit pøidávání textu na konec øádky.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 6.3: JINÝ ZPÙSOB NAHRAZOVÁNÍ
+
+
+         ** Napi¹ velké  R  pro nahrazení víc ne¾ jednoho znaku. **
+
+  1. Pøesuò kurzor na první øádek oznaèený --->.
+
+  2. Umísti kurzor na zaèátek prvního slova, které je odli¹né od druhého
+     øádku oznaèeného ---> (slovo 'poslední').
+
+  3. Nyní stiskni  R  a nahraï zbytek textu na prvním øádku pøepsáním
+     starého textu tak, aby byl první øádek stejný jako ten druhý.
+
+---> Pro upravení prvního øádku do tvaru toho poslední na stranì pou¾ij kl.
+---> Pro upravení prvního øádku do tvaru toho druhého, napi¹ R a nový text.
+
+  4. V¹imni si, ¾e jakmile stiskne¹ <ESC> v¹echen nezmìnìný text zùstává.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		         Lekce 6.4: NASTAVENÍ MO®NOSTÍ
+
+  ** Nastav mo¾nost, ¾e vyhledávání anebo nahrazování nedbá velikosti písmen **
+
+  1. Vyhledej øetìzec 'ignore' napsáním:
+     /ignore
+     Zopakuj nìkolikrát stisknutí klávesy n.
+
+  2. Nastav mo¾nost 'ic' (Ignore case) napsáním pøíkazu:
+     :set ic
+
+  3. Nyní znovu vyhledej 'ignore' stisknutím: n
+     Nìkolikrát hledání zopakuj stisknutím klávesy n.
+
+  4. Nastav mo¾nosti 'hlsearch' a 'incsearch':
+     :set hls is
+
+  5. Nyní znovu vykonej vyhledávací pøíkaz a sleduj, co se stane:
+     /ignore
+
+  6. Pro vypnutí zvýrazòování výsledkù napi¹:
+     :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRHNUTÍ LEKCE 6
+
+
+  1. Stisknutí  o  otevøe nový øádek POD kurzorem a umístí kurzor na vlo¾ený
+     øádek do Vkládacího módu.
+     Napsání velkého  O  otevøe øádek NAD øádkem, na kterém je kurzor.
+
+  2. Stiskni  a  pro vlo¾ení textu ZA znak na pozici kurzoru.
+     Napsání velkého  A  automaticky pøidá text na konec øádku.
+
+  3. Stisknutí velkého  R  pøepne do Nahrazovacího módu, dokud
+     nestiskne¹ <ESC> pro jeho ukonèení.
+
+  4. Napsání ":set xxx" nastaví mo¾nosti "xxx".
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      LEKCE 7: PØÍKAZY ON-LINE NÁPOVÌDY
+
+
+		   ** Pou¾ívej on-line systém nápovìdy **
+
+  Vim má obsáhlý on-line systém nápovìdy. Pro zaèátek vyzkou¹ej jeden z
+  následujících:
+	- stiskni klávesu <HELP> (pokud ji má¹)
+	- stiskni klávesu <F1>  (pokud ji má¹)
+	- napi¹  :help <ENTER>
+
+  Napi¹  :q <ENTER>  pro uzavøení okna nápovìdy.
+
+  Mù¾e¹ najít nápovìdu k jakémukoliv tématu pøidáním argumentu k
+  pøíkazu ":help". Zkus tyto (nezapomeò stisknout <ENTER>):
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  LEKCE 8: VYTVOØENÍ INICIALIZAÈNÍHO SKRIPTU
+
+		        ** Zapni funkce editoru Vim **
+
+  Vim má daleko více funkcí ne¾ Vi, ale vìt¹ina z nich je vypnuta ve výchozím
+  nastavení. Pro zapnutí nìkterých vytvoø soubor "vimrc".
+
+  1. Zaèni upravovat soubor "vimrc". Toto závisí na pou¾itém systému:
+	:edit ~/.vimrc			pro Unix
+	:edit $VIM/_vimrc		pro MS-Windows
+
+  2. Nyní èti ukázkový "vimrc" soubor:
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Ulo¾ soubor pomocí:
+
+	:write
+
+  Po pøí¹tím startu Vim se zapne zvýrazòování syntaxe.
+  Do souboru "vimrc" mù¾e¹ pøidat v¹echny svoje upøednostòované nastavení.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Toto ukonèuje výuku Vim, která byla my¹lená jako struèný pøehled
+  editoru Vim, tak akorát postaèující pro lehké a obstojné pou¾ívání editoru.
+  Tato výuka má daleko od úplnosti, proto¾e Vim obsahuje podstatnì více
+  pøíkazù. Dále si pøeèti u¾ivatelský manuál: ":help user-manual".
+
+  Pro dal¹í studium je doporuèená kniha:
+	Vim - Vi Improved - od Steve Oualline
+	Nakladatel: New Riders
+  První kniha urèená pro Vim. Obzvlá¹tì vhodná pro zaèáteèníky.
+  Obsahuje mno¾ství pøíkladù a obrázkù.
+  viz http://iccf-holland.org/click5.html
+
+  Tato kniha je star¹í a více vìnovaná Vi ne¾ Vim, ale také doporuèená:
+	Learning the Vi Editor - od Linda Lamb
+	Nakladatel: O'Reilly & Associates Inc.
+  Je to dobrá kniha pro získání vìdomostí témìø o v¹em, co mù¾ete s Vi dìlat.
+  ©esté vydání obsahuje té¾ informace o Vim.
+
+  Tato výuka byla napsaná autory Michael C. Pierce a Robert K. Ware,
+  Colorado School of Mines s pou¾itím my¹lenek od: Charles Smith,
+  Colorado State University.  E-mail: bware@mines.colorado.edu.
+
+  Upravil pro Vim: Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Pøeklad do èe¹tiny: Lubo¹ Turek
+  E-Mail: lubos.turek@gmail.com
+  2007 Feb 28 
new file mode 100644
--- /dev/null
+++ b/runtime/tutor/tutor.cs.cp1250
@@ -0,0 +1,812 @@
+===============================================================================
+=    V í t e j t e   v  t u t o r i a l u   V I M       -    Verze 1.5        =
+===============================================================================
+
+     Vim je velmi výkonný editor, který má pøíliš mnoho pøíkazù na to, aby
+     mohly být všechny vysvìtlené ve výuce jako tato. Tato výuka obsahuje
+     dostateèné množství pøíkazù na to, aby bylo možné používat Vim jako
+     víceúèelový editor.
+
+     Pøibližný èas potøebný ke zvládnutí této výuky je 25-30 minut, záleží
+     na tom, kolik èasu strávíte pøezkušováním.
+
+     Pøíkazy v lekcích upravují text. Vytvoø kopii tohoto souboru pro
+     procvièování (pøi startu "vimtutor" je již toto kopie).
+
+     Je dùležité pamatovat, že tato výuka je vytvoøena pro výuku používáním.
+     To znamená, že je potøeba si pøíkazy vyzkoušet pro jejich správné
+     nauèení. Pokud si jen èteš text, pøíkazy zapomeneš!
+
+     Nyní se pøesvìdète, že Shift-Lock NENÍ stlaèený a nìkolikrát stisknìte
+     klávesu  j   aby se kurzor posunul natolik, že lekce 1.1 zaplní celou
+     obrazovku.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 1.1:  POHYB KURZORU
+
+
+   ** Pro pohyb kurzoru používej klávesy h,j,k,l jak je znázornìno níže. **
+	     ^
+	     k		   Funkce: Klávesa h je vlevo a vykoná pohyb vlevo.
+       < h	 l >		   Klávesa l je vpravo a vykoná pohyb vpravo.
+	     j			   Klávesa j vypadá na šipku dolu.
+	     v
+  1. Pohybuj kurzorem po obrazovce dokud si na to nezvykneš.
+
+  2. Drž klávesu pro pohyb dolu (j), dokud se její funkce nezopakuje.
+---> Teï víš jak se pøesunout na následující lekci.
+
+  3. Použitím klávesy dolu pøejdi na lekci 1.2.
+
+Poznámka: Pokud si nìkdy nejsi jist nìèím, co jsi napsal, stlaè <ESC> pro
+          pøechod do Normálního módu. Poté pøepiš požadovaný pøíkaz.
+
+Poznámka: Kurzorové klávesy také fungují, avšak používání hjkl je rychlejší
+          jakmile si na nìj zvykneš.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.2: SPUŠTÌNÍ A UKONÈENÍ VIM
+
+
+  !! POZNÁMKA: Pøed vykonáním tìchto krokù si pøeèti celou lekci!!
+
+  1. Stlaè <ESC> (pro ujištìní, že se nacházíš v Normálním módu).
+
+  2. Napiš:			:q! <ENTER>.
+
+---> Tímto ukonèíš editor BEZ uložení zmìn, které si vykonal.
+     Pokud chceš uložit zmìny a ukonèit editor napiš:
+				:wq  <ENTER>
+
+  3. Až se dostaneš na pøíkazový øádek, napiš pøíkaz, kterým se dostaneš zpìt
+     do této výuky. To mùže být: vimtutor <ENTER>
+     Bìžnì se používá:		 vim tutor <ENTER>
+
+---> 'vim' znamená spuštìní editoru, 'tutor' je soubor k editaci.
+
+  4. Pokud si tyto kroky spolehlivì pamatuješ, vykonej kroky 1 až 3, èímž
+     ukonèíš a znovu spustíš editor. Potom pøesuò kurzor dolu na lekci 1.3.
+     
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.3: ÚPRAVA TEXTU - MAZÁNÍ
+
+
+  ** Stisknutím klávesy  x  v Normálním módu smažeš znak na místì kurzoru. **
+
+  1. Pøesuò kurzor níže na øádek oznaèený --->.
+
+  2. K odstranìní chyb pøejdi kurzorem na znak, který chceš smazat.
+
+  3. Stlaè klávesu  x  k odstranìní nechtìných znakù.
+
+  4. Opakuj kroky 2 až 4 dokud není vìta správnì.
+
+---> Krááva skoèèilla pøess mìssíc.
+
+  5. Pokud je vìta správnì, pøejdi na lekci 1.4.
+
+POZNÁMKA: Nesnaž se pouze zapamatovat pøedvádìné pøíkazy, uè se je používáním.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.4: ÚPRAVA TEXTU - VKLÁDÁNÍ
+
+
+      ** Stlaèení klávesy  i  v Normálním módu umožòuje vkládání textu. **
+
+  1. Pøesuò kurzor na první øádek oznaèený --->.
+
+  2. Pro upravení prvního øádku do podoby øádku druhého, pøesuò kurzor na
+     první znak za místo, kde má být text vložený.
+
+  3. Stlaè  i  a napiš potøebný dodatek.
+
+  4. Po opravení každé chyby stlaè <ESC> pro návrat do Normálního módu.
+     Opakuj kroky 2 až 4 dokud není vìta správnì.
+
+---> Nìjaký txt na této .
+---> Nìjaký text chybí na této øádce.
+
+  5. Pokud již ovládáš vkládání textu, pøejdi na následující shrnutí.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 1
+
+
+  1. Kurzorem se pohybuje pomocí šipek nebo klávesami hjkl.
+	h (vlevo)	j (dolu)	k (nahoru)	l (vpravo)
+
+  2. Pro spuštìní Vimu (z pøíkazového øádku) napiš: vim SOUBOR <ENTER>
+
+  3. Pro ukonèení Vimu napiš: <ESC>  :q!  <ENTER>  bez uložení zmìn.
+	     	       anebo: <ESC>  :wq  <ENTER>  pro uložení zmìn.
+
+  4. Pro smazání znaku pod kurzorem napiš v Normálním módu:  x
+
+  5. Pro vkládání textu od místa kurzoru napiš v Normálním módu:
+	 i     vkládaný text	<ESC>
+
+POZNÁMKA: Stlaèení <ESC> tì pøemístí do Normálního módu nebo zruší nechtìný
+      a èásteènì dokonèený pøíkaz.
+
+Nyní pokraèuj Lekcí 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 2.1: PØÍKAZY MAZÁNÍ
+
+
+	       ** Pøíkaz  dw  smaže znaky do konce slova. **
+
+  1. Stlaè  <ESC>  k ubezpeèení, že jsi v Normálním módu.
+
+  2. Pøesuò kurzor níže na øádek oznaèený --->.
+
+  3. Pøesuò kurzor na zaèátek slova, které je potøeba smazat.
+
+  4. Napiš   dw	 , aby slovo zmizelo.
+
+POZNÁMKA: Písmena dw se zobrazí na posledním øádku obrazovky jakmile je
+	  napíšeš. Když napíšeš nìco špatnì, stlaè  <ESC>  a zaèni znova.
+
+---> Jsou tu nìjaká slova zábava, která nepatøí list do této vìty.
+
+  5. Opakuj kroky 3 až 4 dokud není vìta správnì a pøejdi na lekci 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 2.2: VÍCE PØÍKAZÙ MAZÁNÍ
+
+
+	   ** Napsání pøíkazu  d$  smaže vše až do konce øádky. **
+
+  1. Stlaè  <ESC>  k ubezpeèení, že jsi v Normálním módu.
+
+  2. Pøesuò kurzor níže na øádek oznaèený --->.
+
+  3. Pøesuò kurzor na konec správné vìty (ZA první teèku).
+
+  4. Napiš  d$  ,aby jsi smazal znaky až do konce øádku.
+
+---> Nìkdo napsal konec této vìty dvakrát. konec této vìty dvakrát.
+
+
+  5. Pøejdi na lekci 2.3 pro pochopení toho, co se stalo.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  Lekce 2.3: ROZŠIØOVACÍ PØÍKAZY A OBJEKTY
+
+
+  Formát mazacího pøíkazu  d  je následující:
+
+	 [èíslo]   d   objekt     NEBO     d   [èíslo]   objekt
+  Kde:
+    èíslo - udává kolikrát se pøíkaz vykoná (volitelné, výchozí=1).
+    d - je pøíkaz mazání.
+    objekt - udává na èem se pøíkaz vykonává (vypsané níže).
+
+  Krátký výpis objektù:
+    w - od kurzoru do konce slova, vèetnì mezer.
+    e - od kurzoru do konce slova, BEZ mezer.
+    $ - od kurzoru do konce øádku.
+
+POZNÁMKA:  Stlaèením klávesy objektu v Normálním módu se kurzor pøesune na
+           místo upøesnìné ve výpisu objektù.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 2.4: VÝJIMKA Z 'PØÍKAZ-OBJEKT'
+
+
+    	          ** Napsáním   dd   smažeš celý øádek. **
+
+  Vzhledem k èastosti mazání celého øádku se autoøi Vimu rozhodli, že bude
+  jednoduší napsat prostì dvì d k smazání celého øádku.
+
+  1. Pøesuò kurzor na druhý øádek spodního textu.
+  2. Napiš  dd  pro smazání øádku.
+  3. Pøejdi na ètvrtý øádek.
+  4. Napiš   2dd   (vzpomeò si  èíslo-pøíkaz-objekt) pro smazání dvou øádkù.
+
+      1)  Rùže jsou èervené,
+      2)  Bláto je zábavné,
+      3)  Fialky jsou modré,
+      4)  Mám auto,
+      5)  Hodinky ukazují èas,
+      6)  Cukr je sladký,
+      7)  A to jsi i ty.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   Lekce 2.5: PØÍKAZ UNDO
+
+
+   ** Stlaè  u	pro vrácení posledního pøíkazu,  U  pro celou øádku. **
+
+  1. Pøesuò kurzor níže na øádek oznaèený ---> a pøemísti ho na první chybu.
+  2. Napiš  x  pro smazání prvního nechtìného znaku.
+  3. Teï napiš  u  èímž vrátíš zpìt poslední vykonaný pøíkaz.
+  4. Nyní oprav všechny chyby na øádku pomocí pøíkazu  x  .
+  5. Napiš velké  U  èímž vrátíš øádek do pùvodního stavu.
+  6. Teï napiš  u  nìkolikrát, èímž vrátíš zpìt pøíkaz  U  .
+  7. Stlaè CTRL-R (klávesu CTRL drž stlaèenou a stiskni R) nìkolikrát,
+     èímž vrátíš zpìt pøedtím vrácené pøíkazy (redo).
+
+---> Opprav chybby nna toomto øádku a nahraï je pommocí undo.
+
+  8. Toto jsou velmi užiteèné pøíkazy. Nyní pøejdi na souhrn Lekce 2.
+
+  
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 2
+
+
+  1. Pro smazání znakù od kurzoru do konce slova napiš:    dw
+
+  2. Pro smazání znakù od kurzoru do konce øádku napiš:    d$
+
+  3. Pro smazání celého øádku napiš:    dd
+
+  4. Formát pøíkazu v Normálním módu je:
+
+       [èíslo]   pøíkaz   objekt    NEBO    pøíkaz     [èíslo]   objekt
+     kde:
+       èíslo - udává poèet opakování pøíkazu
+       pøíkaz - udává co je tøeba vykonat, napøíklad  d  maže
+       objekt - udává rozsah pøíkazu, napøíklad  w  (slovo),
+		$ (do konce øádku), atd.
+
+  5. Pro vrácení pøedešlé èinnosti, napiš:	u (malé u)
+     Pro vrácení všech úprav na øádku napiš:	U (velké U)
+     Pro vrácení vrácených úprav (redo) napiš:	CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Lekce 3.1: PØÍKAZ VLOŽIT
+
+
+       ** Pøíka  p  vloží poslední vymazaný text za kurzor. **
+
+  1. Pøesuò kurzor níže na poslední øádek textu.
+
+  2. Napiš  dd  pro smazání øádku a jeho uložení do bufferu.
+
+  3. Pøesuò kurzor VÝŠE tam, kam smazaný øádek patøí.
+
+  4. V Normálním módu napiš  p  pro opìtné vložení øádku.
+
+  5. Opakuj kroky 2 až 4 dokud øádky nebudou ve správném poøadí.
+
+     d) Také se dokážeš vzdìlávat?
+     b) Fialky jsou modré,
+     c) Inteligence se uèí,
+     a) Rùže jsou èervené,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lekce 3.2: PØÍKAZ NAHRAZENÍ
+
+
+          ** Napsáním  r  a znaku se nahradí znak pod kurzorem. **
+
+  1. Pøesuò kurzor níže na první øádek oznaèený --->.
+
+  2. Pøesuò kurzor na zaèátek první chyby.
+
+  3. Napiš  r  a potom znak, který nahradí chybu.
+
+  4. Opakuj kroky 2 až 3 dokud není první øádka správnì.
+
+--->  Kdiž byl pzán tento øádeg, nìkdu stlažil špaqné klávesy!
+--->  Když byl psán tento øádek, nìkdo stlaèíl špatné klávesy!
+
+  5. Nyní pøejdi na Lekci 3.2.
+
+POZNÁMKA: Zapamatuj si, že by ses mìl uèit používáním, ne zapamatováním.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		           Lekce 3.3: PØÍKAZ ÚPRAVY
+
+
+	  ** Pokud chceš zmìnit èást nebo celé slovo, napiš  cw . **
+
+  1. Pøesuò kurzor níže na první øádek oznaèený --->.
+
+  2. Umísti kurzor na písmeno i v slovì øiok.
+
+  3. Napiš  cw  a oprav slovo (v tomto pøípadì napiš 'ádek'.)
+
+  4. Stlaè <ESC> a pøejdi na další chybu (první znak, který tøeba zmìnit.)
+
+  5. Opakuj kroky 3 až 4 dokud není první vìta stejná jako ta druhá.
+
+---> Tento øiok má nìkolik skic, které psadoinsa zmìnit pasdgf pøíkazu.
+---> Tento øádek má nìkolik slov, které potøebují zmìnit pomocí pøíkazu.
+
+Všimni si, že  cw  nejen nahrazuje slovo, ale také pøemístí do vkládání.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lekce 3.4: VÍCE ZMÌN POUŽITÍM c
+
+
+   ** Pøíkaz pro úpravu se druží se stejnými objekty jako ten pro mazání. **
+
+  1. Pøíkaz pro úpravu pracuje stejnì jako pro mazání. Formát je:
+
+       [èíslo]   c   objekt	 NEBO	   c	[èíslo]   objekt
+
+  2. Objekty jsou také shodné, jako napø.: w (slovo), $ (konec øádku), atd.
+
+  3. Pøejdi níže na první øádek oznaèený --->.
+
+  4. Pøesuò kurzor na první rozdíl.
+
+  5. Napiš  c$  pro upravení zbytku øádku podle toho druhého a stlaè <ESC>.
+
+---> Konec tohoto øádku potøebuje pomoc, aby byl jako ten druhý.
+---> Konec tohoto øádku potøebuje opravit použitím pøíkazu  c$  .
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 3
+
+
+  1. Pro vložení textu, který byl smazán, napiš  p  . To vloží smazaný text
+     ZA kurzor (pokud byl øádek smazaný, pøejde na øádek pod kurzorem).
+
+  2. Pro nahrazení znaku pod kurzorem, napiš  r  a potom znak, kterým
+     chceš pùvodní znak nahradit.
+
+  3. Pøíkaz na upravování umožòuje zmìnit specifikovaný objekt od kurzoru
+     do konce objektu. Napøíklad: Napiš  cw  ,èímž zmìníš text od pozice
+     kurzoru do konce slova,  c$  zmìní text do konce øádku.
+
+  4. Formát pro nahrazování je:
+
+	 [èíslo]   c   objekt      NEBO     c   [èíslo]   objekt
+
+Nyní pøejdi na následující lekci.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 4.1: POZICE A STATUS SOUBORU
+
+
+  ** Stlaè CTRL-g pro zobrazení své pozice v souboru a statusu souboru.
+     Stlaè SHIFT-G pro pøechod na øádek v souboru. **
+
+  Poznámka: Pøeèti si celou lekci než zaèneš vykonávat kroky!!
+
+  1. Drž klávesu Ctrl stlaèenou a stiskni  g  . Vespod obrazovky se zobrazí
+     stavový øádek s názvem souboru a øádkou na které se nacházíš. Zapamatuj
+     si èíslo øádku pro krok 3.
+
+  2. Stlaè shift-G pro pøesun na konec souboru.
+
+  3. Napiš èíslo øádku na kterém si se nacházel a stlaè shift-G. To tì
+     vrátí na øádek, na kterém jsi døíve stiskl Ctrl-g.
+     (Když píšeš èísla, tak se NEZOBRAZUJÍ na obrazovce.)
+
+  4. Pokud se cítíš schopný vykonat tyto kroky, vykonej je.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 4.2: PØÍKAZ VYHLEDÁVÁNÍ
+
+
+     ** Napiš  /  následované øetìzcem pro vyhledání onoho øetìzce. **
+
+  1. Stiskni / v Normálním módu.  Všimni si, že tento znak se spolu s
+     kurzorem zobrazí v dolní èásti obrazovky jako pøíkaz  :  .
+
+  2. Nyní napiš 'chhybba' <ENTER>.  To je slovo, které chceš vyhledat.
+
+  3. Pro vyhledání dalšího výsledku stejného øetìzce, jednoduše stlaè  n  .
+     Pro vyhledání dalšího výsledku stejného øetìzce opaèným smìrem, stiskni
+     Shift-N.
+
+  4. Pokud chceš vyhledat øetìzec v opaèném smìru, použij pøíkaz  ?  místo
+     pøíkazu  /  .
+
+---> "chhybba" není zpùsob, jak hláskovat chyba; chhybba je chyba.
+
+Poznámka: Když vyhledávání dosáhne konce souboru, bude pokraèovat na jeho
+          zaèátku.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Lekce 4.3: VYHLEDÁVÁNÍ PÁROVÉ ZÁVORKY
+
+
+	      ** Napiš  %  pro nalezení párové ),], nebo } . **
+
+  1. Pøemísti kurzor na kteroukoli (, [, nebo { v øádku oznaèeném --->.
+
+  2. Nyní napiš znak  %  .
+
+  3. Kurzor se pøemístí na odpovídající závorku.
+
+  4. Stlaè  %  pro pøesun kurzoru zpìt na otvírající závorku.
+
+---> Toto ( je testovací øádek ('s, ['s ] a {'s } v nìm. ))
+
+Poznámka: Toto je velmi užiteèné pøí ladìní programu s chybìjícími
+          uzavíracími závorkami.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 4.4: ZPÙSOB JAK ZMÌNIT CHYBY
+		      
+
+   ** Napiš  :s/staré/nové/g  pro nahrazení slova 'nové' za 'staré'. **
+
+  1. Pøesuò kurzor na øádek oznaèený --->.
+
+  2. Napiš  :s/dobréé/dobré <ENTER> .  Všimni si, že tento pøíkaz zmìní pouze
+     první výskyt v øádku.
+
+  3. Nyní napiš	 :s/dobréé/dobré/g  což znamená celkové nahrazení v øádku.
+     Toto nahradí všechny výskyty v øádku.
+
+---> dobréé suroviny a dobréé náèiní jsou základem dobréé kuchynì.
+
+  4. Pro zmìnu všech výskytù øetìzce mezi dvìma øádky,
+     Napiš   :#,#s/staré/nové/g  kde #,# jsou èísla onìch øádek.
+     Napiš   :%s/staré/nové/g    pro zmìnu všech výskytù v celém souboru.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 4
+
+
+  1. Ctrl-g  vypíše tvou pozici v souboru a status souboru.
+     Shift-G  tì pøemístí na konec souboru.  Èíslo následované
+     Shift-G  tì pøesune na dané èíslo øádku.
+
+  2. Napsání  /  následované øetìzcem vyhledá øetìzec smìrem DOPØEDU.
+     Napsání  ?  následované øetìzcem vyhledá øetìzec smìrem DOZADU.
+     Napsání  n  po vyhledávání najde následující výskyt øetìzce ve stejném
+     smìru, Shift-N ve smìru opaèném.
+
+  3. Stisknutí  %  když je kurzor na (,),[,],{, nebo } najde odpovídající
+     párovou závorku.
+
+  4. Pro nahrazení nového za první starý v øádku napiš     :s/staré/nové
+     Pro nahrazení nového za všechny staré v øádku napiš   :s/staré/nové/g
+     Pro nahrazení øetìzcù mezi dvìmi øádkami # napiš      :#,#s/staré/nové/g
+     Pro nahrazení všech výskytù v souboru napiš	   :%s/staré/nové/g
+     Pro potvrzení každého nahrazení pøidej 'c'		   :%s/staré/nové/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Lekce 5.1: JAK VYKONAT VNÌJŠÍ PØÍKAZ
+
+
+   ** Napiš  :!  následované vnìjším pøíkazem pro spuštìní pøíkazu. **
+
+  1. Napiš obvyklý pøíkaz  :  , který umístí kurzor na spodek obrazovky
+     To umožní napsat pøíkaz.
+
+  2. Nyní stiskni  !  (vykøièník). To umožní vykonat jakýkoliv vnìjší
+     pøíkaz z pøíkazového øádku.
+
+  3. Napøíklad napiš  ls  za ! a stiskni <ENTER>.  Tento pøíkaz zobrazí
+     obsah tvého adresáøe jako v pøíkazovém øádku.
+     Vyzkoušej  :!dir  pokud ls nefunguje.
+
+Poznámka:  Takto je možné vykonat jakýkoliv pøíkaz.
+
+Poznámka:  Všechny pøíkazy  :  musí být dokonèené stisknutím <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 5.2: VÍCE O UKLÁDÁNÍ SOUBORÙ
+
+
+	    ** Pro uložení zmìn v souboru napiš  :w SOUBOR. **
+
+  1. Napiš  :!dir  nebo  :!ls  pro výpis aktuálního adresáøe.
+     Už víš, že za tímto musíš stisknout <ENTER>.
+
+  2. Vyber si název souboru, který ještì neexistuje, napøíklad TEST.
+
+  3. Nyní napiš:  :w TEST  (kde TEST je vybraný název souboru.)
+
+  4. To uloží celý soubor  (Výuka Vimu)  pod názvem TEST.
+     Pro ovìøení napiš znovu :!dir  , èímž zobrazíš obsah adresáøe.
+
+Poznámka: Jakmile ukonèíš Vim a znovu ho spustíš s názvem souboru TEST,
+          soubor bude pøesná kopie výuky, když si ji ukládal.
+
+  5. Nyní odstraò soubor napsáním (MS-DOS):    :!del TEST
+			     nebo (Unix):      :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 5.3: VÝBÌROVÝ PØÍKAZ ULOŽENÍ
+
+
+	    ** Pro uložení èásti souboru napiš  :#,# w SOUBOR **
+
+  1. Ještì jednou napiš  :!dir  nebo  :!ls  pro výpis aktuálního adresáøe
+     a vyber vhodný název souboru jako napø. TEST.
+
+  2. Pøesuò kurzor na vrch této stránky a stiskni  Ctrl-g  pro zobrazení
+     èísla øádku.  ZAPAMATUJ SI TOTO ÈÍSLO!
+
+  3. Nyní se pøesuò na spodek této stránky a opìt stiskni Ctrl-g.
+     ZAPAMATUJ SI I ÈÍSLO TOHOTO ØÁDKU!
+
+  4. Pro uložení POUZE èásti souboru, napiš  :#,# w TEST  kde #,# jsou
+     èísla dvou zapamatovaných øádkù (vrch, spodek) a TEST je název souboru.
+
+  5. Znova se ujisti, že tam ten soubor je pomocí  :!dir  ale NEODSTRAÒUJ ho.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		        Lekce 5.4: SLUÈOVÁNÍ SOUBORÙ
+
+
+      	   ** K vložení obsahu souboru napiš  :r NÁZEV_SOUBORU **
+
+  1. Napiš  :!dir  pro ujištìní, že soubor TEST stále existuje.
+
+  2. Pøesuò kurzor na vrch této stránky.
+
+POZNÁMKA: Po vykonání kroku 3 uvidíš lekci 5.3.	Potom se opìt pøesuò dolù
+          na tuto lekci.
+
+  3. Nyní vlož soubor TEST použitím pøíkazu  :r TEST  kde TEST je název
+     souboru.
+
+POZNÁMKA: Soubor, který vkládáš se vloží od místa, kde se nachází kurzor.
+
+  4. Pro potvrzení vložení souboru, pøesuò kurzor zpìt a všimni si, že teï
+     máš dvì kopie lekce 5.3, originál a souborovou verzi.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÍ LEKCE 5
+
+
+  1.  :!pøíkaz  vykoná vnìjší pøíkaz.
+
+      Nìkteré užiteèné pøíklady jsou:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  zobrazí obsah souboru.
+	  :!del SOUBOR     :!rm SOUBOR     -  odstraní SOUBOR.
+
+  2.  :w SOUBOR  uloží aktuální text jako SOUBOR na disk.
+
+  3.  :#,#w SOUBOR  uloží øádky od # do # do SOUBORU.
+
+  4.  :r SOUBOR  vybere z disku SOUBOR a vloží ho do editovaného souboru
+      za pozici kurzoru.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Lekce 6.1: PØÍKAZ OTEVØÍT
+
+
+  ** Napiš  o  pro vložení øádku pod kurzor a pøepnutí do Vkládacího módu. **
+
+  1. Pøemísti kurzor níže na øádek oznaèený --->.
+
+  2. Napiš  o (malé) pro vložení øádku POD kurzor a pøepnutí do
+     Vkládacího módu.
+
+  3. Nyní zkopíruj øádek oznaèený ---> a stiskni <ESC> pro ukonèení
+     Vkládacího módu.
+  
+---> Po stisknutí  o  se kurzor pøemístí na vložený øádek do Vkládacího
+     módu.
+
+  4. Pro otevøení øádku NAD kurzorem jednoduše napiš velké  O  , místo
+     malého o. Vyzkoušej si to na následujícím øádku.
+Vlož øádek nad tímto napsáním Shift-O po umístìní kurzoru na tento øádek.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Lekce 6.2: PØÍKAZ PØIDAT
+
+
+	     ** Stiskni  a  pro vložení textu ZA kurzor. **
+
+  1. Pøesuò kurzor na níže na konec øádky oznaèené --->
+     stisknutím $ v Normálním módu.
+
+  2. Stiskni  a  (malé) pro pøidání textu ZA znak, který je pod kurzorem.
+     (Velké  A  pøidá na konec øádku.)
+
+Poznámka: Tímto se vyhneš stisknutí  i  , posledního znaku, textu na vložení,
+          <ESC>, kurzor doprava, a nakonec  x  na pøidávání na konec øádku!
+
+  3. Nyní dokonèí první øádek. Všimni si, že pøidávání je vlastnì stejné jako
+     Vkládací mód, kromì místa, kam se text vkládá.
+
+---> Tento øádek ti umožòuje nacvièit
+---> Tento øádek ti umožòuje nacvièit pøidávání textu na konec øádky.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 6.3: JINÝ ZPÙSOB NAHRAZOVÁNÍ
+
+
+         ** Napiš velké  R  pro nahrazení víc než jednoho znaku. **
+
+  1. Pøesuò kurzor na první øádek oznaèený --->.
+
+  2. Umísti kurzor na zaèátek prvního slova, které je odlišné od druhého
+     øádku oznaèeného ---> (slovo 'poslední').
+
+  3. Nyní stiskni  R  a nahraï zbytek textu na prvním øádku pøepsáním
+     starého textu tak, aby byl první øádek stejný jako ten druhý.
+
+---> Pro upravení prvního øádku do tvaru toho poslední na stranì použij kl.
+---> Pro upravení prvního øádku do tvaru toho druhého, napiš R a nový text.
+
+  4. Všimni si, že jakmile stiskneš <ESC> všechen nezmìnìný text zùstává.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		         Lekce 6.4: NASTAVENÍ MOŽNOSTÍ
+
+  ** Nastav možnost, že vyhledávání anebo nahrazování nedbá velikosti písmen **
+
+  1. Vyhledej øetìzec 'ignore' napsáním:
+     /ignore
+     Zopakuj nìkolikrát stisknutí klávesy n.
+
+  2. Nastav možnost 'ic' (Ignore case) napsáním pøíkazu:
+     :set ic
+
+  3. Nyní znovu vyhledej 'ignore' stisknutím: n
+     Nìkolikrát hledání zopakuj stisknutím klávesy n.
+
+  4. Nastav možnosti 'hlsearch' a 'incsearch':
+     :set hls is
+
+  5. Nyní znovu vykonej vyhledávací pøíkaz a sleduj, co se stane:
+     /ignore
+
+  6. Pro vypnutí zvýrazòování výsledkù napiš:
+     :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRHNUTÍ LEKCE 6
+
+
+  1. Stisknutí  o  otevøe nový øádek POD kurzorem a umístí kurzor na vložený
+     øádek do Vkládacího módu.
+     Napsání velkého  O  otevøe øádek NAD øádkem, na kterém je kurzor.
+
+  2. Stiskni  a  pro vložení textu ZA znak na pozici kurzoru.
+     Napsání velkého  A  automaticky pøidá text na konec øádku.
+
+  3. Stisknutí velkého  R  pøepne do Nahrazovacího módu, dokud
+     nestiskneš <ESC> pro jeho ukonèení.
+
+  4. Napsání ":set xxx" nastaví možnosti "xxx".
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      LEKCE 7: PØÍKAZY ON-LINE NÁPOVÌDY
+
+
+		   ** Používej on-line systém nápovìdy **
+
+  Vim má obsáhlý on-line systém nápovìdy. Pro zaèátek vyzkoušej jeden z
+  následujících:
+	- stiskni klávesu <HELP> (pokud ji máš)
+	- stiskni klávesu <F1>  (pokud ji máš)
+	- napiš  :help <ENTER>
+
+  Napiš  :q <ENTER>  pro uzavøení okna nápovìdy.
+
+  Mùžeš najít nápovìdu k jakémukoliv tématu pøidáním argumentu k
+  pøíkazu ":help". Zkus tyto (nezapomeò stisknout <ENTER>):
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  LEKCE 8: VYTVOØENÍ INICIALIZAÈNÍHO SKRIPTU
+
+		        ** Zapni funkce editoru Vim **
+
+  Vim má daleko více funkcí než Vi, ale vìtšina z nich je vypnuta ve výchozím
+  nastavení. Pro zapnutí nìkterých vytvoø soubor "vimrc".
+
+  1. Zaèni upravovat soubor "vimrc". Toto závisí na použitém systému:
+	:edit ~/.vimrc			pro Unix
+	:edit $VIM/_vimrc		pro MS-Windows
+
+  2. Nyní èti ukázkový "vimrc" soubor:
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Ulož soubor pomocí:
+
+	:write
+
+  Po pøíštím startu Vim se zapne zvýrazòování syntaxe.
+  Do souboru "vimrc" mùžeš pøidat všechny svoje upøednostòované nastavení.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Toto ukonèuje výuku Vim, která byla myšlená jako struèný pøehled
+  editoru Vim, tak akorát postaèující pro lehké a obstojné používání editoru.
+  Tato výuka má daleko od úplnosti, protože Vim obsahuje podstatnì více
+  pøíkazù. Dále si pøeèti uživatelský manuál: ":help user-manual".
+
+  Pro další studium je doporuèená kniha:
+	Vim - Vi Improved - od Steve Oualline
+	Nakladatel: New Riders
+  První kniha urèená pro Vim. Obzvláštì vhodná pro zaèáteèníky.
+  Obsahuje množství pøíkladù a obrázkù.
+  viz http://iccf-holland.org/click5.html
+
+  Tato kniha je starší a více vìnovaná Vi než Vim, ale také doporuèená:
+	Learning the Vi Editor - od Linda Lamb
+	Nakladatel: O'Reilly & Associates Inc.
+  Je to dobrá kniha pro získání vìdomostí témìø o všem, co mùžete s Vi dìlat.
+  Šesté vydání obsahuje též informace o Vim.
+
+  Tato výuka byla napsaná autory Michael C. Pierce a Robert K. Ware,
+  Colorado School of Mines s použitím myšlenek od: Charles Smith,
+  Colorado State University.  E-mail: bware@mines.colorado.edu.
+
+  Upravil pro Vim: Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Pøeklad do èeštiny: Luboš Turek
+  E-Mail: lubos.turek@gmail.com
+  2007 Feb 28 
new file mode 100644
--- /dev/null
+++ b/runtime/tutor/tutor.cs.utf-8
@@ -0,0 +1,812 @@
+===============================================================================
+=    V í t e j t e   v  t u t o r i a l u   V I M       -    Verze 1.5        =
+===============================================================================
+
+     Vim je velmi výkonný editor, který má příliš mnoho příkazů na to, aby
+     mohly být všechny vysvětlené ve výuce jako tato. Tato výuka obsahuje
+     dostateÄné množství příkazů na to, aby bylo možné používat Vim jako
+     víceúÄelový editor.
+
+     PÅ™ibližný Äas potÅ™ebný ke zvládnutí této výuky je 25-30 minut, záleží
+     na tom, kolik Äasu strávíte pÅ™ezkuÅ¡ováním.
+
+     Příkazy v lekcích upravují text. Vytvoř kopii tohoto souboru pro
+     procviÄování (pÅ™i startu "vimtutor" je již toto kopie).
+
+     Je důležité pamatovat, že tato výuka je vytvořena pro výuku používáním.
+     To znamená, že je potřeba si příkazy vyzkoušet pro jejich správné
+     nauÄení. Pokud si jen ÄteÅ¡ text, příkazy zapomeneÅ¡!
+
+     Nyní se pÅ™esvÄ›dÄte, že Shift-Lock NENà stlaÄený a nÄ›kolikrát stisknÄ›te
+     klávesu  j   aby se kurzor posunul natolik, že lekce 1.1 zaplní celou
+     obrazovku.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 1.1:  POHYB KURZORU
+
+
+   ** Pro pohyb kurzoru používej klávesy h,j,k,l jak je znázorněno níže. **
+	     ^
+	     k		   Funkce: Klávesa h je vlevo a vykoná pohyb vlevo.
+       < h	 l >		   Klávesa l je vpravo a vykoná pohyb vpravo.
+	     j			   Klávesa j vypadá na šipku dolu.
+	     v
+  1. Pohybuj kurzorem po obrazovce dokud si na to nezvykneš.
+
+  2. Drž klávesu pro pohyb dolu (j), dokud se její funkce nezopakuje.
+---> TeÄ víš jak se pÅ™esunout na následující lekci.
+
+  3. Použitím klávesy dolu přejdi na lekci 1.2.
+
+Poznámka: Pokud si nÄ›kdy nejsi jist nÄ›Äím, co jsi napsal, stlaÄ <ESC> pro
+          přechod do Normálního módu. Poté přepiš požadovaný příkaz.
+
+Poznámka: Kurzorové klávesy také fungují, avšak používání hjkl je rychlejší
+          jakmile si na něj zvykneš.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.2: SPUÅ TÄšNÃ A UKONÄŒENÃ VIM
+
+
+  !! POZNÃMKA: PÅ™ed vykonáním tÄ›chto kroků si pÅ™eÄti celou lekci!!
+
+  1. StlaÄ <ESC> (pro ujiÅ¡tÄ›ní, že se nacházíš v Normálním módu).
+
+  2. Napiš:			:q! <ENTER>.
+
+---> Tímto ukonÄíš editor BEZ uložení zmÄ›n, které si vykonal.
+     Pokud chceÅ¡ uložit zmÄ›ny a ukonÄit editor napiÅ¡:
+				:wq  <ENTER>
+
+  3. Až se dostaneš na příkazový řádek, napiš příkaz, kterým se dostaneš zpět
+     do této výuky. To může být: vimtutor <ENTER>
+     Běžně se používá:		 vim tutor <ENTER>
+
+---> 'vim' znamená spuštění editoru, 'tutor' je soubor k editaci.
+
+  4. Pokud si tyto kroky spolehlivÄ› pamatujeÅ¡, vykonej kroky 1 až 3, Äímž
+     ukonÄíš a znovu spustíš editor. Potom pÅ™esuň kurzor dolu na lekci 1.3.
+     
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.3: ÚPRAVA TEXTU - MAZÃNÃ
+
+
+  ** Stisknutím klávesy  x  v Normálním módu smažeš znak na místě kurzoru. **
+
+  1. PÅ™esuň kurzor níže na řádek oznaÄený --->.
+
+  2. K odstranění chyb přejdi kurzorem na znak, který chceš smazat.
+
+  3. StlaÄ klávesu  x  k odstranÄ›ní nechtÄ›ných znaků.
+
+  4. Opakuj kroky 2 až 4 dokud není věta správně.
+
+---> Krááva skoÄÄilla pÅ™ess mÄ›ssíc.
+
+  5. Pokud je věta správně, přejdi na lekci 1.4.
+
+POZNÃMKA: Nesnaž se pouze zapamatovat pÅ™edvádÄ›né příkazy, uÄ se je používáním.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 1.4: ÚPRAVA TEXTU - VKLÃDÃNÃ
+
+
+      ** StlaÄení klávesy  i  v Normálním módu umožňuje vkládání textu. **
+
+  1. PÅ™esuň kurzor na první řádek oznaÄený --->.
+
+  2. Pro upravení prvního řádku do podoby řádku druhého, přesuň kurzor na
+     první znak za místo, kde má být text vložený.
+
+  3. StlaÄ  i  a napiÅ¡ potÅ™ebný dodatek.
+
+  4. Po opravení každé chyby stlaÄ <ESC> pro návrat do Normálního módu.
+     Opakuj kroky 2 až 4 dokud není věta správně.
+
+---> Nějaký txt na této .
+---> Nějaký text chybí na této řádce.
+
+  5. Pokud již ovládáš vkládání textu, přejdi na následující shrnutí.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÃ LEKCE 1
+
+
+  1. Kurzorem se pohybuje pomocí šipek nebo klávesami hjkl.
+	h (vlevo)	j (dolu)	k (nahoru)	l (vpravo)
+
+  2. Pro spuštění Vimu (z příkazového řádku) napiš: vim SOUBOR <ENTER>
+
+  3. Pro ukonÄení Vimu napiÅ¡: <ESC>  :q!  <ENTER>  bez uložení zmÄ›n.
+	     	       anebo: <ESC>  :wq  <ENTER>  pro uložení změn.
+
+  4. Pro smazání znaku pod kurzorem napiš v Normálním módu:  x
+
+  5. Pro vkládání textu od místa kurzoru napiš v Normálním módu:
+	 i     vkládaný text	<ESC>
+
+POZNÃMKA: StlaÄení <ESC> tÄ› pÅ™emístí do Normálního módu nebo zruší nechtÄ›ný
+      a ÄásteÄnÄ› dokonÄený příkaz.
+
+Nyní pokraÄuj Lekcí 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 2.1: PŘÃKAZY MAZÃNÃ
+
+
+	       ** Příkaz  dw  smaže znaky do konce slova. **
+
+  1. StlaÄ  <ESC>  k ubezpeÄení, že jsi v Normálním módu.
+
+  2. PÅ™esuň kurzor níže na řádek oznaÄený --->.
+
+  3. PÅ™esuň kurzor na zaÄátek slova, které je potÅ™eba smazat.
+
+  4. Napiš   dw	 , aby slovo zmizelo.
+
+POZNÃMKA: Písmena dw se zobrazí na posledním řádku obrazovky jakmile je
+	  napíšeÅ¡. Když napíšeÅ¡ nÄ›co Å¡patnÄ›, stlaÄ  <ESC>  a zaÄni znova.
+
+---> Jsou tu nějaká slova zábava, která nepatří list do této věty.
+
+  5. Opakuj kroky 3 až 4 dokud není věta správně a přejdi na lekci 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 2.2: VÃCE PŘÃKAZÅ® MAZÃNÃ
+
+
+	   ** Napsání příkazu  d$  smaže vše až do konce řádky. **
+
+  1. StlaÄ  <ESC>  k ubezpeÄení, že jsi v Normálním módu.
+
+  2. PÅ™esuň kurzor níže na řádek oznaÄený --->.
+
+  3. PÅ™esuň kurzor na konec správné vÄ›ty (ZA první teÄku).
+
+  4. Napiš  d$  ,aby jsi smazal znaky až do konce řádku.
+
+---> Někdo napsal konec této věty dvakrát. konec této věty dvakrát.
+
+
+  5. Přejdi na lekci 2.3 pro pochopení toho, co se stalo.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  Lekce 2.3: ROZÅ IŘOVACà PŘÃKAZY A OBJEKTY
+
+
+  Formát mazacího příkazu  d  je následující:
+
+	 [Äíslo]   d   objekt     NEBO     d   [Äíslo]   objekt
+  Kde:
+    Äíslo - udává kolikrát se příkaz vykoná (volitelné, výchozí=1).
+    d - je příkaz mazání.
+    objekt - udává na Äem se příkaz vykonává (vypsané níže).
+
+  Krátký výpis objektů:
+    w - od kurzoru do konce slova, vÄetnÄ› mezer.
+    e - od kurzoru do konce slova, BEZ mezer.
+    $ - od kurzoru do konce řádku.
+
+POZNÃMKA:  StlaÄením klávesy objektu v Normálním módu se kurzor pÅ™esune na
+           místo upřesněné ve výpisu objektů.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 2.4: VÃJIMKA Z 'PŘÃKAZ-OBJEKT'
+
+
+    	          ** Napsáním   dd   smažeš celý řádek. **
+
+  Vzhledem k Äastosti mazání celého řádku se autoÅ™i Vimu rozhodli, že bude
+  jednoduší napsat prostě dvě d k smazání celého řádku.
+
+  1. Přesuň kurzor na druhý řádek spodního textu.
+  2. Napiš  dd  pro smazání řádku.
+  3. PÅ™ejdi na Ätvrtý řádek.
+  4. NapiÅ¡   2dd   (vzpomeň si  Äíslo-příkaz-objekt) pro smazání dvou řádků.
+
+      1)  Růže jsou Äervené,
+      2)  Bláto je zábavné,
+      3)  Fialky jsou modré,
+      4)  Mám auto,
+      5)  Hodinky ukazují Äas,
+      6)  Cukr je sladký,
+      7)  A to jsi i ty.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   Lekce 2.5: PŘÃKAZ UNDO
+
+
+   ** StlaÄ  u	pro vrácení posledního příkazu,  U  pro celou řádku. **
+
+  1. PÅ™esuň kurzor níže na řádek oznaÄený ---> a pÅ™emísti ho na první chybu.
+  2. Napiš  x  pro smazání prvního nechtěného znaku.
+  3. TeÄ napiÅ¡  u  Äímž vrátíš zpÄ›t poslední vykonaný příkaz.
+  4. Nyní oprav všechny chyby na řádku pomocí příkazu  x  .
+  5. NapiÅ¡ velké  U  Äímž vrátíš řádek do původního stavu.
+  6. TeÄ napiÅ¡  u  nÄ›kolikrát, Äímž vrátíš zpÄ›t příkaz  U  .
+  7. StlaÄ CTRL-R (klávesu CTRL drž stlaÄenou a stiskni R) nÄ›kolikrát,
+     Äímž vrátíš zpÄ›t pÅ™edtím vrácené příkazy (redo).
+
+---> Opprav chybby nna toomto řádku a nahraÄ je pommocí undo.
+
+  8. Toto jsou velmi užiteÄné příkazy. Nyní pÅ™ejdi na souhrn Lekce 2.
+
+  
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÃ LEKCE 2
+
+
+  1. Pro smazání znaků od kurzoru do konce slova napiš:    dw
+
+  2. Pro smazání znaků od kurzoru do konce řádku napiš:    d$
+
+  3. Pro smazání celého řádku napiš:    dd
+
+  4. Formát příkazu v Normálním módu je:
+
+       [Äíslo]   příkaz   objekt    NEBO    příkaz     [Äíslo]   objekt
+     kde:
+       Äíslo - udává poÄet opakování příkazu
+       příkaz - udává co je třeba vykonat, například  d  maže
+       objekt - udává rozsah příkazu, například  w  (slovo),
+		$ (do konce řádku), atd.
+
+  5. Pro vrácení pÅ™edeÅ¡lé Äinnosti, napiÅ¡:	u (malé u)
+     Pro vrácení všech úprav na řádku napiš:	U (velké U)
+     Pro vrácení vrácených úprav (redo) napiš:	CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Lekce 3.1: PŘÃKAZ VLOŽIT
+
+
+       ** Příka  p  vloží poslední vymazaný text za kurzor. **
+
+  1. Přesuň kurzor níže na poslední řádek textu.
+
+  2. Napiš  dd  pro smazání řádku a jeho uložení do bufferu.
+
+  3. PÅ™esuň kurzor VÃÅ E tam, kam smazaný řádek patří.
+
+  4. V Normálním módu napiš  p  pro opětné vložení řádku.
+
+  5. Opakuj kroky 2 až 4 dokud řádky nebudou ve správném pořadí.
+
+     d) Také se dokážeš vzdělávat?
+     b) Fialky jsou modré,
+     c) Inteligence se uÄí,
+     a) Růže jsou Äervené,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lekce 3.2: PŘÃKAZ NAHRAZENÃ
+
+
+          ** Napsáním  r  a znaku se nahradí znak pod kurzorem. **
+
+  1. PÅ™esuň kurzor níže na první řádek oznaÄený --->.
+
+  2. PÅ™esuň kurzor na zaÄátek první chyby.
+
+  3. Napiš  r  a potom znak, který nahradí chybu.
+
+  4. Opakuj kroky 2 až 3 dokud není první řádka správně.
+
+--->  Kdiž byl pzán tento řádeg, někdu stlažil špaqné klávesy!
+--->  Když byl psán tento řádek, nÄ›kdo stlaÄíl Å¡patné klávesy!
+
+  5. Nyní přejdi na Lekci 3.2.
+
+POZNÃMKA: Zapamatuj si, že by ses mÄ›l uÄit používáním, ne zapamatováním.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		           Lekce 3.3: PŘÃKAZ ÚPRAVY
+
+
+	  ** Pokud chceÅ¡ zmÄ›nit Äást nebo celé slovo, napiÅ¡  cw . **
+
+  1. PÅ™esuň kurzor níže na první řádek oznaÄený --->.
+
+  2. Umísti kurzor na písmeno i v slově řiťok.
+
+  3. Napiš  cw  a oprav slovo (v tomto případě napiš 'ádek'.)
+
+  4. StlaÄ <ESC> a pÅ™ejdi na další chybu (první znak, který tÅ™eba zmÄ›nit.)
+
+  5. Opakuj kroky 3 až 4 dokud není první věta stejná jako ta druhá.
+
+---> Tento řiťok má několik skic, které psadoinsa změnit pasdgf příkazu.
+---> Tento řádek má několik slov, které potřebují změnit pomocí příkazu.
+
+Všimni si, že  cw  nejen nahrazuje slovo, ale také přemístí do vkládání.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lekce 3.4: VÃCE ZMÄšN POUŽITÃM c
+
+
+   ** Příkaz pro úpravu se druží se stejnými objekty jako ten pro mazání. **
+
+  1. Příkaz pro úpravu pracuje stejně jako pro mazání. Formát je:
+
+       [Äíslo]   c   objekt	 NEBO	   c	[Äíslo]   objekt
+
+  2. Objekty jsou také shodné, jako např.: w (slovo), $ (konec řádku), atd.
+
+  3. PÅ™ejdi níže na první řádek oznaÄený --->.
+
+  4. Přesuň kurzor na první rozdíl.
+
+  5. NapiÅ¡  c$  pro upravení zbytku řádku podle toho druhého a stlaÄ <ESC>.
+
+---> Konec tohoto řádku potřebuje pomoc, aby byl jako ten druhý.
+---> Konec tohoto řádku potřebuje opravit použitím příkazu  c$  .
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÃ LEKCE 3
+
+
+  1. Pro vložení textu, který byl smazán, napiš  p  . To vloží smazaný text
+     ZA kurzor (pokud byl řádek smazaný, přejde na řádek pod kurzorem).
+
+  2. Pro nahrazení znaku pod kurzorem, napiš  r  a potom znak, kterým
+     chceš původní znak nahradit.
+
+  3. Příkaz na upravování umožňuje změnit specifikovaný objekt od kurzoru
+     do konce objektu. Například: NapiÅ¡  cw  ,Äímž zmÄ›níš text od pozice
+     kurzoru do konce slova,  c$  změní text do konce řádku.
+
+  4. Formát pro nahrazování je:
+
+	 [Äíslo]   c   objekt      NEBO     c   [Äíslo]   objekt
+
+Nyní přejdi na následující lekci.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 4.1: POZICE A STATUS SOUBORU
+
+
+  ** StlaÄ CTRL-g pro zobrazení své pozice v souboru a statusu souboru.
+     StlaÄ SHIFT-G pro pÅ™echod na řádek v souboru. **
+
+  Poznámka: PÅ™eÄti si celou lekci než zaÄneÅ¡ vykonávat kroky!!
+
+  1. Drž klávesu Ctrl stlaÄenou a stiskni  g  . Vespod obrazovky se zobrazí
+     stavový řádek s názvem souboru a řádkou na které se nacházíš. Zapamatuj
+     si Äíslo řádku pro krok 3.
+
+  2. StlaÄ shift-G pro pÅ™esun na konec souboru.
+
+  3. NapiÅ¡ Äíslo řádku na kterém si se nacházel a stlaÄ shift-G. To tÄ›
+     vrátí na řádek, na kterém jsi dříve stiskl Ctrl-g.
+     (Když píšeÅ¡ Äísla, tak se NEZOBRAZUJà na obrazovce.)
+
+  4. Pokud se cítíš schopný vykonat tyto kroky, vykonej je.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lekce 4.2: PŘÃKAZ VYHLEDÃVÃNÃ
+
+
+     ** Napiš  /  následované řetězcem pro vyhledání onoho řetězce. **
+
+  1. Stiskni / v Normálním módu.  Všimni si, že tento znak se spolu s
+     kurzorem zobrazí v dolní Äásti obrazovky jako příkaz  :  .
+
+  2. Nyní napiš 'chhybba' <ENTER>.  To je slovo, které chceš vyhledat.
+
+  3. Pro vyhledání dalšího výsledku stejného Å™etÄ›zce, jednoduÅ¡e stlaÄ  n  .
+     Pro vyhledání dalšího výsledku stejného Å™etÄ›zce opaÄným smÄ›rem, stiskni
+     Shift-N.
+
+  4. Pokud chceÅ¡ vyhledat Å™etÄ›zec v opaÄném smÄ›ru, použij příkaz  ?  místo
+     příkazu  /  .
+
+---> "chhybba" není způsob, jak hláskovat chyba; chhybba je chyba.
+
+Poznámka: Když vyhledávání dosáhne konce souboru, bude pokraÄovat na jeho
+          zaÄátku.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Lekce 4.3: VYHLEDÃVÃNà PÃROVÉ ZÃVORKY
+
+
+	      ** Napiš  %  pro nalezení párové ),], nebo } . **
+
+  1. PÅ™emísti kurzor na kteroukoli (, [, nebo { v řádku oznaÄeném --->.
+
+  2. Nyní napiš znak  %  .
+
+  3. Kurzor se přemístí na odpovídající závorku.
+
+  4. StlaÄ  %  pro pÅ™esun kurzoru zpÄ›t na otvírající závorku.
+
+---> Toto ( je testovací řádek ('s, ['s ] a {'s } v něm. ))
+
+Poznámka: Toto je velmi užiteÄné pří ladÄ›ní programu s chybÄ›jícími
+          uzavíracími závorkami.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 4.4: ZPŮSOB JAK ZMĚNIT CHYBY
+		      
+
+   ** Napiš  :s/staré/nové/g  pro nahrazení slova 'nové' za 'staré'. **
+
+  1. PÅ™esuň kurzor na řádek oznaÄený --->.
+
+  2. Napiš  :s/dobréé/dobré <ENTER> .  Všimni si, že tento příkaz změní pouze
+     první výskyt v řádku.
+
+  3. Nyní napiš	 :s/dobréé/dobré/g  což znamená celkové nahrazení v řádku.
+     Toto nahradí všechny výskyty v řádku.
+
+---> dobréé suroviny a dobréé náÄiní jsou základem dobréé kuchynÄ›.
+
+  4. Pro změnu všech výskytů řetězce mezi dvěma řádky,
+     NapiÅ¡   :#,#s/staré/nové/g  kde #,# jsou Äísla onÄ›ch řádek.
+     Napiš   :%s/staré/nové/g    pro změnu všech výskytů v celém souboru.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÃ LEKCE 4
+
+
+  1. Ctrl-g  vypíše tvou pozici v souboru a status souboru.
+     Shift-G  tě přemístí na konec souboru.  Číslo následované
+     Shift-G  tÄ› pÅ™esune na dané Äíslo řádku.
+
+  2. Napsání  /  následované řetězcem vyhledá řetězec směrem DOPŘEDU.
+     Napsání  ?  následované řetězcem vyhledá řetězec směrem DOZADU.
+     Napsání  n  po vyhledávání najde následující výskyt řetězce ve stejném
+     smÄ›ru, Shift-N ve smÄ›ru opaÄném.
+
+  3. Stisknutí  %  když je kurzor na (,),[,],{, nebo } najde odpovídající
+     párovou závorku.
+
+  4. Pro nahrazení nového za první starý v řádku napiš     :s/staré/nové
+     Pro nahrazení nového za všechny staré v řádku napiš   :s/staré/nové/g
+     Pro nahrazení řetězců mezi dvěmi řádkami # napiš      :#,#s/staré/nové/g
+     Pro nahrazení všech výskytů v souboru napiš	   :%s/staré/nové/g
+     Pro potvrzení každého nahrazení přidej 'c'		   :%s/staré/nové/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Lekce 5.1: JAK VYKONAT VNÄšJÅ Ã PŘÃKAZ
+
+
+   ** Napiš  :!  následované vnějším příkazem pro spuštění příkazu. **
+
+  1. Napiš obvyklý příkaz  :  , který umístí kurzor na spodek obrazovky
+     To umožní napsat příkaz.
+
+  2. Nyní stiskni  !  (vykÅ™iÄník). To umožní vykonat jakýkoliv vnÄ›jší
+     příkaz z příkazového řádku.
+
+  3. Například napiš  ls  za ! a stiskni <ENTER>.  Tento příkaz zobrazí
+     obsah tvého adresáře jako v příkazovém řádku.
+     Vyzkoušej  :!dir  pokud ls nefunguje.
+
+Poznámka:  Takto je možné vykonat jakýkoliv příkaz.
+
+Poznámka:  VÅ¡echny příkazy  :  musí být dokonÄené stisknutím <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 5.2: VÃCE O UKLÃDÃNÃ SOUBORÅ®
+
+
+	    ** Pro uložení změn v souboru napiš  :w SOUBOR. **
+
+  1. Napiš  :!dir  nebo  :!ls  pro výpis aktuálního adresáře.
+     Už víš, že za tímto musíš stisknout <ENTER>.
+
+  2. Vyber si název souboru, který ještě neexistuje, například TEST.
+
+  3. Nyní napiš:  :w TEST  (kde TEST je vybraný název souboru.)
+
+  4. To uloží celý soubor  (Výuka Vimu)  pod názvem TEST.
+     Pro ověření napiÅ¡ znovu :!dir  , Äímž zobrazíš obsah adresáře.
+
+Poznámka: Jakmile ukonÄíš Vim a znovu ho spustíš s názvem souboru TEST,
+          soubor bude přesná kopie výuky, když si ji ukládal.
+
+  5. Nyní odstraň soubor napsáním (MS-DOS):    :!del TEST
+			     nebo (Unix):      :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lekce 5.3: VÃBÄšROVà PŘÃKAZ ULOŽENÃ
+
+
+	    ** Pro uložení Äásti souboru napiÅ¡  :#,# w SOUBOR **
+
+  1. Ještě jednou napiš  :!dir  nebo  :!ls  pro výpis aktuálního adresáře
+     a vyber vhodný název souboru jako např. TEST.
+
+  2. Přesuň kurzor na vrch této stránky a stiskni  Ctrl-g  pro zobrazení
+     Äísla řádku.  ZAPAMATUJ SI TOTO ÄŒÃSLO!
+
+  3. Nyní se přesuň na spodek této stránky a opět stiskni Ctrl-g.
+     ZAPAMATUJ SI I ÄŒÃSLO TOHOTO ŘÃDKU!
+
+  4. Pro uložení POUZE Äásti souboru, napiÅ¡  :#,# w TEST  kde #,# jsou
+     Äísla dvou zapamatovaných řádků (vrch, spodek) a TEST je název souboru.
+
+  5. Znova se ujisti, že tam ten soubor je pomocí  :!dir  ale NEODSTRAŇUJ ho.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		        Lekce 5.4: SLUÄŒOVÃNÃ SOUBORÅ®
+
+
+      	   ** K vložení obsahu souboru napiÅ¡  :r NÃZEV_SOUBORU **
+
+  1. Napiš  :!dir  pro ujištění, že soubor TEST stále existuje.
+
+  2. Přesuň kurzor na vrch této stránky.
+
+POZNÃMKA: Po vykonání kroku 3 uvidíš lekci 5.3.	Potom se opÄ›t pÅ™esuň dolů
+          na tuto lekci.
+
+  3. Nyní vlož soubor TEST použitím příkazu  :r TEST  kde TEST je název
+     souboru.
+
+POZNÃMKA: Soubor, který vkládáš se vloží od místa, kde se nachází kurzor.
+
+  4. Pro potvrzení vložení souboru, pÅ™esuň kurzor zpÄ›t a vÅ¡imni si, že teÄ
+     máš dvě kopie lekce 5.3, originál a souborovou verzi.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRNUTÃ LEKCE 5
+
+
+  1.  :!příkaz  vykoná vnější příkaz.
+
+      NÄ›které užiteÄné příklady jsou:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  zobrazí obsah souboru.
+	  :!del SOUBOR     :!rm SOUBOR     -  odstraní SOUBOR.
+
+  2.  :w SOUBOR  uloží aktuální text jako SOUBOR na disk.
+
+  3.  :#,#w SOUBOR  uloží řádky od # do # do SOUBORU.
+
+  4.  :r SOUBOR  vybere z disku SOUBOR a vloží ho do editovaného souboru
+      za pozici kurzoru.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Lekce 6.1: PŘÃKAZ OTEVŘÃT
+
+
+  ** Napiš  o  pro vložení řádku pod kurzor a přepnutí do Vkládacího módu. **
+
+  1. PÅ™emísti kurzor níže na řádek oznaÄený --->.
+
+  2. Napiš  o (malé) pro vložení řádku POD kurzor a přepnutí do
+     Vkládacího módu.
+
+  3. Nyní zkopíruj řádek oznaÄený ---> a stiskni <ESC> pro ukonÄení
+     Vkládacího módu.
+  
+---> Po stisknutí  o  se kurzor přemístí na vložený řádek do Vkládacího
+     módu.
+
+  4. Pro otevření řádku NAD kurzorem jednoduše napiš velké  O  , místo
+     malého o. Vyzkoušej si to na následujícím řádku.
+Vlož řádek nad tímto napsáním Shift-O po umístění kurzoru na tento řádek.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Lekce 6.2: PŘÃKAZ PŘIDAT
+
+
+	     ** Stiskni  a  pro vložení textu ZA kurzor. **
+
+  1. PÅ™esuň kurzor na níže na konec řádky oznaÄené --->
+     stisknutím $ v Normálním módu.
+
+  2. Stiskni  a  (malé) pro přidání textu ZA znak, který je pod kurzorem.
+     (Velké  A  přidá na konec řádku.)
+
+Poznámka: Tímto se vyhneš stisknutí  i  , posledního znaku, textu na vložení,
+          <ESC>, kurzor doprava, a nakonec  x  na přidávání na konec řádku!
+
+  3. Nyní dokonÄí první řádek. VÅ¡imni si, že pÅ™idávání je vlastnÄ› stejné jako
+     Vkládací mód, kromě místa, kam se text vkládá.
+
+---> Tento řádek ti umožňuje nacviÄit
+---> Tento řádek ti umožňuje nacviÄit pÅ™idávání textu na konec řádky.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lekce 6.3: JINà ZPÅ®SOB NAHRAZOVÃNÃ
+
+
+         ** Napiš velké  R  pro nahrazení víc než jednoho znaku. **
+
+  1. PÅ™esuň kurzor na první řádek oznaÄený --->.
+
+  2. Umísti kurzor na zaÄátek prvního slova, které je odliÅ¡né od druhého
+     řádku oznaÄeného ---> (slovo 'poslední').
+
+  3. Nyní stiskni  R  a nahraÄ zbytek textu na prvním řádku pÅ™epsáním
+     starého textu tak, aby byl první řádek stejný jako ten druhý.
+
+---> Pro upravení prvního řádku do tvaru toho poslední na straně použij kl.
+---> Pro upravení prvního řádku do tvaru toho druhého, napiš R a nový text.
+
+  4. Všimni si, že jakmile stiskneš <ESC> všechen nezměněný text zůstává.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		         Lekce 6.4: NASTAVENà MOŽNOSTÃ
+
+  ** Nastav možnost, že vyhledávání anebo nahrazování nedbá velikosti písmen **
+
+  1. Vyhledej řetězec 'ignore' napsáním:
+     /ignore
+     Zopakuj několikrát stisknutí klávesy n.
+
+  2. Nastav možnost 'ic' (Ignore case) napsáním příkazu:
+     :set ic
+
+  3. Nyní znovu vyhledej 'ignore' stisknutím: n
+     Několikrát hledání zopakuj stisknutím klávesy n.
+
+  4. Nastav možnosti 'hlsearch' a 'incsearch':
+     :set hls is
+
+  5. Nyní znovu vykonej vyhledávací příkaz a sleduj, co se stane:
+     /ignore
+
+  6. Pro vypnutí zvýrazňování výsledků napiš:
+     :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       SHRHNUTÃ LEKCE 6
+
+
+  1. Stisknutí  o  otevře nový řádek POD kurzorem a umístí kurzor na vložený
+     řádek do Vkládacího módu.
+     Napsání velkého  O  otevře řádek NAD řádkem, na kterém je kurzor.
+
+  2. Stiskni  a  pro vložení textu ZA znak na pozici kurzoru.
+     Napsání velkého  A  automaticky přidá text na konec řádku.
+
+  3. Stisknutí velkého  R  přepne do Nahrazovacího módu, dokud
+     nestiskneÅ¡ <ESC> pro jeho ukonÄení.
+
+  4. Napsání ":set xxx" nastaví možnosti "xxx".
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      LEKCE 7: PŘÃKAZY ON-LINE NÃPOVÄšDY
+
+
+		   ** Používej on-line systém nápovědy **
+
+  Vim má obsáhlý on-line systém nápovÄ›dy. Pro zaÄátek vyzkouÅ¡ej jeden z
+  následujících:
+	- stiskni klávesu <HELP> (pokud ji máš)
+	- stiskni klávesu <F1>  (pokud ji máš)
+	- napiš  :help <ENTER>
+
+  Napiš  :q <ENTER>  pro uzavření okna nápovědy.
+
+  Můžeš najít nápovědu k jakémukoliv tématu přidáním argumentu k
+  příkazu ":help". Zkus tyto (nezapomeň stisknout <ENTER>):
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  LEKCE 8: VYTVOŘENà INICIALIZAÄŒNÃHO SKRIPTU
+
+		        ** Zapni funkce editoru Vim **
+
+  Vim má daleko více funkcí než Vi, ale většina z nich je vypnuta ve výchozím
+  nastavení. Pro zapnutí některých vytvoř soubor "vimrc".
+
+  1. ZaÄni upravovat soubor "vimrc". Toto závisí na použitém systému:
+	:edit ~/.vimrc			pro Unix
+	:edit $VIM/_vimrc		pro MS-Windows
+
+  2. Nyní Äti ukázkový "vimrc" soubor:
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Ulož soubor pomocí:
+
+	:write
+
+  Po příštím startu Vim se zapne zvýrazňování syntaxe.
+  Do souboru "vimrc" můžeš přidat všechny svoje upřednostňované nastavení.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Toto ukonÄuje výuku Vim, která byla myÅ¡lená jako struÄný pÅ™ehled
+  editoru Vim, tak akorát postaÄující pro lehké a obstojné používání editoru.
+  Tato výuka má daleko od úplnosti, protože Vim obsahuje podstatně více
+  příkazů. Dále si pÅ™eÄti uživatelský manuál: ":help user-manual".
+
+  Pro další studium je doporuÄená kniha:
+	Vim - Vi Improved - od Steve Oualline
+	Nakladatel: New Riders
+  První kniha urÄená pro Vim. ObzvláštÄ› vhodná pro zaÄáteÄníky.
+  Obsahuje množství příkladů a obrázků.
+  viz http://iccf-holland.org/click5.html
+
+  Tato kniha je starší a více vÄ›novaná Vi než Vim, ale také doporuÄená:
+	Learning the Vi Editor - od Linda Lamb
+	Nakladatel: O'Reilly & Associates Inc.
+  Je to dobrá kniha pro získání vědomostí téměř o všem, co můžete s Vi dělat.
+  Šesté vydání obsahuje též informace o Vim.
+
+  Tato výuka byla napsaná autory Michael C. Pierce a Robert K. Ware,
+  Colorado School of Mines s použitím myšlenek od: Charles Smith,
+  Colorado State University.  E-mail: bware@mines.colorado.edu.
+
+  Upravil pro Vim: Bram Moolenaar.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  PÅ™eklad do ÄeÅ¡tiny: LuboÅ¡ Turek
+  E-Mail: lubos.turek@gmail.com
+  2007 Feb 28 
new file mode 100644
--- /dev/null
+++ b/runtime/tutor/tutor.hu
@@ -0,0 +1,823 @@
+===============================================================================
+=    Ü d v ö z ö l j ü k   a   V I M   T u t o r b a n  -    1.5-ös  verzió ===
+===============================================================================
+
+     A Vim egy nagyon hatékony szerkesztõ, amelnyek rengeteg utasítása
+     van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
+     mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
+     elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
+     általános célú szövegszerkesztõt.
+
+     A feladatok megoldásához 25-30 perc szükséges attól függõen,
+     mennyit töltünk a kisérletezéssel.
+
+     A leckében szereplõ utasítások módosítani fogják a szövegek.
+     Készítsen másolatot errõl a fájlról, ha gyakorolni akar.
+     (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
+
+     Fontos megérteni, hogy ez az oktató cselekedve taníttat.
+     Ez azt jelenti, hogy Önnek ajánlott végrehajtania az utasításokat,
+     hogy megfelelõen megtanulja azokat. Ha csak olvassa, elfelejti!
+
+     Most bizonyosodjon, meg, hogy a Caps-Lock gombja NINCS lenyomva, és
+     Nyomja meg megfelelõ számúszor a   j   gombot, hogy az 1.1-es
+     lecke teljesen a képernyõn legyen!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			1.1.  lecke:  A KURZOR MOZGATÁSA
+
+
+   ** A kurzor mozgatásához nyomja meg a h,j,k,l gombokat az alábbi szerint. **
+	     ^
+	     k		    Tipp:  A h billentyû van balra, és balra mozgat
+       < h	 l >		   A l billentyû van jobbra, és jobbra mozgat
+	     j			   A j billentyû olyan, mint egy lefele nyíl
+	     v
+  1. Mozgassa a kurzort körbe az ablakban, amíg hozzá nem szokik!
+
+  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!
+
+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!
+
+Megj: A kurzor gomboknak is mûködniük kell, de a hjkl használatával
+      sokkal gyorsabban tud, mozogni, ha hozzászokik.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     1.2.  lecke: BE ÉS KILÉPÉS A VIMBÕL
+
+
+  !! MEGJ: Mielõtt végrehajtja az alábbi lépéseket, olvassa végig a leckét !!
+
+  1. Nyomja meg az  <ESC> gombot (hogy biztosan normál módban legyen).
+
+  2. Írja:			:q! <ENTER>.
+
+---> Ezzel kilép a szerkesztõbõl a változások MENTÉSE NÉLKÜL.
+     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:
+     Ez valószínûleg:	vimtutor <ENTER>
+     Normális esetben ezt írná:	vim tutor.hu <ENTER>
+
+---> 'vim' jelenti a vimbe belépést, 'tutor.hu' a fájl, amit szerkeszteni kíván.
+
+  4. Ha megjegyezte a lépéseket és biztos magában, hajtsa végre a lépéseket
+     1-tõl 3-ig, hogy kilépjen és visszatérjen a szerkesztõbe. Azután
+     menjen az 1.3.  leckére.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     1.3.  lecke: SZÖVEG SZERKESZTÉSE - TÖRLÉS
+
+
+** Normál módban nyomjon  x-et, hogy a kurzor alatti karaktert törölje. **
+
+  1. Mozgassa a kurzort a ---> kezdetû sorra!
+
+  2. A hibák kijavításához mozgassa a kurzort amíg a törlendõ karakter
+     fölé nem ér.
+
+  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
+
+  4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
+
+---> ÕÕszi éjjjell izziik aa galaggonya rruuhája.
+
+  5. Ha a sor helyes, ugorjon a 1.4. leckére.
+
+MEGJ: A tanulás során ne memorizálni próbáljon, hanem használat során tanuljon.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     1.4.  lecke: SZÖVEG SZERKESZTÉSE - BESZÚRÁS
+
+
+	 ** Normál módban  i  megnyomásával lehet beilleszteni. **
+
+  1. Az alábbi elsõ ---> kezdetû sorra menjen.
+
+  2. Ahhoz, hogy az elsõt azonossá tegye a másodikkal, mozgassa a kurzort
+     az elsõ karakterre, amely UTÁN szöveget kell beszúrni.
+
+  3. Nyomjon  i-t és írja be a megfelelõ szöveget.
+
+  4. Amikor mindent beírt, nyomjon <ESC>-et, hogy Normál módba visszatérjen.
+     Ismételje a 2 és 4 közötti lépéseket, hogy kijavítsa a mondatot.
+
+---> Az átható soól hizik pár ész.
+---> Az itt látható sorból hiányzik pár rész.
+
+  5. Ha már begyakorolta a beszúrást, menjen az alábbi összefoglalóra.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       1. LECKE ÖSSZEFOGLALÓJA
+
+
+  1. A kurzort vagy a nyilakkal vagy a hjkl gombokkal mozgathatja.
+	 h (balra)	j (le)       k (fel)	    l (jobbra)
+
+  2. A Vimbe (a $ prompttól) így léphet be:  vim FILENAME <ENTER>
+
+  3. A Vimbõl így léphet ki:  <ESC>   :q!  <ENTER>  a változtatások eldobásával.
+	     vagy így:	      <ESC>   :wq  <ENTER>  a változások mentésével.
+
+  4. A kurzor alatti karakter törlése normál módban:  x
+
+  5. Szöveg beszúrása a kurzor után normál módban:
+	 i     gépelje be a szöveget	<ESC>
+
+MEGJ: Az <ESC> megnyomása normál módba viszi, vagy megszakít egy nem befejezett
+      részben befejezett parancsot.
+
+Most folytassuk a 2. leckével!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			2.1.  lecke: TÖRLÕ UTASÍTÁSOK
+
+
+	    ** dw  töröl a szó végéig. **
+
+  1. Nyomjon <ESC>-et, hogy megbizonyosodjon, hogy normál módban van!
+
+  2. Mozgassa a kurzort a ---> kezdetû sorra!
+
+  3. Mozgassa a kurzort arra annak a szónak az elejére, amit törölni szeretne.
+     Törölje az állatokat a mondatból.
+
+  4. A szó törléséhez írja:   dw
+
+  MEGJ: Ha rosszul kezdte az utasítást csak nyomjon <ESC> gombot
+        a megszakításához.
+
+---> Pár szó kutya nem uhu illik pingvin a mondatba tehén.
+
+  5. Ismételje a 3 és 4 közötti utasításokat amíg kell és ugorjon a 2.2 leckére!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      2.2.  lecke: MÉG TÖBB TÖRLÕ UTASÍTÁS
+
+
+	   ** d$ beírásával a sor végéig törölhet. **
+
+  1. Nyomjon <ESC>-et, hogy megbizonyosodjon, hogy normál módban van!
+
+  2. Mozgassa a kurzort a ---> kezdetû sorra!
+
+  3. Mozgassa a kurzort a helyes sor végére (az elsõ . UTÁN)!
+
+  4. d$  begépeléséveltörölje a sor végét!
+
+---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
+
+
+  5. Menjen a 2.3. leckére, hogy megértse mi történt!
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     2.3.  lecke: UTASÍTÁSOKRÓL ÉS OBJEKTUMOKRÓL
+
+
+  A  d  (delete=törlés) utasítás formája a következõ:
+
+	 [szám]   d	objektum	   VAGY	     d	 [szám] objektum
+  Ahol:
+    szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
+    d - a törlés (delete) utasítás.
+    objektum - amin a parancsnak teljesülnie kell (alább listázva).
+
+  Objektumok rövid listája:
+    w - a kurzortól a szó végéig, beleértve a szóközt.
+    e - a kurzortól a szó végéig, NEM beleértve a szóközt.
+    $ - a kurzortól a sor végéig.
+
+MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
+       a kurzor oda kerül, amit az objektumlista megad.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
+
+
+	       ** dd beírásával törölheti az egész sort. **
+
+  A teljes sor törlésének gyakorisága miatt a Vi tervezõi elhatározták,
+  hogy könnyebb lenne csupán a d-t kétszer megnyomni, hogy egy sort töröljünk.
+
+  1. Mozgassa a kurzort az alábbi kifejezések második sorára!
+  2. dd begépelésével törölje a sort!
+  3. Menjen a 4. (eredetileg 5.) sorra!
+  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
+
+      1)  Alvó szegek a jéghideg homokban,
+      2)  - kezdi a költõ -
+      3)  Plakátmagányban ázó éjjelek.
+      4)  Pingvinek ne féljetek,
+      5)  Távolról egy vaku villant,
+      6)  Égve hagytad a folyosón a villanyt.
+      7)  Ma ontják véremet.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 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. **
+
+  1. Menjünk az alábbi ---> kezdetû sor elsõ hibájára!
+  2. x  lenyomásával törölje az elsõ felesleges karaktert!
+  3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
+  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
+  5. Most nagy  U  -val állítsa vissza a sor eredeti állapotát!
+  6. Nyomja meg az u gombot párszor, hogy az U és sz elõzõ utasításokat
+     visszaállítsa!
+  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.
+
+  8. Ezek nagyon hasznos parancsok. Most ugarjon a 2. lecke összefoglalójára.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       2. LECKE ÖSSZEFOGLALÓJA
+
+
+  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$
+
+  3. Egész sor törlése:    dd
+
+  4. Egy utasítás alakja normál módban:
+
+       [szám]   utasítás   objektum   VAGY   utasítás	[szám] objektum
+     ahol:
+       szám - hányszor ismételjük a parancsot
+       utasítás - mit tegyünk, pl. d  a törléskor
+       objektum - mire hasson az utasítás, például w (szó=word),
+		$ (a sor végéig), stb.
+
+  5. Az elõzõ tett visszavonása (undo):	     u	 (kis u)
+     A sor összes változásának visszavonása: U	 (nagy U)
+     Visszavonások visszavonása:	     CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 3.1.  lecke: A PUT PARANCS
+
+
+  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
+
+  1. Mozgassuk a kurzort az alábbi sorok elsõ sorára.
+
+  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.
+
+  4. Normál módban írjunk  p   betût a törölt sor beillesztéséhez.
+
+  5. Folytassuk a 2-4. utasításokkal hogy a helyes sorrendet kapjuk.
+
+     d) Can you learn too?
+     b) Violets are blue,
+     c) Intelligence is learned,
+     a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       3.2.  lecke: A REPLACE PARANCS
+
+
+** r  és  a karakterek leütésével a kurzor alatti karaktert megváltoztatjuk. **
+
+  1. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
+
+  2. Mozgassuk a kurzort az elsõ hiba fölé!
+
+  3. r	majd a kívánt karakter leütésével változtassuk meg a hibásat!
+
+  4. A 2. és 3. lépésekkel javítsuk az összes hibát!
+
+--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+--->  When this line was typed in, someone pressed some wrong keys!
+
+  5. Menjünk a 3.2. leckére!
+
+MEGJ: Emlékezzen, hogy nem memorizálással, hanem gyakorlással tanuljon.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			3.3.  lecke: A CHANGE PARANCS
+
+
+	   ** A szó egy részének megváltoztatásához írjuk:  cw . **
+
+  1. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
+
+  2. Vigye a kurzort a Ezen szó z betûje fölé!
+
+  3. cw és a helyes szórész (itt 'bben') beírásával javítsa a szót!
+
+  4. <ESC> lenyomása után a következõ hibára ugorjon (az elsõ cserélendõ
+     karakterre)!
+
+  5. A 3. és 4. lépések ismétlésével az elsõ mondatot tegye a másodikkal
+     azonossá!
+
+---> Ezen a sorrrrr pár szóra meg kell változzanak a change utaskírésõ.
+---> Ebben a sorban pár szót meg kell változtatni a change utasítással.
+
+Vegyük észre, hogy a  cw  nem csak a szót írja át, hanem beszúró
+(insert) módba vált.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       3.4.  lecke: TÖBBFÉLE VÁLTOZTATÁS c-VEL
+
+
+ ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
+
+  1. A change utasítás a törléssel azonosan viselkedik.  A forma:
+
+       [szám]   c   objektum	   OR	    c	[szám]   objektum
+
+  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
+
+  3. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
+
+  4. Menjünk az elsõ hibára!
+
+  5. c$ begépelésével a sorvégeket tegyük azonossá és nyomjunk <ESC>-et!
+
+---> Ennek a sornak a vége kiigazításra szorul, hogy megegyezzen a másodikkal.
+---> Ennek a sornak a vége a c$ paranccsal változtatható meg.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       3. LECKE ÖSSZEFOGLALÓJA
+
+
+  1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
+     a kurzor UTÁN helyezi (ha sor került törlésre, a kurzor allatti sorba).
+
+  2. A kurzor alatti karakter átírásához az r-et és azt a karaktert
+     nyomjuk, amellyel az eredetit felül szeretnénk írni.
+
+  3. A változtatás (c) utasítás a karaktertõl az objektum végéig
+     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
+     a c$ a sor végéig.
+
+  4. A változtatás formátuma:
+
+	 [szám]   c	objektum	VAGY	c   [szám]   objektum
+
+Ugorjunk a következõ leckére!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     4.1.  lecke: HELY ÉS FÁJLÁLLAPOT
+
+
+ ** CTRL-g megnyomásával megnézhetjük a helyünket a fájlban és a fájl állapotát.
+     SHIFT-G leütésével a fájl adott sorára ugorhatunk. **
+
+  Megj: Olvassuk el az egész leckét a lépések végrehajtása elõtt!!
+
+  1. Tartsuk nyomva a Ctrl gombot és nyomjunk  g-t.  Az állapotsor
+     megjelenik a lap alján a fájlnévvel és az aktuális sor sorszámával.
+     Jegyezzük meg a sorszámot a 3. lépéshez!
+
+  2. Nyomjunk Shift-G-t a lap aljára ugráshoz!
+
+  3. Üssük be az eredeti sor számát, majd üssünk shift-G-t! Ezzel
+     visszajutunk az eredeti sorra ahol Ctrl-g-t nyomtunk.
+     (A beírt szám NEM fog megjelenni a képernyõn.)
+
+  4. Ha megjegyezte a feladatot, hajtsa végre az 1-3. lépéseket!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			4.2.  lecke: A SEARCH PARANCS
+
+
+  ** / majd a kívánt kifejezés beírásával kereshetjük meg a kifejezést. **
+
+  1. Normál módban üssünk  /  karaktert!  Ez és a kurzor megjelenik
+     a képernyõ alján, ahogy a : utasítás is.
+
+  2. Írjuk be: 'hiibaa' <ENTER>!  Ez az a szó amit keresünk.
+
+  3. A kifejezés újabb kereséséhez üssük le egyszerûen:  n .
+     A kifejezés ellenkezõ irányban történõ kereséséhez ezt üssük be: Shift-N .
+
+  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
+
+---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
+
+Megj: Ha a keresés eléri a fájl végét, akkor az elején kezdi.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   4.3.  lecke: ZÁRÓJELEK PÁRJÁNAK KERESÉSE
+
+
+	   ** % leütésével megtaláljuk a ),], vagy }  párját. **
+
+  1. Helyezze a kurzort valamelyik (, [, vagy { zárójelre a ---> kezdetû
+     sorban!
+
+  2. Üssön  %  karaktert!
+
+  3. A kurzor a zárójel párjára fog ugrani.
+
+  4. % leütésével visszaugrik az eredeti zárójelre.
+
+---> Ez ( egy tesztsor (-ekkel, [-ekkel ] és {-ekkel } a sorban. ))
+
+Megj: Ez nagyon hasznos, ha olyan programot debugolunk, amelyben a
+      zárójelek nem párosak!
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      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. **
+
+  1. Menjünk a ---> kezdetû sorra!
+
+  2. Írjuk be:  :s/eggy/egy <ENTER> .  Ekkor csak az elsõ változik meg a
+     sorban.
+
+  3. Most ezt írjuk:	 :s/eggy/egg/g	   amely globálisan helyettesít
+     a sorban.
+     Ez a sorban minden elõfordulást helyettesít.
+
+---> eggy hegy 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.
+     :%s/régi/új/g      a fájlbeli összes elõfordulás helyettesítése.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       4. LECKE ÖSSZEFOGLALÓJA
+
+
+  1. Ctrl-g  kiírja az kurzor helyét a fájlban és a fájl állapotát.
+     Shift-G a fájl végére megy, gg az elejére. Egy szám után
+     Shift-G  az adott számú sorra ugrik.
+
+  2. /	után egy kifejezés ELÕREFELE keresi a kifejezést.
+  2. ?	után egy kifejezés VISSZAFELE keresi a kifejezést.
+     Egy keresés után az  n  a következõ elõfordulást keresi azonos irányban
+     Shift-N  az ellenkezõ irányban keres.
+
+  3. %	begépelésével, ha  (,),[,],{, vagy } karakteren vagyunk a zárójel
+     párjára ugrik.
+
+  4. az elsõ régi helyettesítése újjal a sorban    :s/régi/új
+     az összes régi helyettesítése újjal a sorban  :s/régi/új/g
+     két sor közötti kifejezésekre		   :#,#s/régi/új/g
+     # helyén az aktuális sor (.) és az utolsó ($) is állhat :.,$/régi/új/g
+     A fájlbeli összes elõfordulás helyettesítése  :%s/régi/új/g
+     Mindenkori megerõsítésre vár 'c' hatására	   :%s/régi/új/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		5.1.  lecke: KÜLSÕ PARANCS VÉGREHAJTÁSA
+
+
+   ** :!  után külsõ parancsot írva végrehajtódik a parancs. **
+
+  1. Írjuk be az ismerõs : parancsot, hogy a kurzort a  képernyõ aljára
+     helyezzük. Ez lehetõvé teszi egy parancs beírását.
+
+  2. ! (felkiáltójel) beírásával tegyük lehetõvé külsõ héj (shell)-parancs
+     végrehajtását.
+
+  3. Írjunk például ls parancsot a ! után majd üssünk <ENTER>-t.  Ez ki
+     fogja listázni a könyvtárunkat ugyanúgy, mintha a shell promptnál
+     lennénk.  Vagy írja ezt  :!dir  ha az ls nem mûködik.
+
+Megj:  Ilymódon bármely külsõ utasítás végrehajtható.
+
+Megj:  Minden  :  parancs után <ENTER>-t kell ütni.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      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. **
+
+  1. :!dir  vagy  :!ls  beírásával listázzuk a könyvtárunkat!
+     Ön már tudja, hogy <ENTER>-t kell ütnie utána.
+
+  2. Válasszon egy fájlnevet, amely még nem létezik pl. TESZT!
+
+  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.
+     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.
+
+  5. Távolítsa el a fájlt  (MS-DOS):	:!del TESZT
+			vagy (Unix):	:!rm TESZT
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    5.3.  lecke: EGY KIVÁLASZTOTT RÉSZ KIÍRÁSA
+
+
+	** A fájl egy részének kiírásához írja :#,# w FÁJLNÉV **
+
+  1. :!dir  vagy :!ls  beírásával listázza a könyvtárat, és válasszon egy
+     megfelelõ fájlnevet, pl. TESZT.
+
+  2. Mozgassa a kurzort ennek az oldalnak a tetejére, és nyomjon
+     Ctrl-g-t, hogy megtudja a sorszámot.  JEGYEZZE MEG A SZÁMOT!
+
+  3. Most menjen a lap aljára, és üsse be ismét: Ctrl-g.  EZT A SZÁMOT
+     IS JEGYEZZE MEG!
+
+  4. Ha csak ezt a részét szeretné menteni a fájlnak, írja   :#,# w TESZT
+     ahol #,# a két sorszám, amit megjegyzett, TESZT az Ön fájlneve.
+
+  5. Ismét nézze meg, hogy a fájl ott van (:!dir) de NE törölje.
+
+  6. Vimben létezik egy másik lehetõség: nyomja meg a Shift-V gombpárt
+     az elsõ menteni kívánt soron, majd menjen le az utolsóra, ezután
+     írja :w TESZT2   Ekkor a TESZT2 fájlba kerül a kijelölt rész.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   5.4.  lecke: RETRIEVING AND MERGING FILES
+
+
+       ** Egy fájl tartalmának beillesztéséhez írja   :r FÁJLNÉV **
+
+  1. :!dir beírásával nézze meg, hogy az Ön TESZT fájlja létezik még.
+
+  2. Helyezze a kurzort ennek az oldalnak a tetejére.
+
+MEGJ:  A 3. lépés után az 5.3. leckét fogja látni. Azután LEFELÉ indulva
+       keresse meg ismét ezt a leckét.
+
+  3. Most szúrja be a TESZT nevû fájlt a   :r TESZT   paranccsal, ahol
+     TESZT az Ön fájljénak a neve.
+
+MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
+
+  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillsztettük, menjen
+     vissza, és nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
+     mellett a fájlból bemásolt is ott van.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       5. LECKE ÖSSZEFOGLALÓJA
+
+
+  1.  :!parancs végrehajt egy külsõ utasítást.
+
+      Pár hasznos példa:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  könyvtárlista kiírása.
+	  :!del FÁJLNÉV    :!rm FÁJLNÉV    -  FÁJLNÉV nevû fájl törlése.
+
+  2.  :w FÁJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÁJNÉV néven.
+
+  3.  :#,#w FÁJLNÉV  kiírja a két sorszám (#) közötti sorokat FÁJLNÉV-be
+      Másik lehetõség, hogy a kezdõsornál Ctrl-v-t nyom lemegy az utolsó
+      sorra, majd ezt üti be  :w FÁJLNÉV
+
+  4.  :r FÁJLNÉV  beolvassa a FÁJLNÉV fájlt és behelyezi a jelenlegi fájlba
+      a kurzorpozició utáni sorba.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 6.1.  lecke: A OPEN PARANCS
+
+
+** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
+
+  1. Mozgassuk a kurzort a ---> kezdetû sorra.
+
+  2. o (kicsi)  beírásával nyisson egy sort a kurzor ALATT! Ekkor
+     automatikusan beszúró (insert) módba kerül.
+
+  3. Másolja le a  ---> jelû sort és <ESC> megnyomásával lépjen ki
+     a beszúró módból.
+
+---> Az o lenyomása után a kurzor a következõ sor elején áll beszúró módban.
+
+  4. A kurzor FELETTI for megnyitásához egyzserûen a nagy O betût írjon
+kicsi helyett. Próbálja ki a következõ soron!
+Nyisson egy új sort efelett Shift-O megnyomásával, mialatt a kurzor
+ezen a soron áll.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			6.2.  lecke: AZ APPEND PARANCS
+
+
+	 ** a  lenyomásával a kuror UTÁN szúrhatunk szöveget. **
+
+  1. Mozgassuk a kurzort a következõ ---> kezdetû sor végére úgy,
+     hogy normál módban  $  ír be.
+
+  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
+     amelyen a kurzor áll.
+     (A nagy  A  az egész sor végére írja a szöveget.)
+
+Megj: A Vimben a sor legvégére is lehet állni, azonba ez elõdjében
+      a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
+      a sor végéhez szöveget írni.
+
+  3. Egészítse ki az elsõ sort. Vegye észre, hogy az a utasítás (append)
+     teljesen egyezik az i-vel (insert) csupán a beszúrt szöveg helye
+     különbözik.
+
+---> Ez a sor lehetõvé teszi Önnek, hogy gyakorolja
+---> Ez a sor lehetõvé teszi Önnek, hogy gyakorolja a sor végére beillesztést.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    6.3.  lecke: AZ ÁTÍRÁS MÁSIK VÁLTOZATA
+
+
+      ** Nagy R  beírásával írhat felül több mint egy karaktert. **
+
+  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').
+
+  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.
+
+---> 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.
+
+  4. Note that when you press <ESC> to exit, any unaltered text remains.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    6.4.  lecke: BEÁLLÍTÁSOK
+
+** Állítsuk be, hogy a keresés és a helyettesítés ne függjön kis/NAGYbetûktõl **
+
+  1. Keressük meg az 'ignore'-t az beírva:
+     /ignore
+     Ezt ismételjük többször az n billentyûvel
+
+  2. Állítsuk be az 'ic' (Ignore case) lehetõséget így:
+     :set ic
+
+  3. Most keressünk ismét az 'ignore'-ra n-nel
+     Ismételjük meg többször a keresést: n
+
+  4. Állítsuk be a 'hlsearch' és 'incsearch' lehetõségeket:
+     :set hls is
+
+  5. Most ismét írjuk be a keresõparancsot, és lássuk mi történik:
+     /ignore
+
+  6. A kiemelést szüntessük meg alábbi utasítások egyikével:
+     :set nohls     vagy	 :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       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.
+
+  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.
+
+  3. Typing a capital  R  enters Replace mode until  <ESC>  is pressed to exit.
+
+  4. Typing ":set xxx" sets the option "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       7. lecke: ON-LINE HELP PARANCSOK
+
+
+		    ** Az online súgórendszer használata **
+
+  A Vim részletes súgóval rendelkezik.  Induláshoz a következõk egyikét
+  tegye:
+	- nyomja meg a <HELP> gombot (ha van ilyen)
+	- nyomja meg az <F1> gombot (ha van ilyen)
+	- írja be:   :help <ENTER>
+
+  :q <ENTER>   beírásával zárhatja be a súgóablakot.
+
+  Majdnem minden témakörrõl találhat súgót, argumentum megadásával
+  ":help" utasítás .  Próbálja az alábbiakat ki (<ENTER>-t ne felejtsük):
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       8. lecke: INDÍTÓSZKRIPT ÍRÁSA
+
+		     ** A Vim lehetõségeinek beállítása **
+
+  A Vim rengeteg lehetõséggel rendelkezik a Vi-hoz képest, de a legtöbb
+  alapból elérhetetlen. Ahhoz, hogy alapból több lehetõségünk legyen készítenünk
+  kell egy "vimrc" fájlt.
+
+  1. Kezdjük el szerkeszteni a "vimrc" fájlt, ennek módja:
+	:edit ~/.vimrc			Unixon, Linuxon
+	:edit $VIM/_vimrc		MS-Windowson
+
+  2. Most szúrjuk be a példa "vimrc" fájl szövegét:
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Írjuk ki a fájlt:
+
+	:write
+
+  Legközelebb a Vim szintaxiskiemeléssel indul.
+  Hozzáadhatja kedvenc beállításait ehhez a "vimrc" fájlhoz.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Itt végzõdik a Vim oktató, melynek a szándéka egy rövid áttekintés a
+  Vimrõl, amely elég ahhoz, hogy elég könnyedén kezeljük a szerkesztõt.
+  Távol van a teljességtõl, mivel a Vimnek számtalan további utasítása
+  van. Ezután a felhasználói kézikönyvet érdemes elolvasni az angolul
+  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
+
+  For further reading and studying, this book is recommended:
+	Vim - Vi Improved - by Steve Oualline
+	Publisher: New Riders
+  The first book completely dedicated to Vim.  Especially useful for beginners.
+  There are many examples and pictures.
+  See http://iccf-holland.org/click5.html
+
+  This book is older and more about Vi than Vim, but also recommended:
+	Learning the Vi Editor - by Linda Lamb
+	Publisher: O'Reilly & Associates Inc.
+  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.
+
+  Modified for Vim by Bram Moolenaar.
new file mode 100644
--- /dev/null
+++ b/runtime/tutor/tutor.hu.utf-8
@@ -0,0 +1,823 @@
+===============================================================================
+=    Ü d v ö z ö l j ü k   a   V I M   T u t o r b a n  -    1.5-ös  verzió ===
+===============================================================================
+
+     A Vim egy nagyon hatékony szerkesztő, amelnyek rengeteg utasítása
+     van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
+     mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
+     elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
+     általános célú szövegszerkesztőt.
+
+     A feladatok megoldásához 25-30 perc szükséges attól függően,
+     mennyit töltünk a kisérletezéssel.
+
+     A leckében szereplő utasítások módosítani fogják a szövegek.
+     Készítsen másolatot erről a fájlról, ha gyakorolni akar.
+     (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
+
+     Fontos megérteni, hogy ez az oktató cselekedve taníttat.
+     Ez azt jelenti, hogy Önnek ajánlott végrehajtania az utasításokat,
+     hogy megfelelően megtanulja azokat. Ha csak olvassa, elfelejti!
+
+     Most bizonyosodjon, meg, hogy a Caps-Lock gombja NINCS lenyomva, és
+     Nyomja meg megfelelő számúszor a   j   gombot, hogy az 1.1-es
+     lecke teljesen a képernyőn legyen!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			1.1.  lecke:  A KURZOR MOZGATÃSA
+
+
+   ** A kurzor mozgatásához nyomja meg a h,j,k,l gombokat az alábbi szerint. **
+	     ^
+	     k		    Tipp:  A h billentyű van balra, és balra mozgat
+       < h	 l >		   A l billentyű van jobbra, és jobbra mozgat
+	     j			   A j billentyű olyan, mint egy lefele nyíl
+	     v
+  1. Mozgassa a kurzort körbe az ablakban, amíg hozzá nem szokik!
+
+  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!
+
+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!
+
+Megj: A kurzor gomboknak is működniük kell, de a hjkl használatával
+      sokkal gyorsabban tud, mozogni, ha hozzászokik.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     1.2.  lecke: BE ÉS KILÉPÉS A VIMBÅL
+
+
+  !! MEGJ: Mielőtt végrehajtja az alábbi lépéseket, olvassa végig a leckét !!
+
+  1. Nyomja meg az  <ESC> gombot (hogy biztosan normál módban legyen).
+
+  2. Ãrja:			:q! <ENTER>.
+
+---> Ezzel kilép a szerkesztőből a változások MENTÉSE NÉLKÜL.
+     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:
+     Ez valószínűleg:	vimtutor <ENTER>
+     Normális esetben ezt írná:	vim tutor.hu <ENTER>
+
+---> 'vim' jelenti a vimbe belépést, 'tutor.hu' a fájl, amit szerkeszteni kíván.
+
+  4. Ha megjegyezte a lépéseket és biztos magában, hajtsa végre a lépéseket
+     1-től 3-ig, hogy kilépjen és visszatérjen a szerkesztőbe. Azután
+     menjen az 1.3.  leckére.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     1.3.  lecke: SZÖVEG SZERKESZTÉSE - TÖRLÉS
+
+
+** Normál módban nyomjon  x-et, hogy a kurzor alatti karaktert törölje. **
+
+  1. Mozgassa a kurzort a ---> kezdetű sorra!
+
+  2. A hibák kijavításához mozgassa a kurzort amíg a törlendő karakter
+     fölé nem ér.
+
+  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
+
+  4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
+
+---> ÅÅszi éjjjell izziik aa galaggonya rruuhája.
+
+  5. Ha a sor helyes, ugorjon a 1.4. leckére.
+
+MEGJ: A tanulás során ne memorizálni próbáljon, hanem használat során tanuljon.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     1.4.  lecke: SZÖVEG SZERKESZTÉSE - BESZÚRÃS
+
+
+	 ** Normál módban  i  megnyomásával lehet beilleszteni. **
+
+  1. Az alábbi első ---> kezdetű sorra menjen.
+
+  2. Ahhoz, hogy az elsőt azonossá tegye a másodikkal, mozgassa a kurzort
+     az elsÅ‘ karakterre, amely UTÃN szöveget kell beszúrni.
+
+  3. Nyomjon  i-t és írja be a megfelelő szöveget.
+
+  4. Amikor mindent beírt, nyomjon <ESC>-et, hogy Normál módba visszatérjen.
+     Ismételje a 2 és 4 közötti lépéseket, hogy kijavítsa a mondatot.
+
+---> Az átható soól hizik pár ész.
+---> Az itt látható sorból hiányzik pár rész.
+
+  5. Ha már begyakorolta a beszúrást, menjen az alábbi összefoglalóra.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       1. LECKE ÖSSZEFOGLALÓJA
+
+
+  1. A kurzort vagy a nyilakkal vagy a hjkl gombokkal mozgathatja.
+	 h (balra)	j (le)       k (fel)	    l (jobbra)
+
+  2. A Vimbe (a $ prompttól) így léphet be:  vim FILENAME <ENTER>
+
+  3. A Vimből így léphet ki:  <ESC>   :q!  <ENTER>  a változtatások eldobásával.
+	     vagy így:	      <ESC>   :wq  <ENTER>  a változások mentésével.
+
+  4. A kurzor alatti karakter törlése normál módban:  x
+
+  5. Szöveg beszúrása a kurzor után normál módban:
+	 i     gépelje be a szöveget	<ESC>
+
+MEGJ: Az <ESC> megnyomása normál módba viszi, vagy megszakít egy nem befejezett
+      részben befejezett parancsot.
+
+Most folytassuk a 2. leckével!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			2.1.  lecke: TÖRLÅ UTASÃTÃSOK
+
+
+	    ** dw  töröl a szó végéig. **
+
+  1. Nyomjon <ESC>-et, hogy megbizonyosodjon, hogy normál módban van!
+
+  2. Mozgassa a kurzort a ---> kezdetű sorra!
+
+  3. Mozgassa a kurzort arra annak a szónak az elejére, amit törölni szeretne.
+     Törölje az állatokat a mondatból.
+
+  4. A szó törléséhez írja:   dw
+
+  MEGJ: Ha rosszul kezdte az utasítást csak nyomjon <ESC> gombot
+        a megszakításához.
+
+---> Pár szó kutya nem uhu illik pingvin a mondatba tehén.
+
+  5. Ismételje a 3 és 4 közötti utasításokat amíg kell és ugorjon a 2.2 leckére!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      2.2.  lecke: MÉG TÖBB TÖRLÅ UTASÃTÃS
+
+
+	   ** d$ beírásával a sor végéig törölhet. **
+
+  1. Nyomjon <ESC>-et, hogy megbizonyosodjon, hogy normál módban van!
+
+  2. Mozgassa a kurzort a ---> kezdetű sorra!
+
+  3. Mozgassa a kurzort a helyes sor végére (az elsÅ‘ . UTÃN)!
+
+  4. d$  begépeléséveltörölje a sor végét!
+
+---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
+
+
+  5. Menjen a 2.3. leckére, hogy megértse mi történt!
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     2.3.  lecke: UTASÃTÃSOKRÓL ÉS OBJEKTUMOKRÓL
+
+
+  A  d  (delete=törlés) utasítás formája a következő:
+
+	 [szám]   d	objektum	   VAGY	     d	 [szám] objektum
+  Ahol:
+    szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
+    d - a törlés (delete) utasítás.
+    objektum - amin a parancsnak teljesülnie kell (alább listázva).
+
+  Objektumok rövid listája:
+    w - a kurzortól a szó végéig, beleértve a szóközt.
+    e - a kurzortól a szó végéig, NEM beleértve a szóközt.
+    $ - a kurzortól a sor végéig.
+
+MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
+       a kurzor oda kerül, amit az objektumlista megad.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
+
+
+	       ** dd beírásával törölheti az egész sort. **
+
+  A teljes sor törlésének gyakorisága miatt a Vi tervezői elhatározták,
+  hogy könnyebb lenne csupán a d-t kétszer megnyomni, hogy egy sort töröljünk.
+
+  1. Mozgassa a kurzort az alábbi kifejezések második sorára!
+  2. dd begépelésével törölje a sort!
+  3. Menjen a 4. (eredetileg 5.) sorra!
+  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
+
+      1)  Alvó szegek a jéghideg homokban,
+      2)  - kezdi a költő -
+      3)  Plakátmagányban ázó éjjelek.
+      4)  Pingvinek ne féljetek,
+      5)  Távolról egy vaku villant,
+      6)  Égve hagytad a folyosón a villanyt.
+      7)  Ma ontják véremet.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 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. **
+
+  1. Menjünk az alábbi ---> kezdetű sor első hibájára!
+  2. x  lenyomásával törölje az első felesleges karaktert!
+  3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
+  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
+  5. Most nagy  U  -val állítsa vissza a sor eredeti állapotát!
+  6. Nyomja meg az u gombot párszor, hogy az U és sz előző utasításokat
+     visszaállítsa!
+  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.
+
+  8. Ezek nagyon hasznos parancsok. Most ugarjon a 2. lecke összefoglalójára.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       2. LECKE ÖSSZEFOGLALÓJA
+
+
+  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$
+
+  3. Egész sor törlése:    dd
+
+  4. Egy utasítás alakja normál módban:
+
+       [szám]   utasítás   objektum   VAGY   utasítás	[szám] objektum
+     ahol:
+       szám - hányszor ismételjük a parancsot
+       utasítás - mit tegyünk, pl. d  a törléskor
+       objektum - mire hasson az utasítás, például w (szó=word),
+		$ (a sor végéig), stb.
+
+  5. Az előző tett visszavonása (undo):	     u	 (kis u)
+     A sor összes változásának visszavonása: U	 (nagy U)
+     Visszavonások visszavonása:	     CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 3.1.  lecke: A PUT PARANCS
+
+
+  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
+
+  1. Mozgassuk a kurzort az alábbi sorok első sorára.
+
+  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.
+
+  4. Normál módban írjunk  p   betűt a törölt sor beillesztéséhez.
+
+  5. Folytassuk a 2-4. utasításokkal hogy a helyes sorrendet kapjuk.
+
+     d) Can you learn too?
+     b) Violets are blue,
+     c) Intelligence is learned,
+     a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       3.2.  lecke: A REPLACE PARANCS
+
+
+** r  és  a karakterek leütésével a kurzor alatti karaktert megváltoztatjuk. **
+
+  1. Mozgassuk a kurzort az első ---> kezdetű sorra!
+
+  2. Mozgassuk a kurzort az első hiba fölé!
+
+  3. r	majd a kívánt karakter leütésével változtassuk meg a hibásat!
+
+  4. A 2. és 3. lépésekkel javítsuk az összes hibát!
+
+--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+--->  When this line was typed in, someone pressed some wrong keys!
+
+  5. Menjünk a 3.2. leckére!
+
+MEGJ: Emlékezzen, hogy nem memorizálással, hanem gyakorlással tanuljon.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			3.3.  lecke: A CHANGE PARANCS
+
+
+	   ** A szó egy részének megváltoztatásához írjuk:  cw . **
+
+  1. Mozgassuk a kurzort az első ---> kezdetű sorra!
+
+  2. Vigye a kurzort a Ezen szó z betűje fölé!
+
+  3. cw és a helyes szórész (itt 'bben') beírásával javítsa a szót!
+
+  4. <ESC> lenyomása után a következő hibára ugorjon (az első cserélendő
+     karakterre)!
+
+  5. A 3. és 4. lépések ismétlésével az első mondatot tegye a másodikkal
+     azonossá!
+
+---> Ezen a sorrrrr pár szóra meg kell változzanak a change utaskíréső.
+---> Ebben a sorban pár szót meg kell változtatni a change utasítással.
+
+Vegyük észre, hogy a  cw  nem csak a szót írja át, hanem beszúró
+(insert) módba vált.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       3.4.  lecke: TÖBBFÉLE VÃLTOZTATÃS c-VEL
+
+
+ ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
+
+  1. A change utasítás a törléssel azonosan viselkedik.  A forma:
+
+       [szám]   c   objektum	   OR	    c	[szám]   objektum
+
+  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
+
+  3. Mozgassuk a kurzort az első ---> kezdetű sorra!
+
+  4. Menjünk az első hibára!
+
+  5. c$ begépelésével a sorvégeket tegyük azonossá és nyomjunk <ESC>-et!
+
+---> Ennek a sornak a vége kiigazításra szorul, hogy megegyezzen a másodikkal.
+---> Ennek a sornak a vége a c$ paranccsal változtatható meg.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       3. LECKE ÖSSZEFOGLALÓJA
+
+
+  1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
+     a kurzor UTÃN helyezi (ha sor került törlésre, a kurzor allatti sorba).
+
+  2. A kurzor alatti karakter átírásához az r-et és azt a karaktert
+     nyomjuk, amellyel az eredetit felül szeretnénk írni.
+
+  3. A változtatás (c) utasítás a karaktertől az objektum végéig
+     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
+     a c$ a sor végéig.
+
+  4. A változtatás formátuma:
+
+	 [szám]   c	objektum	VAGY	c   [szám]   objektum
+
+Ugorjunk a következő leckére!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     4.1.  lecke: HELY ÉS FÃJLÃLLAPOT
+
+
+ ** CTRL-g megnyomásával megnézhetjük a helyünket a fájlban és a fájl állapotát.
+     SHIFT-G leütésével a fájl adott sorára ugorhatunk. **
+
+  Megj: Olvassuk el az egész leckét a lépések végrehajtása előtt!!
+
+  1. Tartsuk nyomva a Ctrl gombot és nyomjunk  g-t.  Az állapotsor
+     megjelenik a lap alján a fájlnévvel és az aktuális sor sorszámával.
+     Jegyezzük meg a sorszámot a 3. lépéshez!
+
+  2. Nyomjunk Shift-G-t a lap aljára ugráshoz!
+
+  3. Üssük be az eredeti sor számát, majd üssünk shift-G-t! Ezzel
+     visszajutunk az eredeti sorra ahol Ctrl-g-t nyomtunk.
+     (A beírt szám NEM fog megjelenni a képernyőn.)
+
+  4. Ha megjegyezte a feladatot, hajtsa végre az 1-3. lépéseket!
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			4.2.  lecke: A SEARCH PARANCS
+
+
+  ** / majd a kívánt kifejezés beírásával kereshetjük meg a kifejezést. **
+
+  1. Normál módban üssünk  /  karaktert!  Ez és a kurzor megjelenik
+     a képernyő alján, ahogy a : utasítás is.
+
+  2. Ãrjuk be: 'hiibaa' <ENTER>!  Ez az a szó amit keresünk.
+
+  3. A kifejezés újabb kereséséhez üssük le egyszerűen:  n .
+     A kifejezés ellenkező irányban történő kereséséhez ezt üssük be: Shift-N .
+
+  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
+
+---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
+
+Megj: Ha a keresés eléri a fájl végét, akkor az elején kezdi.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   4.3.  lecke: ZÃRÓJELEK PÃRJÃNAK KERESÉSE
+
+
+	   ** % leütésével megtaláljuk a ),], vagy }  párját. **
+
+  1. Helyezze a kurzort valamelyik (, [, vagy { zárójelre a ---> kezdetű
+     sorban!
+
+  2. Üssön  %  karaktert!
+
+  3. A kurzor a zárójel párjára fog ugrani.
+
+  4. % leütésével visszaugrik az eredeti zárójelre.
+
+---> Ez ( egy tesztsor (-ekkel, [-ekkel ] és {-ekkel } a sorban. ))
+
+Megj: Ez nagyon hasznos, ha olyan programot debugolunk, amelyben a
+      zárójelek nem párosak!
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      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. **
+
+  1. Menjünk a ---> kezdetű sorra!
+
+  2. Ãrjuk be:  :s/eggy/egy <ENTER> .  Ekkor csak az elsÅ‘ változik meg a
+     sorban.
+
+  3. Most ezt írjuk:	 :s/eggy/egg/g	   amely globálisan helyettesít
+     a sorban.
+     Ez a sorban minden előfordulást helyettesít.
+
+---> eggy hegy 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.
+     :%s/régi/új/g      a fájlbeli összes előfordulás helyettesítése.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       4. LECKE ÖSSZEFOGLALÓJA
+
+
+  1. Ctrl-g  kiírja az kurzor helyét a fájlban és a fájl állapotát.
+     Shift-G a fájl végére megy, gg az elejére. Egy szám után
+     Shift-G  az adott számú sorra ugrik.
+
+  2. /	után egy kifejezés ELÅREFELE keresi a kifejezést.
+  2. ?	után egy kifejezés VISSZAFELE keresi a kifejezést.
+     Egy keresés után az  n  a következő előfordulást keresi azonos irányban
+     Shift-N  az ellenkező irányban keres.
+
+  3. %	begépelésével, ha  (,),[,],{, vagy } karakteren vagyunk a zárójel
+     párjára ugrik.
+
+  4. az első régi helyettesítése újjal a sorban    :s/régi/új
+     az összes régi helyettesítése újjal a sorban  :s/régi/új/g
+     két sor közötti kifejezésekre		   :#,#s/régi/új/g
+     # helyén az aktuális sor (.) és az utolsó ($) is állhat :.,$/régi/új/g
+     A fájlbeli összes előfordulás helyettesítése  :%s/régi/új/g
+     Mindenkori megerősítésre vár 'c' hatására	   :%s/régi/új/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		5.1.  lecke: KÃœLSÅ PARANCS VÉGREHAJTÃSA
+
+
+   ** :!  után külső parancsot írva végrehajtódik a parancs. **
+
+  1. Ãrjuk be az ismerÅ‘s : parancsot, hogy a kurzort a  képernyÅ‘ aljára
+     helyezzük. Ez lehetővé teszi egy parancs beírását.
+
+  2. ! (felkiáltójel) beírásával tegyük lehetővé külső héj (shell)-parancs
+     végrehajtását.
+
+  3. Ãrjunk például ls parancsot a ! után majd üssünk <ENTER>-t.  Ez ki
+     fogja listázni a könyvtárunkat ugyanúgy, mintha a shell promptnál
+     lennénk.  Vagy írja ezt  :!dir  ha az ls nem működik.
+
+Megj:  Ilymódon bármely külső utasítás végrehajtható.
+
+Megj:  Minden  :  parancs után <ENTER>-t kell ütni.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      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. **
+
+  1. :!dir  vagy  :!ls  beírásával listázzuk a könyvtárunkat!
+     Ön már tudja, hogy <ENTER>-t kell ütnie utána.
+
+  2. Válasszon egy fájlnevet, amely még nem létezik pl. TESZT!
+
+  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.
+     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.
+
+  5. Távolítsa el a fájlt  (MS-DOS):	:!del TESZT
+			vagy (Unix):	:!rm TESZT
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    5.3.  lecke: EGY KIVÃLASZTOTT RÉSZ KIÃRÃSA
+
+
+	** A fájl egy részének kiírásához írja :#,# w FÃJLNÉV **
+
+  1. :!dir  vagy :!ls  beírásával listázza a könyvtárat, és válasszon egy
+     megfelelő fájlnevet, pl. TESZT.
+
+  2. Mozgassa a kurzort ennek az oldalnak a tetejére, és nyomjon
+     Ctrl-g-t, hogy megtudja a sorszámot.  JEGYEZZE MEG A SZÃMOT!
+
+  3. Most menjen a lap aljára, és üsse be ismét: Ctrl-g.  EZT A SZÃMOT
+     IS JEGYEZZE MEG!
+
+  4. Ha csak ezt a részét szeretné menteni a fájlnak, írja   :#,# w TESZT
+     ahol #,# a két sorszám, amit megjegyzett, TESZT az Ön fájlneve.
+
+  5. Ismét nézze meg, hogy a fájl ott van (:!dir) de NE törölje.
+
+  6. Vimben létezik egy másik lehetőség: nyomja meg a Shift-V gombpárt
+     az első menteni kívánt soron, majd menjen le az utolsóra, ezután
+     írja :w TESZT2   Ekkor a TESZT2 fájlba kerül a kijelölt rész.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   5.4.  lecke: RETRIEVING AND MERGING FILES
+
+
+       ** Egy fájl tartalmának beillesztéséhez írja   :r FÃJLNÉV **
+
+  1. :!dir beírásával nézze meg, hogy az Ön TESZT fájlja létezik még.
+
+  2. Helyezze a kurzort ennek az oldalnak a tetejére.
+
+MEGJ:  A 3. lépés után az 5.3. leckét fogja látni. Azután LEFELÉ indulva
+       keresse meg ismét ezt a leckét.
+
+  3. Most szúrja be a TESZT nevű fájlt a   :r TESZT   paranccsal, ahol
+     TESZT az Ön fájljénak a neve.
+
+MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
+
+  4. Hogy ellenőrizzük, hogy a fájlt tényleg beillsztettük, menjen
+     vissza, és nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
+     mellett a fájlból bemásolt is ott van.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       5. LECKE ÖSSZEFOGLALÓJA
+
+
+  1.  :!parancs végrehajt egy külső utasítást.
+
+      Pár hasznos példa:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  könyvtárlista kiírása.
+	  :!del FÃJLNÉV    :!rm FÃJLNÉV    -  FÃJLNÉV nevű fájl törlése.
+
+  2.  :w FÃJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÃJNÉV néven.
+
+  3.  :#,#w FÃJLNÉV  kiírja a két sorszám (#) közötti sorokat FÃJLNÉV-be
+      Másik lehetőség, hogy a kezdősornál Ctrl-v-t nyom lemegy az utolsó
+      sorra, majd ezt üti be  :w FÃJLNÉV
+
+  4.  :r FÃJLNÉV  beolvassa a FÃJLNÉV fájlt és behelyezi a jelenlegi fájlba
+      a kurzorpozició utáni sorba.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 6.1.  lecke: A OPEN PARANCS
+
+
+** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
+
+  1. Mozgassuk a kurzort a ---> kezdetű sorra.
+
+  2. o (kicsi)  beírásával nyisson egy sort a kurzor ALATT! Ekkor
+     automatikusan beszúró (insert) módba kerül.
+
+  3. Másolja le a  ---> jelű sort és <ESC> megnyomásával lépjen ki
+     a beszúró módból.
+
+---> Az o lenyomása után a kurzor a következő sor elején áll beszúró módban.
+
+  4. A kurzor FELETTI for megnyitásához egyzserűen a nagy O betűt írjon
+kicsi helyett. Próbálja ki a következő soron!
+Nyisson egy új sort efelett Shift-O megnyomásával, mialatt a kurzor
+ezen a soron áll.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			6.2.  lecke: AZ APPEND PARANCS
+
+
+	 ** a  lenyomásával a kuror UTÃN szúrhatunk szöveget. **
+
+  1. Mozgassuk a kurzort a következő ---> kezdetű sor végére úgy,
+     hogy normál módban  $  ír be.
+
+  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
+     amelyen a kurzor áll.
+     (A nagy  A  az egész sor végére írja a szöveget.)
+
+Megj: A Vimben a sor legvégére is lehet állni, azonba ez elődjében
+      a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
+      a sor végéhez szöveget írni.
+
+  3. Egészítse ki az első sort. Vegye észre, hogy az a utasítás (append)
+     teljesen egyezik az i-vel (insert) csupán a beszúrt szöveg helye
+     különbözik.
+
+---> Ez a sor lehetővé teszi Önnek, hogy gyakorolja
+---> Ez a sor lehetővé teszi Önnek, hogy gyakorolja a sor végére beillesztést.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    6.3.  lecke: AZ ÃTÃRÃS MÃSIK VÃLTOZATA
+
+
+      ** Nagy R  beírásával írhat felül több mint egy karaktert. **
+
+  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').
+
+  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.
+
+---> 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.
+
+  4. Note that when you press <ESC> to exit, any unaltered text remains.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    6.4.  lecke: BEÃLLÃTÃSOK
+
+** Ãllítsuk be, hogy a keresés és a helyettesítés ne függjön kis/NAGYbetűktÅ‘l **
+
+  1. Keressük meg az 'ignore'-t az beírva:
+     /ignore
+     Ezt ismételjük többször az n billentyűvel
+
+  2. Ãllítsuk be az 'ic' (Ignore case) lehetÅ‘séget így:
+     :set ic
+
+  3. Most keressünk ismét az 'ignore'-ra n-nel
+     Ismételjük meg többször a keresést: n
+
+  4. Ãllítsuk be a 'hlsearch' és 'incsearch' lehetÅ‘ségeket:
+     :set hls is
+
+  5. Most ismét írjuk be a keresőparancsot, és lássuk mi történik:
+     /ignore
+
+  6. A kiemelést szüntessük meg alábbi utasítások egyikével:
+     :set nohls     vagy	 :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       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.
+
+  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.
+
+  3. Typing a capital  R  enters Replace mode until  <ESC>  is pressed to exit.
+
+  4. Typing ":set xxx" sets the option "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       7. lecke: ON-LINE HELP PARANCSOK
+
+
+		    ** Az online súgórendszer használata **
+
+  A Vim részletes súgóval rendelkezik.  Induláshoz a következők egyikét
+  tegye:
+	- nyomja meg a <HELP> gombot (ha van ilyen)
+	- nyomja meg az <F1> gombot (ha van ilyen)
+	- írja be:   :help <ENTER>
+
+  :q <ENTER>   beírásával zárhatja be a súgóablakot.
+
+  Majdnem minden témakörről találhat súgót, argumentum megadásával
+  ":help" utasítás .  Próbálja az alábbiakat ki (<ENTER>-t ne felejtsük):
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       8. lecke: INDÃTÓSZKRIPT ÃRÃSA
+
+		     ** A Vim lehetőségeinek beállítása **
+
+  A Vim rengeteg lehetőséggel rendelkezik a Vi-hoz képest, de a legtöbb
+  alapból elérhetetlen. Ahhoz, hogy alapból több lehetőségünk legyen készítenünk
+  kell egy "vimrc" fájlt.
+
+  1. Kezdjük el szerkeszteni a "vimrc" fájlt, ennek módja:
+	:edit ~/.vimrc			Unixon, Linuxon
+	:edit $VIM/_vimrc		MS-Windowson
+
+  2. Most szúrjuk be a példa "vimrc" fájl szövegét:
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Ãrjuk ki a fájlt:
+
+	:write
+
+  Legközelebb a Vim szintaxiskiemeléssel indul.
+  Hozzáadhatja kedvenc beállításait ehhez a "vimrc" fájlhoz.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Itt végződik a Vim oktató, melynek a szándéka egy rövid áttekintés a
+  Vimről, amely elég ahhoz, hogy elég könnyedén kezeljük a szerkesztőt.
+  Távol van a teljességtől, mivel a Vimnek számtalan további utasítása
+  van. Ezután a felhasználói kézikönyvet érdemes elolvasni az angolul
+  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
+
+  For further reading and studying, this book is recommended:
+	Vim - Vi Improved - by Steve Oualline
+	Publisher: New Riders
+  The first book completely dedicated to Vim.  Especially useful for beginners.
+  There are many examples and pictures.
+  See http://iccf-holland.org/click5.html
+
+  This book is older and more about Vi than Vim, but also recommended:
+	Learning the Vi Editor - by Linda Lamb
+	Publisher: O'Reilly & Associates Inc.
+  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.
+
+  Modified for Vim by Bram Moolenaar.
--- a/runtime/tutor/tutor.it
+++ b/runtime/tutor/tutor.it
@@ -1,5 +1,5 @@
 ===============================================================================
-=    Benvenuto  alla   G u i d a    all'Editor   V I M   -    Versione 1.5    =
+=    Benvenuto  alla   G u i d a    all'Editor   V I M   -    Versione 1.7    =
 ===============================================================================
 
      Vim è un Editor molto potente ed ha parecchi comandi, troppi per
@@ -10,6 +10,7 @@
      Il tempo necessario per completare la guida è circa 25-30 minuti,
      a seconda di quanto tempo dedichi alla sperimentazione.
 
+     ATTENZIONE!
      I comandi nelle lezioni modificano questo testo. Fai una copia di questo
      file per esercitarti (se hai usato "vimtutor", stai già usando una copia).
 
@@ -33,7 +34,7 @@
   1. Muovi il cursore sullo schermo finché non ti senti a tuo agio.
 
   2. Tieni schiacciato il tasto "giù" (j) finché non si ripete il movimento.
----> Adesso sai come arrivare fino alla lezione successiva.
+     Adesso sai come arrivare fino alla lezione seguente.
 
   3. Usando il tasto "giù" spostati alla Lezione 1.2.
 
@@ -41,38 +42,38 @@ NOTA: Quando non sei sicuro del tasto ch
       in Modalità Normale [Normal Mode]. Poi ri-immetti il comando che volevi.
 
 NOTA: I tasti con le frecce fanno lo stesso servizio. Ma usando hjkl riesci
-      a muoverti molto più rapidamente, una volta presa l'abitudine.
+      a muoverti molto più rapidamente, dopo che ci si abitua.  Davvero!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lezione 1.2: ENTRARE E USCIRE DA VIM
+			Lezione 1.2: USCIRE DA VIM
 
 
   !! NOTA: Prima di eseguire quanto richiesto, leggi la Lezione per intero!!
 
   1. Premi il tasto <ESC> (per assicurarti di essere in Modalità Normale).
 
-  2. Batti:			:q! <INVIO>.
-
----> Così esci dall'Editor SENZA SALVARE alcuna modifica fatta.
-     Se vuoi uscire SALVANDO le modifiche batti:
-				:wq <INVIO>
+  2. Batti:     :q! <INVIO>.
+     Così esci dall'Editor SCARTANDO qualsiasi modifica fatta.
 
   3. Quando vedi il PROMPT della Shell, batti il comando con cui sei arrivato
-     qui.  Potrebbe essere:	vimtutor <INVIO>
-     Normalmente  useresti:	vim tutor <INVIO>
-
----> 'vim' indica l'Editor vim, 'tutor' è il nome del file che tu vuoi aprire.
+     qui.  Sarebbe:	vimtutor <INVIO>
 
   4. Se hai memorizzato questi comandi e ti senti pronto, esegui i passi
-     da 1 a 3 per uscire e rientrare nell'Editor.  Poi muovi il cursore in giù
-     fino alla Lezione 1.3.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lezione 1.3: EDITING DI TESTI - CANCELLAZIONE
+     da 1 a 3 per uscire e rientrare nell'Editor.
+
+NOTA:  :q! <INVIO> SCARTA qualsiasi modifica fatta.  In una delle prossime
+       lezioni imparerai come salvare un file che hai modificato.
+
+  5. Muovi in giù il cursore per passare alla lezione 1.3.
 
 
-** In Modalità Normale premi  x  per cancellare il carattere sotto al cursore **
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Lezione 1.3: MODIFICA DI TESTI - CANCELLAZIONE
+
 
-  1. Muovi il cursore alla linea più sotto, indicata da --->
+	** Premere  x  per cancellare il carattere sotto al cursore **
+
+  1. Muovi il cursore alla linea più sotto, indicata da --->.
 
   2. Per correggere errori, muovi il cursore fino a posizionarlo sopra il
      carattere da cancellare.
@@ -86,16 +87,16 @@ NOTA: I tasti con le frecce fanno lo ste
   5. Ora che la linea è corretta, vai alla Lezione 1.4
 
 NOTA: Mentre segui questa guida, non cercare di imparare a memoria,
-				 ma impara facendo pratica.
+      ma impara facendo pratica.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lezione 1.4: EDITING DI TESTI - INSERIMENTO
+		Lezione 1.4: MODIFICA DI TESTI - INSERIMENTO
 
 
-       ** Quando sei in Modalità Normale premi  i  per inserire testo. **
+                   ** Premere  i  per inserire testo. **
 
-  1. Muovi il cursore alla prima linea qui sotto, indicata da --->
+  1. Muovi il cursore alla prima linea qui sotto, indicata da --->.
 
   2. Per rendere la prima linea uguale alla seconda, muovi il cursore sopra
      il primo carattere DOPO la posizione in cui il testo va inserito.
@@ -108,65 +109,111 @@ NOTA: Mentre segui questa guida, non cer
 ---> C'era del tsto mncnt questa .
 ---> C'era del testo mancante da questa linea.
 
-  5. Quando sei a tuo agio nell'inserimento di testo vai al sommario sotto.
+  5. Quando sei a tuo agio nell'inserimento di testo vai alla lezione 1.5.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Lezione 1.5: MODIFICA DI TESTI - AGGIUNTA
+
+
+	   ** Premere  A  per aggiungere testo a fine linea. **
+
+  1. Muovi il cursore alla prima linea qui sotto, indicata da --->.
+     Non importa dove è posizionato il cursore sulla linea stessa.
+
+  2. Batti  A  e inserisci le necessarie aggiunte.
+
+  3. Alla fine della aggiunta premi <ESC> per tornare in modalità Normale.
+
+  4. Muovi il cursore alla seconda linea indicata ---> e ripeti
+     i passi 2 e 3 per correggere questa frase.
+
+---> C'è del testo che manca da qu
+     C'è del testo che manca da questa linea.
+---> C'è anche del testo che ma
+     C'è anche del testo che manca qui.
+
+  5. Quando sei a tuo agio nell'aggiunta di testo vai alla lezione 1.6.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lezione 1.6: MODIFICARE UN FILE
+
+
+	      ** Usare  :wq  per salvare un file e uscire. **
+
+  !! NOTA: Prima di eseguire quanto richiesto, leggi la Lezione per intero!!
+
+  1. Esci da Vim come hai fatto nella lezione 1.2:  :q!
+
+  2. Quando vedi il PROMPT della Shell, batti il comando:  vim tutor <INVIO>
+     'vim' è il comando per richiamare Vim, 'tutor' è il nome del file che
+     desideri modificare.  Usa un file che possa essere modificato.
+
+  3. Inserisci e cancella testo come hai imparato nelle lezioni precedenti.
+
+  4. Salva il file ed esci da Vim con:  :wq  <INVIO>
+
+  5. Rientra in vimtutor e scendi al sommario che segue.
+
+  6. Dopo aver letto i passi qui sopra ed averli compresi: eseguili.
+
+  
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			       Lezione 1 SOMMARIO
 
 
   1. Il cursore si muove usando i tasti con le frecce o i tasti hjkl.
 	 h (sinistra)	j (giù)       k (su)	    l (destra)
 
-  2. Per eseguire Vim (dal prompt %) batti:  vim NOMEFILE <INVIO>
+  2. Per eseguire Vim dal PROMPT della Shell batti:  vim NOMEFILE <INVIO>
 
   3. Per uscire da Vim batti: <ESC> :q! <INVIO> per uscire senza salvare.
 		oppure batti: <ESC> :wq <INVIO> per uscire salvando modifiche.
 
-  4. Per cancellare il carattere sotto al cursore in Modalità Normale batti: x
+  4. Per cancellare il carattere sotto al cursore batti: x
 
-  5. Per inserire testo subito prima del cursore in Modalità Normale batti:
-	 i     batti del testo	<ESC>
+  5. Per inserire testo subito prima del cursore batti:
+	 i     batti testo inserito	<ESC>	inserisci prima del cursore
+	 A     batti testo aggiunto	<ESC>	aggiungi a fine linea
 
 NOTA: premendo <ESC> ritornerai in Modalità Normale o annullerai
       un comando errato che puoi aver inserito in parte.
 
 Ora continua con la Lezione 2.
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Lezione 2.1: COMANDI DI CANCELLAZIONE
+		   Lezione 2.1: COMANDI DI CANCELLAZIONE
 
 
-	  ** Batti  dw  per cancellare fino a fine parola. **
+		** Batti  dw  per cancellare una parola. **
 
   1. Premi  <ESC>  per accertarti di essere in Modalità Normale.
 
-  2. Muovi il cursore fino alla linea qui sotto, indicata da --->
+  2. Muovi il cursore fino alla linea qui sotto, indicata da --->.
 
   3. Muovi il cursore all'inizio di una parola che vuoi cancellare.
 
   4. Batti   dw   per cancellare la parola.
 
-NOTA: Le lettere  dw  saranno visibili sull'ultima linea dello schermo mentre le
-      batti. Se hai battuto qualcosa di sbagliato, premi  <ESC>  e ricomincia.
+NOTA: La lettera  d  sarà visibile sull'ultima linea dello schermo mentre la
+      batti. Vim attende che tu batta  w . Se vedi una lettera diversa
+      da  d  hai battuto qualcosa di sbagliato; premi  <ESC>  e ricomincia.
 
 ---> Ci sono le alcune parole gioia che non c'entrano carta in questa frase.
 
   5. Ripeti i passi 3 e 4 finché la frase è corretta, poi vai alla Lezione 2.2.
 
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      Lezione 2.2: ALTRI COMANDI DI CANCELLAZIONE
+		Lezione 2.2: ALTRI COMANDI DI CANCELLAZIONE
 
 
 	   ** Batti  d$	per cancellare fino a fine linea. **
 
   1. Premi  <ESC>  per accertarti di essere in Modalità Normale.
 
-  2. Muovi il cursore fino alla linea qui sotto, indicata da --->
+  2. Muovi il cursore fino alla linea qui sotto, indicata da --->.
 
   3. Muovi il cursore alla fine della linea corretta (DOPO il primo . ).
 
@@ -182,66 +229,112 @@ NOTA: Le lettere  dw  saranno visibili s
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lezione 2.3: COMANDI E OGGETTI
+		     Lezione 2.3: OPERATORI E MOVIMENTI
 
 
-  Il formato del comando  d  [delete] cancella è il seguente:
+  Molti comandi di modifica testi consistono in un operatore e un movimento.
+  Il formato del comando di cancellazione con l'operatore  d  è il seguente:
 
-	 [numero]   d	oggetto	    OPPURE     d [numero]   oggetto
+	 d	movimento
+
   Dove:
-    numero - indica quante volte va eseguito il comando (se omesso, vale 1).
-    d - è il comando di cancellazione.
-    oggetto - indica dove il comando va applicato (lista qui sotto).
+    d	      - è l'operatore di cancellazione
+    movimento - indica dove l'operatore va applicato (lista qui sotto).
+
+  Breve lista di movimenti:
+    w - fino a inizio della parola seguente, ESCLUSO il suo primo carattere.
+    e - alla fine della parola corrente, COMPRESO il suo ultimo carattere.
+    $ - dal cursore fino a fine linea, COMPRESO l'ultimo carattere della linea.
+
+  Quindi se batti  de  cancelli dal cursore fino a fine parola.
+
+NOTA:  Se batti solo il movimento mentre sei in Modalità Normale, senza
+       nessun operatore, il cursore si muoverà come specificato.
 
-  Breve lista di oggetti:
-    w - dal cursore alla fine della parola, incluso lo spazio.
-    e - dal cursore alla fine della parola, ESCLUSO lo spazio.
-    $ - dal cursore fino a fine linea.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	 Lezione 2.4: USO DI UN CONTATORE PER UN MOVIMENTO
+
+
+  ** Se batti un numero prima di un movimento, lo ripeti altrettante volte. **
+
+  1. Muovi il cursore fino all'inizio della linea qui sotto, indicata da --->.
+
+  2. Batti  2w  per spostare il cursore due parole più avanti.
 
-NOTA: Per amanti dell'avventura: premendo solo il tasto che indica l'oggetto
-      mentre siete in Modalità Normale, senza dare un comando, sposta
-      il cursore come specificato nella "lista di oggetti" qui sopra.
+  3. Batti  3e  per spostare il cursore alla fine della terza parola seguente.
+
+  4. Batti  0  (zero) per posizionarti all'inizio della linea.
+
+  5. Ripeti i passi 2 e 3 usando numeri differenti.
+
+---> Questa è solo una linea con parole all'interno della quale puoi muoverti.
+
+  6. Vai alla Lezione 2.5.
+
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lezione 2.4: UNA ECCEZIONE A 'COMANDO-OGGETTO'
+	Lezione 2.5: USO DI UN CONTATORE PER CANCELLARE DI PIU'
+
+
+  ** Se batti un numero prima di un movimento, lo ripeti altrettante volte. **
 
-	    ** Batti	 dd   per cancellare un'intera linea. **
+  Nella combinazione dell'operatore cancella e di un movimento, descritto prima,
+  inserite un contatore prima del movimento per cancellare di più:
+	 d   numero   movimento
+
+  1. Muovi il cursore alla prima parola MAIUSCOLA nella riga indicata da --->.
+
+  2. Batti  d2w  per cancellare le due parole MAIUSCOLE
 
-  Per la frequenza con cui capita di cancellare linee intere, chi
-  ha progettato Vi ha deciso che sarebbe stato più semplice
-  battere due d consecutive per cancellare una linea.
+  3. Ripeti i passi 1 e 2 con un contatore diverso per cancellare la parole
+     MAIUSCOLE consecutive con un solo comando
+
+--->  questa ABC DE linea FGHI JK LMN OP di parole è Q RS TUV ora ripulita.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Lezione 2.6: LAVORARE SU LINEE INTERE
+
+	    ** Batti  dd  per cancellare un'intera linea. **
+
+  Per la frequenza con cui capita di cancellare linee intere, chi ha
+  disegnato Vi ha deciso che sarebbe stato più semplice battere
+  due d consecutive per cancellare una linea.
 
   1. Muovi il cursore alla linea 2) nella frase qui sotto.
   2. Batti  dd  per cancellare la linea.
   3. Ora spostati alla linea 4).
-  4. Batti   2dd   (ricorda:  numero-comando-oggetto) per cancellare due linee.
+  4. Batti   2dd   per cancellare due linee.
 
-      1)  Le rose sono rosse,
-      2)  Nel fango ci si diverte,
-      3)  Le viole sono blu,
-      4)  Io ho un'automobile,
-      5)  Gli orologi segnano il tempo,
-      6)  Il miele è dolce,
-      7)  E lo sei anche tu.
+--->  1)  Le rose sono rosse,
+--->  2)  Il fango è divertente,
+--->  3)  Le viole sono blu,
+--->  4)  Io ho un'automobile,
+--->  5)  Gli orologi segnano il tempo,
+--->  6)  Lo zucchero è dolce,
+--->  7)  E così sei anche tu.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lezione 2.5: IL COMANDO UNDO [ANNULLA]
+	      Lezione 2.7: IL COMANDO UNDO [ANNULLA]
 
-    ** Premi  u		per annullare gli ultimi comandi eseguiti.  **
-    ** Premi  U		per annullare le modifiche all'ultima linea.   **
+    **  Premi  u  per annullare gli ultimi comandi eseguiti.  **
+    ** Premi  U  per annullare le modifiche all'ultima linea. **
 
-  1. Muovi il cursore fino alla linea qui sotto, indicata da --->
+  1. Muovi il cursore fino alla linea qui sotto, indicata da --->.
      e posizionati sul primo errore.
   2. Batti  x  per cancellare il primo carattere sbagliato.
   3. Adesso batti  u  per annullare l'ultimo comando eseguito.
   4. Ora invece, correggi tutti gli errori sulla linea usando il comando  x .
   5. Adesso batti una U Maiuscola per riportare la linea al suo stato originale.
   6. Adesso batti  u  più volte per annullare la  U  e i comandi precedenti.
-  7. Adesso batti più volte CTRL-r (tenendo il tasto CTRL schiacciato
-     mentre batti r) per rifare i comandi (annullare l'annullamento).
+  7. Adesso batti più volte CTRL-r (tieni il tasto CTRL schiacciato
+     mentre batti r) per rieseguire i comandi (annullare l'annullamento).
 
 ---> Correeggi gli errori ssu quuesta linea e riimpiazzali coon "undo".
 
@@ -254,63 +347,63 @@ NOTA: Per amanti dell'avventura: premend
 			       Lezione 2 SOMMARIO
 
 
-  1. Per cancellare dal cursore fino alla fine di una parola batti:    dw
-
-  2. Per cancellare dal cursore fino alla fine della linea   batti:    d$
-
+  1. Per cancellare dal cursore fino alla parola seguente batti:      dw
+  2. Per cancellare dal cursore fino alla fine della linea batti:     d$
   3. Per cancellare un'intera linea batti:    dd
-
-  4. Il formato per un comando in Modalità Normale è:
-
-       [numero]  comando  oggetto   OPPURE   comando  [numero]  oggetto
-     Dove:
-       numero - indica quante volte va eseguito il comando (se omesso, vale 1).
-       comando - è il comando da eseguire, ad es.  d  per [delete] cancellare.
-       oggetto - indica dove il comando va applicato, ad es.  w [word] parola,
-		$ (fino alla fine della linea), etc.
-
-  5. Per annullare i comandi precedenti,	  batti:	  u (u minuscola)
-     Per annullare tutte le modifiche a una linea batti:    U (U Maiuscola)
-     Per annullare l'annullamento [gli "undo"]	      batti:	  CTRL-r
+  4. Per eseguire più volte un movimento, mettici davanti un numero:  2w
+  5. Il formato per un comando di modifica è:
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lezione 3.1: IL COMANDO PUT [METTI, PONI]
-
-
-   ** Batti  p  per porre [put] l'ultima cancellazione dopo il cursore. **
-
-  1. Muovi il cursore alla prima linea fra quelle qui in basso.
-
-  2. Batti  dd  per cancellare la linea e depositarla nel buffer di Vim.
+       operatore   [numero]   movimento
+     dove:
+       operatore - indica il da farsi, ad es.  d  per [delete] cancellare
+       [numero]  - contatore facoltativo di ripetizione del movimento
+       movimento - spostamento nel testo su cui operare, ad es.
+       		   w [word] parola, $ (fino a fine linea), etc.
 
-  3. Muovi il cursore fino alla linea SOPRA quella dove andrebbe spostata
-     la linea che hai appena cancellato.
-
-  4. Mentre sei in Modalità Normale, batti  p  per reinserire la linea.
-
-  5. Ripeti i passi da 2 a 4 per mettere tutte le linee nel corretto ordine.
-
-     d)  Riesci a impararla tu?
-     b)  Le viole sono blu,
-     c)  La saggezza si impara,
-     a)  Le rose sono rosse,
+  6. Per andare a inizio linea usate uno zero:	0
+  7. Per annullare i comandi precedenti, batti:	 	    u (u minuscola)
+     Per annullare tutte le modifiche a una linea batti:    U (U maiuscola)
+     Per annullare l'annullamento ["redo"]  	  batti:    CTRL-r
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Lezione 3.2: IL COMANDO REPLACE [RIMPIAZZA]
+		 Lezione 3.1: IL COMANDO PUT [METTI, PONI]
 
 
-  ** Batti  r  e una lettera per rimpiazzare il carattere sotto al cursore. **
+   ** Batti  p  per porre [put] testo (cancellato prima) dopo il cursore. **
+
+  1. Muovi il cursore alla prima linea indicata con ---> qui in basso.
+
+  2. Batti  dd  per cancellare la linea e depositarla in un registro di Vim.
+
+  3. Muovi il cursore fino alla linea c) SOPRA quella dove andrebbe messa
+     la linea appena cancellata.
+
+  4. Batti  p  per mettere la linea sotto il cursore.
+
+  5. Ripeti i passi da 2 a 4 per mettere tutte le linee nel giusto ordine.
 
-  1. Muovi il cursore alla prima linea qui sotto, indicata da --->
+---> d)  Puoi impararla tu?
+---> b)  Le viole sono blu,
+---> c)  La saggezza si impara,
+---> a)  Le rose sono rosse,
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	      Lezione 3.2: IL COMANDO REPLACE [RIMPIAZZARE]
+
+
+  ** Batti  rx  per rimpiazzare il carattere sotto al cursore con x . **
+
+  1. Muovi il cursore alla prima linea qui sotto, indicata da --->.
 
   2. Muovi il cursore fino a posizionarlo sopra il primo errore.
 
-  3. Batti   r	e poi il carattere che dovrebbe rimpiazzare l'errore.
+  3. Batti   r	e poi il carattere che dovrebbe stare qui.
 
-  4. Ripeti i passi 2 e 3 finché la prima linea è corretta.
+  4. Ripeti i passi 2 e 3 finché la prima linea è uguale alla seconda.
 
---->  Immattendo quetta libea, qualcuno ho predato alcuni tosti sballiati!
+--->  Ammattendo quetta lince, qualcuno ho predato alcuni tosti sballiati!
 --->  Immettendo questa linea, qualcuno ha premuto alcuni tasti sbagliati!
 
   5. Ora passa alla Lezione 3.2.
@@ -320,101 +413,100 @@ NOTA: Ricordati che dovresti imparare co
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lezione 3.3: IL COMANDO CHANGE [CAMBIA]
+	     Lezione 3.3: L'OPERATORE CHANGE [CAMBIA]
 
 
-     ** Per cambiare una parola in tutto o in parte, batti  cw . **
+     ** Per cambiare fino alla fine di una parola, batti  ce . **
 
-  1. Muovi il cursore alla prima linea qui sotto, indicata da --->
+  1. Muovi il cursore alla prima linea qui sotto, indicata da --->.
 
-  2. Posiziona il cursore alla u in lubw.
+  2. Posiziona il cursore alla  u  in lubw.
 
-  3. Batti  cw  e la parola corretta (in questo caso, batti  inea    ).
+  3. Batti  ce  e la parola corretta (in questo caso, batti  inea    ).
 
-  4. Premi <ESC> e vai sull'errore seguente (sul primo carattere da modificare).
+  4. Premi <ESC> e vai sul prossimo carattere da modificare.
 
   5. Ripeti i passi 3 e 4 finché la prima frase è uguale alla seconda.
 
----> Questa lubw ha alcune pptfd da asdert usgfk il comando CHANGE.
----> Questa linea ha alcune parole da cambiare usando il comando CHANGE.
+---> Questa lubw ha alcune pptfd da asdert usgfk l'operatore CHANGE.
+---> Questa linea ha alcune parole da cambiare usando l'operatore CHANGE.
 
-Nota che  cw  non solo rimpiazza la parola, ma ti mette anche in Modalità
-Inserimento [Insert Mode]
+Nota che  ce  cancella la parola, e ti mette anche in Modalità Inserimento
+    [Insert Mode]
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Lezione 3.4: ALTRI CAMBIAMENTI USANDO c
+		  Lezione 3.4: ALTRI CAMBIAMENTI USANDO c
 
+** L'operatore c [CHANGE] agisce sugli stessi movimenti di  d  [DELETE] **
 
-** Il comando c [CHANGE] agisce sugli stessi oggetti del comando d [DELETE] **
+  1. L'operatore CHANGE si comporta come DELETE.  Il formato è:
 
-  1. Il comando CHANGE si comporta come DELETE.  Il formato è:
-
-       [numero]   c   oggetto	 OPPURE    c	[numero]   oggetto
+       c   [numero]   movimento
 
-  2. Gli oggetti sono gli stessi, ad es. w (word, parola), $ (fine linea), etc.
+  2. I movimenti sono gli stessi,
+     ad es. w (word, parola), $ (fine linea), etc.
 
-  3. Muovi il cursore alla prima linea qui sotto, indicata da --->
+  3. Muovi il cursore alla prima linea qui sotto, indicata da --->.
 
   4. Posiziona il cursore al primo errore.
 
-  5. Batti  c$  per modificare il resto della linea secondo il modello della
-     linea successiva, e quando hai finito premi <ESC>
+  5. Batti  c$  e inserisci resto della linea utilizzando come modello la
+     linea seguente, e quando hai finito premi <ESC>
 
 ---> La fine di questa linea deve essere aiutata a divenire come la seguente.
 ---> La fine di questa linea deve essere corretta usando il comando  c$  .
 
-
+NOTA:  Puoi usare il tasto Backspace se devi correggere errori di battitura.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			       Lezione 3 SOMMARIO
 
 
-  1. Per reinserire testo che hai appena cancellato, batti   p   .  Questo
+  1. Per reinserire del testo appena cancellato, batti   p   .  Questo
      inserisce [pone] il testo cancellato DOPO il cursore (se era stata tolta
      una linea intera, questa verrà messa nella linea SOTTO il cursore).
 
   2. Per rimpiazzare il carattere sotto il cursore, batti   r   e poi il
-     carattere sostitutivo.
+     carattere che vuoi sostituire.
 
-  3. Il comando CHANGE ti permette di cambiare l'oggetto specificato dal
-     cursore fino alla fine dell'oggetto. Ad es. Batti  cw  per cambiare dal
-     cursore alla fine della parola,  c$  per cambiare fino a fine linea.
+  3. L'operatore change ti permette di cambiare dal cursore fino a dove
+     arriva il movimento.  Ad es. Batti  ce  per cambiare dal cursore
+     fino alla fine della parola,  c$  per cambiare fino a fine linea.
 
-  4. Il formato del comando CHANGE è:
+  4. Il formato di  change  è:
 
-	 [numero]   c	oggetto	      OPPURE	c   [numero]   oggetto
+       c   [numero]   movimento
 
 Ora vai alla prossima Lezione.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lezione 4.1: POSIZIONAMENTE E SITUAZIONE FILE
-
+		     Lezione 4.1: POSIZIONAMENTO E SITUAZIONE FILE
 
-  ** Batti CTRL-g per vedere a che punto sei nel file e la situazione del file.
-     Batti [numero] G  per raggiungere il numero della linea [numero] nel file.
-     Batti [numero] %  per posizionarti alla percentuale [numero] nel file **
+  ** Batti CTRL-G per vedere a che punto sei nel file e la situazione **
+  **     del file.  Batti G  per raggiungere una linea nel file.      **
+
+  NOTA: Leggi l'intera Lezione prima di eseguire un qualsiasi passo!!
 
-  NOTA: Leggi l'intera Lezione prima di eseguire un qualunque comando!!
+  1. Tieni premuto il tasto CTRL e batti  g  .  Ossia batti CTRL-G.
+     Un messaggio apparirà in fondo alla pagina con il NOME FILE e la
+     posizione nel file.  Ricordati il numero della linea per il Passo 3.
 
-  1. Tieni premuto il tasto CTRL e batti  g  .  Una linea di situazione
-     sarà visibile in fondo alla pagina con il NOME FILE e la linea
-     in cui sei posizionato.  Ricordati il numero della linea per il Passo 3.
+NOTA: La posizione del cursore si vede nell'angolo in basso a destra dello
+      schermo, se è impostata l'opzione 'ruler' (righello, vedi :help ruler).
 
-  2. Premi  G  [G Maiuscolo] per posizionarti alla fine del file.
+  2. Premi  G  [G Maiuscolo] per posizionarti in fondo al file.
+     Batti gg  per posizionarti in cima al file.
 
   3. Batti il numero della linea in cui ti trovavi e poi  G  .  Questo ti
      riporterà fino alla linea in cui ti trovavi quando avevi battuto CTRL-g.
-     (Mentre batti i numeri, questi NON saranno visualizzati sullo schermo.)
 
   4. Se ti senti sicuro nel farlo, esegui i passi da 1 a 3.
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		Lezione 4.2: IL COMANDO SEARCH [RICERCA]
 
-
      ** Batti  /  seguito da una frase per ricercare quella frase. **
 
   1. in Modalità Normale batti il carattere  /  . Nota che la "/" e il cursore
@@ -425,41 +517,41 @@ Ora vai alla prossima Lezione.
   3. Per ricercare ancora la stessa frase, batti soltanto       n  .
      Per ricercare la stessa frase in direzione opposta, batti  N  .
 
-  4. Se vuoi ricercare una frase in direzione opposta (in su), usa il
-     comando   ?   invece che   /  .
+  4. Per ricercare una frase nella direzione opposta, usa  ?  al posto di  /  .
+
+  5. Per tornare dove eri prima nel file premi  CTRL-O  (tieni il tasto CTRL
+     schiacciato mentre premi la lettera o).  Ripeti  CTRL-O  per andare ancora
+     indietro. Puoi usare  CTRL-I  per tornare in avanti.
 
----> Quando la ricerca arriva a fine file, ricomincia dall'inizio del file.
+NOTA: "errroore" non è il modo giusto di digitare errore; errroore è un errore.
+NOTA: Quando la ricerca arriva a fine file, ricomincia dall'inizio del file,
+      a meno che l'opzione 'wrapscan' sia stata disattivata.
 
-  "errroore" non è il modo giusto di digitare errore; errroore è un errore.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	      Lezione 4.3: RICERCA DI PARENTESI CORRISPONDENTI
 
 
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Lezione 4.3: RICERCA DI PARENTESI CORRISPONDENTI
+	 ** Batti  %  per trovare una  ),], o }  corrispondente. **
 
-
-	 ** Batti  %  per trovare una  ),], o }  corripondenti. **
-
-  1. Posiziona il cursore su un (, [, or { nella linea, indicata da --->
+  1. Posiziona il cursore su una (, [, o { nella linea sotto, indicata da --->.
 
   2. Adesso batti il carattere   %  .
 
-  3. Il cursore dovrebbe ora trovarsi sulla parentesi corrispondente.
+  3. Il cursore si sposterà sulla parentesi corrispondente.
 
-  4. Batti  %  per muovere il cursore alla parentesi di prima (corrispondente)
+  4. Batti  %  per muovere il cursore all'altra parentesi corrispondente.
 
 ---> Questa ( è una linea di test con (, [ ] e { } al suo interno. ))
 
+
 NOTA: Questo è molto utile nel "debug" di un programma con parentesi errate!
 
 
 
 
 
-
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      Lezione 4.4: UN MODO PER CORREGGERE GLI ERRORI
-
+	    Lezione 4.4: L'OPERATORE SOSTITUZIONE (SUBSTITUTE)
 
   ** Batti  :s/vecchio/nuovo/g  per sostituire 'nuovo' a 'vecchio'. **
 
@@ -468,30 +560,33 @@ NOTA: Questo è molto utile nel "debug" di un programma con parentesi errate!
   2. Batti  :s/lla/la <INVIO> .  Nota che questo comando cambia solo
      LA PRIMA occorrenza di "lla" sulla linea.
 
-  3. Adesso batti  :s/lla/la/g  dove "g" sta per "globalmente" sulla linea.
-     Questo cambia TUTTE le occorrenze di "lla" sulla linea.
+  3. Adesso batti  :s/lla/la/g . Aggiungendo la flag  g  si chiede di
+     sostituire "globalmente" sulla linea, ossia tutte le occorrenze
+     di "lla" sulla linea.
 
 ---> lla stagione migliore per lla fioritura è lla primavera.
 
   4. Per cambiare ogni ricorrenza di una stringa di caratteri tra due linee,
-     batti :#,#s/vecchio/nuovo/g  dove #,# sono i numeri delle due linee.
+     batti :#,#s/vecchio/nuovo/g  dove #,# sono i numeri che delimitano
+                                  il gruppo di linee in cui si vuole sostituire.
      Batti :%s/vecchio/nuovo/g    per cambiare ogni occorrenza nell'intero file.
-
-
-
-
+     Batti :%s/vecchio/nuovo/gc   per trovare ogni occorrenza nell'intero file
+                                  ricevendo per ognuna una richiesta se
+				  effettuare o meno la sostituzione.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			       Lezione 4 SOMMARIO
 
 
-1. CTRL-g  visualizza a che punto sei nel file e la situazione del file.
-   G       [G Maiuscolo] ti porta alla fine del file. Un numero di linea
-   seguito da  G  [G Maiuscolo] ti porta a quel numero di linea nel file.
+1. CTRL-G  visualizza a che punto sei nel file e la situazione del file.
+          G  [G Maiuscolo] ti porta all'ultima linea del file.
+   numero G  ti porta alla linea con quel numero.
+         gg  ti porta alla prima linea del file.
 
 2. Battendo  /  seguito da una frase ricerca IN AVANTI quella frase.
    Battendo  ?  seguito da una frase ricerca ALL'INDIETRO quella frase.
    DOPO una ricerca batti    n   per trovare la prossima occorrenza nella
    stessa direzione, oppure  N   per cercare in direzione opposta.
+   CTRL-O ti porta alla posizione precedente, CTRL-I a quella più nuova.
 
 3. Battendo  %  mentre il cursore si trova su  (,),[,],{, oppure }
    ti posizioni sulla corrispondente parentesi.
@@ -501,36 +596,34 @@ 4. Per sostituire "nuovo" al primo "vecc
    Per sostituire frasi tra 2 numeri di linea [#]  batti   :#,#s/vecchio/nuovo/g
    Per sostituire tutte le occorrenze nel file batti	     :%s/vecchio/nuovo/g
    Per chiedere conferma ogni volta aggiungi 'c'	    :%s/vecchio/nuovo/gc
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	      Lezione 5.1: COME ESEGUIRE UN COMANDO ESTERNO
+
+
+  ** Batti  :!  seguito da un comando esterno per eseguire quel comando. **
+
+  1. Batti il comando   :   per posizionare il cursore in fondo allo schermo.
+     Ciò ti permette di immettere un comando dalla linea comandi.
+
+  2. Adesso batti il carattere  !  (punto esclamativo).  Ciò ti permette di
+     eseguire qualsiasi comando esterno si possa eseguire nella "shell".
+
+  3. Ad esempio batti   ls   dopo il ! e poi premi <INVIO>.  Questo
+     visualizza una lista della tua directory, proprio come se fossi in una
+     "shell". Usa   :!dir  se  ls  non funziona.   [Unix: ls  MS-DOS: dir]
+
+NOTA:  E' possibile in questo modo eseguire un comando a piacere, specificando
+       anche dei parametri per i comandi stessi.
+
+NOTA:  Tutti i comandi  :  devono essere terminati premendo <INVIO>
+       Da qui in avanti non lo ripeteremo ogni volta.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lezione 5.1: COME ESEGUIRE UN COMANDO ESTERNO
+	      Lezione 5.2: ANCORA SULLA SCRITTURA DEI FILE
 
 
-   ** Batti  :!	seguito da un comando esterno per eseguire il comando. **
-
-  1. Batti il comando   :   Per posizionare il cursore in fondo allo schermo.
-     Ciò ti permette di immettere un comando.
-
-  2. Adesso batti il carattere  !  (punto esclamativo).  Ciò ti permette di
-     eseguire qualsiasi comando esterno che si può eseguire nella "shell".
-
-  3. Ad esempio batti   ls   dopo il ! e poi premi <INVIO>.  Questo
-     visualizza una lista della tua directory, proprio come se fossi in una
-     "shell". Usa   :!dir  se  ls  non funziona.   [Unix:ls  MSDOS:dir]
-
----> NOTA:  E' possibile in questo modo eseguire un comando a piacere.
-
----> NOTA:  Tutti i comandi  :  devono essere terminati premendo <INVIO>
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lezione 5.2: ANCORA SULLA SCRITTURA DEI FILES
-
-
-     ** Per salvare le modifiche apportate a un file batti :w NOMEFILE. **
+   ** Per salvare le modifiche apportate a un testo batti :w NOMEFILE. **
 
   1. Batti  :!dir  or  :!ls  per procurarti una lista della tua directory.
      Già sai che devi premere <INVIO> dopo aver scritto il comando.
@@ -540,60 +633,60 @@ 4. Per sostituire "nuovo" al primo "vecc
   3. Adesso batti:	 :w TEST   (dove TEST è il NOMEFILE che hai scelto).
 
   4. Questo salva l'intero file ("tutor.it")  con il nome di TEST.
-     Per una verifica batti ancora  :!dir   per listare la tua directory.
+     Per verifica batti ancora  :!dir  o  :!ls  per listare la tua directory.
 
----> Nota che se esci da Vim e riesegui Vim usando come NOMEFILE TEST,
-     il file sarà una copia esatta di "tutor.it" al momento del salvataggio.
+NOTA: Se esci da Vim e riesegui Vim battendo  vim TEST , il file aperto
+      sarà una copia esatta di "tutor.it" al momento del salvataggio.
 
-  5. Ora cancella il file battendo:   :!rm      TEST    [sotto Unix] oppure
-				      :!del	TEST	[sotto MSDOS]
+  5. Ora cancella il file battendo (MR-DOS):   :!del TEST
+				 o (Unix):     :!rm TEST
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Lezione 5.3: SCRIVERE IN MANIERA SELETTIVA
+		Lezione 5.3: SELEZIONARE IL TESTO DA SCRIVERE
 
+   ** Per salvare una porzione di file, batti  v movimento :w NOMEFILE **
 
-     ** Per salvare una porzione del file, batti   :#,# w NOMEFILE **
+  1. Muovi il cursore su questa linea.
 
-  1. Batti ancora  :!dir  o  :!ls  per procurarti una lista della tua directory
-     e scegli un NOMEFILE adatto, come ad es.  TEST  .
+  2. Premi  v  e muovi il cursore fino alla linea numerata 5., qui sotto.
+     Nota che il testo viene evidenziato.
+
+  3. Batti il carattere  :  .  In fondo allo schermo apparirà :'<,'>  .
 
-  2. Muovi il cursore in cima a questa pagina e batti  CTRL-g  per procurarti
-     il numero di linea.  RICORDATI QUESTO NUMERO!
+  4. Batti  w TEST  , dove TEST è il nome di un file non ancora esistente.
+     Verifica che si veda  :'<,'>w TEST   prima di dare <INVIO>.
 
-  3. Ora spostati in fondo alla pagina e batti  CTRL-g again.
-     RICORDATI ANCHE QUESTO NUMERO!
+  5. Vim scriverà nel file TEST le linee che hai selezionato.  Usa  :!dir
+     o  :!ls  per controllare che esiste.  Non cancellarlo ora!  Ti servirà
+     nella prossima lezione.
 
-  4. Per salvare SOLO una parte in un file, batti   :#,# w TEST
-     dove  #,#  sono i due numeri che hai memorizzato (cima,fondo) e TEST
-     è il tuo NOMEFILE.
-
-  5. Ancora una volta, controlla che il file esista con il comando :!dir
-     ma NON CANCELLARLO.
+NOTA:  Battere  v  inizia una selezione visuale.  Puoi muovere il cursore
+       come vuoi, e rendere la selezione più piccola o più grande.  Poi
+       puoi usare un operatore per agire sul testo selezionato.
+       Ad es.,  d  cancella il testo.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  Lezione 5.4: INSERIRE E RIUNIRE FILE
 
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Lezione 5.4: INSERIRE E RIUNIRE FILE
-
-
-   ** Per inserire il contenuto di un file, batti   :r NOMEFILE **
+   ** Per inserire il contenuto di un file, batti  :r NOMEFILE  **
 
-  1. Batti  :!dir  per accertarti che il tuo NOMEFILE TEST sia ancora presente.
+  1. Posiziona il cursore appena sopra questa riga.
 
-  2. Posiziona il cursore all'inizio di questa pagina.
-
-NOTA: DOPO aver eseguito il Passo 3 vedrai ancora la Lezione 5.3.
+NOTA: Dopo aver eseguito il Passo 2 vedrai il testo della Lezione 5.3.
       Quindi spostati IN GIU' per tornare ancora a questa Lezione.
 
-  3. Ora inserisci il tuo file TEST con il comando   :r TEST   dove TEST è
-     il nome del file.
-
-NOTA: Il file che tu richiedi è inserito a partire da dove si trova il cursore.
+  2. Ora inserisci il tuo file TEST con il comando   :r TEST   dove TEST è
+     il nome che hai usato per creare il file.
+     Il file richiesto è inserito sotto la linea in cui si trova il cursore.
 
-  4. Per verificare che un file è stato inserito, torna indietro col cursore
-     e nota che ci sono ora 2 copie della Lezione 5.3, quella originale e quella
-     da te inserita.
+  3. Per verificare che un file è stato inserito, torna indietro col cursore
+     e nota che ci sono ora 2 copie della Lezione 5.3, quella originale e
+     quella che viene dal file.
 
+NOTA:  Puoi anche leggere l'output prodotto da un comando esterno. Ad es.
+       :r !ls  legge l'output del comando  ls e lo inserisce sotto la linea
+       in cui si trova il cursore.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			       Lezione 5 SOMMARIO
@@ -607,10 +700,240 @@ NOTA: Il file che tu richiedi è inserito a partire da dove si trova il cursore.
 
   2.  :w NOMEFILE  scrive su disco il file che stai editando con nome NOMEFILE.
 
-  3.  :#,#w NOMEFILE  salva le linee da # a # nel file NOMEFILE.
+  3.  v movimento :w NOMEFILE  salva le linee selezionate in maniera
+      visuale nel file NOMEFILE.
+
+  4.  :r NOMEFILE  legge il file NOMEFILE da disco e lo inserisce nel file
+      che stai modificando, dopo la linea in cui è posizionato il cursore.
+
+  5.  :r !dir  legge l'output del comando  dir  e lo inserisce dopo la
+      linea in cui è posizionato il cursore.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Lezione 6.1: IL COMANDO OPEN [APRIRE]
+
+
+        ** Batti   o   per aprire una linea sotto il cursore **
+        **         e passare in Modalità Inserimento.        **
+
+  1. Muovi il cursore fino alla linea qui sotto, indicata da --->.
+
+  2. Batti la lettera minuscola  o  per aprire una linea sotto il cursore e
+     passare in Modalità Inserimento.
+
+  3. Poi inserisci del testo e premi <ESC> per uscire dalla
+     Modalità Inserimento.
+
+---> Dopo battuto  o  il cursore è sulla linea aperta (in Modalità Inserimento).
+
+  4. Per aprire una linea SOPRA il cursore, batti una   O  maiuscola, invece
+     che una   o   minuscola. Prova sulla linea qui sotto.
+Apri una linea SOPRA questa battendo  O  mentre il cursore è su questa linea.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Lezione 6.2: IL COMANDO APPEND [AGGIUNGERE]
+
+	     ** Batti   a   per inserire testo DOPO il cursore. **
+
+  1. Muovi il cursore all'inizio della linea qui sotto, indicata da --->.
+
+  2. Batti  e  finché il cursore arriva alla fine di  li .
+
+  3. Batti una  a  (minuscola) per aggiungere testo DOPO il cursore.
+
+  4. Completa la parola come mostrato nella linea successiva.  Premi <ESC>
+     per uscire dalla Modalità Inserimento.
+
+  5. Usa  e  per passare alla successiva parola incompleta e ripeti i passi
+     3 e 4.
+
+---> Questa li ti permetterà di esercit ad aggiungere testo a una linea.
+---> Questa linea ti permetterà di esercitarti ad aggiungere testo a una linea.
+
+NOTA: a, i ed A entrano sempre in Modalità Inserimento, la sola differenza
+      è dove verranno inseriti i caratteri.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	   Lezione 6.3: UN ALTRO MODO DI RIMPIAZZARE [REPLACE]
+
+
+     ** Batti una  R  maiuscola per rimpiazzare più di un carattere. **
+
+  1. Muovi il cursore alla prima linea qui sotto, indicata da --->.  Muovi il
+     cursore all'inizio del primo  xxx .
+
+  2. Ora batti  R  e batti il numero che vedi nella linea seguente, in modo
+     che rimpiazzi l'  xxx .
+
+  3. Premi <ESC> per uscire dalla Modalità Replace.  Nota che il resto della
+     linea resta invariato.
+
+  4. Ripeti i passi in modo da rimpiazzare l'altro xxx .
+
+---> Aggiungendo 123 a xxx si ottiene xxx.
+---> Aggiungendo 123 a 456 si ottiene 579.
+
+NOTA:  La Modalità Replace è come la Modalità Inserimento, ma ogni carattere
+       che viene battuto ricopre un carattere esistente.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Lezione 6.4: COPIA E INCOLLA DEL TESTO
+
+
+     ** usa l'operatore  y  per copiare del testo e  p  per incollarlo **
+
+  1. Vai alla linea indicata da ---> qui sotto, e metti il cursore dopo "a)".
+  
+  2. Entra in Modalità Visuale con  v  e metti il cursore davanti a "primo".
+  
+  3. Batti  y  per copiare [yank] il testo evidenziato.
+
+  4. Muovi il cursore alla fine della linea successiva:  j$
+
+  5. Batti  p  per incollare [paste] il testo.  Poi batti:  a secondo <ESC> .
+
+  6. Usa la Modalità Visuale per selezionare " elemento.", copialo con  y ,
+     Vai alla fine della linea successiva con  j$  e incolla il testo con  p .
+
+--->  a) questo è il primo elemento.
+      b)
+
+NOTA: Puoi usare  y  come operatore;  yw  copia una parola [word].
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	         Lezione 6.5: SET [IMPOSTA] UN'OPZIONE
+
+       ** Imposta un'opzione per ignorare maiuscole/minuscole **
+       **             durante la ricerca/sostituzione         **
+
+ 1. Ricerca 'nota' battendo:   /nota <ENTER>
+    Ripeti la ricerca più volte usando il tasto   n
+
+ 2. Imposta l'opzione 'ic' (Ignore Case, [Ignora maiuscolo/minuscolo])
+    battendo:  :set ic
 
-  4.  :r NOMEFILE  legge il file NOMEFILE da disco e lo inserisce nel
-      file che stai editando, dopo il punto dove è posizionato il cursore.
+ 3. Ora ricerca ancora 'nota' premendo il tasto    n
+    Troverai adesso anche  Nota  e  NOTA .
+
+ 4. Imposta le opzioni 'hlsearch' e 'incsearch'    :set hls is
+
+ 5. Ora batti ancora il comando di ricerca, e guarda cosa succede:    /nota
+ 
+ 6. Per disabilitare il riconoscimento di maiuscole/minuscole batti:  :set noic
+NOTA: Per non evidenziare le occorrenze trovate batti:   :nohlsearch
+NOTA: Per ignorare maiuscole/minuscole solo per una ricerca, usa \c
+      nel comando di ricerca:    /nota\c <INVIO>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Lezione 6 SOMMARIO
+
+  1. Batti  o  per aggiungere una linea SOTTO il cursore ed entrare in
+               Modalità Inserimento.
+     Batti  O  per aggiungere una linea SOPRA il cursore.
+
+  2. Batti  a  per inserire testo DOPO il cursore.
+     Batti  A  per inserire testo alla fine della linea.
+
+  3. Il comando   e  sposta il cursore alla fine di una parola.
+
+  4. L'operatore  y  copia del testo,  p  incolla del testo.
+
+  5. Batti  R  per entrare in Modalità Replace, e ne esci premendo <ESC>.
+
+  6. Batti ":set xxx" per impostare l'opzione "xxx". Alcun opzioni sono:
+      'ic' 'ignorecase'	ignorare maiuscole/minuscole nella ricerca
+      'is' 'incsearch'	mostra occorrenze parziali durante una ricerca
+      'hls' 'hlsearch'	evidenzia tutte le occorrenze di una ricerca
+     Puoi usare sia il nome completo di un'opzione che quello abbreviato.
+
+  7. Usa il prefisso "no" per annullare una opzione:   :set noic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lezione 7.1: OTTENERE AIUTO
+
+		 ** Usa il sistema di aiuto on-line **
+
+  Vim ha un esauriente sistema di aiuto on-line.  Per cominciare, prova una di
+  queste alternative:
+	- premi il tasto <AIUTO> (se ce n'è uno)
+	- premi il tasto <F1>    (se ce n'è uno)
+	- batti   :help  <INVIO>  OPPURE   :h <INVIO>
+
+  Leggi il testo nella finestra di aiuto per vedere come funziona l'aiuto.
+  Batti  CTRL-W CTRL-W	per passare da una finestra all'altra.
+  Batti  :q <INVIO>   per chiudere la finestra di aiuto.
+
+  Puoi trovare aiuto su quasi tutto, dando un argomento al comando ":help"
+  Prova questi (non dimenticare di premere <INVIO>):
+
+	:help w
+	:help c_CTRL-D
+	:help insert-index
+	:help user-manual
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		 Lezione 7.2: PREPARARE UNO SCRIPT INIZIALE
+
+		        ** Attiva le opzioni Vim **
+
+  Vim ha molte più opzioni di Vi, ma molte di esse sono predefinite inattive.
+  Per cominciare a usare più opzioni, devi creare un file "vimrc".
+
+  1. Comincia a editare il file "vimrc".  Questo dipende dal tuo sistema:
+	:e ~/.vimrc		per Unix
+	:e $VIM/_vimrc		per MS-Windows
+
+  2. Ora leggi i contenuti del file "vimrc" distribuito come esempio:
+
+	:r $VIMRUNTIME/vimrc_example.vim
+
+  3. Scrivi il file con:
+	:w
+
+  La prossima volta che apri Vim, sarà abilitata la colorazione sintattica.
+  Puoi aggiungere a questo file "vimrc" tutte le tue impostazioni preferite.
+  Per maggiori informazioni batti:  :help vimrc-intro
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Lezione 7.3: COMPLETAMENTO
+
+
+	      ** Completamento linea comandi con CTRL-D e <TAB> **
+
+  1. Imposta Vim in modalità compatibile:  :set nocp
+
+  2. Guarda i file esistenti nella directory:  :!ls   o  :!dir
+
+  3. Batti l'inizio di un comando:  :e
+
+  4. Premi  CTRL-D  e Vim ti mostra una lista di comandi che iniziano per "e".
+
+  5. Premi  <TAB>  e Vim completa per te il nome comando come ":edit".
+
+  6. Ora batti uno spazio e l'inizio del nome di un file esistente:  :edit FIL
+
+  7. Premi <TAB>.  Vim completerà il nome del file (se è il solo possibile).
+
+NOTA:  Il completamento è disponibile per molti comandi.  Prova a battere
+       CTRL-D e <TAB>.  Particolarmente utile per  :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   Lezione 7 Sommario
+
+
+  1. Batti  :help  o premi <F1> o <Help>  per aprire una finestra di aiuto.
+
+  2. Batti  :help comando  per avere aiuto su  comando .
+
+  3. Batti  CTRL-W CTRL-W  per saltare alla prossima finestra.
+
+  4. Batti  :q  per chiudere la finestra di aiuto.
+
+  5. Crea uno script iniziale vimrc contenente le tue impostazioni preferite.
+
+  6. Mentre batti un comando  : , premi CTRL-D per vedere i possibili
+     completamenti.  Premi <TAB> per usare il completamento desiderato.
 
 
 
@@ -619,171 +942,10 @@ NOTA: Il file che tu richiedi è inserito a partire da dove si trova il cursore.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lezione 6.1: IL COMANDO OPEN [APRI]
-
-
-  ** Batti   o   per aprire una linea sotto il cursore e per passare in
-     Modalità Inserimento. **
-
-  1. Muovi il cursore fino alla linea qui sotto, indicata da --->.
-
-  2. Batti   o   (minuscolo) per aprire una linea sotto il cursore e per
-     passare in Modalità Inserimento.
-
-  3. Adesso ricopia la linea indicata da --->
-     e premi <ESC> per uscire dalla Modalità Inserimento.
-
----> Dopo battuto  o  il cursore è sulla linea aperta (in Modalità Inserimento)
-
-  4. Per aprire una linea SOPRA il cursore, batti   O  [Maiuscola], invece
-     che una   o   minuscola. Prova sulla linea subito sotto.
-Apri una linea SOPRA questa battendo  O  quando il cursore è su questa linea.
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		Lezione 6.2: IL COMANDO APPEND [AGGIUNGI]
-
-
-	     ** Batti   a   per inserire testo DOPO il cursore. **
-
-  1. Muovi il cursore alla fine della prima linea qui sotto, indicata da --->
-     battendo  $  mentre sei in Modalità Normale.
-
-  2. Batti una  a  (minuscola) per aggiungere testo DOPO il carattere sotto
-     il cursore.   (A Maiuscola aggiunge alla fine della linea).
-
-NOTA: Eviti così di battere   i   , l'ultimo carattere, il testo da aggiungere,
-      <ESC>, spostare il cursore a sinistra e battere   x  solo per aggiungere
-      qualcosa alla fine della linea!
-
-  3. Adesso completa la prima linea.  Nota anche che l'aggiunta funziona come
-     la Modalità Inserimento, tranne che per il luogo dove il testo è inserito.
-
----> Questa linea ti permetterà di esercitarti
----> Questa linea ti permetterà di esercitarti ad aggiungere testo a fine linea.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	   Lezione 6.3: UN'ALTRA VARIANTE DI REPLACE [RIMPIAZZA]
-
-
-     ** Batti una  R  Maiuscola per rimpiazzare più di un carattere. **
-
-  1. Muovi il cursore alla prima linea qui sotto, indicata da --->.
-
-  2. Posiziona il cursore all'inizio della prima parola differente
-     dalla seconda linea indicata da ---> (la parola "'ultima").
-
-  3. Adesso batti  R  e rimpiazza il resto del testo sulla prima linea battendo
-     sopra il testo preesistente per rendere la prima linea uguale alla seconda.
-
----> Per rendere la prima linea uguale alla ultima su questa pagina usa i tasti.
----> Per rendere la prima linea uguale alla seconda, batti R e il nuovo testo.
-
-  4. Nota che quando premi <ESC> per uscire, ogni testo non toccato resta
-     uguale.
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Lezione 6.4: SET [IMPOSTA] UN'OPZIONE
-
-      ** Imposta un'opzione per ignorare maiuscole/minuscole
-	 durante la ricerca/sostituzione **
-
- 1. Ricerca 'ignora' battendo:
-    /ignora
-    Ripeti la ricerca più volte usando il tasto   n
-
- 2. Imposta l'opzione 'ic' (Ignore case, [Ignora Maiuscolo/minuscolo]) battendo:
-    :set ic
-
- 3. Adesso ricerca ancora 'ignora' premendo il tasto    n
-    Ripeti la ricerca più volte usando il tasto   n
-
- 4. Imposta le opzioni 'hlsearch' e 'incsearch' [evidenzia_ricerca subito]
-    :set hls is
-
- 5. Adesso ribatti ancora il comando di ricerca, e guarda cosa succede:
-    /ignore
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			       Lezione 6 SOMMARIO
-
-
-  1. Battendo  o  aggiungi una linea SOTTO il cursore ed il cursore
-     si posiziona sulla linea appena aperta, in Modalità Inserimento.
-     Battendo  O  [Maiuscola] apri la linea SOPRA la linea su cui è il cursore.
-
-  2. Batti una  a  per inserire testo DOPO il carattere su cui è il cursore.
-     Battendo   A  [Maiuscola] aggiungi testo alla fine della linea.
-
-  3. Battendo   R  [Maiuscola] entri in Modalità Rimpiazzo [Replace mode]
-     e ci resti finché non premi <ESC> per uscirne.
-
-  4. Battendo ":set xxx" imposti l'opzione "xxx"
-     Battendo ":h   xxx" vedi la documentazione [inglese] per l'opzione "xxx"
-
-
-
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Lezione 7: COMANDI DI AIUTO ON-LINE
-
-
-		      ** Usa il sistema di help on-line **
-
-  Vim ha un esauriente sistema di aiuto on-line.  Per cominciare, prova una di
-  queste alternative:
-	- premi il tasto <AIUTO> (se ce n'è uno)
-	- premi il tasto <F1>    (se ce n'è uno)
-	- batti   :help  <INVIO>  OPPURE   :h <INVIO>
-
-  Batti   :q <INVIO>   per chiudere la finestra di help.
-
-  Puoi trovare aiuto su quasi tutto, dando un argomento al comando ":help"
-  Prova questi (non dimenticare di premere <INVIO>):
-
-	:help w
-	:help c_<T
-	:help insert-index
-	:help user-manual
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       LEZIONE 8: PREPARA UNO SCRIPT INIZIALE
-
-			  ** Attiva le opzioni Vim **
-
-  Vim ha molte più opzioni di Vi, ma molte di esse sono predefinite inattive.
-  Per cominciare a usare più opzioni, devi preparare un file "vimrc".
-
-  1. Comincia a editare il file "vimrc", a seconda del tuo sistema operativo:
-	:edit ~/.vimrc			per Unix
-	:edit $VIM/_vimrc		per MS-Windows
-
-  2. Ora inserisci il file "vimrc" d'esempio:
-
-	:read $VIMRUNTIME/vimrc_example.vim
-
-  3. Scrivi il file con:
-
-	:write
-
-  La prossima volta che apri Vim, vedrai in uso la colorazione sintattica.
-  Puoi aggiungere a questo file "vimrc" tutte le tue impostazioni preferite.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Qui finisce la Guida a Vim.  Il suo intento è di fornire una breve panoramica
   dell'Editor Vim, che ti consenta di usare l'Editor abbastanza facilmente.
   Questa guida è largamente incompleta poiché Vim ha moltissimi altri comandi.
-  Puoi anche leggere il manuale utente: ":help user-manual".
+  Puoi anche leggere il manuale utente (anche in italiano): ":help user-manual".
 
   Per ulteriore lettura e studio, raccomandiamo:
 	Vim - Vi Improved - di Steve Oualline     Editore: New Riders
@@ -801,5 +963,5 @@ NOTA: Eviti così di battere   i   , l'ultimo carattere, il testo da aggiungere,
   Colorado School of Mines, usando idee fornite da Charles Smith,
   Colorado State University - E-mail: bware@mines.colorado.edu
   Modificato per Vim da Bram Moolenaar.
-  Segnalare refusi ad Antonio Colombo - E-mail: azc10@yahoo.com
+  Segnalare refusi ad Antonio Colombo - E-mail: azc100@gmail.com
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
new file mode 100644
--- /dev/null
+++ b/runtime/tutor/tutor.tr.utf-8
@@ -0,0 +1,813 @@
+===============================================================================
+=    	V I M   T u t o r'a Hoş Geldiniz    -    Sürüm 1.5      =
+===============================================================================
+
+     Vim, bu gibi bir eğitmen ile açıklanması gereken çok fazla komut barındıran,
+     oldukça kuvvetli bir metin düzenleyicidir. Bu eğitmen Vim'i çok amaçlı bir
+     düzenleyici olarak kolaylıkla kullanabileceğiniz yeterli sayıda komutu açıklamak
+     için tasarlanmıştır.
+
+     Eğitmeni tamamlama süresi yapacağınız denemelere bağlı olarak 25-30
+     dakikadır.
+
+     Derslerdeki komutlar bu metini değiştirecektir. Üzerinde çalışmak için
+     bu dosyanın bir kopyasını alın (eğer "vimtutor" uygulamasını çalıştırdıysanız
+     zaten bir kopyasını almış oldunuz).
+
+     Bu eğitmenin, kullanarak öğretmeye ayarlandığını unutmamak önemlidir. Bu şu
+     anlama gelir; komutları öğrenmek için doğru bir şekilde çalıştırmanız gerekir.
+     Eğer sadece yazılanları okursanız komutları unutursunuz.
+
+     Şimdi Shift-Lock tuşlarınızın basılı olmadığına emin olun ve Ders 1.1'in
+     ekranı tamamen doldurması için   j   tuşuna yeterli miktarda basın.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Ders 1.1:  Ä°MLECÄ° HAREKET ETTÄ°RMEK
+
+  Ç.N: Tüm derslerde <ENTER> gördüğünüz yerde bu tuşa basmanız gerekir.
+
+   ** İmleci hareket ettirmek için, h,j,k,l tuşlarına gösterildiği gibi basın. **
+   	     ^
+	     k		    İpucu: h tuşu soldadır ve sola hareket eder.
+       < h	 l >		   l tuşu sağdadır ve sağa hareket eder.
+	     j			   j tuşu aşağı yönlü bir ok gibidir.
+	     v
+  1. Yeterli hissedinceye kadar imleci ekranda hareket ettirin.
+
+  2. Aşağı tuşunu  (j)  tekrar edene kadar basılı tutun.
+---> Şimdi, bir sonraki derse nasıl geçeceğinizi biliyorsunuz.
+
+  3. Aşağı tuşunu kullanarak, Ders 1.2'ye geçin.
+  Not:  Eğer yazdığınız bir şeyden emin değilseniz, Normal kipe geçmek için <ESC> tuşuna basın.
+        Daha sonra istediğiniz komutu yeniden yazın.
+  Not:  İmleç tuşları da aynı zamanda işe yararlar ancak   hjkl   tuşlarını kullanmaya alıştığınızda etrafta daha hızlı
+        hareket edersiniz.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Ders 1.2: VIM'E GİRİŞ VE VIM'DEN ÇIKIŞ
+
+
+  !! NOT: Aşağıdaki adımları yapmadan önce, bu dersi tamamen okuyun.
+
+  1. <ESC> tuşuna basın (Normal kipte olmayı garantilemek için).
+
+  2. Yazın:			:q! <ENTER>.
+
+---> Bu düzenleyicinin yaptığınız değişiklikleri KAYDETMEDEN kapanmasını sağlar.
+     Eğer yaptıklarınızın kaydedilmesini istiyorsanız şunu yazın:
+				:wq  <ENTER>
+
+  3. Kabuk istemcisini (shell prompt) gördüğünüzde, sizi bu eğitmene getiren
+     komutu yazın. Bu:	vimtutor <ENTER> komutudur.
+     Normalde:	vim tutor <ENTER> komutu kullanılır.
+---> 'vim' vim düzenleyicisine gir anlamına gelir, 'tutor' ise açmak istediğiniz dosyadır.
+
+  4. Eğer bu adımları ezberlediyseniz ve kendinizden eminseniz, 1'den 3'e kadar olan adımları,
+     düzenleyiciden çıkmak ve yeniden girmek için uygulayın.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Ders 1.3: METÄ°N DÃœZENLEME - SÄ°LME
+
+
+** Normal kipteyken imlecin altındaki karakteri silmek için   x  'e basın.**
+
+  1. İmleci aşağıda işaretlenmiş (-->) satıra götürün.
+
+  2. Hataları düzeltmek için, imleci silinmesi gereken karakterin üzerine getirin
+
+  3. İstenmeyen karakteri silmek için   x   tuşuna basın.
+
+  4. Cümle düzelene kadar 2'den 4'e kadar olan adımları tekrar edin.
+
+---> İinek ayyın üzzerinden attladı.
+
+  5. Şimdi satır düzeldi, Ders 1.4'e geçin.
+
+NOT: Bu eğitmende ilerledikçe ezberlemeye çalışmayın, kullanarak öğrenin.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Ders 1.4: METÄ°N DÃœZENLEME - EKLEME
+
+
+	  ** Normal kipteyken metin eklemek için   i  'ye basın. **
+
+  1. İmleci aşağıdaki işaretlenmiş (-->) ilk satıra götürün.
+
+  2. İlk satırı ikincisinin aynısı gibi yapmak için, imleci eklenmesi gereken
+     metinden sonraki ilk karakterin üzerine götürün.
+
+  3. i  'ye basın ve gerekli eklemeleri yapın.
+
+  4. Her hata düzeltildiğinde <ESC> tuşuna basarak Normal kipe dönün.
+     Cümleyi düzeltmek için 2'den 4'e kadar olan adımları tekrar edin.
+
+---> Bu metinde eksk.
+---> Bu metinde birÅŸey eksik.
+
+  5. Metin ekleme çalışmalarını yeterli görüyorsanız aşağıdaki özete geçin.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       DERS 1 ÖZET
+
+
+  1. İmleç hem ok tuşları hem de   hjkl   tuşları ile hareket ettirilir.
+	 h (sol)	j (aşağı)       k (yukarı)	    l (sağ)
+
+  2. (Konsoldan) Vim'e girmek içn  yazın:  vim DOSYAİSMİ <ENTER>
+
+  3. Tüm değişiklikleri göz ardı edip vimden çıkmak için yazın:
+     <ESC>	:q!	<ENTER>
+     veya tüm değişiklikleri kaydetmek için yazın:
+     <ESC>	:wq	<ENTER>
+
+  4. İmlecin altındaki bir karakteri silmek için Normal kipte   x   yazın.
+
+  5. İmlecin altında metin eklemek için Normal kipte yazın:
+	 i     yazılacak metin	<ESC>
+
+NOT: <ESC> tuşuna basmak sizi Normal kipe götürür ya da istenmeyen tamamlanmamış bir komutu
+     iptal eder.
+
+Åžimdi Ders 2 ile devam edin.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Ders 2.1: SÄ°LME KOMUTLARI
+
+	    ** Bir kelimeyi silmek için  dw  yazın.**
+
+  1. Normal kipte olmakten emin olmak için <ESC> tuşuna basın.
+
+  2. İmleci aşağıdaki işaretlenmiş (-->) satıra götürün.
+
+  3. İmleci silinmesi gereken kelimenin başına götürün.
+
+  4. Kelimeyi silmek için   dw   yazın.
+
+  NOT:  dw  harfleri siz yazdıkça ekranın son satırında görülecektir.
+        Eğer yanlış bir şeyler yazarsanız, yeniden başlamak için <ESC> tuşuna basın.
+
+---> Bu satırda çerez cümleye ait olmayan leblebi kelimeler var.
+
+
+  5. Cümle düzelene kadar adım 3 ve 4'ü tekrar edin, daha sonra Ders 2.2'ye gidin.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Ders 2.2: DAHA FAZLA SÄ°LME KOMUTU
+
+
+	   ** Satırı sonuna kadar silmek için   d$   yazın.**
+
+  1. Normal kipte olmaktan emin olmak için <ESC> tuşuna basın.
+
+  2. İmleci aşağıdaki işaretlenmiş (-->) satıra götürün.
+
+  3. İmleci doğru olan satırın sonuna götürün. (Birinciden SONRA. )
+
+  4. Satırı sonuna kadar silmek için   d$   yazın.
+  ( d$  yazarken d'den sonra <ALT> ile beraber $ tuşuna basın)
+
+---> Birileri bu satırın sonunu iki defa yazmış. Birileri bu satırın sonunu iki defa yazmış.
+
+  5. Neler olduğunu anlamak için Ders 2.3'e gidin.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Ders 2.3: KOMUTLAR VE NESNELER
+
+
+   d   silme komutu için biçim aşağıdaki gibidir:
+
+	 [sayı]   d	nesne	    VEYA     d	 [sayı]   nesne
+  Burada:
+    sayı   - komutun kaç defa çalıştırlacağı (isteğe bağlı, varsayılan=1).
+    d      - silme komutu
+    nesne  - komutun ne şekilde çalışacağı (aşağıda listlendi).
+
+  Nesnelerin kısa bir listesi.
+    w - Boşluğu da içererek, imleçten itibaren kelimenin sonuna kadar.
+    e - Boşluğu İÇERMEDEN, imleçten itibaren kelimenin sonuna kadar.
+    $ - imleçten satırın sonuna kadar.
+
+NOT:   Serüven sevenler için, Normal kipte iken, komut olmadan sadece nesnenin kendisine basmak
+       imleci yukardaki listede olduÄŸu gibi hareket ettirecektir.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Ders 2.4:   'KOMUT-NESNE'ye BÄ°R Ä°STÄ°SNA
+
+
+		 ** Bütün bir satırı silmek için   dd   yazın. **
+
+  Bütün bir satır silme sıklığından dolayı, Vi tasarımcıları bir satırı
+  tamamen silmek için iki d yazmanın daha kolay olacağına karar verdiler.
+
+  1. İmleci aşağıdaki tümceciğin ikinci satırına götürün.
+  2. Satırı silmek için    dd   yazın.
+  3. Şimdi de dördüncü satıra gidin.
+  4. İki satırı birden silmek için   2dd   (sayı-komut-nesne'yi hatırlayın) yazın.
+
+	1)  Güller kırmızıdır,
+	2)  Çamur eğlenceli,
+	3)  MenekÅŸeler mavi,
+	4)  Bir arabam var,
+        5)  Saat bana söyler,
+	6)  Şeker tatlıdır
+ 	7)  Ve sen de öylesin
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Ders 2.5: GERÄ° AL KOMUTU
+
+
+   ** Son komutu geri almak için    u   , bütün bir satırı düzeltmek için U yazın.**
+
+  1. İmleci aşağıdaki işaretlenmiş (-->) satırdaki ilk hatanın üzerine götürün.
+  2. İlk istenmeyen karakteri silmek için   x   yazın.
+  3. Şimdi son çalıştırılan komutu geri almak için   u   yazın.
+  4. Bu sefer   x    komutunu kullanarak satırdaki tüm hataları düzeltin.
+  5. Şimdi satırı ilk haline çevirmek için büyük   U    yazın.
+  6. Şimdi   U    ve daha önceki komutları geri almak için birkaç defa   u    yazın.
+  7. Şimdi birkaç defa CTRL-R (CTRL'yi basılı tutarken R ye basın) yazarak geri almaları da geri alın.
+
+---> Buu satıırdaki hataları düüzeltinn ve sonra koomutu geri alllın.
+
+  8. Bunlar son derece kullanışlı komutlardır. Şimdi Ders 2 Özete geçin.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       DERS 2 ÖZET
+
+
+  1. İmleçten itibaren bir kelimeyi silmek için yazın:	dw
+
+  2. İmleçten itibaren bir satırı silmek için yazın:	d$
+
+  3. Bütün bir satırı silmek için yazın:		dd
+
+  4. Normal kipte bir komut biçimi şöyledir:
+
+       [sayı]   komut    nesne    VEYA     komut	[sayı]   nesne
+     burada:
+	 sayı  - komutun kaç kere tekrar edeceği
+	 komut - ne yapılacağı, silmek için   d   olduğu gibi
+	 nesne - komutun nasıl davranacağı, w (kelime), $ (satır sonu), vb gibi.
+
+  5. Önceki hareketleri geri almak için yazın:		u	(küçük u)
+     Bir satırdaki tüm değişiklikleri geri almak için yazın:	U	(büyük u)
+     Geri almaları geri almak için yazın:	CTRL-R
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Ders 3.1: KOY KOMUTU
+
+
+       ** Son yaptığınız silme işlemini imleçten sona geri yerleştirmek için	p   yazın.**
+
+  1. İmleci aşağıdaki tümceciğin ilk satırına götürün.
+
+  2. Satırı silip Vim'in tamponuna yerleştirmek için   dd   yazın.
+
+  3. İmleci, silinmiş satırı nereye yerleştirmek istiyorsanız, o satırın ÜZERİNE götürün.
+
+  4. Normal kipteyken, satırı yerleştirmek için   p   yazın.
+
+  5. Tüm satırları doğru sıraya koymak için 2'den 4'e kadar olan adımları tekrar edin.
+
+     d) Sen de öğrendin mi?
+     b) MenekÅŸeler mavidir,
+     c) Akıl öğrenilir,
+     a) Güller kırmızıdır,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Ders 3.2: YERLEÅžTÄ°R KOMUTU
+
+
+  ** İmlecin altında bir karakter yerleştirmek için    r    yazın.**
+
+  1. İmleci aşağıdaki işaretlenmiş(--->) ilk satıra götürün.
+
+  2. İmleci satırdaki ilk hatanın üzerine götürün.
+
+  3. Hatayı düzeltmek için önce   r    ardından da doğru karakteri yazın.
+
+  4. İlk satır düzelene kadar adım 2 ve 3'ü tekrar edin.
+
+--->  Bu satıv yazılıvken, bivileri yamlış tuştara basmış.
+--->  Bu satır yazılırken, birileri yanlış tuşlara basmış.
+
+  5. Ders 3.2'ye geçin.
+
+NOT: Unutmayın, ezberleyerek değil kullanarak öğrenin.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Ders 3.3: DEĞİŞTİR KOMUTU
+
+
+	   ** Bir kelimenin tamamını veya parçasını değiştirmek için   cw   yazın.
+
+  1. İmleci aşağıdaki işaretlenmiş(--->) satıra götürün.
+
+  2. İmleci "sutar" daki u'nun üzerine yerleştirin.
+
+  3. Önce   cw   ardından doğru kelimeyi girin (bu durumda 'atır'.)
+
+  4. <ESC> tuşuna basın ve bir sonraki hataya gidin (değişmesi gereken ilk karakter.)
+
+  5. İlk cümle ikincisiyle aynı olana kadar adım 3 ve 4'ü tekrar edin.
+
+---> Bu sutar değiştir komutu ile değişneli gereken birkaç petime içeriyor.
+---> Bu satır değiştir komutu ile değişmesi gereken birkaç kelime içeriyor.
+
+cw'nin sadece kelimeyi değiştirmediğini, aynı zamanda sizi insert kipine götürdüğüne de dikkat edin.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      	Ders 3.4: c'Yİ KULLANARAK DAHA FAZLA DEĞİŞTİRME
+
+
+     ** Değiştir komutu sil komutu ile aynı nesnelerle kullanılır.**
+
+  1. Değiştir komutu sil ile aynı yolla çalışır. Biçim şöyledir:
+
+       [sayı]   c   nesne	   VEYA	    c	[sayı]   nesne
+
+  2. Nesneler de aynı zamanda aynıdır. Örneğin w (word), $ (satır sonu), vb. gibi.
+
+  3. Aşağıdaki işaretlenmiş(--->) ilk satıra gidin.
+
+  4. İmleci ilk hataya götürün.
+
+  5. Satırın geri kalan kısmını ikincisi gibi yapmak için   c$   yazın ve daha sonra <ESC> tuşuna basın.
+
+---> Bu satırın sonu düzeltilmek için biraz yardıma ihtiyaç duyuyor.
+---> Bu satırın sonu düzeltilmek için   c$   komutu kullanılarak yardıma ihtiyaç duyuyor.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       DERS 3 ÖZET
+
+
+  1. Silinmiş olan bir metini geri yerleştirmek için   p   yazın. Bu silinmiş metini
+     imleçten hemen SONRA geri yerleştirir (eğer bir satır silinmişse hemen imleçten sonra, alta
+     yerleÅŸtirilecektir)
+
+  2. İmlecin altındaki karakteri değiştirmek için önce   r    ardından da
+     asıl karakteri yazın.
+
+  3. Değiştir komutu belirlenen nesneyi, imleçten nesnenin sonuna kadar değiştirme imkanı verir.
+     Örneğin, bir kelimeyi imleçten sonuna kadar değiştirmek için   cw   , bir satırın tamamını
+     değiştirmek içinse   c$   yazın.
+
+  4. Değiştir için biçim şöyledir:
+
+	 [sayı]   c	nesne	      VEYA	c   [sayı]   nesne
+
+Şimdi bir sonraki derse geçin.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Ders 4.1: KONUM VE DOSYA DURUMU
+
+
+  ** Dosya içerisindeki konumunuzu ve dosyanın durumunu görmek için   CTRL-g    yazın. **
+  ** Dosya içerisindeki bir satıra gitmek için   SHIFT-g   yazın. **
+
+  Not: Adımlardan herhangi birini yapmadan önce dersin tamamını okuyun!!
+
+  1. Ctrl tuşunu basılı tutun ve   g'ye   basın. Dosyanın sonunda dosya ismini ve bulunduğunuz konumu
+     gösteren bir durum satırı görünecektir. Adım 3 için satır numarasını
+     unutmayın.
+
+  2. Dosyanın sonuna gitmek için   shift-G   'ye basın.
+
+  3. Daha önce bulunduğunuz satır numarasını yazın ve daha sonra    shift-G   'ye basın.
+     Bu sizi daha önce bulunduğunuz ve    Ctrl-g   'ye bastığınız satıra geri götürecektir.
+     (Sayılar yazılırken ekranda GÖRÜNMEYECEKLERDİR.)
+
+  4. Yapabileceğinizi düşündüğünüzde, adım 1'den 3'e kadar yapın.
+
+  Ç.N: Bu kısım orijinal metinde de biraz eksik anlatılmış gibi. Bir satır hakkında bilgi almak için
+       Ctrl-g'yi kullanın. Herhangi bir satıra gitmek içinse, önce satır numarasını yazın ve ardınan
+       shift-g'ye basın. Satır numarası girmeden basılan shift-g sizi satır sonuna götürür.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Ders 4.2: ARAMA KOMUTU
+
+
+     ** Bir kelime öbeğini aramak için   /   ile beraber kelime öbeğini girin. **
+
+  1. Normal kipteyken   /   karakterini yazın. Komut bölümü yerine   /   karakterinin ve
+     imlecin ekranın sonunda göründüğüne dikkat edin.
+
+  2. Şimdi, 'hatttaa' yazıp <ENTER> 'a basın. Bu sizin aramak istediğiniz kelime.
+
+  3. Aynı kelime öbeğini tekrar aramak için, basitçe   n   yazın.
+     Aynı kelime öbeğini zıt yönde aramak için, Shift-N yazın.
+
+  4. Eğer zıt yöne doğru bir arama yapmak istiyorsanız,  /   komutu yerine
+     ?   komutunu kullanın.
+
+---> "hatttaa" hatayı yazmanın doğru yolu değil; hatttaa bir hata.
+
+Not: Arama dosyanın sonuna ulaştığında, tekrar baştan başlayacaktır.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Ders 4.3: UYAN PARANTEZ ARAMASI
+
+
+	      ** Uyan bir ),] veya } bulmak için   %   yazın. **
+
+  1. İmleci işaretli (--->) satırdaki herhangi bir (, [ veya { karakterinin
+     üzerine götürün.
+
+  2. Şimdi   %    karakterini yazın.
+
+  3. İmleç uyan parantez veya ayracın üzerine gider.
+
+  4. Uyan ilk parantezin üzerine geri dönmek için yine   %   yazın.
+
+---> Bu ( içerisinde ('ler, ['ler ] ve {'ler } bulunan bir satırdır. ))
+
+Not: Bu içerisinde uymayan parantezler bulunan bir programın yanlışını ayıklamak için
+     son derece yararlıdır.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Ders 4.4: HATALARI DÜZELTMEK İÇİN BİR YOL
+
+
+	** 'eski' yerine 'yeni' yerleştirmek için   :s/eski/yeni/g   yazın. **
+
+  1. İmleci aşağıdaki işaretli (--->) satıra götürün.
+
+  2. :s/buu/bu  yazıp <ENTER> 'a basın. Bu komutun sadece satırdaki ilk karşılaşmayı
+     düzelttiğine dikkat edin.
+
+  3. Şimdi genel olarak satırdaki tüm değişikliği  yapmak için   :s/buu/bu/g   yazın.
+
+---> Buu birinci, buu ikinci, buu üçüncü bölüm.
+
+  4. İki satır arasındaki bir karakter katarının tümünü değiştirmek için,
+     :#,#s/eski/yeni/g  yazın, burada #,# iki satırın sayılarıdır.
+     Tüm dosyadaki karşılaşılan kelimeleri değiştirmek için  :%s/eski/yeni/g  yazın.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       DERS 4 ÖZET
+
+
+  1. Ctrl-g sizin dosyadaki konumunuzu ve dosya durumunu gösterir.
+     Shift-G dosyanın sonuna gider. Shift-G 'den önce bir sayı yazılırsa, o satıra
+     gidilir.
+
+  2. Bir sözcük öbeğinden önce / yazmak, İLERİ yönde o öbeği aratır.
+     Bir sözcük öbeğinden önce ? yazmak, GERİ yönde o öbeği aratır.
+     Bir aramadan sonra, aynı yöndeki bir sonraki karşılaşmayı bulmak için   n   ,
+     veya zıt yöndekini bulmak için Shift-N yazın.
+
+  3. İmleç bir (,),[,],{,} parantezi üzerindeyken   %   yazmak, uyan diğer eş parantezi bulur.
+
+  4. Bir satırdaki ilk 'eski'yi 'yeni' ile değiştirmek için    		:s/eski/yeni		yazın.
+     Bir satırdaki tüm 'eski'leri 'yeni' ile değiştirmek için  		:s/eski/yeni/g	 	yazın.
+     İki satır arasındaki öbekleri değiştirmek için 			:#,#s/eski/yeni/g 	yazın.
+     									 (#'lar satır numaraları)
+     Bir dosyadaki tüm karşılaşmaları değiştirmek için			:%s/eski/yeni/g 	yazın.
+     Her seferinde onay sorması için 'c' ekleyin.			:%s/eski/yeni/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		Ders 5.1: BIR DIŞ KOMUT ÇALIŞTIRMAK
+
+
+   ** Bir dış komutu çalıştırmak için   :!      ve ardından istediğiniz dış komutu yazın. **
+
+  1. İmleci ekranın altına götürmek için alışık olduğunuz  :  komutunu yazın. Bu size
+     bir komut yazma imkanı verir.
+
+  2. Şimdi ! (ünlem) karakterini yazın. Bu size bir dış komut çalıştırma
+     imkanı verir.
+
+  3. Örnek olarak ! karakterini takiben  ls  yazın ve <ENTER>'a basın. Bu size
+     o anda bulunduğunuz dizindeki dosyaları gösterecektir. Veya ls çalışmazsa :!dir
+     komutunu kullanın.
+
+Not: Herhangi bir dış komutu bu yolla çalıştırmak mümkündür.
+
+Not: Tüm  :   komutlarından sonra <ENTER> tuşuna basılmalıdır.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Ders 5.2: DOSYA YAZMAYA DEVAM
+
+
+     ** Dosyaya yapılan değişikliği kaydetmek için, :w DOSYAİSMİ  yazın. **
+
+  1. Bulunduğunuz dizini listelemek için  :!dir  veya  :!ls  yazın.
+     Komuttan sonra <ENTER> tuşuna basıcağınızı zaten biliyorsunuz.
+
+  2. Mevcut olmayan bir dosya ismi seçin, örneğin DENEME.
+
+  3. Şimdi   :w DENEME   yazın (DENEME sizin seçtiğiniz dosya ismi).
+
+  4. Bu tüm dosyayı (Vim Tutor) DENEME isminde başka bir dosyaya yazar.
+     Bunu doğrulamak için,  :!dir   yazın ve yeniden bulunduğunuz dizini listeleyin.
+
+Not: Eğer Vim'den çıkıp kaydettiğiniz DENEME dosyasını açarsanız, bunun kaydettiğiniz
+     vimtutor'un gerçek bir kopyası olduğunu görürsünüz.
+
+  5. Şimdi dosyayı şu komutları vererek silin	(MS-DOS)     :!del DENEME
+  						(veya UNIX)  :!rm DENEME
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Ders 5.3: SEÇMELİ YAZ KOMUTU
+
+
+	** Dosyanın bir bölümünü kaydetmek için,  :#,# w DOSYAİSMİ  yazın. **
+
+  1. Bir kez daha bulunduğunuz dizini görmek için  :!dir  veya  :!ls  yazın,
+     ardından DENEME gibi uygun bir dosya ismi seçin.
+
+  2. İmleci bu sayfanın başına götürün ve ardından CTRL-g'ye basarak satır numarasını
+     öğrenin. BU NUMARAYI UNUTMAYIN!
+
+  3. Şimdi sayfanın sonuna gidib ve yine CTRL-g'ye basarak satır numarasını
+     öğrenin. BU NUMARAYI DA UNUTMAYIN!
+
+  4. Bir dosyaya sadece bir bölümü kaydetmek için, :#,# w DENEME yazın. #,# sizin
+     baktığınız sayılar (üst,alt) ve DENEME dosyanızın ismidir.
+
+
+  5. Yine,  :!dir  yazarak dosyanın orada olduğuna bakın ama SİLMEYİN.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   Ders 5.4: DOSYALARI BİRLEŞTİRMEK-BÖLÜM EKLEMEK
+
+
+       ** Bir dosyanın içeriğini eklemek için  :r DOSYAİSMİ   yazın. **
+
+  1. DENEME dosyanızın önceden bulunduğundan emin olmak için  :!dir   yazın.
+
+  2. İmleci bu sayfanın başına yerleştirin.
+
+NOT: Adım 3'ü uyguladıktan sonra Ders 5.3'ü görüyor olacaksınız. Daha sonra bu
+     derse sayfasına dönün.
+
+  3. Şimdi DENEME sayfasını  :r DENEME  yazarak aktarın.
+
+NOT: Aktardığınız dosya imlecinizin hemen altına eklenecektir.
+
+  4. Dosyanın eklendiğini görmek için, geriye gidin. Ders 5.3'ten iki kopya
+     olduğunu göreceksiniz; asıl ve kopya olanı.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       DERS 5 ÖZET
+
+
+  1.  :!komut bir dış komut çalıştırır.
+
+      Bazı yararlı örnekler:
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  bir dizini listeler.
+	  :!del DOSYA      :!rm DOSYA      -  DOSYA'yı siler.
+
+  2.  :w DOSYAİSMİ o anki Vim dosyasını diske DOSYAİSMİ ile kaydeder.
+
+  3.  :#,#w DOSYAİSMİ # ile # satır arasını DOSYAİSMİ ile kaydeder.
+
+  4.  :r DOSYAİSMİ imlecin altından başlayarak DOSYAİSMİ isimli dosyanın içeriğini ekler.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 Ders 6.1: AÇ KOMUTU
+
+
+ ** İmlecin aşağısına bir satır açmak ve Insert kipine geçmek için   o    yazın. **
+
+  1. İmleci aşağıdaki işaretlenmiş (--->) satıra götürün.
+
+  2. İmlecin aşağısına bir satır açmak ve Insert kipine geçmek için
+     o   (küçük harfle) yazın.
+
+  3. Şimdi işaretlenmiş satırı kopyalayın ve Insert kipinden çıkmak için <ESC>
+     tuşuna basın.
+
+---> o  yazdıktan sonra imlec açılan satıra gidicek ve Insert kipine geçilecek.
+
+  4. İmlecin üzerinde bir satır açmak için, basitçe büyük O yazın. Bunu aşağıdaki
+     satırda deneyin.
+Bu satırın üzerine bir satır açmak için imleç bu satırdayken   Shift-o   yazın.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			Ders 6.2: EKLE KOMUTU
+
+
+	     ** İmleçten sonra metin eklemek için   a   yazın. **
+
+  1. İmleci aşağıdaki işaretlenmiş (--->) satırın sonuna götürmek için
+     Normal Kipteyken $ yazın.
+
+  2. İmlecin altındaki karakterden sonra metin eklemek için  a   (küçük harfle) yazın.
+     (Büyük  A  satırın sonuna ekler).
+
+  3. Şimdi ilk satırı tamamlayın. Ekle komutunun Insert kipiyle aynı işi yaptığına
+     dikkat edin. Tek fark metinin eklendiÄŸi yer.
+Ç.N: Eğer  a   yazarsanız imlecin altındaki karakterden hemen sonra ekleme yapabilirsiniz.
+     Eğer  Shift-a  yazarsanız imleç satır sonuna gidecek ve hemen ardına ekleme yapabileceksiniz.
+     Doğal olarak bizim örneğimizde Shift-A'yı kullanmak daha güzel olacaktır. Önce $ ardınan a
+     yazmamıza gerek kalmaz.
+
+---> Bu satırda çalışabilirsiniz
+---> Bu satırda çalışabilirsiniz. Çalışırken metin eklemeyi kullanın.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Ders 6.3: BİR BAŞKA DEĞİŞTİR KOMUTU
+
+
+      ** Birden fazla karakter değiştirmek için büyük R yazın. **
+
+  1. İmleci aşağıdaki işaretli (--->) satırların ilkine götürün.
+
+  2. İmleci işaretli olan ikinci satırdakinden farklı olan ilk kelimenin
+     başına götürün. ( "tuşları" kelimesi )
+
+  3. Şimdi büyük R yazın ve ilk satırı ikincisinin aynısı yapmak için
+     eski metinin üzerinden yenisini yazın. Siz yazdıkça metin değişecektir.
+
+---> Bu satırı ikincisinin aynısı yapmak için tuşları kullanın.
+---> Bu satırı ikincisinin aynısı yapmak için R yazın ve metini girin.
+
+  4. Çıkmak için <ESC> tuşuna bastığınızda, değişmemiş metinin aynen
+     kaldığına dikkat edin.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Ders 6.4: SET SEÇENEĞİ
+
+	  ** Bir seçenek ayarlayın , böylece bir arama veya değiştirme **
+	  ** durumu görmezden gelsin.				       **
+
+  1. 'ignore' kelimesini aramak için:
+     /ignore
+     yazın.
+     Bunu   n  tuşuna basarak birkaç kez tekrar edin
+
+  2. :set ic    yazarak 'ic' (Ignore case) ayarını seçin.
+
+  3. Tekrar  n  tuşuna basarak 'ignore' kelimseini arayın.
+     n   tuşuna basarak bu aramayı birden çok defa tekrar edin.
+
+  4. :set hls is   yazarak 'hlsearch' ve 'incsearch' ayarlarını seçin.
+
+  5. /ignore  yazarak arama komutunu tekrar verin ve ne olacağını görün.
+
+  6. Karşılaşma vurgularını iptal etmek için,
+     :nohlsearch   yazın.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       DERS 6 ÖZET
+
+
+  1. o   yazmak imlecin altında bir satır açar ve imleci bu açılmış satıra
+     Insert kipinde yerleÅŸtirir.
+     Büyük O  yazmak imlecin üzerinde bir satır açar.
+
+  2. İmlecin üzerindeki karakterden hemen sonra metin eklemek için  a   yazın.
+     Büyük A  yazmak hemen satır sonuna giderek metin eklemeye hazır hale getirir.
+
+  3. Büyük  R   yazmak Değiştir kipine girer ve çıkmak için <ESC> tuşuna
+     basılana kadar sizi bu kipte bırakır.
+
+  4. ":set xxx"  yazmak  "xxx" seçeneğini ayarlar.
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Ders 7: ÇEVİRİMİÇİ (ON-LINE) YARDIM KOMUTLARI
+
+
+		      ** Çevirimiçi yardım sistemini kullanın **
+
+  Vim geniş bir çevirimiçi yardım sistemine sahiptir. Başlamak için şu üçünü
+  deneyebilirsiniz.
+	- (eğer sahipseniz) <HELP> tuşuna basın
+	- (eğer sahipseniz) <F1> tuşuna basın
+	- :help yazın ve <ENTER> tuşuna basın
+
+  Yardım penceresini kapatmak için  :q yazıp <ENTER> tuşuna basın.
+
+  ":help" komutuna değişken (argüman) vererek herhangi bir konu hakkında
+  yardım alabilirsini. Şunları deneyin (<ENTER> tuşuna basmayı unutmayın) :
+
+	:help w
+	:help c_<T
+	:help insert-index
+	:help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       Ders 8: BİR BAŞLANGIÇ BETİĞİ OLUŞTURUN
+
+			  ** Switch on Vim features **
+			  ** Vim'in özelliklerine bakın **
+
+  Vim Vi'dan çok daha fazla özelliğe sahiptir fakat birçoğu öntanımlı olarak kapalıdır.
+  Daha fazla özellik kullanabilmek için bir "vimrc" dosyası oluşturmalısınız.
+
+  1. "vimrc" dosyasını düzenlemeye başlayın, bu işletim sisteminize göre değişir:
+
+  Ç.N: (Bu komutu verdiğinizde eğer yoksa home dizininizde .vimrc isimli bir dosya oluşacaktır.
+  Bu dosyaya vimrc örnek dosyasını aktarmak için 2. adımdaki komutu kullanacaksınız. Bu yüzden
+  vimrc dosyanızı düzenlemeden önce aşağıdaki adımların hepsini okuyun ve komutları hatırlayın.)
+
+	:edit ~/.vimrc			Unix için
+	:edit $VIM/_vimrc		MS-Windows için
+
+  2. Şimdi örnek "vimrc" dosyasını okuyun
+
+	:read $VIMRUNTIME/vimrc_example.vim
+
+  3. Dosyayı kaydedin ve çıkın
+
+	:write
+	:q
+
+  Vim'i bir dahaki sefer çalıştırdığınızda sözdizim (sytax) vurgusu kullanılacaktır.
+  Tüm tercih ettiğiniz ayarları bu "vimrc" dosyasına ekleyebilirsiniz.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Burada Vim Eğitmeni tamamlanmış oldu. Eğitmendeki amaç Vim düzenleyicisi hakkında
+  kısa bir bilgi vermek ve onu kolayca kullanmanızı sağlamaktı. Vim'in tamamını öğretmek
+  çok zordur zira Vim birçok komuta sahiptir.Bundan sonra :help user-manual" komutu ile
+  kullanıcı kılavuzunu okumalısınız.
+
+  Daha fazla okuma ve çalışma için şu kitabı öneriyoruz:
+	Vim - Vi Improved - by Steve Oualline
+	Publisher: New Riders
+  Tamamiyle Vim için hazırlanmış ilk kitap. Özellikle ilk kullanıcılar için uygun.
+  Kitapta birçok örnek ve resim var.
+  http://iccf-holland.org/click5.html adresine bakabilirsiniz.
+
+  Bu kitap daha eskidir ve Vim'den daha çok Vi içindir ancak tavsiye edilir:
+	Learning the Vi Editor - by Linda Lamb
+	Publisher: O'Reilly & Associates Inc.
+  Vi hakkında bilmek isteyeceğiniz neredeyse herşeyin bulunduğu bir kitap.
+  6.Basım aynı zamanda Vim hakkında bilgi de içermekte.
+
+  Bu eğitmen Michael C. Pierce ve Robert K. Ware tarafından yazıldı,
+  Charles Smith tarafından sağlanan fikirlerle Colorado School Of Mines,
+  Colorado State University.  E-mail: bware@mines.colorado.edu.
+
+  Vim için değiştiren : Bram Moolenaar.
+
+  Türkçeye çeviren    : Serkan "heartsmagic" Çalış    Yıl 2005
+  E-mail	      : adresimeyaz (at) yahoo com
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--- a/src/GvimExt/GvimExt.reg
+++ b/src/GvimExt/GvimExt.reg
@@ -15,6 +15,6 @@ REGEDIT4
 [HKEY_LOCAL_MACHINE\Software\Vim\Gvim]
    "path"="gvim.exe"
 
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.0]
-   "DisplayName"="Vim 7.0: Edit with Vim popup menu entry"
+[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.1a]
+   "DisplayName"="Vim 7.1a: Edit with Vim popup menu entry"
    "UninstallString"="uninstal.exe"
--- a/src/if_xcmdsrv.c
+++ b/src/if_xcmdsrv.c
@@ -37,8 +37,8 @@
 # endif
 
 /*
- * This file provides procedures that implement the command server functionality
- * of Vim when in contact with an X11 server.
+ * This file provides procedures that implement the command server
+ * functionality of Vim when in contact with an X11 server.
  *
  * Adapted from TCL/TK's send command  in tkSend.c of the tk 3.6 distribution.
  * Adapted for use in Vim by Flemming Madsen. Protocol changed to that of tk 4
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -229,7 +229,7 @@ enum key_extra
     , KE_S_XF4
 
     , KE_MOUSEDOWN	/* scroll wheel pseudo-button Down */
-    , KE_MOUSEUP		/* scroll wheel pseudo-button Up */
+    , KE_MOUSEUP	/* scroll wheel pseudo-button Up */
 
     , KE_KINS		/* keypad Insert key */
     , KE_KDEL		/* keypad Delete key */
--- a/src/move.c
+++ b/src/move.c
@@ -166,7 +166,7 @@ update_topline()
 
 #ifdef FEAT_MOUSE
     /* When dragging with the mouse, don't scroll that quickly */
-    if (mouse_dragging)
+    if (mouse_dragging > 0)
 	p_so = mouse_dragging - 1;
 #endif
 
@@ -1995,7 +1995,7 @@ scroll_cursor_bot(min_scroll, set_topbot
 	if ((((scrolled <= 0 || scrolled >= min_scroll)
 			&& extra >= (
 #ifdef FEAT_MOUSE
-			    mouse_dragging ? mouse_dragging - 1 :
+			    mouse_dragging > 0 ? mouse_dragging - 1 :
 #endif
 			    p_so))
 		    || boff.lnum + 1 > curbuf->b_ml.ml_line_count)
@@ -2209,7 +2209,7 @@ cursor_correct()
     above_wanted = p_so;
     below_wanted = p_so;
 #ifdef FEAT_MOUSE
-    if (mouse_dragging)
+    if (mouse_dragging > 0)
     {
 	above_wanted = mouse_dragging - 1;
 	below_wanted = mouse_dragging - 1;
@@ -2225,7 +2225,7 @@ cursor_correct()
     validate_botline();
     if (curwin->w_botline == curbuf->b_ml.ml_line_count + 1
 #ifdef FEAT_MOUSE
-	    && !mouse_dragging
+	    && mouse_dragging == 0
 #endif
 	    )
     {
--- a/src/os_vms.c
+++ b/src/os_vms.c
@@ -626,12 +626,13 @@ vms_fixfilename(void *instring)
 
     Fspec_Rms = buf;				/* for decc$to_vms */
 
-    if ( strchr(instring,'/') == NULL )
+    if (strchr(instring,'/') == NULL)
 	/* It is already a VMS file spec */
 	strcpy(buf, instring);
-    else if ( strchr(instring,'"') == NULL ){     /* password in the path ?   */
+    else if (strchr(instring,'"') == NULL)	/* password in the path? */
+    {
 	/* Seems it is a regular file, let guess that it is pure Unix fspec */
-	if ( decc$to_vms(instring, vms_fspec_proc, 0, 0) <= 0 )
+	if (decc$to_vms(instring, vms_fspec_proc, 0, 0) <= 0)
 	    /* No... it must be mixed */
 	    vms_unix_mixed_filespec(instring, buf);
     }
@@ -643,6 +644,7 @@ vms_fixfilename(void *instring)
 
     return buf;
 }
+
 /*
  * Remove version number from file name
  * we need it in some special cases as:
--- a/src/po/README_mvc.txt
+++ b/src/po/README_mvc.txt
@@ -4,7 +4,7 @@ This file explains how to create and mai
 gnu-gettext.win32, a Windows port of gettext by Franco Bez
 <franco.bez@gmx.de>.  You can find it at:
 
-	http://home.a-city.de/franco.bez/gettext/gettext_win32_en.html
+	http://people.freenet.de/franco.bez/gettext/gettext_win32_en.html
 
 First read the README.txt file in this directory for general remarks on
 translating Vim messages.
@@ -12,18 +12,32 @@ translating Vim messages.
 
 SETUP
 
-Set the enviroment variable LANGUAGE to the language code for the language you
-are translating Vim messages to.  Languagde codes are typically two characters
-and you can find a list of them at:
+Set the environment variable LANGUAGE to the language code for the language
+you are translating Vim messages to.  Language codes are typically two
+characters and you can find a list of them at:
 
 	http://www.geocities.com/click2speak/languages.html
 
+Another possibility is to use the gnuwin32 port of gettext. This is
+recommended especially if you use already gnuwin32 tools to gunzip, bunzip,
+patch etc. these files. You find the gnuwin32 version of gettext here:
+
+        http://gnuwin32.sourceforge.net/packages/gettext.htm
+
+Yet another very strait forward way is to get the sources of gettext from
+
+        http://www.gnu.org/software/gettext/gettext.html
+
+and build your own version of these tools. The documentation states that this
+should be possible with MSVC4.0, MSVC5.0, MSVC6.0 or MSVC7.0, but you can
+build it even successfully with MSVC8.0.
+
 The LANGUAGE environment variable can be set from the command line, by adding
 a line to your autoexec.bat file, or by defining a user variable from the
 Advanced tab in the System control panel.
 
 Next, edit Make_mvc.mak so that GETTEXT_PATH points the binary directory of
-the intallation.
+the installation.
 
 
 CREATING A NEW TRANSLATION
@@ -43,7 +57,7 @@ highlighting turned on then untranslated
 You will also need to edit the file names in the comments in the .po file.
 You need to remove the absolute directory specification (which has the form
 c:\vim61\src\).  You can do this in Vim with the following command with the
-appropriate directory specfication for where you have installed the Vim
+appropriate directory specification for where you have installed the Vim
 source:
 
 	%s/c:\\vim61\\src\\//g
@@ -57,7 +71,7 @@ with the following command:
 
 	nmake -f Make_mvc.mak xx.po
 
-where xx is the langauge code for the language needing translations.  The
+where xx is the language code for the language needing translations.  The
 original .po file is copied to xx.po.orig.
 
 
--- a/src/po/de.po
+++ b/src/po/de.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim(deutsch)\n"
 "POT-Creation-Date: 2006-04-02 11:30+0200\n"
-"PO-Revision-Date: 2006-04-02 17:26+0200\n"
+"PO-Revision-Date: 2006-06-18 12:34+0200\n"
 "Last-Translator: Georg Dahn <gorgyd@yahoo.co.uk>\n"
 "Language-Team: German <de@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -3502,7 +3502,7 @@ msgid ""
 "&Quit\n"
 "&Abort"
 msgstr ""
-"Öffnen nur zum &Lesen\n"
+"Nur zum &Lesen öffnen\n"
 "Trotzdem &editieren\n"
 "&Wiederherstellen\n"
 "&Beenden\n"
@@ -3516,10 +3516,10 @@ msgid ""
 "&Quit\n"
 "&Abort"
 msgstr ""
-"Öffnen nur zum &Lesen\n"
+"Nur zum &Lesen öffnen\n"
 "Trotzdem &editieren\n"
 "&Wiederherstellen\n"
-"&Löschen\n"
+"&Datei Löschen\n"
 "&Beenden\n"
 "&Abbrechen"
 
@@ -6131,3 +6131,5 @@ msgstr ""
 "Die Definition von COMPOUNDPERMITFLAG nach dem PFX Element kann falsches Ergebnis in Zeile %s ergeben "
 "%d"
 
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: Ungültige Argumente für die Funktion %s"
--- a/src/po/pl.UTF-8.po
+++ b/src/po/pl.UTF-8.po
@@ -1,22 +1,22 @@
 # translation of pl.po to Polish
 # Polish Translation for Vim
 #
-# updated 2006 for vim-7.0
+# updated 2007 for vim-7.0
 #
 # FIRST AUTHOR Marcin Dalecki <martin@dalecki.de>, 2000.
-# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006.
+# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007.
 msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-27 18:27+0200\n"
-"PO-Revision-Date: 2006-04-27 19:15+0200\n"
+"POT-Creation-Date: 2007-04-30 20:03+0200\n"
+"PO-Revision-Date: 2007-04-30 20:07+0200\n"
 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
 "Language-Team: Polish <kde-transl@mer.chemia.polsl.gliwice.pl>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.2\n"
+"X-Generator: KBabel 1.11.4\n"
 
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Nie mogę zarezerwować bufora; zakończenie..."
@@ -194,6 +194,9 @@ msgstr "E98: Nie mogę wczytać wyjścia różnicy"
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Bieżący bufor nie jest w trybie różnic"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: Żaden inny bufor w trybie diff nie jest modyfikowalny"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Brak innego bufora w trybie różnic"
 
@@ -619,6 +622,10 @@ msgid "E706: Variable type mismatch for:
 msgstr "E706: Nieprawidłowy typ zmiennej dla: %s"
 
 #, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Nie mogę usunąć zmiennej %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Wartość jest zablokowana: %s"
 
@@ -883,6 +890,7 @@ msgstr " zakładki"
 msgid " FAILED"
 msgstr " NIE POWIODÅO SIĘ"
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: Plik viminfo jest niezapisywalny: %s"
@@ -1457,6 +1465,9 @@ msgstr "jest katalogiem"
 msgid "is not a file"
 msgstr "nie jest plikiem"
 
+msgid "is a device (disabled with 'opendevice' option"
+msgstr "jest urządzeniem (wyłączonym w opcji 'opendevice'"
+
 msgid "[New File]"
 msgstr "[Nowy Plik]"
 
@@ -1553,6 +1564,9 @@ msgstr "Częściowy zapis niemożliwy dla buforów NetBeans"
 msgid "is not a file or writable device"
 msgstr "nie jest plikiem lub zapisywalnym przyrzÄ…dem"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "zapisywanie do urządzenia wyłączone w opcji 'opendevice'"
+
 msgid "is read-only (add ! to override)"
 msgstr "jest tylko do odczytu (wymuÅ› poprzez !)"
 
@@ -3288,6 +3302,9 @@ msgstr ""
 ",\n"
 "lub plik został uszkodzony."
 
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " został uszkodzony (wielkość strony jest mniejsza niż najmniejsza wartość).\n"
+
 #, c-format
 msgid "Using swap file \"%s\""
 msgstr "Używam pliku wymiany \"%s\""
@@ -3626,6 +3643,10 @@ msgstr "E328: Menu istnieje tylko w inny
 msgid "E329: No menu \"%s\""
 msgstr "E329: Nie ma menu \"%s\""
 
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Pusta nazwa menu"
+
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Trop menu nie może prowadzić do podmenu"
 
@@ -4999,6 +5020,7 @@ msgstr "Przykro mi, brak podpowiedzi"
 msgid "Sorry, only %ld suggestions"
 msgstr "Przykro mi, tylko %ld podpowiedzi"
 
+#. for when 'cmdheight' > 1
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
@@ -5423,6 +5445,13 @@ msgstr ""
 
 msgid ""
 "\n"
+"MS-Windows 64 bit GUI version"
+msgstr ""
+"\n"
+"64 bitowa wersja GUI dla MS-Windows"
+
+msgid ""
+"\n"
 "MS-Windows 32 bit GUI version"
 msgstr ""
 "\n"
@@ -6016,8 +6045,8 @@ msgid "E46: Cannot change read-only vari
 msgstr "E46: Nie mogę zmienić zmiennej tylko do odczytu \"%s\""
 
 #, c-format
-msgid "E46: Cannot set variable in the sandbox: \"%s\""
-msgstr "E46: Nie mogę ustawić zmiennej w piaskownicy: \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Nie mogę ustawić zmiennej w piaskownicy: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Błąd w trakcie czytania pliku błędów"
--- a/src/po/pl.cp1250.po
+++ b/src/po/pl.cp1250.po
@@ -1,22 +1,22 @@
 # translation of pl.po to Polish
 # Polish Translation for Vim
 #
-# updated 2006 for vim-7.0
+# updated 2007 for vim-7.0
 #
 # FIRST AUTHOR Marcin Dalecki <martin@dalecki.de>, 2000.
-# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006.
+# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007.
 msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-04-27 18:27+0200\n"
-"PO-Revision-Date: 2006-04-27 19:15+0200\n"
+"POT-Creation-Date: 2007-04-30 20:03+0200\n"
+"PO-Revision-Date: 2007-04-30 20:07+0200\n"
 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
 "Language-Team: Polish <kde-transl@mer.chemia.polsl.gliwice.pl>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp1250\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.2\n"
+"X-Generator: KBabel 1.11.4\n"
 
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Nie mogê zarezerwowaæ bufora; zakoñczenie..."
@@ -194,6 +194,9 @@ msgstr "E98: Nie mogê wczytaæ wyjœcia ró¿nicy"
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Bie¿¹cy bufor nie jest w trybie ró¿nic"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: ¯aden inny bufor w trybie diff nie jest modyfikowalny"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Brak innego bufora w trybie ró¿nic"
 
@@ -619,6 +622,10 @@ msgid "E706: Variable type mismatch for:
 msgstr "E706: Nieprawid³owy typ zmiennej dla: %s"
 
 #, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Nie mogê usun¹æ zmiennej %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: WartoϾ jest zablokowana: %s"
 
@@ -883,6 +890,7 @@ msgstr " zak³adki"
 msgid " FAILED"
 msgstr " NIE POWIOD£O SIÊ"
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: Plik viminfo jest niezapisywalny: %s"
@@ -1457,6 +1465,9 @@ msgstr "jest katalogiem"
 msgid "is not a file"
 msgstr "nie jest plikiem"
 
+msgid "is a device (disabled with 'opendevice' option"
+msgstr "jest urz¹dzeniem (wy³¹czonym w opcji 'opendevice'"
+
 msgid "[New File]"
 msgstr "[Nowy Plik]"
 
@@ -1553,6 +1564,9 @@ msgstr "Czêœciowy zapis niemo¿liwy dla buforów NetBeans"
 msgid "is not a file or writable device"
 msgstr "nie jest plikiem lub zapisywalnym przyrz¹dem"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "zapisywanie do urz¹dzenia wy³¹czone w opcji 'opendevice'"
+
 msgid "is read-only (add ! to override)"
 msgstr "jest tylko do odczytu (wymuœ poprzez !)"
 
@@ -3288,6 +3302,9 @@ msgstr ""
 ",\n"
 "lub plik zosta³ uszkodzony."
 
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " zosta³ uszkodzony (wielkoœæ strony jest mniejsza ni¿ najmniejsza wartoœæ).\n"
+
 #, c-format
 msgid "Using swap file \"%s\""
 msgstr "U¿ywam pliku wymiany \"%s\""
@@ -3626,6 +3643,10 @@ msgstr "E328: Menu istnieje tylko w inny
 msgid "E329: No menu \"%s\""
 msgstr "E329: Nie ma menu \"%s\""
 
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Pusta nazwa menu"
+
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Trop menu nie mo¿e prowadziæ do podmenu"
 
@@ -4999,6 +5020,7 @@ msgstr "Przykro mi, brak podpowiedzi"
 msgid "Sorry, only %ld suggestions"
 msgstr "Przykro mi, tylko %ld podpowiedzi"
 
+#. for when 'cmdheight' > 1
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
@@ -5423,6 +5445,13 @@ msgstr ""
 
 msgid ""
 "\n"
+"MS-Windows 64 bit GUI version"
+msgstr ""
+"\n"
+"64 bitowa wersja GUI dla MS-Windows"
+
+msgid ""
+"\n"
 "MS-Windows 32 bit GUI version"
 msgstr ""
 "\n"
@@ -6016,8 +6045,8 @@ msgid "E46: Cannot change read-only vari
 msgstr "E46: Nie mogê zmieniæ zmiennej tylko do odczytu \"%s\""
 
 #, c-format
-msgid "E46: Cannot set variable in the sandbox: \"%s\""
-msgstr "E46: Nie mogê ustawiæ zmiennej w piaskownicy: \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Nie mogê ustawiæ zmiennej w piaskownicy: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: B³¹d w trakcie czytania pliku b³êdów"
--- a/src/proto/charset.pro
+++ b/src/proto/charset.pro
@@ -1,56 +1,56 @@
 /* charset.c */
-extern int init_chartab __ARGS((void));
-extern int buf_init_chartab __ARGS((buf_T *buf, int global));
-extern void trans_characters __ARGS((char_u *buf, int bufsize));
-extern char_u *transstr __ARGS((char_u *s));
-extern char_u *str_foldcase __ARGS((char_u *str, int orglen, char_u *buf, int buflen));
-extern char_u *transchar __ARGS((int c));
-extern char_u *transchar_byte __ARGS((int c));
-extern void transchar_nonprint __ARGS((char_u *buf, int c));
-extern void transchar_hex __ARGS((char_u *buf, int c));
-extern int byte2cells __ARGS((int b));
-extern int char2cells __ARGS((int c));
-extern int ptr2cells __ARGS((char_u *p));
-extern int vim_strsize __ARGS((char_u *s));
-extern int vim_strnsize __ARGS((char_u *s, int len));
-extern int chartabsize __ARGS((char_u *p, colnr_T col));
-extern int linetabsize __ARGS((char_u *s));
-extern int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
-extern int vim_isIDc __ARGS((int c));
-extern int vim_iswordc __ARGS((int c));
-extern int vim_iswordp __ARGS((char_u *p));
-extern int vim_iswordc_buf __ARGS((char_u *p, buf_T *buf));
-extern int vim_isfilec __ARGS((int c));
-extern int vim_isprintc __ARGS((int c));
-extern int vim_isprintc_strict __ARGS((int c));
-extern int lbr_chartabsize __ARGS((unsigned char *s, colnr_T col));
-extern int lbr_chartabsize_adv __ARGS((char_u **s, colnr_T col));
-extern int win_lbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp));
-extern int in_win_border __ARGS((win_T *wp, colnr_T vcol));
-extern void getvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
-extern colnr_T getvcol_nolist __ARGS((pos_T *posp));
-extern void getvvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
-extern void getvcols __ARGS((win_T *wp, pos_T *pos1, pos_T *pos2, colnr_T *left, colnr_T *right));
-extern char_u *skipwhite __ARGS((char_u *p));
-extern char_u *skipdigits __ARGS((char_u *p));
-extern char_u *skiphex __ARGS((char_u *p));
-extern char_u *skiptodigit __ARGS((char_u *p));
-extern char_u *skiptohex __ARGS((char_u *p));
-extern int vim_isdigit __ARGS((int c));
-extern int vim_isxdigit __ARGS((int c));
-extern int vim_islower __ARGS((int c));
-extern int vim_isupper __ARGS((int c));
-extern int vim_toupper __ARGS((int c));
-extern int vim_tolower __ARGS((int c));
-extern char_u *skiptowhite __ARGS((char_u *p));
-extern char_u *skiptowhite_esc __ARGS((char_u *p));
-extern long getdigits __ARGS((char_u **pp));
-extern int vim_isblankline __ARGS((char_u *lbuf));
-extern void vim_str2nr __ARGS((char_u *start, int *hexp, int *len, int dooct, int dohex, long *nptr, unsigned long *unptr));
-extern int hex2nr __ARGS((int c));
-extern int hexhex2nr __ARGS((char_u *p));
-extern int rem_backslash __ARGS((char_u *str));
-extern void backslash_halve __ARGS((char_u *p));
-extern char_u *backslash_halve_save __ARGS((char_u *p));
-extern void ebcdic2ascii __ARGS((char_u *buffer, int len));
+int init_chartab __ARGS((void));
+int buf_init_chartab __ARGS((buf_T *buf, int global));
+void trans_characters __ARGS((char_u *buf, int bufsize));
+char_u *transstr __ARGS((char_u *s));
+char_u *str_foldcase __ARGS((char_u *str, int orglen, char_u *buf, int buflen));
+char_u *transchar __ARGS((int c));
+char_u *transchar_byte __ARGS((int c));
+void transchar_nonprint __ARGS((char_u *buf, int c));
+void transchar_hex __ARGS((char_u *buf, int c));
+int byte2cells __ARGS((int b));
+int char2cells __ARGS((int c));
+int ptr2cells __ARGS((char_u *p));
+int vim_strsize __ARGS((char_u *s));
+int vim_strnsize __ARGS((char_u *s, int len));
+int chartabsize __ARGS((char_u *p, colnr_T col));
+int linetabsize __ARGS((char_u *s));
+int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
+int vim_isIDc __ARGS((int c));
+int vim_iswordc __ARGS((int c));
+int vim_iswordp __ARGS((char_u *p));
+int vim_iswordc_buf __ARGS((char_u *p, buf_T *buf));
+int vim_isfilec __ARGS((int c));
+int vim_isprintc __ARGS((int c));
+int vim_isprintc_strict __ARGS((int c));
+int lbr_chartabsize __ARGS((unsigned char *s, colnr_T col));
+int lbr_chartabsize_adv __ARGS((char_u **s, colnr_T col));
+int win_lbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp));
+int in_win_border __ARGS((win_T *wp, colnr_T vcol));
+void getvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
+colnr_T getvcol_nolist __ARGS((pos_T *posp));
+void getvvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
+void getvcols __ARGS((win_T *wp, pos_T *pos1, pos_T *pos2, colnr_T *left, colnr_T *right));
+char_u *skipwhite __ARGS((char_u *p));
+char_u *skipdigits __ARGS((char_u *p));
+char_u *skiphex __ARGS((char_u *p));
+char_u *skiptodigit __ARGS((char_u *p));
+char_u *skiptohex __ARGS((char_u *p));
+int vim_isdigit __ARGS((int c));
+int vim_isxdigit __ARGS((int c));
+int vim_islower __ARGS((int c));
+int vim_isupper __ARGS((int c));
+int vim_toupper __ARGS((int c));
+int vim_tolower __ARGS((int c));
+char_u *skiptowhite __ARGS((char_u *p));
+char_u *skiptowhite_esc __ARGS((char_u *p));
+long getdigits __ARGS((char_u **pp));
+int vim_isblankline __ARGS((char_u *lbuf));
+void vim_str2nr __ARGS((char_u *start, int *hexp, int *len, int dooct, int dohex, long *nptr, unsigned long *unptr));
+int hex2nr __ARGS((int c));
+int hexhex2nr __ARGS((char_u *p));
+int rem_backslash __ARGS((char_u *str));
+void backslash_halve __ARGS((char_u *p));
+char_u *backslash_halve_save __ARGS((char_u *p));
+void ebcdic2ascii __ARGS((char_u *buffer, int len));
 /* vim: set ft=c : */
--- a/src/proto/diff.pro
+++ b/src/proto/diff.pro
@@ -1,26 +1,26 @@
 /* diff.c */
-extern void diff_buf_delete __ARGS((buf_T *buf));
-extern void diff_buf_adjust __ARGS((win_T *win));
-extern void diff_buf_add __ARGS((buf_T *buf));
-extern void diff_invalidate __ARGS((buf_T *buf));
-extern void diff_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
-extern void ex_diffupdate __ARGS((exarg_T *eap));
-extern void ex_diffpatch __ARGS((exarg_T *eap));
-extern void ex_diffsplit __ARGS((exarg_T *eap));
-extern void ex_diffthis __ARGS((exarg_T *eap));
-extern void diff_win_options __ARGS((win_T *wp, int addbuf));
-extern void ex_diffoff __ARGS((exarg_T *eap));
-extern void diff_clear __ARGS((tabpage_T *tp));
-extern int diff_check __ARGS((win_T *wp, linenr_T lnum));
-extern int diff_check_fill __ARGS((win_T *wp, linenr_T lnum));
-extern void diff_set_topline __ARGS((win_T *fromwin, win_T *towin));
-extern int diffopt_changed __ARGS((void));
-extern int diffopt_horizontal __ARGS((void));
-extern int diff_find_change __ARGS((win_T *wp, linenr_T lnum, int *startp, int *endp));
-extern int diff_infold __ARGS((win_T *wp, linenr_T lnum));
-extern void nv_diffgetput __ARGS((int put));
-extern void ex_diffgetput __ARGS((exarg_T *eap));
-extern int diff_mode_buf __ARGS((buf_T *buf));
-extern int diff_move_to __ARGS((int dir, long count));
-extern linenr_T diff_lnum_win __ARGS((linenr_T lnum, win_T *wp));
+void diff_buf_delete __ARGS((buf_T *buf));
+void diff_buf_adjust __ARGS((win_T *win));
+void diff_buf_add __ARGS((buf_T *buf));
+void diff_invalidate __ARGS((buf_T *buf));
+void diff_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
+void ex_diffupdate __ARGS((exarg_T *eap));
+void ex_diffpatch __ARGS((exarg_T *eap));
+void ex_diffsplit __ARGS((exarg_T *eap));
+void ex_diffthis __ARGS((exarg_T *eap));
+void diff_win_options __ARGS((win_T *wp, int addbuf));
+void ex_diffoff __ARGS((exarg_T *eap));
+void diff_clear __ARGS((tabpage_T *tp));
+int diff_check __ARGS((win_T *wp, linenr_T lnum));
+int diff_check_fill __ARGS((win_T *wp, linenr_T lnum));
+void diff_set_topline __ARGS((win_T *fromwin, win_T *towin));
+int diffopt_changed __ARGS((void));
+int diffopt_horizontal __ARGS((void));
+int diff_find_change __ARGS((win_T *wp, linenr_T lnum, int *startp, int *endp));
+int diff_infold __ARGS((win_T *wp, linenr_T lnum));
+void nv_diffgetput __ARGS((int put));
+void ex_diffgetput __ARGS((exarg_T *eap));
+int diff_mode_buf __ARGS((buf_T *buf));
+int diff_move_to __ARGS((int dir, long count));
+linenr_T diff_lnum_win __ARGS((linenr_T lnum, win_T *wp));
 /* vim: set ft=c : */
--- a/src/proto/ex_eval.pro
+++ b/src/proto/ex_eval.pro
@@ -1,32 +1,32 @@
 /* ex_eval.c */
-extern int aborting __ARGS((void));
-extern void update_force_abort __ARGS((void));
-extern int should_abort __ARGS((int retcode));
-extern int aborted_in_try __ARGS((void));
-extern int cause_errthrow __ARGS((char_u *mesg, int severe, int *ignore));
-extern void do_errthrow __ARGS((struct condstack *cstack, char_u *cmdname));
-extern int do_intthrow __ARGS((struct condstack *cstack));
-extern void discard_current_exception __ARGS((void));
-extern void report_make_pending __ARGS((int pending, void *value));
-extern void report_resume_pending __ARGS((int pending, void *value));
-extern void report_discard_pending __ARGS((int pending, void *value));
-extern void ex_if __ARGS((exarg_T *eap));
-extern void ex_endif __ARGS((exarg_T *eap));
-extern void ex_else __ARGS((exarg_T *eap));
-extern void ex_while __ARGS((exarg_T *eap));
-extern void ex_continue __ARGS((exarg_T *eap));
-extern void ex_break __ARGS((exarg_T *eap));
-extern void ex_endwhile __ARGS((exarg_T *eap));
-extern void ex_throw __ARGS((exarg_T *eap));
-extern void do_throw __ARGS((struct condstack *cstack));
-extern void ex_try __ARGS((exarg_T *eap));
-extern void ex_catch __ARGS((exarg_T *eap));
-extern void ex_finally __ARGS((exarg_T *eap));
-extern void ex_endtry __ARGS((exarg_T *eap));
-extern void enter_cleanup __ARGS((cleanup_T *csp));
-extern void leave_cleanup __ARGS((cleanup_T *csp));
-extern int cleanup_conditionals __ARGS((struct condstack *cstack, int searched_cond, int inclusive));
-extern void rewind_conditionals __ARGS((struct condstack *cstack, int idx, int cond_type, int *cond_level));
-extern void ex_endfunction __ARGS((exarg_T *eap));
-extern int has_loop_cmd __ARGS((char_u *p));
+int aborting __ARGS((void));
+void update_force_abort __ARGS((void));
+int should_abort __ARGS((int retcode));
+int aborted_in_try __ARGS((void));
+int cause_errthrow __ARGS((char_u *mesg, int severe, int *ignore));
+void do_errthrow __ARGS((struct condstack *cstack, char_u *cmdname));
+int do_intthrow __ARGS((struct condstack *cstack));
+void discard_current_exception __ARGS((void));
+void report_make_pending __ARGS((int pending, void *value));
+void report_resume_pending __ARGS((int pending, void *value));
+void report_discard_pending __ARGS((int pending, void *value));
+void ex_if __ARGS((exarg_T *eap));
+void ex_endif __ARGS((exarg_T *eap));
+void ex_else __ARGS((exarg_T *eap));
+void ex_while __ARGS((exarg_T *eap));
+void ex_continue __ARGS((exarg_T *eap));
+void ex_break __ARGS((exarg_T *eap));
+void ex_endwhile __ARGS((exarg_T *eap));
+void ex_throw __ARGS((exarg_T *eap));
+void do_throw __ARGS((struct condstack *cstack));
+void ex_try __ARGS((exarg_T *eap));
+void ex_catch __ARGS((exarg_T *eap));
+void ex_finally __ARGS((exarg_T *eap));
+void ex_endtry __ARGS((exarg_T *eap));
+void enter_cleanup __ARGS((cleanup_T *csp));
+void leave_cleanup __ARGS((cleanup_T *csp));
+int cleanup_conditionals __ARGS((struct condstack *cstack, int searched_cond, int inclusive));
+void rewind_conditionals __ARGS((struct condstack *cstack, int idx, int cond_type, int *cond_level));
+void ex_endfunction __ARGS((exarg_T *eap));
+int has_loop_cmd __ARGS((char_u *p));
 /* vim: set ft=c : */
--- a/src/proto/ex_getln.pro
+++ b/src/proto/ex_getln.pro
@@ -1,56 +1,56 @@
 /* ex_getln.c */
-extern char_u *getcmdline __ARGS((int firstc, long count, int indent));
-extern char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr, int xp_context, char_u *xp_arg));
-extern int text_locked __ARGS((void));
-extern void text_locked_msg __ARGS((void));
-extern int curbuf_locked __ARGS((void));
-extern char_u *getexline __ARGS((int c, void *dummy, int indent));
-extern char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
-extern int cmdline_overstrike __ARGS((void));
-extern int cmdline_at_end __ARGS((void));
-extern colnr_T cmdline_getvcol_cursor __ARGS((void));
-extern void free_cmdline_buf __ARGS((void));
-extern void putcmdline __ARGS((int c, int shift));
-extern void unputcmdline __ARGS((void));
-extern int put_on_cmdline __ARGS((char_u *str, int len, int redraw));
-extern char_u *save_cmdline_alloc __ARGS((void));
-extern void restore_cmdline_alloc __ARGS((char_u *p));
-extern void cmdline_paste_str __ARGS((char_u *s, int literally));
-extern void redrawcmdline __ARGS((void));
-extern void redrawcmd __ARGS((void));
-extern void compute_cmdrow __ARGS((void));
-extern void gotocmdline __ARGS((int clr));
-extern char_u *ExpandOne __ARGS((expand_T *xp, char_u *str, char_u *orig, int options, int mode));
-extern void ExpandInit __ARGS((expand_T *xp));
-extern void ExpandCleanup __ARGS((expand_T *xp));
-extern void ExpandEscape __ARGS((expand_T *xp, char_u *str, int numfiles, char_u **files, int options));
-extern void tilde_replace __ARGS((char_u *orig_pat, int num_files, char_u **files));
-extern char_u *sm_gettail __ARGS((char_u *s));
-extern char_u *addstar __ARGS((char_u *fname, int len, int context));
-extern void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
-extern int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
-extern int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
-extern char_u *globpath __ARGS((char_u *path, char_u *file));
-extern void init_history __ARGS((void));
-extern int get_histtype __ARGS((char_u *name));
-extern void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
-extern int get_history_idx __ARGS((int histype));
-extern char_u *get_cmdline_str __ARGS((void));
-extern int get_cmdline_pos __ARGS((void));
-extern int set_cmdline_pos __ARGS((int pos));
-extern int get_cmdline_type __ARGS((void));
-extern char_u *get_history_entry __ARGS((int histype, int idx));
-extern int clr_history __ARGS((int histype));
-extern int del_history_entry __ARGS((int histype, char_u *str));
-extern int del_history_idx __ARGS((int histype, int idx));
-extern void remove_key_from_history __ARGS((void));
-extern int get_list_range __ARGS((char_u **str, int *num1, int *num2));
-extern void ex_history __ARGS((exarg_T *eap));
-extern void prepare_viminfo_history __ARGS((int asklen));
-extern int read_viminfo_history __ARGS((vir_T *virp));
-extern void finish_viminfo_history __ARGS((void));
-extern void write_viminfo_history __ARGS((FILE *fp));
-extern void cmd_pchar __ARGS((int c, int offset));
-extern int cmd_gchar __ARGS((int offset));
-extern char_u *script_get __ARGS((exarg_T *eap, char_u *cmd));
+char_u *getcmdline __ARGS((int firstc, long count, int indent));
+char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr, int xp_context, char_u *xp_arg));
+int text_locked __ARGS((void));
+void text_locked_msg __ARGS((void));
+int curbuf_locked __ARGS((void));
+char_u *getexline __ARGS((int c, void *dummy, int indent));
+char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
+int cmdline_overstrike __ARGS((void));
+int cmdline_at_end __ARGS((void));
+colnr_T cmdline_getvcol_cursor __ARGS((void));
+void free_cmdline_buf __ARGS((void));
+void putcmdline __ARGS((int c, int shift));
+void unputcmdline __ARGS((void));
+int put_on_cmdline __ARGS((char_u *str, int len, int redraw));
+char_u *save_cmdline_alloc __ARGS((void));
+void restore_cmdline_alloc __ARGS((char_u *p));
+void cmdline_paste_str __ARGS((char_u *s, int literally));
+void redrawcmdline __ARGS((void));
+void redrawcmd __ARGS((void));
+void compute_cmdrow __ARGS((void));
+void gotocmdline __ARGS((int clr));
+char_u *ExpandOne __ARGS((expand_T *xp, char_u *str, char_u *orig, int options, int mode));
+void ExpandInit __ARGS((expand_T *xp));
+void ExpandCleanup __ARGS((expand_T *xp));
+void ExpandEscape __ARGS((expand_T *xp, char_u *str, int numfiles, char_u **files, int options));
+void tilde_replace __ARGS((char_u *orig_pat, int num_files, char_u **files));
+char_u *sm_gettail __ARGS((char_u *s));
+char_u *addstar __ARGS((char_u *fname, int len, int context));
+void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+char_u *globpath __ARGS((char_u *path, char_u *file));
+void init_history __ARGS((void));
+int get_histtype __ARGS((char_u *name));
+void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep));
+int get_history_idx __ARGS((int histype));
+char_u *get_cmdline_str __ARGS((void));
+int get_cmdline_pos __ARGS((void));
+int set_cmdline_pos __ARGS((int pos));
+int get_cmdline_type __ARGS((void));
+char_u *get_history_entry __ARGS((int histype, int idx));
+int clr_history __ARGS((int histype));
+int del_history_entry __ARGS((int histype, char_u *str));
+int del_history_idx __ARGS((int histype, int idx));
+void remove_key_from_history __ARGS((void));
+int get_list_range __ARGS((char_u **str, int *num1, int *num2));
+void ex_history __ARGS((exarg_T *eap));
+void prepare_viminfo_history __ARGS((int asklen));
+int read_viminfo_history __ARGS((vir_T *virp));
+void finish_viminfo_history __ARGS((void));
+void write_viminfo_history __ARGS((FILE *fp));
+void cmd_pchar __ARGS((int c, int offset));
+int cmd_gchar __ARGS((int offset));
+char_u *script_get __ARGS((exarg_T *eap, char_u *cmd));
 /* vim: set ft=c : */
--- a/src/proto/fold.pro
+++ b/src/proto/fold.pro
@@ -1,41 +1,41 @@
 /* fold.c */
-extern void copyFoldingState __ARGS((win_T *wp_from, win_T *wp_to));
-extern int hasAnyFolding __ARGS((win_T *win));
-extern int hasFolding __ARGS((linenr_T lnum, linenr_T *firstp, linenr_T *lastp));
-extern int hasFoldingWin __ARGS((win_T *win, linenr_T lnum, linenr_T *firstp, linenr_T *lastp, int cache, foldinfo_T *infop));
-extern int foldLevel __ARGS((linenr_T lnum));
-extern int lineFolded __ARGS((win_T *win, linenr_T lnum));
-extern long foldedCount __ARGS((win_T *win, linenr_T lnum, foldinfo_T *infop));
-extern int foldmethodIsManual __ARGS((win_T *wp));
-extern int foldmethodIsIndent __ARGS((win_T *wp));
-extern int foldmethodIsExpr __ARGS((win_T *wp));
-extern int foldmethodIsMarker __ARGS((win_T *wp));
-extern int foldmethodIsSyntax __ARGS((win_T *wp));
-extern int foldmethodIsDiff __ARGS((win_T *wp));
-extern void closeFold __ARGS((linenr_T lnum, long count));
-extern void closeFoldRecurse __ARGS((linenr_T lnum));
-extern void opFoldRange __ARGS((linenr_T first, linenr_T last, int opening, int recurse, int had_visual));
-extern void openFold __ARGS((linenr_T lnum, long count));
-extern void openFoldRecurse __ARGS((linenr_T lnum));
-extern void foldOpenCursor __ARGS((void));
-extern void newFoldLevel __ARGS((void));
-extern void foldCheckClose __ARGS((void));
-extern int foldManualAllowed __ARGS((int create));
-extern void foldCreate __ARGS((linenr_T start, linenr_T end));
-extern void deleteFold __ARGS((linenr_T start, linenr_T end, int recursive, int had_visual));
-extern void clearFolding __ARGS((win_T *win));
-extern void foldUpdate __ARGS((win_T *wp, linenr_T top, linenr_T bot));
-extern void foldUpdateAll __ARGS((win_T *win));
-extern int foldMoveTo __ARGS((int updown, int dir, long count));
-extern void foldInitWin __ARGS((win_T *newwin));
-extern int find_wl_entry __ARGS((win_T *win, linenr_T lnum));
-extern void foldAdjustVisual __ARGS((void));
-extern void foldAdjustCursor __ARGS((void));
-extern void cloneFoldGrowArray __ARGS((garray_T *from, garray_T *to));
-extern void deleteFoldRecurse __ARGS((garray_T *gap));
-extern void foldMarkAdjust __ARGS((win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after));
-extern int getDeepestNesting __ARGS((void));
-extern char_u *get_foldtext __ARGS((win_T *wp, linenr_T lnum, linenr_T lnume, foldinfo_T *foldinfo, char_u *buf));
-extern void foldtext_cleanup __ARGS((char_u *str));
-extern int put_folds __ARGS((FILE *fd, win_T *wp));
+void copyFoldingState __ARGS((win_T *wp_from, win_T *wp_to));
+int hasAnyFolding __ARGS((win_T *win));
+int hasFolding __ARGS((linenr_T lnum, linenr_T *firstp, linenr_T *lastp));
+int hasFoldingWin __ARGS((win_T *win, linenr_T lnum, linenr_T *firstp, linenr_T *lastp, int cache, foldinfo_T *infop));
+int foldLevel __ARGS((linenr_T lnum));
+int lineFolded __ARGS((win_T *win, linenr_T lnum));
+long foldedCount __ARGS((win_T *win, linenr_T lnum, foldinfo_T *infop));
+int foldmethodIsManual __ARGS((win_T *wp));
+int foldmethodIsIndent __ARGS((win_T *wp));
+int foldmethodIsExpr __ARGS((win_T *wp));
+int foldmethodIsMarker __ARGS((win_T *wp));
+int foldmethodIsSyntax __ARGS((win_T *wp));
+int foldmethodIsDiff __ARGS((win_T *wp));
+void closeFold __ARGS((linenr_T lnum, long count));
+void closeFoldRecurse __ARGS((linenr_T lnum));
+void opFoldRange __ARGS((linenr_T first, linenr_T last, int opening, int recurse, int had_visual));
+void openFold __ARGS((linenr_T lnum, long count));
+void openFoldRecurse __ARGS((linenr_T lnum));
+void foldOpenCursor __ARGS((void));
+void newFoldLevel __ARGS((void));
+void foldCheckClose __ARGS((void));
+int foldManualAllowed __ARGS((int create));
+void foldCreate __ARGS((linenr_T start, linenr_T end));
+void deleteFold __ARGS((linenr_T start, linenr_T end, int recursive, int had_visual));
+void clearFolding __ARGS((win_T *win));
+void foldUpdate __ARGS((win_T *wp, linenr_T top, linenr_T bot));
+void foldUpdateAll __ARGS((win_T *win));
+int foldMoveTo __ARGS((int updown, int dir, long count));
+void foldInitWin __ARGS((win_T *newwin));
+int find_wl_entry __ARGS((win_T *win, linenr_T lnum));
+void foldAdjustVisual __ARGS((void));
+void foldAdjustCursor __ARGS((void));
+void cloneFoldGrowArray __ARGS((garray_T *from, garray_T *to));
+void deleteFoldRecurse __ARGS((garray_T *gap));
+void foldMarkAdjust __ARGS((win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after));
+int getDeepestNesting __ARGS((void));
+char_u *get_foldtext __ARGS((win_T *wp, linenr_T lnum, linenr_T lnume, foldinfo_T *foldinfo, char_u *buf));
+void foldtext_cleanup __ARGS((char_u *str));
+int put_folds __ARGS((FILE *fd, win_T *wp));
 /* vim: set ft=c : */
--- a/src/proto/gui.pro
+++ b/src/proto/gui.pro
@@ -1,65 +1,65 @@
 /* gui.c */
-extern void gui_start __ARGS((void));
-extern void gui_prepare __ARGS((int *argc, char **argv));
-extern int gui_init_check __ARGS((void));
-extern void gui_init __ARGS((void));
-extern void gui_exit __ARGS((int rc));
-extern void gui_shell_closed __ARGS((void));
-extern int gui_init_font __ARGS((char_u *font_list, int fontset));
-extern int gui_get_wide_font __ARGS((void));
-extern void gui_set_cursor __ARGS((int row, int col));
-extern void gui_update_cursor __ARGS((int force, int clear_selection));
-extern void gui_position_menu __ARGS((void));
-extern int gui_get_base_width __ARGS((void));
-extern int gui_get_base_height __ARGS((void));
-extern void gui_resize_shell __ARGS((int pixel_width, int pixel_height));
-extern void gui_may_resize_shell __ARGS((void));
-extern int gui_get_shellsize __ARGS((void));
-extern void gui_set_shellsize __ARGS((int mustset, int fit_to_display, int direction));
-extern void gui_new_shellsize __ARGS((void));
-extern void gui_reset_scroll_region __ARGS((void));
-extern void gui_start_highlight __ARGS((int mask));
-extern void gui_stop_highlight __ARGS((int mask));
-extern void gui_clear_block __ARGS((int row1, int col1, int row2, int col2));
-extern void gui_update_cursor_later __ARGS((void));
-extern void gui_write __ARGS((char_u *s, int len));
-extern void gui_dont_update_cursor __ARGS((void));
-extern void gui_can_update_cursor __ARGS((void));
-extern int gui_outstr_nowrap __ARGS((char_u *s, int len, int flags, guicolor_T fg, guicolor_T bg, int back));
-extern void gui_undraw_cursor __ARGS((void));
-extern void gui_redraw __ARGS((int x, int y, int w, int h));
-extern int gui_redraw_block __ARGS((int row1, int col1, int row2, int col2, int flags));
-extern int gui_wait_for_chars __ARGS((long wtime));
-extern void gui_send_mouse_event __ARGS((int button, int x, int y, int repeated_click, int_u modifiers));
-extern int gui_xy2colrow __ARGS((int x, int y, int *colp));
-extern void gui_menu_cb __ARGS((vimmenu_T *menu));
-extern void gui_init_which_components __ARGS((char_u *oldval));
-extern int gui_use_tabline __ARGS((void));
-extern void gui_update_tabline __ARGS((void));
-extern void get_tabline_label __ARGS((tabpage_T *tp, int tooltip));
-extern int send_tabline_event __ARGS((int nr));
-extern void send_tabline_menu_event __ARGS((int tabidx, int event));
-extern void gui_remove_scrollbars __ARGS((void));
-extern void gui_create_scrollbar __ARGS((scrollbar_T *sb, int type, win_T *wp));
-extern scrollbar_T *gui_find_scrollbar __ARGS((long ident));
-extern void gui_drag_scrollbar __ARGS((scrollbar_T *sb, long value, int still_dragging));
-extern void gui_update_scrollbars __ARGS((int force));
-extern int gui_do_scroll __ARGS((void));
-extern int gui_do_horiz_scroll __ARGS((void));
-extern void gui_check_colors __ARGS((void));
-extern guicolor_T gui_get_color __ARGS((char_u *name));
-extern int gui_get_lightness __ARGS((guicolor_T pixel));
-extern void gui_new_scrollbar_colors __ARGS((void));
-extern void gui_focus_change __ARGS((int in_focus));
-extern void gui_mouse_moved __ARGS((int x, int y));
-extern void gui_mouse_correct __ARGS((void));
-extern void ex_gui __ARGS((exarg_T *eap));
-extern int gui_find_bitmap __ARGS((char_u *name, char_u *buffer, char *ext));
-extern void gui_find_iconfile __ARGS((char_u *name, char_u *buffer, char *ext));
-extern void display_errors __ARGS((void));
-extern int no_console_input __ARGS((void));
-extern void gui_update_screen __ARGS((void));
-extern char_u *get_find_dialog_text __ARGS((char_u *arg, int *wwordp, int *mcasep));
-extern int gui_do_findrepl __ARGS((int flags, char_u *find_text, char_u *repl_text, int down));
-extern void gui_handle_drop __ARGS((int x, int y, int_u modifiers, char_u **fnames, int count));
+void gui_start __ARGS((void));
+void gui_prepare __ARGS((int *argc, char **argv));
+int gui_init_check __ARGS((void));
+void gui_init __ARGS((void));
+void gui_exit __ARGS((int rc));
+void gui_shell_closed __ARGS((void));
+int gui_init_font __ARGS((char_u *font_list, int fontset));
+int gui_get_wide_font __ARGS((void));
+void gui_set_cursor __ARGS((int row, int col));
+void gui_update_cursor __ARGS((int force, int clear_selection));
+void gui_position_menu __ARGS((void));
+int gui_get_base_width __ARGS((void));
+int gui_get_base_height __ARGS((void));
+void gui_resize_shell __ARGS((int pixel_width, int pixel_height));
+void gui_may_resize_shell __ARGS((void));
+int gui_get_shellsize __ARGS((void));
+void gui_set_shellsize __ARGS((int mustset, int fit_to_display, int direction));
+void gui_new_shellsize __ARGS((void));
+void gui_reset_scroll_region __ARGS((void));
+void gui_start_highlight __ARGS((int mask));
+void gui_stop_highlight __ARGS((int mask));
+void gui_clear_block __ARGS((int row1, int col1, int row2, int col2));
+void gui_update_cursor_later __ARGS((void));
+void gui_write __ARGS((char_u *s, int len));
+void gui_dont_update_cursor __ARGS((void));
+void gui_can_update_cursor __ARGS((void));
+int gui_outstr_nowrap __ARGS((char_u *s, int len, int flags, guicolor_T fg, guicolor_T bg, int back));
+void gui_undraw_cursor __ARGS((void));
+void gui_redraw __ARGS((int x, int y, int w, int h));
+int gui_redraw_block __ARGS((int row1, int col1, int row2, int col2, int flags));
+int gui_wait_for_chars __ARGS((long wtime));
+void gui_send_mouse_event __ARGS((int button, int x, int y, int repeated_click, int_u modifiers));
+int gui_xy2colrow __ARGS((int x, int y, int *colp));
+void gui_menu_cb __ARGS((vimmenu_T *menu));
+void gui_init_which_components __ARGS((char_u *oldval));
+int gui_use_tabline __ARGS((void));
+void gui_update_tabline __ARGS((void));
+void get_tabline_label __ARGS((tabpage_T *tp, int tooltip));
+int send_tabline_event __ARGS((int nr));
+void send_tabline_menu_event __ARGS((int tabidx, int event));
+void gui_remove_scrollbars __ARGS((void));
+void gui_create_scrollbar __ARGS((scrollbar_T *sb, int type, win_T *wp));
+scrollbar_T *gui_find_scrollbar __ARGS((long ident));
+void gui_drag_scrollbar __ARGS((scrollbar_T *sb, long value, int still_dragging));
+void gui_update_scrollbars __ARGS((int force));
+int gui_do_scroll __ARGS((void));
+int gui_do_horiz_scroll __ARGS((void));
+void gui_check_colors __ARGS((void));
+guicolor_T gui_get_color __ARGS((char_u *name));
+int gui_get_lightness __ARGS((guicolor_T pixel));
+void gui_new_scrollbar_colors __ARGS((void));
+void gui_focus_change __ARGS((int in_focus));
+void gui_mouse_moved __ARGS((int x, int y));
+void gui_mouse_correct __ARGS((void));
+void ex_gui __ARGS((exarg_T *eap));
+int gui_find_bitmap __ARGS((char_u *name, char_u *buffer, char *ext));
+void gui_find_iconfile __ARGS((char_u *name, char_u *buffer, char *ext));
+void display_errors __ARGS((void));
+int no_console_input __ARGS((void));
+void gui_update_screen __ARGS((void));
+char_u *get_find_dialog_text __ARGS((char_u *arg, int *wwordp, int *mcasep));
+int gui_do_findrepl __ARGS((int flags, char_u *find_text, char_u *repl_text, int down));
+void gui_handle_drop __ARGS((int x, int y, int_u modifiers, char_u **fnames, int count));
 /* vim: set ft=c : */
--- a/src/proto/gui_gtk_x11.pro
+++ b/src/proto/gui_gtk_x11.pro
@@ -1,73 +1,73 @@
 /* gui_gtk_x11.c */
-extern void gui_mch_prepare __ARGS((int *argc, char **argv));
-extern void gui_mch_free_all __ARGS((void));
-extern void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
-extern void gui_mch_stop_blink __ARGS((void));
-extern void gui_mch_start_blink __ARGS((void));
-extern int gui_mch_init_check __ARGS((void));
-extern void gui_mch_show_tabline __ARGS((int showit));
-extern int gui_mch_showing_tabline __ARGS((void));
-extern void gui_mch_update_tabline __ARGS((void));
-extern void gui_mch_set_curtab __ARGS((int nr));
-extern int gui_mch_init __ARGS((void));
-extern void gui_mch_forked __ARGS((void));
-extern void gui_mch_new_colors __ARGS((void));
-extern int gui_mch_open __ARGS((void));
-extern void gui_mch_exit __ARGS((int rc));
-extern int gui_mch_get_winpos __ARGS((int *x, int *y));
-extern void gui_mch_set_winpos __ARGS((int x, int y));
-extern void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
-extern void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
-extern void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
-extern void gui_mch_enable_menu __ARGS((int showit));
-extern void gui_mch_show_toolbar __ARGS((int showit));
-extern int gui_mch_adjust_charheight __ARGS((void));
-extern GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int report_error, int fixed_width));
-extern char_u *gui_mch_font_dialog __ARGS((char_u *oldval));
-extern int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
-extern GuiFont gui_mch_get_font __ARGS((char_u *name, int report_error));
-extern char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
-extern void gui_mch_set_font __ARGS((GuiFont font));
-extern void gui_mch_set_fontset __ARGS((GuiFontset fontset));
-extern void gui_mch_free_font __ARGS((GuiFont font));
-extern void gui_mch_free_fontset __ARGS((GuiFontset fontset));
-extern guicolor_T gui_mch_get_color __ARGS((char_u *name));
-extern void gui_mch_set_fg_color __ARGS((guicolor_T color));
-extern void gui_mch_set_bg_color __ARGS((guicolor_T color));
-extern void gui_mch_set_sp_color __ARGS((guicolor_T color));
-extern int gui_gtk2_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
-extern void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
-extern int gui_mch_haskey __ARGS((char_u *name));
-extern int gui_get_x11_windis __ARGS((Window *win, Display **dis));
-extern Display *gui_mch_get_display __ARGS((void));
-extern void gui_mch_beep __ARGS((void));
-extern void gui_mch_flash __ARGS((int msec));
-extern void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
-extern void gui_mch_iconify __ARGS((void));
-extern void gui_mch_set_foreground __ARGS((void));
-extern void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
-extern void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
-extern void gui_mch_update __ARGS((void));
-extern int gui_mch_wait_for_chars __ARGS((long wtime));
-extern void gui_mch_flush __ARGS((void));
-extern void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
-extern void gui_mch_clear_all __ARGS((void));
-extern void gui_mch_delete_lines __ARGS((int row, int num_lines));
-extern void gui_mch_insert_lines __ARGS((int row, int num_lines));
-extern void clip_mch_request_selection __ARGS((VimClipboard *cbd));
-extern void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
-extern int clip_mch_own_selection __ARGS((VimClipboard *cbd));
-extern void clip_mch_set_selection __ARGS((VimClipboard *cbd));
-extern void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-extern void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
-extern void gui_mch_draw_menubar __ARGS((void));
-extern void gui_mch_enable_scrollbar __ARGS((scrollbar_T *sb, int flag));
-extern long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
-extern void gui_mch_getmouse __ARGS((int *x, int *y));
-extern void gui_mch_setmouse __ARGS((int x, int y));
-extern void gui_mch_mousehide __ARGS((int hide));
-extern void mch_set_mouse_shape __ARGS((int shape));
-extern void gui_mch_drawsign __ARGS((int row, int col, int typenr));
-extern void *gui_mch_register_sign __ARGS((char_u *signfile));
-extern void gui_mch_destroy_sign __ARGS((void *sign));
+void gui_mch_prepare __ARGS((int *argc, char **argv));
+void gui_mch_free_all __ARGS((void));
+void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+void gui_mch_stop_blink __ARGS((void));
+void gui_mch_start_blink __ARGS((void));
+int gui_mch_init_check __ARGS((void));
+void gui_mch_show_tabline __ARGS((int showit));
+int gui_mch_showing_tabline __ARGS((void));
+void gui_mch_update_tabline __ARGS((void));
+void gui_mch_set_curtab __ARGS((int nr));
+int gui_mch_init __ARGS((void));
+void gui_mch_forked __ARGS((void));
+void gui_mch_new_colors __ARGS((void));
+int gui_mch_open __ARGS((void));
+void gui_mch_exit __ARGS((int rc));
+int gui_mch_get_winpos __ARGS((int *x, int *y));
+void gui_mch_set_winpos __ARGS((int x, int y));
+void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
+void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
+void gui_mch_enable_menu __ARGS((int showit));
+void gui_mch_show_toolbar __ARGS((int showit));
+int gui_mch_adjust_charheight __ARGS((void));
+GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int report_error, int fixed_width));
+char_u *gui_mch_font_dialog __ARGS((char_u *oldval));
+int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
+GuiFont gui_mch_get_font __ARGS((char_u *name, int report_error));
+char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name));
+void gui_mch_set_font __ARGS((GuiFont font));
+void gui_mch_set_fontset __ARGS((GuiFontset fontset));
+void gui_mch_free_font __ARGS((GuiFont font));
+void gui_mch_free_fontset __ARGS((GuiFontset fontset));
+guicolor_T gui_mch_get_color __ARGS((char_u *name));
+void gui_mch_set_fg_color __ARGS((guicolor_T color));
+void gui_mch_set_bg_color __ARGS((guicolor_T color));
+void gui_mch_set_sp_color __ARGS((guicolor_T color));
+int gui_gtk2_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
+void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
+int gui_mch_haskey __ARGS((char_u *name));
+int gui_get_x11_windis __ARGS((Window *win, Display **dis));
+Display *gui_mch_get_display __ARGS((void));
+void gui_mch_beep __ARGS((void));
+void gui_mch_flash __ARGS((int msec));
+void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
+void gui_mch_iconify __ARGS((void));
+void gui_mch_set_foreground __ARGS((void));
+void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
+void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
+void gui_mch_update __ARGS((void));
+int gui_mch_wait_for_chars __ARGS((long wtime));
+void gui_mch_flush __ARGS((void));
+void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
+void gui_mch_clear_all __ARGS((void));
+void gui_mch_delete_lines __ARGS((int row, int num_lines));
+void gui_mch_insert_lines __ARGS((int row, int num_lines));
+void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+void gui_mch_draw_menubar __ARGS((void));
+void gui_mch_enable_scrollbar __ARGS((scrollbar_T *sb, int flag));
+long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
+void gui_mch_getmouse __ARGS((int *x, int *y));
+void gui_mch_setmouse __ARGS((int x, int y));
+void gui_mch_mousehide __ARGS((int hide));
+void mch_set_mouse_shape __ARGS((int shape));
+void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+void *gui_mch_register_sign __ARGS((char_u *signfile));
+void gui_mch_destroy_sign __ARGS((void *sign));
 /* vim: set ft=c : */
--- a/src/proto/gui_xmdlg.pro
+++ b/src/proto/gui_xmdlg.pro
@@ -1,3 +1,3 @@
 /* gui_xmdlg.c */
-extern char_u *gui_xm_select_font __ARGS((char_u *current));
+char_u *gui_xm_select_font __ARGS((char_u *current));
 /* vim: set ft=c : */
--- a/src/proto/hashtab.pro
+++ b/src/proto/hashtab.pro
@@ -1,14 +1,14 @@
 /* hashtab.c */
-extern void hash_init __ARGS((hashtab_T *ht));
-extern void hash_clear __ARGS((hashtab_T *ht));
-extern void hash_clear_all __ARGS((hashtab_T *ht, int off));
-extern hashitem_T *hash_find __ARGS((hashtab_T *ht, char_u *key));
-extern hashitem_T *hash_lookup __ARGS((hashtab_T *ht, char_u *key, hash_T hash));
-extern void hash_debug_results __ARGS((void));
-extern int hash_add __ARGS((hashtab_T *ht, char_u *key));
-extern int hash_add_item __ARGS((hashtab_T *ht, hashitem_T *hi, char_u *key, hash_T hash));
-extern void hash_remove __ARGS((hashtab_T *ht, hashitem_T *hi));
-extern void hash_lock __ARGS((hashtab_T *ht));
-extern void hash_unlock __ARGS((hashtab_T *ht));
-extern hash_T hash_hash __ARGS((char_u *key));
+void hash_init __ARGS((hashtab_T *ht));
+void hash_clear __ARGS((hashtab_T *ht));
+void hash_clear_all __ARGS((hashtab_T *ht, int off));
+hashitem_T *hash_find __ARGS((hashtab_T *ht, char_u *key));
+hashitem_T *hash_lookup __ARGS((hashtab_T *ht, char_u *key, hash_T hash));
+void hash_debug_results __ARGS((void));
+int hash_add __ARGS((hashtab_T *ht, char_u *key));
+int hash_add_item __ARGS((hashtab_T *ht, hashitem_T *hi, char_u *key, hash_T hash));
+void hash_remove __ARGS((hashtab_T *ht, hashitem_T *hi));
+void hash_lock __ARGS((hashtab_T *ht));
+void hash_unlock __ARGS((hashtab_T *ht));
+hash_T hash_hash __ARGS((char_u *key));
 /* vim: set ft=c : */
--- a/src/proto/if_tcl.pro
+++ b/src/proto/if_tcl.pro
@@ -1,10 +1,10 @@
 /* if_tcl.c */
-extern void vim_tcl_init __ARGS((char *arg));
-extern int tcl_enabled __ARGS((int verbose));
-extern void tcl_end __ARGS((void));
-extern void ex_tcl __ARGS((exarg_T *eap));
-extern void ex_tclfile __ARGS((exarg_T *eap));
-extern void ex_tcldo __ARGS((exarg_T *eap));
-extern void tcl_buffer_free __ARGS((buf_T *buf));
-extern void tcl_window_free __ARGS((win_T *win));
+void vim_tcl_init __ARGS((char *arg));
+int tcl_enabled __ARGS((int verbose));
+void tcl_end __ARGS((void));
+void ex_tcl __ARGS((exarg_T *eap));
+void ex_tclfile __ARGS((exarg_T *eap));
+void ex_tcldo __ARGS((exarg_T *eap));
+void tcl_buffer_free __ARGS((buf_T *buf));
+void tcl_window_free __ARGS((win_T *win));
 /* vim: set ft=c : */
--- a/src/proto/main.pro
+++ b/src/proto/main.pro
@@ -1,26 +1,26 @@
 /* main.c */
-extern void main_loop __ARGS((int cmdwin, int noexmode));
-extern void getout_preserve_modified __ARGS((int exitval));
-extern void getout __ARGS((int exitval));
-extern int process_env __ARGS((char_u *env, int is_viminit));
-extern void mainerr_arg_missing __ARGS((char_u *str));
-extern void time_push __ARGS((void *tv_rel, void *tv_start));
-extern void time_pop __ARGS((void *tp));
-extern void time_msg __ARGS((char *msg, void *tv_start));
-extern void server_to_input_buf __ARGS((char_u *str));
-extern char_u *eval_client_expr_to_string __ARGS((char_u *expr));
-extern char_u *serverConvert __ARGS((char_u *client_enc, char_u *data, char_u **tofree));
-extern int toF_TyA __ARGS((int c));
-extern int fkmap __ARGS((int c));
-extern void conv_to_pvim __ARGS((void));
-extern void conv_to_pstd __ARGS((void));
-extern char_u *lrswap __ARGS((char_u *ibuf));
-extern char_u *lrFswap __ARGS((char_u *cmdbuf, int len));
-extern char_u *lrF_sub __ARGS((char_u *ibuf));
-extern int cmdl_fkmap __ARGS((int c));
-extern int F_isalpha __ARGS((int c));
-extern int F_isdigit __ARGS((int c));
-extern int F_ischar __ARGS((int c));
-extern void farsi_fkey __ARGS((cmdarg_T *cap));
-extern int arabic_shape __ARGS((int c, int *ccp, int *c1p, int prev_c, int prev_c1, int next_c));
+void main_loop __ARGS((int cmdwin, int noexmode));
+void getout_preserve_modified __ARGS((int exitval));
+void getout __ARGS((int exitval));
+int process_env __ARGS((char_u *env, int is_viminit));
+void mainerr_arg_missing __ARGS((char_u *str));
+void time_push __ARGS((void *tv_rel, void *tv_start));
+void time_pop __ARGS((void *tp));
+void time_msg __ARGS((char *msg, void *tv_start));
+void server_to_input_buf __ARGS((char_u *str));
+char_u *eval_client_expr_to_string __ARGS((char_u *expr));
+char_u *serverConvert __ARGS((char_u *client_enc, char_u *data, char_u **tofree));
+int toF_TyA __ARGS((int c));
+int fkmap __ARGS((int c));
+void conv_to_pvim __ARGS((void));
+void conv_to_pstd __ARGS((void));
+char_u *lrswap __ARGS((char_u *ibuf));
+char_u *lrFswap __ARGS((char_u *cmdbuf, int len));
+char_u *lrF_sub __ARGS((char_u *ibuf));
+int cmdl_fkmap __ARGS((int c));
+int F_isalpha __ARGS((int c));
+int F_isdigit __ARGS((int c));
+int F_ischar __ARGS((int c));
+void farsi_fkey __ARGS((cmdarg_T *cap));
+int arabic_shape __ARGS((int c, int *ccp, int *c1p, int prev_c, int prev_c1, int next_c));
 /* vim: set ft=c : */
--- a/src/proto/mark.pro
+++ b/src/proto/mark.pro
@@ -1,30 +1,30 @@
 /* mark.c */
-extern int setmark __ARGS((int c));
-extern int setmark_pos __ARGS((int c, pos_T *pos, int fnum));
-extern void setpcmark __ARGS((void));
-extern void checkpcmark __ARGS((void));
-extern pos_T *movemark __ARGS((int count));
-extern pos_T *movechangelist __ARGS((int count));
-extern pos_T *getmark __ARGS((int c, int changefile));
-extern pos_T *getmark_fnum __ARGS((int c, int changefile, int *fnum));
-extern pos_T *getnextmark __ARGS((pos_T *startpos, int dir, int begin_line));
-extern void fmarks_check_names __ARGS((buf_T *buf));
-extern int check_mark __ARGS((pos_T *pos));
-extern void clrallmarks __ARGS((buf_T *buf));
-extern char_u *fm_getname __ARGS((fmark_T *fmark, int lead_len));
-extern void do_marks __ARGS((exarg_T *eap));
-extern void ex_delmarks __ARGS((exarg_T *eap));
-extern void ex_jumps __ARGS((exarg_T *eap));
-extern void ex_changes __ARGS((exarg_T *eap));
-extern void mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
-extern void mark_col_adjust __ARGS((linenr_T lnum, colnr_T mincol, long lnum_amount, long col_amount));
-extern void copy_jumplist __ARGS((win_T *from, win_T *to));
-extern void free_jumplist __ARGS((win_T *wp));
-extern void set_last_cursor __ARGS((win_T *win));
-extern void free_all_marks __ARGS((void));
-extern int read_viminfo_filemark __ARGS((vir_T *virp, int force));
-extern void write_viminfo_filemarks __ARGS((FILE *fp));
-extern int removable __ARGS((char_u *name));
-extern int write_viminfo_marks __ARGS((FILE *fp_out));
-extern void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof));
+int setmark __ARGS((int c));
+int setmark_pos __ARGS((int c, pos_T *pos, int fnum));
+void setpcmark __ARGS((void));
+void checkpcmark __ARGS((void));
+pos_T *movemark __ARGS((int count));
+pos_T *movechangelist __ARGS((int count));
+pos_T *getmark __ARGS((int c, int changefile));
+pos_T *getmark_fnum __ARGS((int c, int changefile, int *fnum));
+pos_T *getnextmark __ARGS((pos_T *startpos, int dir, int begin_line));
+void fmarks_check_names __ARGS((buf_T *buf));
+int check_mark __ARGS((pos_T *pos));
+void clrallmarks __ARGS((buf_T *buf));
+char_u *fm_getname __ARGS((fmark_T *fmark, int lead_len));
+void do_marks __ARGS((exarg_T *eap));
+void ex_delmarks __ARGS((exarg_T *eap));
+void ex_jumps __ARGS((exarg_T *eap));
+void ex_changes __ARGS((exarg_T *eap));
+void mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
+void mark_col_adjust __ARGS((linenr_T lnum, colnr_T mincol, long lnum_amount, long col_amount));
+void copy_jumplist __ARGS((win_T *from, win_T *to));
+void free_jumplist __ARGS((win_T *wp));
+void set_last_cursor __ARGS((win_T *win));
+void free_all_marks __ARGS((void));
+int read_viminfo_filemark __ARGS((vir_T *virp, int force));
+void write_viminfo_filemarks __ARGS((FILE *fp));
+int removable __ARGS((char_u *name));
+int write_viminfo_marks __ARGS((FILE *fp_out));
+void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof));
 /* vim: set ft=c : */
--- a/src/proto/memfile.pro
+++ b/src/proto/memfile.pro
@@ -1,18 +1,18 @@
 /* memfile.c */
-extern memfile_T *mf_open __ARGS((char_u *fname, int flags));
-extern int mf_open_file __ARGS((memfile_T *mfp, char_u *fname));
-extern void mf_close __ARGS((memfile_T *mfp, int del_file));
-extern void mf_close_file __ARGS((buf_T *buf, int getlines));
-extern void mf_new_page_size __ARGS((memfile_T *mfp, unsigned new_size));
-extern bhdr_T *mf_new __ARGS((memfile_T *mfp, int negative, int page_count));
-extern bhdr_T *mf_get __ARGS((memfile_T *mfp, blocknr_T nr, int page_count));
-extern void mf_put __ARGS((memfile_T *mfp, bhdr_T *hp, int dirty, int infile));
-extern void mf_free __ARGS((memfile_T *mfp, bhdr_T *hp));
-extern int mf_sync __ARGS((memfile_T *mfp, int flags));
-extern void mf_set_dirty __ARGS((memfile_T *mfp));
-extern int mf_release_all __ARGS((void));
-extern blocknr_T mf_trans_del __ARGS((memfile_T *mfp, blocknr_T old_nr));
-extern void mf_set_ffname __ARGS((memfile_T *mfp));
-extern void mf_fullname __ARGS((memfile_T *mfp));
-extern int mf_need_trans __ARGS((memfile_T *mfp));
+memfile_T *mf_open __ARGS((char_u *fname, int flags));
+int mf_open_file __ARGS((memfile_T *mfp, char_u *fname));
+void mf_close __ARGS((memfile_T *mfp, int del_file));
+void mf_close_file __ARGS((buf_T *buf, int getlines));
+void mf_new_page_size __ARGS((memfile_T *mfp, unsigned new_size));
+bhdr_T *mf_new __ARGS((memfile_T *mfp, int negative, int page_count));
+bhdr_T *mf_get __ARGS((memfile_T *mfp, blocknr_T nr, int page_count));
+void mf_put __ARGS((memfile_T *mfp, bhdr_T *hp, int dirty, int infile));
+void mf_free __ARGS((memfile_T *mfp, bhdr_T *hp));
+int mf_sync __ARGS((memfile_T *mfp, int flags));
+void mf_set_dirty __ARGS((memfile_T *mfp));
+int mf_release_all __ARGS((void));
+blocknr_T mf_trans_del __ARGS((memfile_T *mfp, blocknr_T old_nr));
+void mf_set_ffname __ARGS((memfile_T *mfp));
+void mf_fullname __ARGS((memfile_T *mfp));
+int mf_need_trans __ARGS((memfile_T *mfp));
 /* vim: set ft=c : */
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -1,71 +1,71 @@
 /* message.c */
-extern int msg __ARGS((char_u *s));
-extern int verb_msg __ARGS((char_u *s));
-extern int msg_attr __ARGS((char_u *s, int attr));
-extern int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
-extern char_u *msg_strtrunc __ARGS((char_u *s, int force));
-extern void trunc_string __ARGS((char_u *s, char_u *buf, int room));
-extern void reset_last_sourcing __ARGS((void));
-extern void msg_source __ARGS((int attr));
-extern int emsg_not_now __ARGS((void));
-extern int emsg __ARGS((char_u *s));
-extern int emsg2 __ARGS((char_u *s, char_u *a1));
-extern void emsg_invreg __ARGS((int name));
-extern char_u *msg_trunc_attr __ARGS((char_u *s, int force, int attr));
-extern char_u *msg_may_trunc __ARGS((int force, char_u *s));
-extern int delete_first_msg __ARGS((void));
-extern void ex_messages __ARGS((exarg_T *eap));
-extern void msg_end_prompt __ARGS((void));
-extern void wait_return __ARGS((int redraw));
-extern void set_keep_msg __ARGS((char_u *s, int attr));
-extern void set_keep_msg_from_hist __ARGS((void));
-extern void msg_start __ARGS((void));
-extern void msg_starthere __ARGS((void));
-extern void msg_putchar __ARGS((int c));
-extern void msg_putchar_attr __ARGS((int c, int attr));
-extern void msg_outnum __ARGS((long n));
-extern void msg_home_replace __ARGS((char_u *fname));
-extern void msg_home_replace_hl __ARGS((char_u *fname));
-extern int msg_outtrans __ARGS((char_u *str));
-extern int msg_outtrans_attr __ARGS((char_u *str, int attr));
-extern int msg_outtrans_len __ARGS((char_u *str, int len));
-extern char_u *msg_outtrans_one __ARGS((char_u *p, int attr));
-extern int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
-extern void msg_make __ARGS((char_u *arg));
-extern int msg_outtrans_special __ARGS((char_u *strstart, int from));
-extern char_u *str2special __ARGS((char_u **sp, int from));
-extern void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
-extern void msg_prt_line __ARGS((char_u *s, int list));
-extern void msg_puts __ARGS((char_u *s));
-extern void msg_puts_title __ARGS((char_u *s));
-extern void msg_puts_long_attr __ARGS((char_u *longstr, int attr));
-extern void msg_puts_long_len_attr __ARGS((char_u *longstr, int len, int attr));
-extern void msg_puts_attr __ARGS((char_u *s, int attr));
-extern void may_clear_sb_text __ARGS((void));
-extern void clear_sb_text __ARGS((void));
-extern void show_sb_text __ARGS((void));
-extern int msg_use_printf __ARGS((void));
-extern void mch_errmsg __ARGS((char *str));
-extern void mch_msg __ARGS((char *str));
-extern void msg_moremsg __ARGS((int full));
-extern void repeat_message __ARGS((void));
-extern void msg_clr_eos __ARGS((void));
-extern void msg_clr_eos_force __ARGS((void));
-extern void msg_clr_cmdline __ARGS((void));
-extern int msg_end __ARGS((void));
-extern void msg_check __ARGS((void));
-extern void verbose_enter __ARGS((void));
-extern void verbose_leave __ARGS((void));
-extern void verbose_enter_scroll __ARGS((void));
-extern void verbose_leave_scroll __ARGS((void));
-extern void verbose_stop __ARGS((void));
-extern int verbose_open __ARGS((void));
-extern void give_warning __ARGS((char_u *message, int hl));
-extern void msg_advance __ARGS((int col));
-extern int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
-extern void display_confirm_msg __ARGS((void));
-extern int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
-extern int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
-extern int vim_dialog_yesnoallcancel __ARGS((int type, char_u *title, char_u *message, int dflt));
-extern char_u *do_browse __ARGS((int flags, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter, buf_T *buf));
+int msg __ARGS((char_u *s));
+int verb_msg __ARGS((char_u *s));
+int msg_attr __ARGS((char_u *s, int attr));
+int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
+char_u *msg_strtrunc __ARGS((char_u *s, int force));
+void trunc_string __ARGS((char_u *s, char_u *buf, int room));
+void reset_last_sourcing __ARGS((void));
+void msg_source __ARGS((int attr));
+int emsg_not_now __ARGS((void));
+int emsg __ARGS((char_u *s));
+int emsg2 __ARGS((char_u *s, char_u *a1));
+void emsg_invreg __ARGS((int name));
+char_u *msg_trunc_attr __ARGS((char_u *s, int force, int attr));
+char_u *msg_may_trunc __ARGS((int force, char_u *s));
+int delete_first_msg __ARGS((void));
+void ex_messages __ARGS((exarg_T *eap));
+void msg_end_prompt __ARGS((void));
+void wait_return __ARGS((int redraw));
+void set_keep_msg __ARGS((char_u *s, int attr));
+void set_keep_msg_from_hist __ARGS((void));
+void msg_start __ARGS((void));
+void msg_starthere __ARGS((void));
+void msg_putchar __ARGS((int c));
+void msg_putchar_attr __ARGS((int c, int attr));
+void msg_outnum __ARGS((long n));
+void msg_home_replace __ARGS((char_u *fname));
+void msg_home_replace_hl __ARGS((char_u *fname));
+int msg_outtrans __ARGS((char_u *str));
+int msg_outtrans_attr __ARGS((char_u *str, int attr));
+int msg_outtrans_len __ARGS((char_u *str, int len));
+char_u *msg_outtrans_one __ARGS((char_u *p, int attr));
+int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
+void msg_make __ARGS((char_u *arg));
+int msg_outtrans_special __ARGS((char_u *strstart, int from));
+char_u *str2special __ARGS((char_u **sp, int from));
+void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
+void msg_prt_line __ARGS((char_u *s, int list));
+void msg_puts __ARGS((char_u *s));
+void msg_puts_title __ARGS((char_u *s));
+void msg_puts_long_attr __ARGS((char_u *longstr, int attr));
+void msg_puts_long_len_attr __ARGS((char_u *longstr, int len, int attr));
+void msg_puts_attr __ARGS((char_u *s, int attr));
+void may_clear_sb_text __ARGS((void));
+void clear_sb_text __ARGS((void));
+void show_sb_text __ARGS((void));
+int msg_use_printf __ARGS((void));
+void mch_errmsg __ARGS((char *str));
+void mch_msg __ARGS((char *str));
+void msg_moremsg __ARGS((int full));
+void repeat_message __ARGS((void));
+void msg_clr_eos __ARGS((void));
+void msg_clr_eos_force __ARGS((void));
+void msg_clr_cmdline __ARGS((void));
+int msg_end __ARGS((void));
+void msg_check __ARGS((void));
+void verbose_enter __ARGS((void));
+void verbose_leave __ARGS((void));
+void verbose_enter_scroll __ARGS((void));
+void verbose_leave_scroll __ARGS((void));
+void verbose_stop __ARGS((void));
+int verbose_open __ARGS((void));
+void give_warning __ARGS((char_u *message, int hl));
+void msg_advance __ARGS((int col));
+int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+void display_confirm_msg __ARGS((void));
+int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
+int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
+int vim_dialog_yesnoallcancel __ARGS((int type, char_u *title, char_u *message, int dflt));
+char_u *do_browse __ARGS((int flags, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter, buf_T *buf));
 /* vim: set ft=c : */
--- a/src/proto/netbeans.pro
+++ b/src/proto/netbeans.pro
@@ -1,25 +1,25 @@
 /* netbeans.c */
-extern void messageFromNetbeansW32 __ARGS((void));
-extern int isNetbeansBuffer __ARGS((buf_T *bufp));
-extern int isNetbeansModified __ARGS((buf_T *bufp));
-extern void netbeans_end __ARGS((void));
-extern void ex_nbkey __ARGS((exarg_T *eap));
-extern void netbeans_beval_cb __ARGS((BalloonEval *beval, int state));
-extern void netbeans_startup_done __ARGS((void));
-extern void netbeans_send_disconnect __ARGS((void));
-extern void netbeans_frame_moved __ARGS((int new_x, int new_y));
-extern void netbeans_file_activated __ARGS((buf_T *bufp));
-extern void netbeans_file_opened __ARGS((buf_T *bufp));
-extern void netbeans_file_closed __ARGS((buf_T *bufp));
-extern void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, char_u *txt, int newlen));
-extern void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len));
-extern void netbeans_unmodified __ARGS((buf_T *bufp));
-extern void netbeans_button_release __ARGS((int button));
-extern void netbeans_keycommand __ARGS((int key));
-extern void netbeans_save_buffer __ARGS((buf_T *bufp));
-extern void netbeans_deleted_all_lines __ARGS((buf_T *bufp));
-extern int netbeans_is_guarded __ARGS((linenr_T top, linenr_T bot));
-extern void netbeans_draw_multisign_indicator __ARGS((int row));
-extern void netbeans_draw_multisign_indicator __ARGS((int row));
-extern void netbeans_gutter_click __ARGS((linenr_T lnum));
+void messageFromNetbeansW32 __ARGS((void));
+int isNetbeansBuffer __ARGS((buf_T *bufp));
+int isNetbeansModified __ARGS((buf_T *bufp));
+void netbeans_end __ARGS((void));
+void ex_nbkey __ARGS((exarg_T *eap));
+void netbeans_beval_cb __ARGS((BalloonEval *beval, int state));
+void netbeans_startup_done __ARGS((void));
+void netbeans_send_disconnect __ARGS((void));
+void netbeans_frame_moved __ARGS((int new_x, int new_y));
+void netbeans_file_activated __ARGS((buf_T *bufp));
+void netbeans_file_opened __ARGS((buf_T *bufp));
+void netbeans_file_closed __ARGS((buf_T *bufp));
+void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, char_u *txt, int newlen));
+void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len));
+void netbeans_unmodified __ARGS((buf_T *bufp));
+void netbeans_button_release __ARGS((int button));
+void netbeans_keycommand __ARGS((int key));
+void netbeans_save_buffer __ARGS((buf_T *bufp));
+void netbeans_deleted_all_lines __ARGS((buf_T *bufp));
+int netbeans_is_guarded __ARGS((linenr_T top, linenr_T bot));
+void netbeans_draw_multisign_indicator __ARGS((int row));
+void netbeans_draw_multisign_indicator __ARGS((int row));
+void netbeans_gutter_click __ARGS((linenr_T lnum));
 /* vim: set ft=c : */
--- a/src/proto/normal.pro
+++ b/src/proto/normal.pro
@@ -1,26 +1,26 @@
 /* normal.c */
-extern void init_normal_cmds __ARGS((void));
-extern void normal_cmd __ARGS((oparg_T *oap, int toplevel));
-extern void do_pending_operator __ARGS((cmdarg_T *cap, int old_col, int gui_yank));
-extern int do_mouse __ARGS((oparg_T *oap, int c, int dir, long count, int fixindent));
-extern void check_visual_highlight __ARGS((void));
-extern void end_visual_mode __ARGS((void));
-extern void reset_VIsual_and_resel __ARGS((void));
-extern void reset_VIsual __ARGS((void));
-extern int find_ident_under_cursor __ARGS((char_u **string, int find_type));
-extern int find_ident_at_pos __ARGS((win_T *wp, linenr_T lnum, colnr_T startcol, char_u **string, int find_type));
-extern void clear_showcmd __ARGS((void));
-extern int add_to_showcmd __ARGS((int c));
-extern void add_to_showcmd_c __ARGS((int c));
-extern void push_showcmd __ARGS((void));
-extern void pop_showcmd __ARGS((void));
-extern void do_check_scrollbind __ARGS((int check));
-extern void check_scrollbind __ARGS((linenr_T topline_diff, long leftcol_diff));
-extern int find_decl __ARGS((char_u *ptr, int len, int locally, int thisblock, int searchflags));
-extern void scroll_redraw __ARGS((int up, long count));
-extern void handle_tabmenu __ARGS((void));
-extern void do_nv_ident __ARGS((int c1, int c2));
-extern int get_visual_text __ARGS((cmdarg_T *cap, char_u **pp, int *lenp));
-extern void start_selection __ARGS((void));
-extern void may_start_select __ARGS((int c));
+void init_normal_cmds __ARGS((void));
+void normal_cmd __ARGS((oparg_T *oap, int toplevel));
+void do_pending_operator __ARGS((cmdarg_T *cap, int old_col, int gui_yank));
+int do_mouse __ARGS((oparg_T *oap, int c, int dir, long count, int fixindent));
+void check_visual_highlight __ARGS((void));
+void end_visual_mode __ARGS((void));
+void reset_VIsual_and_resel __ARGS((void));
+void reset_VIsual __ARGS((void));
+int find_ident_under_cursor __ARGS((char_u **string, int find_type));
+int find_ident_at_pos __ARGS((win_T *wp, linenr_T lnum, colnr_T startcol, char_u **string, int find_type));
+void clear_showcmd __ARGS((void));
+int add_to_showcmd __ARGS((int c));
+void add_to_showcmd_c __ARGS((int c));
+void push_showcmd __ARGS((void));
+void pop_showcmd __ARGS((void));
+void do_check_scrollbind __ARGS((int check));
+void check_scrollbind __ARGS((linenr_T topline_diff, long leftcol_diff));
+int find_decl __ARGS((char_u *ptr, int len, int locally, int thisblock, int searchflags));
+void scroll_redraw __ARGS((int up, long count));
+void handle_tabmenu __ARGS((void));
+void do_nv_ident __ARGS((int c1, int c2));
+int get_visual_text __ARGS((cmdarg_T *cap, char_u **pp, int *lenp));
+void start_selection __ARGS((void));
+void may_start_select __ARGS((int c));
 /* vim: set ft=c : */
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -1,56 +1,56 @@
 /* option.c */
-extern void set_init_1 __ARGS((void));
-extern void set_string_default __ARGS((char *name, char_u *val));
-extern void set_number_default __ARGS((char *name, long val));
-extern void free_all_options __ARGS((void));
-extern void set_init_2 __ARGS((void));
-extern void set_init_3 __ARGS((void));
-extern void set_helplang_default __ARGS((char_u *lang));
-extern void init_gui_options __ARGS((void));
-extern void set_title_defaults __ARGS((void));
-extern int do_set __ARGS((char_u *arg, int opt_flags));
-extern void set_options_bin __ARGS((int oldval, int newval, int opt_flags));
-extern int get_viminfo_parameter __ARGS((int type));
-extern char_u *find_viminfo_parameter __ARGS((int type));
-extern void check_options __ARGS((void));
-extern void check_buf_options __ARGS((buf_T *buf));
-extern void free_string_option __ARGS((char_u *p));
-extern void clear_string_option __ARGS((char_u **pp));
-extern void set_term_option_alloced __ARGS((char_u **p));
-extern int was_set_insecurely __ARGS((char_u *opt, int opt_flags));
-extern void set_string_option_direct __ARGS((char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid));
-extern char_u *check_stl_option __ARGS((char_u *s));
-extern int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
-extern void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
-extern char_u *get_term_code __ARGS((char_u *tname));
-extern char_u *get_highlight_default __ARGS((void));
-extern char_u *get_encoding_default __ARGS((void));
-extern int makeset __ARGS((FILE *fd, int opt_flags, int local_only));
-extern int makefoldset __ARGS((FILE *fd));
-extern void clear_termoptions __ARGS((void));
-extern void free_termoptions __ARGS((void));
-extern void set_term_defaults __ARGS((void));
-extern void comp_col __ARGS((void));
-extern char_u *get_equalprg __ARGS((void));
-extern void win_copy_options __ARGS((win_T *wp_from, win_T *wp_to));
-extern void copy_winopt __ARGS((winopt_T *from, winopt_T *to));
-extern void check_win_options __ARGS((win_T *win));
-extern void check_winopt __ARGS((winopt_T *wop));
-extern void clear_winopt __ARGS((winopt_T *wop));
-extern void buf_copy_options __ARGS((buf_T *buf, int flags));
-extern void reset_modifiable __ARGS((void));
-extern void set_iminsert_global __ARGS((void));
-extern void set_imsearch_global __ARGS((void));
-extern void set_context_in_set_cmd __ARGS((expand_T *xp, char_u *arg, int opt_flags));
-extern int ExpandSettings __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
-extern int ExpandOldSetting __ARGS((int *num_file, char_u ***file));
-extern int has_format_option __ARGS((int x));
-extern int shortmess __ARGS((int x));
-extern void vimrc_found __ARGS((char_u *fname, char_u *envname));
-extern void change_compatible __ARGS((int on));
-extern int option_was_set __ARGS((char_u *name));
-extern int can_bs __ARGS((int what));
-extern void save_file_ff __ARGS((buf_T *buf));
-extern int file_ff_differs __ARGS((buf_T *buf));
-extern int check_ff_value __ARGS((char_u *p));
+void set_init_1 __ARGS((void));
+void set_string_default __ARGS((char *name, char_u *val));
+void set_number_default __ARGS((char *name, long val));
+void free_all_options __ARGS((void));
+void set_init_2 __ARGS((void));
+void set_init_3 __ARGS((void));
+void set_helplang_default __ARGS((char_u *lang));
+void init_gui_options __ARGS((void));
+void set_title_defaults __ARGS((void));
+int do_set __ARGS((char_u *arg, int opt_flags));
+void set_options_bin __ARGS((int oldval, int newval, int opt_flags));
+int get_viminfo_parameter __ARGS((int type));
+char_u *find_viminfo_parameter __ARGS((int type));
+void check_options __ARGS((void));
+void check_buf_options __ARGS((buf_T *buf));
+void free_string_option __ARGS((char_u *p));
+void clear_string_option __ARGS((char_u **pp));
+void set_term_option_alloced __ARGS((char_u **p));
+int was_set_insecurely __ARGS((char_u *opt, int opt_flags));
+void set_string_option_direct __ARGS((char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid));
+char_u *check_stl_option __ARGS((char_u *s));
+int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
+void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
+char_u *get_term_code __ARGS((char_u *tname));
+char_u *get_highlight_default __ARGS((void));
+char_u *get_encoding_default __ARGS((void));
+int makeset __ARGS((FILE *fd, int opt_flags, int local_only));
+int makefoldset __ARGS((FILE *fd));
+void clear_termoptions __ARGS((void));
+void free_termoptions __ARGS((void));
+void set_term_defaults __ARGS((void));
+void comp_col __ARGS((void));
+char_u *get_equalprg __ARGS((void));
+void win_copy_options __ARGS((win_T *wp_from, win_T *wp_to));
+void copy_winopt __ARGS((winopt_T *from, winopt_T *to));
+void check_win_options __ARGS((win_T *win));
+void check_winopt __ARGS((winopt_T *wop));
+void clear_winopt __ARGS((winopt_T *wop));
+void buf_copy_options __ARGS((buf_T *buf, int flags));
+void reset_modifiable __ARGS((void));
+void set_iminsert_global __ARGS((void));
+void set_imsearch_global __ARGS((void));
+void set_context_in_set_cmd __ARGS((expand_T *xp, char_u *arg, int opt_flags));
+int ExpandSettings __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+int ExpandOldSetting __ARGS((int *num_file, char_u ***file));
+int has_format_option __ARGS((int x));
+int shortmess __ARGS((int x));
+void vimrc_found __ARGS((char_u *fname, char_u *envname));
+void change_compatible __ARGS((int on));
+int option_was_set __ARGS((char_u *name));
+int can_bs __ARGS((int what));
+void save_file_ff __ARGS((buf_T *buf));
+int file_ff_differs __ARGS((buf_T *buf));
+int check_ff_value __ARGS((char_u *p));
 /* vim: set ft=c : */
--- a/src/proto/os_riscos.pro
+++ b/src/proto/os_riscos.pro
@@ -1,49 +1,49 @@
 /* os_riscos.c */
-extern void mch_write __ARGS((char_u *s, int len));
-extern int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
-extern int mch_char_avail __ARGS((void));
-extern long_u mch_avail_mem __ARGS((int special));
-extern void mch_delay __ARGS((long msec, int ignoreinput));
-extern void mch_suspend __ARGS((void));
-extern void mch_init __ARGS((void));
-extern int mch_check_win __ARGS((int argc, char **argv));
-extern int mch_input_isatty __ARGS((void));
-extern int mch_can_restore_title __ARGS((void));
-extern int mch_can_restore_icon __ARGS((void));
-extern void mch_settitle __ARGS((char_u *title, char_u *icon));
-extern void mch_restore_title __ARGS((int which));
-extern int mch_get_user_name __ARGS((char_u *s, int len));
-extern void mch_get_host_name __ARGS((char_u *s, int len));
-extern long mch_get_pid __ARGS((void));
-extern int mch_dirname __ARGS((char_u *buf, int len));
-extern int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
-extern int mch_isFullName __ARGS((char_u *fname));
-extern long mch_getperm __ARGS((char_u *name));
-extern int mch_setperm __ARGS((char_u *name, long perm));
-extern void mch_hide __ARGS((char_u *name));
-extern int mch_isdir __ARGS((char_u *name));
-extern int mch_can_exe __ARGS((char_u *name));
-extern int mch_nodetype __ARGS((char_u *name));
-extern void mch_early_init __ARGS((void));
-extern void mch_exit __ARGS((int r));
-extern void mch_settmode __ARGS((int tmode));
-extern void mch_setmouse __ARGS((int on));
-extern int mch_screenmode __ARGS((char_u *arg));
-extern int mch_get_shellsize __ARGS((void));
-extern void mch_set_shellsize __ARGS((void));
-extern void mch_new_shellsize __ARGS((void));
-extern int mch_call_shell __ARGS((char_u *cmd, int options));
-extern void mch_breakcheck __ARGS((void));
-extern int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
-extern int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
-extern int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
-extern int mch_has_exp_wildcard __ARGS((char_u *p));
-extern int mch_has_wildcard __ARGS((char_u *p));
-extern int mch_remove __ARGS((char_u *file));
-extern char_u *mch_munge_fname __ARGS((char_u *fname));
-extern int ro_buflist_add __ARGS((char_u *old_name));
-extern int mch_chdir __ARGS((char_u *dir));
-extern void mch_read_filetype __ARGS((char_u *file));
-extern void mch_set_filetype __ARGS((char_u *file, char_u *type));
-extern int mch_check_filetype __ARGS((char_u *fname, char_u *type));
+void mch_write __ARGS((char_u *s, int len));
+int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
+int mch_char_avail __ARGS((void));
+long_u mch_avail_mem __ARGS((int special));
+void mch_delay __ARGS((long msec, int ignoreinput));
+void mch_suspend __ARGS((void));
+void mch_init __ARGS((void));
+int mch_check_win __ARGS((int argc, char **argv));
+int mch_input_isatty __ARGS((void));
+int mch_can_restore_title __ARGS((void));
+int mch_can_restore_icon __ARGS((void));
+void mch_settitle __ARGS((char_u *title, char_u *icon));
+void mch_restore_title __ARGS((int which));
+int mch_get_user_name __ARGS((char_u *s, int len));
+void mch_get_host_name __ARGS((char_u *s, int len));
+long mch_get_pid __ARGS((void));
+int mch_dirname __ARGS((char_u *buf, int len));
+int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+int mch_isFullName __ARGS((char_u *fname));
+long mch_getperm __ARGS((char_u *name));
+int mch_setperm __ARGS((char_u *name, long perm));
+void mch_hide __ARGS((char_u *name));
+int mch_isdir __ARGS((char_u *name));
+int mch_can_exe __ARGS((char_u *name));
+int mch_nodetype __ARGS((char_u *name));
+void mch_early_init __ARGS((void));
+void mch_exit __ARGS((int r));
+void mch_settmode __ARGS((int tmode));
+void mch_setmouse __ARGS((int on));
+int mch_screenmode __ARGS((char_u *arg));
+int mch_get_shellsize __ARGS((void));
+void mch_set_shellsize __ARGS((void));
+void mch_new_shellsize __ARGS((void));
+int mch_call_shell __ARGS((char_u *cmd, int options));
+void mch_breakcheck __ARGS((void));
+int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
+int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+int mch_has_exp_wildcard __ARGS((char_u *p));
+int mch_has_wildcard __ARGS((char_u *p));
+int mch_remove __ARGS((char_u *file));
+char_u *mch_munge_fname __ARGS((char_u *fname));
+int ro_buflist_add __ARGS((char_u *old_name));
+int mch_chdir __ARGS((char_u *dir));
+void mch_read_filetype __ARGS((char_u *file));
+void mch_set_filetype __ARGS((char_u *file, char_u *type));
+int mch_check_filetype __ARGS((char_u *fname, char_u *type));
 /* vim: set ft=c : */
--- a/src/proto/os_vms.pro
+++ b/src/proto/os_vms.pro
@@ -1,14 +1,14 @@
 /* os_vms.c */
-extern void mch_settmode __ARGS((int tmode));
-extern int mch_get_shellsize __ARGS((void));
-extern void mch_set_shellsize __ARGS((void));
-extern char_u *mch_getenv __ARGS((char_u *lognam));
-extern int mch_setenv __ARGS((char *var, char *value, int x));
-extern int vms_sys __ARGS((char *cmd, char *out, char *inp));
-extern int vms_sys_status __ARGS((int status));
-extern int vms_read __ARGS((char *inbuf, size_t nbytes));
-extern int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
-extern int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
-extern void *vms_fixfilename __ARGS((void *instring));
-extern void vms_remove_version __ARGS((void *fname));
+void mch_settmode __ARGS((int tmode));
+int mch_get_shellsize __ARGS((void));
+void mch_set_shellsize __ARGS((void));
+char_u *mch_getenv __ARGS((char_u *lognam));
+int mch_setenv __ARGS((char *var, char *value, int x));
+int vms_sys __ARGS((char *cmd, char *out, char *inp));
+int vms_sys_status __ARGS((int status));
+int vms_read __ARGS((char *inbuf, size_t nbytes));
+int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+void *vms_fixfilename __ARGS((void *instring));
+void vms_remove_version __ARGS((void *fname));
 /* vim: set ft=c : */
--- a/src/proto/os_win16.pro
+++ b/src/proto/os_win16.pro
@@ -1,12 +1,12 @@
 /* os_win16.c */
-extern void mch_setmouse __ARGS((int on));
-extern void mch_init __ARGS((void));
-extern int mch_check_win __ARGS((int argc, char **argv));
-extern long mch_get_pid __ARGS((void));
-extern int mch_call_shell __ARGS((char_u *cmd, int options));
-extern void mch_delay __ARGS((long msec, int ignoreinput));
-extern void mch_breakcheck __ARGS((void));
-extern long_u mch_avail_mem __ARGS((int special));
-extern int mch_rename __ARGS((const char *pszOldFile, const char *pszNewFile));
-extern char *default_shell __ARGS((void));
+void mch_setmouse __ARGS((int on));
+void mch_init __ARGS((void));
+int mch_check_win __ARGS((int argc, char **argv));
+long mch_get_pid __ARGS((void));
+int mch_call_shell __ARGS((char_u *cmd, int options));
+void mch_delay __ARGS((long msec, int ignoreinput));
+void mch_breakcheck __ARGS((void));
+long_u mch_avail_mem __ARGS((int special));
+int mch_rename __ARGS((const char *pszOldFile, const char *pszNewFile));
+char *default_shell __ARGS((void));
 /* vim: set ft=c : */
--- a/src/proto/popupmnu.pro
+++ b/src/proto/popupmnu.pro
@@ -1,8 +1,8 @@
 /* popupmnu.c */
-extern void pum_display __ARGS((pumitem_T *array, int size, int selected));
-extern void pum_redraw __ARGS((void));
-extern void pum_undisplay __ARGS((void));
-extern void pum_clear __ARGS((void));
-extern int pum_visible __ARGS((void));
-extern int pum_get_height __ARGS((void));
+void pum_display __ARGS((pumitem_T *array, int size, int selected));
+void pum_redraw __ARGS((void));
+void pum_undisplay __ARGS((void));
+void pum_clear __ARGS((void));
+int pum_visible __ARGS((void));
+int pum_get_height __ARGS((void));
 /* vim: set ft=c : */
--- a/src/proto/regexp.pro
+++ b/src/proto/regexp.pro
@@ -1,17 +1,17 @@
 /* regexp.c */
-extern void free_regexp_stuff __ARGS((void));
-extern int re_multiline __ARGS((regprog_T *prog));
-extern int re_lookbehind __ARGS((regprog_T *prog));
-extern char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp));
-extern regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags));
-extern int vim_regcomp_had_eol __ARGS((void));
-extern int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
-extern int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
-extern long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col));
-extern reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em));
-extern void unref_extmatch __ARGS((reg_extmatch_T *em));
-extern char_u *regtilde __ARGS((char_u *source, int magic));
-extern int vim_regsub __ARGS((regmatch_T *rmp, char_u *source, char_u *dest, int copy, int magic, int backslash));
-extern int vim_regsub_multi __ARGS((regmmatch_T *rmp, linenr_T lnum, char_u *source, char_u *dest, int copy, int magic, int backslash));
-extern char_u *reg_submatch __ARGS((int no));
+void free_regexp_stuff __ARGS((void));
+int re_multiline __ARGS((regprog_T *prog));
+int re_lookbehind __ARGS((regprog_T *prog));
+char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp));
+regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags));
+int vim_regcomp_had_eol __ARGS((void));
+int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col));
+reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em));
+void unref_extmatch __ARGS((reg_extmatch_T *em));
+char_u *regtilde __ARGS((char_u *source, int magic));
+int vim_regsub __ARGS((regmatch_T *rmp, char_u *source, char_u *dest, int copy, int magic, int backslash));
+int vim_regsub_multi __ARGS((regmmatch_T *rmp, linenr_T lnum, char_u *source, char_u *dest, int copy, int magic, int backslash));
+char_u *reg_submatch __ARGS((int no));
 /* vim: set ft=c : */
--- a/src/proto/spell.pro
+++ b/src/proto/spell.pro
@@ -1,26 +1,26 @@
 /* spell.c */
-extern int spell_check __ARGS((win_T *wp, char_u *ptr, hlf_T *attrp, int *capcol, int docount));
-extern int spell_move_to __ARGS((win_T *wp, int dir, int allwords, int curline, hlf_T *attrp));
-extern void spell_cat_line __ARGS((char_u *buf, char_u *line, int maxlen));
-extern char_u *did_set_spelllang __ARGS((buf_T *buf));
-extern void spell_free_all __ARGS((void));
-extern void spell_reload __ARGS((void));
-extern int spell_check_msm __ARGS((void));
-extern void put_bytes __ARGS((FILE *fd, long_u nr, int len));
-extern void ex_mkspell __ARGS((exarg_T *eap));
-extern void ex_spell __ARGS((exarg_T *eap));
-extern void spell_add_word __ARGS((char_u *word, int len, int bad, int index, int undo));
-extern void init_spell_chartab __ARGS((void));
-extern int spell_check_sps __ARGS((void));
-extern void spell_suggest __ARGS((int count));
-extern void ex_spellrepall __ARGS((exarg_T *eap));
-extern void spell_suggest_list __ARGS((garray_T *gap, char_u *word, int maxcount, int need_cap, int interactive));
-extern char_u *eval_soundfold __ARGS((char_u *word));
-extern void ex_spellinfo __ARGS((exarg_T *eap));
-extern void ex_spelldump __ARGS((exarg_T *eap));
-extern void spell_dump_compl __ARGS((buf_T *buf, char_u *pat, int ic, int *dir, int dumpflags_arg));
-extern char_u *spell_to_word_end __ARGS((char_u *start, buf_T *buf));
-extern int spell_word_start __ARGS((int startcol));
-extern void spell_expand_check_cap __ARGS((colnr_T col));
-extern int expand_spelling __ARGS((linenr_T lnum, int col, char_u *pat, char_u ***matchp));
+int spell_check __ARGS((win_T *wp, char_u *ptr, hlf_T *attrp, int *capcol, int docount));
+int spell_move_to __ARGS((win_T *wp, int dir, int allwords, int curline, hlf_T *attrp));
+void spell_cat_line __ARGS((char_u *buf, char_u *line, int maxlen));
+char_u *did_set_spelllang __ARGS((buf_T *buf));
+void spell_free_all __ARGS((void));
+void spell_reload __ARGS((void));
+int spell_check_msm __ARGS((void));
+void put_bytes __ARGS((FILE *fd, long_u nr, int len));
+void ex_mkspell __ARGS((exarg_T *eap));
+void ex_spell __ARGS((exarg_T *eap));
+void spell_add_word __ARGS((char_u *word, int len, int bad, int idx, int undo));
+void init_spell_chartab __ARGS((void));
+int spell_check_sps __ARGS((void));
+void spell_suggest __ARGS((int count));
+void ex_spellrepall __ARGS((exarg_T *eap));
+void spell_suggest_list __ARGS((garray_T *gap, char_u *word, int maxcount, int need_cap, int interactive));
+char_u *eval_soundfold __ARGS((char_u *word));
+void ex_spellinfo __ARGS((exarg_T *eap));
+void ex_spelldump __ARGS((exarg_T *eap));
+void spell_dump_compl __ARGS((buf_T *buf, char_u *pat, int ic, int *dir, int dumpflags_arg));
+char_u *spell_to_word_end __ARGS((char_u *start, buf_T *buf));
+int spell_word_start __ARGS((int startcol));
+void spell_expand_check_cap __ARGS((colnr_T col));
+int expand_spelling __ARGS((linenr_T lnum, int col, char_u *pat, char_u ***matchp));
 /* vim: set ft=c : */
--- a/src/proto/syntax.pro
+++ b/src/proto/syntax.pro
@@ -1,47 +1,47 @@
 /* syntax.c */
-extern void syntax_start __ARGS((win_T *wp, linenr_T lnum));
-extern void syn_stack_free_all __ARGS((buf_T *buf));
-extern void syn_stack_apply_changes __ARGS((buf_T *buf));
-extern void syntax_end_parsing __ARGS((linenr_T lnum));
-extern int syntax_check_changed __ARGS((linenr_T lnum));
-extern int get_syntax_attr __ARGS((colnr_T col, int *can_spell));
-extern void syntax_clear __ARGS((buf_T *buf));
-extern void ex_syntax __ARGS((exarg_T *eap));
-extern int syntax_present __ARGS((buf_T *buf));
-extern void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
-extern char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
-extern int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
-extern int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
-extern void init_highlight __ARGS((int both, int reset));
-extern int load_colors __ARGS((char_u *name));
-extern void do_highlight __ARGS((char_u *line, int forceit, int init));
-extern void free_highlight __ARGS((void));
-extern void restore_cterm_colors __ARGS((void));
-extern void set_normal_colors __ARGS((void));
-extern char_u *hl_get_font_name __ARGS((void));
-extern void hl_set_font_name __ARGS((char_u *font_name));
-extern void hl_set_bg_color_name __ARGS((char_u *name));
-extern void hl_set_fg_color_name __ARGS((char_u *name));
-extern void clear_hl_tables __ARGS((void));
-extern int hl_combine_attr __ARGS((int char_attr, int prim_attr));
-extern attrentry_T *syn_gui_attr2entry __ARGS((int attr));
-extern int syn_attr2attr __ARGS((int attr));
-extern attrentry_T *syn_term_attr2entry __ARGS((int attr));
-extern attrentry_T *syn_cterm_attr2entry __ARGS((int attr));
-extern char_u *highlight_has_attr __ARGS((int id, int flag, int modec));
-extern char_u *highlight_color __ARGS((int id, char_u *what, int modec));
-extern long_u highlight_gui_color_rgb __ARGS((int id, int fg));
-extern int syn_name2id __ARGS((char_u *name));
-extern int highlight_exists __ARGS((char_u *name));
-extern char_u *syn_id2name __ARGS((int id));
-extern int syn_namen2id __ARGS((char_u *linep, int len));
-extern int syn_check_group __ARGS((char_u *pp, int len));
-extern int syn_id2attr __ARGS((int hl_id));
-extern int syn_id2colors __ARGS((int hl_id, guicolor_T *fgp, guicolor_T *bgp));
-extern int syn_get_final_id __ARGS((int hl_id));
-extern void highlight_gui_started __ARGS((void));
-extern int highlight_changed __ARGS((void));
-extern void set_context_in_highlight_cmd __ARGS((expand_T *xp, char_u *arg));
-extern char_u *get_highlight_name __ARGS((expand_T *xp, int idx));
-extern void free_highlight_fonts __ARGS((void));
+void syntax_start __ARGS((win_T *wp, linenr_T lnum));
+void syn_stack_free_all __ARGS((buf_T *buf));
+void syn_stack_apply_changes __ARGS((buf_T *buf));
+void syntax_end_parsing __ARGS((linenr_T lnum));
+int syntax_check_changed __ARGS((linenr_T lnum));
+int get_syntax_attr __ARGS((colnr_T col, int *can_spell));
+void syntax_clear __ARGS((buf_T *buf));
+void ex_syntax __ARGS((exarg_T *eap));
+int syntax_present __ARGS((buf_T *buf));
+void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg));
+char_u *get_syntax_name __ARGS((expand_T *xp, int idx));
+int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp));
+int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
+void init_highlight __ARGS((int both, int reset));
+int load_colors __ARGS((char_u *name));
+void do_highlight __ARGS((char_u *line, int forceit, int init));
+void free_highlight __ARGS((void));
+void restore_cterm_colors __ARGS((void));
+void set_normal_colors __ARGS((void));
+char_u *hl_get_font_name __ARGS((void));
+void hl_set_font_name __ARGS((char_u *font_name));
+void hl_set_bg_color_name __ARGS((char_u *name));
+void hl_set_fg_color_name __ARGS((char_u *name));
+void clear_hl_tables __ARGS((void));
+int hl_combine_attr __ARGS((int char_attr, int prim_attr));
+attrentry_T *syn_gui_attr2entry __ARGS((int attr));
+int syn_attr2attr __ARGS((int attr));
+attrentry_T *syn_term_attr2entry __ARGS((int attr));
+attrentry_T *syn_cterm_attr2entry __ARGS((int attr));
+char_u *highlight_has_attr __ARGS((int id, int flag, int modec));
+char_u *highlight_color __ARGS((int id, char_u *what, int modec));
+long_u highlight_gui_color_rgb __ARGS((int id, int fg));
+int syn_name2id __ARGS((char_u *name));
+int highlight_exists __ARGS((char_u *name));
+char_u *syn_id2name __ARGS((int id));
+int syn_namen2id __ARGS((char_u *linep, int len));
+int syn_check_group __ARGS((char_u *pp, int len));
+int syn_id2attr __ARGS((int hl_id));
+int syn_id2colors __ARGS((int hl_id, guicolor_T *fgp, guicolor_T *bgp));
+int syn_get_final_id __ARGS((int hl_id));
+void highlight_gui_started __ARGS((void));
+int highlight_changed __ARGS((void));
+void set_context_in_highlight_cmd __ARGS((expand_T *xp, char_u *arg));
+char_u *get_highlight_name __ARGS((expand_T *xp, int idx));
+void free_highlight_fonts __ARGS((void));
 /* vim: set ft=c : */
--- a/src/proto/version.pro
+++ b/src/proto/version.pro
@@ -1,9 +1,9 @@
 /* version.c */
-extern void make_version __ARGS((void));
-extern int highest_patch __ARGS((void));
-extern int has_patch __ARGS((int n));
-extern void ex_version __ARGS((exarg_T *eap));
-extern void list_version __ARGS((void));
-extern void intro_message __ARGS((int colon));
-extern void ex_intro __ARGS((exarg_T *eap));
+void make_version __ARGS((void));
+int highest_patch __ARGS((void));
+int has_patch __ARGS((int n));
+void ex_version __ARGS((exarg_T *eap));
+void list_version __ARGS((void));
+void intro_message __ARGS((int colon));
+void ex_intro __ARGS((exarg_T *eap));
 /* vim: set ft=c : */
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -1,62 +1,62 @@
 /* window.c */
-extern void do_window __ARGS((int nchar, long Prenum, int xchar));
-extern int win_split __ARGS((int size, int flags));
-extern int win_valid __ARGS((win_T *win));
-extern int win_count __ARGS((void));
-extern int make_windows __ARGS((int count, int vertical));
-extern void win_move_after __ARGS((win_T *win1, win_T *win2));
-extern void win_equal __ARGS((win_T *next_curwin, int current, int dir));
-extern void close_windows __ARGS((buf_T *buf, int keep_curwin));
-extern void win_close __ARGS((win_T *win, int free_buf));
-extern void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
-extern void win_free_all __ARGS((void));
-extern void close_others __ARGS((int message, int forceit));
-extern void curwin_init __ARGS((void));
-extern int win_alloc_first __ARGS((void));
-extern void win_init_size __ARGS((void));
-extern void free_tabpage __ARGS((tabpage_T *tp));
-extern int win_new_tabpage __ARGS((int after));
-extern int may_open_tabpage __ARGS((void));
-extern int make_tabpages __ARGS((int maxcount));
-extern int valid_tabpage __ARGS((tabpage_T *tpc));
-extern tabpage_T *find_tabpage __ARGS((int n));
-extern int tabpage_index __ARGS((tabpage_T *ftp));
-extern void goto_tabpage __ARGS((int n));
-extern void goto_tabpage_tp __ARGS((tabpage_T *tp));
-extern void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
-extern void tabpage_move __ARGS((int nr));
-extern void win_goto __ARGS((win_T *wp));
-extern win_T *win_find_nr __ARGS((int winnr));
-extern void win_enter __ARGS((win_T *wp, int undo_sync));
-extern win_T *buf_jump_open_win __ARGS((buf_T *buf));
-extern win_T *buf_jump_open_tab __ARGS((buf_T *buf));
-extern int win_alloc_lines __ARGS((win_T *wp));
-extern void win_free_lsize __ARGS((win_T *wp));
-extern void shell_new_rows __ARGS((void));
-extern void shell_new_columns __ARGS((void));
-extern void win_size_save __ARGS((garray_T *gap));
-extern void win_size_restore __ARGS((garray_T *gap));
-extern int win_comp_pos __ARGS((void));
-extern void win_setheight __ARGS((int height));
-extern void win_setheight_win __ARGS((int height, win_T *win));
-extern void win_setwidth __ARGS((int width));
-extern void win_setwidth_win __ARGS((int width, win_T *wp));
-extern void win_setminheight __ARGS((void));
-extern void win_drag_status_line __ARGS((win_T *dragwin, int offset));
-extern void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
-extern void win_comp_scroll __ARGS((win_T *wp));
-extern void command_height __ARGS((void));
-extern void last_status __ARGS((int morewin));
-extern int tabline_height __ARGS((void));
-extern char_u *grab_file_name __ARGS((long count, linenr_T *file_lnum));
-extern char_u *file_name_at_cursor __ARGS((int options, long count, linenr_T *file_lnum));
-extern char_u *file_name_in_line __ARGS((char_u *line, int col, int options, long count, char_u *rel_fname, linenr_T *file_lnum));
-extern char_u *find_file_name_in_path __ARGS((char_u *ptr, int len, int options, long count, char_u *rel_fname));
-extern int path_with_url __ARGS((char_u *fname));
-extern int vim_isAbsName __ARGS((char_u *name));
-extern int vim_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
-extern int min_rows __ARGS((void));
-extern int only_one_window __ARGS((void));
-extern void check_lnums __ARGS((int do_curwin));
-extern int win_hasvertsplit __ARGS((void));
+void do_window __ARGS((int nchar, long Prenum, int xchar));
+int win_split __ARGS((int size, int flags));
+int win_valid __ARGS((win_T *win));
+int win_count __ARGS((void));
+int make_windows __ARGS((int count, int vertical));
+void win_move_after __ARGS((win_T *win1, win_T *win2));
+void win_equal __ARGS((win_T *next_curwin, int current, int dir));
+void close_windows __ARGS((buf_T *buf, int keep_curwin));
+void win_close __ARGS((win_T *win, int free_buf));
+void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
+void win_free_all __ARGS((void));
+void close_others __ARGS((int message, int forceit));
+void curwin_init __ARGS((void));
+int win_alloc_first __ARGS((void));
+void win_init_size __ARGS((void));
+void free_tabpage __ARGS((tabpage_T *tp));
+int win_new_tabpage __ARGS((int after));
+int may_open_tabpage __ARGS((void));
+int make_tabpages __ARGS((int maxcount));
+int valid_tabpage __ARGS((tabpage_T *tpc));
+tabpage_T *find_tabpage __ARGS((int n));
+int tabpage_index __ARGS((tabpage_T *ftp));
+void goto_tabpage __ARGS((int n));
+void goto_tabpage_tp __ARGS((tabpage_T *tp));
+void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
+void tabpage_move __ARGS((int nr));
+void win_goto __ARGS((win_T *wp));
+win_T *win_find_nr __ARGS((int winnr));
+void win_enter __ARGS((win_T *wp, int undo_sync));
+win_T *buf_jump_open_win __ARGS((buf_T *buf));
+win_T *buf_jump_open_tab __ARGS((buf_T *buf));
+int win_alloc_lines __ARGS((win_T *wp));
+void win_free_lsize __ARGS((win_T *wp));
+void shell_new_rows __ARGS((void));
+void shell_new_columns __ARGS((void));
+void win_size_save __ARGS((garray_T *gap));
+void win_size_restore __ARGS((garray_T *gap));
+int win_comp_pos __ARGS((void));
+void win_setheight __ARGS((int height));
+void win_setheight_win __ARGS((int height, win_T *win));
+void win_setwidth __ARGS((int width));
+void win_setwidth_win __ARGS((int width, win_T *wp));
+void win_setminheight __ARGS((void));
+void win_drag_status_line __ARGS((win_T *dragwin, int offset));
+void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
+void win_comp_scroll __ARGS((win_T *wp));
+void command_height __ARGS((void));
+void last_status __ARGS((int morewin));
+int tabline_height __ARGS((void));
+char_u *grab_file_name __ARGS((long count, linenr_T *file_lnum));
+char_u *file_name_at_cursor __ARGS((int options, long count, linenr_T *file_lnum));
+char_u *file_name_in_line __ARGS((char_u *line, int col, int options, long count, char_u *rel_fname, linenr_T *file_lnum));
+char_u *find_file_name_in_path __ARGS((char_u *ptr, int len, int options, long count, char_u *rel_fname));
+int path_with_url __ARGS((char_u *fname));
+int vim_isAbsName __ARGS((char_u *name));
+int vim_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+int min_rows __ARGS((void));
+int only_one_window __ARGS((void));
+void check_lnums __ARGS((int do_curwin));
+int win_hasvertsplit __ARGS((void));
 /* vim: set ft=c : */
--- a/src/proto/workshop.pro
+++ b/src/proto/workshop.pro
@@ -1,49 +1,49 @@
 /* workshop.c */
-extern void workshop_init __ARGS((void));
-extern void workshop_postinit __ARGS((void));
-extern void ex_wsverb __ARGS((exarg_T *eap));
-extern char *workshop_get_editor_name __ARGS((void));
-extern char *workshop_get_editor_version __ARGS((void));
-extern void workshop_load_file __ARGS((char *filename, int line, char *frameid));
-extern void workshop_reload_file __ARGS((char *filename, int line));
-extern void workshop_show_file __ARGS((char *filename));
-extern void workshop_goto_line __ARGS((char *filename, int lineno));
-extern void workshop_front_file __ARGS((char *filename));
-extern void workshop_save_file __ARGS((char *filename));
-extern void workshop_save_files __ARGS((void));
-extern void workshop_quit __ARGS((void));
-extern void workshop_minimize __ARGS((void));
-extern void workshop_maximize __ARGS((void));
-extern void workshop_add_mark_type __ARGS((int idx, char *colorspec, char *sign));
-extern void workshop_set_mark __ARGS((char *filename, int lineno, int markId, int idx));
-extern void workshop_change_mark_type __ARGS((char *filename, int markId, int idx));
-extern void workshop_goto_mark __ARGS((char *filename, int markId, char *message));
-extern void workshop_delete_mark __ARGS((char *filename, int markId));
-extern int workshop_get_mark_lineno __ARGS((char *filename, int markId));
-extern void workshop_moved_marks __ARGS((char *filename));
-extern int workshop_get_font_height __ARGS((void));
-extern void workshop_footer_message __ARGS((char *message, int severity));
-extern void workshop_menu_begin __ARGS((char *label));
-extern void workshop_submenu_begin __ARGS((char *label));
-extern void workshop_submenu_end __ARGS((void));
-extern void workshop_menu_item __ARGS((char *label, char *verb, char *accelerator, char *acceleratorText, char *name, char *filepos, char *sensitive));
-extern void workshop_menu_end __ARGS((void));
-extern void workshop_toolbar_begin __ARGS((void));
-extern void workshop_toolbar_end __ARGS((void));
-extern void workshop_toolbar_button __ARGS((char *label, char *verb, char *senseVerb, char *filepos, char *help, char *sense, char *file, char *left));
-extern void workshop_frame_sensitivities __ARGS((VerbSense *vs));
-extern void workshop_set_option __ARGS((char *option, char *value));
-extern void workshop_balloon_mode __ARGS((Boolean on));
-extern void workshop_balloon_delay __ARGS((int delay));
-extern void workshop_show_balloon_tip __ARGS((char *tip));
-extern void workshop_hotkeys __ARGS((Boolean on));
-extern int workshop_get_positions __ARGS((void *clientData, char **filename, int *curLine, int *curCol, int *selStartLine, int *selStartCol, int *selEndLine, int *selEndCol, int *selLength, char **selection));
-extern char *workshop_test_getcurrentfile __ARGS((void));
-extern int workshop_test_getcursorrow __ARGS((void));
-extern int workshop_test_getcursorcol __ARGS((void));
-extern char *workshop_test_getcursorrowtext __ARGS((void));
-extern char *workshop_test_getselectedtext __ARGS((void));
-extern void workshop_save_sensitivity __ARGS((char *filename));
-extern void workshop_beval_cb __ARGS((BalloonEval *beval, int state));
-extern void findYourself __ARGS((char *argv0));
+void workshop_init __ARGS((void));
+void workshop_postinit __ARGS((void));
+void ex_wsverb __ARGS((exarg_T *eap));
+char *workshop_get_editor_name __ARGS((void));
+char *workshop_get_editor_version __ARGS((void));
+void workshop_load_file __ARGS((char *filename, int line, char *frameid));
+void workshop_reload_file __ARGS((char *filename, int line));
+void workshop_show_file __ARGS((char *filename));
+void workshop_goto_line __ARGS((char *filename, int lineno));
+void workshop_front_file __ARGS((char *filename));
+void workshop_save_file __ARGS((char *filename));
+void workshop_save_files __ARGS((void));
+void workshop_quit __ARGS((void));
+void workshop_minimize __ARGS((void));
+void workshop_maximize __ARGS((void));
+void workshop_add_mark_type __ARGS((int idx, char *colorspec, char *sign));
+void workshop_set_mark __ARGS((char *filename, int lineno, int markId, int idx));
+void workshop_change_mark_type __ARGS((char *filename, int markId, int idx));
+void workshop_goto_mark __ARGS((char *filename, int markId, char *message));
+void workshop_delete_mark __ARGS((char *filename, int markId));
+int workshop_get_mark_lineno __ARGS((char *filename, int markId));
+void workshop_moved_marks __ARGS((char *filename));
+int workshop_get_font_height __ARGS((void));
+void workshop_footer_message __ARGS((char *message, int severity));
+void workshop_menu_begin __ARGS((char *label));
+void workshop_submenu_begin __ARGS((char *label));
+void workshop_submenu_end __ARGS((void));
+void workshop_menu_item __ARGS((char *label, char *verb, char *accelerator, char *acceleratorText, char *name, char *filepos, char *sensitive));
+void workshop_menu_end __ARGS((void));
+void workshop_toolbar_begin __ARGS((void));
+void workshop_toolbar_end __ARGS((void));
+void workshop_toolbar_button __ARGS((char *label, char *verb, char *senseVerb, char *filepos, char *help, char *sense, char *file, char *left));
+void workshop_frame_sensitivities __ARGS((VerbSense *vs));
+void workshop_set_option __ARGS((char *option, char *value));
+void workshop_balloon_mode __ARGS((Boolean on));
+void workshop_balloon_delay __ARGS((int delay));
+void workshop_show_balloon_tip __ARGS((char *tip));
+void workshop_hotkeys __ARGS((Boolean on));
+int workshop_get_positions __ARGS((void *clientData, char **filename, int *curLine, int *curCol, int *selStartLine, int *selStartCol, int *selEndLine, int *selEndCol, int *selLength, char **selection));
+char *workshop_test_getcurrentfile __ARGS((void));
+int workshop_test_getcursorrow __ARGS((void));
+int workshop_test_getcursorcol __ARGS((void));
+char *workshop_test_getcursorrowtext __ARGS((void));
+char *workshop_test_getselectedtext __ARGS((void));
+void workshop_save_sensitivity __ARGS((char *filename));
+void workshop_beval_cb __ARGS((BalloonEval *beval, int state));
+void findYourself __ARGS((char *argv0));
 /* vim: set ft=c : */
--- a/src/testdir/test55.ok
+++ b/src/testdir/test55.ok
@@ -105,3 +105,7 @@ caught a:000[3]
 ['aa', '', 'bb', 'cc', '']
 ['a', 'b', 'c']
 ['', 'a', '', 'b', '', 'c', '']
+1
+1
+0
+0
--- a/src/vim16.def
+++ b/src/vim16.def
@@ -1,5 +1,5 @@
 CODE PRELOAD EXECUTEONLY
 DATA MULTIPLE SHARED
-DESCRIPTION 'Vim 7.0'
+DESCRIPTION 'Vim 7.1a'
 STACKSIZE 16000
 HEAPSIZE 10000
--- a/src/vimrun.c
+++ b/src/vimrun.c
@@ -99,7 +99,9 @@ main(void)
      */
     retval = system(p);
 
-    if (retval != 0)
+    if (retval == -1)
+	perror("vimrun system(): ");
+    else if (retval != 0)
 	printf("shell returned %d\n", retval);
 
     if (!silent)