updated for version 7.0150
diff --git a/runtime/autoload/csscomplete.vim b/runtime/autoload/csscomplete.vim
index 8ac3600..9461f39 100644
--- a/runtime/autoload/csscomplete.vim
+++ b/runtime/autoload/csscomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	CSS 2.1
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2005 Sep 19
+" Last Change:	2005 Sep 23
 
 function! csscomplete#CompleteCSS(findstart, base)
 if a:findstart
@@ -18,6 +18,8 @@
 	" 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
 	
 	let line = a:base
 	let res = []
@@ -26,14 +28,16 @@
 
 	" We need the last occurrence of char so reverse line
 	let revline = join(reverse(split(line, '.\zs')), '')
+
 	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 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, '!')
 
 	if openbrace > -1
 		let borders[openbrace] = "openbrace"
@@ -59,6 +63,9 @@
 	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
@@ -318,6 +325,22 @@
 
 		return []
 
+	elseif borders[min(keys(borders))] == 'exclam'
+
+		" Complete values
+		let impbase = matchstr(line, '.\{-}!\s*\ze[a-zA-Z ]*$')
+		let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$')
+
+		let values = ["important"]
+
+		for m in values
+			if m =~? '^'.entered_imp
+				call add(res, impbase . m)
+			endif
+		endfor
+
+		return res
+
 	elseif borders[min(keys(borders))] == 'atrule'
 
 		let afterat = matchstr(line, '.*@\zs.*')
@@ -368,7 +391,7 @@
 
 		endif
 
-		let values = ["charset", "page", "media", "import"]
+		let values = ["charset", "page", "media", "import", "font-face"]
 
 		let atrulebase = matchstr(line, '.*@\ze[a-zA-Z -]*$')
 		let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim
index ab50952..9dd5830 100644
--- a/runtime/autoload/htmlcomplete.vim
+++ b/runtime/autoload/htmlcomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	XHTML 1.0 Strict
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2005 Sep 19
+" Last Change:	2005 Sep 23
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -66,8 +66,13 @@
 		" it possible?
 		" Also retrieving class names from current file and linked
 		" stylesheets.
-		if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
-			if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+		if a:base =~ "\\(on[a-z]*\\|id\\|style\\|class\\)\\s*=\\s*[\"']"
+			if a:base =~ "\\(id\\|class\\)\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+				if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+					let search_for = "class"
+				elseif a:base =~ "id\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+					let search_for = "id"
+				endif
 				" Handle class name completion
 				" 1. Find lines of <link stylesheet>
 				" 1a. Check file for @import
@@ -76,9 +81,22 @@
 				let head = getline(search('<head\>'), search('<\/head>'))
 				let headjoined = join(copy(head), ' ')
 				if headjoined =~ '<style'
-					let stylehead = substitute(headjoined, '+>\*[', ' ', 'g')
-					let styleheadlines = split(stylehead)
-					let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+					let stylehead = substitute(headjoined, '+>\*[,', ' ', 'g')
+					if search_for == 'class'
+						let styleheadlines = split(stylehead)
+						let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+					else
+						let stylesheet = split(headjoined, '[{}]')
+						" Get all lines which fit id syntax
+						let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+						" Filter out possible color definitions
+						call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
+						" Filter out complex border definitions
+						call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
+						let templines = join(classlines, ' ')
+						let headclasslines = split(templines)
+						call filter(headclasslines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+					endif
 					let internal = 1
 				else
 					let internal = 0
@@ -93,13 +111,15 @@
 						let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
 					endif
 				endfor
-				for file in filestable
+				for file in styletable
 					if filereadable(file)
 						let stylesheet = readfile(file)
 						let secimport = filter(copy(stylesheet), "v:val =~ '@import'")
 						if len(secimport) > 0
 							for line in secimport
-								let secimportfiles += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
+								let secfile = matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")
+								let secfile = fnamemodify(file, ":p:h").'/'.secfile
+								let secimportfiles += [secfile]
 							endfor
 						endif
 					endif
@@ -109,10 +129,24 @@
 				for file in cssfiles
 					if filereadable(file)
 						let stylesheet = readfile(file)
-						let stylefile = join(stylesheet)
-						let stylefile = substitute(stylefile, '+>\*[', ' ', 'g')
-						let stylesheet = split(stylefile)
-						let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+						let stylefile = join(stylesheet, ' ')
+						let stylefile = substitute(stylefile, '+>\*[,', ' ', 'g')
+						if search_for == 'class'
+							let stylesheet = split(stylefile)
+							let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+						else
+							let stylesheet = split(stylefile, '[{}]')
+							" Get all lines which fit id syntax
+							let classlines = filter(copy(stylesheet), "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+							" Filter out possible color definitions
+							call filter(classlines, "v:val !~ ':\\s*#[a-zA-Z0-9_-]\\+'")
+							" Filter out complex border definitions
+							call filter(classlines, "v:val !~ '\\(none\\|hidden\\|dotted\\|dashed\\|solid\\|double\\|groove\\|ridge\\|inset\\|outset\\)\\s*#[a-zA-Z0-9_-]\\+'")
+							let templines = join(classlines, ' ')
+							let stylelines = split(templines)
+							let classlines = filter(stylelines, "v:val =~ '#[a-zA-Z0-9_-]\\+'")
+
+						endif
 					endif
 					" We gathered classes definitions from all external files
 					let classes += classlines
@@ -120,43 +154,71 @@
 				if internal == 1
 					let classes += headclasslines
 				endif
-				let elements = {}
-				for element in classes
-					if element =~ '^\.'
-						let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
-						let class = substitute(class, ':.*', '', '')
-						if has_key(elements, "common")
-							let elements["common"] .= " ".class
-						else
-							let elements["common"] = class
-						endif
-					else
-						let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
-						let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
-						if tagname != ''
-							if has_key(elements, tagname)
-								let elements[tagname] .= " ".class
+
+				if search_for == 'class'
+					let elements = {}
+					for element in classes
+						if element =~ '^\.'
+							let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+							let class = substitute(class, ':.*', '', '')
+							if has_key(elements, 'common')
+								let elements['common'] .= ' '.class
 							else
-								let elements[tagname] = class
+								let elements['common'] = class
+							endif
+						else
+							let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+							let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
+							if tagname != ''
+								if has_key(elements, tagname)
+									let elements[tagname] .= ' '.class
+								else
+									let elements[tagname] = class
+								endif
 							endif
 						endif
-					endif
-				endfor
+					endfor
 
-				if has_key(elements, tag) && has_key(elements, "common")
-					let values = split(elements[tag]." ".elements["common"])
-				elseif has_key(elements, tag) && !has_key(elements, "common")
-					let values = split(elements[tag])
-				elseif !has_key(elements, tag) && has_key(elements, "common")
-					let values = split(elements["common"])
-				else
-					return []
+					if has_key(elements, tag) && has_key(elements, 'common')
+						let values = split(elements[tag]." ".elements['common'])
+					elseif has_key(elements, tag) && !has_key(elements, 'common')
+						let values = split(elements[tag])
+					elseif !has_key(elements, tag) && has_key(elements, 'common')
+						let values = split(elements['common'])
+					else
+						return []
+					endif
+
+				elseif search_for == 'id'
+					" Find used IDs
+					" 1. Catch whole file
+					let filelines = getline(1, line('$'))
+					" 2. Find lines with possible id
+					let used_id_lines = filter(filelines, 'v:val =~ "id\\s*=\\s*[\"''][a-zA-Z0-9_-]\\+"')
+					" 3a. Join all filtered lines 
+					let id_string = join(used_id_lines, ' ')
+					" 3b. And split them to be sure each id is in separate item
+					let id_list = split(id_string, 'id\s*=\s*')
+					" 4. Extract id values
+					let used_id = map(id_list, 'matchstr(v:val, "[\"'']\\zs[a-zA-Z0-9_-]\\+\\ze")')
+					let joined_used_id = ','.join(used_id, ',').','
+
+					let allvalues = map(classes, 'matchstr(v:val, ".*#\\zs[a-zA-Z0-9_-]\\+")')
+
+					let values = []
+
+					for element in classes
+						if joined_used_id !~ ','.element.','
+							let values += [element]
+						endif
+
+					endfor
+
 				endif
 
 				" We need special version of sbase
 				let classbase = matchstr(a:base, ".*[\"']")
-			    let classquote = matchstr(classbase, '.$')
-
+				let classquote = matchstr(classbase, '.$')
 
 				let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*")
 
@@ -229,6 +291,10 @@
 					let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
 				elseif a:base =~ '^button'
 					let values = ["button", "submit", "reset"]
+				elseif a:base =~ '^style'
+					let values = ["text/css"]
+				elseif a:base =~ '^script'
+					let values = ["text/javascript"]
 				endif
 			else
 				return []
@@ -313,11 +379,11 @@
 		elseif tag == 'q'
 			let attrs = coreattrs + ["cite"]
 		elseif tag == 'script'
-			let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
+			let attrs = ["id", "charset", "type=\"text/javascript\"", "type", "src", "defer", "xml:space"]
 		elseif tag == 'select'
 			let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
 		elseif tag == 'style'
-			let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
+			let attrs = coreattrs + ["id", "type=\"text/css\"", "type", "media", "title", "xml:space"]
 		elseif tag == 'table'
 			let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
 		elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index c7434af..10dd285 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,6 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 "            AUTOLOAD PORTION
-" Date:		Sep 12, 2005
-" Version:	70
+" Last Change:	Aug 29, 2005
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@@ -17,19 +16,13 @@
 "  But be doers of the Word, and not only hearers, deluding your own selves {{{1
 "  (James 1:22 RSV)
 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-" Exception for &cp: {{{1
-if &cp
-  finish
-endif
+let s:keepcpo= &cpo
+set cpo&vim
+" call Decho("doing autoload/netrw.vim")
 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
  finish
 endif
-let g:loaded_netrw = "v70"
-let s:keepcpo      = &cpo
-set cpo&vim
-" call Decho("doing autoload/netrw.vim")
 
 " ---------------------------------------------------------------------
 " Default values for global netrw variables {{{1
@@ -1133,7 +1126,7 @@
 "   call Decho("new path<".path.">")
 
    " remote-read the requested file into current buffer
-   keepjumps keepalt enew!
+   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)
@@ -1143,7 +1136,7 @@
    keepjumps 1d
 
    " save certain window-oriented variables into buffer-oriented variables
-   call s:SetBufWinVars()
+   call s:BufWinVars()
    call s:NetOptionRestore()
    setlocal nomod
 
@@ -1169,7 +1162,7 @@
    endif
   else
 "   call Decho("generate a new buffer")
-   keepjumps keepalt enew!
+   enew!
   endif
 
   " rename file to reflect where its from
@@ -1207,7 +1200,7 @@
   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 <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
-  nnoremap <buffer> <silent> <2-leftmouse>	:call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<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>'
@@ -1267,7 +1260,6 @@
     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(".")
@@ -1282,9 +1274,9 @@
     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'
+    exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
+    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
    endif
 
   else
@@ -1341,33 +1333,33 @@
     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
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+    exe 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'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.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'
+     exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
     endif
    endif
   endif
 
+  " cleanup any windows mess at end-of-line
+  keepjumps silent! %s/\r$//e
   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()
@@ -1457,7 +1449,7 @@
     let s:netrw_skipbrowse= 1
     echo 'Pressing "a" also works'
    elseif line("$") > w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt
+    exe w:netrw_bannercnt
    endif
 
   elseif w:netrw_longlist == 0
@@ -1698,7 +1690,7 @@
    " create a local copy
    let fname= tempname().".".exten
 "   call Decho("create a local copy of <".a:fname."> as <".fname.">")
-   exe "silent keepjumps bot 1new ".a:fname
+   exe "keepjumps silent bot 1new ".a:fname
    set bh=delete
    exe "w! ".fname
    q
@@ -1823,14 +1815,14 @@
 
   " cleanup for Windows
   if has("win32") || has("win95") || has("win64") || has("win16")
-   silent! keepjumps! %s/\r$//e
+   keepjumps silent!! %s/\r$//e
   endif
   if a:cmd == "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/$/@/
+   keepjumps silent! g/d\%([-r][-w][-x]\)\{3}/s@$@/@
+   keepjumps silent! 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'
+    exe "keepjumps silent! ".curline.',$s/^\%(\S\+\s\+\)\{8}//e'
    endif
   endif
 
@@ -1868,9 +1860,9 @@
    " Prune the list by hiding any files which match
 "   call Decho("pruning <".hide."> listhide<".listhide.">")
    if g:netrw_hide == 1
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
    elseif g:netrw_hide == 2
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$v~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
    endif
   endwhile
 
@@ -2004,7 +1996,7 @@
      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
+    exe w:netrw_bannercnt
    endwhile
    exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
    set noma nomod
@@ -2138,7 +2130,7 @@
   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
+    exe w:netrw_bannercnt
    endif
    echo ""
 "  call Dret("NetBookmarkDir - ignoring")
@@ -2237,10 +2229,12 @@
 " ---------------------------------------------------------------------
 " NetObtain: obtain file under cursor (for remote browsing support) {{{2
 fun! s:NetObtain()
+  if !exists("s:netrw_users_stl")
+   let s:netrw_users_stl= &stl
+  endif
   let fname= expand("<cWORD>")
-
-  " NetrwStatusLine support - for obtaining support
-  call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.fname)
+  exe 'set stl=%f\ %h%m%r%=Obtaining\ '.escape(fname,' ')
+  redraw!
 
 "  call Dfunc("NetObtain() method=".w:netrw_method)
   if exists("w:netrw_method") && w:netrw_method =~ '[235]'
@@ -2318,8 +2312,6 @@
      echohl Error | echo "***netrw*** this system doesn't support ftp" | echohl None
      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
     endif
-    let &stl        = s:netrw_users_stl
-    let &laststatus = s:netrw_users_ls
 "    call Dret("NetObtain")
     return
    endif
@@ -2343,8 +2335,7 @@
   endif
 
   " restore status line
-  let &stl        = s:netrw_users_stl
-  let &laststatus = s:netrw_users_ls
+  let &stl= s:netrw_users_stl
   redraw!
 
 "  call Dret("NetObtain")
@@ -2413,7 +2404,7 @@
 
   " get cleared buffer
   if bufnum < 0 || !bufexists(bufnum)
-   keepjumps keepalt enew!
+   keepalt enew!
 "   call Decho("enew buffer")
   else
    exe "keepalt b ".bufnum
@@ -2505,7 +2496,7 @@
   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 <SID>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>
+  nnoremap <buffer> <silent> <2-leftmouse> :exe "call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))"<cr>
   nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
   nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
   exe 'nnoremap <buffer> <silent> <del>	:call <SID>LocalBrowseRm("'.b:netrw_curdir.'")<cr>'
@@ -2583,19 +2574,19 @@
      call s:SetSort()
 
      if g:netrw_sort_direction =~ 'n'
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
 
     else
      if g:netrw_sort_direction =~ 'n'
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
     endif
 
    endif
@@ -2603,16 +2594,14 @@
 
   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
+   exe w:netrw_bannercnt
   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:BufWinVars()
   call s:NetOptionRestore()
   setlocal noma nomod nonu bh=hide nobl
 
@@ -2712,7 +2701,7 @@
   endwhile
   
   " cleanup any windows mess at end-of-line
-  silent! keepjumps %s/\r$//e
+  keepjumps silent! %s/\r$//e
   setlocal ts=32
 
 "  call Dret("LocalBrowseList")
@@ -3043,8 +3032,12 @@
      endif
     endif
 
-    " NetrwStatusLine support - for exploring support
+    " NetrwStatusLine support
     let w:netrw_explore_indx= indx
+    if !exists("s:netrw_users_stl")
+     let s:netrw_users_stl= &stl
+    endif
+    set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
 "    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
 
     " sanity check
@@ -3057,21 +3050,15 @@
     endif
 
     exe "let dirfile= w:netrw_explore_list[".indx."]"
-"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+"    call Decho("dirfile<".dirfile."> indx=".indx)
     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
+    call search(substitute(dirfile,"^.*/","",""),"W")
     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
@@ -3091,73 +3078,12 @@
 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 ^^^
-
+"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
   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
+   let &stl= s:netrw_users_stl
    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 ""
@@ -3410,12 +3336,6 @@
 "  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
   let g:netrw_passwd=a:2
  endif
-
- " surround password with double-quotes if it contains embedded blanks
- if g:netrw_passwd !~ '^"' && g:netrw_passwd =~ ' '
-  let g:netrw_passwd= '"'.g:netrw_passwd.'"'
- endif
-
 "  call Dret("NetUserPass")
 endfun
 
@@ -3472,21 +3392,22 @@
   endif
   unlet w:netoptionsave
  
-  if exists("w:aikeep")| let &ai= w:aikeep|endif
-  if (has("netbeans_intg") || has("sun_workshop")) && exists("w:acdkeep")
-   let &acd= w:acdkeep
-   unlet w:acdkeep
+  let &ai	= w:aikeep
+  if has("netbeans_intg") || has("sun_workshop")
+   let &acd     = w:acdkeep
   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:gdkeep")  |let &gd     = w:gdkeep  |unlet w:gdkeep  |endif
-  if exists("w:repkeep") |let &report = w:repkeep |unlet w:repkeep |endif
-  if exists("w:twkeep")  |let &tw     = w:twkeep  |unlet w:twkeep  |endif
+  let &cin	= w:cinkeep
+  let &cino	= w:cinokeep
+  let &com	= w:comkeep
+  let &cpo	= w:cpokeep
+  if exists("w:dirkeep")
+   exe "lcd ".w:dirkeep
+  endif
+  let &gd	= w:gdkeep
+  let &report   = w:repkeep
+  let &tw	= w:twkeep
   if exists("w:swfkeep")
-   if &directory == "" && exists("w:swfkeep")
+   if &directory == ""
     " user hasn't specified a swapfile directory;
     " netrw will temporarily make the swapfile
     " directory the current local one.
@@ -3498,6 +3419,17 @@
    endif
    unlet w:swfkeep
   endif
+  unlet w:aikeep
+  unlet w:cinkeep
+  unlet w:cinokeep
+  unlet w:comkeep
+  unlet w:cpokeep
+  unlet w:gdkeep
+  unlet w:repkeep
+  unlet w:twkeep
+  if exists("w:dirkeep")
+   unlet w:dirkeep
+  endif
  
 "  call Dret("NetOptionRestore")
 endfun
@@ -3509,7 +3441,7 @@
 "               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
+if has("win95") && 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>)
@@ -3610,14 +3542,14 @@
     return
    endif
    if seq == '*'
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
    else
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
    endif
    let priority = priority + 1
   endwhile
 
-  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
+  exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
 
 "  call Dret("SetSort")
 endfun
@@ -3655,14 +3587,14 @@
 endfun
 
 " ---------------------------------------------------------------------
-" SetBufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
+" BufWinVars: (used by NetBrowse() and LocalBrowse()) {{{1
 "   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
+"   variables are not inherited by the new window.  BufWinVars() and
 "   UseBufWinVars() get around that.
-fun! s:SetBufWinVars()
-"  call Dfunc("SetBufWinVars()")
+fun! s:BufWinVars()
+"  call Dfunc("BufWinVars()")
   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
@@ -3673,7 +3605,7 @@
   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 Dret("BufWinVars")
 endfun
 
 " ---------------------------------------------------------------------
diff --git a/runtime/compiler/eruby.vim b/runtime/compiler/eruby.vim
index 5d85bf1..77292bc 100644
--- a/runtime/compiler/eruby.vim
+++ b/runtime/compiler/eruby.vim
@@ -24,13 +24,22 @@
 let s:cpo_save = &cpo
 set cpo-=C
 
-CompilerSet makeprg=eruby
+if exists("eruby_compiler") && eruby_compiler == "eruby"
+  CompilerSet makeprg=eruby
+else
+  CompilerSet makeprg=erb
+endif
 
-CompilerSet errorformat=eruby:\ %f:%l:%m,
-		       \%E%f:%l:\ %m,
-		       \%-Z%p^,
-		       \%C%m,
-		       \%-G%.%#
+CompilerSet errorformat=
+    \eruby:\ %f:%l:%m,
+    \%+E%f:%l:\ parse\ error,
+    \%W%f:%l:\ warning:\ %m,
+    \%E%f:%l:in\ %*[^:]:\ %m,
+    \%E%f:%l:\ %m,
+    \%-C%\tfrom\ %f:%l:in\ %.%#,
+    \%-Z%\tfrom\ %f:%l,
+    \%-Z%p^,
+    \%-G%.%#
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt
index 7d63831..fdd820f 100644
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -1,4 +1,4 @@
-*diff.txt*      For Vim version 7.0aa.  Last change: 2005 Apr 26
+*diff.txt*      For Vim version 7.0aa.  Last change: 2005 Sep 21
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -218,7 +218,7 @@
 
 ==============================================================================
 4. Diff copying			*copy-diffs* *E99* *E100* *E101* *E102* *E103*
-
+								*merge*
 There are two commands to copy text from one buffer to another.  The result is
 that the buffers will be equal within the specified range.
 
@@ -235,6 +235,8 @@
 		Modify another buffer to undo difference with the current
 		buffer.  Just like ":diffget" but the other buffer is modified
 		instead of the current one.
+		When [bufspec] is omitted and there is more than one other
+		buffer in diff mode where 'modifiable' is set this fails.
 		See below for [range].
 
 							*do*
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index ed6ee89..6c32f16 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Sep 20
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Sep 25
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2547,11 +2547,12 @@
 getcmdtype()						*getcmdtype()*
 		Return the current command-line type. Possible return values
 		are:
-		    /	Search forward command
-		    ?	Search backward command
-		    :	Ex-command mode
-		    @	Input mode
-		    >	Debug mode
+		    :	normal Ex command
+		    >	debug mode command |debug-mode|
+		    /	forward search command
+		    ?	backward search command
+		    @	|input()| command
+		    -	|:insert| or |:append| command
 		Only works when editing the command line, thus requires use of
 		|c_CTRL-\_e| or |c_CTRL-R_=|.  Returns an empty string
 		otherwise.
@@ -2939,8 +2940,8 @@
 			:  echo "Cheers!"
 			:endif
 <
-		If the optional {text} is present, this is used for the
-		default reply, as if the user typed this.  Example: >
+		If the optional {text} is present and not empty, this is used
+		for the default reply, as if the user typed this.  Example: >
 			:let color = input("Color? ", "white")
 
 <		The optional {completion} argument specifies the type of
@@ -4049,10 +4050,30 @@
 		the method can be quite slow.
 
 							*spellbadword()*
-spellbadword()	Return the badly spelled word under or after the cursor.
-		The cursor is moved to the start of the bad word.
-		When no bad word is found in the cursor line an empty String
-		is returned and the cursor doesn't move.
+spellbadword([{sentence}])
+		Without argument: The result is the badly spelled word under
+		or after the cursor.  The cursor is moved to the start of the
+		bad word.  When no bad word is found in the cursor line the
+		result is an empty string and the cursor doesn't move.
+
+		With argument: The result is the first word in {sentence} that
+		is badly spelled.  If there are no spelling mistakes the
+		result is an empty string.
+
+		The return value is a list with two items:
+		- The badly spelled word or an empty string.
+		- The type of the spelling error:
+		  	"bad"		spelling mistake
+			"rare"		rare word
+			"local"		word only valid in another region
+			"caps"		word should start with Capital
+		Example: >
+			echo spellbadword("the quik brown fox")
+<			['quik', 'bad'] ~
+
+		The spelling information for the current window is used.  The
+		'spell' option must be set and the value of 'spelllang' is
+		used.
 
 							*spellsuggest()*
 spellsuggest({word} [, {max}])
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index 30fe2d4..f668c00 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Sep 18
+*insert.txt*    For Vim version 7.0aa.  Last change: 2005 Sep 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -988,20 +988,35 @@
 
 (X)HTML                          			*ft-html-omni*
 
-When using after CTRL-X CTRL-O after "<" it is completed with tag name
-available in current context. Inside of tag completion aids to choose
-proper attributes, and when possible choose appropriate attribute value
-including class names for CSS styles.
+CTRL-X CTRL-O provides completion of various elements of (X)HTML files.
+It is designed to support writing of XHTML 1.0 Strict files but will
+also works for other versions of HTML. Features:
 
-When used after "</" CTRL-X CTRL-O will close the last opened tag.
+- after "<" complete tag name depending on context (no div suggest
+  inside of an a tag)
+- inside of tag complete proper attributes (no width attribute for an
+  a tag)
+- when attribute has limited number of possible values help to complete
+  them
+- complete values of "class" and "id" attributes with data obtained from
+  style tag and included CSS files
+- when completing "style" attribute or working inside of "style" tag
+  switch to |ft-css-omni| completion
+- when used after "</" CTRL-X CTRL-O will close the last opened tag
 
 File htmlcomplete.vim provides through |autoload| mechanism
 GetLastOpenTag function which can be used in XML files to get name of
-last open tag with: >
+last open tag with (b:unaryTagsStack has to be defined): >
 
         :echo htmlcomplete#GetLastOpenTag("b:unaryTagsStack")
 
 
+CSS                                                     *ft-css-omni*
+
+Complete properties and their appropriate values according to CSS 2.1
+specification. 
+
+
 ==============================================================================
 8. Insert mode commands					*inserting*
 
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index c33023a..618c767 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.0aa.  Last change: 2005 Aug 16
+*map.txt*       For Vim version 7.0aa.  Last change: 2005 Sep 22
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -306,11 +306,12 @@
 type "a", then "bar" will get inserted.
 {Vi does not allow ambiguous mappings}
 
-							*map_CTRL_C*
-It's not possible to use a CTRL-C in the {lhs}.  You just can't map CTRL-C.
-The reason is that CTRL-C must always be available to break a running command.
-Exception: When using the GUI version on MS-Windows CTRL-C can be mapped to
-allow a Copy command to the clipboard.  Use CTRL-Break to interrupt Vim.
+							*map_CTRL-C*
+Using CTRL-C in the {lhs} is possible, but it will only work when Vim is
+waiting for a key, not when Vim is busy with something.  When Vim is busy
+CTRL-C interrupts/breaks the command.
+When using the GUI version on MS-Windows CTRL-C can be mapped to allow a Copy
+command to the clipboard.  Use CTRL-Break to interrupt Vim.
 
 							*map_space_in_lhs*
 To include a space in {lhs} precede it with a CTRL-V (type two CTRL-Vs for
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index a1c18be..87429e0 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -1,4 +1,4 @@
-*message.txt*   For Vim version 7.0aa.  Last change: 2005 Aug 01
+*message.txt*   For Vim version 7.0aa.  Last change: 2005 Sep 25
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -23,7 +23,7 @@
 
 								*g<*
 The "g<" command can be used to see the last page of previous command output.
-This is especially useful if you accidentally typed <Space> at the hit-return
+This is especially useful if you accidentally typed <Space> at the hit-enter
 prompt.
 Note: when you stopped the output with "q" at the more prompt only up to that
 point will be displayed.
@@ -813,4 +813,8 @@
 Note: The typed key is directly obtained from the terminal, it is not mapped
 and typeahead is ignored.
 
+The |g<| command can be used to see the last page of previous command output.
+This is especially useful if you accidentally typed <Space> at the hit-enter
+prompt.
+
  vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 7cc8170..39a6f40 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 13
+*options.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 25
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -3647,9 +3647,11 @@
 	Pattern to be used to find an include command.  It is a search
 	pattern, just like for the "/" command (See |pattern|).  The default
 	value is for C programs.  This option is used for the commands "[i",
-	"]I", "[d", etc.  The 'isfname' option is used to recognize the file
-	name that comes after the matched pattern.  See |option-backslash|
-	about including spaces and backslashes.
+	"]I", "[d", etc.
+	Normally the 'isfname' option is used to recognize the file name that
+	comes after the matched pattern.  But if both "\zs" and "\ze" appear
+	in the pattern then the text spanned by them is used as the file name.
+	See |option-backslash| about including spaces and backslashes.
 
 						*'includeexpr'* *'inex'*
 'includeexpr' 'inex'	string	(default "")
@@ -5160,6 +5162,9 @@
 	Minimal number of lines to scroll when the cursor gets off the
 	screen (e.g., with "j").  Not used for scroll commands (e.g., CTRL-E,
 	CTRL-D).  Useful if your terminal scrolls very slowly.
+	When set to a negative number from -1 to -100 this is used as the
+	percentage of the window height.  Thus -50 scrolls half the window
+	height.
 	NOTE: This option is set to 1 when 'compatible' is set.
 
 						*'scrolloff'* *'so'*
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index 4d446f6..d1ca623 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 7.0.  Last change: Sep 12, 2005
+*pi_netrw.txt*  For Vim version 7.0.  Last change: Aug 25, 2005
 
 
 		VIM REFERENCE MANUAL    by Charles E. Campbell, Jr.
@@ -25,7 +25,7 @@
 4.  Transparent File Transfer............................|netrw-transparent|
 5.  Ex Commands..........................................|netrw-ex|
 6.  Variables and Options................................|netrw-var|
-7.  Directory Browsing...................................|netrw-browse| {{{1
+7.  Directory Browser....................................|netrw-browse| {{{1
       Maps...............................................|netrw-maps|
       Exploring..........................................|netrw-explore-cmds|
       Quick Reference Commands Table.....................|netrw-browse-cmds|
@@ -40,7 +40,7 @@
       Making A New Directory.............................|netrw-d|
       Deleting Files Or Directories......................|netrw-delete|
       Renaming Files Or Directories......................|netrw-move|
-      Hiding Files Or Directories........................|netrw-a|
+      Hiding Files Or Directories........................|g:netrw-a|
       Edit File Or Directory Hiding List.................|netrw-h|
       Browsing With A Horizontally Split Window..........|netrw-o|
       Preview Window.....................................|netrw-p|
@@ -194,8 +194,8 @@
 2. 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
-writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
+(<netrw.vim>) using plugin techniques.  It currently supports both reading
+and writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
 dav/cadaver, rsync, or sftp.
 
 http is currently supported read-only via use of wget or fetch.
@@ -206,23 +206,24 @@
 
 	ex. vim ftp://hostname/path/to/file
 <
-The characters preceding the colon specify the protocol to use; in the
-example, its ftp.  The <netrw.vim> script then formulates a command or a
-series of commands (typically ftp) which it issues to an external program
-(ftp, scp, etc) which does the actual file transfer/protocol.  Files are read
-from/written to a temporary file (under Unix/Linux, /tmp/...) which the
-<netrw.vim> script will clean up.
+The characters preceding the colon specify the protocol to use;
+in the example, its ftp.  The <netrw.vim> script then formulates
+a command or a series of commands (typically ftp) which it issues
+to an external program (ftp, scp, etc) which does the actual file
+transfer/protocol.  Files are read from/written to a temporary file
+(under Unix/Linux, /tmp/...) which the <netrw.vim> script will
+clean up.
 
-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").
+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").
 
 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
-that will clean up after reading with their ftp.  Some Unix systems (ie.,
-FreeBSD) provide a utility called "fetch" which uses the ftp protocol but is
-not noisy and more convenient, actually, for <netrw.vim> to use.
+Unfortunately, some implementations are noisy (ie., add junk to the end
+of the file).  Thus, concerned users may decide to write a NetReadFixup()
+function that will clean up after reading with their ftp.  Some Unix systems
+(ie., FreeBSD) provide a utility called "fetch" which uses the ftp protocol
+but is not noisy and more convenient, actually, for <netrw.vim> to use.
 Consequently, if "fetch" is executable, it will be used to do reads for
 ftp://... (and http://...) .  See |netrw-var| for more about this.
 
@@ -331,9 +332,8 @@
 a built-in Vim function.  See |netrw-uidpass| for how to change the password
 after one has set it.
 
-Unfortunately there doesn't appear to be a way for netrw to feed a password to
-scp.  Thus every transfer via scp will require re-entry of the password.
-However, |netrw-listhack| can help with this problem.
+Unfortunately there doesn't appear to be a way for netrw to feed a password
+to scp.  Thus every transfer via scp will require re-entry of the password.
 
 
 ==============================================================================
@@ -341,28 +341,21 @@
 
 Network-oriented file transfers are available by default whenever
 |'nocompatible'| mode is enabled.  The <netrw.vim> file resides in your
-system's vim-plugin directory and is sourced automatically whenever you bring
-up vim.  I suggest that, at a minimum, you have at least the following in your
-<.vimrc> customization file: >
-	set nocp
-	if version >= 600
-	  filetype plugin indent on
-	endif
-<
+system's vim-plugin directory and is sourced automatically whenever you
+bring up vim.
+
 
 ==============================================================================
 4. 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.
-Thus one may use files across networks just as simply as if they were local. >
+Thus one may use files across networks as if they were local. >
 
 	vim ftp://[user@]machine/path
 	...
 	:wq
 
-See |netrw-activate| for more on how to encourage your vim to use plugins
-such as netrw.
 
 ==============================================================================
 5. Ex Commands						*netrw-ex*
@@ -376,14 +369,15 @@
 :[range]Nw {netfile} [{netfile}]...
 		Write the specified lines to the {netfile}.
 
-:Nread		Read the specified lines into the current
+:Nread
+		Read the specified lines into the current
 		buffer from the file specified in
 		b:netrw_lastfile.
 
 :Nread {netfile} {netfile}...
 		Read the {netfile} after the current line.
 
-								*netrw-uidpass*
+									*netrw-uidpass*
 :call NetUserPass()
 		If b:netrw_uid and b:netrw_passwd don't exist,
 		this function query the user for them.
@@ -407,11 +401,10 @@
 
 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|) >
-
-                        -------------
-                        Netrw Options
-                        -------------
+>
+                                -------------
+                           	Netrw Options
+                                -------------
 	Option			Meaning
 	--------------		-----------------------------------------------
 <
@@ -434,7 +427,7 @@
 	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)
+                                =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
@@ -488,12 +481,12 @@
     -------------------------------------------------------------------------
 <
 								*netrw-ftp*
-The first two options 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 first two options 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 variables specify the external program to use handle the
-associated protocol (rcp, ftp, etc), plus any options.
+The g:netrw_..._cmd variables specify the external program to use handle
+the associated protocol (rcp, ftp, etc), plus any options.
 
 The g:netrw_list_cmd's HOSTNAME entry will be changed via substitution with
 whatever the current request is for a hostname.
@@ -526,8 +519,8 @@
 The temporary file is then read into the main editing session window that
 requested it and the temporary file deleted.
 
-If your ftp doesn't accept the "user" command and immediately just demands a
-userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
+If your ftp doesn't accept the "user" command and immediately just demands
+a userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
 
 								*netrw-cadaver*
 To handle the SSL certificate dialog for untrusted servers, one may pull
@@ -554,12 +547,12 @@
       endif
     endfunction
 >
-The NetReadFixup() function will be called if it exists and thus allows you to
-customize your reading process.  As a further example, <netrw.vim> contains
-just such a function to handle Windows 95 ftp.  For whatever reason, Windows
-95's ftp dumps four blank lines at the end of a transfer, and so it is
-desirable to automate their removal.  Here's some code taken from <netrw.vim>
-itself:
+The NetReadFixup() function will be called if it exists and thus allows
+you to customize your reading process.  As a further example, <netrw.vim>
+contains just such a function to handle Windows 95 ftp.  For whatever
+reason, Windows 95's ftp dumps four blank lines at the end of a transfer,
+and so it is desirable to automate their removal.  Here's some code taken
+from <netrw.vim> itself:
 >
     if has("win95") && g:netrw_win95ftp
      fun! NetReadFixup(method, line1, line2)
@@ -572,7 +565,7 @@
 >
 
 ==============================================================================
-7. Directory Browsing	*netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
+7. Directory Browser	*netrw-browse* *netrw-dir* *netrw-list* *netrw-help*
 
 MAPS   								*netrw-maps*
      ?................Help.......................................|netrw-help|
@@ -739,7 +732,7 @@
 INTRODUCTION TO DIRECTORY BROWSING			*netrw-browse-intro*
 
 Netrw supports the browsing of directories on the local system and on remote
-hosts, including listing files and directories, entering directories, editing
+hosts, including generating listing directories, entering directories, editing
 files therein, deleting files/directories, making new directories, and moving
 (renaming) files and directories.  The Netrw browser generally implements the
 previous explorer maps and commands for remote directories, although details
@@ -750,15 +743,13 @@
 in its remote browsing.  Any other protocol will be used for file transfers,
 but otherwise the ssh protocol will be used to do remote directory browsing.
 
-To use Netrw's remote directory browser, simply attempt to read a "file" with a
+To enter the netrw directory browser, simply attempt to read a "file" with a
 trailing slash and it will be interpreted as a request to list a directory:
 
 	vim [protocol]://[user@]hostname/path/
 
-For local directories, the trailing slash is not required.
-
-If you'd like to avoid entering the password in for remote directory listings
-with ssh or scp, see |netrw-listhack|.
+If you'd like to avoid entering the password in for directory listings, scp,
+ssh interaction, etc, see |netrw-listhack|.
 
 				*netrw-explore*  *netrw-pexplore*
 				*netrw-hexplore* *netrw-sexplore*
@@ -792,8 +783,7 @@
 may explicitly provide a directory (path) to use.
 
 (Following needs v7.0 or later)			*netrw-starstar*
-When Explore, Sexplore, Hexplore, or Vexplore are used with a **,
-such as:
+When Explore, Sexplore, Hexplore, or Vexplore are used like
 >
 	:Explore **/filename_pattern
 <
@@ -807,8 +797,7 @@
 matching file.  One may then proceed to the next (or previous) matching files'
 directories by using Nexplore or Pexplore, respectively.  If your console or
 gui produces recognizable shift-up or shift-down sequences, then you'll likely
-find using shift-downarrow and shift-uparrow convenient.  They're mapped by
-netrw:
+find the following mappings convenient:
 
 	<s-down>  == Nexplore, and
 	<s-up>    == Pexplore.
@@ -833,12 +822,11 @@
 
 GOING UP						*netrw--*
 
-To go up a directory, press - or press the <cr> when atop the ../ directory
+To go up a directory, press - or his the <cr> when atop the ../ directory
 entry in the listing.
 
-Netrw will use the command in |g:netrw_list_cmd| to perform the directory
-listing operation after changing HOSTNAME to the host specified by the
-user-provided url.  By default netrw provides the command as:
+Netrw will modify the command in |g:netrw_list_cmd| to perform the directory
+listing operation.  By default the command is:
 
 	ssh HOSTNAME ls -FLa
 
@@ -853,13 +841,7 @@
 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.  
-
-  CAVEAT: There are three 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.
+protocol given in the original read request.
 
 
 OBTAINING A FILE						*netrw-O*
@@ -867,21 +849,7 @@
 When browsing a remote directory, one may obtain a file under the cursor (ie.
 get a copy on your local machine, but not edit it) by pressing the O key.
 Only ftp and scp are supported for this operation (but since these two are
-available for browsing, that shouldn't be a problem).  The status bar
-will then show, on its right hand side, a message like "Obtaining filename".
-The statusline will be restored after the transfer is complete.
-
-Netrw can also "obtain" a file using the local browser.  Netrw's display
-of a directory is not necessarily the same as Vim's "current directory",
-unless |g:netrw_keepdir| is set to 0 in the user's <.vimrc>.  One may select
-a file using the local browser (by putting the cursor on it) and pressing
-"O" will then "obtain" the file; ie. copy it to Vim's current directory.
-
-Related topics:
- * To see what the current directory is, use |:pwd|
- * To make the currently browsed directory the current directory, see |netrw-c|
- * To automatically make the currently browsed directory the current
-   directory, see |g:netrw_keepdir|.
+available for browsing, that shouldn't be a problem).
 
 
 THIN, LONG, AND WIDE LISTINGS					*netrw-i*
@@ -891,27 +859,21 @@
 The short listing format gives just the files' and directories' names.
 
 The long listing is either based on the "ls" command via ssh for remote
-directories or displays the filename, file size (in bytes), and the time and
-date of last modification for local directories.  With the long listing
-format, netrw is not able to recognize filenames which have trailing spaces.
-Use the thin listing format for such files.
+directories or displays the filename, file size (in bytes), and the
+time and date of last modification for local directories.
 
-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 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|).
 
 
 MAKING A NEW DIRECTORY						*netrw-d*
 
-With the "d" map one may make a new directory either remotely (which depends
-on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
-global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
-directory's name.  A bare <CR> at that point will abort the making of the
+With the "d" map one may make a new directory either remotely (which
+depends on the global variable g:netrw_mkdir_cmd) or locally (which depends on
+the global variable g:netrw_local_mkdir).  Netrw will issue a request for the
+new directory's name.  A bare <CR> at that point will abort the making of the
 directory.  Attempts to make a local directory that already exists (as either
 a file or a directory) will be detected, reported on, and ignored.
 
@@ -919,12 +881,12 @@
 DELETING FILES OR DIRECTORIES			*netrw-delete* *netrw-D*
 
 Deleting/removing files and directories involves moving the cursor to the
-file/directory to be deleted and pressing "D".  Directories must be empty
-first before they can be successfully removed.  If the directory is a softlink
-to a directory, then netrw will make two requests to remove the directory
-before succeeding.  Netrw will ask for confirmation before doing the
-removal(s).  You may select a range of lines with the "V" command (visual
-selection), and then pressing "D".
+file/directory to be deleted and pressing "D".  Directories must be empty first
+before they can be successfully removed.  If the directory is a softlink to a
+directory, then netrw will make two requests to remove the directory before
+succeeding.  Netrw will ask for confirmation before doing the removal(s).
+You may select a range of lines with the "V" command (visual selection),
+and then pressing "D".
 
 The g:netrw_rm_cmd, g:netrw_rmf_cmd, and g:netrw_rmdir_cmd variables are used
 to control the attempts to remove files and directories.  The g:netrw_rm_cmd
@@ -959,19 +921,19 @@
 the V (|linewise-visual|).
 
 
-HIDING FILES OR DIRECTORIES				*netrw-a*
+HIDING FILES OR DIRECTORIES				*g:netrw-a*
 
-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.
+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-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.
+The g:netrw_list_hide variable holds a comma delimited list of patterns
+(ex. \.obj) which specify the hiding list. (also see |netrw-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.
 
 
 EDIT FILE OR DIRECTORY HIDING LIST		*netrw-h* *netrw-edithide*
@@ -979,8 +941,7 @@
 The "<ctrl-h>" map brings up a requestor allowing the user to change the
 file/directory hiding list.  The hiding list consists of one or more patterns
 delimited by commas.  Files and/or directories satisfying these patterns will
-either be hidden (ie. not shown) or be the only ones displayed (see
-|netrw-a|).
+either be hidden (ie. not shown) or be the only ones displayed (see |netrw-a|).
 
 
 BROWSING WITH A HORIZONTALLY SPLIT WINDOW		*netrw-o* *netrw-horiz*
@@ -989,9 +950,9 @@
 allows one to open a new window to hold the new directory listing or file.  A
 horizontal split is used.  (for vertical splitting, see |netrw-v|)
 
-Normally, the o key splits the window horizontally with the new window and
-cursor at the top.  To change to splitting the window horizontally with the
-new window and cursor at the bottom, have
+Normally, the o key splits the window horizontally with the new window
+and cursor at the top.  To change to splitting the window horizontally
+with the new window and cursor at the bottom, have
 
 	let g:netrw_alto = 1
 
@@ -1000,30 +961,30 @@
 
 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 (currently only for local browsing) by using
+the "p" key when the cursor is atop the desired filename to be previewed.
 
 
 SELECTING SORTING STYLE				*netrw-s* *netrw-sort*
 
-One may select the sorting style by name, time, or (file) size.  The "s" map
-allows one to circulate amongst the three choices; the directory listing will
-automatically be refreshed to reflect the selected style.
+One may select the sorting style by name, time, or (file) size.  The
+"s" map allows one to circulate amongst the three choices; the directory
+listing will automatically be refreshed to reflect the selected style.
 
 
 EDITING THE SORTING SEQUENCE		*netrw-S* *netrw-sortsequence*
 
-When "Sorted by" is name, one may specify priority via the sorting sequence
-(g:netrw_sort_sequence).  The sorting sequence typically prioritizes the
-name-listing by suffix, although any pattern will do.  Patterns are delimited
-by commas.  The default sorting sequence is:
+When "Sorted by" is name, one may specify priority via the sorting
+sequence (g:netrw_sort_sequence).  The sorting sequence typically
+prioritizes the name-listing by suffix, although any pattern will do.
+Patterns are delimited by commas.  The default sorting sequence is:
 >
 	[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$
 <
-The lone * is where all filenames not covered by one of the other patterns
-will end up.  One may change the sorting sequence by modifying the
-g:netrw_sort_sequence variable (either manually or in your <.vimrc>) or by
-using the "S" map.
+The lone * is where all filenames not covered by one of the other
+patterns will end up.  One may change the sorting sequence by modifying
+the g:netrw_sort_sequence variable (either manually or in your <.vimrc>)
+or by using the "S" map.
 
 
 REVERSING SORTING ORDER			*netrw-r* *netrw-reverse*
@@ -1050,20 +1011,20 @@
 
 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 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
+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*
+CUSTOMIZING BROWSING WITH A USER FUNCTION		*netrw-x* *netrw-handler*
 
 One may "enter" a file with a special handler, thereby firing up a browser or
 other application, for example, on a file by hitting the "x" key.  The special
@@ -1075,9 +1036,9 @@
   * otherwise the NetrwFileHandler plugin is used.
 
 The file's suffix is used by these various approaches to determine an
-appropriate application to use to "handle" these files.  Such things as
-OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript (*.ps,
-*.eps) can be handled.
+appropriate application to use to "handle" these files.  Such things
+as OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript
+(*.ps, *.eps) can be handled.
 
 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!
@@ -1102,8 +1063,8 @@
 currently browsed directory be the current directory.
 
 With the default setting for g:netrw_keepdir, in order to make the two
-directories the same, use the "c" map (just type c).  That map will set the
-current directory to the current browsing directory.
+directories the same, use the "c" map (just type c).  That map will set
+the current directory to the current browsing directory.
 
 
 BOOKMARKING A DIRECTORY		*netrw-b* *netrw-bookmark* *netrw-bookmarks*
@@ -1126,8 +1087,8 @@
 
 	{cnt}B
 
-Any count may be used to reference any of the bookmarks.  See |netrw-b| on
-how to bookmark a directory and |netrw-q| on how to list bookmarks.
+Any count may be used to reference any of the bookmarks.  See |netrw-b|
+for how to bookmark a directory 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.
@@ -1157,9 +1118,9 @@
 With the NetrwSettings.vim plugin, >
 	:NetrwSettings
 will bring up a window with the many variables that netrw uses for its
-settings.  You may change any of their values; when you save the file, the
-settings therein will be used.  One may also press "?" on any of the lines for
-help on what each of the variables do.
+settings.  You may change any of their values; when you save the file,
+the settings therein will be used.  One may also press "?" on any of
+the lines for help on what each of the variables do.
 
 
 ==============================================================================
@@ -1240,10 +1201,10 @@
 
 	1. Get the <Decho.vim> script, available as:
 
-	     http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_scripts
-	     as "Decho, a vimL debugging aid"
+		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_scripts
+		as "Decho, a vimL debugging aid"
 	   or
-	     http://vim.sourceforge.net/scripts/script.php?script_id=120
+		http://vim.sourceforge.net/scripts/script.php?script_id=120
 
 	   and put it into your local plugin directory.
 
@@ -1279,14 +1240,6 @@
 ==============================================================================
 10. History						*netrw-history*
 
-	v70: * when using |netrw-O|, the "Obtaining filename" message is now
-	       shown using |hl-User9|.  If User9 has not been defined, netrw
-	       will define it.
-	v69: * Bugfix: win95/98 machines were experiencing a
-	       "E121: Undefined variable: g:netrw_win95ftp" message
-	v68: * double-click-leftmouse selects word under mouse
-	v67: * Passwords which contain blanks will now be surrounded by
-	       double-quotes automatically (Yongwei)
 	v66: * Netrw now seems to work with a few more Windows situations
 	     * O now obtains a file: remote browsing file -> local copy,
 	       locally browsing file -> current directory (see :pwd)
@@ -1443,7 +1396,7 @@
 	Vim editor	by Bram Moolenaar (Thanks, Bram!)
 	dav		support by C Campbell
 	fetch		support by Bram Moolenaar and C Campbell
-	ftp		support by C Campbell <NdrOchip@ScampbellPfamily.AbizM>
+	ftp		support by C Campbell <NdrOchip@ScampbellPfamily.AbizM> - NOSPAM
 	http		support by Bram Moolenaar <bram@moolenaar.net>
 	rcp
 	rsync		support by C Campbell (suggested by Erik Warendorph)
@@ -1453,13 +1406,11 @@
 	inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
 
 	Jérôme Augé		-- also using new buffer method with ftp+.netrc
-	Bram Moolenaar		-- obviously vim itself, :e and v:cmdarg use,
-	                           fetch,...
+	Bram Moolenaar		-- obviously vim itself, :e and v:cmdarg use, fetch,...
 	Yasuhiro Matsumoto	-- pointing out undo+0r problem and a solution
 	Erik Warendorph		-- for several suggestions (g:netrw_..._cmd
 				   variables, rsync etc)
-	Doug Claar		-- modifications to test for success with ftp
-	                           operation
+	Doug Claar		-- modifications to test for success with ftp operation
 
 ==============================================================================
  vim:tw=78:ts=8:ft=help:norl:fdm=marker
diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
index d2fa976..023476a 100644
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 12
+*spell.txt*	For Vim version 7.0aa.  Last change: 2005 Sep 25
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1124,6 +1124,10 @@
 anyway.  You can include whole words if you want to, but you might want to use
 the "file:" item in 'spellsuggest' instead.
 
+You can include a space by using an underscore:
+
+	REP the_the the ~
+
 
 SIMILAR CHARACTERS					*spell-MAP*
 
diff --git a/runtime/doc/tags b/runtime/doc/tags
index cc4d2a8..36d9b22 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4973,6 +4973,7 @@
 ft-cobol-syntax	syntax.txt	/*ft-cobol-syntax*
 ft-coldfusion-syntax	syntax.txt	/*ft-coldfusion-syntax*
 ft-csh-syntax	syntax.txt	/*ft-csh-syntax*
+ft-css-omni	insert.txt	/*ft-css-omni*
 ft-cweb-syntax	syntax.txt	/*ft-cweb-syntax*
 ft-cynlib-syntax	syntax.txt	/*ft-cynlib-syntax*
 ft-desktop-syntax	syntax.txt	/*ft-desktop-syntax*
@@ -5082,6 +5083,7 @@
 g,	motion.txt	/*g,*
 g0	motion.txt	/*g0*
 g8	various.txt	/*g8*
+g:netrw-a	pi_netrw.txt	/*g:netrw-a*
 g:netrw_alto	pi_netrw.txt	/*g:netrw_alto*
 g:netrw_altv	pi_netrw.txt	/*g:netrw_altv*
 g:netrw_cygwin	pi_netrw.txt	/*g:netrw_cygwin*
@@ -5705,7 +5707,7 @@
 map-typing	map.txt	/*map-typing*
 map-which-keys	map.txt	/*map-which-keys*
 map.txt	map.txt	/*map.txt*
-map_CTRL_C	map.txt	/*map_CTRL_C*
+map_CTRL-C	map.txt	/*map_CTRL-C*
 map_backslash	map.txt	/*map_backslash*
 map_bar	map.txt	/*map_bar*
 map_empty_rhs	map.txt	/*map_empty_rhs*
@@ -5747,6 +5749,7 @@
 menu-separator	gui.txt	/*menu-separator*
 menu.vim	gui.txt	/*menu.vim*
 menus	gui.txt	/*menus*
+merge	diff.txt	/*merge*
 message-history	message.txt	/*message-history*
 message.txt	message.txt	/*message.txt*
 messages	message.txt	/*messages*
@@ -5853,7 +5856,6 @@
 netrw-R	pi_netrw.txt	/*netrw-R*
 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*
@@ -7322,13 +7324,6 @@
 zg	spell.txt	/*zg*
 zh	scroll.txt	/*zh*
 zi	fold.txt	/*zi*
-zip	zip.txt	/*zip*
-zip-contents	zip.txt	/*zip-contents*
-zip-copyright	zip.txt	/*zip-copyright*
-zip-history	zip.txt	/*zip-history*
-zip-manual	zip.txt	/*zip-manual*
-zip-usage	zip.txt	/*zip-usage*
-zip.txt	zip.txt	/*zip.txt*
 zj	fold.txt	/*zj*
 zk	fold.txt	/*zk*
 zl	scroll.txt	/*zl*
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index a09f895..af6465f 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2005 Sep 19
+" Last Change:	2005 Sep 25
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -16,7 +16,7 @@
 augroup filetypedetect
 
 " Ignored extensions
-au BufNewFile,BufRead *.orig,*.bak,*.old,*.new,*.rpmsave,*.rpmnew
+au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.rpmsave,?\+.rpmnew
 	\ exe "doau filetypedetect BufRead " . expand("<afile>:r")
 au BufNewFile,BufRead *~
 	\ let s:name = expand("<afile>") |
@@ -26,7 +26,7 @@
 	\ endif |
 	\ unlet s:name |
 	\ unlet s:short
-au BufNewFile,BufRead *.in
+au BufNewFile,BufRead ?\+.in
 	\ if expand("<afile>:t") != "configure.in" |
 	\   exe "doau filetypedetect BufRead " . expand("<afile>:r") |
 	\ endif
diff --git a/runtime/indent/eruby.vim b/runtime/indent/eruby.vim
new file mode 100644
index 0000000..664f9c2
--- /dev/null
+++ b/runtime/indent/eruby.vim
@@ -0,0 +1,20 @@
+" Vim indent file
+" Language:     Ruby
+" Maintainer:	Doug Kearns <djkea2 at gus.gscit.monash.edu.au>
+" Info:         $Id$
+" URL:          http://vim-ruby.rubyforge.org/
+" Anon CVS:     See above site
+" Licence:      GPL (http://www.gnu.org)
+" Disclaimer:
+"    This program is distributed in the hope that it will be useful,
+"    but WITHOUT ANY WARRANTY; without even the implied warranty of
+"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+"    GNU General Public License for more details.
+" ----------------------------------------------------------------------------
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+
+runtime! indent/html.vim
diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim
index 3e7a990..22210ce 100644
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -2,30 +2,27 @@
 " Language:	PHP
 " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:		http://www.2072productions.com/vim/indent/php.vim
-" Last Change: 2005 Aug 15
-" Version: 1.17
+" Last Change: 2005 September 22th
+" Version: 1.181
 "
-" For a complete change log and lots of comments in the code, download the script on
+" The change log and all the comments have been removed from this file.
+"
+" For a complete change log and fully commented code, download the script on
 " 2072productions.com at the URI provided above.
-" 
 "
-" 
+"
 "  If you find a bug, please e-mail me at John.wellesz (AT) teaser (DOT) fr
-"  with an example of code that break the algorithm.
-"
-"
-"	Thanks a lot for using this script.
+"  with an example of code that breaks the algorithm.
 "
 "
 " NOTE: This script must be used with PHP syntax ON and with the php syntax
-"		script by Lutz Eymers (http://www.isp.de/data/php.vim ) that's the script bundled with Gvim.
+"	script by Lutz Eymers (http://www.isp.de/data/php.vim ) that's the script bundled with Gvim.
 "
 "
 "	In the case you have syntax errors in your script such as end of HereDoc
 "	tags not at col 1 you'll have to indent your file 2 times (This script 
 "	will automatically put HereDoc end tags at col 1).
 " 
-"
 " NOTE: If you are editing file in Unix file format and that (by accident)
 " there are '\r' before new lines, this script won't be able to proceed
 " correctly and will make many mistakes because it won't be able to match
@@ -38,56 +35,51 @@
 " silently remove them when VIM load this script (at each bufread).
 
 " Options: PHP_default_indenting = # of sw (default is 0), # of sw will be
-"		   added to the indent of each line of PHP code.
+"	   added to the indent of each line of PHP code.
 "
 " Options: PHP_removeCRwhenUnix = 1 to make the script automatically remove CR
-"		   at end of lines (by default this option is unset), NOTE that you
-"		   MUST remove CR when the fileformat is UNIX else the indentation
-"		   won't be correct...
+"	   at end of lines (by default this option is unset), NOTE that you
+"	   MUST remove CR when the fileformat is UNIX else the indentation
+"	   won't be correct...
 "
 " Options: PHP_BracesAtCodeLevel = 1 to indent the '{' and '}' at the same
-"		   level than the code they contain.
-"		   Exemple:
-"			Instead of:
-"				if ($foo)
+"	   level than the code they contain.
+"	   Exemple:
+"		Instead of:
+"			if ($foo)
+"			{
+"				foo();
+"			}
+"
+"		You will write:
+"			if ($foo)
 "				{
-"					foo();
+"				foo();
 "				}
 "
-"			You will write:
-"				if ($foo)
-"					{
-"					foo();
-"					}
-"
-"			NOTE: The script will be a bit slower if you use this option because
-"			some optimizations won't be available.
+"		NOTE: The script will be a bit slower if you use this option because
+"		some optimizations won't be available.
 
 
 if exists("b:did_indent")
-	finish
+    finish
 endif
 let b:did_indent = 1
 
-"	This script set the option php_sync_method of PHP syntax script to 0
-"	(fromstart indenting method) in order to have an accurate syntax.
-"	If you are using very big PHP files (which is a bad idea) you will
-"	experience slowings down while editing, if your code contains only PHP
-"	code you can comment the line below.
 
 let php_sync_method = 0
 
 
 if exists("PHP_default_indenting")
-	let b:PHP_default_indenting = PHP_default_indenting * &sw
+    let b:PHP_default_indenting = PHP_default_indenting * &sw
 else
-	let b:PHP_default_indenting = 0
+    let b:PHP_default_indenting = 0
 endif
 
 if exists("PHP_BracesAtCodeLevel")
-	let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel
+    let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel
 else
-	let b:PHP_BracesAtCodeLevel = 0
+    let b:PHP_BracesAtCodeLevel = 0
 endif
 
 
@@ -108,24 +100,21 @@
 setlocal nosmartindent
 setlocal noautoindent 
 setlocal nocindent
-setlocal nolisp " autoindent must be on, so this line is also useless...
+setlocal nolisp
 
 setlocal indentexpr=GetPhpIndent()
 setlocal indentkeys=0{,0},0),:,!^F,o,O,e,*<Return>,=?>,=<?,=*/
 
 
-if version <= 603 && &encoding == 'utf-8'
-	let s:searchpairflags = 'bW'
-else
-	let s:searchpairflags = 'bWr'
-endif
+
+let s:searchpairflags = 'bWr'
 
 if &fileformat == "unix" && exists("PHP_removeCRwhenUnix") && PHP_removeCRwhenUnix
-	silent! %s/\r$//g
+    silent! %s/\r$//g
 endif
 
 if exists("*GetPhpIndent")
-	finish " XXX
+    finish " XXX
 endif
 
 let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
@@ -134,537 +123,544 @@
 
 
 function! GetLastRealCodeLNum(startline) " {{{
-	"Inspired from the function SkipJavaBlanksAndComments by Toby Allsopp for indent/java.vim 
-	let lnum = a:startline
-	let old_lnum = lnum
+    let lnum = a:startline
+    let old_lnum = lnum
 
-	while lnum > 1
-		let lnum = prevnonblank(lnum)
+    while lnum > 1
+	let lnum = prevnonblank(lnum)
+	let lastline = getline(lnum)
+
+	if b:InPHPcode_and_script && lastline =~ '?>\s*$'
+	    let lnum = lnum - 1
+	elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$'
+	    let lnum = lnum - 1
+	elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
+	    let lnum = lnum - 1
+	elseif lastline =~ '\*/\s*$'
+	    call cursor(lnum, 1)
+	    if lastline !~ '^\*/'
+		call search('\*/', 'W')
+	    endif
+	    let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
+
+	    let lastline = getline(lnum)
+	    if lastline =~ '^\s*/\*'
+		let lnum = lnum - 1
+	    else
+		break
+	    endif
+
+
+	elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>'
+
+	    while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1
+		let lnum = lnum - 1
 		let lastline = getline(lnum)
-
-		if b:InPHPcode_and_script && lastline =~ '?>\s*$'
-			let lnum = lnum - 1
-		elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$'
-			let lnum = lnum - 1
-		elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)' " if line is under comment
-			let lnum = lnum - 1
-		elseif lastline =~ '\*/\s*$' " skip multiline comments
-			call cursor(lnum, 1)
-			call search('\*/\zs', 'W') " positition the cursor after the first */
-			let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /*
-
-			let lastline = getline(lnum)
-			if lastline =~ '^\s*/\*' " if line contains nothing but comment
-				let lnum = lnum - 1 " do the job again on the line before (a comment can hide another...)
-			else
-				break
-			endif
-
-			
-		elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>' " skip non php code
-
-			while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1
-				let lnum = lnum - 1
-				let lastline = getline(lnum)
-			endwhile
-			if lastline =~ '^\s*?>' " if line contains nothing but end tag 
-				let lnum = lnum - 1
-			else
-				break " else there is something important before the ?>
-			endif
+	    endwhile
+	    if lastline =~ '^\s*?>'
+		let lnum = lnum - 1
+	    else
+		break
+	    endif
 
 
-		elseif lastline =~? '^\a\w*;$' && lastline !~? s:notPhpHereDoc " match the end of a heredoc
-			let tofind=substitute( lastline, '\([^;]\+\);', '<<<\1$', '')
-			while getline(lnum) !~? tofind && lnum > 1
-				let lnum = lnum - 1
-			endwhile
-		else
-			break " if none of these were true then we are done
-		endif
-	endwhile
-
-	if lnum==1 && getline(lnum)!~ '<?'
-		let lnum=0
+	elseif lastline =~? '^\a\w*;$' && lastline !~? s:notPhpHereDoc
+	    let tofind=substitute( lastline, '\([^;]\+\);', '<<<\1$', '')
+	    while getline(lnum) !~? tofind && lnum > 1
+		let lnum = lnum - 1
+	    endwhile
+	else
+	    break 
 	endif
-	
-	if b:InPHPcode_and_script && !b:InPHPcode
-		let b:InPHPcode_and_script = 0
-	endif
-	return lnum
-endfunction
-" }}}
+    endwhile
+
+    if lnum==1 && getline(lnum)!~ '<?'
+	let lnum=0
+    endif
+
+    if b:InPHPcode_and_script && !b:InPHPcode
+	let b:InPHPcode_and_script = 0
+    endif
+    return lnum
+endfunction " }}}
 
 function! Skippmatch()  " {{{
-	let synname = synIDattr(synID(line("."), col("."), 0), "name")
-	if synname == "Delimiter" || synname == "phpParent" || synname == "javaScriptBraces" || synname == "phpComment" && b:UserIsTypingComment
-		return 0
-	else
-		return 1
-	endif
-endfun
-" }}}
+    let synname = synIDattr(synID(line("."), col("."), 0), "name")
+    if synname == "Delimiter" || synname == "phpParent" || synname == "javaScriptBraces" || synname == "phpComment" && b:UserIsTypingComment
+	return 0
+    else
+	return 1
+    endif
+endfun " }}}
 
 function! FindOpenBracket(lnum) " {{{
-	call cursor(a:lnum, 1) " set the cursor to the start of the lnum line
-	return searchpair('{', '', '}', 'bW', 'Skippmatch()')
-endfun
-" }}}
+    call cursor(a:lnum, 1)
+    return searchpair('{', '', '}', 'bW', 'Skippmatch()')
+endfun " }}}
 
 function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{
-" A very clever recoursive function created by me (John Wellesz) that find the "if" corresponding to an
-" "else". This function can easily be adapted for other languages :)
-	
-	if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>'
-		let beforeelse = a:lnum " we do this so we can find the opened bracket to speed up the process
-	else
-		let beforeelse = GetLastRealCodeLNum(a:lnum - 1)
+
+    if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>'
+	let beforeelse = a:lnum
+    else
+	let beforeelse = GetLastRealCodeLNum(a:lnum - 1)
+    endif
+
+    if !s:level
+	let s:iftoskip = 0
+    endif
+
+    if getline(beforeelse) =~# '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>'
+	let s:iftoskip = s:iftoskip + 1
+    endif
+
+    if getline(beforeelse) =~ '^\s*}'
+	let beforeelse = FindOpenBracket(beforeelse)
+
+	if getline(beforeelse) =~ '^\s*{'
+	    let beforeelse = GetLastRealCodeLNum(beforeelse - 1)
 	endif
-
-	if !s:level
-		let s:iftoskip = 0
-	endif
-
-	if getline(beforeelse) =~# '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>'
-		let s:iftoskip = s:iftoskip + 1
-	endif
-	
-	if getline(beforeelse) =~ '^\s*}'
-		let beforeelse = FindOpenBracket(beforeelse)
-
-		if getline(beforeelse) =~ '^\s*{'
-			let beforeelse = GetLastRealCodeLNum(beforeelse - 1)
-		endif
-	endif
+    endif
 
 
-	if !s:iftoskip && a:StopAfterFirstPrevElse && getline(beforeelse) =~# '^\s*\%([}]\s*\)\=else\%(if\)\=\>'
-		return beforeelse
-	endif
-
-	if getline(beforeelse) !~# '^\s*if\>' && beforeelse>1 || s:iftoskip && beforeelse>1
-		
-		if  s:iftoskip && getline(beforeelse) =~# '^\s*if\>'
-			let s:iftoskip = s:iftoskip - 1
-		endif
-
-		let s:level =  s:level + 1
-		let beforeelse = FindTheIfOfAnElse(beforeelse, a:StopAfterFirstPrevElse)
-	endif
-
+    if !s:iftoskip && a:StopAfterFirstPrevElse && getline(beforeelse) =~# '^\s*\%([}]\s*\)\=else\%(if\)\=\>'
 	return beforeelse
+    endif
 
-endfunction
-" }}}
+    if getline(beforeelse) !~# '^\s*if\>' && beforeelse>1 || s:iftoskip && beforeelse>1
+
+	if  s:iftoskip && getline(beforeelse) =~# '^\s*if\>'
+	    let s:iftoskip = s:iftoskip - 1
+	endif
+
+	let s:level =  s:level + 1
+	let beforeelse = FindTheIfOfAnElse(beforeelse, a:StopAfterFirstPrevElse)
+    endif
+
+    return beforeelse
+
+endfunction " }}}
 
 function! IslinePHP (lnum, tofind) " {{{
-	let cline = getline(a:lnum)
+    let cline = getline(a:lnum)
 
-	if a:tofind==""
-		let tofind = "^\\s*[\"']*\s*\\zs\\S" " This correct the issue where lines beginning by a 
-		" single or double quote were not indented in some cases.
-	else
-		let tofind = a:tofind
-	endif
+    if a:tofind==""
+	let tofind = "^\\s*[\"']*\s*\\zs\\S"
+    else
+	let tofind = a:tofind
+    endif
 
-	let tofind = tofind . '\c' " ignorecase
+    let tofind = tofind . '\c'
 
-	let coltotest = match (cline, tofind) + 1 "find the first non blank char in the current line
-	
-	let synname = synIDattr(synID(a:lnum, coltotest, 0), "name") " ask to syntax what is its name
+    let coltotest = match (cline, tofind) + 1
 
-	if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript'
-		return synname
-	else
-		return ""
-	endif
-endfunction
-" }}}
+    let synname = synIDattr(synID(a:lnum, coltotest, 0), "name")
+
+    if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript'
+	return synname
+    else
+	return ""
+    endif
+endfunction " }}}
 
 let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\);'
-let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|[|&]\)'
+let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|for\%(each\)\=\>\|declare\>\|class\>\|[|&]\)'
 
 let s:autorestoptions = 0
 if ! s:autorestoptions
-	au BufWinEnter,Syntax	*.php,*.php3,*.php4,*.php5	call ResetOptions()
-	let s:autorestoptions = 1
+    au BufWinEnter,Syntax *.php,*.php3,*.php4,*.php5 call ResetOptions()
+    let s:autorestoptions = 1
 endif
 
 function! ResetOptions()
-	if ! b:optionsset
-		setlocal formatoptions=qroc
-		let b:optionsset = 1
-	endif
+    if ! b:optionsset
+	setlocal formatoptions=qroc
+	let b:optionsset = 1
+    endif
 endfunc
 
 function! GetPhpIndent()
-	"##############################################
-	"########### MAIN INDENT FUNCTION #############
-	"##############################################
 
-	let UserIsEditing=0
-	if 	b:PHP_oldchangetick != b:changedtick
-		let b:PHP_oldchangetick = b:changedtick
-		let UserIsEditing=1
+    let UserIsEditing=0
+    if	b:PHP_oldchangetick != b:changedtick
+	let b:PHP_oldchangetick = b:changedtick
+	let UserIsEditing=1
+    endif
+
+    if b:PHP_default_indenting
+	let b:PHP_default_indenting = g:PHP_default_indenting * &sw
+    endif
+
+    let cline = getline(v:lnum)
+
+    if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast 
+	if b:PHP_indentbeforelast
+	    let b:PHP_indentinghuge = 1
+	    echom 'Large indenting detected, speed optimizations engaged'
 	endif
+	let b:PHP_indentbeforelast = b:PHP_lastindented
+    endif
 
-	if b:PHP_default_indenting
-		let b:PHP_default_indenting = g:PHP_default_indenting * &sw
+    if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented
+	if b:PHP_indentinghuge
+	    echom 'Large indenting deactivated'
+	    let b:PHP_indentinghuge = 0
+	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 	endif
+	let b:PHP_lastindented = v:lnum
+	let b:PHP_LastIndentedWasComment=0
+	let b:PHP_InsideMultilineComment=0
+	let b:PHP_indentbeforelast = 0
 
-	let cline = getline(v:lnum) " current line
+	let b:InPHPcode = 0
+	let b:InPHPcode_checked = 0
+	let b:InPHPcode_and_script = 0
+	let b:InPHPcode_tofind = ""
 
-	if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast 
-		if b:PHP_indentbeforelast
-			let b:PHP_indentinghuge = 1
-			echom 'Large indenting detected, speed optimizations engaged'
-		endif
-		let b:PHP_indentbeforelast = b:PHP_lastindented
-	endif
+    elseif v:lnum > b:PHP_lastindented
+	let real_PHP_lastindented = b:PHP_lastindented
+	let b:PHP_lastindented = v:lnum
+    endif
 
-	if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented
-		if b:PHP_indentinghuge
-			echom 'Large indenting deactivated'
-			let b:PHP_indentinghuge = 0
-			let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
-		endif
-		let b:PHP_lastindented = v:lnum
-		let b:PHP_LastIndentedWasComment=0
-		let b:PHP_InsideMultilineComment=0
-		let b:PHP_indentbeforelast = 0
-		
-		let b:InPHPcode = 0
-		let b:InPHPcode_checked = 0
-		let b:InPHPcode_and_script = 0
+
+    if !b:InPHPcode_checked " {{{ One time check
+	let b:InPHPcode_checked = 1
+
+	let synname = IslinePHP (prevnonblank(v:lnum), "")
+
+	if synname!=""
+	    if synname != "phpHereDoc"
+		let b:InPHPcode = 1
 		let b:InPHPcode_tofind = ""
 
-	elseif v:lnum > b:PHP_lastindented " we are indenting line in > order (we can rely on the line before)
-		let real_PHP_lastindented = b:PHP_lastindented
-		let b:PHP_lastindented = v:lnum
-	endif
-
-
-	if !b:InPHPcode_checked " {{{ One time check
-		let b:InPHPcode_checked = 1
-
-		let synname = IslinePHP (prevnonblank(v:lnum), "") " the line could be blank (if the user presses 'return')
-
-		if synname!=""
-			if synname != "phpHereDoc"
-				let b:InPHPcode = 1
-				let b:InPHPcode_tofind = ""
-
-				if synname == "phpComment"
-					let b:UserIsTypingComment = 1
-				else
-					let b:UserIsTypingComment = 0
-				endif
-
-				if synname =~? '^javaScript'
-					let b:InPHPcode_and_script = 1
-				endif
-
-			else
-				let b:InPHPcode = 0
-				let b:UserIsTypingComment = 0
-
-				let lnum = v:lnum - 1
-				while getline(lnum) !~? '<<<\a\w*$' && lnum > 1
-					let lnum = lnum - 1
-				endwhile
-
-				let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '')
-			endif
-		else " IslinePHP returned "" => we are not in PHP or Javascript
-			let b:InPHPcode = 0
-			let b:UserIsTypingComment = 0
-			" Then we have to find a php start tag...
-			let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'
-		endif
-	endif "!b:InPHPcode_checked }}}
-
-
-	let lnum = prevnonblank(v:lnum - 1)
-	let last_line = getline(lnum)
-
-	if b:InPHPcode_tofind!=""
-		if cline =~? b:InPHPcode_tofind
-			let	b:InPHPcode = 1
-			let b:InPHPcode_tofind = ""
-			let b:UserIsTypingComment = 0
-			if cline =~ '\*/' " End comment tags must be indented like start comment tags
-				call cursor(v:lnum, 1)
-				call search('\*/\zs', 'W')
-				let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /*
-
-				let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
-				let b:PHP_LastIndentedWasComment = 0 " prevent a problem if multiline /**/ comment are surounded by
-													 " other types of comments
-				
-				if cline =~ '^\s*\*/'
-					return indent(lnum) + 1
-				else
-					return indent(lnum)
-				endif
-
-			elseif cline =~? '<script\>' " a more accurate test is useless since there isn't any other possibility
-				let b:InPHPcode_and_script = 1
-			endif
-		endif
-	endif
-
-
-	if b:InPHPcode
-
-		if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=="Delimiter"
-			if cline !~? s:PHP_startindenttag
-				let b:InPHPcode = 0
-				let b:InPHPcode_tofind = s:PHP_startindenttag
-			elseif cline =~? '<script\>'
-				let b:InPHPcode_and_script = 1
-			endif
-
-		elseif last_line =~? '<<<\a\w*$' 
-			let b:InPHPcode = 0
-			let b:InPHPcode_tofind = substitute( last_line, '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '')
-
-		elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*' " XXX indent comments
-			let b:InPHPcode = 0
-			let b:InPHPcode_tofind = '\*/'
-
-		elseif cline =~? '^\s*</script>'
-			let b:InPHPcode = 0
-			let b:InPHPcode_tofind = s:PHP_startindenttag
-		endif
-	endif " }}}
-
-	if !b:InPHPcode && !b:InPHPcode_and_script
-		return -1
-	endif
-
-
-	" Indent successive // or # comment the same way the first is {{{
-	if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
-		if b:PHP_LastIndentedWasComment == 1
-			return indent(real_PHP_lastindented) " line replaced in 1.02
-		endif
-		let b:PHP_LastIndentedWasComment = 1
-	else
-		let b:PHP_LastIndentedWasComment = 0
-	endif
-	" }}}
-	
-	" Indent multiline /* comments correctly {{{
-	
-
-	if b:PHP_InsideMultilineComment || b:UserIsTypingComment
-		if cline =~ '^\s*\*\%(\/\)\@!'   " if cline == '*'
-			if last_line =~ '^\s*/\*' " if last_line == '/*'
-				return indent(lnum) + 1
-			else
-				return indent(lnum)
-			endif
+		if synname == "phpComment"
+		    let b:UserIsTypingComment = 1
 		else
-			let b:PHP_InsideMultilineComment = 0
+		    let b:UserIsTypingComment = 0
 		endif
-	endif
-	
-	if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' " if cline == '/*'
-		let b:PHP_InsideMultilineComment = 1
-		return -1
-	endif
-	" }}}
 
-	if cline =~# '^\s*<?' && cline !~ '?>' " Added the ^\s* part in version 1.03
-		return 0
-	endif
-
-	if  cline =~ '^\s*?>' && cline !~# '<?'  
-		return 0
-	endif
-
-	if cline =~? '^\s*\a\w*;$' && cline !~? s:notPhpHereDoc
-		return 0
-	endif
-	" }}}
-
-	let s:level = 0
-
-	let lnum = GetLastRealCodeLNum(v:lnum - 1)
-	let last_line = getline(lnum)    " last line
-	let ind = indent(lnum) " by default
-	let endline= s:endline
-
-	if ind==0 && b:PHP_default_indenting
-		let ind = b:PHP_default_indenting
-	endif
-
-	if lnum == 0
-		return b:PHP_default_indenting
-	endif
-
-
-	if cline =~ '^\s*}\%(}}\)\@!'
-		let ind = indent(FindOpenBracket(v:lnum))
-		let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
-		return ind
-	endif
-
-	if cline =~ '^\s*\*/' " End comment tags must be indented like start comment tags
-		call cursor(v:lnum, 1)
-		call search('\*/\zs', 'W')
-		let lnum = searchpair('/\*', '', '\*/\zs', s:searchpairflags) " find the most outside /*
-
-		let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
-
-		if cline =~ '^\s*\*/'
-			return indent(lnum) + 1
-		else
-			return indent(lnum)
+		if synname =~? '^javaScript'
+		    let b:InPHPcode_and_script = 1
 		endif
-	endif
 
-	let defaultORcase = '^\s*\%(default\|case\).*:'
+	    else
+		let b:InPHPcode = 0
+		let b:UserIsTypingComment = 0
 
-	if last_line =~ '[;}]'.endline && last_line !~# defaultORcase 
-		if ind==b:PHP_default_indenting " if no indentation for the previous line
-			return b:PHP_default_indenting
-		elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline
-			return b:PHP_CurrentIndentLevel
-		endif
-	endif
-
-	let LastLineClosed = 0 " used to prevent redundant tests in the last part of the script
-
-	let terminated = '\%(;\%(\s*?>\)\=\|<<<\a\w*\|}\)'.endline
-
-	let unstated   = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline
-
-	if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>'
-		let b:PHP_CurrentIndentLevel = b:PHP_default_indenting " prevent optimized to work at next call
-		return indent(FindTheIfOfAnElse(v:lnum, 1))
-	elseif last_line =~# unstated && cline !~ '^\s*{\|^\s*);\='.endline
-		let ind = ind + &sw
-		return ind
-
-
-	elseif ind != b:PHP_default_indenting && last_line =~ terminated
-		let previous_line = last_line
-		let last_line_num = lnum
-		let LastLineClosed = 1
-
-
-		while 1
-			if previous_line =~ '^\s*}'
-				let last_line_num = FindOpenBracket(last_line_num)
-
-				if getline(last_line_num) =~ '^\s*{'
-					let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
-				endif
-
-				let previous_line = getline(last_line_num)
-
-				continue
-			else
-				if getline(last_line_num) =~# '^\s*else\%(if\)\=\>'
-					let last_line_num = FindTheIfOfAnElse(last_line_num, 0)
-					continue " re-run the loop (we could find a '}' again)
-				endif
-
-
-				let last_match = last_line_num " remember the 'topest' line we found so far
-
-				let one_ahead_indent = indent(last_line_num)
-				let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
-				let two_ahead_indent = indent(last_line_num)
-				let after_previous_line = previous_line
-				let previous_line = getline(last_line_num)
-
-
-				if previous_line =~# defaultORcase.'\|{'.endline
-					break
-				endif
-
-				if after_previous_line=~# '^\s*'.s:blockstart.'.*)'.endline && previous_line =~# '[;}]'.endline
-					break
-				endif
-
-				if one_ahead_indent == two_ahead_indent || last_line_num < 1 
-					if previous_line =~# '[;}]'.endline || last_line_num < 1
-						break
-					endif
-				endif
-			endif
+		let lnum = v:lnum - 1
+		while getline(lnum) !~? '<<<\a\w*$' && lnum > 1
+		    let lnum = lnum - 1
 		endwhile
 
-		if indent(last_match) != ind " if nothing was done lets the old script continue
-			let ind = indent(last_match) " let's use the indent of the last line matched by the alhorithm above
-			let b:PHP_CurrentIndentLevel = b:PHP_default_indenting " line added in version 1.02 to prevent optimized mode
-			" from acting in some special cases
-
-			if cline =~# defaultORcase
-				let ind = ind - &sw
-			endif
-			return ind
-		endif
+		let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '')
+	    endif
+	else
+	    let b:InPHPcode = 0
+	    let b:UserIsTypingComment = 0
+	    let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'
 	endif
-
-	let plinnum = GetLastRealCodeLNum(lnum - 1)
-	let pline = getline(plinnum) " previous to last line
-
-	let last_line = substitute(last_line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','')
+    endif "!b:InPHPcode_checked }}}
 
 
-	if ind == b:PHP_default_indenting
-		if last_line =~ terminated
-			let LastLineClosed = 1
+    " Test if we are indenting PHP code {{{
+    let lnum = prevnonblank(v:lnum - 1)
+    let last_line = getline(lnum)
+
+    if b:InPHPcode_tofind!=""
+	if cline =~? b:InPHPcode_tofind
+	    let	b:InPHPcode = 1
+	    let b:InPHPcode_tofind = ""
+	    let b:UserIsTypingComment = 0
+	    if cline =~ '\*/'
+		call cursor(v:lnum, 1)
+		if cline !~ '^\*/'
+		    call search('\*/', 'W')
 		endif
-	endif
-	
-	if !LastLineClosed " the last line isn't a .*; or a }$ line
-		if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && pline !~ '[,(]'.endline
+		let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
 
-			if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{' " XXX mod {
-				let ind = ind + &sw
-			endif
+		let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 
-			if b:PHP_BracesAtCodeLevel || cline !~# defaultORcase " XXX mod (2) {
-				" case and default are not indented inside blocks
-				let b:PHP_CurrentIndentLevel = ind
-				return ind
-			endif
+		let b:PHP_LastIndentedWasComment = 0
 
-		elseif last_line =~ '\S\+\s*),'.endline
-			call cursor(lnum, 1)
-			call search('),'.endline, 'W')
-			let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()')
-			if openedparent != lnum
-				let ind = indent(openedparent)
-			endif
-			
-		elseif cline !~ '^\s*{' && pline =~ '\%(;\%(\s*?>\)\=\|<<<\a\w*\|{\|^\s*'.s:blockstart.'\s*(.*)\)'.endline.'\|^\s*}\|'.defaultORcase
-			
-			let ind = ind + &sw
-
-		endif
-		if  b:PHP_BracesAtCodeLevel && cline =~# '^\s*{' " XXX mod {
-			let ind = ind + &sw
+		if cline =~ '^\s*\*/'
+		    return indent(lnum) + 1
+		else
+		    return indent(lnum)
 		endif
 
-	elseif last_line =~# defaultORcase
-		let ind = ind + &sw
+	    elseif cline =~? '<script\>'
+		let b:InPHPcode_and_script = 1
+	    endif
 	endif
+    endif
 
-	if cline =~  '^\s*);\='
-		let ind = ind - &sw
-	elseif cline =~# defaultORcase
-		let ind = ind - &sw
-	
+    if b:InPHPcode
+
+	if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=="Delimiter"
+	    if cline !~? s:PHP_startindenttag
+		let b:InPHPcode = 0
+		let b:InPHPcode_tofind = s:PHP_startindenttag
+	    elseif cline =~? '<script\>'
+		let b:InPHPcode_and_script = 1
+	    endif
+
+	elseif last_line =~? '<<<\a\w*$' 
+	    let b:InPHPcode = 0
+	    let b:InPHPcode_tofind = substitute( last_line, '^.*<<<\(\a\w*\)\c', '^\\s*\1;$', '')
+
+	elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*'
+	    let b:InPHPcode = 0
+	    let b:InPHPcode_tofind = '\*/'
+
+	elseif cline =~? '^\s*</script>'
+	    let b:InPHPcode = 0
+	    let b:InPHPcode_tofind = s:PHP_startindenttag
 	endif
+    endif " }}}
 
-	let b:PHP_CurrentIndentLevel = ind
+    if !b:InPHPcode && !b:InPHPcode_and_script
+	return -1
+    endif
+
+
+    " Indent successive // or # comment the same way the first is {{{
+    if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
+	if b:PHP_LastIndentedWasComment == 1
+	    return indent(real_PHP_lastindented)
+	endif
+	let b:PHP_LastIndentedWasComment = 1
+    else
+	let b:PHP_LastIndentedWasComment = 0
+    endif " }}}
+
+    " Indent multiline /* comments correctly {{{
+
+    if b:PHP_InsideMultilineComment || b:UserIsTypingComment
+	if cline =~ '^\s*\*\%(\/\)\@!'
+	    if last_line =~ '^\s*/\*'
+		return indent(lnum) + 1
+	    else
+		return indent(lnum)
+	    endif
+	else
+	    let b:PHP_InsideMultilineComment = 0
+	endif
+    endif
+
+    if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*'
+	let b:PHP_InsideMultilineComment = 1
+	return -1
+    endif " }}}
+
+
+    " Things always indented at col 1 (PHP delimiter: <?, ?>, Heredoc end) {{{
+    if cline =~# '^\s*<?' && cline !~ '?>'
+	return 0
+    endif
+
+    if  cline =~ '^\s*?>' && cline !~# '<?'  
+	return 0
+    endif
+
+    if cline =~? '^\s*\a\w*;$' && cline !~? s:notPhpHereDoc
+	return 0
+    endif " }}}
+
+    let s:level = 0
+
+    let lnum = GetLastRealCodeLNum(v:lnum - 1)
+    let last_line = getline(lnum)
+    let ind = indent(lnum)
+    let endline= s:endline
+
+    if ind==0 && b:PHP_default_indenting
+	let ind = b:PHP_default_indenting
+    endif
+
+    if lnum == 0
+	return b:PHP_default_indenting
+    endif
+
+
+    if cline =~ '^\s*}\%(}}\)\@!'
+	let ind = indent(FindOpenBracket(v:lnum))
+	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 	return ind
+    endif
+
+    if cline =~ '^\s*\*/'
+	call cursor(v:lnum, 1)
+	if cline !~ '^\*/'
+	    call search('\*/', 'W')
+	endif
+	let lnum = searchpair('/\*', '', '\*/', s:searchpairflags)
+
+	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
+
+	if cline =~ '^\s*\*/'
+	    return indent(lnum) + 1
+	else
+	    return indent(lnum)
+	endif
+    endif
+
+    let defaultORcase = '^\s*\%(default\|case\).*:'
+
+    if last_line =~ '[;}]'.endline && last_line !~# defaultORcase 
+	if ind==b:PHP_default_indenting
+	    return b:PHP_default_indenting
+	elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline
+	    return b:PHP_CurrentIndentLevel
+	endif
+    endif
+
+    let LastLineClosed = 0
+
+    let terminated = '\%(;\%(\s*?>\)\=\|<<<\a\w*\|}\)'.endline
+
+    let unstated   = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline
+
+    if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>'
+	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
+	return indent(FindTheIfOfAnElse(v:lnum, 1))
+    elseif cline =~ '^\s*{'
+	let previous_line = last_line
+	let last_line_num = lnum
+
+	while last_line_num > 1
+
+	    if previous_line =~ '^\s*\%(' . s:blockstart . '\|\%([a-zA-Z]\s*\)*function\)' && previous_line !~ '^\s*[|&]'
+
+		let ind = indent(last_line_num)
+
+		if  b:PHP_BracesAtCodeLevel
+		    let ind = ind + &sw
+		endif
+
+		return ind 
+	    endif
+
+	    let last_line_num = last_line_num - 1
+	    let previous_line = getline(last_line_num)
+	endwhile
+
+    elseif last_line =~# unstated && cline !~ '^\s*{\|^\s*);\='.endline
+	let ind = ind + &sw
+	return ind
+
+    elseif ind != b:PHP_default_indenting && last_line =~ terminated
+	let previous_line = last_line
+	let last_line_num = lnum
+	let LastLineClosed = 1
+
+	while 1
+	    if previous_line =~ '^\s*}'
+		let last_line_num = FindOpenBracket(last_line_num)
+
+		if getline(last_line_num) =~ '^\s*{'
+		    let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
+		endif
+
+		let previous_line = getline(last_line_num)
+
+		continue
+	    else
+
+		if getline(last_line_num) =~# '^\s*else\%(if\)\=\>'
+		    let last_line_num = FindTheIfOfAnElse(last_line_num, 0)
+		    continue
+		endif
+
+
+		let last_match = last_line_num
+
+		let one_ahead_indent = indent(last_line_num)
+		let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
+		let two_ahead_indent = indent(last_line_num)
+		let after_previous_line = previous_line
+		let previous_line = getline(last_line_num)
+
+
+		if previous_line =~# defaultORcase.'\|{'.endline
+		    break
+		endif
+
+		if after_previous_line=~# '^\s*'.s:blockstart.'.*)'.endline && previous_line =~# '[;}]'.endline
+		    break
+		endif
+
+		if one_ahead_indent == two_ahead_indent || last_line_num < 1 
+		    if previous_line =~# '[;}]'.endline || last_line_num < 1
+			break
+		    endif
+		endif
+	    endif
+	endwhile
+
+	if indent(last_match) != ind
+	    let ind = indent(last_match)
+	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
+
+	    if cline =~# defaultORcase
+		let ind = ind - &sw
+	    endif
+	    return ind
+	endif
+    endif
+
+    let plinnum = GetLastRealCodeLNum(lnum - 1)
+    let pline = getline(plinnum)
+
+    let last_line = substitute(last_line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','')
+
+
+    if ind == b:PHP_default_indenting
+	if last_line =~ terminated
+	    let LastLineClosed = 1
+	endif
+    endif
+
+    if !LastLineClosed
+
+	if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && pline !~ '[,(]'.endline
+
+	    if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'
+		let ind = ind + &sw
+	    endif
+
+	    if b:PHP_BracesAtCodeLevel || cline !~# defaultORcase
+		let b:PHP_CurrentIndentLevel = ind
+		return ind
+	    endif
+
+	elseif last_line =~ '\S\+\s*),'.endline
+	    call cursor(lnum, 1)
+	    call search('),'.endline, 'W')
+	    let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()')
+	    if openedparent != lnum
+		let ind = indent(openedparent)
+	    endif
+
+
+	elseif cline !~ '^\s*{' && pline =~ '\%(;\%(\s*?>\)\=\|<<<\a\w*\|{\|^\s*'.s:blockstart.'\s*(.*)\)'.endline.'\|^\s*}\|'.defaultORcase
+
+	    let ind = ind + &sw
+
+	endif
+
+    elseif last_line =~# defaultORcase
+	let ind = ind + &sw
+    endif
+
+    if cline =~  '^\s*);\='
+	let ind = ind - &sw
+    elseif cline =~# defaultORcase
+	let ind = ind - &sw
+
+    endif
+
+    let b:PHP_CurrentIndentLevel = ind
+    return ind
 endfunction
 
-" vim: set ts=4 sw=4:
-" vim: set ff=unix:
+" vim: set ts=8 sw=4 sts=4:
diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim
index ff22bbb..e5946eb 100644
--- a/runtime/indent/ruby.vim
+++ b/runtime/indent/ruby.vim
@@ -82,7 +82,7 @@
 let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue\>\|when\|elsif\)\>'
 
 " Regex that defines the end-match for the 'end' keyword.
-let s:end_end_regex = '\%(^\|[^.]\)\@<=\<end\>'
+let s:end_end_regex = '\%(^\|[^.:]\)\@<=\<end\>'
 
 " Expression used for searchpair() call for finding match for 'end' keyword.
 let s:end_skip_expr = s:skip_expr .
@@ -244,17 +244,12 @@
   " If we have a deindenting keyword, find its match and indent to its level.
   " TODO: this is messy
   if s:Match(v:lnum, s:ruby_deindent_keywords)
-"    let lnum = s:PrevNonBlankNonString(v:lnum - 1)
-"
-"    if lnum == 0
-"      return 0
-"    endif
-"
-"    return indent(v:lnum) - &sw
     call cursor(v:lnum, 1)
     if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
             \ s:end_skip_expr) > 0
-      if strpart(getline('.'), 0, col('.') - 1) =~ '=\s*'
+      let line = getline('.')
+      if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
+       \ strpart(line, col('.') - 1, 2) !~ 'do'
         let ind = virtcol('.') - 1
       else
         let ind = indent('.')
@@ -380,5 +375,3 @@
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
-
-" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
diff --git a/runtime/indent/sml.vim b/runtime/indent/sml.vim
new file mode 100644
index 0000000..30d3108
--- /dev/null
+++ b/runtime/indent/sml.vim
@@ -0,0 +1,215 @@
+" Vim indent file
+" Language:     SML
+" Maintainer:	Saikat Guha <sg266@cornell.edu>
+" 				Hubert Chao <hc85@cornell.edu>
+" Original OCaml Version:
+" 				Jean-Francois Yuen  <jfyuen@ifrance.com>
+"               Mike Leary          <leary@nwlink.com>
+"               Markus Mottl        <markus@oefai.at>
+" OCaml URL:    http://www.oefai.at/~markus/vim/indent/ocaml.vim
+" Last Change:  2003 Jan 04	- Adapted to SML
+" 				2002 Nov 06 - Some fixes (JY)
+"               2002 Oct 28 - Fixed bug with indentation of ']' (MM)
+"               2002 Oct 22 - Major rewrite (JY)
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal expandtab
+setlocal indentexpr=GetSMLIndent()
+setlocal indentkeys+=0=and,0=else,0=end,0=handle,0=if,0=in,0=let,0=then,0=val,0=fun,0=\|,0=*),0)
+setlocal nolisp
+setlocal nosmartindent
+setlocal textwidth=80
+setlocal shiftwidth=2
+
+" Comment formatting
+if (has("comments"))
+  set comments=sr:(*,mb:*,ex:*)
+  set fo=cqort
+endif
+
+" Only define the function once.
+"if exists("*GetSMLIndent")
+"finish
+"endif
+
+" Define some patterns:
+let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|;\)\s*$'
+let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'
+let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'
+let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'
+let s:module = '\<\%(let\|sig\|struct\)\>'
+let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'
+let s:type = '^\s*\%(let\|type\)\>.*='
+let s:val = '^\s*\(val\|external\)\>.*:'
+
+" Skipping pattern, for comments
+function! s:SkipPattern(lnum, pat)
+  let def = prevnonblank(a:lnum - 1)
+  while def > 0 && getline(def) =~ a:pat
+    let def = prevnonblank(def - 1)
+  endwhile
+  return def
+endfunction
+
+" Indent for ';;' to match multiple 'let'
+function! s:GetInd(lnum, pat, lim)
+  let llet = search(a:pat, 'bW')
+  let old = indent(a:lnum)
+  while llet > 0
+    let old = indent(llet)
+    let nb = s:SkipPattern(llet, '^\s*(\*.*\*)\s*$')
+    if getline(nb) =~ a:lim
+      return old
+    endif
+    let llet = search(a:pat, 'bW')
+  endwhile
+  return old
+endfunction
+
+" Indent pairs
+function! s:FindPair(pstart, pmid, pend)
+  call search(a:pend, 'bW')
+"  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
+  let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')
+  if lno == -1
+	return indent(lno)
+  else
+	return col(".") - 1
+  endif
+endfunction
+
+function! s:FindLet(pstart, pmid, pend)
+  call search(a:pend, 'bW')
+"  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
+  let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')
+  let moduleLine = getline(lno)
+  if lno == -1 || moduleLine =~ '^\s*\(fun\|structure\|signature\)\>'
+	return indent(lno)
+  else
+	return col(".") - 1
+  endif
+endfunction
+
+" Indent 'let'
+"function! s:FindLet(pstart, pmid, pend)
+"  call search(a:pend, 'bW')
+"  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ "^\\s*let\\>.*=\\s*$\\|" . s:beflet'))
+"endfunction
+
+function! GetSMLIndent()
+  " Find a non-blank line above the current line.
+  let lnum = prevnonblank(v:lnum - 1)
+
+  " At the start of the file use zero indent.
+  if lnum == 0
+    return 0
+  endif
+
+  let ind = indent(lnum)
+  let lline = getline(lnum)
+
+	" Return double 'shiftwidth' after lines matching:
+	if lline =~ '^\s*|.*=>\s*$'
+		return ind + &sw + &sw
+	elseif lline =~ '^\s*val\>.*=\s*$'
+		return ind + &sw
+	endif
+
+  let line = getline(v:lnum)
+
+	" Indent lines starting with 'end' to matching module
+	if line =~ '^\s*end\>'
+		return s:FindLet(s:module, '', '\<end\>')
+
+	" Match 'else' with 'if'
+	elseif line =~ '^\s*else\>'
+	  	if lline !~ '^\s*\(if\|else\|then\)\>'
+				return s:FindPair('\<if\>', '', '\<then\>')
+	  	else return ind
+		endif
+
+	" Match 'then' with 'if'
+	elseif line =~ '^\s*then\>'
+  	if lline !~ '^\s*\(if\|else\|then\)\>'
+		  return s:FindPair('\<if\>', '', '\<then\>')
+	else return ind
+	endif
+
+	" Indent if current line begins with ']'
+	elseif line =~ '^\s*\]'
+		return s:FindPair('\[','','\]')
+
+  " Indent current line starting with 'in' to last matching 'let'
+	elseif line =~ '^\s*in\>'
+		let ind = s:FindLet('\<let\>','','\<in\>')
+
+	" Indent from last matching module if line matches:
+	elseif line =~ '^\s*\(fun\|val\|open\|structure\|and\|datatype\|type\|exception\)\>'
+		cursor(lnum,1)
+  		let lastModule = indent(searchpair(s:module, '', '\<end\>', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
+		if lastModule == -1
+			return 0
+		else
+			return lastModule + &sw
+		endif
+
+	" Indent lines starting with '|' from matching 'case', 'handle'
+	elseif line =~ '^\s*|'
+		" cursor(lnum,1)
+		let lastSwitch = search('\<\(case\|handle\|fun\|datatype\)\>','bW')
+		let switchLine = getline(lastSwitch)
+		let switchLineIndent = indent(lastSwitch)
+		if lline =~ '^\s*|'
+		  return ind
+		endif
+		if switchLine =~ '\<case\>'
+			return col(".") + 2
+		elseif switchLine =~ '\<handle\>'
+			return switchLineIndent + &sw
+		elseif switchLine =~ '\<datatype\>'
+			call search('=')
+			return col(".") - 1
+		else
+			return switchLineIndent + 2
+		endif
+
+
+  " Indent if last line ends with 'sig', 'struct', 'let', 'then', 'else',
+  " 'in'
+  elseif lline =~ '\<\(sig\|struct\|let\|in\|then\|else\)\s*$'
+		let ind = ind + &sw
+
+  " Indent if last line ends with 'of', align from 'case'
+  elseif lline =~ '\<\(of\)\s*$'
+		call search('\<case\>',"bW")
+		let ind = col(".")+4
+
+	" Indent if current line starts with 'of'
+  elseif line =~ '^\s*of\>'
+		call search('\<case\>',"bW")
+		let ind = col(".")+1
+
+
+	" Indent if last line starts with 'fun', 'case', 'fn'
+	elseif lline =~ '^\s*\(fun\|fn\|case\)\>'
+		let ind = ind + &sw
+
+	endif
+
+	" Don't indent 'let' if last line started with 'fun', 'fn'
+	if line =~ '^\s*let\>'
+		if lline =~ '^\s*\(fun\|fn\)'
+			let ind = ind - &sw
+		endif
+  endif
+
+  return ind
+
+endfunction
+
+" vim:sw=2
diff --git a/runtime/plugin/NetrwPlugin.vim b/runtime/plugin/NetrwPlugin.vim
index 42bdbd9..8013c8f 100644
--- a/runtime/plugin/NetrwPlugin.vim
+++ b/runtime/plugin/NetrwPlugin.vim
@@ -1,7 +1,8 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN PORTION
-" Date:		Sep 08, 2005
+" Last Change:	Aug 29, 2005
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+" Version:	66
 " License:	Vim License  (see vim's :help license)
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@@ -20,6 +21,17 @@
 
 " ---------------------------------------------------------------------
 " Load Once: {{{1
+if exists("g:loaded_netrw") || &cp
+  finish
+endif
+if v:version < 600
+ echoerr "***netrw*** doesn't support Vim version ".v:version
+ finish
+endif
+let g:loaded_netrw  = "v66"
+if v:version < 700
+ let loaded_explorer = 1
+endif
 let s:keepcpo= &cpo
 set cpo&vim
 
@@ -126,7 +138,7 @@
 "               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
+if has("win95") && 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>)
diff --git a/runtime/plugin/NetrwSettings.vim b/runtime/plugin/NetrwSettings.vim
index 7d8089c..eecdcd2 100644
--- a/runtime/plugin/NetrwSettings.vim
+++ b/runtime/plugin/NetrwSettings.vim
@@ -1,7 +1,7 @@
 " NetrwSettings.vim: makes netrw settings simpler
-" Date:		Aug 16, 2005
+" Last Change:	Aug 16, 2005
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	3
+" Version:		3
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
diff --git a/runtime/spell/en.ascii.spl b/runtime/spell/en.ascii.spl
index c6ebea9..0715e55 100644
--- a/runtime/spell/en.ascii.spl
+++ b/runtime/spell/en.ascii.spl
Binary files differ
diff --git a/runtime/spell/en.latin1.spl b/runtime/spell/en.latin1.spl
index fe6b90e..6d4fe5f 100644
--- a/runtime/spell/en.latin1.spl
+++ b/runtime/spell/en.latin1.spl
Binary files differ
diff --git a/runtime/spell/en.utf-8.spl b/runtime/spell/en.utf-8.spl
index 46ef9a5..d3cd823 100644
--- a/runtime/spell/en.utf-8.spl
+++ b/runtime/spell/en.utf-8.spl
Binary files differ
diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim
index 0a00dfc..aba8697 100644
--- a/runtime/syntax/ruby.vim
+++ b/runtime/syntax/ruby.vim
@@ -79,10 +79,10 @@
 syn match  rubyBlockParameter		"\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
 
 syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
-syn match rubyPredefinedVariable "$_\>"								display
-syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"						display
-syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"		display
-syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOAD_PATH\|SAFE\|VERBOSE\)\>"	display
+syn match rubyPredefinedVariable "$_\>"											   display
+syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
+syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
+syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
 syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
 syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
 syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
@@ -166,8 +166,8 @@
   syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
 
   " statement with optional *do*
-  syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
-  syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
+  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
 
   if !exists("ruby_minlines")
     let ruby_minlines = 50
@@ -196,7 +196,7 @@
 if !exists("ruby_no_special_methods")
   syn keyword rubyAccess    public protected private
   syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
-  syn keyword rubyControl   abort at_exit exit fork loop trap
+  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
   syn keyword rubyEval      eval class_eval instance_eval module_eval
   syn keyword rubyException raise fail catch throw
   syn keyword rubyInclude   autoload extend include load require
diff --git a/src/diff.c b/src/diff.c
index b6f936e..1a382e3 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1905,7 +1905,10 @@
     {
 	/* No argument: Find the other buffer in the list of diff buffers. */
 	for (idx_other = 0; idx_other < DB_COUNT; ++idx_other)
-	    if (diffbuf[idx_other] != curbuf && diffbuf[idx_other] != NULL)
+	    if (diffbuf[idx_other] != curbuf
+		    && diffbuf[idx_other] != NULL
+		    && (eap->cmdidx != CMD_diffput
+					       || diffbuf[idx_other]->b_p_ma))
 		break;
 	if (idx_other == DB_COUNT)
 	{
@@ -1915,7 +1918,9 @@
 
 	/* Check that there isn't a third buffer in the list */
 	for (i = idx_other + 1; i < DB_COUNT; ++i)
-	    if (diffbuf[i] != curbuf && diffbuf[i] != NULL)
+	    if (diffbuf[i] != curbuf
+		    && diffbuf[i] != NULL
+		    && (eap->cmdidx != CMD_diffput || diffbuf[i]->b_p_ma))
 	    {
 		EMSG(_("E101: More than two buffers in diff mode, don't know which one to use"));
 		return;
diff --git a/src/edit.c b/src/edit.c
index 5b72461..d9bfb2f 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -295,6 +295,7 @@
      */
     if (cmdchar != 'r' && cmdchar != 'v')
     {
+# ifdef FEAT_EVAL
 	if (cmdchar == 'R')
 	    ptr = (char_u *)"r";
 	else if (cmdchar == 'V')
@@ -302,6 +303,7 @@
 	else
 	    ptr = (char_u *)"i";
 	set_vim_var_string(VV_INSERTMODE, ptr, 1);
+# endif
 	apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
     }
 #endif
@@ -6580,9 +6582,11 @@
 #endif
 
 #ifdef FEAT_AUTOCMD
+# ifdef FEAT_EVAL
     set_vim_var_string(VV_INSERTMODE,
 		   (char_u *)((State & REPLACE_FLAG) ? "i" :
 			    replaceState == VREPLACE ? "v" : "r"), 1);
+# endif
     apply_autocmds(EVENT_INSERTCHANGE, NULL, NULL, FALSE, curbuf);
 #endif
     if (State & REPLACE_FLAG)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 72ffc18..f88fbf8 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -114,7 +114,6 @@
 # define ex_cc			ex_ni
 # define ex_cnext		ex_ni
 # define ex_cfile		ex_ni
-# define ex_cexpr		ex_ni
 # define qf_list		ex_ni
 # define qf_age			ex_ni
 # define ex_helpgrep		ex_ni
@@ -125,6 +124,9 @@
 # define ex_copen		ex_ni
 # define ex_cwindow		ex_ni
 #endif
+#if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
+# define ex_cexpr		ex_ni
+#endif
 
 static int	check_more __ARGS((int, int));
 static linenr_T get_address __ARGS((char_u **, int skip, int to_other_file));
diff --git a/src/ex_getln.c b/src/ex_getln.c
index b69076f..a3fac10 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -428,13 +428,10 @@
 	    if (p_wmnu && wild_menu_showing != 0)
 	    {
 		int skt = KeyTyped;
-		int old_RedrawingDisabled;
+		int old_RedrawingDisabled = RedrawingDisabled;
 
 		if (ccline.input_fn)
-		{
-		    old_RedrawingDisabled = RedrawingDisabled;
 		    RedrawingDisabled = 0;
-		}
 
 		if (wild_menu_showing == WM_SCROLLED)
 		{
@@ -463,10 +460,10 @@
 # endif
 		    redraw_statuslines();
 		}
-		if (ccline.input_fn)
-		    RedrawingDisabled = old_RedrawingDisabled;
 		KeyTyped = skt;
 		wild_menu_showing = 0;
+		if (ccline.input_fn)
+		    RedrawingDisabled = old_RedrawingDisabled;
 	    }
 #endif
 	}
@@ -4876,7 +4873,7 @@
 
 /*
  * Get the current command-line type.
- * Returns ':' or '/' or '?' or '@' or '>'
+ * Returns ':' or '/' or '?' or '@' or '>' or '-'
  * Only works when the command line is being edited.
  * Returns NUL when something is wrong.
  */
@@ -4887,6 +4884,8 @@
 
     if (p == NULL)
 	return NUL;
+    if (p->cmdfirstc == NUL)
+	return (p->input_fn) ? '@' : '-';
     return p->cmdfirstc;
 }
 
diff --git a/src/feature.h b/src/feature.h
index 0ab57e9..e69fcd9 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -202,13 +202,6 @@
 #endif
 
 /*
- * +textobjects		Text objects: "vaw", "das", etc.
- */
-#ifdef FEAT_NORMAL
-# define FEAT_TEXTOBJ
-#endif
-
-/*
  * +visual		Visual mode.
  * +visualextra		Extra features for Visual mode (mostly block operators).
  */
@@ -383,12 +376,20 @@
  * +profile		Profiling for functions and scripts.
  */
 #if defined(FEAT_HUGE) \
+	&& defined(FEAT_EVAL) \
 	&& ((defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)) \
 		|| defined(WIN3264))
 # define FEAT_PROFILE
 #endif
 
 /*
+ * +textobjects		Text objects: "vaw", "das", etc.
+ */
+#if defined(FEAT_NORMAL) && defined(FEAT_EVAL)
+# define FEAT_TEXTOBJ
+#endif
+
+/*
  *			Insert mode completion with 'completefunc'.
  */
 #if defined(FEAT_INS_EXPAND) && defined(FEAT_EVAL)
diff --git a/src/fileio.c b/src/fileio.c
index 916fdcb..e743061 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2796,14 +2796,22 @@
 	if (!buf_valid(buf))
 	    buf = NULL;
 	if (buf == NULL || (buf->b_ml.ml_mfp == NULL && !empty_memline)
-				       || did_cmd || nofile_err || aborting())
+				       || did_cmd || nofile_err
+#ifdef FEAT_EVAL
+				       || aborting()
+#endif
+				       )
 	{
 	    --no_wait_return;
 	    msg_scroll = msg_save;
 	    if (nofile_err)
 		EMSG(_("E676: No matching autocommands for acwrite buffer"));
 
-	    if (aborting() || nofile_err)
+	    if (nofile_err
+#ifdef FEAT_EVAL
+		    || aborting()
+#endif
+		    )
 		/* An aborting error, interrupt or exception in the
 		 * autocommands. */
 		return FAIL;
@@ -6021,8 +6029,10 @@
 	     * Avoid being called recursively by setting "busy".
 	     */
 	    busy = TRUE;
+# ifdef FEAT_EVAL
 	    set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1);
 	    set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1);
+# endif
 	    n = apply_autocmds(EVENT_FILECHANGEDSHELL,
 				      buf->b_fname, buf->b_fname, FALSE, buf);
 	    busy = FALSE;
@@ -6030,12 +6040,14 @@
 	    {
 		if (!buf_valid(buf))
 		    EMSG(_("E246: FileChangedShell autocommand deleted buffer"));
+# ifdef FEAT_EVAL
 		s = get_vim_var_str(VV_FCS_CHOICE);
 		if (STRCMP(s, "reload") == 0 && *reason != 'd')
 		    reload = TRUE;
 		else if (STRCMP(s, "ask") == 0)
 		    n = FALSE;
 		else
+# endif
 		    return 2;
 	    }
 	    if (!n)
@@ -7978,12 +7990,18 @@
 {
     int		did_cmd;
 
+#ifdef FEAT_EVAL
     if (should_abort(*retval))
 	return FALSE;
+#endif
 
     did_cmd = apply_autocmds_group(event, fname, fname_io, force,
 						      AUGROUP_ALL, buf, NULL);
-    if (did_cmd && aborting())
+    if (did_cmd
+#ifdef FEAT_EVAL
+	    && aborting()
+#endif
+	    )
 	*retval = FAIL;
     return did_cmd;
 }
diff --git a/src/main.aap b/src/main.aap
index 83a9cd8..f31f929 100644
--- a/src/main.aap
+++ b/src/main.aap
@@ -6,15 +6,15 @@
 # explanations.
 #
 # Optional arguments:
-#  PREFIX=dir		Overrules the install directory.
-#			Can be specified when installing only.
-#			Example: aap install PREFIX=$HOME
+#  PREFIX=dir           Overrules the install directory.
+#                       Can be specified when installing only.
+#                       Example: aap install PREFIX=$HOME
 #
 
 # Skip the configure stuff when "link.sh" is executing this recipe recursively
 # to build pathdef.c or not building something and auto/config.aap does exist.
 @if ((_no.TARGETARG != "pathdef" and has_build_target())
-@	or not os.path.exists("auto/config.aap")):
+@       or not os.path.exists("auto/config.aap")):
 
     #
     # A U T O C O N F
@@ -25,9 +25,9 @@
     # there is no autoconf program skip this (the signature is often the only
     # thing that's outdated)
     auto/configure {signfile = mysign} : configure.in
-	@if not program_path("autoconf"):
-	    :print Can't find autoconf, using existing configure script.
-	@else:
+        @if not program_path("autoconf"):
+            :print Can't find autoconf, using existing configure script.
+        @else:
             # Move configure aside, autoconf would overwrite it
             :move {exist} configure configure.save
             :sys autoconf
@@ -38,37 +38,37 @@
 
     # Change the configure script to produce config.aap instead of config.mk.
     auto/configure.aap : auto/configure
-	:print Adjusting auto/configure for A-A-P.
-	:cat auto/configure | :eval re.sub("config.mk", "config.aap", stdin)
-							>! auto/configure.aap
-	:chmod 755 auto/configure.aap
+        :print Adjusting auto/configure for A-A-P.
+        :cat auto/configure | :eval re.sub("config.mk", "config.aap", stdin)
+                                                        >! auto/configure.aap
+        :chmod 755 auto/configure.aap
 
     # The configure script uses the directory where it's located, use a link.
     configure.aap:  {buildcheck=}
-	:symlink {f} auto/configure.aap configure.aap
+        :symlink {f} auto/configure.aap configure.aap
 
     # Dependency: run configure.aap to update config.h and config.aap in the
     # "auto" directory.
     config {virtual} auto/config.h auto/config.aap :
-			 auto/configure.aap configure.aap
-			 config.arg config.h.in config.aap.in
-	:sys CONFIG_STATUS=auto/config.status
+                         auto/configure.aap configure.aap
+                         config.arg config.h.in config.aap.in
+        :sys CONFIG_STATUS=auto/config.status
                 ./configure.aap `file2string("config.arg")`
                     --cache-file=auto/config.cache
 
     # Configure arguments: create an empty "config.arg" file when its missing
     config.arg:
-	:touch {exist} config.arg
+        :touch {exist} config.arg
 
     # "auto/config.aap" contains a lot of settings, such as the name of the
     # executable "Target".
     # First update it, forcefully if the "reconfig" target was used.
     @if _no.TARGETARG != "comment" and _no.TARGETARG != "make":
-	@if "reconfig" in var2list(_no.TARGETARG):
-	    :del {force} auto/config.cache auto/config.status
-	    :update {force} auto/config.aap
-	@else:
-	    :update auto/config.aap
+        @if "reconfig" in var2list(_no.TARGETARG):
+            :del {force} auto/config.cache auto/config.status
+            :update {force} auto/config.aap
+        @else:
+            :update auto/config.aap
 
 # Include the recipe that autoconf generated.
 :include auto/config.aap
@@ -87,93 +87,93 @@
 #
 :variant GUI
     GTK
-	GUI_SRC		= gui.c gui_gtk.c gui_gtk_x11.c pty.c gui_beval.c
-			    gui_gtk_f.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_GTK $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	=
-	GUI_LIBS2	= $GTK_LIBNAME
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        GUI_SRC         = gui.c gui_gtk.c gui_gtk_x11.c pty.c gui_beval.c
+                            gui_gtk_f.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_GTK $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       =
+        GUI_LIBS2       = $GTK_LIBNAME
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     KDE
-        GUI_SRC		= gui.c pty.c gui_kde.cc gui_kde_x11.cc
+        GUI_SRC         = gui.c pty.c gui_kde.cc gui_kde_x11.cc
                             gui_kde_wid_moc.cc
                             kvim_iface_skel.cc
-        GUI_OBJ		= $BDIR/gui_kde_wid.o
-        GUI_DEFS	= -DFEAT_GUI_KDE $NARROW_PROTO
-        GUI_IPATH	= $GUI_INC_LOC
-        GUI_LIBS_DIR	= $GUI_LIB_LOC
-        GUI_LIBS1	=
-        GUI_LIBS2	=
-	GUI_TARGETS	= installglinks installkdeicons
-	GUI_MAN_TARGETS	= installghelplinks
+        GUI_OBJ         = $BDIR/gui_kde_wid.o
+        GUI_DEFS        = -DFEAT_GUI_KDE $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       =
+        GUI_LIBS2       =
+        GUI_TARGETS     = installglinks installkdeicons
+        GUI_MAN_TARGETS = installghelplinks
         GUI_TESTTARGET  = gui
 
     MOTIF
-	GUI_SRC		= gui.c gui_motif.c gui_x11.c pty.c gui_beval.c
-		  	  gui_xmdlg.c gui_xmebw.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_MOTIF $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	=
-	GUI_LIBS2	= $MOTIF_LIBNAME -lXt
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        GUI_SRC         = gui.c gui_motif.c gui_x11.c pty.c gui_beval.c
+                          gui_xmdlg.c gui_xmebw.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_MOTIF $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       =
+        GUI_LIBS2       = $MOTIF_LIBNAME -lXt
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     ATHENA
-	# XAW_LIB et al. can be overruled to use Xaw3d widgets
-	XAW_LIB		?= -lXaw
-	GUI_SRC		=  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c \
-			    gui_at_sb.c gui_at_fs.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_ATHENA $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	= $XAW_LIB
-	GUI_LIBS2	= -lXt
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        # XAW_LIB et al. can be overruled to use Xaw3d widgets
+        XAW_LIB         ?= -lXaw
+        GUI_SRC         =  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c \
+                            gui_at_sb.c gui_at_fs.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_ATHENA $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       = $XAW_LIB
+        GUI_LIBS2       = -lXt
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     NEXTAW
-	# XAW_LIB et al. can be overruled to use Xaw3d widgets
-	XAW_LIB		?= -lXaw
-	GUI_SRC		=  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c
-			    gui_at_fs.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_ATHENA -DFEAT_GUI_NEXTAW $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	= $NEXTAW_LIB
-	GUI_LIBS2	= -lXt
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        # XAW_LIB et al. can be overruled to use Xaw3d widgets
+        XAW_LIB         ?= -lXaw
+        GUI_SRC         =  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c
+                            gui_at_fs.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_ATHENA -DFEAT_GUI_NEXTAW $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       = $NEXTAW_LIB
+        GUI_LIBS2       = -lXt
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     PHOTONGUI
-	GUI_SRC		= gui.c gui_photon.c pty.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_PHOTON
-	GUI_IPATH	=
-	GUI_LIBS_DIR	=
-	GUI_LIBS1	= -lph -lphexlib
-	GUI_LIBS2	=
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        GUI_SRC         = gui.c gui_photon.c pty.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_PHOTON
+        GUI_IPATH       =
+        GUI_LIBS_DIR    =
+        GUI_LIBS1       = -lph -lphexlib
+        GUI_LIBS2       =
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     *
-	GUI_SRC		=
-	GUI_OBJ		=
-	GUI_DEFS	=
-	GUI_IPATH	=
-	GUI_LIBS_DIR	=
-	GUI_LIBS1	=
-	GUI_LIBS2	=
-	GUI_TARGETS	=
-	GUI_MAN_TARGETS	=
-	GUI_TESTTARGET	=
+        GUI_SRC         =
+        GUI_OBJ         =
+        GUI_DEFS        =
+        GUI_IPATH       =
+        GUI_LIBS_DIR    =
+        GUI_LIBS1       =
+        GUI_LIBS2       =
+        GUI_TARGETS     =
+        GUI_MAN_TARGETS =
+        GUI_TESTTARGET  =
 
 
 PRE_DEFS = -Iproto -I. $DEFS $GUI_DEFS $GUI_IPATH $CPPFLAGS $?(EXTRA_IPATHS)
@@ -216,71 +216,71 @@
 #     update to a newer version of A-A-P.
 @if not has_target("fetch"):
     fetch:
-	:execute ../main.aap fetch
+        :execute ../main.aap fetch
 
 
 # All the source files that need to be compiled.
 # Some are optional and depend on configure.
 # "version.c" is missing, it's always compiled (see below).
 Source =
-	buffer.c
-	charset.c
-	diff.c
-	digraph.c
-	edit.c
-	eval.c
-	ex_cmds.c
-	ex_cmds2.c
-	ex_docmd.c
-	ex_eval.c
-	ex_getln.c
-	fileio.c
-	fold.c
-	getchar.c
+        buffer.c
+        charset.c
+        diff.c
+        digraph.c
+        edit.c
+        eval.c
+        ex_cmds.c
+        ex_cmds2.c
+        ex_docmd.c
+        ex_eval.c
+        ex_getln.c
+        fileio.c
+        fold.c
+        getchar.c
         hardcopy.c
-	hashtable.c
-	if_cscope.c
-	if_xcmdsrv.c
-	main.c
-	mark.c
-	memfile.c
-	memline.c
-	menu.c
-	message.c
-	misc1.c
-	misc2.c
-	move.c
-	mbyte.c
-	normal.c
-	ops.c
-	option.c
-	os_unix.c
-	auto/pathdef.c
-	quickfix.c
-	regexp.c
-	screen.c
-	search.c
-	spell.c
-	syntax.c
-	tag.c
-	term.c
-	ui.c
-	undo.c
-	window.c
-	$OS_EXTRA_SRC
-	$GUI_SRC
-	$HANGULIN_SRC
+        hashtable.c
+        if_cscope.c
+        if_xcmdsrv.c
+        main.c
+        mark.c
+        memfile.c
+        memline.c
+        menu.c
+        message.c
+        misc1.c
+        misc2.c
+        move.c
+        mbyte.c
+        normal.c
+        ops.c
+        option.c
+        os_unix.c
+        auto/pathdef.c
+        quickfix.c
+        regexp.c
+        screen.c
+        search.c
+        spell.c
+        syntax.c
+        tag.c
+        term.c
+        ui.c
+        undo.c
+        window.c
+        $OS_EXTRA_SRC
+        $GUI_SRC
+        $HANGULIN_SRC
         $MZSCHEME_SRC
-	$PERL_SRC
-	$NETBEANS_SRC
-	$PYTHON_SRC
-	$TCL_SRC
-	$RUBY_SRC
-	$SNIFF_SRC
-	$WORKSHOP_SRC
+        $PERL_SRC
+        $NETBEANS_SRC
+        $PYTHON_SRC
+        $TCL_SRC
+        $RUBY_SRC
+        $SNIFF_SRC
+        $WORKSHOP_SRC
 
 Objects =
-	$GUI_OBJ
+        $GUI_OBJ
 
 # TODO: make is still used for subdirectories, need to write a recipe.
 MAKE ?= make
@@ -306,48 +306,48 @@
 :program $Target : $Source $Objects
 
 :action build my_prog object
-	version_obj = `src2obj("version.c")`
-	:do compile {target = $version_obj} version.c
-	#:do build {target = $target {filetype = program}} $source $version_obj
-	link_sed = $BDIR/link.sed
-	@if os.path.exists(link_sed):
-	    :move {force} $link_sed auto/link.sed
-	@else:
-	    :del {force} auto/link.sed
-	:update link2.sh
-	:sys LINK="$?(PURIFY) $?(SHRPENV) $CC $LDFLAGS \
-		-o $target $source $version_obj $LIBS" \
-		MAKE="aap" sh ./link2.sh
-	:copy {force} auto/link.sed $BDIR/link.sed
+        version_obj = `src2obj("version.c")`
+        :do compile {target = $version_obj} version.c
+        #:do build {target = $target {filetype = program}} $source $version_obj
+        link_sed = $BDIR/link.sed
+        @if os.path.exists(link_sed):
+            :move {force} $link_sed auto/link.sed
+        @else:
+            :del {force} auto/link.sed
+        :update link2.sh
+        :sys LINK="$?(PURIFY) $?(SHRPENV) $CC $LDFLAGS \
+                -o $target $source $version_obj $LIBS" \
+                MAKE="aap" sh ./link2.sh
+        :copy {force} auto/link.sed $BDIR/link.sed
 
 # "link.sh" must be modified for A-A-P
 link2.sh : link.sh
     :print Adjusting $-source for A-A-P.
     :cat $source | :eval re.sub("objects/pathdef.o", "pathdef", stdin)
-								      >! $target
+                                                                      >! $target
 
 xxd/xxd$EXESUF: xxd/xxd.c
     :sys cd xxd; CC="$CC" CFLAGS="$CPPFLAGS $CFLAGS" \
-	    $MAKE -f Makefile
+            $MAKE -f Makefile
 
 # Build the language specific files if they were unpacked.
 # Generate the converted .mo files separately, it's no problem if this fails.
 languages {virtual}:
-	@if _no.MAKEMO:
-	    :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix
-	    @try:
-		:sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix converted
-	    @except:
-		:print Generated converted language files failed, continuing
+        @if _no.MAKEMO:
+            :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix
+            @try:
+                :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix converted
+            @except:
+                :print Generated converted language files failed, continuing
 
 # Update the *.po files for changes in the sources.  Only run manually.
 update-po {virtual}:
-	cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix update-po
+        cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix update-po
 
 auto/if_perl.c: if_perl.xs
-	:sys $PERL -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $target
-	:sys $PERL $PERLLIB/ExtUtils/xsubpp -prototypes -typemap \
-	    $PERLLIB/ExtUtils/typemap if_perl.xs >> $target
+        :sys $PERL -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $target
+        :sys $PERL $PERLLIB/ExtUtils/xsubpp -prototypes -typemap \
+            $PERLLIB/ExtUtils/typemap if_perl.xs >> $target
 
 $BDIR/gui_kde_wid.o: gui_kde_wid.cc
         :sys $MOC -o gui_kde_wid_moc.cc gui_kde_wid.h
@@ -364,63 +364,63 @@
 
 
 auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
-	:sys CC="$CC $CFLAGS" srcdir=$srcdir sh $srcdir/osdef.sh
+        :sys CC="$CC $CFLAGS" srcdir=$srcdir sh $srcdir/osdef.sh
 
 pathdef {virtual} : $BDIR/auto/pathdef$OBJSUF
 
 auto/pathdef.c: auto/config.aap
-	:print Creating $target
-	:print >! $target /* pathdef.c */
-	:print >> $target /* This file is automatically created by main.aap */
-	:print >> $target /* DO NOT EDIT!  Change main.aap only. */
-	:print >> $target $#include "vim.h"
-	:print >> $target char_u *default_vim_dir = (char_u *)"$VIMRCLOC";
-	:print >> $target char_u *default_vimruntime_dir = (char_u *)"$?VIMRUNTIMEDIR";
-	v = $CC -c -I$srcdir $CFLAGS
+        :print Creating $target
+        :print >! $target /* pathdef.c */
+        :print >> $target /* This file is automatically created by main.aap */
+        :print >> $target /* DO NOT EDIT!  Change main.aap only. */
+        :print >> $target $#include "vim.h"
+        :print >> $target char_u *default_vim_dir = (char_u *)"$VIMRCLOC";
+        :print >> $target char_u *default_vimruntime_dir = (char_u *)"$?VIMRUNTIMEDIR";
+        v = $CC -c -I$srcdir $CFLAGS
         @v = string.replace(v, '"', '\\"')
-	:print >> $target char_u *all_cflags = (char_u *)"$v";
-	linkcmd = $CC $LDFLAGS -o $VIMTARGET $LIBS
-	link_sed = $BDIR/link.sed
-	@if os.path.exists(link_sed):
-	    # filter $linkcmd through $BDIR/link.sed
-	    :print $linkcmd | :syseval sed -f $link_sed | :eval re.sub("\n", "", stdin) | :assign linkcmd
+        :print >> $target char_u *all_cflags = (char_u *)"$v";
+        linkcmd = $CC $LDFLAGS -o $VIMTARGET $LIBS
+        link_sed = $BDIR/link.sed
+        @if os.path.exists(link_sed):
+            # filter $linkcmd through $BDIR/link.sed
+            :print $linkcmd | :syseval sed -f $link_sed | :eval re.sub("\n", "", stdin) | :assign linkcmd
         @linkcmd = string.replace(linkcmd, '"', '\\"')
-	:print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
-	@if _no.get("COMPILEDBY"):
-	    who = $COMPILEDBY
-	    where = ''
-	@else:
-	    :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who
+        :print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
+        @if _no.get("COMPILEDBY"):
+            who = $COMPILEDBY
+            where = ''
+        @else:
+            :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who
 
-	    :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
-	:print >> $target char_u *compiled_user = (char_u *)"$who";
-	:print >> $target char_u *compiled_sys = (char_u *)"$where";
+            :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
+        :print >> $target char_u *compiled_user = (char_u *)"$who";
+        :print >> $target char_u *compiled_sys = (char_u *)"$where";
 
 
 ### Names of the programs and targets
-VIMTARGET	= $VIMNAME$EXESUF
-EXTARGET	= $EXNAME$LNKSUF
-VIEWTARGET	= $VIEWNAME$LNKSUF
-GVIMNAME	= g$VIMNAME
-GVIMTARGET	= $GVIMNAME$LNKSUF
-GVIEWNAME	= g$VIEWNAME
-GVIEWTARGET	= $GVIEWNAME$LNKSUF
-RVIMNAME	= r$VIMNAME
-RVIMTARGET	= $RVIMNAME$LNKSUF
-RVIEWNAME	= r$VIEWNAME
-RVIEWTARGET	= $RVIEWNAME$LNKSUF
-RGVIMNAME	= r$GVIMNAME
-RGVIMTARGET	= $RGVIMNAME$LNKSUF
-RGVIEWNAME	= r$GVIEWNAME
-RGVIEWTARGET	= $RGVIEWNAME$LNKSUF
-VIMDIFFNAME	= $(VIMNAME)diff
-GVIMDIFFNAME	= g$VIMDIFFNAME
-VIMDIFFTARGET	= $VIMDIFFNAME$LNKSUF
-GVIMDIFFTARGET	= $GVIMDIFFNAME$LNKSUF
-EVIMNAME	= e$VIMNAME
-EVIMTARGET	= $EVIMNAME$LNKSUF
-EVIEWNAME	= e$VIEWNAME
-EVIEWTARGET	= $EVIEWNAME$LNKSUF
+VIMTARGET       = $VIMNAME$EXESUF
+EXTARGET        = $EXNAME$LNKSUF
+VIEWTARGET      = $VIEWNAME$LNKSUF
+GVIMNAME        = g$VIMNAME
+GVIMTARGET      = $GVIMNAME$LNKSUF
+GVIEWNAME       = g$VIEWNAME
+GVIEWTARGET     = $GVIEWNAME$LNKSUF
+RVIMNAME        = r$VIMNAME
+RVIMTARGET      = $RVIMNAME$LNKSUF
+RVIEWNAME       = r$VIEWNAME
+RVIEWTARGET     = $RVIEWNAME$LNKSUF
+RGVIMNAME       = r$GVIMNAME
+RGVIMTARGET     = $RGVIMNAME$LNKSUF
+RGVIEWNAME      = r$GVIEWNAME
+RGVIEWTARGET    = $RGVIEWNAME$LNKSUF
+VIMDIFFNAME     = $(VIMNAME)diff
+GVIMDIFFNAME    = g$VIMDIFFNAME
+VIMDIFFTARGET   = $VIMDIFFNAME$LNKSUF
+GVIMDIFFTARGET  = $GVIMDIFFNAME$LNKSUF
+EVIMNAME        = e$VIMNAME
+EVIMTARGET      = $EVIMNAME$LNKSUF
+EVIEWNAME       = e$VIEWNAME
+EVIEWTARGET     = $EVIEWNAME$LNKSUF
 
 ### Names of the tools that are also made
 TOOLS = xxd/xxd$EXESUF
@@ -453,67 +453,67 @@
 PRINTSUBDIR = /print
 PODIR = po
 
-### VIMLOC	common root of the Vim files (all versions)
-### VIMRTLOC	common root of the runtime Vim files (this version)
-### VIMRCLOC	compiled-in location for global [g]vimrc files (all versions)
+### VIMLOC      common root of the Vim files (all versions)
+### VIMRTLOC    common root of the runtime Vim files (this version)
+### VIMRCLOC    compiled-in location for global [g]vimrc files (all versions)
 ### VIMRUNTIMEDIR  compiled-in location for runtime files (optional)
-### HELPSUBLOC	location for help files
-### COLSUBLOC	location for colorscheme files
-### SYNSUBLOC	location for syntax files
-### INDSUBLOC	location for indent files
-### AUTOSUBLOC	location for standard autoload files
-### PLUGSUBLOC	location for standard plugin files
+### HELPSUBLOC  location for help files
+### COLSUBLOC   location for colorscheme files
+### SYNSUBLOC   location for syntax files
+### INDSUBLOC   location for indent files
+### AUTOSUBLOC  location for standard autoload files
+### PLUGSUBLOC  location for standard plugin files
 ### FTPLUGSUBLOC  location for ftplugin files
-### LANGSUBLOC	location for language files
-### COMPSUBLOC	location for compiler files
-### KMAPSUBLOC	location for keymap files
-### MACROSUBLOC	location for macro files
-### TOOLSSUBLOC	location for tools files
-### TUTORSUBLOC	location for tutor files
-### PRINTSUBLOC	location for print files
-### SCRIPTLOC	location for script files (menu.vim, bugreport.vim, ..)
+### LANGSUBLOC  location for language files
+### COMPSUBLOC  location for compiler files
+### KMAPSUBLOC  location for keymap files
+### MACROSUBLOC location for macro files
+### TOOLSSUBLOC location for tools files
+### TUTORSUBLOC location for tutor files
+### PRINTSUBLOC location for print files
+### SCRIPTLOC   location for script files (menu.vim, bugreport.vim, ..)
 ### You can override these if you want to install them somewhere else.
 ### Edit feature.h for compile-time settings.
-VIMLOC		= $DATADIR$VIMDIR
-VIMRTLOC	= $DATADIR$VIMDIR$VIMRTDIR
-VIMRCLOC	= $VIMLOC
-HELPSUBLOC	= $VIMRTLOC$HELPSUBDIR
-COLSUBLOC	= $VIMRTLOC$COLSUBDIR
-SYNSUBLOC	= $VIMRTLOC$SYNSUBDIR
-INDSUBLOC	= $VIMRTLOC$INDSUBDIR
-AUTOSUBLOC	= $VIMRTLOC$AUTOSUBDIR
-PLUGSUBLOC	= $VIMRTLOC$PLUGSUBDIR
-FTPLUGSUBLOC	= $VIMRTLOC$FTPLUGSUBDIR
-LANGSUBLOC	= $VIMRTLOC$LANGSUBDIR
-COMPSUBLOC	= $VIMRTLOC$COMPSUBDIR
-KMAPSUBLOC	= $VIMRTLOC$KMAPSUBDIR
-MACROSUBLOC	= $VIMRTLOC$MACROSUBDIR
-TOOLSSUBLOC	= $VIMRTLOC$TOOLSSUBDIR
-TUTORSUBLOC	= $VIMRTLOC$TUTORSUBDIR
-PRINTSUBLOC	= $VIMRTLOC$PRINTSUBDIR
-SCRIPTLOC	= $VIMRTLOC
+VIMLOC          = $DATADIR$VIMDIR
+VIMRTLOC        = $DATADIR$VIMDIR$VIMRTDIR
+VIMRCLOC        = $VIMLOC
+HELPSUBLOC      = $VIMRTLOC$HELPSUBDIR
+COLSUBLOC       = $VIMRTLOC$COLSUBDIR
+SYNSUBLOC       = $VIMRTLOC$SYNSUBDIR
+INDSUBLOC       = $VIMRTLOC$INDSUBDIR
+AUTOSUBLOC      = $VIMRTLOC$AUTOSUBDIR
+PLUGSUBLOC      = $VIMRTLOC$PLUGSUBDIR
+FTPLUGSUBLOC    = $VIMRTLOC$FTPLUGSUBDIR
+LANGSUBLOC      = $VIMRTLOC$LANGSUBDIR
+COMPSUBLOC      = $VIMRTLOC$COMPSUBDIR
+KMAPSUBLOC      = $VIMRTLOC$KMAPSUBDIR
+MACROSUBLOC     = $VIMRTLOC$MACROSUBDIR
+TOOLSSUBLOC     = $VIMRTLOC$TOOLSSUBDIR
+TUTORSUBLOC     = $VIMRTLOC$TUTORSUBDIR
+PRINTSUBLOC     = $VIMRTLOC$PRINTSUBDIR
+SCRIPTLOC       = $VIMRTLOC
 
 ### Only set VIMRUNTIMEDIR when VIMRTLOC is set to a different location and
 ### the runtime directory is not below it.
 #VIMRUNTIMEDIR = $VIMRTLOC
 
 ### Name of the evim file target.
-EVIM_FILE	= $DESTDIR$SCRIPTLOC/evim.vim
-MSWIN_FILE	= $DESTDIR$SCRIPTLOC/mswin.vim
+EVIM_FILE       = $DESTDIR$SCRIPTLOC/evim.vim
+MSWIN_FILE      = $DESTDIR$SCRIPTLOC/mswin.vim
 
 ### Name of the menu file target.
-SYS_MENU_FILE	= $DESTDIR$SCRIPTLOC/menu.vim
+SYS_MENU_FILE   = $DESTDIR$SCRIPTLOC/menu.vim
 SYS_SYNMENU_FILE = $DESTDIR$SCRIPTLOC/synmenu.vim
 SYS_DELMENU_FILE = $DESTDIR$SCRIPTLOC/delmenu.vim
 
 ### Name of the bugreport file target.
-SYS_BUGR_FILE	= $DESTDIR$SCRIPTLOC/bugreport.vim
+SYS_BUGR_FILE   = $DESTDIR$SCRIPTLOC/bugreport.vim
 
 ### Name of the file type detection file target.
 SYS_FILETYPE_FILE = $DESTDIR$SCRIPTLOC/filetype.vim
 
 ### Name of the file type detection file target.
-SYS_FTOFF_FILE	= $DESTDIR$SCRIPTLOC/ftoff.vim
+SYS_FTOFF_FILE  = $DESTDIR$SCRIPTLOC/ftoff.vim
 
 ### Name of the file type detection script file target.
 SYS_SCRIPTS_FILE = $DESTDIR$SCRIPTLOC/scripts.vim
@@ -622,9 +622,9 @@
 
 # These are directories, create them when needed.
 :attr {directory = $DIRMOD} $DEST_BIN $DEST_VIM $DEST_RT $DEST_HELP $DEST_COL
-		$DEST_SYN $DEST_IND $DEST_AUTO $DEST_PLUG $DEST_FTP $DEST_LANG
-		$DEST_COMP $DEST_KMAP $DEST_MACRO $DEST_TOOLS $DEST_TUTOR
-		$DEST_SCRIPT $DEST_PRINT $DEST_MAN
+                $DEST_SYN $DEST_IND $DEST_AUTO $DEST_PLUG $DEST_FTP $DEST_LANG
+                $DEST_COMP $DEST_KMAP $DEST_MACRO $DEST_TOOLS $DEST_TUTOR
+                $DEST_SCRIPT $DEST_PRINT $DEST_MAN
 
 #
 # I N S T A L L
@@ -640,235 +640,235 @@
         :update installvim installtools install-languages install-icons
     @else:
         # Bin directory is not writable, need to become root.
-	:print The destination directory "$DEST_BIN" is not writable.
-	:print If this is the wrong directory, use PREFIX to specify another one.
+        :print The destination directory "$DEST_BIN" is not writable.
+        :print If this is the wrong directory, use PREFIX to specify another one.
         :print Otherwise, type the root password to continue installing.
         :asroot $AAP install
 
 installvim {virtual}: installvimbin installruntime installlinks \
-			installhelplinks installmacros installtutor
+                        installhelplinks installmacros installtutor
 
 installvimbin {virtual}{force}: $Target $DEST_BIN
-	exe = $DEST_BIN/$VIMTARGET
-	@if os.path.exists(exe):
-	    # Move the old executable aside and delete it.  Any other method
-	    # may cause a crash if the executable is currently being used.
-	    :move {force} $exe $(exe).rm
-	    :del {force} $(exe).rm
-	:copy $VIMTARGET $DEST_BIN
-	:do strip $exe
-	:chmod $BINMOD $DEST_BIN/$VIMTARGET
+        exe = $DEST_BIN/$VIMTARGET
+        @if os.path.exists(exe):
+            # Move the old executable aside and delete it.  Any other method
+            # may cause a crash if the executable is currently being used.
+            :move {force} $exe $(exe).rm
+            :del {force} $(exe).rm
+        :copy $VIMTARGET $DEST_BIN
+        :do strip $exe
+        :chmod $BINMOD $DEST_BIN/$VIMTARGET
 # may create a link to the new executable from /usr/bin/vi
-	@if _no.get("LINKIT"):
-	    :sys $LINKIT
+        @if _no.get("LINKIT"):
+            :sys $LINKIT
 
 # install the help files; first adjust the contents for the location
 installruntime {virtual}{force}: $HELPSOURCE/vim.1 $DEST_MAN $DEST_VIM
-		$DEST_RT $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
-		$DEST_FTP $DEST_AUTO $DEST_PLUG $DEST_TUTOR $DEST_COMP
+                $DEST_RT $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
+                $DEST_FTP $DEST_AUTO $DEST_PLUG $DEST_TUTOR $DEST_COMP
                 $DEST_PRINT
-	:print generating $DEST_MAN/$(VIMNAME).1
-	:cat $HELPSOURCE/vim.1 |
-		:eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/doc", _no.HELPSUBLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/syntax", _no.SYNSUBLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/vimrc",
-					       _no.VIMRCLOC + "/vimrc", stdin) |
-		:eval re.sub(_no.VIMLOC + "/gvimrc",
-					      _no.VIMRCLOC + "/gvimrc", stdin) |
-		:eval re.sub(_no.VIMLOC + "/menu.vim",
-					   _no.SCRIPTLOC + "/menu.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/bugreport.vim",
-				      _no.SCRIPTLOC + "/bugreport.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/filetype.vim",
-				       _no.SCRIPTLOC + "/filetype.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/ftoff.vim",
-					  _no.SCRIPTLOC + "/ftoff.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/scripts.vim",
-					_no.SCRIPTLOC + "/scripts.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/optwin.vim",
-					 _no.SCRIPTLOC + "/optwin.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/\\*.ps",
-						 _no.SCRIPTLOC + "/*.ps", stdin)
-		>! $DEST_MAN/$(VIMNAME).1
-	:chmod $MANMOD $DEST_MAN/$(VIMNAME).1
+        :print generating $DEST_MAN/$(VIMNAME).1
+        :cat $HELPSOURCE/vim.1 |
+                :eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/doc", _no.HELPSUBLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/syntax", _no.SYNSUBLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/vimrc",
+                                               _no.VIMRCLOC + "/vimrc", stdin) |
+                :eval re.sub(_no.VIMLOC + "/gvimrc",
+                                              _no.VIMRCLOC + "/gvimrc", stdin) |
+                :eval re.sub(_no.VIMLOC + "/menu.vim",
+                                           _no.SCRIPTLOC + "/menu.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/bugreport.vim",
+                                      _no.SCRIPTLOC + "/bugreport.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/filetype.vim",
+                                       _no.SCRIPTLOC + "/filetype.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/ftoff.vim",
+                                          _no.SCRIPTLOC + "/ftoff.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/scripts.vim",
+                                        _no.SCRIPTLOC + "/scripts.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/optwin.vim",
+                                         _no.SCRIPTLOC + "/optwin.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/\\*.ps",
+                                                 _no.SCRIPTLOC + "/*.ps", stdin)
+                >! $DEST_MAN/$(VIMNAME).1
+        :chmod $MANMOD $DEST_MAN/$(VIMNAME).1
 
-	:print generating $DEST_MAN/$(VIMNAME)tutor.1
-	:cat $HELPSOURCE/vimtutor.1 |
-		:eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin)
-		>! $DEST_MAN/$(VIMNAME)tutor.1
-	:chmod $MANMOD $DEST_MAN/$(VIMNAME)tutor.1
+        :print generating $DEST_MAN/$(VIMNAME)tutor.1
+        :cat $HELPSOURCE/vimtutor.1 |
+                :eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin)
+                >! $DEST_MAN/$(VIMNAME)tutor.1
+        :chmod $MANMOD $DEST_MAN/$(VIMNAME)tutor.1
 
-	:copy $HELPSOURCE/vimdiff.1 $DEST_MAN/$(VIMDIFFNAME).1
-	:chmod $MANMOD $DEST_MAN/$(VIMDIFFNAME).1
+        :copy $HELPSOURCE/vimdiff.1 $DEST_MAN/$(VIMDIFFNAME).1
+        :chmod $MANMOD $DEST_MAN/$(VIMDIFFNAME).1
 
-	:print generating $DEST_MAN/$(EVIMNAME).1
-	:cat $HELPSOURCE/evim.1 |
-		:eval re.sub("/usr/local/lib/vim", _no.SCRIPTLOC, stdin)
-		>! $DEST_MAN/$(EVIMNAME).1
-	:chmod $MANMOD $DEST_MAN/$(EVIMNAME).1
+        :print generating $DEST_MAN/$(EVIMNAME).1
+        :cat $HELPSOURCE/evim.1 |
+                :eval re.sub("/usr/local/lib/vim", _no.SCRIPTLOC, stdin)
+                >! $DEST_MAN/$(EVIMNAME).1
+        :chmod $MANMOD $DEST_MAN/$(EVIMNAME).1
 
         :cd $HELPSOURCE
         @try:
             XTRA = `glob.glob("*.??x")` `glob.glob("tags-??")`
         @except:
             XTRA =       # It's OK if there are no matches.
-	:copy *.txt tags $XTRA $DEST_HELP
+        :copy *.txt tags $XTRA $DEST_HELP
         :cd -
         :cd $DEST_HELP
-	:chmod $HELPMOD *.txt tags $XTRA
+        :chmod $HELPMOD *.txt tags $XTRA
         :cd -
-	:copy  $HELPSOURCE/*.pl $DEST_HELP
-	:chmod $SCRIPTMOD $DEST_HELP/*.pl
+        :copy  $HELPSOURCE/*.pl $DEST_HELP
+        :chmod $SCRIPTMOD $DEST_HELP/*.pl
 # install the menu files
-	:copy $SCRIPTSOURCE/menu.vim $SYS_MENU_FILE
-	:chmod $VIMSCRIPTMOD $SYS_MENU_FILE
-	:copy $SCRIPTSOURCE/synmenu.vim $SYS_SYNMENU_FILE
-	:chmod $VIMSCRIPTMOD $SYS_SYNMENU_FILE
-	:copy $SCRIPTSOURCE/delmenu.vim $SYS_DELMENU_FILE
-	:chmod $VIMSCRIPTMOD $SYS_DELMENU_FILE
+        :copy $SCRIPTSOURCE/menu.vim $SYS_MENU_FILE
+        :chmod $VIMSCRIPTMOD $SYS_MENU_FILE
+        :copy $SCRIPTSOURCE/synmenu.vim $SYS_SYNMENU_FILE
+        :chmod $VIMSCRIPTMOD $SYS_SYNMENU_FILE
+        :copy $SCRIPTSOURCE/delmenu.vim $SYS_DELMENU_FILE
+        :chmod $VIMSCRIPTMOD $SYS_DELMENU_FILE
 # install the evim file
-	:copy $SCRIPTSOURCE/mswin.vim $MSWIN_FILE
-	:chmod $VIMSCRIPTMOD $MSWIN_FILE
-	:copy $SCRIPTSOURCE/evim.vim $EVIM_FILE
-	:chmod $VIMSCRIPTMOD $EVIM_FILE
+        :copy $SCRIPTSOURCE/mswin.vim $MSWIN_FILE
+        :chmod $VIMSCRIPTMOD $MSWIN_FILE
+        :copy $SCRIPTSOURCE/evim.vim $EVIM_FILE
+        :chmod $VIMSCRIPTMOD $EVIM_FILE
 # install the bugreport file
-	:copy $SCRIPTSOURCE/bugreport.vim $SYS_BUGR_FILE
-	:chmod $VIMSCRIPTMOD $SYS_BUGR_FILE
+        :copy $SCRIPTSOURCE/bugreport.vim $SYS_BUGR_FILE
+        :chmod $VIMSCRIPTMOD $SYS_BUGR_FILE
 # install the example vimrc files
-	:copy $SCRIPTSOURCE/vimrc_example.vim $DEST_SCRIPT
-	:chmod $VIMSCRIPTMOD $DEST_SCRIPT/vimrc_example.vim
-	:copy $SCRIPTSOURCE/gvimrc_example.vim $DEST_SCRIPT
-	:chmod $VIMSCRIPTMOD $DEST_SCRIPT/gvimrc_example.vim
+        :copy $SCRIPTSOURCE/vimrc_example.vim $DEST_SCRIPT
+        :chmod $VIMSCRIPTMOD $DEST_SCRIPT/vimrc_example.vim
+        :copy $SCRIPTSOURCE/gvimrc_example.vim $DEST_SCRIPT
+        :chmod $VIMSCRIPTMOD $DEST_SCRIPT/gvimrc_example.vim
 # install the file type detection files
-	:copy $SCRIPTSOURCE/filetype.vim $SYS_FILETYPE_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FILETYPE_FILE
-	:copy $SCRIPTSOURCE/ftoff.vim $SYS_FTOFF_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FTOFF_FILE
-	:copy $SCRIPTSOURCE/scripts.vim $SYS_SCRIPTS_FILE
-	:chmod $VIMSCRIPTMOD $SYS_SCRIPTS_FILE
-	:copy $SCRIPTSOURCE/ftplugin.vim $SYS_FTPLUGIN_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FTPLUGIN_FILE
-	:copy $SCRIPTSOURCE/ftplugof.vim $SYS_FTPLUGOF_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FTPLUGOF_FILE
-	:copy $SCRIPTSOURCE/indent.vim $SYS_INDENT_FILE
-	:chmod $VIMSCRIPTMOD $SYS_INDENT_FILE
-	:copy $SCRIPTSOURCE/indoff.vim $SYS_INDOFF_FILE
-	:chmod $VIMSCRIPTMOD $SYS_INDOFF_FILE
-	:copy $SCRIPTSOURCE/optwin.vim $SYS_OPTWIN_FILE
-	:chmod $VIMSCRIPTMOD $SYS_OPTWIN_FILE
+        :copy $SCRIPTSOURCE/filetype.vim $SYS_FILETYPE_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FILETYPE_FILE
+        :copy $SCRIPTSOURCE/ftoff.vim $SYS_FTOFF_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FTOFF_FILE
+        :copy $SCRIPTSOURCE/scripts.vim $SYS_SCRIPTS_FILE
+        :chmod $VIMSCRIPTMOD $SYS_SCRIPTS_FILE
+        :copy $SCRIPTSOURCE/ftplugin.vim $SYS_FTPLUGIN_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FTPLUGIN_FILE
+        :copy $SCRIPTSOURCE/ftplugof.vim $SYS_FTPLUGOF_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FTPLUGOF_FILE
+        :copy $SCRIPTSOURCE/indent.vim $SYS_INDENT_FILE
+        :chmod $VIMSCRIPTMOD $SYS_INDENT_FILE
+        :copy $SCRIPTSOURCE/indoff.vim $SYS_INDOFF_FILE
+        :chmod $VIMSCRIPTMOD $SYS_INDOFF_FILE
+        :copy $SCRIPTSOURCE/optwin.vim $SYS_OPTWIN_FILE
+        :chmod $VIMSCRIPTMOD $SYS_OPTWIN_FILE
 # install the print resource files
-	:copy $PRINTSOURCE/*.ps $DEST_PRINT
-	:chmod $FILEMOD $DEST_PRINT/*.ps
+        :copy $PRINTSOURCE/*.ps $DEST_PRINT
+        :chmod $FILEMOD $DEST_PRINT/*.ps
 # install the colorscheme files
-	:copy $COLSOURCE/*.vim $COLSOURCE/README.txt $DEST_COL
-	:chmod $HELPMOD $DEST_COL/*.vim $DEST_COL/README.txt
+        :copy $COLSOURCE/*.vim $COLSOURCE/README.txt $DEST_COL
+        :chmod $HELPMOD $DEST_COL/*.vim $DEST_COL/README.txt
 # install the syntax files
-	:copy $SYNSOURCE/*.vim $SYNSOURCE/README.txt $DEST_SYN
-	:chmod $HELPMOD $DEST_SYN/*.vim $DEST_SYN/README.txt
+        :copy $SYNSOURCE/*.vim $SYNSOURCE/README.txt $DEST_SYN
+        :chmod $HELPMOD $DEST_SYN/*.vim $DEST_SYN/README.txt
 # install the indent files
-	:copy $INDSOURCE/*.vim $INDSOURCE/README.txt $DEST_IND
-	:chmod $HELPMOD $DEST_IND/*.vim
+        :copy $INDSOURCE/*.vim $INDSOURCE/README.txt $DEST_IND
+        :chmod $HELPMOD $DEST_IND/*.vim
 # install the standard autoload files
-	:copy $AUTOSOURCE/*.vim $AUTOSOURCE/README.txt $DEST_AUTO
-	:chmod $HELPMOD $DEST_AUTO/*.vim $DEST_AUTO/README.txt
+        :copy $AUTOSOURCE/*.vim $AUTOSOURCE/README.txt $DEST_AUTO
+        :chmod $HELPMOD $DEST_AUTO/*.vim $DEST_AUTO/README.txt
 # install the standard plugin files
-	:copy $PLUGSOURCE/*.vim $PLUGSOURCE/README.txt $DEST_PLUG
-	:chmod $HELPMOD $DEST_PLUG/*.vim $DEST_PLUG/README.txt
+        :copy $PLUGSOURCE/*.vim $PLUGSOURCE/README.txt $DEST_PLUG
+        :chmod $HELPMOD $DEST_PLUG/*.vim $DEST_PLUG/README.txt
 # install the ftplugin files
-	:copy $FTPLUGSOURCE/*.vim $FTPLUGSOURCE/README.txt $DEST_FTP
-	:chmod $HELPMOD $DEST_FTP/*.vim $DEST_FTP/README.txt
+        :copy $FTPLUGSOURCE/*.vim $FTPLUGSOURCE/README.txt $DEST_FTP
+        :chmod $HELPMOD $DEST_FTP/*.vim $DEST_FTP/README.txt
 # install the compiler files
-	:copy $COMPSOURCE/*.vim $COMPSOURCE/README.txt $DEST_COMP
-	:chmod $HELPMOD $DEST_COMP/*.vim $DEST_COMP/README.txt
+        :copy $COMPSOURCE/*.vim $COMPSOURCE/README.txt $DEST_COMP
+        :chmod $HELPMOD $DEST_COMP/*.vim $DEST_COMP/README.txt
 
 installmacros {virtual}{force}: $MACROSOURCE $DEST_VIM $DEST_RT $DEST_MACRO
-	:copy {recursive}{force} $MACROSOURCE/* $DEST_MACRO
-	# Delete any CVS and AAPDIR directories.
-	# Use the ":tree" command if possible.  It was added later, fall back
-	# to using "find" when it doesn't work.
-	@try:
-	   :tree $DEST_MACRO {dirname = CVS}
-	      :del {recursive} $name
-	   :tree $DEST_MACRO {dirname = AAPDIR}
-	      :del {recursive} $name
-	   :tree $DEST_MACRO {dirname = .*}
-	      :chmod $DIRMOD $name
-	   :tree $DEST_MACRO {filename = .*}
-	      :chmod $FILEMOD $name
-	@except:
-	@  ok, cvsdirs = redir_system('find %s -name CVS -print' % _no.DEST_MACRO)
-	@  if ok and cvsdirs:
-	     :del {recursive} $cvsdirs
-	   :sys chmod $DIRMOD ``find $DEST_MACRO -type d -print``
-	   :sys chmod $FILEMOD ``find $DEST_MACRO -type f -print``
-	:chmod $SCRIPTMOD $DEST_MACRO/less.sh
+        :copy {recursive}{force} $MACROSOURCE/* $DEST_MACRO
+        # Delete any CVS and AAPDIR directories.
+        # Use the ":tree" command if possible.  It was added later, fall back
+        # to using "find" when it doesn't work.
+        @try:
+           :tree $DEST_MACRO {dirname = CVS}
+              :del {recursive} $name
+           :tree $DEST_MACRO {dirname = AAPDIR}
+              :del {recursive} $name
+           :tree $DEST_MACRO {dirname = .*}
+              :chmod $DIRMOD $name
+           :tree $DEST_MACRO {filename = .*}
+              :chmod $FILEMOD $name
+        @except:
+        @  ok, cvsdirs = redir_system('find %s -name CVS -print' % _no.DEST_MACRO)
+        @  if ok and cvsdirs:
+             :del {recursive} $cvsdirs
+           :sys chmod $DIRMOD ``find $DEST_MACRO -type d -print``
+           :sys chmod $FILEMOD ``find $DEST_MACRO -type f -print``
+        :chmod $SCRIPTMOD $DEST_MACRO/less.sh
 
 # install the tutor files
 installtutor {virtual}{force}: $TUTORSOURCE $DEST_VIM $DEST_RT $DEST_TUTOR
-	:copy vimtutor $DEST_BIN/$(VIMNAME)tutor
-	:chmod $SCRIPTMOD $DEST_BIN/$(VIMNAME)tutor
-	:copy $TUTORSOURCE/tutor* $TUTORSOURCE/README* $DEST_TUTOR
-	:chmod $HELPMOD $DEST_TUTOR/*
+        :copy vimtutor $DEST_BIN/$(VIMNAME)tutor
+        :chmod $SCRIPTMOD $DEST_BIN/$(VIMNAME)tutor
+        :copy $TUTORSOURCE/tutor* $TUTORSOURCE/README* $DEST_TUTOR
+        :chmod $HELPMOD $DEST_TUTOR/*
 
 # install helper program xxd
 installtools {virtual}{force}: $TOOLS $DEST_BIN $DEST_MAN \
-		$TOOLSSOURCE $DEST_VIM $DEST_RT $DEST_TOOLS
-	xxd = $DEST_BIN/xxd$EXESUF
-	@if os.path.exists(xxd):
-	  :move {force} $xxd $(xxd).rm
-	  :del $(xxd).rm
-	:copy xxd/xxd$EXESUF $DEST_BIN
-	:do strip $DEST_BIN/xxd$EXESUF
-	:chmod $BINMOD $DEST_BIN/xxd$EXESUF
-	:copy $HELPSOURCE/xxd.1 $DEST_MAN
-	:chmod $MANMOD $DEST_MAN/xxd.1
+                $TOOLSSOURCE $DEST_VIM $DEST_RT $DEST_TOOLS
+        xxd = $DEST_BIN/xxd$EXESUF
+        @if os.path.exists(xxd):
+          :move {force} $xxd $(xxd).rm
+          :del $(xxd).rm
+        :copy xxd/xxd$EXESUF $DEST_BIN
+        :do strip $DEST_BIN/xxd$EXESUF
+        :chmod $BINMOD $DEST_BIN/xxd$EXESUF
+        :copy $HELPSOURCE/xxd.1 $DEST_MAN
+        :chmod $MANMOD $DEST_MAN/xxd.1
 # install the runtime tools
-	@try:
-	@  if aap_has(":tree"):
-	      # New method: copy everything and delete CVS and AAPDIR dirs
-	      :copy {recursive} $TOOLSSOURCE/* $DEST_TOOLS
-	      :tree $DEST_TOOLS {dirname = CVS}
-		 :delete {recursive} $name
-	      :tree $DEST_TOOLS {dirname = AAPDIR}
-		 :delete {recursive} $name
-	@except:
-	    # Old method: copy only specific files and directories.
-	    :copy {recursive} $TOOLSSOURCE/README.txt $TOOLSSOURCE/[a-z]* $DEST_TOOLS
-	:chmod $FILEMOD $DEST_TOOLS/*
+        @try:
+        @  if aap_has(":tree"):
+              # New method: copy everything and delete CVS and AAPDIR dirs
+              :copy {recursive} $TOOLSSOURCE/* $DEST_TOOLS
+              :tree $DEST_TOOLS {dirname = CVS}
+                 :delete {recursive} $name
+              :tree $DEST_TOOLS {dirname = AAPDIR}
+                 :delete {recursive} $name
+        @except:
+            # Old method: copy only specific files and directories.
+            :copy {recursive} $TOOLSSOURCE/README.txt $TOOLSSOURCE/[a-z]* $DEST_TOOLS
+        :chmod $FILEMOD $DEST_TOOLS/*
 # replace the path in some tools
-	:progsearch perlpath perl
-	@if perlpath:
-	    :cat $TOOLSSOURCE/efm_perl.pl |
-		    :eval re.sub("/usr/bin/perl", perlpath, stdin)
-		    >! $DEST_TOOLS/efm_perl.pl
-	@else:
-	    :copy $TOOLSSOURCE/efm_perl.pl $DEST_TOOLS
+        :progsearch perlpath perl
+        @if perlpath:
+            :cat $TOOLSSOURCE/efm_perl.pl |
+                    :eval re.sub("/usr/bin/perl", perlpath, stdin)
+                    >! $DEST_TOOLS/efm_perl.pl
+        @else:
+            :copy $TOOLSSOURCE/efm_perl.pl $DEST_TOOLS
 
-	:progsearch awkpath nawk gawk awk
-	@if awkpath:
-	    :cat $TOOLSSOURCE/mve.awk |
-		    :eval re.sub("/usr/bin/nawk", awkpath, stdin)
-		    >! $DEST_TOOLS/mve.awk
-	@else:
-	    :copy $TOOLSSOURCE/mve.awk $DEST_TOOLS
+        :progsearch awkpath nawk gawk awk
+        @if awkpath:
+            :cat $TOOLSSOURCE/mve.awk |
+                    :eval re.sub("/usr/bin/nawk", awkpath, stdin)
+                    >! $DEST_TOOLS/mve.awk
+        @else:
+            :copy $TOOLSSOURCE/mve.awk $DEST_TOOLS
 
-	:sys chmod $SCRIPTMOD ``grep -l "^#!" $DEST_TOOLS/*``
+        :sys chmod $SCRIPTMOD ``grep -l "^#!" $DEST_TOOLS/*``
 
 # install the language specific files, if they were unpacked
 install-languages {virtual}{force}: languages $DEST_LANG $DEST_KMAP
-	@if _no.MAKEMO:
-	   :sys cd $PODIR; $MAKE prefix=$DESTDIR$prefix \
-		    LOCALEDIR=$DEST_LANG INSTALL_DATA=cp FILEMOD=$FILEMOD install
-	@if os.path.exists(_no.LANGSOURCE):
-	   :print installing language files
-	   :copy $LANGSOURCE/README.txt $LANGSOURCE/*.vim $DEST_LANG
-	   :chmod $FILEMOD $DEST_LANG/*.vim
-	@if os.path.exists(_no.KMAPSOURCE):
-	   :copy $KMAPSOURCE/README.txt $KMAPSOURCE/*.vim $DEST_KMAP
-	   :chmod $FILEMOD $DEST_KMAP/*.vim
+        @if _no.MAKEMO:
+           :sys cd $PODIR; $MAKE prefix=$DESTDIR$prefix \
+                    LOCALEDIR=$DEST_LANG INSTALL_DATA=cp FILEMOD=$FILEMOD install
+        @if os.path.exists(_no.LANGSOURCE):
+           :print installing language files
+           :copy $LANGSOURCE/README.txt $LANGSOURCE/*.vim $DEST_LANG
+           :chmod $FILEMOD $DEST_LANG/*.vim
+        @if os.path.exists(_no.KMAPSOURCE):
+           :copy $KMAPSOURCE/README.txt $KMAPSOURCE/*.vim $DEST_KMAP
+           :chmod $FILEMOD $DEST_KMAP/*.vim
 
 # Install the icons for the KDE GUI.  This differs from the KDE icons for
 # other GUIs.
@@ -890,38 +890,38 @@
 ICON16PATH = $DESTDIR$DATADIR/icons/locolor/16x16/apps
 KDEPATH = $HOME/.kde/share/icons
 install-icons {virtual}:
-	gp = $ICON48PATH/gvim.png
-	@if os.path.isdir(_no.ICON48PATH) and not os.path.exists(gp):
-	   :copy $SCRIPTSOURCE/vim48x48.png $gp
-	gp = $ICON32PATH/gvim.png
-	@if os.path.isdir(_no.ICON32PATH) and not os.path.exists(gp):
-	   :copy $SCRIPTSOURCE/vim32x32.png $gp
-	gp = $ICON16PATH/gvim.png
-	@if os.path.isdir(_no.ICON16PATH) and not os.path.exists(gp):
-	   :copy $SCRIPTSOURCE/vim16x16.png $gp
+        gp = $ICON48PATH/gvim.png
+        @if os.path.isdir(_no.ICON48PATH) and not os.path.exists(gp):
+           :copy $SCRIPTSOURCE/vim48x48.png $gp
+        gp = $ICON32PATH/gvim.png
+        @if os.path.isdir(_no.ICON32PATH) and not os.path.exists(gp):
+           :copy $SCRIPTSOURCE/vim32x32.png $gp
+        gp = $ICON16PATH/gvim.png
+        @if os.path.isdir(_no.ICON16PATH) and not os.path.exists(gp):
+           :copy $SCRIPTSOURCE/vim16x16.png $gp
 
 
 $HELPSOURCE/vim.1 $MACROSOURCE $TOOLSSOURCE:
-	@if not os.path.exists(_no.TOOLSSOURCE):
-	    :print Runtime files not found.
-	    :error You need to unpack the runtime archive before running "make install".
+        @if not os.path.exists(_no.TOOLSSOURCE):
+            :print Runtime files not found.
+            :error You need to unpack the runtime archive before running "make install".
 
 # create links from various names to vim.  This is only done when the links
 # (or executables with the same name) don't exist yet.
 installlinks {virtual}: $GUI_TARGETS \
-			$DEST_BIN/$EXTARGET \
-			$DEST_BIN/$VIEWTARGET \
-			$DEST_BIN/$RVIMTARGET \
-			$DEST_BIN/$RVIEWTARGET \
-			$INSTALLVIMDIFF
+                        $DEST_BIN/$EXTARGET \
+                        $DEST_BIN/$VIEWTARGET \
+                        $DEST_BIN/$RVIMTARGET \
+                        $DEST_BIN/$RVIEWTARGET \
+                        $INSTALLVIMDIFF
 
 installglinks {virtual}: $DEST_BIN/$GVIMTARGET \
-			$DEST_BIN/$GVIEWTARGET \
-			$DEST_BIN/$RGVIMTARGET \
-			$DEST_BIN/$RGVIEWTARGET \
-			$DEST_BIN/$EVIMTARGET \
-			$DEST_BIN/$EVIEWTARGET \
-			$INSTALLGVIMDIFF
+                        $DEST_BIN/$GVIEWTARGET \
+                        $DEST_BIN/$RGVIMTARGET \
+                        $DEST_BIN/$RGVIEWTARGET \
+                        $DEST_BIN/$EVIMTARGET \
+                        $DEST_BIN/$EVIEWTARGET \
+                        $INSTALLGVIMDIFF
 
 installvimdiff {virtual}: $DEST_BIN/$VIMDIFFTARGET
 installgvimdiff {virtual}: $DEST_BIN/$GVIMDIFFTARGET
@@ -964,20 +964,20 @@
 $DEST_BIN/$EVIEWTARGET: {buildcheck = }
     :sys cd $DEST_BIN; ln -s $VIMTARGET $EVIEWTARGET
 
-# create links for the manual pages with various names to vim.	This is only
+# create links for the manual pages with various names to vim.  This is only
 # done when the links (or manpages with the same name) don't exist yet.
 installhelplinks {virtual}: $GUI_MAN_TARGETS \
-			$DEST_MAN/$(EXNAME).1 \
-			$DEST_MAN/$(VIEWNAME).1 \
-			$DEST_MAN/$(RVIMNAME).1 \
-			$DEST_MAN/$(RVIEWNAME).1
+                        $DEST_MAN/$(EXNAME).1 \
+                        $DEST_MAN/$(VIEWNAME).1 \
+                        $DEST_MAN/$(RVIMNAME).1 \
+                        $DEST_MAN/$(RVIEWNAME).1
 
 installghelplinks {virtual}: $DEST_MAN/$(GVIMNAME).1 \
-			$DEST_MAN/$(GVIEWNAME).1 \
-			$DEST_MAN/$(RGVIMNAME).1 \
-			$DEST_MAN/$(RGVIEWNAME).1 \
-			$DEST_MAN/$(GVIMDIFFNAME).1 \
-			$DEST_MAN/$(EVIEWNAME).1
+                        $DEST_MAN/$(GVIEWNAME).1 \
+                        $DEST_MAN/$(RGVIMNAME).1 \
+                        $DEST_MAN/$(RGVIEWNAME).1 \
+                        $DEST_MAN/$(GVIMDIFFNAME).1 \
+                        $DEST_MAN/$(EVIEWNAME).1
 
 $DEST_MAN/$(EXNAME).1: {buildcheck = }
     :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(EXNAME).1
@@ -1056,11 +1056,11 @@
     :del {force} $DEST_AUTO/*.vim $DEST_AUTO/README.txt
     :del {force} $DEST_PLUG/*.vim $DEST_PLUG/README.txt
     :deldir {force} $DEST_FTP $DEST_AUTO $DEST_PLUG $DEST_PRINT $DEST_RT
-#	This will fail when other Vim versions are installed, no worries.
+#       This will fail when other Vim versions are installed, no worries.
     @try:
-	:deldir $DEST_VIM
+        :deldir $DEST_VIM
     @except:
-	:print Cannot delete $DEST_VIM
+        :print Cannot delete $DEST_VIM
 
 
 # vim: sts=4 sw=4 :
diff --git a/src/message.c b/src/message.c
index 6daa365..0a2fe99 100644
--- a/src/message.c
+++ b/src/message.c
@@ -3749,6 +3749,7 @@
 
 /*
  * Get string argument from "idxp" entry in "tvs".  First entry is 1.
+ * Returns NULL for an error.
  */
     static char *
 tv_str(tvs, idxp)
diff --git a/src/move.c b/src/move.c
index ac59320..c8a5a23 100644
--- a/src/move.c
+++ b/src/move.c
@@ -20,6 +20,7 @@
 #include "vim.h"
 
 static void comp_botline __ARGS((win_T *wp));
+static int scrolljump_value __ARGS((void));
 static int check_top_offset __ARGS((void));
 static void curs_rows __ARGS((win_T *wp, int do_botline));
 static void validate_botline_win __ARGS((win_T *wp));
@@ -249,7 +250,7 @@
 		scroll_cursor_halfway(FALSE);
 	    else
 	    {
-		scroll_cursor_top((int)p_sj, FALSE);
+		scroll_cursor_top(scrolljump_value(), FALSE);
 		check_botline = TRUE;
 	    }
 	}
@@ -341,7 +342,7 @@
 		    line_count = curwin->w_cursor.lnum - curwin->w_botline
 								   + 1 + p_so;
 		if (line_count <= curwin->w_height + 1)
-		    scroll_cursor_bot((int)p_sj, FALSE);
+		    scroll_cursor_bot(scrolljump_value(), FALSE);
 		else
 		    scroll_cursor_halfway(FALSE);
 	    }
@@ -377,6 +378,19 @@
 }
 
 /*
+ * Return the scrolljump value to use for the current window.
+ * When 'scrolljump' is positive use it as-is.
+ * When 'scrolljump' is negative use it as a percentage of the window height.
+ */
+    static int
+scrolljump_value()
+{
+    if (p_sj >= 0)
+	return (int)p_sj;
+    return (curwin->w_height * -p_sj) / 100;
+}
+
+/*
  * Return TRUE when there are not 'scrolloff' lines above the cursor for the
  * current window.
  */
diff --git a/src/option.c b/src/option.c
index 96d9df2..d547edc 100644
--- a/src/option.c
+++ b/src/option.c
@@ -7420,7 +7420,7 @@
 	errmsg = e_positive;
 	p_report = 1;
     }
-    if ((p_sj < 0 || p_sj >= Rows) && full_screen)
+    if ((p_sj < -100 || p_sj >= Rows) && full_screen)
     {
 	if (Rows != old_Rows)	/* Rows changed, just adjust p_sj */
 	    p_sj = Rows / 2;
diff --git a/src/quickfix.c b/src/quickfix.c
index 1133187..e1e0d16 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2215,8 +2215,10 @@
     {
 	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
 					       curbuf->b_fname, TRUE, curbuf);
+# ifdef FEAT_EVAL
 	if (did_throw || force_abort)
 	    return;
+# endif
     }
 #endif
 
@@ -2974,6 +2976,7 @@
     }
 }
 
+#if defined(FEAT_EVAL) || defined(PROTO)
 /*
  * ":cexpr {expr}" command.
  */
@@ -2994,6 +2997,7 @@
 
     clear_tv(tv);
 }
+#endif
 
 /*
  * ":helpgrep {pattern}"
diff --git a/src/spell.c b/src/spell.c
index 2562e4b..53447af 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -511,15 +511,15 @@
 #define SCORE_RARE	180	/* rare word */
 #define SCORE_SWAP	90	/* swap two characters */
 #define SCORE_SWAP3	110	/* swap two characters in three */
-#define SCORE_REP	87	/* REP replacement */
+#define SCORE_REP	65	/* REP replacement */
 #define SCORE_SUBST	93	/* substitute a character */
 #define SCORE_SIMILAR	33	/* substitute a similar character */
 #define SCORE_SUBCOMP	33	/* substitute a composing character */
 #define SCORE_DEL	94	/* delete a character */
-#define SCORE_DELDUP	64	/* delete a duplicated character */
+#define SCORE_DELDUP	66	/* delete a duplicated character */
 #define SCORE_DELCOMP	28	/* delete a composing character */
 #define SCORE_INS	96	/* insert a character */
-#define SCORE_INSDUP	66	/* insert a duplicate character */
+#define SCORE_INSDUP	67	/* insert a duplicate character */
 #define SCORE_INSCOMP	30	/* insert a composing character */
 #define SCORE_NONWORD	103	/* change non-word to word char */
 
@@ -5049,7 +5049,17 @@
 		if (itemcnt > 3 && items[3][0] != '#')
 		    smsg((char_u *)_(e_afftrailing), fname, lnum, items[3]);
 		if (do_rep)
+		{
+		    /* Replace underscore with space (can't include a space
+		     * directly). */
+		    for (p = items[1]; *p != NUL; mb_ptr_adv(p))
+			if (*p == '_')
+			    *p = ' ';
+		    for (p = items[2]; *p != NUL; mb_ptr_adv(p))
+			if (*p == '_')
+			    *p = ' ';
 		    add_fromto(spin, &spin->si_rep, items[1], items[2]);
+		}
 	    }
 	    else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
 	    {
@@ -11081,13 +11091,21 @@
     int		had_bonus;	/* value for st_had_bonus */
     slang_T	*slang;		/* language for sound folding */
 {
+    int		goodlen = STRLEN(goodword);
     suggest_T   *stp;
     int		i;
     char_u	*p = NULL;
     int		c = 0;
+    int		attr = 0;
+    char_u	longword[MAXWLEN + 1];
 
-    /* Check that the word wasn't banned. */
-    if (was_banned(su, goodword))
+    /* Check that the word really is valid.  Esp. for banned words and for
+     * split words, such as "the the".  Need to append what follows to check
+     * for that. */
+    STRCPY(longword, goodword);
+    vim_strncpy(longword + goodlen, su->su_badptr + badlen, MAXWLEN - goodlen);
+    (void)spell_check(curwin, longword, &attr, NULL);
+    if (attr != 0)
 	return;
 
     /* If past "su_badlen" and the rest is identical stop at "su_badlen".
@@ -11097,7 +11115,7 @@
     {
 	/* This assumes there was no case folding or it didn't change the
 	 * length... */
-	p = goodword + STRLEN(goodword) - i;
+	p = goodword + goodlen - i;
 	if (p > goodword && STRNICMP(su->su_badptr + su->su_badlen, p, i) == 0)
 	{
 	    badlen = su->su_badlen;
@@ -11112,7 +11130,7 @@
 	/* When replacing part of the word check that we actually change
 	 * something.  For "the the" a suggestion can be replacing the first
 	 * "the" with itself, since "the" wasn't banned. */
-	if (badlen == (int)STRLEN(goodword)
+	if (badlen == (int)goodlen
 			    && STRNCMP(su->su_badword, goodword, badlen) == 0)
 	    return;
     }
diff --git a/src/testdir/test59.in b/src/testdir/test59.in
index a2dcc89..e3de1d6 100644
--- a/src/testdir/test59.in
+++ b/src/testdir/test59.in
@@ -33,7 +33,7 @@
   normal 0f:]s
   let prevbad = ''
   while 1
-    let bad = spellbadword()
+    let [bad, a] = spellbadword()
     if bad == '' || bad == prevbad || bad == 'badend'
       break
     endif
@@ -64,31 +64,31 @@
 :mkspell! Xtest.utf-8.add.spl Xtest.utf-8.add
 :set spellfile=Xtest.utf-8.add
 /^test2:
-]s:let str = spellbadword()
+]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_us.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_gb.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_nz.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_ca.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :"
 :" Postponed prefixes
diff --git a/src/version.h b/src/version.h
index 0cb24ad..cf19c79 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 25)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 25, compiled "