changeset 2152:b9e314fe473f

Updated runtime files.
author Bram Moolenaar <bram@zimbu.org>
date Fri, 14 May 2010 23:24:24 +0200
parents ae22c450546c
children 8a9d956f149d 7c8c7c95a865
files runtime/autoload/ccomplete.vim runtime/autoload/netrw.vim runtime/autoload/sqlcomplete.vim runtime/autoload/vimball.vim runtime/autoload/zip.vim runtime/doc/autocmd.txt runtime/doc/change.txt runtime/doc/cmdline.txt runtime/doc/digraph.txt runtime/doc/eval.txt runtime/doc/fold.txt runtime/doc/gui.txt runtime/doc/indent.txt runtime/doc/motion.txt runtime/doc/options.txt runtime/doc/pi_netrw.txt runtime/doc/pi_vimball.txt runtime/doc/pi_zip.txt runtime/doc/sign.txt runtime/doc/spell.txt runtime/doc/syntax.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/usr_27.txt runtime/doc/various.txt runtime/doc/version7.txt runtime/doc/windows.txt runtime/filetype.vim runtime/ftplugin/debchangelog.vim runtime/ftplugin/debcontrol.vim runtime/indent/chaiscript.vim runtime/indent/perl6.vim runtime/keymap/bulgarian-bds.vim runtime/keymap/bulgarian-phonetic.vim runtime/lang/menu_sr.utf-8.vim runtime/lang/menu_sr_rs.ascii.vim runtime/lang/menu_sr_rs.iso_8859-2.vim runtime/lang/menu_sr_rs.iso_8859-5.vim runtime/lang/menu_sr_rs.utf-8.vim runtime/lang/menu_sr_yu.ascii.vim runtime/lang/menu_sr_yu.iso_8859-2.vim runtime/lang/menu_sr_yu.iso_8859-5.vim runtime/lang/menu_sr_yu.utf-8.vim runtime/plugin/netrwPlugin.vim runtime/plugin/vimballPlugin.vim runtime/plugin/zipPlugin.vim runtime/spell/bg/main.aap runtime/spell/br/br_FR.diff runtime/spell/br/main.aap runtime/spell/ca/main.aap runtime/spell/cy/main.aap runtime/spell/de/main.aap runtime/spell/eo/main.aap runtime/spell/es/main.aap runtime/spell/ku/main.aap runtime/spell/lv/main.aap runtime/spell/main.aap runtime/spell/ms/main.aap runtime/spell/pt/main.aap runtime/syntax/asm.vim runtime/syntax/cabal.vim runtime/syntax/chaiscript.vim runtime/syntax/debchangelog.vim runtime/syntax/debcontrol.vim runtime/syntax/debsources.vim runtime/syntax/java.vim runtime/syntax/javascript.vim runtime/syntax/lhaskell.vim runtime/syntax/maple.vim runtime/syntax/mib.vim runtime/syntax/mysql.vim runtime/syntax/obj.vim runtime/syntax/perl.vim runtime/syntax/perl6.vim runtime/syntax/rhelp.vim runtime/syntax/sh.vim runtime/syntax/sisu.vim runtime/syntax/svg.vim runtime/syntax/tex.vim runtime/syntax/xs.vim
diffstat 80 files changed, 5678 insertions(+), 2284 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/ccomplete.vim
+++ b/runtime/autoload/ccomplete.vim
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2007 Aug 30
+" Last Change:	2010 Mar 23
 
 
 " This function is used for the 'omnifunc' option.
@@ -161,7 +161,7 @@ function! ccomplete#Complete(findstart, 
       let res = [{'match': match, 'tagline' : '', 'kind' : kind, 'info' : line}]
     else
       " Completing "var.", "var.something", etc.
-      let res = s:Nextitem(strpart(line, 0, col), items[-1], 0, 1)
+      let res = s:Nextitem(strpart(line, 0, col), items[1:], 0, 1)
     endif
   endif
 
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across
 "            AUTOLOAD SECTION
-" Date:		Dec 28, 2009
-" Version:	136
+" Date:		May 14, 2010
+" Version:	138
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2009 Charles E. Campbell, Jr. {{{1
@@ -22,7 +22,7 @@
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v136"
+let g:loaded_netrw = "v138"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of netrw needs vim 7.2"
@@ -266,7 +266,7 @@ call s:NetrwInit("g:netrw_rmf_cmd"      
 " Default values - s ---------- {{{3
 " g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename
 call s:NetrwInit("g:netrw_sepchr"        , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>")
-call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "silent " : "")
+call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "silent keepj " : "keepj ")
 call s:NetrwInit("g:netrw_sort_by"       , "name") " alternatives: date                                      , size
 call s:NetrwInit("g:netrw_sort_options"  , "")
 call s:NetrwInit("g:netrw_sort_direction", "normal") " alternative: reverse  (z y x ...)
@@ -286,11 +286,16 @@ call s:NetrwInit("g:netrw_xstrlen",0)
 call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
 call s:NetrwInit("g:netrw_use_errorwindow",1)
 call s:NetrwInit("g:netrw_win95ftp",1)
-call s:NetrwInit("g:netrw_winsize","")
+call s:NetrwInit("g:netrw_winsize",25)
 " ---------------------------------------------------------------------
 " Default values for netrw's script variables: {{{2
 call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
-call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$')
+if has("win32") || has("win95") || has("win64") || has("win16")
+ call s:NetrwInit("g:netrw_glob_escape",'[]*?`{$')
+else
+ call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$\')
+endif
+call s:NetrwInit("g:netrw_menu_escape",'./&? \')
 call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
 call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
 
@@ -329,6 +334,7 @@ fun! s:NetrwOptionSave(vt)
   endif
   let {a:vt}netrw_aikeep    = &l:ai
   let {a:vt}netrw_awkeep    = &l:aw
+  let {a:vt}netrw_bombkeep  = &l:bomb
   let {a:vt}netrw_cikeep    = &l:ci
   let {a:vt}netrw_cinkeep   = &l:cin
   let {a:vt}netrw_cinokeep  = &l:cino
@@ -340,6 +346,7 @@ fun! s:NetrwOptionSave(vt)
   let {a:vt}netrw_fokeep    = &l:fo           " formatoptions
   let {a:vt}netrw_gdkeep    = &l:gd           " gdefault
   let {a:vt}netrw_hidkeep   = &l:hidden
+  let {a:vt}netrw_imkeep    = &l:im
   let {a:vt}netrw_magickeep = &l:magic
   let {a:vt}netrw_repkeep   = &l:report
   let {a:vt}netrw_spellkeep = &l:spell
@@ -375,7 +382,7 @@ fun! s:NetrwOptionRestore(vt)
 "     call Decho("exe keepjumps lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
      try
       if !exists("&l:acd") && !&l:acd
-       exe 'keepjumps lcd '.fnameescape(curdir)
+       exe 'keepj lcd '.fnameescape(curdir)
       endif
      catch /^Vim\%((\a\+)\)\=:E472/
       call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".curdir."> (permissions?)",61)
@@ -385,6 +392,7 @@ fun! s:NetrwOptionRestore(vt)
   endif
   if exists("{a:vt}netrw_aikeep")   |let &l:ai     = {a:vt}netrw_aikeep      |unlet {a:vt}netrw_aikeep   |endif
   if exists("{a:vt}netrw_awkeep")   |let &l:aw     = {a:vt}netrw_awkeep      |unlet {a:vt}netrw_awkeep   |endif
+  if exists("{a:vt}netrw_bombkeep") |let &l:bomb   = {a:vt}netrw_bombkeep    |unlet {a:vt}netrw_bombkeep |endif
   if exists("{a:vt}netrw_cikeep")   |let &l:ci     = {a:vt}netrw_cikeep      |unlet {a:vt}netrw_cikeep   |endif
   if exists("{a:vt}netrw_cinkeep")  |let &l:cin    = {a:vt}netrw_cinkeep     |unlet {a:vt}netrw_cinkeep  |endif
   if exists("{a:vt}netrw_cinokeep") |let &l:cino   = {a:vt}netrw_cinokeep    |unlet {a:vt}netrw_cinokeep |endif
@@ -397,6 +405,7 @@ fun! s:NetrwOptionRestore(vt)
   if exists("{a:vt}netrw_fokeep")   |let &l:fo     = {a:vt}netrw_fokeep      |unlet {a:vt}netrw_fokeep   |endif
   if exists("{a:vt}netrw_gdkeep")   |let &l:gd     = {a:vt}netrw_gdkeep      |unlet {a:vt}netrw_gdkeep   |endif
   if exists("{a:vt}netrw_hidkeep")  |let &l:hidden = {a:vt}netrw_hidkeep     |unlet {a:vt}netrw_hidkeep  |endif
+  if exists("{a:vt}netrw_imkeep")   |let &l:im     = {a:vt}netrw_imkeep      |unlet {a:vt}netrw_imkeep   |endif
   if exists("{a:vt}netrw_magic")    |let &l:magic  = {a:vt}netrw_magic       |unlet {a:vt}netrw_magic    |endif
   if exists("{a:vt}netrw_repkeep")  |let &l:report = {a:vt}netrw_repkeep     |unlet {a:vt}netrw_repkeep  |endif
   if exists("{a:vt}netrw_spellkeep")|let &l:spell  = {a:vt}netrw_spellkeep   |unlet {a:vt}netrw_spellkeep|endif
@@ -436,7 +445,7 @@ fun! s:NetrwSafeOptions()
   setlocal com=
   setlocal cpo-=aA
   if exists("&acd") | setlocal noacd | endif
-  setlocal nocin noai noci magic nospell nohid wig= noaw
+  setlocal nocin noai nobomb noci magic nospell nohid wig= noaw noim
   setlocal fo=nroql2
   setlocal tw=0
   setlocal report=10000
@@ -444,9 +453,11 @@ fun! s:NetrwSafeOptions()
   if g:netrw_use_noswf && has("win32") && !has("win95")
    setlocal noswf
   endif
+  call s:NetrwCursorline()
 
   " allow the user to override safe options
   if &ft == "netrw"
+"   call Decho("do any netrw FileType autocmds")
    silent keepalt keepjumps doau FileType netrw
   endif
 
@@ -526,6 +537,7 @@ fun! netrw#NetRead(mode,...)
   " NetRead: save options {{{3
   call s:NetrwOptionSave("w:")
   call s:NetrwSafeOptions()
+  call s:RestoreCursorline()
 
   " NetRead: interpret mode into a readcmd {{{3
   if     a:mode == 0 " read remote file before current line
@@ -622,7 +634,7 @@ fun! netrw#NetRead(mode,...)
 "   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
    if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
 "    call Decho("yes, choice matches '^.*[\/]$'")
-    keepjumps call s:NetrwBrowse(0,choice)
+    keepj call s:NetrwBrowse(0,choice)
 "    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
     return
    endif
@@ -669,10 +681,10 @@ fun! netrw#NetRead(mode,...)
      call s:SaveBufVars()|new|call s:RestoreBufVars()
      let filtbuf= bufnr("%")
      setlocal ff=unix
-     put =g:netrw_ftpmode
+     keepj put =g:netrw_ftpmode
 "     call Decho("filter input: ".getline(line("$")))
      if exists("g:netrw_ftpextracmd")
-      put =g:netrw_ftpextracmd
+      keepj put =g:netrw_ftpextracmd
 "      call Decho("filter input: ".getline(line("$")))
      endif
      call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
@@ -711,32 +723,32 @@ fun! netrw#NetRead(mode,...)
     let filtbuf= bufnr("%")
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
 "     call Decho("filter input: ".getline('.'))
     else
-     put ='open '.g:netrw_machine
+     keepj put ='open '.g:netrw_machine
 "     call Decho("filter input: ".getline('.'))
     endif
 
     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
+     keepj put =g:netrw_uid
 "     call Decho("filter input: ".getline('.'))
-     put ='\"'.s:netrw_passwd.'\"'
+     keepj put ='\"'.s:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline('.'))
     else
-     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline('.'))
     endif
 
     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     put =g:netrw_ftpmode
+     keepj put =g:netrw_ftpmode
 "     call Decho("filter input: ".getline('.'))
     endif
     if exists("g:netrw_ftpextracmd")
      put =g:netrw_ftpextracmd
 "     call Decho("filter input: ".getline('.'))
     endif
-    put ='get \"'.netrw_fname.'\" '.tmpfile
+    keepj put ='get \"'.netrw_fname.'\" '.tmpfile
 "    call Decho("filter input: ".getline('.'))
 
     " perform ftp:
@@ -830,16 +842,16 @@ fun! netrw#NetRead(mode,...)
      new
      setlocal ff=unix
      if exists("g:netrw_port") && g:netrw_port != ""
-      put ='open '.g:netrw_machine.' '.g:netrw_port
+      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
      else
-      put ='open '.g:netrw_machine
+      keepj put ='open '.g:netrw_machine
      endif
-     put ='user '.g:netrw_uid.' '.s:netrw_passwd
-     put ='get '.netrw_fname.' '.tmpfile
-     put ='quit'
+     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+     keepj put ='get '.netrw_fname.' '.tmpfile
+     keepj put ='quit'
 
      " perform cadaver operation:
-     norm! 1Gdd
+     keepj norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_dav_cmd)
      exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
      bd!
@@ -947,16 +959,16 @@ fun! netrw#NetWrite(...) range
    " (line numbers don't really make sense for that).
    " Also supports the writing of tar and zip files.
 "   call Decho("(write entire file) silent exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
-   silent exe "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+   exe "silent keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
   elseif g:netrw_cygwin
    " write (selected portion of) file to temporary
    let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
 "   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
-   silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
+   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
   else
    " write (selected portion of) file to temporary
 "   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
-   silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
   endif
 
   if curbufname == ""
@@ -1072,10 +1084,10 @@ fun! netrw#NetWrite(...) range
 
 "    call Decho("filter input window#".winnr())
     setlocal ff=unix
-    put =g:netrw_ftpmode
+    keepj put =g:netrw_ftpmode
 "    call Decho("filter input: ".getline('$'))
     if exists("g:netrw_ftpextracmd")
-     put =g:netrw_ftpextracmd
+     keepj put =g:netrw_ftpextracmd
 "     call Decho("filter input: ".getline("$"))
     endif
     call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
@@ -1119,28 +1131,28 @@ fun! netrw#NetWrite(...) range
     setlocal ff=unix
 
     if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
 "     call Decho("filter input: ".getline('.'))
     else
-     put ='open '.g:netrw_machine
+     keepj put ='open '.g:netrw_machine
 "     call Decho("filter input: ".getline('.'))
     endif
     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
+     keepj put =g:netrw_uid
 "     call Decho("filter input: ".getline('.'))
-     put ='\"'.s:netrw_passwd.'\"'
+     keepj put ='\"'.s:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline('.'))
     else
-     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline('.'))
     endif
-    put =g:netrw_ftpmode
+    keepj put =g:netrw_ftpmode
 "    call Decho("filter input: ".getline('$'))
     if exists("g:netrw_ftpextracmd")
-     put =g:netrw_ftpextracmd
+     keepj put =g:netrw_ftpextracmd
 "     call Decho("filter input: ".getline("$"))
     endif
-    put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
+    keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
 "    call Decho("filter input: ".getline('.'))
     " save choice/id/password for future use
     let b:netrw_lastfile = choice
@@ -1149,7 +1161,7 @@ fun! netrw#NetWrite(...) range
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
     " -n  win32: quit being obnoxious about password
-    norm! 1Gdd
+    keepj norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
@@ -1203,17 +1215,17 @@ fun! netrw#NetWrite(...) range
 
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
     else
-     put ='open '.g:netrw_machine
+     keepj put ='open '.g:netrw_machine
     endif
     if exists("g:netrw_uid") && exists("s:netrw_passwd")
-     put ='user '.g:netrw_uid.' '.s:netrw_passwd
-    endif
-    put ='put '.tmpfile.' '.netrw_fname
+     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+    endif
+    keepj put ='put '.tmpfile.' '.netrw_fname
 
     " perform cadaver operation:
-    norm! 1Gdd
+    keepj norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_dav_cmd)
     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
 
@@ -1382,7 +1394,7 @@ fun! s:NetrwGetFile(readcmd, tfile, meth
 
    " rename buffer back to remote filename
 "   call Decho("exe silent! keepalt file ".fnameescape(rfile))
-   exe "silent! keepalt file ".fnameescape(rfile)
+   exe "sil! keepalt file ".fnameescape(rfile)
    filetype detect
 "   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
    let line1 = 1
@@ -1669,7 +1681,7 @@ if has("win95") && exists("g:netrw_win95
    if method == 3   " ftp (no <.netrc>)
     let fourblanklines= line2 - 3
     if fourblanklines >= line1
-     exe "silent ".fourblanklines.",".line2."g/^\s*$/d"
+     exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d"
      call histdel("/",-1)
     endif
    endif
@@ -1693,7 +1705,7 @@ fun! NetUserPass(...)
    let g:netrw_uid= input('Enter username: ')
   endif
  else	" from command line
-"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
+"  call Dfunc("NetUserPass(a:1<".a:1.">)")
   let g:netrw_uid= a:1
  endif
 
@@ -1763,19 +1775,67 @@ fun! s:BrowserMaps(islocal)
    nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
    nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
    nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
+   inoremap <buffer> <silent> <cr>	<c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(1)<cr>
+   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(1)<cr>
+   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> c		<c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
+   inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("")<cr>
+   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(1)<cr>
+   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(3)<cr>
+   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(1)<cr>
+   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(1)<cr>
+   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(1)<cr>
+   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(4)<cr>
+   inoremap <buffer> <silent> T		<c-o>:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
+   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
+   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(5)<cr>
+   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(1)<cr>
    if !hasmapto('<Plug>NetrwHideEdit')
     nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
+    imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
    endif
    nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(1)<cr>
    if !hasmapto('<Plug>NetrwRefresh')
     nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+    imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
    endif
    nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
    if s:didstarstar || !mapcheck("<s-down>","n")
     nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+    inoremap <buffer> <silent> <s-down>	:Nexplore<cr>
    endif
    if s:didstarstar || !mapcheck("<s-up>","n")
     nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+    inoremap <buffer> <silent> <s-up>	:Pexplore<cr>
    endif
    let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
    if g:netrw_mousemaps == 1
@@ -1784,14 +1844,22 @@ fun! s:BrowserMaps(islocal)
     nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
     exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
     exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr>
+    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+    exe 'inoremap <buffer> <silent> <rightmouse>  <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
    endif
    exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
    exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
    exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
    exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
+   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> <Leader>m	<c-o>:call <SID>NetrwMakeDir("")<cr>'
    nnoremap <buffer> <F1>		:he netrw-quickhelp<cr>
 
   else " remote
@@ -1840,12 +1908,57 @@ fun! s:BrowserMaps(islocal)
    nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
    nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
    nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(0)<cr>
+   inoremap <buffer> <silent> <cr>	<c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+   inoremap <buffer> <silent> <c-l>	<c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(0)<cr>
+   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
+   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
+   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
+   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(0)<cr>
+   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(0)<cr>
+   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(0)<cr>
+   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(0)<cr>
+   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(0)<cr>
+   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(1)<cr>
+   inoremap <buffer> <silent> T		<c-o>:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
+   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(2)<cr>
+   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(0)<cr>
    if !hasmapto('<Plug>NetrwHideEdit')
     nmap <buffer> <c-h> <Plug>NetrwHideEdit
+    imap <buffer> <c-h> <Plug>NetrwHideEdit
    endif
    nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(0)<cr>
    if !hasmapto('<Plug>NetrwRefresh')
     nmap <buffer> <c-l> <Plug>NetrwRefresh
+    imap <buffer> <c-l> <Plug>NetrwRefresh
    endif
 
    let mapsafepath     = escape(s:path, s:netrw_map_escape)
@@ -1858,15 +1971,24 @@ fun! s:BrowserMaps(islocal)
     nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
     exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
     exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr>
+    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+    exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
    endif
    exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
    exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'nnoremap <buffer> <silent> d	:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> D	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R	:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> R	:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
    nnoremap <buffer> <F1>			:he netrw-quickhelp<cr>
+   inoremap <buffer> <F1>			<c-o>:he netrw-quickhelp<cr>
   endif
   call s:SetRexDir(a:islocal,b:netrw_curdir)
 "  call Dret("s:BrowserMaps")
@@ -1895,7 +2017,7 @@ endfun
 "    5: (user: <U>)    go down (next)     bookmark
 "    6: (user: <mB>)   delete bookmark
 fun! s:NetrwBookHistHandler(chg,curdir)
-"  call Dfunc("NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
+"  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
 
   if a:chg == 0
    " bookmark the current directory
@@ -1978,12 +2100,12 @@ fun! s:NetrwBookHistHandler(chg,curdir)
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
      setlocal ma noro
 "     call Decho("setlocal ma noro")
-     %d
+     keepj %d
      setlocal nomod
 "     call Decho("setlocal nomod")
     endif
 "    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
-    exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
+    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
    else
     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
     echo "Sorry, no predecessor directory exists yet"
@@ -1998,13 +2120,13 @@ fun! s:NetrwBookHistHandler(chg,curdir)
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
      setlocal ma noro
 "     call Decho("setlocal ma noro")
-     %d
+     keepj %d
 "     call Decho("removed all lines from buffer (%d)")
      setlocal nomod
 "     call Decho("setlocal nomod")
     endif
 "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
-    exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
+    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
    else
     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
     if g:netrw_dirhist_cnt < 0
@@ -2024,7 +2146,7 @@ fun! s:NetrwBookHistHandler(chg,curdir)
    call remove(g:netrw_bookmarklist,v:count-1)
   endif
   call s:NetrwBookmarkMenu()
-"  call Dret("NetrwBookHistHandler")
+"  call Dret("s:NetrwBookHistHandler")
 endfun
 
 " ---------------------------------------------------------------------
@@ -2077,28 +2199,28 @@ fun! s:NetrwBookHistSave()
    call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
    let cnt= cnt + 1
   endwhile
-  exe "silent! w! ".savefile
-
-  silent %d
+  exe "sil! w! ".savefile
+
+  sil keepj %d
   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
    " merge and write .netrwbook
    let savefile= s:NetrwHome()."/.netrwbook"
 
    if filereadable(savefile)
     let booklist= deepcopy(g:netrw_bookmarklist)
-    exe "silent so ".savefile
+    exe "sil keepj so ".savefile
     for bdm in booklist
      if index(g:netrw_bookmarklist,bdm) == -1
       call add(g:netrw_bookmarklist,bdm)
      endif
     endfor
     call sort(g:netrw_bookmarklist)
-    exe "silent! w! ".savefile
+    exe "sil! w! ".savefile
    endif
 
    " construct and save .netrwbook
    call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
-   exe "silent! w! ".savefile
+   exe "sil! w! ".savefile
   endif
   let bgone= bufnr("%")
   q!
@@ -2114,13 +2236,14 @@ endfun
 "  with the requested remote hostname first.
 fun! s:NetrwBrowse(islocal,dirname)
   if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
-"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%").">")
+"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
 "  call Decho("tab#".tabpagenr()." win#".winnr())
 "  call Dredir("ls!")
   if !exists("s:netrw_initbookhist")
    call s:NetrwBookHistRead()
   endif
 "  call FOTEST(7)
+"call Decho("COMBAK#01 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " simplify the dirname (especially for ".."s in dirnames)
   if a:dirname !~ '^\a\+://'
@@ -2129,6 +2252,7 @@ fun! s:NetrwBrowse(islocal,dirname)
    let dirname= a:dirname
   endif
 "  call FOTEST(8)
+"call Decho("COMBAK#02 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   if exists("s:netrw_skipbrowse")
    unlet s:netrw_skipbrowse
@@ -2149,6 +2273,7 @@ fun! s:NetrwBrowse(islocal,dirname)
 
   call s:NetrwOptionSave("w:")
 "  call FOTEST(9)
+"call Decho("COMBAK#03 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " re-instate any marked files
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
@@ -2156,11 +2281,12 @@ fun! s:NetrwBrowse(islocal,dirname)
    exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
   endif
 "  call FOTEST(10)
+"call Decho("COMBAK#04 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
 "   call Decho("handle w:netrw_acdkeep:")
 "   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
-   exe 'keepjumps lcd '.fnameescape(dirname)
+   exe 'keepj lcd '.fnameescape(dirname)
    call s:NetrwSafeOptions()
 "   call Decho("getcwd<".getcwd().">")
 
@@ -2176,19 +2302,19 @@ fun! s:NetrwBrowse(islocal,dirname)
    call s:RemotePathAnalysis(dirname)
 
    " remote-read the requested file into current buffer {{{3
-   mark '
+   keepj mark '
    call s:NetrwEnew(dirname)
    call s:NetrwSafeOptions()
    setlocal ma noro
 "   call Decho("setlocal ma noro")
    let b:netrw_curdir= dirname
 "   call Decho("exe silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
-   exe "silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
-   exe "silent keepalt doau BufReadPre ".fnameescape(s:fname)
+   exe "sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
+   exe "sil keepalt doau BufReadPre ".fnameescape(s:fname)
    silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
    if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz'
     " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
-    exe "silent keepalt doau BufReadPost ".fnameescape(s:fname)
+    exe "sil keepalt doau BufReadPost ".fnameescape(s:fname)
    endif
 
    " save certain window-oriented variables into buffer-oriented variables {{{3
@@ -2201,6 +2327,7 @@ fun! s:NetrwBrowse(islocal,dirname)
    return
   endif
 "  call FOTEST(11)
+"call Decho("COMBAK#05 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
   call s:UseBufWinVars()
@@ -2213,6 +2340,7 @@ fun! s:NetrwBrowse(islocal,dirname)
   " set up menu {{{3
   call s:NetrwMenu(1)
 "  call FOTEST(12)
+"call Decho("COMBAK#06 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " set up buffer {{{3
   let reusing= s:NetrwGetBuffer(a:islocal,dirname)
@@ -2233,9 +2361,10 @@ fun! s:NetrwBrowse(islocal,dirname)
    return
   endif
 ""  call FOTEST(13) " PROBLEM WITH LISTING
+"call Decho("COMBAK#07 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " set b:netrw_curdir to the new directory name {{{3
-"  call Decho("set b:netrw_curdir to the new directory name:")
+"  call Decho("set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
    let b:netrw_curdir= dirname
   if b:netrw_curdir =~ '[/\\]$'
    let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
@@ -2255,6 +2384,7 @@ fun! s:NetrwBrowse(islocal,dirname)
   endif
 "  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
 ""  call FOTEST(14) " PROBLEM WITH LISTING
+"call Decho("COMBAK#08 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " ------------
   " (local only) {{{3
@@ -2272,7 +2402,7 @@ fun! s:NetrwBrowse(islocal,dirname)
     if !exists("&l:acd") || !&l:acd
 "     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
      try
-      exe 'keepjumps lcd '.fnameescape(b:netrw_curdir)
+      exe 'keepj lcd '.fnameescape(b:netrw_curdir)
      catch /^Vim\%((\a\+)\)\=:E472/
       call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
       if exists("w:netrw_prvdir")
@@ -2327,6 +2457,7 @@ fun! s:NetrwBrowse(islocal,dirname)
 "   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
   endif  " (additional remote handling)
 ""  call FOTEST(15) " PROBLEM WITH LISTING
+"call Decho("COMBAK#09 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " -----------------------
   " Directory Listing: {{{3
@@ -2335,6 +2466,7 @@ fun! s:NetrwBrowse(islocal,dirname)
 ""  call FOTEST(16) " PROBLEM WITH LISTING
   call s:PerformListing(a:islocal)
 "  call FOTEST(17)
+"call Decho("COMBAK#10 buf(%)#".bufnr("%")."<".bufname("%")."> win#".winnr()." bufnr(win#1)=".winbufnr(1)."<".bufname(winbufnr(1))." bufnr(win#2)=".winbufnr(2)."<".bufname(winbufnr(2)).">")
 
   " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
   " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
@@ -2445,21 +2577,29 @@ fun! s:NetrwGetBuffer(islocal,dirname)
 "    call Decho("  handling approx match: bufnum#".bufnum."<".bufname(bufnum)."> approx-dirname<".dirname.">")
     let ibuf    = 1
     let buflast = bufnr("$")
-"    call Decho("  findbuf2: buflast=".buflast)
+"    call Decho("  findbuf2: buflast=bufnr($)=".buflast)
     while ibuf <= buflast
      let bname= substitute(bufname(ibuf),'\\','/','g')
      let bname= substitute(bname,'.\zs/$','','')
-"     call Decho("  findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bufname(".ibuf.")<".bname.">")
-     if bname   != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
-"      call Decho("  findbuf3: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
+"     call Decho("  findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">")
+     if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
+      " bname is not empty
+      " dirname ends with bname,
+      " dirname doesn't start with /, so its not a absolute path
+"      call Decho("  findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
       break
      endif
-     if bname   =~ '^'.dirname.'/\=$'
-"      call Decho('  findbuf3: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
+     if bname =~ '^'.dirname.'/\=$'
+      " bname begins with dirname
+"      call Decho('  findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
       break
      endif
      if dirname =~ '^'.bname.'/$'
-"      call Decho('  findbuf3: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
+"      call Decho('  findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
+      break
+     endif
+     if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1
+"      call Decho('  findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$')
       break
      endif
      let ibuf= ibuf + 1
@@ -2474,9 +2614,9 @@ fun! s:NetrwGetBuffer(islocal,dirname)
   endif
 
   " get enew buffer and name it -or- re-use buffer {{{3
-"  call Decho("--get enew buffer and name it OR re-use buffer-- (bufnum=".bufnum.")")
-  mark '
+  keepj mark '
   if bufnum < 0 || !bufexists(bufnum)
+"   call Decho("--get enew buffer and name it (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
    call s:NetrwEnew(dirname)
 "   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
    " name the buffer
@@ -2490,7 +2630,8 @@ fun! s:NetrwGetBuffer(islocal,dirname)
     endif
     let w:netrw_treebufnr= bufnr("%")
 "    call Decho("  exe silent! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
-    exe 'silent! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
+    exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
+    set bt=nofile noswf
     nnoremap <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
     nnoremap <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
     nnoremap <silent> <buffer> [[       :silent call <SID>TreeListMove('[')<cr>
@@ -2499,15 +2640,16 @@ fun! s:NetrwGetBuffer(islocal,dirname)
    else
 "    let v:errmsg= "" " Decho
     let escdirname= fnameescape(dirname)
-"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+"    call Decho("  errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
 "    call Decho('  exe silent! keepalt file '.escdirname)
-    exe 'silent! keepalt file '.escdirname
+"    let v:errmsg= "" " Decho
+    exe 'sil! keepalt file '.escdirname
 "    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
    endif
 "   call Decho("  named enew buffer#".bufnr("%")."<".bufname("%").">")
 
   else " Re-use the buffer
-"   call Decho("--re-use buffer#".bufnum.": --")
+"   call Decho("--re-use buffer#".bufnum." (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
    let eikeep= &ei
    set ei=all
    if getline(2) =~ '^" Netrw Directory Listing'
@@ -2519,7 +2661,7 @@ fun! s:NetrwGetBuffer(islocal,dirname)
    endif
    if bufname("%") == '.'
 "    call Decho("exe silent! keepalt file ".fnameescape(getcwd()))
-    exe "silent! keepalt file ".fnameescape(getcwd())
+    exe "sil! keepalt file ".fnameescape(getcwd())
    endif
    let &ei= eikeep
    if line("$") <= 1
@@ -2529,7 +2671,7 @@ fun! s:NetrwGetBuffer(islocal,dirname)
    elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
 "    call Decho("--re-use tree listing--")
 "    call Decho("  clear buffer<".expand("%")."> with :%d")
-    silent %d
+    sil keepj %d
     call s:NetrwListSettings(a:islocal)
 "    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
     return 0
@@ -2544,7 +2686,7 @@ fun! s:NetrwGetBuffer(islocal,dirname)
   "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
   "  med    1         D      H
   "  fast   2         H      H
-"  call Decho("--do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc--")
+"  call Decho("--do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
   let fname= expand("%")
   call s:NetrwListSettings(a:islocal)
 "  call Decho("exe keepalt file ".fnameescape(fname))
@@ -2553,7 +2695,7 @@ fun! s:NetrwGetBuffer(islocal,dirname)
   " delete all lines from buffer {{{3
 "  call Decho("--delete all lines from buffer--")
 "  call Decho("  clear buffer<".expand("%")."> with :%d")
-  keepalt silent! %d
+  sil! keepalt keepj %d
 
 "  call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%"))
   return 0
@@ -2595,12 +2737,12 @@ fun! s:NetrwGetWord()
   if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
    " Active Banner support
 "   call Decho("active banner handling")
-   norm! 0
+   keepj norm! 0
    let dirname= "./"
    let curline= getline('.')
 
    if curline =~ '"\s*Sorted by\s'
-    norm s
+    keepj norm s
     let s:netrw_skipbrowse= 1
     echo 'Pressing "s" also works'
 
@@ -2609,27 +2751,27 @@ fun! s:NetrwGetWord()
     echo 'Press "S" to edit sorting sequence'
 
    elseif curline =~ '"\s*Quick Help:'
-    norm ?
+    keepj norm ?
     let s:netrw_skipbrowse= 1
     echo 'Pressing "?" also works'
 
    elseif curline =~ '"\s*\%(Hiding\|Showing\):'
-    norm a
+    keepj norm a
     let s:netrw_skipbrowse= 1
     echo 'Pressing "a" also works'
 
    elseif line("$") > w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt
+    exe 'sil keepj '.w:netrw_bannercnt
    endif
 
   elseif w:netrw_liststyle == s:THINLIST
 "   call Decho("thin column handling")
-   norm! 0
+   keepj norm! 0
    let dirname= getline('.')
 
   elseif w:netrw_liststyle == s:LONGLIST
 "   call Decho("long column handling")
-   norm! 0
+   keepj norm! 0
    let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
 
   elseif w:netrw_liststyle == s:TREELIST
@@ -2652,18 +2794,18 @@ fun! s:NetrwGetWord()
 "   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
 "   call Decho("1: dirname<".dirname.">")
    if filestart == 0
-    norm! 0ma
+    keepj norm! 0ma
    else
     call cursor(line("."),filestart+1)
-    norm! ma
+    keepj norm! ma
    endif
    let rega= @a
    let eofname= filestart + b:netrw_cpf + 1
    if eofname <= col("$")
     call cursor(line("."),filestart+b:netrw_cpf+1)
-    norm! "ay`a
+    keepj norm! "ay`a
    else
-    norm! "ay$
+    keepj norm! "ay$
    endif
    let dirname = @a
    let @a      = rega
@@ -2683,7 +2825,7 @@ fun! s:NetrwGetWord()
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwListSettings: {{{2
+" s:NetrwListSettings: make standard settings for a netrw listing {{{2
 fun! s:NetrwListSettings(islocal)
 "  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
   let fname= bufname("%")
@@ -2749,35 +2891,23 @@ fun! s:NetrwListStyle(islocal)
 
   " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
 "  call Decho("clear buffer<".expand("%")."> with :%d")
-  %d
+  keepj %d
+  " following prevents tree listing buffer from being marked "modified"
+  setlocal nomod
 
   " refresh the listing
+"  call Decho("refresh the listing")
   let svpos= netrw#NetrwSavePosn()
   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   call netrw#NetrwRestorePosn(svpos)
-  if w:netrw_liststyle != s:WIDELIST
-   if g:netrw_cursorline == 2
-    setlocal cursorline
-    let &cursorcolumn= s:netrw_usercuc
-   elseif g:netrw_cursorline
-    setlocal cursorline
-"    call Decho("setlocal cursorline")
-   endif
-  else
-   if g:netrw_cursorline == 2
-    setlocal cursorline cursorcolumn
-"    call Decho("setlocal cursorline cursorcolumn")
-   elseif g:netrw_cursorline
-    let &cursorline= s:netrw_usercul
-   endif
-  endif
+  call s:NetrwCursorline()
 
   " keep cursor on the filename
-  silent keepjumps $
+  sil keepj $
   let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
 "  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
   if result <= 0 && exists("w:netrw_bannercnt")
-   exe "keepjumps ".w:netrw_bannercnt
+   exe "keepj ".w:netrw_bannercnt
   endif
 
 "  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
@@ -2797,11 +2927,11 @@ fun! s:NetrwBannerCtrl(islocal)
 
   " keep cursor on the filename
   let fname= s:NetrwGetWord()
-  silent keepjumps $
+  sil keepj $
   let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
 "  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
   if result <= 0 && exists("w:netrw_bannercnt")
-   exe "keepjumps ".w:netrw_bannercnt
+   exe "keepj ".w:netrw_bannercnt
   endif
 "  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
 endfun
@@ -2821,8 +2951,8 @@ fun! s:NetrwBookmarkMenu()
   if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
    if exists("g:NetrwTopLvlMenu")
 "    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
-    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
-    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
    endif
    if !exists("s:netrw_initbookhist")
     call s:NetrwBookHistRead()
@@ -2833,13 +2963,13 @@ fun! s:NetrwBookmarkMenu()
     let cnt= 1
     for bmd in g:netrw_bookmarklist
 "     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.'	:e '.bmd)
-     let bmd= escape(bmd,'. ')
+     let bmd= escape(bmd,g:netrw_menu_escape)
 
      " show bookmarks for goto menu
-     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.'	:e '.bmd."\<cr>"
+     exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.'	:e '.bmd."\<cr>"
 
      " show bookmarks for deletion menu
-     exe 'silent! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.'	'.cnt."mB"
+     exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.'	'.cnt."mB"
      let cnt= cnt + 1
     endfor
 
@@ -2853,9 +2983,9 @@ fun! s:NetrwBookmarkMenu()
     let histcnt  = histcnt + 1
     let priority = g:netrw_dirhist_cnt + histcnt
     if exists("g:netrw_dirhist_{cnt}")
-     let histdir= escape(g:netrw_dirhist_{cnt},'./&? ')
+     let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape)
 "     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir)
-     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir."\<cr>"
+     exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir."\<cr>"
     endif
     let first = 0
     let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
@@ -2886,26 +3016,17 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    return
   endif
 
-  " check if the status bar was clicked on instead of a file/directory name
-  call feedkeys("\<LeftMouse>")
-  let c= getchar()
-  let mouse_lnum = v:mouse_lnum
-  let wlastline  = line('w$')
-  let lastline   = line('$')
-"  call Decho("v:mouse_lnum=".mouse_lnum." line(w$)=".wlastline." line($)=".lastline)
-  if mouse_lnum == wlastline + 1 || v:mouse_win != winnr()
-"   call Decho("appears to be a status bar leftmouse click")
-   " appears to be a status bar leftmouse click
-   return
-  endif
-
   call s:NetrwOptionSave("s:")
   call s:NetrwSafeOptions()
   let nbcd_curpos                = netrw#NetrwSavePosn()
   let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
-  let dirname                    = substitute(b:netrw_curdir,'\\','/','ge')
-  let newdir                     = a:newdir
-  let dolockout                  = 0
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+   let dirname                   = substitute(b:netrw_curdir,'\\','/','ge')
+  else
+   let dirname= b:netrw_curdir
+  endif
+  let newdir    = a:newdir
+  let dolockout = 0
 
   " set up o/s-dependent directory recognition pattern
   if has("amiga")
@@ -3028,7 +3149,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
 "    call Decho("clear buffer<".expand("%")."> with :%d")
     setlocal noro ma
 "    call Decho("setlocal noro ma")
-    keepjumps %d
+    keepj %d
    endif
 
    if has("amiga")
@@ -3064,7 +3185,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
 "   call Decho("setlocal noro ma")
    if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
 "    call Decho("clear buffer<".expand("%")."> with :%d")
-    keepjumps %d
+    keepj %d
    endif
    let treedir      = s:NetrwTreeDir()
    let s:treecurpos = nbcd_curpos
@@ -3107,7 +3228,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
     call remove(w:netrw_treedict,treedir)
 "    call Decho("removed     entry<".treedir."> from treedict")
 "    call Decho("yielding treedict<".string(w:netrw_treedict).">")
-    let dirname           = w:netrw_treetop
+    let dirname= w:netrw_treetop
    else
     " go down one directory
     let dirname= substitute(treedir,'/*$','/','')
@@ -3204,6 +3325,11 @@ fun! netrw#NetrwBrowseX(fname,remote)
    endif
   else
    let fname= a:fname
+   " special ~ handler for local
+   if fname =~ '^\~' && expand("$HOME") != ""
+"    call Decho('invoking special ~ handler')
+    let fname= substitute(fname,'^\~',expand("$HOME"),'')
+   endif
   endif
 "  call Decho("fname<".fname.">")
 "  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
@@ -3270,17 +3396,17 @@ fun! netrw#NetrwBrowseX(fname,remote)
 
   elseif has("unix") && executable("gnome-open") && !s:haskdeinit
 "   call Decho("exe silent !gnome-open ".shellescape(fname,1)." ".redir)
-   exe "silent !gnome-open ".shellescape(fname,1).redir
+   exe "sil !gnome-open ".shellescape(fname,1).redir
    let ret= v:shell_error
 
   elseif has("unix") && executable("kfmclient") && s:haskdeinit
 "   call Decho("exe silent !kfmclient exec ".shellescape(fname,1)." ".redir)
-   exe "silent !kfmclient exec ".shellescape(fname,1)." ".redir
+   exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
    let ret= v:shell_error
 
   elseif has("macunix") && executable("open")
 "   call Decho("exe silent !open ".shellescape(fname,1)." ".redir)
-   exe "silent !open ".shellescape(fname,1)." ".redir
+   exe "sil !open ".shellescape(fname,1)." ".redir
    let ret= v:shell_error
 
   else
@@ -3311,7 +3437,7 @@ fun! netrw#NetrwBrowseX(fname,remote)
    if g:netrw_use_noswf
     setlocal noswf
    endif
-   exe "norm! \<c-o>"
+   exe "keepj norm! \<c-o>"
 "   redraw!
   endif
 
@@ -3381,19 +3507,19 @@ fun! netrw#Explore(indx,dosplit,style,..
    let b:netrw_curdir= getcwd()
 "   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
   endif
-  let curdir     = b:netrw_curdir
+  let curdir     = simplify(b:netrw_curdir)
   let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
 "  call Decho("curdir<".curdir.">  curfiledir<".curfiledir.">")
 "  call FOTEST(1)
 
   " save registers
-  silent! let keepregstar = @*
-  silent! let keepregplus = @+
-  silent! let keepregslash= @/
+  sil! let keepregstar = @*
+  sil! let keepregplus = @+
+  sil! let keepregslash= @/
 
   " if dosplit or file has been modified
   if a:dosplit || &modified || a:style == 6
-"   call Decho("case: dosplit=".a:dosplit." modified=".&modified." a:style=".a:style)
+"   call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
    call s:SaveWinVars()
    let winsize= g:netrw_winsize
    if a:indx > 0
@@ -3431,35 +3557,53 @@ fun! netrw#Explore(indx,dosplit,style,..
     call s:RestoreBufVars()
    endif
    call s:RestoreWinVars()
-  endif
-  norm! 0
+"  else " Decho
+"   call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
+  endif
+  keepj norm! 0
 "  call FOTEST(2)
 
   if a:0 > 0
-"   call Decho("case [a:0=".a:0."]>0: a:1<".a:1.">")
+"   call Decho("case [a:0=".a:0."] > 0: a:1<".a:1.">")
    if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
-    let dirname= substitute(a:1,'\~',expand("$HOME"),'')
+"    call Decho("case a:1: ~ and unix or cygwin")
+    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
 "    call Decho("using dirname<".dirname.">  (case: ~ && unix||cygwin)")
    elseif a:1 == '.'
-    let dirname= exists("b:netrw_curdir")? b:netrw_curdir : getcwd()
+"    call Decho("case a:1: .")
+    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
     if dirname !~ '/$'
      let dirname= dirname."/"
     endif
 "    call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
    elseif a:1 =~ '\$'
-    let dirname= expand(a:1)
+"    call Decho("case a:1: $")
+    let dirname= simplify(expand(a:1))
 "    call Decho("using user-specified dirname<".dirname."> with $env-var")
+   elseif a:1 !~ '^\*/'
+"    call Decho("case a:1: other, not pattern or filepattern")
+    let dirname= simplify(a:1)
+"    call Decho("using user-specified dirname<".dirname.">")
    else
+"    call Decho("case a:1: pattern or filepattern")
     let dirname= a:1
-"    call Decho("using user-specified dirname<".dirname.">")
    endif
   else
    " clear explore
+"   call Decho("case a:0=".a:0.": clearing Explore list")
    call s:NetrwClearExplore()
 "   call Dret("netrw#Explore : cleared list")
    return
   endif
+
 "  call FOTEST(3)
+"  call Decho("dirname<".dirname.">")
+  if dirname =~ '\.\./\=$'
+   let dirname= simplify(fnamemodify(dirname,':p:h'))
+  elseif dirname =~ '\.\.' || dirname == '.'
+   let dirname= simplify(fnamemodify(dirname,':p'))
+  endif
+"  call Decho("dirname<".dirname.">  (after simplify)")
 
   if dirname =~ '/\*\*/'
    " handle .../**/.../filepat
@@ -3524,9 +3668,9 @@ fun! netrw#Explore(indx,dosplit,style,..
 
 "   call Decho("curdir<".curdir.">")
    if has("win32") || has("win95") || has("win64") || has("win16")
-    call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
+    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
    else
-    call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
+    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
    endif
 
   " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
@@ -3557,9 +3701,9 @@ fun! netrw#Explore(indx,dosplit,style,..
 "     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
      if !exists("w:netrw_explore_list") " sanity check
       call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
-      silent! let @* = keepregstar
-      silent! let @+ = keepregstar
-      silent! let @/ = keepregslash
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
 "      call Dret("netrw#Explore")
       return
      endif
@@ -3580,9 +3724,9 @@ fun! netrw#Explore(indx,dosplit,style,..
 "     call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")")
      if !exists("w:netrw_explore_list") " sanity check
       call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
-      silent! let @* = keepregstar
-      silent! let @+ = keepregstar
-      silent! let @/ = keepregslash
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
 "      call Dret("netrw#Explore")
       return
      endif
@@ -3615,7 +3759,7 @@ fun! netrw#Explore(indx,dosplit,style,..
 "      call Decho("starpat=".starpat.": build *//pattern list")
 "      call Decho("pattern<".pattern.">")
       try
-       exe "noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
+       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
       catch /^Vim\%((\a\+)\)\=:E480/
        call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
 "       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
@@ -3628,7 +3772,7 @@ fun! netrw#Explore(indx,dosplit,style,..
       " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
 "      call Decho("starpat=".starpat.": build **//pattern list")
       try
-       exe "silent noautocmd vimgrep /".pattern."/gj "."**/*"
+       exe "sil keepj noautocmd vimgrep /".pattern."/gj "."**/*"
       catch /^Vim\%((\a\+)\)\=:E480/
        call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
        if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
@@ -3665,9 +3809,9 @@ fun! netrw#Explore(indx,dosplit,style,..
 
      if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
       call netrw#ErrorMsg(s:WARNING,"no files matched",42)
-      silent! let @* = keepregstar
-      silent! let @+ = keepregstar
-      silent! let @/ = keepregslash
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
 "      call Dret("netrw#Explore : no files matched")
       return
      endif
@@ -3696,9 +3840,9 @@ fun! netrw#Explore(indx,dosplit,style,..
      let w:netrw_liststyle= g:netrw_liststyle
     endif
     if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
-     call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
+     keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
     else
-     call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+     keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
     endif
     let w:netrw_explore_mtchcnt = indx + 1
     let w:netrw_explore_bufnr   = bufnr("%")
@@ -3711,9 +3855,9 @@ fun! netrw#Explore(indx,dosplit,style,..
     if !exists("g:netrw_quiet")
      call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
     endif
-    silent! let @* = keepregstar
-    silent! let @+ = keepregstar
-    silent! let @/ = keepregslash
+    sil! let @* = keepregstar
+    sil! let @+ = keepregstar
+    sil! let @/ = keepregslash
 "    call Dret("netrw#Explore : missing +path_extra")
     return
    endif
@@ -3721,8 +3865,8 @@ fun! netrw#Explore(indx,dosplit,style,..
   else
 "   call Decho("default case: Explore newdir<".dirname.">")
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
-    silent! unlet w:netrw_treedict
-    silent! unlet w:netrw_treetop
+    sil! unlet w:netrw_treedict
+    sil! unlet w:netrw_treetop
    endif
    let newdir= dirname
    if !exists("b:netrw_curdir")
@@ -3778,9 +3922,9 @@ fun! netrw#Explore(indx,dosplit,style,..
   endif
 "  call FOTEST(6)
 
-  silent! let @* = keepregstar
-  silent! let @+ = keepregstar
-  silent! let @/ = keepregslash
+  sil! let @* = keepregstar
+  sil! let @+ = keepregstar
+  sil! let @/ = keepregslash
 "  call Dret("netrw#Explore : @/<".@/.">")
 endfun
 
@@ -3843,7 +3987,7 @@ fun! s:NetrwHide(islocal)
 
    " switch between show-all/show-not-hidden/show-hidden
    let g:netrw_hide=(g:netrw_hide+1)%3
-   exe "norm! 0"
+   exe "keepj norm! 0"
    if g:netrw_hide && g:netrw_list_hide == ""
     call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
 "    call Dret("NetrwHide")
@@ -3917,6 +4061,25 @@ endfun
 " s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
 fun! s:NetrwLeftmouse(islocal)
 "  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
+
+  " check if the status bar was clicked on instead of a file/directory name
+  call feedkeys("\<LeftMouse>")
+  let c= getchar()
+  let mouse_lnum = v:mouse_lnum
+  let wlastline  = line('w$')
+  let lastline   = line('$')
+"  call Decho("v:mouse_lnum=".mouse_lnum." line(w$)=".wlastline." line($)=".lastline." v:mouse_win=".v:mouse_win." winnr#".winnr())
+"  call Decho("v:mouse_col =".v:mouse_col."     col=".col(".")."  wincol =".wincol()." winwidth   =".winwidth(0))
+  if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr()
+   " appears to be a status bar leftmouse click
+"   call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click")
+   return
+  endif
+  if v:mouse_col != col('.')
+"   call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click")
+   return
+  endif
+
   if a:islocal
    if exists("b:netrw_curdir")
     call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
@@ -3955,15 +4118,15 @@ fun! s:NetrwListHide()
    " Prune the list by hiding any files which match
    if g:netrw_hide == 1
 "    call Decho("hiding<".hide."> listhide<".listhide.">")
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
+    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
    elseif g:netrw_hide == 2
 "    call Decho("showing<".hide."> listhide<".listhide.">")
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
+    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
    endif
   endwhile
   if g:netrw_hide == 2
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
+   exe 'sil keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
+   exe 'sil keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
   endif
 
 "  call Dret("NetrwListHide")
@@ -3985,7 +4148,7 @@ fun! s:NetrwHideEdit(islocal)
 "  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
 
   " refresh the listing
-  silent call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
+  silent keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
 
   " restore cursor position
   call netrw#NetrwRestorePosn(svpos)
@@ -4057,12 +4220,12 @@ fun! s:NetrwMakeDir(usrhost)
     call mkdir(fullnewdir,"p")
    else
     let netrw_origdir= s:NetrwGetcwd(1)
-    exe 'keepjumps lcd '.fnameescape(b:netrw_curdir)
+    exe 'keepj lcd '.fnameescape(b:netrw_curdir)
 "    call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
 "    call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1))
-    exe "silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
+    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
     if !g:netrw_keepdir
-     exe 'keepjumps lcd '.fnameescape(netrw_origdir)
+     exe 'keepj lcd '.fnameescape(netrw_origdir)
 "     call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
     endif
    endif
@@ -4084,7 +4247,7 @@ fun! s:NetrwMakeDir(usrhost)
    let mkdircmd  = s:MakeSshCmd(g:netrw_mkdir_cmd)
    let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
 "   call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname,1))
-   exe "silent! !".mkdircmd." ".shellescape(newdirname,1)
+   exe "sil! !".mkdircmd." ".shellescape(newdirname,1)
    if v:shell_error == 0
     " refresh listing
     let svpos= netrw#NetrwSavePosn()
@@ -4330,10 +4493,10 @@ fun! s:NetrwMarkFileCopy(islocal)
    if exists("*mkdir")
     call mkdir(tmpdir)
    else
-    exe "silent! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
+    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
    endif
    if isdirectory(tmpdir)
-    exe "keepjumps lcd ".fnameescape(tmpdir)
+    exe "keepj lcd ".fnameescape(tmpdir)
     call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
     let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")')
     call s:NetrwUpload(localfiles,s:netrwmftgt)
@@ -4341,10 +4504,10 @@ fun! s:NetrwMarkFileCopy(islocal)
      for fname in s:netrwmarkfilelist_{bufnr('%')}
       call s:NetrwDelete(fname)
      endfor
-     exe "keepjumps lcd ".fnameescape(curdir)
-     exe "silent !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
+     exe "keepj lcd ".fnameescape(curdir)
+     exe "sil !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
     else
-     exe "keepjumps lcd ".fnameescape(curdir)
+     exe "keepj lcd ".fnameescape(curdir)
     endif
    endif
   endif
@@ -4570,7 +4733,7 @@ fun! s:NetrwMarkFileGrep(islocal)
    " use vimgrep for both local and remote
 "   call Decho("exe vimgrep".pat." ".netrwmarkfilelist)
    try
-    exe "noautocmd vimgrep".pat." ".netrwmarkfilelist
+    exe "keepj noautocmd vimgrep".pat." ".netrwmarkfilelist
     catch /^Vim\%((\a\+)\)\=:E480/
      call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
 "     call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
@@ -4750,33 +4913,33 @@ fun! s:NetrwMarkFileRegexp(islocal)
    " convert displayed listing into a filelist
    let eikeep = &ei
    let areg   = @a
-   silent %y a
+   sil keepj %y a
    set ei=all ma
 "   call Decho("set ei=all ma")
    1split
    call s:NetrwEnew()
    call s:NetrwSafeOptions()
-   silent norm! "ap
-   2
+   sil keepj norm! "ap
+   keepj 2
    let bannercnt= search('^" =====','W')
-   exe "silent 1,".bannercnt."d"
+   exe "sil keepj 1,".bannercnt."d"
    set bt=nofile
    if     g:netrw_liststyle == s:LONGLIST
-    silent %s/\s\{2,}\S.*$//e
+    sil keepj %s/\s\{2,}\S.*$//e
     call histdel("/",-1)
    elseif g:netrw_liststyle == s:WIDELIST
-    silent %s/\s\{2,}/\r/ge
+    sil keepj %s/\s\{2,}/\r/ge
     call histdel("/",-1)
    elseif g:netrw_liststyle == s:TREELIST
-    silent %s/^| //e
-    silent! g/^ .*$/d
+    sil keepj %s/^| //e
+    sil! keepj g/^ .*$/d
     call histdel("/",-1)
     call histdel("/",-1)
    endif
    " convert regexp into the more usual glob-style format
    let regexp= substitute(regexp,'\*','.*','g')
 "   call Decho("regexp<".regexp.">")
-   exe "silent! v/".escape(regexp,'/')."/d"
+   exe "sil! keepj v/".escape(regexp,'/')."/d"
    call histdel("/",-1)
    let filelist= getline(1,line("$"))
    q!
@@ -4847,7 +5010,7 @@ fun! s:NetrwMarkFileTag(islocal)
     e tags
     let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','')
 "    call Decho("curdir<".curdir."> path<".path.">")
-    exe '%s/\t\(\S\+\)\t/\t'.escape(path,"/\n\r\\").'\1\t/e'
+    exe 'keepj %s/\t\(\S\+\)\t/\t'.escape(path,"/\n\r\\").'\1\t/e'
     call histdel("/",-1)
     wq!
    endif
@@ -4914,7 +5077,7 @@ fun! s:NetrwMarkFileTgt(islocal)
   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   call netrw#NetrwRestorePosn(svpos)
   if !hadtgt
-   norm! j
+   sil! keepj norm! j
   endif
 
 "  call Dret("s:NetrwMarkFileTgt : netrwmftgt<".(exists("s:netrwmftgt")? s:netrwmftgt : "").">")
@@ -5042,55 +5205,55 @@ fun! s:NetrwMenu(domenu)
    if !exists("s:netrw_menu_enabled") && a:domenu
 "    call Decho("initialize menu")
     let s:netrw_menu_enabled= 1
-    exe 'silent! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-	:'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.2  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.3  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.4  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.5  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.1  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.2  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.3  '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.4  '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.5  '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.6  '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.7  '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.8  '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.9  '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.15    '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.1  '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i	i'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.2  '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a	a'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.3  '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s	s'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-	:'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.2  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.3  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.4  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.5  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.1  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.2  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.3  '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.4  '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.5  '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.6  '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.7  '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.8  '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.9  '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.15    '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1  '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i	i'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2  '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a	a'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3  '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s	s'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
     call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
     let s:netrw_menucnt= 28
 
@@ -5102,9 +5265,9 @@ fun! s:NetrwMenu(domenu)
 
     if s:netrwcnt <= 1
 "     call Decho("clear menus")
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu
+     exe 'sil! unmenu '.g:NetrwTopLvlMenu
 "     call Decho('exe silent! unmenu '.g:NetrwTopLvlMenu.'*')
-     silent! unlet s:netrw_menu_enabled
+     sil! unlet s:netrw_menu_enabled
     endif
    endif
 "   call Dret("NetrwMenu")
@@ -5214,7 +5377,7 @@ fun! netrw#NetrwObtain(islocal,fname,...
      let tmpbufnr= bufnr("%")
      setlocal ff=unix
      if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-      put =g:netrw_ftpmode
+      keepj put =g:netrw_ftpmode
 "      call Decho("filter input: ".getline('$'))
      endif
 
@@ -5224,7 +5387,7 @@ fun! netrw#NetrwObtain(islocal,fname,...
      endif
 
      if exists("g:netrw_ftpextracmd")
-      put =g:netrw_ftpextracmd
+      keepj put =g:netrw_ftpextracmd
 "      call Decho("filter input: ".getline('$'))
      endif
      for fname in fnamelist
@@ -5254,44 +5417,44 @@ fun! netrw#NetrwObtain(islocal,fname,...
     setlocal ff=unix
 
     if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
 "     call Decho("filter input: ".getline('$'))
     else
-     put ='open '.g:netrw_machine
+     keepj put ='open '.g:netrw_machine
 "     call Decho("filter input: ".getline('$'))
     endif
 
     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
+     keepj put =g:netrw_uid
 "     call Decho("filter input: ".getline('$'))
-     put ='\"'.s:netrw_passwd.'\"'
+     keepj put ='\"'.s:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline('$'))
     else
-     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
 "     call Decho("filter input: ".getline('$'))
     endif
 
     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     put =g:netrw_ftpmode
+     keepj put =g:netrw_ftpmode
 "     call Decho("filter input: ".getline('$'))
     endif
 
     if exists("b:netrw_fname") && b:netrw_fname != ""
-     call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
 "     call Decho("filter input: ".getline('$'))
     endif
 
     if exists("g:netrw_ftpextracmd")
-     put =g:netrw_ftpextracmd
+     keepj put =g:netrw_ftpextracmd
 "     call Decho("filter input: ".getline('$'))
     endif
 
     if exists("g:netrw_ftpextracmd")
-     put =g:netrw_ftpextracmd
+     keepj put =g:netrw_ftpextracmd
 "     call Decho("filter input: ".getline('$'))
     endif
     for fname in fnamelist
-     call setline(line("$")+1,'get "'.fname.'"')
+     keepj call setline(line("$")+1,'get "'.fname.'"')
     endfor
 "    call Decho("filter input: ".getline('$'))
 
@@ -5299,7 +5462,7 @@ fun! netrw#NetrwObtain(islocal,fname,...
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
     " -n  win32: quit being obnoxious about password
-    norm! 1Gdd
+    keepj norm! 1Gdd
 "    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
@@ -5502,25 +5665,25 @@ fun! s:NetrwUpload(fname,tgt,...)
     if b:netrw_method == 2
      " handle uploading a list of files via ftp+.netrc
      let netrw_fname = b:netrw_fname
-     silent keepjumps new
+     sil keepj new
 "     call Decho("filter input window#".winnr())
 
-     put =g:netrw_ftpmode
+     keepj put =g:netrw_ftpmode
 "     call Decho("filter input: ".getline('$'))
 
      if exists("g:netrw_ftpextracmd")
-      put =g:netrw_ftpextracmd
+      keepj put =g:netrw_ftpextracmd
 "      call Decho("filter input: ".getline('$'))
      endif
 
-     call setline(line("$")+1,'lcd "'.fromdir.'"')
+     keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
 "     call Decho("filter input: ".getline('$'))
 
-     call setline(line("$")+1,'cd "'.tgtdir.'"')
+     keepj call setline(line("$")+1,'cd "'.tgtdir.'"')
 "     call Decho("filter input: ".getline('$'))
 
      for fname in a:fname
-      call setline(line("$")+1,'put "'.fname.'"')
+      keepj call setline(line("$")+1,'put "'.fname.'"')
 "      call Decho("filter input: ".getline('$'))
      endfor
 
@@ -5533,7 +5696,7 @@ fun! s:NetrwUpload(fname,tgt,...)
       exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
      endif
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-     silent g/Local directory now/d
+     sil keepj g/Local directory now/d
      call histdel("/",-1)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       call netrw#ErrorMsg(s:ERROR,getline(1),14)
@@ -5549,38 +5712,38 @@ fun! s:NetrwUpload(fname,tgt,...)
      setlocal ff=unix
 
      if exists("g:netrw_port") && g:netrw_port != ""
-      put ='open '.g:netrw_machine.' '.g:netrw_port
+      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
 "      call Decho("filter input: ".getline('$'))
      else
-      put ='open '.g:netrw_machine
+      keepj put ='open '.g:netrw_machine
 "      call Decho("filter input: ".getline('$'))
      endif
 
      if exists("g:netrw_ftp") && g:netrw_ftp == 1
-      put =g:netrw_uid
+      keepj put =g:netrw_uid
 "      call Decho("filter input: ".getline('$'))
-      call setline(line("$")+1,'"'.s:netrw_passwd.'"')
+      keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
 "      call Decho("filter input: ".getline('$'))
      else
-      put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
 "      call Decho("filter input: ".getline('$'))
      endif
 
-     call setline(line("$")+1,'lcd "'.fromdir.'"')
+     keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
 "     call Decho("filter input: ".getline('$'))
 
      if exists("b:netrw_fname") && b:netrw_fname != ""
-      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+      keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
 "      call Decho("filter input: ".getline('$'))
      endif
 
      if exists("g:netrw_ftpextracmd")
-      put =g:netrw_ftpextracmd
+      keepj put =g:netrw_ftpextracmd
 "      call Decho("filter input: ".getline('$'))
      endif
 
      for fname in a:fname
-      call setline(line("$")+1,'put "'.fname.'"')
+      keepj call setline(line("$")+1,'put "'.fname.'"')
 "      call Decho("filter input: ".getline('$'))
      endfor
 
@@ -5588,11 +5751,11 @@ fun! s:NetrwUpload(fname,tgt,...)
      " -i       : turns off interactive prompting from ftp
      " -n  unix : DON'T use <.netrc>, even though it exists
      " -n  win32: quit being obnoxious about password
-     norm! 1Gdd
+     keepj norm! 1Gdd
 "     call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n")
      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-     silent g/Local directory now/d
+     sil keepj g/Local directory now/d
      call histdel("/",-1)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       let debugkeep= &debug
@@ -5623,7 +5786,14 @@ fun! s:NetrwPreview(path) range
   call s:NetrwSafeOptions()
   if has("quickfix")
    if !isdirectory(a:path)
-    exe (g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path)
+    if g:netrw_preview && !g:netrw_alto
+     let pvhkeep= &pvh
+     let &pvh   = winwidth(0) - g:netrw_winsize
+    endif
+    exe (g:netrw_alto? "top " : "bot ").(g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path)
+    if exists("pvhkeep")
+     let &pvh= pvhkeep
+    endif
    elseif !exists("g:netrw_quiet")
     call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
    endif
@@ -5644,7 +5814,7 @@ fun! s:NetrwRefresh(islocal,dirname)
   setlocal ma noro
 "  call Decho("setlocal ma noro")
 "  call Decho("clear buffer<".expand("%")."> with :%d")
-  %d
+  keepj %d
   if a:islocal
    call netrw#LocalBrowseCheck(a:dirname)
   else
@@ -5744,17 +5914,17 @@ fun! s:NetrwSetSort()
    if seq == '*'
     let starpriority= spriority
    else
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.seq.'/s/^/'.spriority.'/'
+    exe 'sil keepj '.w:netrw_bannercnt.',$g/'.seq.'/s/^/'.spriority.'/'
     call histdel("/",-1)
     " sometimes multiple sorting patterns will match the same file or directory.
     " The following substitute is intended to remove the excess matches.
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e'
+    exe 'sil keepj '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e'
     call histdel("/",-1)
    endif
    let priority = priority + 1
   endwhile
   if exists("starpriority")
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/'
+   exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/'
    call histdel("/",-1)
   endif
 
@@ -5764,7 +5934,7 @@ fun! s:NetrwSetSort()
   " priority pattern needs to be retained.  So, at this point, these excess
   " priority prefixes need to be removed, but not directories that happen to
   " be just digits themselves.
-  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e'
+  exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e'
   call histdel("/",-1)
 
 "  call Dret("SetSort")
@@ -5778,7 +5948,7 @@ fun! s:NetrwSortStyle(islocal)
   let svpos= netrw#NetrwSavePosn()
 
   let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'
-  norm! 0
+  keepj norm! 0
   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
   call netrw#NetrwRestorePosn(svpos)
 
@@ -5923,7 +6093,7 @@ fun! s:NetrwTreeDir()
 "    call Decho("user attempted to close treeroot")
     " now force a refresh
 "    call Decho("clear buffer<".expand("%")."> with :%d")
-    keepjumps %d
+    keepj %d
 "    call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
     return b:netrw_curdir
    endif
@@ -6004,7 +6174,7 @@ fun! s:NetrwTreeDisplay(dir,depth)
     call s:NetrwTreeDisplay(direntry.'/',depth)
    else
 "    call Decho("<".entry."> is not a key in treedict (no subtree)")
-    call setline(line("$")+1,depth.entry)
+    keepj call setline(line("$")+1,depth.entry)
    endif
   endfor
 "  call Dret("NetrwTreeDisplay")
@@ -6038,7 +6208,7 @@ fun! s:NetrwTreeListing(dirname)
 "   call Decho("bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
    exe "silent! keepjumps ".w:netrw_bannercnt.',$g@^\.\.\=/$@d'
    let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$"))
-"   call Decho("w:treedict[".a:dirname."]= ".w:netrw_treedict[a:dirname])
+"   call Decho("w:treedict[".a:dirname."]= ".string(w:netrw_treedict[a:dirname]))
    exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
 
    " if past banner, record word
@@ -6070,7 +6240,7 @@ fun! s:NetrwWideListing()
 "   call Decho("setlocal ma noro")
    let b:netrw_cpf= 0
    if line("$") >= w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+    exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
     call histdel("/",-1)
    else
 "    call Dret("NetrwWideListing")
@@ -6087,7 +6257,7 @@ fun! s:NetrwWideListing()
 "   call Decho("fpl= [winwidth=".winwidth(0)."]/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
 
    " make wide display
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
+   exe 'sil keepj '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
    call histdel("/",-1)
    let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
    let newcolstart = w:netrw_bannercnt + fpc
@@ -6099,15 +6269,15 @@ fun! s:NetrwWideListing()
     let newcolqty= newcolend - newcolstart
     exe newcolstart
     if newcolqty == 0
-     exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
+     exe "sil keepj norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
     else
-     exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
-    endif
-    exe "silent keepjumps ".newcolstart.','.newcolend.'d'
-    exe 'silent keepjumps '.w:netrw_bannercnt
+     exe "sil keepj norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
+    endif
+    exe "sil keepj ".newcolstart.','.newcolend.'d'
+    exe 'sil keepj '.w:netrw_bannercnt
    endwhile
    silent! let @*= keepregstar
-   exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
+   exe "sil keepj ".w:netrw_bannercnt.',$s/\s\+$//e'
    call histdel("/",-1)
    setlocal noma nomod ro
 "   call Dret("NetrwWideListing")
@@ -6118,7 +6288,7 @@ endfun
 " ---------------------------------------------------------------------
 " s:PerformListing: {{{2
 fun! s:PerformListing(islocal)
-"  call Dfunc("s:PerformListing(islocal=".a:islocal.") buf(%)=".bufnr("%")."<".bufname("%").">")
+"  call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">")
 
   call s:NetrwSafeOptions()
   setlocal noro ma
@@ -6132,7 +6302,7 @@ fun! s:PerformListing(islocal)
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
    " force a refresh for tree listings
 "   call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
-   keepjumps %d
+   keepj %d
   endif
 
   " save current directory on directory history list
@@ -6141,14 +6311,14 @@ fun! s:PerformListing(islocal)
   " Set up the banner {{{3
   if g:netrw_banner
 "   call Decho("set up banner")
-   keepjumps put ='\" ============================================================================'
-   keepjumps put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
-   keepjumps put ='\"   '.b:netrw_curdir
-   keepjumps 1d
+   keepj put ='\" ============================================================================'
+   keepj put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
+   keepj put ='\"   '.b:netrw_curdir
+   keepj 1d
    let w:netrw_bannercnt= 3
-   exe "keepjumps ".w:netrw_bannercnt
+   exe "keepj ".w:netrw_bannercnt
   else
-   keepjumps 1
+   keepj 1
    let w:netrw_bannercnt= 1
   endif
 
@@ -6163,33 +6333,33 @@ fun! s:PerformListing(islocal)
    if g:netrw_sort_by =~ "^n"
 "   call Decho("directories will be sorted by name")
     " sorted by name
-    keepjumps put ='\"   Sorted by      '.sortby
-    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
+    keepj put ='\"   Sorted by      '.sortby
+    keepj put ='\"   Sort sequence: '.g:netrw_sort_sequence
     let w:netrw_bannercnt= w:netrw_bannercnt + 2
    else
 "   call Decho("directories will be sorted by size or time")
     " sorted by size or date
-    keepjumps put ='\"   Sorted by '.sortby
+    keepj put ='\"   Sorted by '.sortby
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
    endif
-   exe "keepjumps ".w:netrw_bannercnt
+   exe "keepj ".w:netrw_bannercnt
   endif
 
   " show copy/move target, if any
   if g:netrw_banner
    if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal")
 "    call Decho("show copy/move target<".s:netrwmftgt.">")
-    keepjumps put =''
+    keepj put =''
     if s:netrwmftgt_islocal
-     call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
+     keepj call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
     else
-     call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (remote)')
+     keepj call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (remote)')
     endif
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
    else
 "    call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
    endif
-   exe "keepjumps ".w:netrw_bannercnt
+   exe "keepj ".w:netrw_bannercnt
   endif
 
   " Hiding...  -or-  Showing... {{{3
@@ -6197,22 +6367,22 @@ fun! s:PerformListing(islocal)
 "   call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
    if g:netrw_list_hide != "" && g:netrw_hide
     if g:netrw_hide == 1
-     keepjumps put ='\"   Hiding:        '.g:netrw_list_hide
+     keepj put ='\"   Hiding:        '.g:netrw_list_hide
     else
-     keepjumps put ='\"   Showing:       '.g:netrw_list_hide
+     keepj put ='\"   Showing:       '.g:netrw_list_hide
     endif
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
    endif
    exe "keepjumps ".w:netrw_bannercnt
-   keepjumps put ='\"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
-   keepjumps put ='\" ============================================================================'
+   keepj put ='\"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
+   keepj put ='\" ============================================================================'
    let w:netrw_bannercnt= w:netrw_bannercnt + 2
   endif
 
   " bannercnt should index the line just after the banner
   if g:netrw_banner
    let w:netrw_bannercnt= w:netrw_bannercnt + 1
-   exe "keepjumps ".w:netrw_bannercnt
+   exe "keepj ".w:netrw_bannercnt
 "   call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
   endif
 
@@ -6252,15 +6422,15 @@ fun! s:PerformListing(islocal)
 "      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
       if g:netrw_sort_direction =~ 'n'
        " normal direction sorting
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
+       exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
       else
        " reverse direction sorting
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
+       exe 'sil keepj '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
       endif
      endif
      " remove priority pattern prefix
 "     call Decho("remove priority pattern prefix")
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
+     exe 'sil keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
      call histdel("/",-1)
 
     elseif a:islocal
@@ -6268,12 +6438,12 @@ fun! s:PerformListing(islocal)
 "      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
       if g:netrw_sort_direction =~ 'n'
 "       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
+       exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
       else
 "       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
+       exe 'sil keepj '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
       endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+     exe 'sil keepj '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
      call histdel("/",-1)
      endif
     endif
@@ -6281,7 +6451,7 @@ fun! s:PerformListing(islocal)
    elseif g:netrw_sort_direction =~ 'r'
 "    call Decho('reverse the sorted listing')
     if !g:netrw_banner || w:netrw_bannercnt < line('$')
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^/m '.w:netrw_bannercnt
+     exe 'sil keepj '.w:netrw_bannercnt.',$g/^/m '.w:netrw_bannercnt
      call histdel("/",-1)
     endif
    endif
@@ -6295,8 +6465,8 @@ fun! s:PerformListing(islocal)
   if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner)
    " place cursor on the top-left corner of the file listing
 "   call Decho("place cursor on top-left corner of file listing")
-   exe 'silent keepjumps '.w:netrw_bannercnt
-   norm! 0
+   exe 'sil keepj '.w:netrw_bannercnt
+   keepj norm! 0
   endif
 
   " record previous current directory
@@ -6416,43 +6586,43 @@ fun! s:NetrwRemoteListing()
    endif
 "   call Decho("listcmd<".listcmd."> (using g:netrw_ftp_list_cmd)")
    call s:NetrwRemoteFtpCmd(s:path,listcmd)
-"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))'
+"   exe "keepj ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))'
 
    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
     " shorten the listing
 "    call Decho("generate short listing")
-    exe "keepjumps ".w:netrw_bannercnt
+    exe "keepj ".w:netrw_bannercnt
 
     " cleanup
     if g:netrw_ftp_browse_reject != ""
-     exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
+     exe "sil! keepj g/".g:netrw_ftp_browse_reject."/keepj d"
      call histdel("/",-1)
     endif
-    silent! keepjumps %s/\r$//e
+    sil! keepj %s/\r$//e
     call histdel("/",-1)
 
     " if there's no ../ listed, then put ./ and ../ in
     let line1= line(".")
-    exe "keepjumps ".w:netrw_bannercnt
+    exe "keepj ".w:netrw_bannercnt
     let line2= search('^\.\.\/\%(\s\|$\)','cnW')
     if line2 == 0
 "     call Decho("netrw is putting ./ and ../ into listing")
-     keepjumps put='../'
-     keepjumps put='./'
-    endif
-    exe "keepjumps ".line1
+     keepj put='../'
+     keepj put='./'
+    endif
+    exe "keepj ".line1
     keepjumps norm! 0
 
 "    call Decho("line1=".line1." line2=".line2." line(.)=".line("."))
     if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
 "     call Decho("M$ ftp cleanup")
-     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
+     exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
      call histdel("/",-1)
     else " normal ftp cleanup
 "     call Decho("normal ftp cleanup")
-     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
-     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
-     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
+     exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+     exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
+     exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
      call histdel("/",-1)
      call histdel("/",-1)
      call histdel("/",-1)
@@ -6468,23 +6638,23 @@ fun! s:NetrwRemoteListing()
 "    call Decho("1: exe silent r! ".shellescape(listcmd.s:path, 1))
     exe "silent r! ".listcmd.shellescape(s:path, 1)
     " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
-    g/^Listing directory/d
-    g/^d[-rwx][-rwx][-rwx]/s+$+/+e
-    silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e
+    keepj g/^Listing directory/keepj d
+    keepj g/^d[-rwx][-rwx][-rwx]/keepj s+$+/+e
+    sil keepj g/^l[-rwx][-rwx][-rwx]/keepj s+$+@+e
     call histdel("/",-1)
     call histdel("/",-1)
     call histdel("/",-1)
     if g:netrw_liststyle != s:LONGLIST
-     g/^[dlsp-][-rwx][-rwx][-rwx]/s/^.*\s\(\S\+\)$/\1/e
+     keepj g/^[dlsp-][-rwx][-rwx][-rwx]/keepj s/^.*\s\(\S\+\)$/\1/e
      call histdel("/",-1)
     endif
    else
     if s:path == ""
 "     call Decho("2: exe silent r! ".listcmd)
-     exe "silent r! ".listcmd
+     exe "sil r! ".listcmd
     else
 "     call Decho("3: exe silent r! ".listcmd.' '.shellescape(s:path,1))
-     exe "silent r! ".listcmd.' '.shellescape(s:path,1)
+     exe "sil r! ".listcmd.' '.shellescape(s:path,1)
 "     call Decho("listcmd<".listcmd."> path<".s:path.">")
     endif
    endif
@@ -6492,7 +6662,7 @@ fun! s:NetrwRemoteListing()
    " cleanup
    if g:netrw_ftp_browse_reject != ""
 "    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
-    exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
+    exe "sil! g/".g:netrw_ssh_browse_reject."/keepjumps d"
     call histdel("/",-1)
    endif
   endif
@@ -6503,33 +6673,33 @@ fun! s:NetrwRemoteListing()
 
    if s:method == "ftp"
     " cleanup
-    exe "keepjumps ".w:netrw_bannercnt
+    exe "keepj ".w:netrw_bannercnt
     while getline('.') =~ g:netrw_ftp_browse_reject
-     keepjumps d
+     keepj d
     endwhile
     " if there's no ../ listed, then put ./ and ../ in
     let line1= line(".")
-    keepjumps 1
-    silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
+    keepj 1
+    sil keepj call search('^\.\.\/\%(\s\|$\)','W')
     let line2= line(".")
     if line2 == 0
-     exe 'keepjumps '.w:netrw_bannercnt."put='./'"
+     exe 'keepj '.w:netrw_bannercnt."put='./'"
      if b:netrw_curdir != '/'
-      exe 'keepjumps '.w:netrw_bannercnt."put='../'"
+      exe 'keepj '.w:netrw_bannercnt."put='../'"
      endif
     endif
-   exe "keepjumps ".line1
+   exe "keepj ".line1
    keepjumps norm! 0
    endif
 
    if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
 "    call Decho("M$ ftp site listing cleanup")
-    exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+\)\(\w.*\)$/\2\t\1/'
+    exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\(\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+\)\(\w.*\)$/\2\t\1/'
    elseif exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$")
 "    call Decho("normal ftp site listing cleanup: bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
-    exe 'silent keepjumps '.w:netrw_bannercnt
+    exe 'sil keepj '.w:netrw_bannercnt.',$s/ -> .*$//e'
+    exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+    exe 'sil keepj '.w:netrw_bannercnt
     call histdel("/",-1)
     call histdel("/",-1)
     call histdel("/",-1)
@@ -6537,7 +6707,7 @@ fun! s:NetrwRemoteListing()
   endif
 
 "  if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho
-"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))'
+"   exe "keepj ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))'
 "  endif " Decho
 "  call Dret("s:NetrwRemoteListing")
 endfun
@@ -6729,10 +6899,10 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
   if w:netrw_method == 2 || w:netrw_method == 5
    " ftp + <.netrc>:  Method #2
    if a:path != ""
-    put ='cd \"'.a:path.'\"'
+    keepj put ='cd \"'.a:path.'\"'
    endif
    if exists("g:netrw_ftpextracmd")
-    put =g:netrw_ftpextracmd
+    keepj put =g:netrw_ftpextracmd
 "    call Decho("filter input: ".getline('.'))
    endif
    call setline(line("$")+1,a:listcmd)
@@ -6750,26 +6920,26 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
    " ftp + machine,id,passwd,filename:  Method #3
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
     else
-     put ='open '.g:netrw_machine
+     keepj put ='open '.g:netrw_machine
     endif
 
     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
-     put ='\"'.s:netrw_passwd.'\"'
+     keepj put =g:netrw_uid
+     keepj put ='\"'.s:netrw_passwd.'\"'
     else
-     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
     endif
 
    if a:path != ""
-    put ='cd \"'.a:path.'\"'
+    keepj put ='cd \"'.a:path.'\"'
    endif
    if exists("g:netrw_ftpextracmd")
-    put =g:netrw_ftpextracmd
+    keepj put =g:netrw_ftpextracmd
 "    call Decho("filter input: ".getline('.'))
    endif
-   call setline(line("$")+1,a:listcmd)
+   keepj call setline(line("$")+1,a:listcmd)
 
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
@@ -6786,29 +6956,29 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
 
   " cleanup for Windows
   if has("win32") || has("win95") || has("win64") || has("win16")
-   silent! keepjumps %s/\r$//e
+   sil! keepj %s/\r$//e
    call histdel("/",-1)
   endif
   if a:listcmd == "dir"
    " infer directory/link based on the file permission string
-   silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
-   silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
+   sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@
+   sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/
    call histdel("/",-1)
    call histdel("/",-1)
    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
-    exe "silent! keepjumps ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
+    exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
     call histdel("/",-1)
    endif
   endif
 
   " ftp's listing doesn't seem to include ./ or ../
   if !search('^\.\/$\|\s\.\/$','wn')
-   exe 'keepjumps '.w:netrw_bannercnt
-   put ='./'
+   exe 'keepj '.w:netrw_bannercnt
+   keepj put ='./'
   endif
   if !search('^\.\.\/$\|\s\.\.\/$','wn')
-   exe 'keepjumps '.w:netrw_bannercnt
-   put ='../'
+   exe 'keepj '.w:netrw_bannercnt
+   keepj put ='../'
   endif
 
   " restore settings
@@ -6861,7 +7031,7 @@ fun! s:NetrwRemoteRename(usrhost,path) r
 
   " attempt to rename files/directories
    while ctr <= a:lastline
-    exe "keepjumps ".ctr
+    exe "keepj ".ctr
 
     let oldname= s:NetrwGetWord()
 "   call Decho("oldname<".oldname.">")
@@ -7061,7 +7231,7 @@ fun! s:LocalListing()
     let ft = strpart("000000000000000000",1,18-strlen(t)).t
 "    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
     let ftpfile= ft.'/'.pfile
-    keepjumps silent! put=ftpfile
+    sil! keepj put=ftpfile
 
    elseif g:netrw_sort_by =~ "^s"
     " sort by size (handles file sizes up to 1 quintillion bytes, US)
@@ -7070,18 +7240,18 @@ fun! s:LocalListing()
     let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
 "    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
     let fszpfile= fsz.'/'.pfile
-    keepjumps silent! put =fszpfile
+    sil! keepj put =fszpfile
 
    else
     " sort by name
 "    call Decho("exe keepjumps put ='".pfile."'")
-    keepjumps silent! put=pfile
+    sil! keepj put=pfile
    endif
   endwhile
 
   " cleanup any windows mess at end-of-line
-  silent! keepjumps g/^$/d
-  silent! keepjumps %s/\r$//e
+  sil! keepj g/^$/d
+  sil! keepj %s/\r$//e
   call histdel("/",-1)
   exe "setlocal ts=".g:netrw_maxfilenamelen
 "  call Decho("setlocal ts=".g:netrw_maxfilenamelen)
@@ -7132,7 +7302,7 @@ fun! s:LocalBrowseShellCmdRefresh()
    if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
     " wipe out any non-displaying netrw buffer
 "    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
-    exe "silent! bd ".fnameescape(ibuf)
+    exe "sil! bd ".fnameescape(ibuf)
     call remove(s:netrw_browselist,ibl)
 "    call Decho("browselist=".string(s:netrw_browselist))
     continue
@@ -7179,7 +7349,7 @@ fun! s:NetrwLocalRm(path) range
 
    let ctr = a:firstline
    while ctr <= a:lastline
-    exe "keepjumps ".ctr
+    exe "keepj ".ctr
 
     " sanity checks
     if line(".") < w:netrw_bannercnt
@@ -7219,7 +7389,7 @@ fun! s:NetrwLocalRmFile(path,fname,all)
   
   let all= a:all
   let ok = ""
-  norm! 0
+  keepj norm! 0
   let rmfile= s:ComposePath(a:path,a:fname)
 "  call Decho("rmfile<".rmfile.">")
 
@@ -7331,7 +7501,7 @@ fun! s:NetrwLocalRename(path) range
 
    " attempt to rename files/directories
    while ctr <= a:lastline
-    exe "keepjumps ".ctr
+    exe "keepj ".ctr
 
     " sanity checks
     if line(".") < w:netrw_bannercnt
@@ -7344,7 +7514,7 @@ fun! s:NetrwLocalRename(path) range
      continue
     endif
 
-    norm! 0
+    keepj norm! 0
     let oldname= s:ComposePath(a:path,curword)
 "   call Decho("oldname<".oldname.">")
 
@@ -7464,7 +7634,7 @@ fun! netrw#ErrorMsg(level,msg,errnum)
 "    call Decho("setlocal ma noro")
     setlocal ma noro
     call setline(line("$")+1,level.a:msg)
-    $
+    keepj $
    else
 "    call Decho("create a NetrwMessage buffer window")
     bo 1split
@@ -7521,7 +7691,7 @@ fun! netrw#NetrwRestorePosn(...)
   " restore window
   if exists("w:netrw_winnr")
 "   call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
-   exe "silent! ".w:netrw_winnr."wincmd w"
+   exe "sil! ".w:netrw_winnr."wincmd w"
   endif
   if v:shell_error == 0
    " as suggested by Bram M: redraw on no error
@@ -7532,13 +7702,13 @@ fun! netrw#NetrwRestorePosn(...)
   " restore top-of-screen line
   if exists("w:netrw_hline")
 "   call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
-   exe "norm! ".w:netrw_hline."G0z\<CR>"
+   exe "keepj norm! ".w:netrw_hline."G0z\<CR>"
   endif
 
   " restore position
   if exists("w:netrw_line") && exists("w:netrw_col")
 "   call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
-   exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
+   exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
   endif
 
   let &ei= eikeep
@@ -7556,7 +7726,7 @@ fun! netrw#NetrwSavePosn()
 "  call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
 
   " Save top-of-screen line
-  norm! H0
+  keepj norm! H0
   let w:netrw_hline= line(".")
 
   " set up string holding position parameters
@@ -7747,7 +7917,7 @@ fun! s:NetrwBMShow()
    if bmshowfuncs != []
     let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
     if bmshowfunc =~ '^call.*BMShow()'
-     exe "silent! ".bmshowfunc
+     exe "sil! ".bmshowfunc
     endif
    endif
   endif
@@ -7755,6 +7925,47 @@ fun! s:NetrwBMShow()
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwCursorline: {{{2
+fun! s:NetrwCursorline()
+  if !exists("w:netrw_liststyle")
+   let w:netrw_liststyle= g:netrw_liststyle
+  endif
+"  call Dfunc("s:NetrwCursorline() liststyle=".w:netrw_liststyle." g:netrw_cursorline=".g:netrw_cursorline." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul)
+  "
+  if w:netrw_liststyle != s:WIDELIST
+   " thin-long-tree listings
+   if g:netrw_cursorline == 2
+    setlocal cursorline
+    let &l:cursorcolumn= s:netrw_usercuc
+"    call Decho("setlocal cursorline  (cursorcolumn is ".((s:netrw_usercuc)? "on" : "off").")")
+   elseif g:netrw_cursorline
+    setlocal cursorline
+"    call Decho("setlocal cursorline")
+   endif
+
+  else
+   " wide listings
+   if g:netrw_cursorline == 2
+    setlocal cursorline cursorcolumn
+"    call Decho("setlocal cursorline cursorcolumn")
+   elseif g:netrw_cursorline
+    let &l:cursorline= s:netrw_usercul
+"    call Decho("cursorline is ".((s:netrw_usercul)? "on" : "off").")")
+   endif
+  endif
+"  call Dret("s:NetrwCursorline : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn)
+endfun
+
+" ---------------------------------------------------------------------
+" s:RestoreCursorline: restores cursorline/cursorcolumn to original user settings {{{2
+fun! s:RestoreCursorline()
+"  call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%"))
+  let &l:cursorline   = s:netrw_usercul
+  let &l:cursorcolumn = s:netrw_usercuc
+"  call Dret("s:RestoreCursorline : restored cul=".&l:cursorline." cuc=".&l:cursorcolumn)
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwDelete: Deletes a file. {{{2
 "           Uses Steve Hall's idea to insure that Windows paths stay
 "           acceptable.  No effect on Unix paths.
@@ -7788,10 +7999,11 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
 fun! s:NetrwEnew(...)
-"  call Dfunc("s:NetrwEnew() a:0=".a:0)
+"  call Dfunc("s:NetrwEnew() a:0=".a:0." bufnr($)=".bufnr("$"))
 "  call Decho("curdir<".((a:0>0)? a:1 : "")."> buf#".bufnr("%")."<".bufname("%").">")
 
   " grab a function-local-variable copy of buffer variables
+"  call Decho("make function-local copy of netrw variables")
   if exists("b:netrw_bannercnt")      |let netrw_bannercnt       = b:netrw_bannercnt      |endif
   if exists("b:netrw_browser_active") |let netrw_browser_active  = b:netrw_browser_active |endif
   if exists("b:netrw_cpf")            |let netrw_cpf             = b:netrw_cpf            |endif
@@ -7811,10 +8023,12 @@ fun! s:NetrwEnew(...)
 
   call s:NetrwOptionRestore("w:")
 "  call Decho("generate a buffer with keepjumps keepalt enew!")
-  keepjumps keepalt enew!
+  keepj keepalt enew!
+"  call Decho("bufnr($)=".bufnr("$"))
   call s:NetrwOptionSave("w:")
 
   " copy function-local-variables to buffer variable equivalents
+"  call Decho("copy function-local variables back to buffer netrw variables")
   if exists("netrw_bannercnt")      |let b:netrw_bannercnt       = netrw_bannercnt      |endif
   if exists("netrw_browser_active") |let b:netrw_browser_active  = netrw_browser_active |endif
   if exists("netrw_cpf")            |let b:netrw_cpf             = netrw_cpf            |endif
@@ -7837,10 +8051,11 @@ fun! s:NetrwEnew(...)
    if b:netrw_curdir =~ '/$'
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
      file NetrwTreeListing
+     set bt=nowrite noswf
      nno <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
      nno <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
     else
-     exe "silent! keepalt file ".fnameescape(b:netrw_curdir)
+     exe "sil! keepalt file ".fnameescape(b:netrw_curdir)
     endif
    endif
   endif
@@ -8095,10 +8310,10 @@ fun! s:Strlen(x)
    " preceded by lam, one otherwise, etc.)
    " (comment from TM, solution from me)
    let modkeep= &mod
-   exe "norm! o\<esc>"
+   exe "keepj norm! o\<esc>"
    call setline(line("."),a:x)
    let ret= virtcol("$") - 1
-   d
+   keepj d
    let &mod= modkeep
 
   else
@@ -8127,17 +8342,17 @@ fun! s:TreeListMove(dir)
   if curline !~ '/$'
 "   call Decho('regfile')
    if     a:dir == '[' && prvline != ''
-    norm! 0
+    keepj norm! 0
     let nl = search('^'.indentm1.'[^|]','bWe')    " search backwards from regular file
 "    call Decho("regfile srch back: ".nl)
    elseif a:dir == ']' && nxtline != ''
-    norm! $
+    keepj norm! $
     let nl = search('^'.indentm1.'[^|]','We')     " search forwards from regular file
 "    call Decho("regfile srch fwd: ".nl)
    endif
 
   elseif a:dir == '[' && prvline != ''
-   norm! 0
+   keepj norm! 0
    let curline= line(".")
    let nl     = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation
 "   call Decho("dir srch back ind: ".nl)
@@ -8149,7 +8364,7 @@ fun! s:TreeListMove(dir)
    endif
 
   elseif a:dir == ']' && nxtline != ''
-   norm! $
+   keepj norm! $
    let curline = line(".")
    let nl      = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation
 "   call Decho("dir srch fwd ind: ".nl)
--- a/runtime/autoload/sqlcomplete.vim
+++ b/runtime/autoload/sqlcomplete.vim
@@ -1,14 +1,23 @@
 " Vim OMNI completion script for SQL
 " Language:    SQL
 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
-" Version:     7.0
-" Last Change: 2009 Jan 04
+" Version:     9.0
+" Last Change: 2010 Apr 20
 " Usage:       For detailed help
 "              ":help sql.txt" 
 "              or ":help ft-sql-omni" 
 "              or read $VIMRUNTIME/doc/sql.txt
 
 " History
+" Version 9.0
+"     This change removes some of the support for tables with spaces in their
+"     names in order to simplify the regexes used to pull out query table 
+"     aliases for more robust table name and column name code completion.
+"     Full support for "table names with spaces" can be added in again
+"     after 7.3.
+" Version 8.0
+"     Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left 
+"     when drilling in and out of a column list for a table.
 " Version 7.0
 "     Better handling of object names
 " Version 6.0
@@ -250,7 +259,7 @@ function! sqlcomplete#Complete(findstart
             "    1.  Check if the dbext plugin has the option turned
             "        on to even allow owners
             "    2.  Based on 1, if the user is showing a table list
-            "        and the DrillIntoTable (using <C-Right>) then 
+            "        and the DrillIntoTable (using <Right>) then 
             "        this will be owner.table.  In this case, we can
             "        check to see the table.column exists in the 
             "        cached table list.  If it does, then we have
@@ -390,13 +399,14 @@ function! sqlcomplete#DrillIntoTable()
         call sqlcomplete#Map('column')
         " C-Y, makes the currently highlighted entry active
         " and trigger the omni popup to be redisplayed
-        call feedkeys("\<C-Y>\<C-X>\<C-O>")
+        call feedkeys("\<C-Y>\<C-X>\<C-O>", 'n')
     else
-        if has('win32')
-            " If the popup is not visible, simple perform the normal
-            " <C-Right> behaviour
-            exec "normal! \<C-Right>"
-        endif
+	" If the popup is not visible, simple perform the normal
+	" key behaviour.
+	" Must use exec since they key must be preceeded by "\"
+	" or feedkeys will simply push each character of the string 
+	" rather than the "key press".
+        exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_right.'", "n")'
     endif
     return ""
 endfunction
@@ -408,11 +418,12 @@ function! sqlcomplete#DrillOutOfColumns(
         " Trigger the omni popup to be redisplayed
         call feedkeys("\<C-X>\<C-O>")
     else
-        if has('win32')
-            " If the popup is not visible, simple perform the normal
-            " <C-Left> behaviour
-            exec "normal! \<C-Left>"
-        endif
+	" If the popup is not visible, simple perform the normal
+	" key behaviour.
+	" Must use exec since they key must be preceeded by "\"
+	" or feedkeys will simply push each character of the string 
+	" rather than the "key press".
+        exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_left.'", "n")'
     endif
     return ""
 endfunction
@@ -609,7 +620,7 @@ function! s:SQLCGetColumns(table_name, l
          " Search backwards to the beginning of the statement
          " and do NOT wrap
          " exec 'silent! normal! v?\<\(select\|update\|delete\|;\)\>'."\n".'"yy'
-         exec 'silent! normal! ?\<\(select\|update\|delete\|;\)\>'."\n"
+         exec 'silent! normal! ?\<\c\(select\|update\|delete\|;\)\>'."\n"
 
          " Start characterwise visual mode
          " Advance right one character
@@ -618,27 +629,38 @@ function! s:SQLCGetColumns(table_name, l
          "     2.  A ; at the end of a line (the delimiter)
          "     3.  The end of the file (incase no delimiter)
          " Yank the visually selected text into the "y register.
-         exec 'silent! normal! vl/\(\<select\>\|\<update\>\|\<delete\>\|;\s*$\|\%$\)'."\n".'"yy'
+         exec 'silent! normal! vl/\c\(\<select\>\|\<update\>\|\<delete\>\|;\s*$\|\%$\)'."\n".'"yy'
 
          let query = @y
          let query = substitute(query, "\n", ' ', 'g')
          let found = 0
 
-         " if query =~? '^\(select\|update\|delete\)'
-         if query =~? '^\(select\)'
+         " if query =~? '^\c\(select\)'
+         if query =~? '^\(select\|update\|delete\)'
              let found = 1
              "  \(\(\<\w\+\>\)\.\)\?   - 
-             " 'from.\{-}'  - Starting at the from clause
+             " '\c\(from\|join\|,\).\{-}'  - Starting at the from clause (case insensitive)
              " '\zs\(\(\<\w\+\>\)\.\)\?' - Get the owner name (optional)
              " '\<\w\+\>\ze' - Get the table name 
              " '\s\+\<'.table_name.'\>' - Followed by the alias
              " '\s*\.\@!.*'  - Cannot be followed by a .
              " '\(\<where\>\|$\)' - Must be followed by a WHERE clause
              " '.*'  - Exclude the rest of the line in the match
+             " let table_name_new = matchstr(@y, 
+             "             \ '\c\(from\|join\|,\).\{-}'.
+             "             \ '\zs\(\("\|\[\)\?.\{-}\("\|\]\)\.\)\?'.
+             "             \ '\("\|\[\)\?.\{-}\("\|\]\)\?\ze'.
+             "             \ '\s\+\%(as\s\+\)\?\<'.
+             "             \ matchstr(table_name, '.\{-}\ze\.\?$').
+             "             \ '\>'.
+             "             \ '\s*\.\@!.*'.
+             "             \ '\(\<where\>\|$\)'.
+             "             \ '.*'
+             "             \ )
              let table_name_new = matchstr(@y, 
-                         \ 'from.\{-}'.
-                         \ '\zs\(\("\|\[\)\?.\{-}\("\|\]\)\.\)\?'.
-                         \ '\("\|\[\)\?.\{-}\("\|\]\)\ze'.
+                         \ '\c\(\<from\>\|\<join\>\|,\)\s*'.
+                         \ '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?'.
+                         \ '\("\|\[\)\?\w\+\("\|\]\)\?\ze'.
                          \ '\s\+\%(as\s\+\)\?\<'.
                          \ matchstr(table_name, '.\{-}\ze\.\?$').
                          \ '\>'.
@@ -649,7 +671,7 @@ function! s:SQLCGetColumns(table_name, l
 
              if table_name_new != ''
                  let table_alias = table_name
-                 let table_name  = table_name_new
+                 let table_name  = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
 
                  let list_idx = index(s:tbl_name, table_name, 0, &ignorecase)
                  if list_idx > -1
@@ -717,4 +739,3 @@ function! s:SQLCGetColumns(table_name, l
 
     return table_cols
 endfunction
-
--- a/runtime/autoload/vimball.vim
+++ b/runtime/autoload/vimball.vim
@@ -1,7 +1,7 @@
 " vimball.vim : construct a file containing both paths and files
 " Author:	Charles E. Campbell, Jr.
-" Date:		Dec 28, 2009
-" Version:	30
+" Date:		Apr 12, 2010
+" Version:	31
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
 " Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_vimball")
  finish
 endif
-let g:loaded_vimball = "v30"
+let g:loaded_vimball = "v31"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of vimball needs vim 7.2"
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,7 +1,7 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:		Jul 30, 2008
-" Version:	22
+" Date:		Apr 12, 2010
+" Version:	23
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:	Vim License  (see vim's :help license)
 " Copyright:    Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
@@ -16,13 +16,19 @@
 
 " ---------------------------------------------------------------------
 " Load Once: {{{1
+if &cp || exists("g:loaded_zip")
+ finish
+endif
+let g:loaded_zip= "v23"
+if v:version < 702
+ echohl WarningMsg
+ echo "***warning*** this version of zip needs vim 7.2"
+ echohl Normal
+ finish
+endif
 let s:keepcpo= &cpo
 set cpo&vim
-if &cp || exists("g:loaded_zip") || v:version < 700
- finish
-endif
 
-let g:loaded_zip     = "v22"
 let s:zipfile_escape = ' ?&;\'
 let s:ERROR          = 2
 let s:WARNING        = 1
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.2.  Last change: 2009 Nov 25
+*autocmd.txt*   For Vim version 7.2.  Last change: 2010 May 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.2.  Last change: 2009 Nov 11
+*change.txt*    For Vim version 7.2.  Last change: 2010 Mar 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -585,7 +585,7 @@ 4.2 Substitute						*:substitute*
 			":&r".  See |:s_flags| for [flags].
 
 								*&*
-&			Synonym for ":s//~/" (repeat last substitute).  Note
+&			Synonym for ":s" (repeat last substitute).  Note
 			that the flags are not remembered, thus it might
 			actually work differently.  You can use ":&&" to keep
 			the flags.
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 7.2.  Last change: 2009 Oct 25
+*cmdline.txt*   For Vim version 7.2.  Last change: 2010 May 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -522,6 +522,7 @@ followed by another Vim command:
     :registers
     :read !
     :scscope
+    :sign
     :tcl
     :tcldo
     :tclfile
--- a/runtime/doc/digraph.txt
+++ b/runtime/doc/digraph.txt
@@ -1,4 +1,4 @@
-*digraph.txt*   For Vim version 7.2.  Last change: 2008 Aug 06
+*digraph.txt*   For Vim version 7.2.  Last change: 2010 Apr 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 7.2.  Last change: 2010 Mar 10
+*eval.txt*	For Vim version 7.2.  Last change: 2010 May 14
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -67,7 +67,7 @@ the Number.  Examples: >
 	Number 123	-->	String "123"
 	Number 0	-->	String "0"
 	Number -1	-->	String "-1"
-
+							*octal*
 Conversion from a String to a Number is done by converting the first digits
 to a number.  Hexadecimal "0xf9" and Octal "017" numbers are recognized.  If
 the String doesn't start with digits, the result is zero.  Examples: >
@@ -1020,7 +1020,9 @@ A string constant accepts these special 
 \t	tab <Tab>
 \\	backslash
 \"	double quote
-\<xxx>	Special key named "xxx".  e.g. "\<C-W>" for CTRL-W.
+\<xxx>	Special key named "xxx".  e.g. "\<C-W>" for CTRL-W.  This is for use
+	in mappings, the 0x80 byte is escaped.  Don't use <Char-xxxx> to get a
+	utf-8 character, use \uxxxx as mentioned above.
 
 Note that "\xff" is stored as the byte 255, which may be invalid in some
 encodings.  Use "\u00ff" to store character 255 according to the current value
@@ -4944,6 +4946,8 @@ setqflist({list} [, {action}])				*setqf
 		item will not be handled as an error line.
 		If both "pattern" and "lnum" are present then "pattern" will
 		be used.
+		If you supply an empty {list}, the quickfix list will be
+		cleared.
 		Note that the list is not exactly the same as what
 		|getqflist()| returns.
 
@@ -6828,14 +6832,16 @@ 7. Commands						*expression-commands*
 <
 							*:exe* *:execute*
 :exe[cute] {expr1} ..	Executes the string that results from the evaluation
-			of {expr1} as an Ex command.  Multiple arguments are
-			concatenated, with a space in between.	{expr1} is
-			used as the processed command, command line editing
-			keys are not recognized.
+			of {expr1} as an Ex command.
+			Multiple arguments are concatenated, with a space in
+			between.  To avoid the extra space use the "."
+			operator to concatenate strings into one argument.
+			{expr1} is used as the processed command, command line
+			editing keys are not recognized.
 			Cannot be followed by a comment.
 			Examples: >
-		:execute "buffer " nextbuf
-		:execute "normal " count . "w"
+		:execute "buffer" nextbuf
+		:execute "normal" count . "w"
 <
 			":execute" can be used to append a command to commands
 			that don't accept a '|'.  Example: >
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -1,4 +1,4 @@
-*fold.txt*      For Vim version 7.2.  Last change: 2010 Feb 21
+*fold.txt*      For Vim version 7.2.  Last change: 2010 May 13
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -127,6 +127,9 @@ fold level.  But note that foldlevel() m
 yet.  And it returns the level at the start of the line, while a fold might
 end in that line.
 
+It may happened that folds are not updated properly.  You can use |zx| or |zX|
+to force updating folds.
+
 
 SYNTAX						*fold-syntax*
 
@@ -352,9 +355,13 @@ zv		View cursor line: Open just enough f
 							*zx*
 zx		Update folds: Undo manually opened and closed folds: re-apply
 		'foldlevel', then do "zv": View cursor line.
+		Also forces recomputing folds.  This is useful when using
+		'foldexpr' and the buffer is changed in a way that results in
+		folds not to be updated properly.
 
 							*zX*
 zX		Undo manually opened and closed folds: re-apply 'foldlevel'.
+		Also forces recomputing folds, like |zx|.
 
 							*zm*
 zm		Fold more: Subtract one from 'foldlevel'.  If 'foldlevel' was
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 7.2.  Last change: 2009 Jan 22
+*gui.txt*       For Vim version 7.2.  Last change: 2010 May 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -556,7 +556,7 @@ some modes:
 	mode		inserted	appended	~
 	Normal		nothing		nothing
 	Visual		<C-C>		<C-\><C-G>
-	Insert		<C-O>
+	Insert		<C-\><C-O>
 	Cmdline		<C-C>		<C-\><C-G>
 	Op-pending	<C-C>		<C-\><C-G>
 
@@ -571,7 +571,7 @@ is equal to: >
 
    :nmenu File.Next	:next^M
    :vmenu File.Next	^C:next^M^\^G
-   :imenu File.Next	^O:next^M
+   :imenu File.Next	^\^O:next^M
    :cmenu File.Next	^C:next^M^\^G
    :omenu File.Next	^C:next^M^\^G
 
--- a/runtime/doc/indent.txt
+++ b/runtime/doc/indent.txt
@@ -1,4 +1,4 @@
-*indent.txt*    For Vim version 7.2.  Last change: 2010 Jan 27
+*indent.txt*    For Vim version 7.2.  Last change: 2010 Mar 27
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -447,7 +447,7 @@ assume a 'shiftwidth' of 4.
 
 The defaults, spelled out in full, are:
 	cinoptions=>s,e0,n0,f0,{0,}0,^0,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,c3,C0,
-		   /0,(2s,us,U0,w0,W0,m0,j0,)20,*30,#0
+		   /0,(2s,us,U0,w0,W0,m0,j0,)20,*70,#0
 
 Vim puts a line in column 1 if:
 - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -1,4 +1,4 @@
-*motion.txt*    For Vim version 7.2.  Last change: 2009 Sep 15
+*motion.txt*    For Vim version 7.2.  Last change: 2010 May 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -315,6 +315,7 @@ CTRL-M		or					*CTRL-M* *<CR>*
 G			Goto line [count], default last line, on the first
 			non-blank character |linewise|.  If 'startofline' not
 			set, keep the same column.
+			G is a one of |jump-motions|.
 
 							*<C-End>*
 <C-End>			Goto line [count], default last line, on the last
@@ -328,6 +329,8 @@ gg			Goto line [count], default first li
 :[range]		Set the cursor on the last line number in [range].
 			[range] can also be just one line number, e.g., ":1"
 			or ":'m".
+			In contrast with |G| this command does not modify the
+			|jumplist|.
 							*N%*
 {count}%		Go to {count} percentage in the file, on the first
 			non-blank in the line |linewise|.  To compute the new
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.2.  Last change: 2010 Jan 06
+*options.txt*	For Vim version 7.2.  Last change: 2010 May 13
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -40,6 +40,7 @@ 1. Setting options					*set-option* *E76
 
 :se[t] no{option}	Toggle option: Reset, switch it off.
 
+							   *:set-!* *:set-inv*
 :se[t] {option}!   or
 :se[t] inv{option}	Toggle option: Invert value. {not in Vi}
 
@@ -696,8 +697,8 @@ A jump table for the options with a shor
 'autochdir' 'acd'	boolean (default off)
 			global
 			{not in Vi}
-			{only available when compiled with the
-			|+netbeans_intg| or |+sun_workshop| feature}
+			{only available when compiled with it, use
+			exists("+autochdir") to check}
 	When on, Vim will change the current working directory whenever you
 	open a file, switch buffers, delete a buffer or open/close a window.
 	It will change to the directory containing the file which was opened
@@ -5708,7 +5709,8 @@ A jump table for the options with a shor
 	in a file and echoed to the screen.  If the 'shell' option is "csh" or
 	"tcsh" after initializations, the default becomes "|& tee".  If the
 	'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
-	"2>&1| tee".  This means that stderr is also included.
+	"2>&1| tee".  This means that stderr is also included.  Before using
+	the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
 	The initialization of this option is done after reading the ".vimrc"
 	and the other initializations, so that when the 'shell' option is set
 	there, the 'shellpipe' option changes automatically, unless it was
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 7.2.  Last change: 2009 Dec 28
+*pi_netrw.txt*  For Vim version 7.2.  Last change: 2010 May 14
 
 	    -----------------------------------------------------
 	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
@@ -6,7 +6,7 @@
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
 
-Copyright: Copyright (C) 2009 Charles E Campbell, Jr	*netrw-copyright*
+Copyright: Copyright (C) 1999-2010 Charles E Campbell, Jr    *netrw-copyright*
 	   Permission is hereby granted to use and distribute this code, with
 	   or without modifications, provided that this copyright notice is
 	   copied with it. Like anything else that's free, netrw.vim,
@@ -19,9 +19,9 @@ Copyright: Copyright (C) 2009 Charles E 
 	   use of this software.
 
 
-*dav*    *ftp*    *netrw-file*  *Nread*    *rcp*    *scp*
-*davs*   *http*   *netrw.vim*   *Nsource*  *rsync*  *sftp*
-*fetch*  *netrw*  *network*     *Nwrite*
+		*dav*    *ftp*    *netrw-file*  *rcp*    *scp*
+		*davs*   *http*   *netrw.vim*   *rsync*  *sftp*
+		*fetch*  *netrw*  *network*
 
 ==============================================================================
 1. Contents						*netrw-contents* {{{1
@@ -158,7 +158,7 @@ There are more protocols supported by ne
 next section, |netrw-externapp|, on how to use these external applications with
 netrw and vim.
 
-PREVENTING LOADING
+PREVENTING LOADING						*netrw-noload*
 
 If you want to use plugins, but for some reason don't wish to use netrw, then
 you need to avoid loading both the plugin and the autoload portions of netrw.
@@ -169,7 +169,7 @@ You may do so by placing the following t
 <
 
 ==============================================================================
-3. Netrw Reference					*netrw-ref* {{{1
+3. Netrw Reference						*netrw-ref* {{{1
 
    Netrw supports several protocols in addition to scp and ftp as mentioned
    in |netrw-start|.  These include dav, fetch, http,... well, just look
@@ -642,18 +642,22 @@ Nread as shown in |netrw-transparent| (i
 instead, as appropriate) -- see |netrw-urls|.  In the explanations
 below, a {netfile} is an url to a remote file.
 
+						*:Nwrite*  *:Nw*
 :[range]Nw[rite]	Write the specified lines to the current
 		file as specified in b:netrw_lastfile.
+		(related: |netrw-nwrite|)
 
 :[range]Nw[rite] {netfile} [{netfile}]...
 		Write the specified lines to the {netfile}.
 
+						*:Nread*   *:Nr*
 :Nr[ead]	Read the lines from the file specified in b:netrw_lastfile
-		into the current buffer.
+		into the current buffer.  (related: |netrw-nread|)
 
 :Nr[ead] {netfile} {netfile}...
 		Read the {netfile} after the current line.
 
+						*:Nsource* *:Ns*
 :Ns[ource] {netfile}
 		Source the {netfile}.
 		To start up vim using a remote .vimrc, one may use
@@ -661,20 +665,24 @@ below, a {netfile} is an url to a remote
 		vim -u NORC -N
 		 --cmd "runtime plugin/netrwPlugin.vim"
 		 --cmd "source scp://HOSTNAME/.vimrc"
-<								*netrw-uidpass*
-:call NetUserPass()
+<		 (related: |netrw-source|)
+
+:call NetUserPass()				*NetUserPass()*
 		If g:netrw_uid and s:netrw_passwd don't exist,
 		this function will query the user for them.
+		(related: |netrw-userpass|)
 
 :call NetUserPass("userid")
 		This call will set the g:netrw_uid and, if
 		the password doesn't exist, will query the user for it.
+		(related: |netrw-userpass|)
 
 :call NetUserPass("userid","passwd")
 		This call will set both the g:netrw_uid and s:netrw_passwd.
 		The user-id and password are used by ftp transfers.  One may
 		effectively remove the user-id and password by using empty
 		strings (ie. "").
+		(related: |netrw-userpass|)
 
 :NetrwSettings  This command is described in |netrw-settings| -- used to
                 display netrw settings and change netrw behavior.
@@ -688,9 +696,7 @@ 8. Variables and Options		*netrw-options
 The <netrw.vim> script provides several variables which act as options to
 affect <netrw.vim>'s file transfer behavior.  These variables typically may be
 set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
-
 >
-
                         -------------
                         Netrw Options
                         -------------
@@ -1025,6 +1031,8 @@ QUICK REFERENCE: MAPS				*netrw-browse-m
 			to the netrw browser window.  See |g:netrw_retmap|.
 	<s-leftmouse>	(gvim only) like mf, will mark files
 
+	(to disable mouse buttons while browsing: |g:netrw_mousemaps|)
+
 				*netrw-quickcom* *netrw-quickcoms*
 QUICK REFERENCE: COMMANDS	*netrw-explore-cmds* *netrw-browse-cmds* {{{2
      :NetrwClean[!] ...........................................|netrw-clean|
@@ -1202,7 +1210,7 @@ Related Topics:
 	|netrw-qb| how to list bookmarks
 
 
-CHANGING TO A PREDECESSOR DIRECTORY	*netrw-u* *netrw-updir* {{{2
+CHANGING TO A PREDECESSOR DIRECTORY		*netrw-u* *netrw-updir* {{{2
 
 Every time you change to a new directory (new for the current session),
 netrw will save the directory in a recently-visited directory history
@@ -2022,7 +2030,8 @@ your browsing preferences.  (see also: |
 				 unix or g:netrw_cygwin set: : "ls -tlF"
 				 otherwise                     "dir"
 
-  *g:netrw_glob_escape*		='[]*?`{~$'
+  *g:netrw_glob_escape*		='[]*?`{~$'  (unix)
+				='[]*?`{$'  (windows
 				These characters in directory names are
 				escaped before applying glob()
 
@@ -2293,6 +2302,18 @@ the browser (where the cursor will remai
 By default, the split will be taken horizontally; one may use vertical
 splitting if one has set |g:netrw_preview| first.
 
+An interesting set of netrw settings is: >
+
+	let g:netrw_preview   = 1
+	let g:netrw_liststyle = 3
+	let g:netrw_winsize   = 30
+
+These will:
+	1. Make vertical splitting the default for previewing files
+	2. Make the default listing style "tree"
+	3. When a vertical preview window is opened, the directory listing
+	   will use only 30 columns; the rest of the window is used for the
+	   preview window.
 
 PREVIOUS WINDOW				*netrw-P* *netrw-prvwin* {{{2
 
@@ -2597,6 +2618,29 @@ 10. Problems and Fixes					*netrw-proble
 	     Multibyte encodings use two (or more) bytes per character.
 	     You may need to change |g:netrw_sepchr| and/or |g:netrw_xstrlen|.
 
+								*netrw-p13*
+	P13. I'm a Windows + putty + ssh user, and when I attempt to browse,
+	     the directories are missing trailing "/"s so netrw treats them
+	     as file transfers instead of as attempts to browse
+	     subdirectories.  How may I fix this?
+
+	     (mikeyao) If you want to use vim via ssh and putty under Windows,
+	     try combining the use of pscp/psftp with plink.  pscp/psftp will
+	     be used to connect and plink will be used to execute commands on
+	     the server, for example: list files and directory using 'ls'.
+
+	     These are the settings I use to do this:
+>
+	    " list files, it's the key setting, if you haven't set,
+	    " you will get a blank buffer
+	    let g:netrw_list_cmd = "plink HOSTNAME ls -Fa"
+	    " if you haven't add putty directory in system path, you should
+	    " specify scp/sftp command.  For examples:
+	    "let g:netrw_sftp_cmd = "d:\\dev\\putty\\PSFTP.exe"
+	    "let g:netrw_scp_cmd = "d:\\dev\\putty\\PSCP.exe"
+<
+
+
 ==============================================================================
 11. Debugging Netrw Itself				*netrw-debug* {{{1
 
@@ -2651,6 +2695,35 @@ which is loaded automatically at startup
 ==============================================================================
 12. History						*netrw-history* {{{1
 
+	v138: May 01, 2010 * added the bomb setting to the Save-Set-Restore
+			     option handling (for Tony M)
+			   * (Bram Moolenaar) netrw optionally sets cursorline
+			     (and sometimes cursorcolumn) for its display.
+			     This option setting was leaking through with
+			     remote file handling.
+	v137: Dec 28, 2009 * modified the preview window handling for
+			     vertically split windows.  The preview
+			     window will take up all but g:netrw_winsize
+			     columns of the original window; those 
+			     g:netrw_winsize columns will be used for
+			     the netrw listing.
+			   * (Simon Dambe) removed "~" from
+			     |g:netrw_glob_escape| under Windows
+			   * (Bram Moolenaar) modified test for status bar
+			     click with leftmouse.  Moved code to
+			     s:NetrwLeftmouse().
+	      Feb 24, 2010 * (for Jean Johner) added insert-mode maps; one
+			     can get into insert mode with netrw via
+			     ctrl-o :e .
+	      Mar 15, 2010 * (Dominique Pellé) Directory with backslashes such
+			     as foo\bar were not being entered/left properly
+	      Mar 15, 2010 * Using :Explore .. and causing two FocusGained
+			     events caused the directory to change.  Fixed.
+	      Mar 22, 2010 * Last fix caused problems for *//pat and */filepat
+			     searches.
+	      Mar 30, 2010 * With :set hidden and changing listing styles 8
+			     times, the tree listing buffer was being marked
+			     as modified upon exit.  Fixed.
 	v136: Jan 14, 2009 * extended |g:Netrw_funcref| to also handle lists
 			     of function references
 	      Jan 14, 2009 * (reported by Marvin Renich) with spell check
--- a/runtime/doc/pi_vimball.txt
+++ b/runtime/doc/pi_vimball.txt
@@ -1,4 +1,4 @@
-*pi_vimball.txt*	For Vim version 7.2.  Last change: 2009 Dec 28
+*pi_vimball.txt*	For Vim version 7.2.  Last change: 2010 Apr 12
 
 			       ----------------
 			       Vimball Archiver
@@ -156,6 +156,22 @@ PREVENTING LOADING
 		let g:loaded_vimballPlugin= 1
 		let g:loaded_vimball      = 1
 <
+WINDOWS							*vimball-windows*
+
+	Many vimball files are compressed with gzip.  Windows, unfortunately,
+	does not come provided with a tool to decompress gzip'ped files.
+	Fortunately, there are a number of tools available for Windows users
+	to un-gzip files:
+>
+	    Item     Tool/Suite   Free   Website
+	    ----     ----------   ----   -------
+	    7zip        tool       y     http://www.7-zip.org/
+	    Winzip      tool       n     http://www.winzip.com/downwz.htm
+	    unxutils    suite      y     http://unxutils.sourceforge.net/
+	    cygwin      suite      y     http://www.cygwin.com/
+	    GnuWin32    suite      y     http://gnuwin32.sourceforge.net/
+	    MinGW       suite      y     http://www.mingw.org/
+<
 
 ==============================================================================
 4. Vimball History					*vimball-history* {{{1
--- a/runtime/doc/pi_zip.txt
+++ b/runtime/doc/pi_zip.txt
@@ -1,4 +1,4 @@
-*pi_zip.txt*	For Vim version 7.2.  Last change: 2008 Jul 30
+*pi_zip.txt*	For Vim version 7.2.  Last change: 2010 Apr 12
 
 				+====================+
 				| Zip File Interface |
@@ -6,7 +6,7 @@
 
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright: Copyright (C) 2005-2008 Charles E Campbell, Jr *zip-copyright*
+Copyright: Copyright (C) 2005-2009 Charles E Campbell, Jr *zip-copyright*
            Permission is hereby granted to use and distribute this code,
 	   with or without modifications, provided that this copyright
 	   notice is copied with it. Like anything else that's free,
@@ -60,6 +60,16 @@ 2. Usage					*zip-usage* *zip-manual*
    file; by default: >
    	let g:zip_zipcmd= "zip"
 <
+   PREVENTING LOADING~
+
+   If for some reason you do not wish to use vim to examine zipped files,
+   you may put the following two variables into your <.vimrc> to prevent
+   the tar plugin from loading: >
+
+	let g:loaded_zipPlugin= 1
+	let g:loaded_zip      = 1
+<
+<
 
 ==============================================================================
 3. Additional Extensions					*zip-extension*
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -1,4 +1,4 @@
-*sign.txt*      For Vim version 7.2.  Last change: 2006 Apr 24
+*sign.txt*      For Vim version 7.2.  Last change: 2010 May 07
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
@@ -53,7 +53,7 @@ disappears again.  The color of the colu
 ==============================================================================
 2. Commands					*sign-commands* *:sig* *:sign*
 
-Here is an example that places a sign piet, displayed with the text ">>", in
+Here is an example that places a sign "piet", displayed with the text ">>", in
 line 23 of the current file: >
 	:sign define piet text=>> texthl=Search
 	:exe ":sign place 2 line=23 name=piet file=" . expand("%:p")
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.2.  Last change: 2009 Oct 28
+*spell.txt*	For Vim version 7.2.  Last change: 2010 Apr 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -468,8 +468,11 @@ Vim uses a binary file format for spelli
 the word list and keeps it small.
 						    *.aff* *.dic* *Myspell*
 You can create a Vim spell file from the .aff and .dic files that Myspell
-uses.  Myspell is used by OpenOffice.org and Mozilla.  You should be able to
-find them here:
+uses.  Myspell is used by OpenOffice.org and Mozilla. The OpenOffice .oxt 
+files are zip files which contain the .aff and .dic files. You should be able
+to find them here:
+	http://extensions.services.openoffice.org/dictionary
+The older, OpenOffice 2 files may be used if this doesn't work:
 	http://wiki.services.openoffice.org/wiki/Dictionaries
 You can also use a plain word list.  The results are the same, the choice
 depends on what word lists you can find.
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 7.2.  Last change: 2009 Dec 19
+*syntax.txt*	For Vim version 7.2.  Last change: 2010 May 14
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -3871,13 +3871,19 @@ This will open a new window containing a
 in their own color.
 
 						*:colo* *:colorscheme* *E185*
+:colo[rscheme]		Output the name of the currently active color scheme.
+			This is basically the same as >
+				:echo g:colors_name
+<			In case g:colors_name has not been defined :colo will
+			output "default".  When compiled without the |+eval|
+			feature it will output "unknown".
+
 :colo[rscheme] {name}	Load color scheme {name}.  This searches 'runtimepath'
 			for the file "colors/{name}.vim.  The first one that
 			is found is loaded.
 			To see the name of the currently active color scheme: >
-				:echo g:colors_name
-<			When using the default colors you will get an E121
-			error.
+				:colo
+<			The name is also stored in the g:colors_name variable.
 			Doesn't work recursively, thus you can't use
 			":colorscheme" in a color scheme script.
 			After the color scheme has been loaded the
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1767,6 +1767,12 @@ 90.5	usr_90.txt	/*90.5*
 :Nexplore	pi_netrw.txt	/*:Nexplore*
 :Next	editing.txt	/*:Next*
 :NoMatchParen	pi_paren.txt	/*:NoMatchParen*
+:Nr	pi_netrw.txt	/*:Nr*
+:Nread	pi_netrw.txt	/*:Nread*
+:Ns	pi_netrw.txt	/*:Ns*
+:Nsource	pi_netrw.txt	/*:Nsource*
+:Nw	pi_netrw.txt	/*:Nw*
+:Nwrite	pi_netrw.txt	/*:Nwrite*
 :P	various.txt	/*:P*
 :Pexplore	pi_netrw.txt	/*:Pexplore*
 :Print	various.txt	/*:Print*
@@ -2614,6 +2620,7 @@ 90.5	usr_90.txt	/*90.5*
 :search-args	tagsrch.txt	/*:search-args*
 :set	options.txt	/*:set*
 :set+=	options.txt	/*:set+=*
+:set-!	options.txt	/*:set-!*
 :set-&	options.txt	/*:set-&*
 :set-&vi	options.txt	/*:set-&vi*
 :set-&vim	options.txt	/*:set-&vim*
@@ -2621,6 +2628,7 @@ 90.5	usr_90.txt	/*90.5*
 :set-args	options.txt	/*:set-args*
 :set-browse	options.txt	/*:set-browse*
 :set-default	options.txt	/*:set-default*
+:set-inv	options.txt	/*:set-inv*
 :set-termcap	options.txt	/*:set-termcap*
 :set-verbose	options.txt	/*:set-verbose*
 :set^=	options.txt	/*:set^=*
@@ -4235,13 +4243,11 @@ N:	cmdline.txt	/*N:*
 N<Del>	various.txt	/*N<Del>*
 NL-used-for-Nul	pattern.txt	/*NL-used-for-Nul*
 NetBSD-backspace	options.txt	/*NetBSD-backspace*
+NetUserPass()	pi_netrw.txt	/*NetUserPass()*
 Normal	intro.txt	/*Normal*
 Normal-mode	intro.txt	/*Normal-mode*
-Nread	pi_netrw.txt	/*Nread*
-Nsource	pi_netrw.txt	/*Nsource*
 Number	eval.txt	/*Number*
 Nvi	intro.txt	/*Nvi*
-Nwrite	pi_netrw.txt	/*Nwrite*
 O	insert.txt	/*O*
 OS/2	os_os2.txt	/*OS\/2*
 OS2	os_os2.txt	/*OS2*
@@ -6620,6 +6626,7 @@ netrw-mx	pi_netrw.txt	/*netrw-mx*
 netrw-mz	pi_netrw.txt	/*netrw-mz*
 netrw-netrc	pi_netrw.txt	/*netrw-netrc*
 netrw-nexplore	pi_netrw.txt	/*netrw-nexplore*
+netrw-noload	pi_netrw.txt	/*netrw-noload*
 netrw-nread	pi_netrw.txt	/*netrw-nread*
 netrw-nwrite	pi_netrw.txt	/*netrw-nwrite*
 netrw-o	pi_netrw.txt	/*netrw-o*
@@ -6629,6 +6636,7 @@ netrw-p1	pi_netrw.txt	/*netrw-p1*
 netrw-p10	pi_netrw.txt	/*netrw-p10*
 netrw-p11	pi_netrw.txt	/*netrw-p11*
 netrw-p12	pi_netrw.txt	/*netrw-p12*
+netrw-p13	pi_netrw.txt	/*netrw-p13*
 netrw-p2	pi_netrw.txt	/*netrw-p2*
 netrw-p3	pi_netrw.txt	/*netrw-p3*
 netrw-p4	pi_netrw.txt	/*netrw-p4*
@@ -6679,7 +6687,6 @@ netrw-texplore	pi_netrw.txt	/*netrw-texp
 netrw-todo	pi_netrw.txt	/*netrw-todo*
 netrw-transparent	pi_netrw.txt	/*netrw-transparent*
 netrw-u	pi_netrw.txt	/*netrw-u*
-netrw-uidpass	pi_netrw.txt	/*netrw-uidpass*
 netrw-updir	pi_netrw.txt	/*netrw-updir*
 netrw-urls	pi_netrw.txt	/*netrw-urls*
 netrw-userpass	pi_netrw.txt	/*netrw-userpass*
@@ -6792,6 +6799,7 @@ object-select	motion.txt	/*object-select
 objects	index.txt	/*objects*
 obtaining-exted	netbeans.txt	/*obtaining-exted*
 ocaml.vim	syntax.txt	/*ocaml.vim*
+octal	eval.txt	/*octal*
 oldfiles-variable	eval.txt	/*oldfiles-variable*
 ole-activation	if_ole.txt	/*ole-activation*
 ole-eval	if_ole.txt	/*ole-eval*
@@ -8072,6 +8080,7 @@ vimball-extract	pi_vimball.txt	/*vimball
 vimball-history	pi_vimball.txt	/*vimball-history*
 vimball-intro	pi_vimball.txt	/*vimball-intro*
 vimball-manual	pi_vimball.txt	/*vimball-manual*
+vimball-windows	pi_vimball.txt	/*vimball-windows*
 vimdev	intro.txt	/*vimdev*
 vimdiff	diff.txt	/*vimdiff*
 vimfiles	options.txt	/*vimfiles*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.2.  Last change: 2010 Mar 17
+*todo.txt*      For Vim version 7.2.  Last change: 2010 May 14
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,20 +30,59 @@ be worked on, but only if you sponsor Vi
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-":s" summary in :folddo is not correct. (Jean Johner, 2010 Feb 20)
-Patch from Lech Lorens, 2010 Mar 13.
-
-Vim tries to set the background or foreground color in a terminal to -1.
-(Graywh)  Appears to happen with ":hi Normal ctermbg=NONE".
-Possible solution from Matt Wozniski, 2010 Mar 17.
+Cursor positioning wrong with 0x200e character. (John Becket, 2010 May 6)
+
+E315 when trying to change a file in FileChangedRO autocommand event.
+(Dominique Pelle, 2010 Apr 30)
+
+When directory "/tmp/tags" contains "tags1" and "tags2", setting 'tags' to
+"/tmp/tags/*" doesn't pick up these files.  (Simon Ruggier, 2010 Mar 17)
+
+":command Print echo 'print'" works, but ":Print" doesn't.  Builtin Print
+should be overruled. (Aaron Thoma)
+
+Editing a file with a ^M with 'ff' set to "mac", opening a help file, then the
+^M is displayed as ^J sometimes.  Getting 'ff' value from wrong window/buffer?
+
+Have a look at patch to enable screen access from Python. (Marko Mahnic, 2010
+Apr 12)
+
+Problem producing tags file when hebrew.frx is present.  It has a BOM.
+Results in E670. (Tony Mechelynck, 2010 May 2)
+
+'cindent' not correct when 'list' is set. (Zdravi Korusef, 2010 Apr 15)
+
+":helpgrep" does not put the cursor in the correct column when preceded by
+accented character. (Tony Mechelynck, 2010 Apr 15)
+
+Better Czech keymap. (Stepnem, 2010 May 4)  Use if no response from Jiri
+Tobisek.
+
+Use Dutch spell files from:
+http://extensions.services.openoffice.org/en/project/dict-nl
+Looks like this is newer than the new wordlist for Dutch:
+http://www.opentaal.org/bestanden/1_10/nl_NL-Pack
 
 Problem with cursor in the wrong column. (SungHyun Nam, 2010 Mar 11)
-Additional info by Dominique Pelle.
+Additional info by Dominique Pelle. (also on 2010 Apr 10)
+
+"make install" installs some of the .info files on Unix.
+(James Vega, 2010 Mar 30)
+
+Is ~/bin (literally) in $PATH supposed to work?  (Paul, 2010 March 29)
+Looks like only bash can do it. (Yakov Lerner)
+
+8   Add an event like CursorHold that is triggered repeatedly, not just once
+    after typing something.
+Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
+function that resets did_cursorhold.
 
 I often see pasted text (from Firefox, to Vim in xterm) appear twice.
 Also, Vim in xterm sometimes loses copy/paste ability (probably after running
 an external command).
 
+Jumplist doesn't work properly in Insert mode? (Jean Johner, 2010 Mar 20)
+
 Problem with transparent cmdline.  Also: Terminal title is wrong with
 non-ASCII character. (Lily White, 2010 Mar 7)
 
@@ -59,15 +98,12 @@ Shell not recognized properly if it ends
 Find tail?  Might have a / in argument.  Find space?  Might have space in
 path.
 
-Patch to support netbeans in Unix console Vim. (Xavier de Gaye, 2009 Apr 26)
-Now with Mercurial repository (2010 Jan 2)
-
-Crash when assigning s: to variable, pointer becomes invalid later.
-(Yukihiro Nakadaira, 2009 Oct 12, confirmed by Dominique Pelle)
-
 Test 69 breaks on MS-Windows, both 32 and 64 builds. (George Reilly, 2010 Feb
 26)
 
+":function f(x) keepjumps" creates a function where every command is executed
+like it has ":keepjumps" before it.
+
 Coverity: ask someone to create new user: Dominique.
 look into reported defects: http://scan.coverity.com/rung2.html
 
@@ -78,20 +114,16 @@ Problem with editing file in binary mode
 
 Support .xz with the xz program, like with lzma.
 
-Perl runtime files update. (Andy Lester, 2009 Aug 25)
-
-Gvimext patch to support wide file names. (Szabolcs Horvat 2008 Sep 10)
-
 Problem with stop directory in findfile(). (Adam Simpkins, 2009 Aug 26)
 
-Patch to support :browse for more commands. (Lech Lorens, 2009 Jul 18)
+Undo problem: line not removed as expected when using setline() from Insert
+mode. (Israel Chauca, 2010 May 13, more in second msg)
+Break undo when CTRL-R = changes the text?  Or save more lines?
 
 Change to C syntax folding to make it work much faster, but a bit less
 reliable. (Lech Lorens, 2009 Nov 9)  Enable with an option?
 Most time is spent in in_id_list().
 
-New wordlist for Dutch: http://www.opentaal.org/bestanden/1_10/nl_NL-Pack
-
 Check for unused functions, idea:
 http://blog.flameeyes.eu/2008/01/17/today-how-to-identify-unused-exported-functions-and-variables
 
@@ -102,17 +134,17 @@ When a:base in 'completefunc' starts wit
 not a string. (Sean Ma)  Need to add flag to call_func_retlist() to force a
 string value.
 
+There is no command line completion for ":lmap".
+
 Reproducible crash in syntax HL. (George Reilly, Dominique Pelle, 2009 May 9)
 
 Invalid read error in Farsi mode. (Dominique Pelle, 2009 Aug 2)
 
-Patch to add diff functionality to 2html.vim. (Christian Brabandt, 2009 Dec
-15)
-
 For running gvim on an USB stick: avoid the OLE registration.  Use a command
 line argument -noregister.
 
-submatch() may remove backslash. (Sergey Goldgaber, 2009 Jul 6)
+When a mapping exists both for insert mode and lang-insert mode, the last one
+doesn't work. (Tyru, 2010 May 6)  Or is this intended?
 
 Still a problem with ":make" in the wrong directory.  Caused by ":bufdo".
 (Ajit Thakkar, 2009 Jul 1) More information Jul 9, Jul 15.
@@ -148,10 +180,6 @@ Needs more work.
 
 Problem with <script> mappings (Andy Wokula, 2009 Mar 8)
 
-Patch to support netbeans for Mac. (Kazuki Sakamoto, 2009 Jun 25)
-
-Patch to support clipboard for Mac terminal. (Jjgod Jiang, 2009 Aug 1)
-
 When starting Vim with "gvim -f -u non_existent_file > foo.txt" there are a
 few control characters in the output. (Dale Wiles, 2009 May 28)
 
@@ -161,21 +189,27 @@ few control characters in the output. (D
 Status line containing winnr() isn't updated when splitting the window (Clark
 J.  Wang, 2009 Mar 31)
 
+When $VIMRUNTIME is set in .vimrc, need to reload lang files.  Already done
+for GTK, how about others? (Ron Aaron, 2010 Apr 10)
+
 Patch for vertical line at certain column position, 'guidecolumn' option.
 (Pankaj Garg, 2009 Apr 14, aka Lone, Apr 15)
 Update 2009 May 2, 'margincolumn'
-Alternative patch. (2010 Feb 2, Gregor Uhlenheuer)
+Alternative patch. (2010 Feb 2, Gregor Uhlenheuer, update Apr 18 2010)
+Fix by Lech Lorens, Apr 19
 
 Add different highlighting for a fold line depending on the fold level.
 Patch. (Noel Henson, 2009 Sep 13)
 
+Motif: Build on Ubuntu can't enter any text in dialog text fields.
+
 When 'ft' changes redraw custom status line.
 
 ":tab split fname" doesn't set the alternate file in the original window,
 because win_valid() always returns FALSE.  Below win_new_tabpage() in
 ex_docmd.c.
 
-Space before comma in function defenition not allowed: "function x(a , b)"
+Space before comma in function definition not allowed: "function x(a , b)"
 Give a more appropriate error message.  Add a remark to the docs.
 
 string_convert() should be able to convert between utf-8 and utf-16le.  Used
@@ -297,6 +331,10 @@ Completion for ":buf" doesn't work prope
 Allow patches to add something to version.c, like with an official patch, so
 that :version output shows which patches have been applied.
 
+Bug: in Ex mode (after "Q") backslash before line break, when yanked into a
+register and executed, results in <Nul>: instead of line break.
+(Konrad Schwarz, 2010 Apr 16)
+
 Have a look at patch for utf-8 line breaking. (Yongwei Wu, 2008 Mar 1, Mar 23)
 Now at: http://vimgadgets.sourceforge.net/liblinebreak/
 
@@ -402,12 +440,6 @@ command is not executed.  Fix by Ian Kel
 ":help s/~" jumps to *s/\~*, while ":help s/\~" doesn't find anything. (Tim
 Chase)  Fix by Ian Kelling, 2008 Jul 14.
 
-":colorscheme" without arguments should echo the current color scheme name.
-
-After using ":recover" or recovering a file in another way, ":x" doesn't save
-what you see.  Mark the buffer as modified?  Only when the text is actually
-different from the original file?
-
 Use "\U12345678" for 32 bit Unicode characters?  (Tony Mechelynck, 2009
 Apr 6)  Or use "\u(123456)", similar to Perl.
 
@@ -420,6 +452,7 @@ Patch for colorscheme submenu. (Juergen 
 Patch for Python 3 support. (Roland Puntaier, 2009 Sep 22)
 Includes changes for omnicompletion.
 Needs to be tested.
+Update 2010 Apr 20
 
 8   Some file systems are case-sensitive, some are not.  Turn
     CASE_INSENSITIVE_FILENAME into an option, at least for completion.
@@ -453,7 +486,6 @@ Patch from Vladimir Vichniakov, 2007 Apr
 Should clean up the whole function.  Also allow modifiers like <S-Char-32>?
 find_special_key() also has this problem.
 
-Problem with 'langmap' parsing. (James Vega, 2008 Jan 27)
 Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull,
 2008 May 14)
 
@@ -496,10 +528,6 @@ Mar 5)  Alternative: Kazuki Sakamoto, Ma
 Mac: trouble compiling with Motif, requires --disable-darwin. (Raf, 2008 Aug
 1)  Reply by Ben Schmidt.
 
-":emenu" works with the translated menu name.  Should also work with the
-untranslated name.  Would need to store both the English and the translated
-name.  Patch by Bjorn Winckler, 2008 Mar 30.
-
 C't: On utf-8 system, editing file with umlaut through Gnome results in URL
 with %nn%nn, which is taken as two characters instead of one.
 Try to reproduce at work.
@@ -732,12 +760,6 @@ Win32: When 'shell' is bash shellescape(
 Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape()
 only takes 'shellslash' into account.
 
-When file b is a link to file a and editing b twice you get the correct
-warning for existing swap file, but when trying to recover it doesn't find the
-swapfile. (Matt Wozniski, 2008 Aug 5)  Patch by Ian Kelling, 2008 Aug 11.
-Another patch by James Vega, 2008 Aug 20, again 2008 Sep 3.
-Also solves: Problem finding swap file for recovery. (Gautam Iyer, 2006 May 16)
-
 Pressing the 'pastetoggle' key doesn't update the statusline. (Jan Christoph
 Ebersbach, 2008 Feb 1)
 
@@ -1126,20 +1148,50 @@ Patch for adding "J" flag to 'cinoptions
 Vim 7.3:
 -   Use latest autoconf (2.65)
 -   Use NSIS 2.45, it includes Windows 7 support.
+	Include "RequestExecutionLevel highest"
+	Ron's version: http://dev.ronware.org/p/vim/finfo?name=gvim.nsi
+-   Supply a 64 bit version of gvimext.dll for 64 bit windows.
+    http://code.google.com/p/vim-win3264/
+    Gvim can be 32 bit.
 -   Include all files in distro, no "extra" and "lang" package.
 -   Create Mercurial repository.
 -   Easier/standard way to disable default plugins.
 -   Add patch for 'relativenumber' option?  Markus Heidelberg, 2008 Jun 27.
+    Update 2010 May 2.
+8   Persistent undo: store undo in a file.  Patch by Jordan Lewis, 2009 Feb
+    20.  Repost 2009 Nov 16.
+    -> disable by default and add remark that it's new and may fail.
+    Testing remarks by Christian Brabandt, 2010 May 1:
+	- doesn't work well with symlinks (Jordan will look into it)
+	- old undo files tend to pile up
+        - :rundo should output a message (Jordan will fix this)
+    Older ideas:
+    Use timestamps, so that a version a certain time ago can be found and info
+    before some time/date can be flushed. 'undopersist' gives maximum time to
+    keep undo: "3h", "1d", "2w", "1y", etc.  For the file use dot and
+    extension: ".filename.un~" (like swapfile but "un~" instead of "swp").
 -   Add blowfish encryption.  Openssl has an implementation.  Also by Paul
     Kocher (LGPL), close to original.  Mohsin also has some ideas.
     Take four bytes and turn them into unsigned to avoid byte-order problems.
     Need to buffer up to 7 bytes to align on 8 byte boundaries.
-    Patch from Moshin, 2010 Mar 15.
+    Patch from Moshin: 2010 May 8, addition May 9.
+-   Patch to support netbeans in Unix console Vim. (Xavier de Gaye, 2009 Apr
+    26) Now with Mercurial repository (2010 Jan 2)
 -   ":{range}source": source the lines from the current file.
 	You can already yank lines and use :@" to execute them.
 	Most of do_source() would not be used, need a new function.
 	It's easy when not doing breakpoints or profiling.
 - Patch for Lisp support with ECL (Mikael Jansson, 2008 Oct 25)
+- Gvimext patch to support wide file names. (Szabolcs Horvat 2008 Sep 10)
+- Patch to support netbeans for Mac. (Kazuki Sakamoto, 2009 Jun 25)
+- Patch to support clipboard for Mac terminal. (Jjgod Jiang, 2009 Aug 1)
+- Patch to support :browse for more commands. (Lech Lorens, 2009 Jul 18)
+- Patch to add diff functionality to 2html.vim. (Christian Brabandt, 2009 Dec
+  15)
+- After using ":recover" or recovering a file in another way, ":x" doesn't
+  save what you see.  Mark the buffer as modified?  Only when the text is
+  actually different from the original file.
+- Add fixes for 7.2 to version7.txt
 
 
 More patches:
@@ -2161,6 +2213,7 @@ Most interesting new features to be adde
     http://vimshell.wana.at
 -   Add Lua interface? (Wolfgang Oertl) patch by Luis Carvalho, 2008 Sep 5
 	Patch for Make_ming.mak from Paul Moore (2008 Sep 1)
+      http://vim-iflua.googlecode.com/files/vim72-lua-0.7.patch.gz
 8   Add a command to jump to a certain kind of tag.  Allow the user to specify
     values for the optional fields.  E.g., ":tag size type=m".
     Also allow specifying the file and command, so that the result of
@@ -3225,8 +3278,6 @@ 8   Add "TagJumpFile" autocommand: When 
 8   Use another option than 'updatetime' for the CursorHold event.  The two
     things are unrelated for the user (but the implementation is more
     difficult).
-8   Add an event like CursorHold that is triggered repeatedly, not just once
-    after typing something.
 7   Add autocommand event for when a buffer cannot be abandoned.  So that the
     user can define the action taking (autowrite, dialog, fail) based on the
     kind of file. (Yakov Lerner)  Or is BufLeave sufficient?
@@ -3964,13 +4015,6 @@ 8   See ":e" as a change operation, find
     storing the differences.
 8   Search for pattern in undo tree, showing when it happened and the text
     state, so that you can jump to it.
--   Persistent undo: store undo in a file.  Patch by Jordan Lewis, 2009 Feb
-    20.  Repost 2009 Nov 16.
-    Older ideas:
-    Use timestamps, so that a version a certain time ago can be found and info
-    before some time/date can be flushed. 'undopersist' gives maximum time to
-    keep undo: "3h", "1d", "2w", "1y", etc.  For the file use dot and
-    extension: ".filename.un~" (like swapfile but "un~" instead of "swp").
 -   Make it possible to undo all the commands from a mapping, including a
     trailing unfinished command, e.g. for ":map K iX^[r".
 -   When accidentally hitting "R" instead of Ctrl-R, further Ctrl-R is not
--- a/runtime/doc/usr_27.txt
+++ b/runtime/doc/usr_27.txt
@@ -1,4 +1,4 @@
-*usr_27.txt*	For Vim version 7.2.  Last change: 2007 Nov 10
+*usr_27.txt*	For Vim version 7.2.  Last change: 2010 Mar 28
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -40,7 +40,7 @@ matches.)
 
 	:set noignorecase
 
-But lets keep it set, and search for "INCLUDE".  It will match exactly the
+But let's keep it set, and search for "INCLUDE".  It will match exactly the
 same text as "include" did.  Now set the 'smartcase' option: >
 
 	:set ignorecase smartcase
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -1,4 +1,4 @@
-*various.txt*   For Vim version 7.2.  Last change: 2009 Nov 11
+*various.txt*   For Vim version 7.2.  Last change: 2010 May 13
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.2.  Last change: 2009 Dec 02
+*version7.txt*  For Vim version 7.2.  Last change: 2010 May 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -56,6 +56,11 @@ Changed					|changed-7.2|
 Added					|added-7.2|
 Fixed					|fixed-7.2|
 
+VERSION 7.3			|version-7.3|
+Changed					|changed-7.3|
+Added					|added-7.3|
+Fixed					|fixed-7.3|
+
 ==============================================================================
 INCOMPATIBLE CHANGES				*incompatible-7*
 
@@ -7142,5 +7147,34 @@ Pelle)
 
 Mac: Could not build with Perl interface.
 
+==============================================================================
+VERSION 7.3						*version-7.3*
+
+This section is about improvements made between version 7.2 and 7.3.
+
+This is a bug-fix release and there are a few new features.
+
+
+Changed							*changed-7.3*
+-------
+
+The extra and language files are no longer distributed separately.
+The files for all systems are included in one distribution.
+
+
+Added							*added-7.3*
+-----
+
+New syntax files:
+
+New spell files:
+
+Breton. (Dominique Pelle)
+
+
+Fixed							*fixed-7.3*
+-----
+
+
 
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -1,4 +1,4 @@
-*windows.txt*   For Vim version 7.2.  Last change: 2009 Sep 23
+*windows.txt*   For Vim version 7.2.  Last change: 2010 Apr 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -467,11 +467,11 @@ CTRL-W =	Make all windows (almost) equal
 
 :res[ize] -N					*:res* *:resize* *CTRL-W_-*
 CTRL-W -	Decrease current window height by N (default 1).
-		If used after 'vertical': decrease width by N.
+		If used after |:vertical|: decrease width by N.
 
 :res[ize] +N					*CTRL-W_+*
 CTRL-W +	Increase current window height by N (default 1).
-		If used after 'vertical': increase width by N.
+		If used after |:vertical|: increase width by N.
 
 :res[ize] [N]
 CTRL-W CTRL-_					*CTRL-W_CTRL-_* *CTRL-W__*
--- 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:	2010 Feb 24
+" Last Change:	2010 May 14
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -324,6 +324,9 @@ au BufNewFile,BufRead */.calendar/*,
 " C#
 au BufNewFile,BufRead *.cs			setf cs
 
+" Cabal
+au BufNewFile,BufRead *.cabal       		setf cabal
+
 " Cdrdao TOC
 au BufNewFile,BufRead *.toc			setf cdrtoc
 
@@ -333,6 +336,9 @@ au BufNewFile,BufRead etc/cdrdao.conf,et
 " Cfengine
 au BufNewFile,BufRead cfengine.conf		setf cfengine
 
+" ChaiScript
+au BufRead,BufNewFile *.chai			setf chaiscript
+
 " Comshare Dimension Definition Language
 au BufNewFile,BufRead *.cdl			setf cdl
 
@@ -764,7 +770,7 @@ au BufNewFile,BufRead *.haml			setf haml
 au BufNewFile,BufRead *.hsc,*.hsm		setf hamster
 
 " Haskell
-au BufNewFile,BufRead *.hs			setf haskell
+au BufNewFile,BufRead *.hs,*.hs-boot 		setf haskell
 au BufNewFile,BufRead *.lhs			setf lhaskell
 au BufNewFile,BufRead *.chs			setf chaskell
 
@@ -1381,6 +1387,10 @@ au BufNewFile,BufRead *.g			setf pccts
 " PPWizard
 au BufNewFile,BufRead *.it,*.ih			setf ppwiz
 
+" Obj 3D file format
+" TODO: is there a way to avoid MS-Windows Object files?
+au BufNewFile,BufRead *.obj         		setf obj
+
 " Oracle Pro*C/C++
 au BufNewFile,BufRead *.pc			setf proc
 
@@ -1938,6 +1948,9 @@ au BufNewFile,BufRead *.sdc			setf sdc
 " Sudoers
 au BufNewFile,BufRead /etc/sudoers,sudoers.tmp	setf sudoers
 
+" SVG (Scalable Vector Graphics)
+au BufNewFile,BufRead *.svg			setf svg
+
 " If the file has an extension of 't' and is in a directory 't' then it is
 " almost certainly a Perl test file.
 " If the first line starts with '#' and contains 'perl' it's probably a Perl
--- a/runtime/ftplugin/debchangelog.vim
+++ b/runtime/ftplugin/debchangelog.vim
@@ -1,14 +1,14 @@
 " Vim filetype plugin file (GUI menu, folding and completion)
-" Language:	Debian Changelog
-" Maintainer:	Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Former Maintainers:	Michael Piefel <piefel@informatik.hu-berlin.de>
-"			Stefano Zacchiroli <zack@debian.org>
-" Last Change:	2008-03-08
-" License:	GNU GPL, version 2.0 or later
-" URL:		http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/ftplugin/debchangelog.vim;hb=debian
+" Language:     Debian Changelog
+" Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+" Former Maintainers:   Michael Piefel <piefel@informatik.hu-berlin.de>
+"                       Stefano Zacchiroli <zack@debian.org>
+" Last Change:  2010-04-29
+" License:      GNU GPL, version 2.0 or later
+" URL:          http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/ftplugin/debchangelog.vim
 
 " Bug completion requires apt-listbugs installed for Debian packages or
-" python-launchpad-bugs installed for Ubuntu packages
+" python-launchpadlib installed for Ubuntu packages
 
 if exists("b:did_ftplugin")
   finish
@@ -329,17 +329,26 @@ fun! DebCompleteBugs(findstart, base)
       python << EOF
 import vim
 try:
-    from launchpadbugs import connector
-    buglist = connector.ConnectBugList()
-    bl = list(buglist('https://bugs.launchpad.net/ubuntu/+source/%s' % vim.eval('pkgsrc')))
-    bl.sort(None, int)
-    liststr = '['
-    for bug in bl:
-        liststr += "'#%d - %s'," % (int(bug), bug.summary.replace('\'', '\'\''))
-    liststr += ']'
-    vim.command('silent let bug_lines = %s' % liststr)
+    from launchpadlib.launchpad import Launchpad
+    from lazr.restfulclient.errors import HTTPError
+    # login anonymously
+    lp = Launchpad.login_anonymously('debchangelog.vim', 'production')
+    ubuntu = lp.distributions['ubuntu']
+    try:
+        sp = ubuntu.getSourcePackage(name=vim.eval('pkgsrc'))
+        status = ('New', 'Incomplete', 'Confirmed', 'Triaged',
+                  'In Progress', 'Fix Committed')
+        tasklist = sp.searchTasks(status=status, order_by='id')
+        liststr = '['
+        for task in tasklist:
+            bug = task.bug
+            liststr += "'#%d - %s'," % (bug.id, bug.title.replace('\'', '\'\''))
+        liststr += ']'
+        vim.command('silent let bug_lines = %s' % liststr.encode('utf-8'))
+    except HTTPError:
+        pass
 except ImportError:
-    vim.command('echoerr \'python-launchpad-bugs needs to be installed to use Launchpad bug completion\'')
+    vim.command('echoerr \'python-launchpadlib >= 1.5.4 needs to be installed to use Launchpad bug completion\'')
 EOF
     else
       if ! filereadable('/usr/sbin/apt-listbugs')
--- a/runtime/ftplugin/debcontrol.vim
+++ b/runtime/ftplugin/debcontrol.vim
@@ -1,9 +1,9 @@
 " Vim filetype plugin file (GUI menu and folding)
-" Language:	Debian control files
-" Maintainer:	Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Former Maintainer:	Pierre Habouzit <madcoder@debian.org>
-" Last Change:	2008-03-08
-" URL:		http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/ftplugin/debcontrol.vim;hb=debian
+" Language:     Debian control files
+" Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+" Former Maintainer:    Pierre Habouzit <madcoder@debian.org>
+" Last Change:  2008-03-08
+" URL:          http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/ftplugin/debcontrol.vim
 
 " Do these settings once per buffer
 if exists("b:did_ftplugin")
new file mode 100644
--- /dev/null
+++ b/runtime/indent/chaiscript.vim
@@ -0,0 +1,50 @@
+" Vim indent file
+" Language:     ChaiScript
+" Maintainer:	Jason Turner <lefticus 'at' gmail com>
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetChaiScriptIndent()
+setlocal autoindent
+
+" Only define the function once.
+if exists("*GetChaiScriptIndent")
+  finish
+endif
+
+function! GetChaiScriptIndent()
+  " Find a non-blank line above the current line.
+  let lnum = prevnonblank(v:lnum - 1)
+
+  " Hit the start of the file, use zero indent.
+  if lnum == 0
+    return 0
+  endif
+
+  " Add a 'shiftwidth' after lines that start a block:
+  " lines containing a {
+  let ind = indent(lnum)
+  let flag = 0
+  let prevline = getline(lnum)
+  if prevline =~ '^.*{.*'
+    let ind = ind + &shiftwidth
+    let flag = 1
+  endif
+
+  " Subtract a 'shiftwidth' after lines containing a { followed by a }
+  " to keep it balanced
+  if flag == 1 && prevline =~ '.*{.*}.*'
+    let ind = ind - &shiftwidth
+  endif
+
+  " Subtract a 'shiftwidth' on lines ending with }
+  if getline(v:lnum) =~ '^\s*\%(}\)'
+    let ind = ind - &shiftwidth
+  endif
+
+  return ind
+endfunction
new file mode 100644
--- /dev/null
+++ b/runtime/indent/perl6.vim
@@ -0,0 +1,136 @@
+" Vim indent file
+" Language:     Perl 6
+" Maintainer:   Andy Lester <andy@petdance.com>
+" URL:          http://github.com/petdance/vim-perl/tree/master
+" Last Change:  2009-07-04
+" Contributors: Andy Lester <andy@petdance.com>
+"               Hinrik Ă–rn SigurĂ°sson <hinrik.sig@gmail.com>
+"
+" Adapted from Perl indent file by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
+
+" Suggestions and improvements by :
+"   Aaron J. Sherman (use syntax for hints)
+"   Artem Chuprina (play nice with folding)
+" TODO:
+" This file still relies on stuff from the Perl 5 syntax file, which Perl 6
+" does not use.
+"
+" Things that are not or not properly indented (yet) :
+" - Continued statements
+"     print "foo",
+"       "bar";
+"     print "foo"
+"       if bar();
+" - Multiline regular expressions (m//x)
+" (The following probably needs modifying the perl syntax file)
+" - qw() lists
+" - Heredocs with terminators that don't match \I\i*
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
+
+" Is syntax highlighting active ?
+let b:indent_use_syntax = has("syntax")
+
+setlocal indentexpr=GetPerl6Indent()
+
+" we reset it first because the Perl 5 indent file might have been loaded due
+" to a .pl/pm file extension, and indent files don't clean up afterwards
+setlocal indentkeys&
+
+setlocal indentkeys+=0=,0),0],0>,0»,0=or,0=and
+if !b:indent_use_syntax
+    setlocal indentkeys+=0=EO
+endif
+
+" Only define the function once.
+if exists("*GetPerl6Indent")
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+function GetPerl6Indent()
+
+    " Get the line to be indented
+    let cline = getline(v:lnum)
+
+    " Indent POD markers to column 0
+    if cline =~ '^\s*=\L\@!'
+        return 0
+    endif
+
+    " Don't reindent coments on first column
+    if cline =~ '^#'
+        return 0
+    endif
+
+    " Get current syntax item at the line's first char
+    let csynid = ''
+    if b:indent_use_syntax
+        let csynid = synIDattr(synID(v:lnum,1,0),"name")
+    endif
+
+    " Don't reindent POD and heredocs
+    if csynid =~ "^p6Pod"
+        return indent(v:lnum)
+    endif
+
+
+    " Now get the indent of the previous perl line.
+
+    " Find a non-blank line above the current line.
+    let lnum = prevnonblank(v:lnum - 1)
+    " Hit the start of the file, use zero indent.
+    if lnum == 0
+        return 0
+    endif
+    let line = getline(lnum)
+    let ind = indent(lnum)
+    " Skip heredocs, POD, and comments on 1st column
+    if b:indent_use_syntax
+        let skippin = 2
+        while skippin
+            let synid = synIDattr(synID(lnum,1,0),"name")
+            if (synid =~ "^p6Pod" || synid =~ "p6Comment")
+                let lnum = prevnonblank(lnum - 1)
+                if lnum == 0
+                    return 0
+                endif
+                let line = getline(lnum)
+                let ind = indent(lnum)
+                let skippin = 1
+            else
+                let skippin = 0
+            endif
+        endwhile
+    endif
+
+        if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$'
+            let ind = ind + &sw
+        endif
+        if cline =~ '^\s*[)}\]»>]'
+            let ind = ind - &sw
+        endif
+
+    " Indent lines that begin with 'or' or 'and'
+    if cline =~ '^\s*\(or\|and\)\>'
+        if line !~ '^\s*\(or\|and\)\>'
+            let ind = ind + &sw
+        endif
+    elseif line =~ '^\s*\(or\|and\)\>'
+        let ind = ind - &sw
+    endif
+
+    return ind
+
+endfunction
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
--- a/runtime/keymap/bulgarian-bds.vim
+++ b/runtime/keymap/bulgarian-bds.vim
@@ -1,14 +1,14 @@
 " Vim keymap file for Bulgarian and Russian characters, "bds" layout.
 " Most of it can be used with both utf-8 and cp1251 file encodings, except
-" the accented vowels which can only be stored in utf-8.
+" the accented characters which can only be stored in utf-8.
 " This file itself is in utf-8.
 
 " Maintainer: Boyko Bantchev <boykobb@gmail.com>
 " URI: http://www.math.bas.bg/bantchev/vim/bulgarian-bds.vim
-" Last Changed: 2008 June 28
+" Last Changed: 2010 May 4
 
 " This keymap corresponds to what is called Bulgarian standard typewriter
-" keyboard layout (BDS, БДС).
+" keyboard layout, or "БДС".
 "
 " Note that, in addition to the Bulgarian alphabet, the BDS layout prescribes
 " the presence of the following characters:
@@ -17,7 +17,7 @@
 "        without having to leave Cyrillic mode.
 "
 " Some punctuation characters present in ascii are mapped in BDS to keys
-" different from the ones they occupy in the qwerty layout, because the latter
+" different from the ones they occupy in the QWERTY layout, because the latter
 " keys are used to type other characters.
 "
 " In this keymap, also defined (besides BDS) are:
@@ -28,12 +28,16 @@
 "     —  The quotation marks „ “ ” †’ (used in the Bulgarian and English
 "        quotation styles), as well as « » (Russian quotation style).
 "     —  The characters §, №, – (en-dash), — (em-dash), …, •, ·, ±, °, ¬,
-"        ¤, and €.
+"        ¤, €, ‰, †, ‡, and ¶.
 "
-" The keymap also defines key combinations for accented vowels in Bulgarian.
+" The keymap also defines key combinations for grave and acute accents.
+" (Grave accent is used in Bulgarian, acute in Russian, but both accents
+" apply to other languages as well.)
 "
 " For details of what key or key combination maps to what character, please
-" see below the map table itself.
+" see below the map itself.
+"
+" See also http://www.math.bas.bg/bantchev/vim/kbdbul.html (in Bulgarian).
 
 scriptencoding utf-8
 
@@ -139,21 +143,13 @@ q       ,       COMMA
 ~~      ¬       NOT SIGN
 @@      ¤       CURRENCY SIGN
 $$      €       EURO SIGN
+%%      ‰       PER MILLE SIGN
++|      †       DAGGER
+++      ‡       DOUBLE DAGGER
+||      ¶       PILCROW SIGN
 
-" accented vowels cannot map onto cp1251 – use utf-8 file encoding
-`D      ĐĚ€       CYRILLIC CAPITAL LETTER A + GRAVE ACCENT (COMPOSED)
-`d      Đ°Ě€       CYRILLIC SMALL LETTER A + GRAVE ACCENT (COMPOSED)
-`E      Đ•Ě€       CYRILLIC CAPITAL LETTER IE + GRAVE ACCENT (COMPOSED)
-`e      ѐ       CYRILLIC SMALL LETTER IE + GRAVE ACCENT (COMPOSED)
-`R      ĐĚ€       CYRILLIC CAPITAL LETTER I + GRAVE ACCENT (COMPOSED)
-`r      ѝ       CYRILLIC SMALL LETTER I + GRAVE ACCENT (COMPOSED)
-`F      О̀       CYRILLIC CAPITAL LETTER O + GRAVE ACCENT (COMPOSED)
-`f      о̀       CYRILLIC SMALL LETTER O + GRAVE ACCENT (COMPOSED)
-`W      ĐŁĚ€       CYRILLIC CAPITAL LETTER U + GRAVE ACCENT (COMPOSED)
-`w      ŃĚ€       CYRILLIC SMALL LETTER U + GRAVE ACCENT (COMPOSED)
-`C      ĐŞĚ€       CYRILLIC CAPITAL LETTER HARD SIGN + GRAVE ACCENT (COMPOSED)
-`c      ŃŠĚ€       CYRILLIC SMALL LETTER HARD SIGN + GRAVE ACCENT (COMPOSED)
-`Z      Ю̀       CYRILLIC CAPITAL LETTER YU + GRAVE ACCENT (COMPOSED)
-`z      ŃŽĚ€       CYRILLIC SMALL LETTER YU + GRAVE ACCENT (COMPOSED)
-`S      ĐŻĚ€       CYRILLIC CAPITAL LETTER YA + GRAVE ACCENT (COMPOSED)
-`s      ŃŹĚ€       CYRILLIC SMALL LETTER YA + GRAVE ACCENT (COMPOSED)
+" Accented characters cannot map onto cp1251 – use utf-8 file encoding.
+" To apply an accent to a letter, type the corresponding key combination
+" to the immediate right of that letter.
+^`      <char-0x300>    COMBINING GRAVE ACCENT
+^'      <char-0x301>    COMBINING ACUTE ACCENT
--- a/runtime/keymap/bulgarian-phonetic.vim
+++ b/runtime/keymap/bulgarian-phonetic.vim
@@ -5,15 +5,13 @@
 
 " Maintainer:   Boyko Bantchev <boykobb@gmail.com>
 " URI: http://www.math.bas.bg/bantchev/vim/bulgarian-phonetic.vim
-" Last Changed: 2008 June 28
-
-" For a rationale for the layout and additional info on typing in Bulgarian
-" using Unicode Cyrillic please see:
+" Last Changed: 2010 May 4
 
 " This keymap corresponds to what is called "phonetic layout" in Bulgaria:
-" Cyrillic letters tend to be mapped to their Latin homophones, if present.
-" Most keys corresponding to punctuation characters are left unmapped, so
-" they retain their usual (qwerty) meanings in Cyrillic typing.
+" Cyrillic letters tend to be mapped to their Latin homophones wherever
+" there are ones.  Most keys corresponding to punctuation characters are
+" left unmapped, so they retain their usual (QWERTY) meanings when typing
+" Cyrillic.
 "
 " In addition to the Bulgarian alphabet, the keymap makes accessible the
 " following characters:
@@ -24,12 +22,16 @@
 "     —  The quotation marks „ “ ” †’ (used in the Bulgarian and English
 "        quotation styles), as well as « » (Russian quotation style).
 "     —  The characters §, №, – (en-dash), — (em-dash), …, •, ·, ±, °, ¬,
-"        ¤, and €.
+"        ¤, €, ‰, †, ‡, and ¶.
 "
-" The keymap also defines key combinations for accented vowels in Bulgarian.
+" The keymap also defines key combinations for grave and acute accents.
+" (Grave accent is used in Bulgarian, acute in Russian, but both accents
+" apply to other languages as well.)
 "
 " For details of what key or key combination maps to what character, please
-" see below the map table itself.
+" see below the map itself.
+"
+" See also http://www.math.bas.bg/bantchev/vim/kbdbul.html (in Bulgarian).
 
 scriptencoding utf-8
 
@@ -121,21 +123,13 @@ q       ŃŹ       CYRILLIC SMALL LETTER YA
 ~~      ¬       NOT SIGN
 @@      ¤       CURRENCY SIGN
 $$      €       EURO SIGN
+%%      ‰       PER MILLE SIGN
++|      †       DAGGER
+++      ‡       DOUBLE DAGGER
+||      ¶       PILCROW SIGN
 
-" accented vowels cannot map onto cp1251 – use utf-8 file encoding
-'A      ĐĚ€       CYRILLIC CAPITAL LETTER A + GRAVE ACCENT (COMPOSED)
-'a      Đ°Ě€       CYRILLIC SMALL LETTER A + GRAVE ACCENT (COMPOSED)
-'E      Đ•Ě€       CYRILLIC CAPITAL LETTER IE + GRAVE ACCENT (COMPOSED)
-'e      ѐ       CYRILLIC SMALL LETTER IE + GRAVE ACCENT (COMPOSED)
-'I      ĐĚ€       CYRILLIC CAPITAL LETTER I + GRAVE ACCENT (COMPOSED)
-'i      ѝ       CYRILLIC SMALL LETTER I + GRAVE ACCENT (COMPOSED)
-'O      О̀       CYRILLIC CAPITAL LETTER O + GRAVE ACCENT (COMPOSED)
-'o      о̀       CYRILLIC SMALL LETTER O + GRAVE ACCENT (COMPOSED)
-'U      ĐŁĚ€       CYRILLIC CAPITAL LETTER U + GRAVE ACCENT (COMPOSED)
-'u      ŃĚ€       CYRILLIC SMALL LETTER U + GRAVE ACCENT (COMPOSED)
-'Y      ĐŞĚ€       CYRILLIC CAPITAL LETTER HARD SIGN + GRAVE ACCENT (COMPOSED)
-'y      ŃŠĚ€       CYRILLIC SMALL LETTER HARD SIGN + GRAVE ACCENT (COMPOSED)
-'|      Ю̀       CYRILLIC CAPITAL LETTER YU + GRAVE ACCENT (COMPOSED)
-'\\     ŃŽĚ€       CYRILLIC SMALL LETTER YU + GRAVE ACCENT (COMPOSED)
-'Q      ĐŻĚ€       CYRILLIC CAPITAL LETTER YA + GRAVE ACCENT (COMPOSED)
-'q      ŃŹĚ€       CYRILLIC SMALL LETTER YA + GRAVE ACCENT (COMPOSED)
+" Accented characters cannot map onto cp1251 – use utf-8 file encoding.
+" To apply an accent to a letter, type the corresponding key combination
+" to the immediate right of that letter.
+^`      <char-0x300>    COMBINING GRAVE ACCENT
+^'      <char-0x301>    COMBINING ACUTE ACCENT
--- a/runtime/lang/menu_sr.utf-8.vim
+++ b/runtime/lang/menu_sr.utf-8.vim
@@ -1,3 +1,3 @@
 " Menu Translations:	Serbian
 
-source <sfile>:p:h/menu_sr_yu.utf-8.vim
+source <sfile>:p:h/menu_sr_rs.utf-8.vim
new file mode 100644
--- /dev/null
+++ b/runtime/lang/menu_sr_rs.ascii.vim
@@ -0,0 +1,258 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change:	Fri, 30 May 2003 12:15:30 -0400
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+  finish
+endif
+let did_menu_trans = 1
+
+" Help menu
+menutrans &Help		      Pomo&c
+menutrans &Overview<Tab><F1>  &Pregled<Tab><F1>
+menutrans &User\ Manual       &Uputstvo\ za\ korisnike
+menutrans &How-to\ links      &Kako\ da\.\.\.
+menutrans &Find		      &Nadji
+menutrans &Credits	      &Zasluge
+menutrans Co&pying	      P&reuzimanje
+menutrans O&rphans	      &Sirocici
+menutrans &Version	      &Verzija
+menutrans &About	      &O\ programu
+
+" File menu
+menutrans &File			    &Datoteka
+menutrans &Open\.\.\.<Tab>:e	    &Otvori\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &Podeli-otvori\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew	    &Nova<Tab>:enew
+menutrans &Close<Tab>:close	    &Zatvori<Tab>:close
+menutrans &Save<Tab>:w		    &Sacuvaj<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav  Sacuvaj\ &kao\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\.  Podeli\ i\ &uporedi\ sa\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Po&deli\ i\ prepravi\ sa\.\.\.
+menutrans &Print		    Sta&mpaj
+menutrans Sa&ve-Exit<Tab>:wqa	    Sacuvaj\ i\ za&vrsi<Tab>:wqa
+menutrans E&xit<Tab>:qa		    K&raj<Tab>:qa
+
+" Edit menu
+menutrans &Edit			 &Uredjivanje
+menutrans &Undo<Tab>u		 &Vrati<Tab>u
+menutrans &Redo<Tab>^R		 &Povrati<Tab>^R
+menutrans Rep&eat<Tab>\.	 P&onovi<Tab>\.
+menutrans Cu&t<Tab>"+x		 Ise&ci<Tab>"+x
+menutrans &Copy<Tab>"+y		 &Kopiraj<Tab>"+y
+menutrans &Paste<Tab>"+gP	 &Ubaci<Tab>"+gP
+menutrans &Paste<Tab>"+P	&Ubaci<Tab>"+gP
+menutrans Put\ &Before<Tab>[p	 Stavi\ pre&d<Tab>[p
+menutrans Put\ &After<Tab>]p	 Stavi\ &iza<Tab>]p
+menutrans &Delete<Tab>x		 Iz&brisi<Tab>x
+menutrans &Select\ all<Tab>ggVG  Izaberi\ sv&e<Tab>ggVG
+menutrans &Find\.\.\.		 &Nadji\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Nadji\ i\ &zameni\.\.\.
+menutrans Settings\ &Window	 P&rozor\ podesavanja
+menutrans &Global\ Settings	 Op&sta\ podesavanja
+menutrans F&ile\ Settings	 Podesavanja\ za\ da&toteke
+menutrans &Shiftwidth		 &Pomeraj
+menutrans Soft\ &Tabstop	 &Meka\ tabulacija
+menutrans Te&xt\ Width\.\.\.	 &Sirina\ teksta\.\.\.
+menutrans &File\ Format\.\.\.	 &Vrsta\ datoteke\.\.\.
+menutrans C&olor\ Scheme	 Bo&je
+menutrans &Keymap		 Pres&likavanje\ tastature
+menutrans Select\ Fo&nt\.\.\.	 Izbor\ &fonta\.\.\.
+
+" Edit/Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Naglasi\ &obrazce\ (da/ne)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Zanemari\ \velicinu\ &slova\ (da/ne)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Proveri\ pratecu\ &zagradu\ (da/ne)<Tab>:set\ sm!
+menutrans &Context\ lines  Vidljivi\ &redovi
+menutrans &Virtual\ Edit   Virtuelno\ &uredjivanje
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!   Rezim\ u&nosa\ (da/ne)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ saglasno\ (da/ne)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Putanja\ &pretrage\.\.\.
+menutrans Ta&g\ Files\.\.\.   &Datoteke\ oznaka\.\.\.
+menutrans Toggle\ &Toolbar    Linija\ sa\ &alatkama\ (da/ne)
+menutrans Toggle\ &Bottom\ Scrollbar   Donja\ l&inija\ klizanja\ (da/ne)
+menutrans Toggle\ &Left\ Scrollbar  &Leva\ linija\ klizanja\ (da/ne)
+menutrans Toggle\ &Right\ Scrollbar &Desna\ linija\ klizanja\ (da/ne)
+
+" Edit/Global Settings/Virtual Edit
+menutrans Never		      Nikad
+menutrans Block\ Selection    Izbor\ bloka
+menutrans Insert\ mode	      Rezim\ unosa
+menutrans Block\ and\ Insert  Blok\ i\ unos
+menutrans Always	      Uvek
+
+" Edit/File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   Redni\ &brojevi\ (da/ne)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!      Rezim\ &liste\ (da/ne)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!      Obavijanje\ &redova\ (da/ne)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   Prelomi\ &na\ rec\ (da/ne)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!	   Razmaci\ umesto\ &tabulacije\ (da/ne)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!    Auto-&uvlacenje\ (da/ne)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!      &Ce-uvlacenje\ (da/ne)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None Nijedan
+
+" Tools menu
+menutrans &Tools	&Alatke
+menutrans &Jump\ to\ this\ tag<Tab>g^] Skoci\ na\ &ovu\ oznaku<Tab>g^]
+menutrans Jump\ &back<Tab>^T	 Skoci\ &natrag<Tab>^T
+menutrans Build\ &Tags\ File	 Izgradi\ &datoteku\ oznaka
+menutrans &Folding	      &Podvijanje
+menutrans Create\ &Fold<Tab>zf		  S&tvori\ podvijutak<Tab>zf
+menutrans &Delete\ Fold<Tab>zd		  O&brisi\ podvijutak<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD	  Obrisi\ sve\ po&dvijutke<Tab>zD
+menutrans Fold\ column\ &width		  Sirina\ &reda\ podvijutka
+menutrans &Diff		      &Uporedjivanje
+menutrans &Make<Tab>:make     'mak&e'<Tab>:make
+menutrans &List\ Errors<Tab>:cl     Spisak\ &gresaka<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!  Sp&isak\ poruka<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn	    S&ledeca\ greska<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp  Pre&thodna\ greska<Tab>:cp
+menutrans &Older\ List<Tab>:cold    Stari\ spisa&k<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew    No&vi\ spisak<Tab>:cnew
+menutrans Error\ &Window	    Prozor\ sa\ g&reskama
+menutrans &Set\ Compiler	    I&zaberi\ prevodioca
+menutrans &Convert\ to\ HEX<Tab>:%!xxd	   Pretvori\ u\ &HEKS<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r    Vr&ati\ u\ prvobitan\ oblik<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi   &Omoguci/prekini\ podvijanje<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv      &Pokazi\ red\ sa\ kursorom<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Pokazi\ &samo\ red\ sa\ kursorom<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm   &Zatvori\ vise\ podvijutaka<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM    Zatvori\ s&ve\ podvijutke<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr    Otvori\ vis&e\ podvijutaka<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR     O&tvori\ sve\ podvijutke<Tab>zR
+menutrans Fold\ Met&hod		       &Nacin\ podvijanja
+
+" Tools/Folding/Fold Method
+menutrans M&anual       &Rucno
+menutrans I&ndent       &Uvucenost
+menutrans E&xpression   &Izraz
+menutrans S&yntax       &Sintaksa
+"menutrans &Diff
+menutrans Ma&rker       &Oznaka
+
+" Tools/Diff
+menutrans &Update       &Azuriraj
+menutrans &Get\ Block   &Prihvati\ izmenu
+menutrans &Put\ Block   Pre&baci\ izmenu
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin   &Azuriraj<Tab>:cwin
+menutrans &Open<Tab>:copen    &Otvori<Tab>:copen
+menutrans &Close<Tab>:cclose  &Zatvori<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers	   &Baferi
+menutrans &Refresh\ menu   &Azuriraj
+menutrans Delete	   &Obrisi
+menutrans &Alternate	   A&lternativni
+menutrans &Next		   &Sledeci
+menutrans &Previous	   &Prethodni
+menutrans [No\ File]	   [Nema\ datoteke]
+
+" Window menu
+menutrans &Window		    &Prozor
+menutrans &New<Tab>^Wn		    &Novi<Tab>^Wn
+menutrans S&plit<Tab>^Ws	    &Podeli<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^    Podeli\ sa\ &alternativnim<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv   Podeli\ &uspravno<Tab>^Wv
+menutrans Split\ File\ E&xplorer    Podeli\ za\ pregled\ &datoteka
+menutrans &Close<Tab>^Wc	    &Zatvori<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo  Zatvori\ &ostale<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww       &Sledeci<Tab>^Ww
+"menutrans P&revious<Tab>^WW	  P&rethodni<Tab>^WW
+menutrans Move\ &To		    Pre&mesti
+menutrans Rotate\ &Up<Tab>^WR	    &Kruzno\ nagore<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr     Kruzno\ nadol&e<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W=	    &Iste\ velicine<Tab>^W=
+menutrans &Max\ Height<Tab>^W_	    Maksimalna\ &visina<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_     Minima&lna\ visina<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|	    Maksimalna\ &sirina<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|     Minimalna\ si&rina<Tab>^W1\|
+
+" Window/Move To
+menutrans &Top<Tab>^WK		 &Vrh<Tab>^WK
+menutrans &Bottom<Tab>^WJ	 &Podnozje<Tab>^WJ
+menutrans &Left\ side<Tab>^WH	 U&levo<Tab>^WH
+menutrans &Right\ side<Tab>^WL	 U&desno<Tab>^WL
+
+" The popup menu
+menutrans &Undo		      &Vrati
+menutrans Cu&t		      &Iseci
+menutrans &Copy		      &Kopiraj
+menutrans &Paste	      &Ubaci
+menutrans &Delete	      I&zbrisi
+menutrans Select\ Blockwise   Biraj\ &pravougaono
+menutrans Select\ &Word       Izaberi\ &rec
+menutrans Select\ &Line       Izaberi\ r&ed
+menutrans Select\ &Block      Izaberi\ &blok
+menutrans Select\ &All	      Izaberi\ &sve
+
+" The GUI toolbar
+if has("toolbar")
+  if exists("*Do_toolbar_tmenu")
+    delfun Do_toolbar_tmenu
+  endif
+  fun Do_toolbar_tmenu()
+    tmenu ToolBar.Open     Ucitaj
+    tmenu ToolBar.Save     Sacuvaj
+    tmenu ToolBar.SaveAll  Sacuvaj sve
+    tmenu ToolBar.Print    Stampaj
+    tmenu ToolBar.Undo     Vrati
+    tmenu ToolBar.Redo     Povrati
+    tmenu ToolBar.Cut      Iseci
+    tmenu ToolBar.Copy     Kopiraj
+    tmenu ToolBar.Paste    Ubaci
+    tmenu ToolBar.Find     Nadji
+    tmenu ToolBar.FindNext Nadji sledeci
+    tmenu ToolBar.FindPrev Nadji prethodni
+    tmenu ToolBar.Replace  Zameni
+    tmenu ToolBar.New      Novi
+    tmenu ToolBar.WinSplit Podeli prozor
+    tmenu ToolBar.WinMax   Maksimalna visina
+    tmenu ToolBar.WinMin   Minimalna visina
+    tmenu ToolBar.WinVSplit   Podeli uspravno
+    tmenu ToolBar.WinMaxWidth Maksimalna sirina
+    tmenu ToolBar.WinMinWidth Minimalna sirina
+    tmenu ToolBar.WinClose Zatvori prozor
+    tmenu ToolBar.LoadSesn Ucitaj seansu
+    tmenu ToolBar.SaveSesn Sacuvaj seansu
+    tmenu ToolBar.RunScript   Izvrsi spis
+    tmenu ToolBar.Make     'make'
+    tmenu ToolBar.Shell    Operativno okruzenje
+    tmenu ToolBar.RunCtags Napravi oznake
+    tmenu ToolBar.TagJump  Idi na oznaku
+    tmenu ToolBar.Help     Pomoc
+    tmenu ToolBar.FindHelp Nadji objasnjenje
+  endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaksa
+menutrans &Show\ filetypes\ in\ menu  Izbor\ 'filetype'\ iz\ &menija
+menutrans Set\ '&syntax'\ only   Pode&si\ 'syntax'\ samo
+menutrans Set\ '&filetype'\ too  Podesi\ 'filetype'\ &takodje
+menutrans &Off       &Iskljuceno
+menutrans &Manual    &Rucno
+menutrans A&utomatic    &Automatski
+menutrans on/off\ for\ &This\ file     Da/ne\ za\ ovu\ &datoteku
+menutrans Co&lor\ test     Provera\ &boja
+menutrans &Highlight\ test Provera\ isti&canja
+menutrans &Convert\ to\ HTML  Pretvori\ &u\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "Unesite naredbu ili rec cije pojasnjenje trazite:\n\nDodajte i_ za naredbe unosa (npr. i_CTRL-X)\nDodajte c_ za naredbe komandnog rezima (npr. s_<Del>)\nDodajte ' za imena opcija (npr. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "Unesite put pretrage za datoteke\nRazdvojite zarezima imena direktorijuma."
+
+let g:menutrans_tags_dialog = "Unesite imena datoteka sa oznakama\nRazdvojite zarezima imena."
+
+let g:menutrans_textwidth_dialog = "Unesite novu sirinu teksta (0 sprecava prelom)"
+
+let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
+
+let menutrans_no_file = "[Nema datoteke]"
new file mode 100644
--- /dev/null
+++ b/runtime/lang/menu_sr_rs.iso_8859-2.vim
@@ -0,0 +1,259 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change:	Fri, 30 May 2003 12:04:48 -0400
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+  finish
+endif
+let did_menu_trans = 1
+scriptencoding iso8859-2
+
+" Help menu
+menutrans &Help		      Pomo&ć
+menutrans &Overview<Tab><F1>  &Pregled<Tab><F1>
+menutrans &User\ Manual       &Uputstvo\ za\ korisnike
+menutrans &How-to\ links      &Kako\ da\.\.\.
+menutrans &Find		      &Nađi
+menutrans &Credits	      &Zasluge
+menutrans Co&pying	      P&reuzimanje
+menutrans O&rphans	      &Siročići
+menutrans &Version	      &Verzija
+menutrans &About	      &O\ programu
+
+" File menu
+menutrans &File			    &Datoteka
+menutrans &Open\.\.\.<Tab>:e	    &Otvori\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &Podeli-otvori\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew	    &Nova<Tab>:enew
+menutrans &Close<Tab>:close	    &Zatvori<Tab>:close
+menutrans &Save<Tab>:w		    &Sačuvaj<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav  Sačuvaj\ &kao\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\.  Podeli\ i\ &uporedi\ sa\.\.\.
+menutrans Split\ Patched\ &By\.\.\. Po&deli\ i\ prepravi\ sa\.\.\.
+menutrans &Print		    ©ta&mpaj
+menutrans Sa&ve-Exit<Tab>:wqa	    Sačuvaj\ i\ za&vrąi<Tab>:wqa
+menutrans E&xit<Tab>:qa		    K&raj<Tab>:qa
+
+" Edit menu
+menutrans &Edit			 &Uređivanje
+menutrans &Undo<Tab>u		 &Vrati<Tab>u
+menutrans &Redo<Tab>^R		 &Povrati<Tab>^R
+menutrans Rep&eat<Tab>\.	 P&onovi<Tab>\.
+menutrans Cu&t<Tab>"+x		 Ise&ci<Tab>"+x
+menutrans &Copy<Tab>"+y		 &Kopiraj<Tab>"+y
+menutrans &Paste<Tab>"+gP	 &Ubaci<Tab>"+gP
+menutrans &Paste<Tab>"+P	&Ubaci<Tab>"+gP
+menutrans Put\ &Before<Tab>[p	 Stavi\ pre&d<Tab>[p
+menutrans Put\ &After<Tab>]p	 Stavi\ &iza<Tab>]p
+menutrans &Delete<Tab>x		 Iz&briąi<Tab>x
+menutrans &Select\ all<Tab>ggVG  Izaberi\ sv&e<Tab>ggVG
+menutrans &Find\.\.\.		 &Nađi\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Nađi\ i\ &zameni\.\.\.
+menutrans Settings\ &Window	 P&rozor\ podeąavanja
+menutrans &Global\ Settings	 Op&ąta\ podeąavanja
+menutrans F&ile\ Settings	 Podeąavanja\ za\ da&toteke
+menutrans &Shiftwidth		 &Pomeraj
+menutrans Soft\ &Tabstop	 &Meka\ tabulacija
+menutrans Te&xt\ Width\.\.\.	 &©irina\ teksta\.\.\.
+menutrans &File\ Format\.\.\.	 &Vrsta\ datoteke\.\.\.
+menutrans C&olor\ Scheme	 Bo&je
+menutrans &Keymap		 Pres&likavanje\ tastature
+menutrans Select\ Fo&nt\.\.\.	 Izbor\ &fonta\.\.\.
+
+" Edit/Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Naglasi\ &obrazce\ (da/ne)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Zanemari\ \veličinu\ &slova\ (da/ne)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Proveri\ prateću\ &zagradu\ (da/ne)<Tab>:set\ sm!
+menutrans &Context\ lines  Vidljivi\ &redovi
+menutrans &Virtual\ Edit   Virtuelno\ &uređivanje
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!	Reľim\ u&nosa\ (da/ne)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ saglasno\ (da/ne)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. Putanja\ &pretrage\.\.\.
+menutrans Ta&g\ Files\.\.\.   &Datoteke\ oznaka\.\.\.
+menutrans Toggle\ &Toolbar    Linija\ sa\ &alatkama\ (da/ne)
+menutrans Toggle\ &Bottom\ Scrollbar   Donja\ l&inija\ klizanja\ (da/ne)
+menutrans Toggle\ &Left\ Scrollbar  &Leva\ linija\ klizanja\ (da/ne)
+menutrans Toggle\ &Right\ Scrollbar &Desna\ linija\ klizanja\ (da/ne)
+
+" Edit/Global Settings/Virtual Edit
+menutrans Never		      Nikad
+menutrans Block\ Selection    Izbor\ bloka
+menutrans Insert\ mode	      Reľim\ unosa
+menutrans Block\ and\ Insert  Blok\ i\ unos
+menutrans Always	      Uvek
+
+" Edit/File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   Redni\ &brojevi\ (da/ne)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!	   Reľim\ &liste\ (da/ne)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!	   Obavijanje\ &redova\ (da/ne)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   Prelomi\ &na\ reč\ (da/ne)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!	   Razmaci\ umesto\ &tabulacije\ (da/ne)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!	Auto-&uvlačenje\ (da/ne)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!	   &Ce-uvlačenje\ (da/ne)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None Nijedan
+
+" Tools menu
+menutrans &Tools	&Alatke
+menutrans &Jump\ to\ this\ tag<Tab>g^] Skoči\ na\ &ovu\ oznaku<Tab>g^]
+menutrans Jump\ &back<Tab>^T	 Skoči\ &natrag<Tab>^T
+menutrans Build\ &Tags\ File	 Izgradi\ &datoteku\ oznaka
+menutrans &Folding	      &Podvijanje
+menutrans Create\ &Fold<Tab>zf		  S&tvori\ podvijutak<Tab>zf
+menutrans &Delete\ Fold<Tab>zd		  O&briąi\ podvijutak<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD	  Obriąi\ sve\ po&dvijutke<Tab>zD
+menutrans Fold\ column\ &width		  ©irina\ &reda\ podvijutka
+menutrans &Diff		      &Upoređivanje
+menutrans &Make<Tab>:make     'mak&e'<Tab>:make
+menutrans &List\ Errors<Tab>:cl     Spisak\ &greąaka<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!  Sp&isak\ poruka<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn	    S&ledeća\ greąka<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp  Pre&thodna\ greąka<Tab>:cp
+menutrans &Older\ List<Tab>:cold    Stari\ spisa&k<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew    No&vi\ spisak<Tab>:cnew
+menutrans Error\ &Window	    Prozor\ sa\ g&reąkama
+menutrans &Set\ Compiler	    I&zaberi\ prevodioca
+menutrans &Convert\ to\ HEX<Tab>:%!xxd	   Pretvori\ u\ &HEKS<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r    Vr&ati\ u\ prvobitan\ oblik<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi   &Omogući/prekini\ podvijanje<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv	  &Pokaľi\ red\ sa\ kursorom<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Pokaľi\ &samo\ red\ sa\ kursorom<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm   &Zatvori\ viąe\ podvijutaka<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM    Zatvori\ s&ve\ podvijutke<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr    Otvori\ vią&e\ podvijutaka<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR     O&tvori\ sve\ podvijutke<Tab>zR
+menutrans Fold\ Met&hod		       &Način\ podvijanja
+
+" Tools/Folding/Fold Method
+menutrans M&anual	&Ručno
+menutrans I&ndent	&Uvučenost
+menutrans E&xpression	&Izraz
+menutrans S&yntax	&Sintaksa
+"menutrans &Diff
+menutrans Ma&rker	&Oznaka
+
+" Tools/Diff
+menutrans &Update	&Aľuriraj
+menutrans &Get\ Block	&Prihvati\ izmenu
+menutrans &Put\ Block	Pre&baci\ izmenu
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin   &Aľuriraj<Tab>:cwin
+menutrans &Open<Tab>:copen    &Otvori<Tab>:copen
+menutrans &Close<Tab>:cclose  &Zatvori<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers	   &Baferi
+menutrans &Refresh\ menu   &Aľuriraj
+menutrans Delete	   &Obriąi
+menutrans &Alternate	   A&lternativni
+menutrans &Next		   &Sledeći
+menutrans &Previous	   &Prethodni
+menutrans [No\ File]	   [Nema\ datoteke]
+
+" Window menu
+menutrans &Window		    &Prozor
+menutrans &New<Tab>^Wn		    &Novi<Tab>^Wn
+menutrans S&plit<Tab>^Ws	    &Podeli<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^    Podeli\ sa\ &alternativnim<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv   Podeli\ &uspravno<Tab>^Wv
+menutrans Split\ File\ E&xplorer    Podeli\ za\ pregled\ &datoteka
+menutrans &Close<Tab>^Wc	    &Zatvori<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo  Zatvori\ &ostale<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww       &Sledeći<Tab>^Ww
+"menutrans P&revious<Tab>^WW	  P&rethodni<Tab>^WW
+menutrans Move\ &To		    Pre&mesti
+menutrans Rotate\ &Up<Tab>^WR	    &Kruľno\ nagore<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr     Kruľno\ nadol&e<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W=	    &Iste\ veličine<Tab>^W=
+menutrans &Max\ Height<Tab>^W_	    Maksimalna\ &visina<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_     Minima&lna\ visina<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|	    Maksimalna\ &ąirina<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|     Minimalna\ ąi&rina<Tab>^W1\|
+
+" Window/Move To
+menutrans &Top<Tab>^WK		 &Vrh<Tab>^WK
+menutrans &Bottom<Tab>^WJ	 &Podnoľje<Tab>^WJ
+menutrans &Left\ side<Tab>^WH	 U&levo<Tab>^WH
+menutrans &Right\ side<Tab>^WL	 U&desno<Tab>^WL
+
+" The popup menu
+menutrans &Undo		      &Vrati
+menutrans Cu&t		      &Iseci
+menutrans &Copy		      &Kopiraj
+menutrans &Paste	      &Ubaci
+menutrans &Delete	      I&zbriąi
+menutrans Select\ Blockwise   Biraj\ &pravougaono
+menutrans Select\ &Word       Izaberi\ &reč
+menutrans Select\ &Line       Izaberi\ r&ed
+menutrans Select\ &Block      Izaberi\ &blok
+menutrans Select\ &All	      Izaberi\ &sve
+
+" The GUI toolbar
+if has("toolbar")
+  if exists("*Do_toolbar_tmenu")
+    delfun Do_toolbar_tmenu
+  endif
+  fun Do_toolbar_tmenu()
+    tmenu ToolBar.Open	   Učitaj
+    tmenu ToolBar.Save	   Sačuvaj
+    tmenu ToolBar.SaveAll  Sačuvaj sve
+    tmenu ToolBar.Print    ©tampaj
+    tmenu ToolBar.Undo	   Vrati
+    tmenu ToolBar.Redo	   Povrati
+    tmenu ToolBar.Cut	   Iseci
+    tmenu ToolBar.Copy	   Kopiraj
+    tmenu ToolBar.Paste    Ubaci
+    tmenu ToolBar.Find	   Nađi
+    tmenu ToolBar.FindNext Nađi sledeći
+    tmenu ToolBar.FindPrev Nađi prethodni
+    tmenu ToolBar.Replace  Zameni
+    tmenu ToolBar.New	   Novi
+    tmenu ToolBar.WinSplit Podeli prozor
+    tmenu ToolBar.WinMax   Maksimalna visina
+    tmenu ToolBar.WinMin   Minimalna visina
+    tmenu ToolBar.WinVSplit   Podeli uspravno
+    tmenu ToolBar.WinMaxWidth Maksimalna ąirina
+    tmenu ToolBar.WinMinWidth Minimalna ąirina
+    tmenu ToolBar.WinClose Zatvori prozor
+    tmenu ToolBar.LoadSesn Učitaj seansu
+    tmenu ToolBar.SaveSesn Sačuvaj seansu
+    tmenu ToolBar.RunScript   Izvrąi spis
+    tmenu ToolBar.Make	   'make'
+    tmenu ToolBar.Shell    Operativno okruľenje
+    tmenu ToolBar.RunCtags Napravi oznake
+    tmenu ToolBar.TagJump  Idi na oznaku
+    tmenu ToolBar.Help	   Pomoć
+    tmenu ToolBar.FindHelp Nađi objaąnjenje
+  endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &Sintaksa
+menutrans &Show\ filetypes\ in\ menu  Izbor\ 'filetype'\ iz\ &menija
+menutrans Set\ '&syntax'\ only	 Pode&si\ 'syntax'\ samo
+menutrans Set\ '&filetype'\ too  Podesi\ 'filetype'\ &takođe
+menutrans &Off	     &Isključeno
+menutrans &Manual    &Ručno
+menutrans A&utomatic	&Automatski
+menutrans on/off\ for\ &This\ file     Da/ne\ za\ ovu\ &datoteku
+menutrans Co&lor\ test	   Provera\ &boja
+menutrans &Highlight\ test Provera\ isti&canja
+menutrans &Convert\ to\ HTML  Pretvori\ &u\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "Unesite naredbu ili reč čije pojaąnjenje traľite:\n\nDodajte i_ za naredbe unosa (npr. i_CTRL-X)\nDodajte c_ za naredbe komandnog reľima (npr. s_<Del>)\nDodajte ' za imena opcija (npr. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "Unesite put pretrage za datoteke\nRazdvojite zarezima imena direktorijuma."
+
+let g:menutrans_tags_dialog = "Unesite imena datoteka sa oznakama\nRazdvojite zarezima imena."
+
+let g:menutrans_textwidth_dialog = "Unesite novu ąirinu teksta (0 sprečava prelom)"
+
+let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
+
+let menutrans_no_file = "[Nema datoteke]"
new file mode 100644
--- /dev/null
+++ b/runtime/lang/menu_sr_rs.iso_8859-5.vim
@@ -0,0 +1,259 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change:	Fri, 30 May 2003 12:02:07 -0400
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+  finish
+endif
+let did_menu_trans = 1
+scriptencoding iso8859-5
+
+" Help menu
+menutrans &Help		      żŢÜŢ&ű
+menutrans &Overview<Tab><F1>  &żŕŐÓŰŐÔ<Tab><F1>
+menutrans &User\ Manual       &ĂßăâáâŇŢ\ ×Đ\ ÚŢŕŘáÝŘÚŐ
+menutrans &How-to\ links      &şĐÚŢ\ ÔĐ\.\.\.
+menutrans &Find		      &˝ĐňŘ
+menutrans &Credits	      &·ĐáŰăÓŐ
+menutrans Co&pying	      ż&ŕŐă×ŘÜĐúŐ
+menutrans O&rphans	      &ÁŘŕŢçŘűŘ
+menutrans &Version	      &˛Őŕ×ŘřĐ
+menutrans &About	      &ľ\ ßŕŢÓŕĐÜă
+
+" File menu
+menutrans &File			    &´ĐâŢâŐÚĐ
+menutrans &Open\.\.\.<Tab>:e	    &ľâŇŢŕŘ\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &żŢÔŐŰŘ-ŢâŇŢŕŘ\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew	    &˝ŢŇĐ<Tab>:enew
+menutrans &Close<Tab>:close	    &·ĐâŇŢŕŘ<Tab>:close
+menutrans &Save<Tab>:w		    &ÁĐçăŇĐř<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav  ÁĐçăŇĐř\ &ÚĐŢ\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\.  żŢÔŐŰŘ\ Ř\ &ăßŢŕŐÔŘ\ áĐ\.\.\.
+menutrans Split\ Patched\ &By\.\.\. żŢ&ÔŐŰŘ\ Ř\ ßŕŐßŕĐŇŘ\ áĐ\.\.\.
+menutrans &Print		    ČâĐ&ÜßĐř
+menutrans Sa&ve-Exit<Tab>:wqa	    ÁĐçăŇĐř\ Ř\ ×Đ&ŇŕčŘ<Tab>:wqa
+menutrans E&xit<Tab>:qa		    ş&ŕĐř<Tab>:qa
+
+" Edit menu
+menutrans &Edit			 &ĂŕŐňŘŇĐúŐ
+menutrans &Undo<Tab>u		 &˛ŕĐâŘ<Tab>u
+menutrans &Redo<Tab>^R		 &żŢŇŕĐâŘ<Tab>^R
+menutrans Rep&eat<Tab>\.	 ż&ŢÝŢŇŘ<Tab>\.
+menutrans Cu&t<Tab>"+x		 ¸áŐ&ćŘ<Tab>"+x
+menutrans &Copy<Tab>"+y		 &şŢßŘŕĐř<Tab>"+y
+menutrans &Paste<Tab>"+gP	 &ĂŃĐćŘ<Tab>"+gP
+menutrans &Paste<Tab>"+P	&ĂŃĐćŘ<Tab>"+gP
+menutrans Put\ &Before<Tab>[p	 ÁâĐŇŘ\ ßŕŐ&Ô<Tab>[p
+menutrans Put\ &After<Tab>]p	 ÁâĐŇŘ\ &Ř×Đ<Tab>]p
+menutrans &Delete<Tab>x		 ¸×&ŃŕŘčŘ<Tab>x
+menutrans &Select\ all<Tab>ggVG  ¸×ĐŃŐŕŘ\ áŇ&Ő<Tab>ggVG
+menutrans &Find\.\.\.		 &˝ĐňŘ\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. ˝ĐňŘ\ Ř\ &×ĐÜŐÝŘ\.\.\.
+menutrans Settings\ &Window	 ż&ŕŢ×Ţŕ\ ßŢÔŐčĐŇĐúĐ
+menutrans &Global\ Settings	 ľß&čâĐ\ ßŢÔŐčĐŇĐúĐ
+menutrans F&ile\ Settings	 żŢÔŐčĐŇĐúĐ\ ×Đ\ ÔĐ&âŢâŐÚŐ
+menutrans &Shiftwidth		 &żŢÜŐŕĐř
+menutrans Soft\ &Tabstop	 &ĽŐÚĐ\ âĐŃăŰĐćŘřĐ
+menutrans Te&xt\ Width\.\.\.	 &ČŘŕŘÝĐ\ âŐÚáâĐ\.\.\.
+menutrans &File\ Format\.\.\.	 &˛ŕáâĐ\ ÔĐâŢâŐÚŐ\.\.\.
+menutrans C&olor\ Scheme	 ±Ţ&řŐ
+menutrans &Keymap		 żŕŐá&ŰŘÚĐŇĐúŐ\ âĐáâĐâăŕŐ
+menutrans Select\ Fo&nt\.\.\.	 ¸×ŃŢŕ\ &äŢÝâĐ\.\.\.
+
+" Edit/Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! ˝ĐÓŰĐáŘ\ &ŢŃŕĐ×ćŐ\ (ÔĐ/ÝŐ)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! ·ĐÝŐÜĐŕŘ\ \ŇŐŰŘçŘÝă\ &áŰŢŇĐ\ (ÔĐ/ÝŐ)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! żŕŢŇŐŕŘ\ ßŕĐâŐűă\ &×ĐÓŕĐÔă\ (ÔĐ/ÝŐ)<Tab>:set\ sm!
+menutrans &Context\ lines  ˛ŘÔůŘŇŘ\ &ŕŐÔŢŇŘ
+menutrans &Virtual\ Edit   ˛ŘŕâăŐŰÝŢ\ &ăŕŐňŘŇĐúŐ
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!	ŔŐÖŘÜ\ ă&ÝŢáĐ\ (ÔĐ/ÝŐ)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ áĐÓŰĐáÝŢ\ (ÔĐ/ÝŐ)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. żăâĐúĐ\ &ßŕŐâŕĐÓŐ\.\.\.
+menutrans Ta&g\ Files\.\.\.   &´ĐâŢâŐÚŐ\ Ţ×ÝĐÚĐ\.\.\.
+menutrans Toggle\ &Toolbar    »ŘÝŘřĐ\ áĐ\ &ĐŰĐâÚĐÜĐ\ (ÔĐ/ÝŐ)
+menutrans Toggle\ &Bottom\ Scrollbar   ´ŢúĐ\ Ű&ŘÝŘřĐ\ ÚŰŘ×ĐúĐ\ (ÔĐ/ÝŐ)
+menutrans Toggle\ &Left\ Scrollbar  &»ŐŇĐ\ ŰŘÝŘřĐ\ ÚŰŘ×ĐúĐ\ (ÔĐ/ÝŐ)
+menutrans Toggle\ &Right\ Scrollbar &´ŐáÝĐ\ ŰŘÝŘřĐ\ ÚŰŘ×ĐúĐ\ (ÔĐ/ÝŐ)
+
+" Edit/Global Settings/Virtual Edit
+menutrans Never		      ˝ŘÚĐÔ
+menutrans Block\ Selection    ¸×ŃŢŕ\ ŃŰŢÚĐ
+menutrans Insert\ mode	      ŔŐÖŘÜ\ ăÝŢáĐ
+menutrans Block\ and\ Insert  ±ŰŢÚ\ Ř\ ăÝŢá
+menutrans Always	      ĂŇŐÚ
+
+" Edit/File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   ŔŐÔÝŘ\ &ŃŕŢřŐŇŘ\ (ÔĐ/ÝŐ)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!	   ŔŐÖŘÜ\ &ŰŘáâŐ\ (ÔĐ/ÝŐ)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!	   ľŃĐŇŘřĐúŐ\ &ŕŐÔŢŇĐ\ (ÔĐ/ÝŐ)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   żŕŐŰŢÜŘ\ &ÝĐ\ ŕŐç\ (ÔĐ/ÝŐ)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!	   ŔĐ×ÜĐćŘ\ ăÜŐáâŢ\ &âĐŃăŰĐćŘřŐ\ (ÔĐ/ÝŐ)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!	°ăâŢ-&ăŇŰĐçŐúŐ\ (ÔĐ/ÝŐ)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!	   &ĆŐ-ăŇŰĐçŐúŐ\ (ÔĐ/ÝŐ)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None ˝ŘřŐÔĐÝ
+
+" Tools menu
+menutrans &Tools	&°ŰĐâÚŐ
+menutrans &Jump\ to\ this\ tag<Tab>g^] ÁÚŢçŘ\ ÝĐ\ &ŢŇă\ Ţ×ÝĐÚă<Tab>g^]
+menutrans Jump\ &back<Tab>^T	 ÁÚŢçŘ\ &ÝĐâŕĐÓ<Tab>^T
+menutrans Build\ &Tags\ File	 ¸×ÓŕĐÔŘ\ &ÔĐâŢâŐÚă\ Ţ×ÝĐÚĐ
+menutrans &Folding	      &żŢÔŇŘřĐúŐ
+menutrans Create\ &Fold<Tab>zf		  Á&âŇŢŕŘ\ ßŢÔŇŘřăâĐÚ<Tab>zf
+menutrans &Delete\ Fold<Tab>zd		  ľ&ŃŕŘčŘ\ ßŢÔŇŘřăâĐÚ<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD	  ľŃŕŘčŘ\ áŇŐ\ ßŢ&ÔŇŘřăâÚŐ<Tab>zD
+menutrans Fold\ column\ &width		  ČŘŕŘÝĐ\ &ŕŐÔĐ\ ßŢÔŇŘřăâÚĐ
+menutrans &Diff		      &ĂßŢŕŐňŘŇĐúŐ
+menutrans &Make<Tab>:make     'mak&Ő'<Tab>:make
+menutrans &List\ Errors<Tab>:cl     ÁßŘáĐÚ\ &ÓŕŐčĐÚĐ<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!  Áß&ŘáĐÚ\ ßŢŕăÚĐ<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn	    Á&ŰŐÔŐűĐ\ ÓŕŐčÚĐ<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp  żŕŐ&âĺŢÔÝĐ\ ÓŕŐčÚĐ<Tab>:cp
+menutrans &Older\ List<Tab>:cold    ÁâĐŕŘ\ áßŘáĐ&Ú<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew    ˝Ţ&ŇŘ\ áßŘáĐÚ<Tab>:cnew
+menutrans Error\ &Window	    żŕŢ×Ţŕ\ áĐ\ Ó&ŕŐčÚĐÜĐ
+menutrans &Set\ Compiler	    ¸&×ĐŃŐŕŘ\ ßŕŐŇŢÔŘŢćĐ
+menutrans &Convert\ to\ HEX<Tab>:%!xxd	   żŕŐâŇŢŕŘ\ ă\ &ŵşÁ<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r    ˛ŕ&ĐâŘ\ ă\ ßŕŇŢŃŘâĐÝ\ ŢŃŰŘÚ<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi   &ľÜŢÓăűŘ/ßŕŐÚŘÝŘ\ ßŢÔŇŘřĐúŐ<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv	  &żŢÚĐÖŘ\ ŕŐÔ\ áĐ\ ÚăŕáŢŕŢÜ<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx żŢÚĐÖŘ\ &áĐÜŢ\ ŕŐÔ\ áĐ\ ÚăŕáŢŕŢÜ<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm   &·ĐâŇŢŕŘ\ ŇŘčŐ\ ßŢÔŇŘřăâĐÚĐ<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM    ·ĐâŇŢŕŘ\ á&ŇŐ\ ßŢÔŇŘřăâÚŐ<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr    ľâŇŢŕŘ\ ŇŘč&Ő\ ßŢÔŇŘřăâĐÚĐ<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR     ľ&âŇŢŕŘ\ áŇŐ\ ßŢÔŇŘřăâÚŐ<Tab>zR
+menutrans Fold\ Met&hod		       &˝ĐçŘÝ\ ßŢÔŇŘřĐúĐ
+
+" Tools/Folding/Fold Method
+menutrans M&anual	&ŔăçÝŢ
+menutrans I&ndent	&ĂŇăçŐÝŢáâ
+menutrans E&xpression	&¸×ŕĐ×
+menutrans S&yntax	&ÁŘÝâĐÚáĐ
+"menutrans &Diff
+menutrans Ma&rker	&ľ×ÝĐÚĐ
+
+" Tools/Diff
+menutrans &Update	&°ÖăŕŘŕĐř
+menutrans &Get\ Block	&żŕŘĺŇĐâŘ\ Ř×ÜŐÝă
+menutrans &Put\ Block	żŕŐ&ŃĐćŘ\ Ř×ÜŐÝă
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin   &°ÖăŕŘŕĐř<Tab>:cwin
+menutrans &Open<Tab>:copen    &ľâŇŢŕŘ<Tab>:copen
+menutrans &Close<Tab>:cclose  &·ĐâŇŢŕŘ<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers	   &±ĐäŐŕŘ
+menutrans &Refresh\ menu   &°ÖăŕŘŕĐř
+menutrans Delete	   &ľŃŕŘčŘ
+menutrans &Alternate	   °&ŰâŐŕÝĐâŘŇÝŘ
+menutrans &Next		   &ÁŰŐÔŐűŘ
+menutrans &Previous	   &żŕŐâĺŢÔÝŘ
+menutrans [No\ File]	   [˝ŐÜĐ\ ÔĐâŢâŐÚŐ]
+
+" Window menu
+menutrans &Window		    &żŕŢ×Ţŕ
+menutrans &New<Tab>^Wn		    &˝ŢŇŘ<Tab>^Wn
+menutrans S&plit<Tab>^Ws	    &żŢÔŐŰŘ<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^    żŢÔŐŰŘ\ áĐ\ &ĐŰâŐŕÝĐâŘŇÝŘÜ<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv   żŢÔŐŰŘ\ &ăáßŕĐŇÝŢ<Tab>^Wv
+menutrans Split\ File\ E&xplorer    żŢÔŐŰŘ\ ×Đ\ ßŕŐÓŰŐÔ\ &ÔĐâŢâŐÚĐ
+menutrans &Close<Tab>^Wc	    &·ĐâŇŢŕŘ<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo  ·ĐâŇŢŕŘ\ &ŢáâĐŰŐ<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww       &ÁŰŐÔŐűŘ<Tab>^Ww
+"menutrans P&revious<Tab>^WW	  ż&ŕŐâĺŢÔÝŘ<Tab>^WW
+menutrans Move\ &To		    żŕŐ&ÜŐáâŘ
+menutrans Rotate\ &Up<Tab>^WR	    &şŕăÖÝŢ\ ÝĐÓŢŕŐ<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr     şŕăÖÝŢ\ ÝĐÔŢŰ&Ő<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W=	    &¸áâŐ\ ŇŐŰŘçŘÝŐ<Tab>^W=
+menutrans &Max\ Height<Tab>^W_	    ĽĐÚáŘÜĐŰÝĐ\ &ŇŘáŘÝĐ<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_     ĽŘÝŘÜĐ&ŰÝĐ\ ŇŘáŘÝĐ<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|	    ĽĐÚáŘÜĐŰÝĐ\ &čŘŕŘÝĐ<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|     ĽŘÝŘÜĐŰÝĐ\ čŘ&ŕŘÝĐ<Tab>^W1\|
+
+" Window/Move To
+menutrans &Top<Tab>^WK		 &˛ŕĺ<Tab>^WK
+menutrans &Bottom<Tab>^WJ	 &żŢÔÝŢÖřŐ<Tab>^WJ
+menutrans &Left\ side<Tab>^WH	 Ă&ŰŐŇŢ<Tab>^WH
+menutrans &Right\ side<Tab>^WL	 Ă&ÔŐáÝŢ<Tab>^WL
+
+" The popup menu
+menutrans &Undo		      &˛ŕĐâŘ
+menutrans Cu&t		      &¸áŐćŘ
+menutrans &Copy		      &şŢßŘŕĐř
+menutrans &Paste	      &ĂŃĐćŘ
+menutrans &Delete	      ¸&×ŃŕŘčŘ
+menutrans Select\ Blockwise   ±ŘŕĐř\ &ßŕĐŇŢăÓĐŢÝŢ
+menutrans Select\ &Word       ¸×ĐŃŐŕŘ\ &ŕŐç
+menutrans Select\ &Line       ¸×ĐŃŐŕŘ\ ŕ&ŐÔ
+menutrans Select\ &Block      ¸×ĐŃŐŕŘ\ &ŃŰŢÚ
+menutrans Select\ &All	      ¸×ĐŃŐŕŘ\ &áŇŐ
+
+" The GUI toolbar
+if has("toolbar")
+  if exists("*Do_toolbar_tmenu")
+    delfun Do_toolbar_tmenu
+  endif
+  fun Do_toolbar_tmenu()
+    tmenu ToolBar.Open	   ĂçŘâĐř
+    tmenu ToolBar.Save	   ÁĐçăŇĐř
+    tmenu ToolBar.SaveAll  ÁĐçăŇĐř áŇŐ
+    tmenu ToolBar.Print    ČâĐÜßĐř
+    tmenu ToolBar.Undo	   ˛ŕĐâŘ
+    tmenu ToolBar.Redo	   żŢŇŕĐâŘ
+    tmenu ToolBar.Cut	   ¸áŐćŘ
+    tmenu ToolBar.Copy	   şŢßŘŕĐř
+    tmenu ToolBar.Paste    ĂŃĐćŘ
+    tmenu ToolBar.Find	   ˝ĐňŘ
+    tmenu ToolBar.FindNext ˝ĐňŘ áŰŐÔŐűŘ
+    tmenu ToolBar.FindPrev ˝ĐňŘ ßŕŐâĺŢÔÝŘ
+    tmenu ToolBar.Replace  ·ĐÜŐÝŘ
+    tmenu ToolBar.New	   ˝ŢŇŘ
+    tmenu ToolBar.WinSplit żŢÔŐŰŘ ßŕŢ×Ţŕ
+    tmenu ToolBar.WinMax   ĽĐÚáŘÜĐŰÝĐ ŇŘáŘÝĐ
+    tmenu ToolBar.WinMin   ĽŘÝŘÜĐŰÝĐ ŇŘáŘÝĐ
+    tmenu ToolBar.WinVSplit   żŢÔŐŰŘ ăáßŕĐŇÝŢ
+    tmenu ToolBar.WinMaxWidth ĽĐÚáŘÜĐŰÝĐ čŘŕŘÝĐ
+    tmenu ToolBar.WinMinWidth ĽŘÝŘÜĐŰÝĐ čŘŕŘÝĐ
+    tmenu ToolBar.WinClose ·ĐâŇŢŕŘ ßŕŢ×Ţŕ
+    tmenu ToolBar.LoadSesn ĂçŘâĐř áŐĐÝáă
+    tmenu ToolBar.SaveSesn ÁĐçăŇĐř áŐĐÝáă
+    tmenu ToolBar.RunScript   ¸×ŇŕčŘ áßŘá
+    tmenu ToolBar.Make	   'make'
+    tmenu ToolBar.Shell    ľßŐŕĐâŘŇÝŢ ŢÚŕăÖŐúŐ
+    tmenu ToolBar.RunCtags ˝ĐßŕĐŇŘ Ţ×ÝĐÚŐ
+    tmenu ToolBar.TagJump  ¸ÔŘ ÝĐ Ţ×ÝĐÚă
+    tmenu ToolBar.Help	   żŢÜŢű
+    tmenu ToolBar.FindHelp ˝ĐňŘ ŢŃřĐčúŐúŐ
+  endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &ÁŘÝâĐÚáĐ
+menutrans &Show\ filetypes\ in\ menu  ¸×ŃŢŕ\ 'filetype'\ Ř×\ &ÜŐÝŘřĐ
+menutrans Set\ '&syntax'\ only	 żŢÔŐ&áŘ\ 'syntax'\ áĐÜŢ
+menutrans Set\ '&filetype'\ too  żŢÔŐáŘ\ 'filetype'\ &âĐÚŢňŐ
+menutrans &Off	     &¸áÚůăçŐÝŢ
+menutrans &Manual    &ŔăçÝŢ
+menutrans A&utomatic	&°ăâŢÜĐâáÚŘ
+menutrans on/off\ for\ &This\ file     ´Đ/ÝŐ\ ×Đ\ ŢŇă\ &ÔĐâŢâŐÚă
+menutrans Co&lor\ test	   żŕŢŇŐŕĐ\ &ŃŢřĐ
+menutrans &Highlight\ test żŕŢŇŐŕĐ\ ŘáâŘ&ćĐúĐ
+menutrans &Convert\ to\ HTML  żŕŐâŇŢŕŘ\ &ă\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "ĂÝŐáŘâŐ ÝĐŕŐÔŃă ŘŰŘ ŕŐç çŘřŐ ßŢřĐčúŐúŐ âŕĐÖŘâŐ:\n\n´ŢÔĐřâŐ i_ ×Đ ÝĐŕŐÔŃŐ ăÝŢáĐ (Ýßŕ. i_CTRL-X)\n´ŢÔĐřâŐ c_ ×Đ ÝĐŕŐÔŃŐ ÚŢÜĐÝÔÝŢÓ ŕŐÖŘÜĐ (Ýßŕ. á_<Del>)\n´ŢÔĐřâŐ ' ×Đ ŘÜŐÝĐ ŢßćŘřĐ (Ýßŕ. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "ĂÝŐáŘâŐ ßăâ ßŕŐâŕĐÓŐ ×Đ ÔĐâŢâŐÚŐ\nŔĐ×ÔŇŢřŘâŐ ×ĐŕŐ×ŘÜĐ ŘÜŐÝĐ ÔŘŕŐÚâŢŕŘřăÜĐ."
+
+let g:menutrans_tags_dialog = "ĂÝŐáŘâŐ ŘÜŐÝĐ ÔĐâŢâŐÚĐ áĐ Ţ×ÝĐÚĐÜĐ\nŔĐ×ÔŇŢřŘâŐ ×ĐŕŐ×ŘÜĐ ŘÜŐÝĐ."
+
+let g:menutrans_textwidth_dialog = "ĂÝŐáŘâŐ ÝŢŇă čŘŕŘÝă âŐÚáâĐ (0 áßŕŐçĐŇĐ ßŕŐŰŢÜ)"
+
+let g:menutrans_fileformat_dialog = "¸×ĐŃŐŕŘâŐ Ňŕáâă ÔĐâŢâŐÚŐ"
+
+let menutrans_no_file = "[˝ŐÜĐ ÔĐâŢâŐÚŐ]"
new file mode 100644
--- /dev/null
+++ b/runtime/lang/menu_sr_rs.utf-8.vim
@@ -0,0 +1,261 @@
+" Menu Translations: Serbian
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+" Last Change:	Fri, 30 May 2003 10:17:39 Eastern Daylight Time
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+  finish
+endif
+let did_menu_trans = 1
+scriptencoding utf-8
+
+" Help menu
+menutrans &Help		      Помо&ћ
+menutrans &Overview<Tab><F1>  &Преглед<Tab><F1>
+menutrans &User\ Manual       &ĐŁĐżŃŃ‚Ńтво\ Đ·Đ°\ кориŃнике
+menutrans &How-to\ links      &Како\ да\.\.\.
+menutrans &Find		      &Нађи
+menutrans &Credits	      &Đ—Đ°ŃĐ»Ńге
+menutrans Co&pying	      Đź&реŃзимање
+menutrans O&rphans	      &Сирочићи
+menutrans &Version	      &ВерзиŃĐ°
+menutrans &About	      &Đž\ програмŃ
+
+" File menu
+menutrans &File			    &Датотека
+menutrans &Open\.\.\.<Tab>:e	    &Отвори\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp &Подели-отвори\.\.\.<Tab>:sp
+menutrans &New<Tab>:enew	    &Нова<Tab>:enew
+menutrans &Close<Tab>:close	    &Затвори<Tab>:close
+menutrans &Save<Tab>:w		    &СачŃваŃ<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav  СачŃваŃ\ &као\.\.\.<Tab>:sav
+menutrans Split\ &Diff\ with\.\.\.  Подели\ и\ &Ńпореди\ ŃĐ°\.\.\.
+menutrans Split\ Patched\ &By\.\.\. По&дели\ и\ преправи\ ŃĐ°\.\.\.
+menutrans &Print		    Шта&мпаŃ
+menutrans Sa&ve-Exit<Tab>:wqa	    СачŃваŃ\ и\ Đ·Đ°&врŃи<Tab>:wqa
+menutrans E&xit<Tab>:qa		    Đš&раŃ<Tab>:qa
+
+" Edit menu
+menutrans &Edit			 &Уређивање
+menutrans &Undo<Tab>u		 &Врати<Tab>u
+menutrans &Redo<Tab>^R		 &Поврати<Tab>^R
+menutrans Rep&eat<Tab>\.	 П&онови<Tab>\.
+menutrans Cu&t<Tab>"+x		 ĐŃе&ци<Tab>"+x
+menutrans &Copy<Tab>"+y		 &КопираŃ<Tab>"+y
+menutrans &Paste<Tab>"+gP	 &Убаци<Tab>"+gP
+menutrans &Paste<Tab>"+P	&Убаци<Tab>"+gP
+menutrans Put\ &Before<Tab>[p	 Стави\ пре&д<Tab>[p
+menutrans Put\ &After<Tab>]p	 Стави\ &иза<Tab>]p
+menutrans &Delete<Tab>x		 ĐĐ·&бриŃи<Tab>x
+menutrans &Select\ all<Tab>ggVG  Đзабери\ Ńв&е<Tab>ggVG
+menutrans &Find\.\.\.		 &Нађи\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\. Нађи\ и\ &замени\.\.\.
+menutrans Settings\ &Window	 Đź&розор\ подеŃавања
+menutrans &Global\ Settings	 Оп&ŃŃ‚Đ°\ подеŃавања
+menutrans F&ile\ Settings	 ПодеŃавања\ Đ·Đ°\ Đ´Đ°&тотеке
+menutrans &Shiftwidth		 &ПомераŃ
+menutrans Soft\ &Tabstop	 &Мека\ табŃлациŃĐ°
+menutrans Te&xt\ Width\.\.\.	 &Ширина\ текŃŃ‚Đ°\.\.\.
+menutrans &File\ Format\.\.\.	 &Đ’Ń€ŃŃ‚Đ°\ датотеке\.\.\.
+menutrans C&olor\ Scheme	 Đ‘Đľ&Ńе
+menutrans &Keymap		 ПреŃ&ликавање\ Ń‚Đ°ŃŃ‚Đ°Ń‚Ńре
+menutrans Select\ Fo&nt\.\.\.	 Đзбор\ &фонта\.\.\.
+
+" Edit/Global Settings
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! НаглаŃи\ &образце\ (Đ´Đ°/не)<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Занемари\ \величинŃ\ &Ńлова\ (Đ´Đ°/не)<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm! Провери\ пратећŃ\ &заградŃ\ (Đ´Đ°/не)<Tab>:set\ sm!
+menutrans &Context\ lines  Видљиви\ &редови
+menutrans &Virtual\ Edit   ВиртŃелно\ &Ńређивање
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!   Режим\ Ń&ноŃĐ°\ (Đ´Đ°/не)<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ ŃаглаŃно\ (Đ´Đ°/не)<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\. ĐźŃтања\ &претраге\.\.\.
+menutrans Ta&g\ Files\.\.\.   &Датотеке\ ознака\.\.\.
+menutrans Toggle\ &Toolbar    ЛиниŃĐ°\ ŃĐ°\ &алаткама\ (Đ´Đ°/не)
+menutrans Toggle\ &Bottom\ Scrollbar   Доња\ Đ»&иниŃĐ°\ клизања\ (Đ´Đ°/не)
+menutrans Toggle\ &Left\ Scrollbar  &Лева\ линиŃĐ°\ клизања\ (Đ´Đ°/не)
+menutrans Toggle\ &Right\ Scrollbar &ДеŃна\ линиŃĐ°\ клизања\ (Đ´Đ°/не)
+
+" Edit/Global Settings/Virtual Edit
+menutrans Never		      Никад
+menutrans Block\ Selection    Đзбор\ блока
+menutrans Insert\ mode	      Режим\ ŃноŃĐ°
+menutrans Block\ and\ Insert  Блок\ и\ ŃноŃ
+menutrans Always	      Увек
+
+" Edit/File Settings
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   Редни\ &броŃеви\ (Đ´Đ°/не)<Tab>:set\ nu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!	   Режим\ &лиŃте\ (Đ´Đ°/не)<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!	   ОбавиŃање\ &редова\ (Đ´Đ°/не)<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   Преломи\ &на\ реч\ (да/не)<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!	   Размаци\ ŃмеŃŃ‚Đľ\ &табŃлациŃе\ (Đ´Đ°/не)<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!	ĐŃŃ‚Đľ-&Ńвлачење\ (Đ´Đ°/не)<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!	   &Це-Ńвлачење\ (Đ´Đ°/не)<Tab>:set\ cin!
+
+" Edit/Keymap
+menutrans None НиŃедан
+
+" Tools menu
+menutrans &Tools	&Đлатке
+menutrans &Jump\ to\ this\ tag<Tab>g^] Скочи\ на\ &овŃ\ ознакŃ<Tab>g^]
+menutrans Jump\ &back<Tab>^T	 Скочи\ &натраг<Tab>^T
+menutrans Build\ &Tags\ File	 Đзгради\ &датотекŃ\ ознака
+menutrans &Folding	      &ПодвиŃање
+menutrans Create\ &Fold<Tab>zf		  С&твори\ подвиŃŃŃ‚Đ°Đş<Tab>zf
+menutrans &Delete\ Fold<Tab>zd		  Đž&бриŃи\ подвиŃŃŃ‚Đ°Đş<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD	  ОбриŃи\ Ńве\ по&двиŃŃтке<Tab>zD
+menutrans Fold\ column\ &width		  Ширина\ &реда\ подвиŃŃтка
+menutrans &Diff		      &Упоређивање
+menutrans &Make<Tab>:make     'mak&е'<Tab>:make
+menutrans &List\ Errors<Tab>:cl     СпиŃĐ°Đş\ &греŃака<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!  Сп&иŃĐ°Đş\ порŃка<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn	    С&ледећа\ греŃка<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp  Пре&тходна\ греŃка<Tab>:cp
+menutrans &Older\ List<Tab>:cold    Стари\ ŃпиŃĐ°&Đş<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew    Но&ви\ ŃпиŃĐ°Đş<Tab>:cnew
+menutrans Error\ &Window	    Прозор\ ŃĐ°\ Đł&реŃкама
+menutrans &Set\ Compiler	    Đ&забери\ преводиоца
+menutrans &Convert\ to\ HEX<Tab>:%!xxd	   Претвори\ Ń\ &ХЕКС<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r    Đ’Ń€&ати\ Ń\ првобитан\ облик<Tab>:%!xxd\ -r
+
+" Tools/Folding
+menutrans &Enable/Disable\ folds<Tab>zi   &ОмогŃћи/прекини\ подвиŃање<Tab>zi
+menutrans &View\ Cursor\ Line<Tab>zv	  &Покажи\ ред\ ŃĐ°\ ĐşŃŃ€Ńором<Tab>zv
+menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Покажи\ &ŃĐ°ĐĽĐľ\ ред\ ŃĐ°\ ĐşŃŃ€Ńором<Tab>zMzx
+menutrans C&lose\ more\ folds<Tab>zm   &Затвори\ виŃе\ подвиŃŃтака<Tab>zm
+menutrans &Close\ all\ folds<Tab>zM    Затвори\ Ń&ве\ подвиŃŃтке<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr    Отвори\ виŃ&е\ подвиŃŃтака<Tab>zr
+menutrans &Open\ all\ folds<Tab>zR     Đž&твори\ Ńве\ подвиŃŃтке<Tab>zR
+menutrans Fold\ Met&hod		       &Начин\ подвиŃања
+
+" Tools/Folding/Fold Method
+menutrans M&anual	&Đ Ńчно
+menutrans I&ndent	&УвŃченоŃŃ‚
+menutrans E&xpression	&Đзраз
+menutrans S&yntax	&СинтакŃĐ°
+"menutrans &Diff
+menutrans Ma&rker	&Ознака
+
+" Tools/Diff
+menutrans &Update	&ĐжŃрираŃ
+menutrans &Get\ Block	&Прихвати\ изменŃ
+menutrans &Put\ Block	Пре&баци\ изменŃ
+
+" Tools/Error Window
+menutrans &Update<Tab>:cwin   &ĐжŃрираŃ<Tab>:cwin
+menutrans &Open<Tab>:copen    &Отвори<Tab>:copen
+menutrans &Close<Tab>:cclose  &Затвори<Tab>:cclose
+
+" Bufers menu
+menutrans &Buffers	   &Бафери
+menutrans &Refresh\ menu   &ĐжŃрираŃ
+menutrans Delete	   &ОбриŃи
+menutrans &Alternate	   Đ&лтернативни
+menutrans &Next		   &Следећи
+menutrans &Previous	   &Претходни
+menutrans [No\ File]	   [Нема\ датотеке]
+
+" Window menu
+menutrans &Window		    &Прозор
+menutrans &New<Tab>^Wn		    &Нови<Tab>^Wn
+menutrans S&plit<Tab>^Ws	    &Подели<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^    Подели\ ŃĐ°\ &алтернативним<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv   Подели\ &ŃŃправно<Tab>^Wv
+menutrans Split\ File\ E&xplorer    Подели\ за\ преглед\ &датотека
+menutrans &Close<Tab>^Wc	    &Затвори<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo  Затвори\ &ĐľŃтале<Tab>^Wo
+"menutrans Ne&xt<Tab>^Ww       &Следећи<Tab>^Ww
+"menutrans P&revious<Tab>^WW	  П&ретходни<Tab>^WW
+menutrans Move\ &To		    Пре&меŃти
+menutrans Rotate\ &Up<Tab>^WR	    &КрŃжно\ нагоре<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr     КрŃжно\ надол&е<Tab>^Wr
+menutrans &Equal\ Size<Tab>^W=	    &ĐŃте\ величине<Tab>^W=
+menutrans &Max\ Height<Tab>^W_	    МакŃимална\ &виŃина<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_     Минима&лна\ виŃина<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|	    МакŃимална\ &Ńирина<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|     Минимална\ Ńи&рина<Tab>^W1\|
+
+" Window/Move To
+menutrans &Top<Tab>^WK		 &Врх<Tab>^WK
+menutrans &Bottom<Tab>^WJ	 &ПодножŃе<Tab>^WJ
+menutrans &Left\ side<Tab>^WH	 У&лево<Tab>^WH
+menutrans &Right\ side<Tab>^WL	 ĐŁ&деŃно<Tab>^WL
+
+" The popup menu
+menutrans &Undo		      &Врати
+menutrans Cu&t		      &ĐŃеци
+menutrans &Copy		      &КопираŃ
+menutrans &Paste	      &Убаци
+menutrans &Delete	      Đ&збриŃи
+menutrans Select\ Blockwise   БираŃ\ &правоŃгаоно
+menutrans Select\ &Word       Đзабери\ &реч
+menutrans Select\ &Line       Đзабери\ Ń€&ед
+menutrans Select\ &Block      Đзабери\ &блок
+menutrans Select\ &All	      Đзабери\ &Ńве
+
+" The GUI toolbar
+if has("toolbar")
+  if exists("*Do_toolbar_tmenu")
+    delfun Do_toolbar_tmenu
+  endif
+  fun Do_toolbar_tmenu()
+    tmenu ToolBar.Open     УчитаŃ
+    tmenu ToolBar.Save     СачŃваŃ
+    tmenu ToolBar.SaveAll  СачŃĐ˛Đ°Ń Ńве
+    tmenu ToolBar.Print    ШтампаŃ
+    tmenu ToolBar.Undo     Врати
+    tmenu ToolBar.Redo     Поврати
+    tmenu ToolBar.Cut      ĐŃеци
+    tmenu ToolBar.Copy     КопираŃ
+    tmenu ToolBar.Paste    Убаци
+    tmenu ToolBar.Find     Нађи
+    tmenu ToolBar.FindNext Нађи Ńледећи
+    tmenu ToolBar.FindPrev Нађи претходни
+    tmenu ToolBar.Replace  Замени
+    tmenu ToolBar.New      Нови
+    tmenu ToolBar.WinSplit Подели прозор
+    tmenu ToolBar.WinMax   МакŃимална виŃина
+    tmenu ToolBar.WinMin   Минимална виŃина
+    tmenu ToolBar.WinVSplit   Подели ŃŃправно
+    tmenu ToolBar.WinMaxWidth МакŃимална Ńирина
+    tmenu ToolBar.WinMinWidth Минимална Ńирина
+    tmenu ToolBar.WinClose Затвори прозор
+    tmenu ToolBar.LoadSesn ĐŁŃ‡Đ¸Ń‚Đ°Ń ŃеанŃŃ
+    tmenu ToolBar.SaveSesn СачŃĐ˛Đ°Ń ŃеанŃŃ
+    tmenu ToolBar.RunScript   ĐзврŃи ŃпиŃ
+    tmenu ToolBar.Make     'make'
+    tmenu ToolBar.Shell    Оперативно окрŃжење
+    tmenu ToolBar.RunCtags Направи ознаке
+    tmenu ToolBar.TagJump  Đди на ознакŃ
+    tmenu ToolBar.Help     Помоћ
+    tmenu ToolBar.FindHelp Нађи обŃĐ°Ńњење
+  endfun
+endif
+
+" Syntax menu
+menutrans &Syntax &СинтакŃĐ°
+menutrans &Show\ filetypes\ in\ menu  Đзбор\ 'filetype'\ из\ &мениŃĐ°
+menutrans Set\ '&syntax'\ only   Поде&Ńи\ 'syntax'\ ŃĐ°ĐĽĐľ
+menutrans Set\ '&filetype'\ too  ПодеŃи\ 'filetype'\ &такође
+menutrans &Off       &ĐŃкљŃчено
+menutrans &Manual    &Đ Ńчно
+menutrans A&utomatic    &ĐŃтоматŃки
+menutrans on/off\ for\ &This\ file     Да/не\ Đ·Đ°\ овŃ\ &датотекŃ
+menutrans Co&lor\ test     Провера\ &боŃĐ°
+menutrans &Highlight\ test Провера\ иŃти&цања
+menutrans &Convert\ to\ HTML  Претвори\ &Ń\ HTML
+
+" dialog texts
+let menutrans_help_dialog = "УнеŃите Đ˝Đ°Ń€ĐµĐ´Đ±Ń Đ¸Đ»Đ¸ реч чиŃе поŃĐ°Ńњење тражите:\n\nДодаŃте i_ Đ·Đ° наредбе ŃноŃĐ° (нпр. i_CTRL-X)\nДодаŃте c_ Đ·Đ° наредбе командног режима (нпр. Ń_<Del>)\nДодаŃте ' Đ·Đ° имена опциŃĐ° (нпр. 'shiftwidth')"
+
+let g:menutrans_path_dialog = "УнеŃите ĐżŃŃ‚ претраге Đ·Đ° датотеке\nРаздвоŃите зарезима имена директориŃŃĐĽĐ°."
+
+let g:menutrans_tags_dialog = "УнеŃите имена датотека ŃĐ° ознакама\nРаздвоŃите зарезима имена."
+
+let g:menutrans_textwidth_dialog = "УнеŃите Đ˝ĐľĐ˛Ń ŃĐ¸Ń€Đ¸Đ˝Ń Ń‚ĐµĐşŃŃ‚Đ° (0 Ńпречава прелом)"
+
+let g:menutrans_fileformat_dialog = "Đзаберите врŃŃ‚Ń Đ´Đ°Ń‚ĐľŃ‚ĐµĐşĐµ"
+
+let menutrans_no_file = "[Нема датотеке]"
+
+" vim: tw=0 keymap=serbian
--- a/runtime/lang/menu_sr_yu.ascii.vim
+++ b/runtime/lang/menu_sr_yu.ascii.vim
@@ -1,258 +1,3 @@
-" Menu Translations: Serbian
-" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last Change:	Fri, 30 May 2003 12:15:30 -0400
-
-" Quit when menu translations have already been done.
-if exists("did_menu_trans")
-  finish
-endif
-let did_menu_trans = 1
-
-" Help menu
-menutrans &Help		      Pomo&c
-menutrans &Overview<Tab><F1>  &Pregled<Tab><F1>
-menutrans &User\ Manual       &Uputstvo\ za\ korisnike
-menutrans &How-to\ links      &Kako\ da\.\.\.
-menutrans &Find		      &Nadji
-menutrans &Credits	      &Zasluge
-menutrans Co&pying	      P&reuzimanje
-menutrans O&rphans	      &Sirocici
-menutrans &Version	      &Verzija
-menutrans &About	      &O\ programu
-
-" File menu
-menutrans &File			    &Datoteka
-menutrans &Open\.\.\.<Tab>:e	    &Otvori\.\.\.<Tab>:e
-menutrans Sp&lit-Open\.\.\.<Tab>:sp &Podeli-otvori\.\.\.<Tab>:sp
-menutrans &New<Tab>:enew	    &Nova<Tab>:enew
-menutrans &Close<Tab>:close	    &Zatvori<Tab>:close
-menutrans &Save<Tab>:w		    &Sacuvaj<Tab>:w
-menutrans Save\ &As\.\.\.<Tab>:sav  Sacuvaj\ &kao\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.  Podeli\ i\ &uporedi\ sa\.\.\.
-menutrans Split\ Patched\ &By\.\.\. Po&deli\ i\ prepravi\ sa\.\.\.
-menutrans &Print		    Sta&mpaj
-menutrans Sa&ve-Exit<Tab>:wqa	    Sacuvaj\ i\ za&vrsi<Tab>:wqa
-menutrans E&xit<Tab>:qa		    K&raj<Tab>:qa
-
-" Edit menu
-menutrans &Edit			 &Uredjivanje
-menutrans &Undo<Tab>u		 &Vrati<Tab>u
-menutrans &Redo<Tab>^R		 &Povrati<Tab>^R
-menutrans Rep&eat<Tab>\.	 P&onovi<Tab>\.
-menutrans Cu&t<Tab>"+x		 Ise&ci<Tab>"+x
-menutrans &Copy<Tab>"+y		 &Kopiraj<Tab>"+y
-menutrans &Paste<Tab>"+gP	 &Ubaci<Tab>"+gP
-menutrans &Paste<Tab>"+P	&Ubaci<Tab>"+gP
-menutrans Put\ &Before<Tab>[p	 Stavi\ pre&d<Tab>[p
-menutrans Put\ &After<Tab>]p	 Stavi\ &iza<Tab>]p
-menutrans &Delete<Tab>x		 Iz&brisi<Tab>x
-menutrans &Select\ all<Tab>ggVG  Izaberi\ sv&e<Tab>ggVG
-menutrans &Find\.\.\.		 &Nadji\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\. Nadji\ i\ &zameni\.\.\.
-menutrans Settings\ &Window	 P&rozor\ podesavanja
-menutrans &Global\ Settings	 Op&sta\ podesavanja
-menutrans F&ile\ Settings	 Podesavanja\ za\ da&toteke
-menutrans &Shiftwidth		 &Pomeraj
-menutrans Soft\ &Tabstop	 &Meka\ tabulacija
-menutrans Te&xt\ Width\.\.\.	 &Sirina\ teksta\.\.\.
-menutrans &File\ Format\.\.\.	 &Vrsta\ datoteke\.\.\.
-menutrans C&olor\ Scheme	 Bo&je
-menutrans &Keymap		 Pres&likavanje\ tastature
-menutrans Select\ Fo&nt\.\.\.	 Izbor\ &fonta\.\.\.
-
-" Edit/Global Settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Naglasi\ &obrazce\ (da/ne)<Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Zanemari\ \velicinu\ &slova\ (da/ne)<Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm! Proveri\ pratecu\ &zagradu\ (da/ne)<Tab>:set\ sm!
-menutrans &Context\ lines  Vidljivi\ &redovi
-menutrans &Virtual\ Edit   Virtuelno\ &uredjivanje
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!   Rezim\ u&nosa\ (da/ne)<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ saglasno\ (da/ne)<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\. Putanja\ &pretrage\.\.\.
-menutrans Ta&g\ Files\.\.\.   &Datoteke\ oznaka\.\.\.
-menutrans Toggle\ &Toolbar    Linija\ sa\ &alatkama\ (da/ne)
-menutrans Toggle\ &Bottom\ Scrollbar   Donja\ l&inija\ klizanja\ (da/ne)
-menutrans Toggle\ &Left\ Scrollbar  &Leva\ linija\ klizanja\ (da/ne)
-menutrans Toggle\ &Right\ Scrollbar &Desna\ linija\ klizanja\ (da/ne)
-
-" Edit/Global Settings/Virtual Edit
-menutrans Never		      Nikad
-menutrans Block\ Selection    Izbor\ bloka
-menutrans Insert\ mode	      Rezim\ unosa
-menutrans Block\ and\ Insert  Blok\ i\ unos
-menutrans Always	      Uvek
-
-" Edit/File Settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   Redni\ &brojevi\ (da/ne)<Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!      Rezim\ &liste\ (da/ne)<Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!      Obavijanje\ &redova\ (da/ne)<Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   Prelomi\ &na\ rec\ (da/ne)<Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!	   Razmaci\ umesto\ &tabulacije\ (da/ne)<Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!    Auto-&uvlacenje\ (da/ne)<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!      &Ce-uvlacenje\ (da/ne)<Tab>:set\ cin!
-
-" Edit/Keymap
-menutrans None Nijedan
-
-" Tools menu
-menutrans &Tools	&Alatke
-menutrans &Jump\ to\ this\ tag<Tab>g^] Skoci\ na\ &ovu\ oznaku<Tab>g^]
-menutrans Jump\ &back<Tab>^T	 Skoci\ &natrag<Tab>^T
-menutrans Build\ &Tags\ File	 Izgradi\ &datoteku\ oznaka
-menutrans &Folding	      &Podvijanje
-menutrans Create\ &Fold<Tab>zf		  S&tvori\ podvijutak<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		  O&brisi\ podvijutak<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	  Obrisi\ sve\ po&dvijutke<Tab>zD
-menutrans Fold\ column\ &width		  Sirina\ &reda\ podvijutka
-menutrans &Diff		      &Uporedjivanje
-menutrans &Make<Tab>:make     'mak&e'<Tab>:make
-menutrans &List\ Errors<Tab>:cl     Spisak\ &gresaka<Tab>:cl
-menutrans L&ist\ Messages<Tab>:cl!  Sp&isak\ poruka<Tab>:cl!
-menutrans &Next\ Error<Tab>:cn	    S&ledeca\ greska<Tab>:cn
-menutrans &Previous\ Error<Tab>:cp  Pre&thodna\ greska<Tab>:cp
-menutrans &Older\ List<Tab>:cold    Stari\ spisa&k<Tab>:cold
-menutrans N&ewer\ List<Tab>:cnew    No&vi\ spisak<Tab>:cnew
-menutrans Error\ &Window	    Prozor\ sa\ g&reskama
-menutrans &Set\ Compiler	    I&zaberi\ prevodioca
-menutrans &Convert\ to\ HEX<Tab>:%!xxd	   Pretvori\ u\ &HEKS<Tab>:%!xxd
-menutrans Conve&rt\ back<Tab>:%!xxd\ -r    Vr&ati\ u\ prvobitan\ oblik<Tab>:%!xxd\ -r
-
-" Tools/Folding
-menutrans &Enable/Disable\ folds<Tab>zi   &Omoguci/prekini\ podvijanje<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv      &Pokazi\ red\ sa\ kursorom<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Pokazi\ &samo\ red\ sa\ kursorom<Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm   &Zatvori\ vise\ podvijutaka<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    Zatvori\ s&ve\ podvijutke<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    Otvori\ vis&e\ podvijutaka<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR     O&tvori\ sve\ podvijutke<Tab>zR
-menutrans Fold\ Met&hod		       &Nacin\ podvijanja
+" Menu Translations:	Serbian
 
-" Tools/Folding/Fold Method
-menutrans M&anual       &Rucno
-menutrans I&ndent       &Uvucenost
-menutrans E&xpression   &Izraz
-menutrans S&yntax       &Sintaksa
-"menutrans &Diff
-menutrans Ma&rker       &Oznaka
-
-" Tools/Diff
-menutrans &Update       &Azuriraj
-menutrans &Get\ Block   &Prihvati\ izmenu
-menutrans &Put\ Block   Pre&baci\ izmenu
-
-" Tools/Error Window
-menutrans &Update<Tab>:cwin   &Azuriraj<Tab>:cwin
-menutrans &Open<Tab>:copen    &Otvori<Tab>:copen
-menutrans &Close<Tab>:cclose  &Zatvori<Tab>:cclose
-
-" Bufers menu
-menutrans &Buffers	   &Baferi
-menutrans &Refresh\ menu   &Azuriraj
-menutrans Delete	   &Obrisi
-menutrans &Alternate	   A&lternativni
-menutrans &Next		   &Sledeci
-menutrans &Previous	   &Prethodni
-menutrans [No\ File]	   [Nema\ datoteke]
-
-" Window menu
-menutrans &Window		    &Prozor
-menutrans &New<Tab>^Wn		    &Novi<Tab>^Wn
-menutrans S&plit<Tab>^Ws	    &Podeli<Tab>^Ws
-menutrans Sp&lit\ To\ #<Tab>^W^^    Podeli\ sa\ &alternativnim<Tab>^W^^
-menutrans Split\ &Vertically<Tab>^Wv   Podeli\ &uspravno<Tab>^Wv
-menutrans Split\ File\ E&xplorer    Podeli\ za\ pregled\ &datoteka
-menutrans &Close<Tab>^Wc	    &Zatvori<Tab>^Wc
-menutrans Close\ &Other(s)<Tab>^Wo  Zatvori\ &ostale<Tab>^Wo
-"menutrans Ne&xt<Tab>^Ww       &Sledeci<Tab>^Ww
-"menutrans P&revious<Tab>^WW	  P&rethodni<Tab>^WW
-menutrans Move\ &To		    Pre&mesti
-menutrans Rotate\ &Up<Tab>^WR	    &Kruzno\ nagore<Tab>^WR
-menutrans Rotate\ &Down<Tab>^Wr     Kruzno\ nadol&e<Tab>^Wr
-menutrans &Equal\ Size<Tab>^W=	    &Iste\ velicine<Tab>^W=
-menutrans &Max\ Height<Tab>^W_	    Maksimalna\ &visina<Tab>^W_
-menutrans M&in\ Height<Tab>^W1_     Minima&lna\ visina<Tab>^W1_
-menutrans Max\ &Width<Tab>^W\|	    Maksimalna\ &sirina<Tab>^W\|
-menutrans Min\ Widt&h<Tab>^W1\|     Minimalna\ si&rina<Tab>^W1\|
-
-" Window/Move To
-menutrans &Top<Tab>^WK		 &Vrh<Tab>^WK
-menutrans &Bottom<Tab>^WJ	 &Podnozje<Tab>^WJ
-menutrans &Left\ side<Tab>^WH	 U&levo<Tab>^WH
-menutrans &Right\ side<Tab>^WL	 U&desno<Tab>^WL
-
-" The popup menu
-menutrans &Undo		      &Vrati
-menutrans Cu&t		      &Iseci
-menutrans &Copy		      &Kopiraj
-menutrans &Paste	      &Ubaci
-menutrans &Delete	      I&zbrisi
-menutrans Select\ Blockwise   Biraj\ &pravougaono
-menutrans Select\ &Word       Izaberi\ &rec
-menutrans Select\ &Line       Izaberi\ r&ed
-menutrans Select\ &Block      Izaberi\ &blok
-menutrans Select\ &All	      Izaberi\ &sve
-
-" The GUI toolbar
-if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open     Ucitaj
-    tmenu ToolBar.Save     Sacuvaj
-    tmenu ToolBar.SaveAll  Sacuvaj sve
-    tmenu ToolBar.Print    Stampaj
-    tmenu ToolBar.Undo     Vrati
-    tmenu ToolBar.Redo     Povrati
-    tmenu ToolBar.Cut      Iseci
-    tmenu ToolBar.Copy     Kopiraj
-    tmenu ToolBar.Paste    Ubaci
-    tmenu ToolBar.Find     Nadji
-    tmenu ToolBar.FindNext Nadji sledeci
-    tmenu ToolBar.FindPrev Nadji prethodni
-    tmenu ToolBar.Replace  Zameni
-    tmenu ToolBar.New      Novi
-    tmenu ToolBar.WinSplit Podeli prozor
-    tmenu ToolBar.WinMax   Maksimalna visina
-    tmenu ToolBar.WinMin   Minimalna visina
-    tmenu ToolBar.WinVSplit   Podeli uspravno
-    tmenu ToolBar.WinMaxWidth Maksimalna sirina
-    tmenu ToolBar.WinMinWidth Minimalna sirina
-    tmenu ToolBar.WinClose Zatvori prozor
-    tmenu ToolBar.LoadSesn Ucitaj seansu
-    tmenu ToolBar.SaveSesn Sacuvaj seansu
-    tmenu ToolBar.RunScript   Izvrsi spis
-    tmenu ToolBar.Make     'make'
-    tmenu ToolBar.Shell    Operativno okruzenje
-    tmenu ToolBar.RunCtags Napravi oznake
-    tmenu ToolBar.TagJump  Idi na oznaku
-    tmenu ToolBar.Help     Pomoc
-    tmenu ToolBar.FindHelp Nadji objasnjenje
-  endfun
-endif
-
-" Syntax menu
-menutrans &Syntax &Sintaksa
-menutrans &Show\ filetypes\ in\ menu  Izbor\ 'filetype'\ iz\ &menija
-menutrans Set\ '&syntax'\ only   Pode&si\ 'syntax'\ samo
-menutrans Set\ '&filetype'\ too  Podesi\ 'filetype'\ &takodje
-menutrans &Off       &Iskljuceno
-menutrans &Manual    &Rucno
-menutrans A&utomatic    &Automatski
-menutrans on/off\ for\ &This\ file     Da/ne\ za\ ovu\ &datoteku
-menutrans Co&lor\ test     Provera\ &boja
-menutrans &Highlight\ test Provera\ isti&canja
-menutrans &Convert\ to\ HTML  Pretvori\ &u\ HTML
-
-" dialog texts
-let menutrans_help_dialog = "Unesite naredbu ili rec cije pojasnjenje trazite:\n\nDodajte i_ za naredbe unosa (npr. i_CTRL-X)\nDodajte c_ za naredbe komandnog rezima (npr. s_<Del>)\nDodajte ' za imena opcija (npr. 'shiftwidth')"
-
-let g:menutrans_path_dialog = "Unesite put pretrage za datoteke\nRazdvojite zarezima imena direktorijuma."
-
-let g:menutrans_tags_dialog = "Unesite imena datoteka sa oznakama\nRazdvojite zarezima imena."
-
-let g:menutrans_textwidth_dialog = "Unesite novu sirinu teksta (0 sprecava prelom)"
-
-let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
-
-let menutrans_no_file = "[Nema datoteke]"
+source <sfile>:p:h/menu_sr_rs.ascii.vim
--- a/runtime/lang/menu_sr_yu.iso_8859-2.vim
+++ b/runtime/lang/menu_sr_yu.iso_8859-2.vim
@@ -1,259 +1,3 @@
-" Menu Translations: Serbian
-" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last Change:	Fri, 30 May 2003 12:04:48 -0400
-
-" Quit when menu translations have already been done.
-if exists("did_menu_trans")
-  finish
-endif
-let did_menu_trans = 1
-scriptencoding iso8859-2
-
-" Help menu
-menutrans &Help		      Pomo&ć
-menutrans &Overview<Tab><F1>  &Pregled<Tab><F1>
-menutrans &User\ Manual       &Uputstvo\ za\ korisnike
-menutrans &How-to\ links      &Kako\ da\.\.\.
-menutrans &Find		      &Nađi
-menutrans &Credits	      &Zasluge
-menutrans Co&pying	      P&reuzimanje
-menutrans O&rphans	      &Siročići
-menutrans &Version	      &Verzija
-menutrans &About	      &O\ programu
-
-" File menu
-menutrans &File			    &Datoteka
-menutrans &Open\.\.\.<Tab>:e	    &Otvori\.\.\.<Tab>:e
-menutrans Sp&lit-Open\.\.\.<Tab>:sp &Podeli-otvori\.\.\.<Tab>:sp
-menutrans &New<Tab>:enew	    &Nova<Tab>:enew
-menutrans &Close<Tab>:close	    &Zatvori<Tab>:close
-menutrans &Save<Tab>:w		    &Sačuvaj<Tab>:w
-menutrans Save\ &As\.\.\.<Tab>:sav  Sačuvaj\ &kao\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.  Podeli\ i\ &uporedi\ sa\.\.\.
-menutrans Split\ Patched\ &By\.\.\. Po&deli\ i\ prepravi\ sa\.\.\.
-menutrans &Print		    ©ta&mpaj
-menutrans Sa&ve-Exit<Tab>:wqa	    Sačuvaj\ i\ za&vrąi<Tab>:wqa
-menutrans E&xit<Tab>:qa		    K&raj<Tab>:qa
-
-" Edit menu
-menutrans &Edit			 &Uređivanje
-menutrans &Undo<Tab>u		 &Vrati<Tab>u
-menutrans &Redo<Tab>^R		 &Povrati<Tab>^R
-menutrans Rep&eat<Tab>\.	 P&onovi<Tab>\.
-menutrans Cu&t<Tab>"+x		 Ise&ci<Tab>"+x
-menutrans &Copy<Tab>"+y		 &Kopiraj<Tab>"+y
-menutrans &Paste<Tab>"+gP	 &Ubaci<Tab>"+gP
-menutrans &Paste<Tab>"+P	&Ubaci<Tab>"+gP
-menutrans Put\ &Before<Tab>[p	 Stavi\ pre&d<Tab>[p
-menutrans Put\ &After<Tab>]p	 Stavi\ &iza<Tab>]p
-menutrans &Delete<Tab>x		 Iz&briąi<Tab>x
-menutrans &Select\ all<Tab>ggVG  Izaberi\ sv&e<Tab>ggVG
-menutrans &Find\.\.\.		 &Nađi\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\. Nađi\ i\ &zameni\.\.\.
-menutrans Settings\ &Window	 P&rozor\ podeąavanja
-menutrans &Global\ Settings	 Op&ąta\ podeąavanja
-menutrans F&ile\ Settings	 Podeąavanja\ za\ da&toteke
-menutrans &Shiftwidth		 &Pomeraj
-menutrans Soft\ &Tabstop	 &Meka\ tabulacija
-menutrans Te&xt\ Width\.\.\.	 &©irina\ teksta\.\.\.
-menutrans &File\ Format\.\.\.	 &Vrsta\ datoteke\.\.\.
-menutrans C&olor\ Scheme	 Bo&je
-menutrans &Keymap		 Pres&likavanje\ tastature
-menutrans Select\ Fo&nt\.\.\.	 Izbor\ &fonta\.\.\.
-
-" Edit/Global Settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! Naglasi\ &obrazce\ (da/ne)<Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Zanemari\ \veličinu\ &slova\ (da/ne)<Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm! Proveri\ prateću\ &zagradu\ (da/ne)<Tab>:set\ sm!
-menutrans &Context\ lines  Vidljivi\ &redovi
-menutrans &Virtual\ Edit   Virtuelno\ &uređivanje
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!	Reľim\ u&nosa\ (da/ne)<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ saglasno\ (da/ne)<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\. Putanja\ &pretrage\.\.\.
-menutrans Ta&g\ Files\.\.\.   &Datoteke\ oznaka\.\.\.
-menutrans Toggle\ &Toolbar    Linija\ sa\ &alatkama\ (da/ne)
-menutrans Toggle\ &Bottom\ Scrollbar   Donja\ l&inija\ klizanja\ (da/ne)
-menutrans Toggle\ &Left\ Scrollbar  &Leva\ linija\ klizanja\ (da/ne)
-menutrans Toggle\ &Right\ Scrollbar &Desna\ linija\ klizanja\ (da/ne)
-
-" Edit/Global Settings/Virtual Edit
-menutrans Never		      Nikad
-menutrans Block\ Selection    Izbor\ bloka
-menutrans Insert\ mode	      Reľim\ unosa
-menutrans Block\ and\ Insert  Blok\ i\ unos
-menutrans Always	      Uvek
-
-" Edit/File Settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   Redni\ &brojevi\ (da/ne)<Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!	   Reľim\ &liste\ (da/ne)<Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!	   Obavijanje\ &redova\ (da/ne)<Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   Prelomi\ &na\ reč\ (da/ne)<Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!	   Razmaci\ umesto\ &tabulacije\ (da/ne)<Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!	Auto-&uvlačenje\ (da/ne)<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!	   &Ce-uvlačenje\ (da/ne)<Tab>:set\ cin!
-
-" Edit/Keymap
-menutrans None Nijedan
-
-" Tools menu
-menutrans &Tools	&Alatke
-menutrans &Jump\ to\ this\ tag<Tab>g^] Skoči\ na\ &ovu\ oznaku<Tab>g^]
-menutrans Jump\ &back<Tab>^T	 Skoči\ &natrag<Tab>^T
-menutrans Build\ &Tags\ File	 Izgradi\ &datoteku\ oznaka
-menutrans &Folding	      &Podvijanje
-menutrans Create\ &Fold<Tab>zf		  S&tvori\ podvijutak<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		  O&briąi\ podvijutak<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	  Obriąi\ sve\ po&dvijutke<Tab>zD
-menutrans Fold\ column\ &width		  ©irina\ &reda\ podvijutka
-menutrans &Diff		      &Upoređivanje
-menutrans &Make<Tab>:make     'mak&e'<Tab>:make
-menutrans &List\ Errors<Tab>:cl     Spisak\ &greąaka<Tab>:cl
-menutrans L&ist\ Messages<Tab>:cl!  Sp&isak\ poruka<Tab>:cl!
-menutrans &Next\ Error<Tab>:cn	    S&ledeća\ greąka<Tab>:cn
-menutrans &Previous\ Error<Tab>:cp  Pre&thodna\ greąka<Tab>:cp
-menutrans &Older\ List<Tab>:cold    Stari\ spisa&k<Tab>:cold
-menutrans N&ewer\ List<Tab>:cnew    No&vi\ spisak<Tab>:cnew
-menutrans Error\ &Window	    Prozor\ sa\ g&reąkama
-menutrans &Set\ Compiler	    I&zaberi\ prevodioca
-menutrans &Convert\ to\ HEX<Tab>:%!xxd	   Pretvori\ u\ &HEKS<Tab>:%!xxd
-menutrans Conve&rt\ back<Tab>:%!xxd\ -r    Vr&ati\ u\ prvobitan\ oblik<Tab>:%!xxd\ -r
-
-" Tools/Folding
-menutrans &Enable/Disable\ folds<Tab>zi   &Omogući/prekini\ podvijanje<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv	  &Pokaľi\ red\ sa\ kursorom<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Pokaľi\ &samo\ red\ sa\ kursorom<Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm   &Zatvori\ viąe\ podvijutaka<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    Zatvori\ s&ve\ podvijutke<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    Otvori\ vią&e\ podvijutaka<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR     O&tvori\ sve\ podvijutke<Tab>zR
-menutrans Fold\ Met&hod		       &Način\ podvijanja
+" Menu Translations:	Serbian
 
-" Tools/Folding/Fold Method
-menutrans M&anual	&Ručno
-menutrans I&ndent	&Uvučenost
-menutrans E&xpression	&Izraz
-menutrans S&yntax	&Sintaksa
-"menutrans &Diff
-menutrans Ma&rker	&Oznaka
-
-" Tools/Diff
-menutrans &Update	&Aľuriraj
-menutrans &Get\ Block	&Prihvati\ izmenu
-menutrans &Put\ Block	Pre&baci\ izmenu
-
-" Tools/Error Window
-menutrans &Update<Tab>:cwin   &Aľuriraj<Tab>:cwin
-menutrans &Open<Tab>:copen    &Otvori<Tab>:copen
-menutrans &Close<Tab>:cclose  &Zatvori<Tab>:cclose
-
-" Bufers menu
-menutrans &Buffers	   &Baferi
-menutrans &Refresh\ menu   &Aľuriraj
-menutrans Delete	   &Obriąi
-menutrans &Alternate	   A&lternativni
-menutrans &Next		   &Sledeći
-menutrans &Previous	   &Prethodni
-menutrans [No\ File]	   [Nema\ datoteke]
-
-" Window menu
-menutrans &Window		    &Prozor
-menutrans &New<Tab>^Wn		    &Novi<Tab>^Wn
-menutrans S&plit<Tab>^Ws	    &Podeli<Tab>^Ws
-menutrans Sp&lit\ To\ #<Tab>^W^^    Podeli\ sa\ &alternativnim<Tab>^W^^
-menutrans Split\ &Vertically<Tab>^Wv   Podeli\ &uspravno<Tab>^Wv
-menutrans Split\ File\ E&xplorer    Podeli\ za\ pregled\ &datoteka
-menutrans &Close<Tab>^Wc	    &Zatvori<Tab>^Wc
-menutrans Close\ &Other(s)<Tab>^Wo  Zatvori\ &ostale<Tab>^Wo
-"menutrans Ne&xt<Tab>^Ww       &Sledeći<Tab>^Ww
-"menutrans P&revious<Tab>^WW	  P&rethodni<Tab>^WW
-menutrans Move\ &To		    Pre&mesti
-menutrans Rotate\ &Up<Tab>^WR	    &Kruľno\ nagore<Tab>^WR
-menutrans Rotate\ &Down<Tab>^Wr     Kruľno\ nadol&e<Tab>^Wr
-menutrans &Equal\ Size<Tab>^W=	    &Iste\ veličine<Tab>^W=
-menutrans &Max\ Height<Tab>^W_	    Maksimalna\ &visina<Tab>^W_
-menutrans M&in\ Height<Tab>^W1_     Minima&lna\ visina<Tab>^W1_
-menutrans Max\ &Width<Tab>^W\|	    Maksimalna\ &ąirina<Tab>^W\|
-menutrans Min\ Widt&h<Tab>^W1\|     Minimalna\ ąi&rina<Tab>^W1\|
-
-" Window/Move To
-menutrans &Top<Tab>^WK		 &Vrh<Tab>^WK
-menutrans &Bottom<Tab>^WJ	 &Podnoľje<Tab>^WJ
-menutrans &Left\ side<Tab>^WH	 U&levo<Tab>^WH
-menutrans &Right\ side<Tab>^WL	 U&desno<Tab>^WL
-
-" The popup menu
-menutrans &Undo		      &Vrati
-menutrans Cu&t		      &Iseci
-menutrans &Copy		      &Kopiraj
-menutrans &Paste	      &Ubaci
-menutrans &Delete	      I&zbriąi
-menutrans Select\ Blockwise   Biraj\ &pravougaono
-menutrans Select\ &Word       Izaberi\ &reč
-menutrans Select\ &Line       Izaberi\ r&ed
-menutrans Select\ &Block      Izaberi\ &blok
-menutrans Select\ &All	      Izaberi\ &sve
-
-" The GUI toolbar
-if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open	   Učitaj
-    tmenu ToolBar.Save	   Sačuvaj
-    tmenu ToolBar.SaveAll  Sačuvaj sve
-    tmenu ToolBar.Print    ©tampaj
-    tmenu ToolBar.Undo	   Vrati
-    tmenu ToolBar.Redo	   Povrati
-    tmenu ToolBar.Cut	   Iseci
-    tmenu ToolBar.Copy	   Kopiraj
-    tmenu ToolBar.Paste    Ubaci
-    tmenu ToolBar.Find	   Nađi
-    tmenu ToolBar.FindNext Nađi sledeći
-    tmenu ToolBar.FindPrev Nađi prethodni
-    tmenu ToolBar.Replace  Zameni
-    tmenu ToolBar.New	   Novi
-    tmenu ToolBar.WinSplit Podeli prozor
-    tmenu ToolBar.WinMax   Maksimalna visina
-    tmenu ToolBar.WinMin   Minimalna visina
-    tmenu ToolBar.WinVSplit   Podeli uspravno
-    tmenu ToolBar.WinMaxWidth Maksimalna ąirina
-    tmenu ToolBar.WinMinWidth Minimalna ąirina
-    tmenu ToolBar.WinClose Zatvori prozor
-    tmenu ToolBar.LoadSesn Učitaj seansu
-    tmenu ToolBar.SaveSesn Sačuvaj seansu
-    tmenu ToolBar.RunScript   Izvrąi spis
-    tmenu ToolBar.Make	   'make'
-    tmenu ToolBar.Shell    Operativno okruľenje
-    tmenu ToolBar.RunCtags Napravi oznake
-    tmenu ToolBar.TagJump  Idi na oznaku
-    tmenu ToolBar.Help	   Pomoć
-    tmenu ToolBar.FindHelp Nađi objaąnjenje
-  endfun
-endif
-
-" Syntax menu
-menutrans &Syntax &Sintaksa
-menutrans &Show\ filetypes\ in\ menu  Izbor\ 'filetype'\ iz\ &menija
-menutrans Set\ '&syntax'\ only	 Pode&si\ 'syntax'\ samo
-menutrans Set\ '&filetype'\ too  Podesi\ 'filetype'\ &takođe
-menutrans &Off	     &Isključeno
-menutrans &Manual    &Ručno
-menutrans A&utomatic	&Automatski
-menutrans on/off\ for\ &This\ file     Da/ne\ za\ ovu\ &datoteku
-menutrans Co&lor\ test	   Provera\ &boja
-menutrans &Highlight\ test Provera\ isti&canja
-menutrans &Convert\ to\ HTML  Pretvori\ &u\ HTML
-
-" dialog texts
-let menutrans_help_dialog = "Unesite naredbu ili reč čije pojaąnjenje traľite:\n\nDodajte i_ za naredbe unosa (npr. i_CTRL-X)\nDodajte c_ za naredbe komandnog reľima (npr. s_<Del>)\nDodajte ' za imena opcija (npr. 'shiftwidth')"
-
-let g:menutrans_path_dialog = "Unesite put pretrage za datoteke\nRazdvojite zarezima imena direktorijuma."
-
-let g:menutrans_tags_dialog = "Unesite imena datoteka sa oznakama\nRazdvojite zarezima imena."
-
-let g:menutrans_textwidth_dialog = "Unesite novu ąirinu teksta (0 sprečava prelom)"
-
-let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
-
-let menutrans_no_file = "[Nema datoteke]"
+source <sfile>:p:h/menu_sr_rs.iso_8859-2.vim
--- a/runtime/lang/menu_sr_yu.iso_8859-5.vim
+++ b/runtime/lang/menu_sr_yu.iso_8859-5.vim
@@ -1,259 +1,3 @@
-" Menu Translations: Serbian
-" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last Change:	Fri, 30 May 2003 12:02:07 -0400
-
-" Quit when menu translations have already been done.
-if exists("did_menu_trans")
-  finish
-endif
-let did_menu_trans = 1
-scriptencoding iso8859-5
-
-" Help menu
-menutrans &Help		      żŢÜŢ&ű
-menutrans &Overview<Tab><F1>  &żŕŐÓŰŐÔ<Tab><F1>
-menutrans &User\ Manual       &ĂßăâáâŇŢ\ ×Đ\ ÚŢŕŘáÝŘÚŐ
-menutrans &How-to\ links      &şĐÚŢ\ ÔĐ\.\.\.
-menutrans &Find		      &˝ĐňŘ
-menutrans &Credits	      &·ĐáŰăÓŐ
-menutrans Co&pying	      ż&ŕŐă×ŘÜĐúŐ
-menutrans O&rphans	      &ÁŘŕŢçŘűŘ
-menutrans &Version	      &˛Őŕ×ŘřĐ
-menutrans &About	      &ľ\ ßŕŢÓŕĐÜă
-
-" File menu
-menutrans &File			    &´ĐâŢâŐÚĐ
-menutrans &Open\.\.\.<Tab>:e	    &ľâŇŢŕŘ\.\.\.<Tab>:e
-menutrans Sp&lit-Open\.\.\.<Tab>:sp &żŢÔŐŰŘ-ŢâŇŢŕŘ\.\.\.<Tab>:sp
-menutrans &New<Tab>:enew	    &˝ŢŇĐ<Tab>:enew
-menutrans &Close<Tab>:close	    &·ĐâŇŢŕŘ<Tab>:close
-menutrans &Save<Tab>:w		    &ÁĐçăŇĐř<Tab>:w
-menutrans Save\ &As\.\.\.<Tab>:sav  ÁĐçăŇĐř\ &ÚĐŢ\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.  żŢÔŐŰŘ\ Ř\ &ăßŢŕŐÔŘ\ áĐ\.\.\.
-menutrans Split\ Patched\ &By\.\.\. żŢ&ÔŐŰŘ\ Ř\ ßŕŐßŕĐŇŘ\ áĐ\.\.\.
-menutrans &Print		    ČâĐ&ÜßĐř
-menutrans Sa&ve-Exit<Tab>:wqa	    ÁĐçăŇĐř\ Ř\ ×Đ&ŇŕčŘ<Tab>:wqa
-menutrans E&xit<Tab>:qa		    ş&ŕĐř<Tab>:qa
-
-" Edit menu
-menutrans &Edit			 &ĂŕŐňŘŇĐúŐ
-menutrans &Undo<Tab>u		 &˛ŕĐâŘ<Tab>u
-menutrans &Redo<Tab>^R		 &żŢŇŕĐâŘ<Tab>^R
-menutrans Rep&eat<Tab>\.	 ż&ŢÝŢŇŘ<Tab>\.
-menutrans Cu&t<Tab>"+x		 ¸áŐ&ćŘ<Tab>"+x
-menutrans &Copy<Tab>"+y		 &şŢßŘŕĐř<Tab>"+y
-menutrans &Paste<Tab>"+gP	 &ĂŃĐćŘ<Tab>"+gP
-menutrans &Paste<Tab>"+P	&ĂŃĐćŘ<Tab>"+gP
-menutrans Put\ &Before<Tab>[p	 ÁâĐŇŘ\ ßŕŐ&Ô<Tab>[p
-menutrans Put\ &After<Tab>]p	 ÁâĐŇŘ\ &Ř×Đ<Tab>]p
-menutrans &Delete<Tab>x		 ¸×&ŃŕŘčŘ<Tab>x
-menutrans &Select\ all<Tab>ggVG  ¸×ĐŃŐŕŘ\ áŇ&Ő<Tab>ggVG
-menutrans &Find\.\.\.		 &˝ĐňŘ\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\. ˝ĐňŘ\ Ř\ &×ĐÜŐÝŘ\.\.\.
-menutrans Settings\ &Window	 ż&ŕŢ×Ţŕ\ ßŢÔŐčĐŇĐúĐ
-menutrans &Global\ Settings	 ľß&čâĐ\ ßŢÔŐčĐŇĐúĐ
-menutrans F&ile\ Settings	 żŢÔŐčĐŇĐúĐ\ ×Đ\ ÔĐ&âŢâŐÚŐ
-menutrans &Shiftwidth		 &żŢÜŐŕĐř
-menutrans Soft\ &Tabstop	 &ĽŐÚĐ\ âĐŃăŰĐćŘřĐ
-menutrans Te&xt\ Width\.\.\.	 &ČŘŕŘÝĐ\ âŐÚáâĐ\.\.\.
-menutrans &File\ Format\.\.\.	 &˛ŕáâĐ\ ÔĐâŢâŐÚŐ\.\.\.
-menutrans C&olor\ Scheme	 ±Ţ&řŐ
-menutrans &Keymap		 żŕŐá&ŰŘÚĐŇĐúŐ\ âĐáâĐâăŕŐ
-menutrans Select\ Fo&nt\.\.\.	 ¸×ŃŢŕ\ &äŢÝâĐ\.\.\.
-
-" Edit/Global Settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! ˝ĐÓŰĐáŘ\ &ŢŃŕĐ×ćŐ\ (ÔĐ/ÝŐ)<Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic! ·ĐÝŐÜĐŕŘ\ \ŇŐŰŘçŘÝă\ &áŰŢŇĐ\ (ÔĐ/ÝŐ)<Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm! żŕŢŇŐŕŘ\ ßŕĐâŐűă\ &×ĐÓŕĐÔă\ (ÔĐ/ÝŐ)<Tab>:set\ sm!
-menutrans &Context\ lines  ˛ŘÔůŘŇŘ\ &ŕŐÔŢŇŘ
-menutrans &Virtual\ Edit   ˛ŘŕâăŐŰÝŢ\ &ăŕŐňŘŇĐúŐ
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!	ŔŐÖŘÜ\ ă&ÝŢáĐ\ (ÔĐ/ÝŐ)<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ áĐÓŰĐáÝŢ\ (ÔĐ/ÝŐ)<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\. żăâĐúĐ\ &ßŕŐâŕĐÓŐ\.\.\.
-menutrans Ta&g\ Files\.\.\.   &´ĐâŢâŐÚŐ\ Ţ×ÝĐÚĐ\.\.\.
-menutrans Toggle\ &Toolbar    »ŘÝŘřĐ\ áĐ\ &ĐŰĐâÚĐÜĐ\ (ÔĐ/ÝŐ)
-menutrans Toggle\ &Bottom\ Scrollbar   ´ŢúĐ\ Ű&ŘÝŘřĐ\ ÚŰŘ×ĐúĐ\ (ÔĐ/ÝŐ)
-menutrans Toggle\ &Left\ Scrollbar  &»ŐŇĐ\ ŰŘÝŘřĐ\ ÚŰŘ×ĐúĐ\ (ÔĐ/ÝŐ)
-menutrans Toggle\ &Right\ Scrollbar &´ŐáÝĐ\ ŰŘÝŘřĐ\ ÚŰŘ×ĐúĐ\ (ÔĐ/ÝŐ)
-
-" Edit/Global Settings/Virtual Edit
-menutrans Never		      ˝ŘÚĐÔ
-menutrans Block\ Selection    ¸×ŃŢŕ\ ŃŰŢÚĐ
-menutrans Insert\ mode	      ŔŐÖŘÜ\ ăÝŢáĐ
-menutrans Block\ and\ Insert  ±ŰŢÚ\ Ř\ ăÝŢá
-menutrans Always	      ĂŇŐÚ
-
-" Edit/File Settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   ŔŐÔÝŘ\ &ŃŕŢřŐŇŘ\ (ÔĐ/ÝŐ)<Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!	   ŔŐÖŘÜ\ &ŰŘáâŐ\ (ÔĐ/ÝŐ)<Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!	   ľŃĐŇŘřĐúŐ\ &ŕŐÔŢŇĐ\ (ÔĐ/ÝŐ)<Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   żŕŐŰŢÜŘ\ &ÝĐ\ ŕŐç\ (ÔĐ/ÝŐ)<Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!	   ŔĐ×ÜĐćŘ\ ăÜŐáâŢ\ &âĐŃăŰĐćŘřŐ\ (ÔĐ/ÝŐ)<Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!	°ăâŢ-&ăŇŰĐçŐúŐ\ (ÔĐ/ÝŐ)<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!	   &ĆŐ-ăŇŰĐçŐúŐ\ (ÔĐ/ÝŐ)<Tab>:set\ cin!
-
-" Edit/Keymap
-menutrans None ˝ŘřŐÔĐÝ
-
-" Tools menu
-menutrans &Tools	&°ŰĐâÚŐ
-menutrans &Jump\ to\ this\ tag<Tab>g^] ÁÚŢçŘ\ ÝĐ\ &ŢŇă\ Ţ×ÝĐÚă<Tab>g^]
-menutrans Jump\ &back<Tab>^T	 ÁÚŢçŘ\ &ÝĐâŕĐÓ<Tab>^T
-menutrans Build\ &Tags\ File	 ¸×ÓŕĐÔŘ\ &ÔĐâŢâŐÚă\ Ţ×ÝĐÚĐ
-menutrans &Folding	      &żŢÔŇŘřĐúŐ
-menutrans Create\ &Fold<Tab>zf		  Á&âŇŢŕŘ\ ßŢÔŇŘřăâĐÚ<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		  ľ&ŃŕŘčŘ\ ßŢÔŇŘřăâĐÚ<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	  ľŃŕŘčŘ\ áŇŐ\ ßŢ&ÔŇŘřăâÚŐ<Tab>zD
-menutrans Fold\ column\ &width		  ČŘŕŘÝĐ\ &ŕŐÔĐ\ ßŢÔŇŘřăâÚĐ
-menutrans &Diff		      &ĂßŢŕŐňŘŇĐúŐ
-menutrans &Make<Tab>:make     'mak&Ő'<Tab>:make
-menutrans &List\ Errors<Tab>:cl     ÁßŘáĐÚ\ &ÓŕŐčĐÚĐ<Tab>:cl
-menutrans L&ist\ Messages<Tab>:cl!  Áß&ŘáĐÚ\ ßŢŕăÚĐ<Tab>:cl!
-menutrans &Next\ Error<Tab>:cn	    Á&ŰŐÔŐűĐ\ ÓŕŐčÚĐ<Tab>:cn
-menutrans &Previous\ Error<Tab>:cp  żŕŐ&âĺŢÔÝĐ\ ÓŕŐčÚĐ<Tab>:cp
-menutrans &Older\ List<Tab>:cold    ÁâĐŕŘ\ áßŘáĐ&Ú<Tab>:cold
-menutrans N&ewer\ List<Tab>:cnew    ˝Ţ&ŇŘ\ áßŘáĐÚ<Tab>:cnew
-menutrans Error\ &Window	    żŕŢ×Ţŕ\ áĐ\ Ó&ŕŐčÚĐÜĐ
-menutrans &Set\ Compiler	    ¸&×ĐŃŐŕŘ\ ßŕŐŇŢÔŘŢćĐ
-menutrans &Convert\ to\ HEX<Tab>:%!xxd	   żŕŐâŇŢŕŘ\ ă\ &ŵşÁ<Tab>:%!xxd
-menutrans Conve&rt\ back<Tab>:%!xxd\ -r    ˛ŕ&ĐâŘ\ ă\ ßŕŇŢŃŘâĐÝ\ ŢŃŰŘÚ<Tab>:%!xxd\ -r
-
-" Tools/Folding
-menutrans &Enable/Disable\ folds<Tab>zi   &ľÜŢÓăűŘ/ßŕŐÚŘÝŘ\ ßŢÔŇŘřĐúŐ<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv	  &żŢÚĐÖŘ\ ŕŐÔ\ áĐ\ ÚăŕáŢŕŢÜ<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx żŢÚĐÖŘ\ &áĐÜŢ\ ŕŐÔ\ áĐ\ ÚăŕáŢŕŢÜ<Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm   &·ĐâŇŢŕŘ\ ŇŘčŐ\ ßŢÔŇŘřăâĐÚĐ<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    ·ĐâŇŢŕŘ\ á&ŇŐ\ ßŢÔŇŘřăâÚŐ<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    ľâŇŢŕŘ\ ŇŘč&Ő\ ßŢÔŇŘřăâĐÚĐ<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR     ľ&âŇŢŕŘ\ áŇŐ\ ßŢÔŇŘřăâÚŐ<Tab>zR
-menutrans Fold\ Met&hod		       &˝ĐçŘÝ\ ßŢÔŇŘřĐúĐ
+" Menu Translations:	Serbian
 
-" Tools/Folding/Fold Method
-menutrans M&anual	&ŔăçÝŢ
-menutrans I&ndent	&ĂŇăçŐÝŢáâ
-menutrans E&xpression	&¸×ŕĐ×
-menutrans S&yntax	&ÁŘÝâĐÚáĐ
-"menutrans &Diff
-menutrans Ma&rker	&ľ×ÝĐÚĐ
-
-" Tools/Diff
-menutrans &Update	&°ÖăŕŘŕĐř
-menutrans &Get\ Block	&żŕŘĺŇĐâŘ\ Ř×ÜŐÝă
-menutrans &Put\ Block	żŕŐ&ŃĐćŘ\ Ř×ÜŐÝă
-
-" Tools/Error Window
-menutrans &Update<Tab>:cwin   &°ÖăŕŘŕĐř<Tab>:cwin
-menutrans &Open<Tab>:copen    &ľâŇŢŕŘ<Tab>:copen
-menutrans &Close<Tab>:cclose  &·ĐâŇŢŕŘ<Tab>:cclose
-
-" Bufers menu
-menutrans &Buffers	   &±ĐäŐŕŘ
-menutrans &Refresh\ menu   &°ÖăŕŘŕĐř
-menutrans Delete	   &ľŃŕŘčŘ
-menutrans &Alternate	   °&ŰâŐŕÝĐâŘŇÝŘ
-menutrans &Next		   &ÁŰŐÔŐűŘ
-menutrans &Previous	   &żŕŐâĺŢÔÝŘ
-menutrans [No\ File]	   [˝ŐÜĐ\ ÔĐâŢâŐÚŐ]
-
-" Window menu
-menutrans &Window		    &żŕŢ×Ţŕ
-menutrans &New<Tab>^Wn		    &˝ŢŇŘ<Tab>^Wn
-menutrans S&plit<Tab>^Ws	    &żŢÔŐŰŘ<Tab>^Ws
-menutrans Sp&lit\ To\ #<Tab>^W^^    żŢÔŐŰŘ\ áĐ\ &ĐŰâŐŕÝĐâŘŇÝŘÜ<Tab>^W^^
-menutrans Split\ &Vertically<Tab>^Wv   żŢÔŐŰŘ\ &ăáßŕĐŇÝŢ<Tab>^Wv
-menutrans Split\ File\ E&xplorer    żŢÔŐŰŘ\ ×Đ\ ßŕŐÓŰŐÔ\ &ÔĐâŢâŐÚĐ
-menutrans &Close<Tab>^Wc	    &·ĐâŇŢŕŘ<Tab>^Wc
-menutrans Close\ &Other(s)<Tab>^Wo  ·ĐâŇŢŕŘ\ &ŢáâĐŰŐ<Tab>^Wo
-"menutrans Ne&xt<Tab>^Ww       &ÁŰŐÔŐűŘ<Tab>^Ww
-"menutrans P&revious<Tab>^WW	  ż&ŕŐâĺŢÔÝŘ<Tab>^WW
-menutrans Move\ &To		    żŕŐ&ÜŐáâŘ
-menutrans Rotate\ &Up<Tab>^WR	    &şŕăÖÝŢ\ ÝĐÓŢŕŐ<Tab>^WR
-menutrans Rotate\ &Down<Tab>^Wr     şŕăÖÝŢ\ ÝĐÔŢŰ&Ő<Tab>^Wr
-menutrans &Equal\ Size<Tab>^W=	    &¸áâŐ\ ŇŐŰŘçŘÝŐ<Tab>^W=
-menutrans &Max\ Height<Tab>^W_	    ĽĐÚáŘÜĐŰÝĐ\ &ŇŘáŘÝĐ<Tab>^W_
-menutrans M&in\ Height<Tab>^W1_     ĽŘÝŘÜĐ&ŰÝĐ\ ŇŘáŘÝĐ<Tab>^W1_
-menutrans Max\ &Width<Tab>^W\|	    ĽĐÚáŘÜĐŰÝĐ\ &čŘŕŘÝĐ<Tab>^W\|
-menutrans Min\ Widt&h<Tab>^W1\|     ĽŘÝŘÜĐŰÝĐ\ čŘ&ŕŘÝĐ<Tab>^W1\|
-
-" Window/Move To
-menutrans &Top<Tab>^WK		 &˛ŕĺ<Tab>^WK
-menutrans &Bottom<Tab>^WJ	 &żŢÔÝŢÖřŐ<Tab>^WJ
-menutrans &Left\ side<Tab>^WH	 Ă&ŰŐŇŢ<Tab>^WH
-menutrans &Right\ side<Tab>^WL	 Ă&ÔŐáÝŢ<Tab>^WL
-
-" The popup menu
-menutrans &Undo		      &˛ŕĐâŘ
-menutrans Cu&t		      &¸áŐćŘ
-menutrans &Copy		      &şŢßŘŕĐř
-menutrans &Paste	      &ĂŃĐćŘ
-menutrans &Delete	      ¸&×ŃŕŘčŘ
-menutrans Select\ Blockwise   ±ŘŕĐř\ &ßŕĐŇŢăÓĐŢÝŢ
-menutrans Select\ &Word       ¸×ĐŃŐŕŘ\ &ŕŐç
-menutrans Select\ &Line       ¸×ĐŃŐŕŘ\ ŕ&ŐÔ
-menutrans Select\ &Block      ¸×ĐŃŐŕŘ\ &ŃŰŢÚ
-menutrans Select\ &All	      ¸×ĐŃŐŕŘ\ &áŇŐ
-
-" The GUI toolbar
-if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open	   ĂçŘâĐř
-    tmenu ToolBar.Save	   ÁĐçăŇĐř
-    tmenu ToolBar.SaveAll  ÁĐçăŇĐř áŇŐ
-    tmenu ToolBar.Print    ČâĐÜßĐř
-    tmenu ToolBar.Undo	   ˛ŕĐâŘ
-    tmenu ToolBar.Redo	   żŢŇŕĐâŘ
-    tmenu ToolBar.Cut	   ¸áŐćŘ
-    tmenu ToolBar.Copy	   şŢßŘŕĐř
-    tmenu ToolBar.Paste    ĂŃĐćŘ
-    tmenu ToolBar.Find	   ˝ĐňŘ
-    tmenu ToolBar.FindNext ˝ĐňŘ áŰŐÔŐűŘ
-    tmenu ToolBar.FindPrev ˝ĐňŘ ßŕŐâĺŢÔÝŘ
-    tmenu ToolBar.Replace  ·ĐÜŐÝŘ
-    tmenu ToolBar.New	   ˝ŢŇŘ
-    tmenu ToolBar.WinSplit żŢÔŐŰŘ ßŕŢ×Ţŕ
-    tmenu ToolBar.WinMax   ĽĐÚáŘÜĐŰÝĐ ŇŘáŘÝĐ
-    tmenu ToolBar.WinMin   ĽŘÝŘÜĐŰÝĐ ŇŘáŘÝĐ
-    tmenu ToolBar.WinVSplit   żŢÔŐŰŘ ăáßŕĐŇÝŢ
-    tmenu ToolBar.WinMaxWidth ĽĐÚáŘÜĐŰÝĐ čŘŕŘÝĐ
-    tmenu ToolBar.WinMinWidth ĽŘÝŘÜĐŰÝĐ čŘŕŘÝĐ
-    tmenu ToolBar.WinClose ·ĐâŇŢŕŘ ßŕŢ×Ţŕ
-    tmenu ToolBar.LoadSesn ĂçŘâĐř áŐĐÝáă
-    tmenu ToolBar.SaveSesn ÁĐçăŇĐř áŐĐÝáă
-    tmenu ToolBar.RunScript   ¸×ŇŕčŘ áßŘá
-    tmenu ToolBar.Make	   'make'
-    tmenu ToolBar.Shell    ľßŐŕĐâŘŇÝŢ ŢÚŕăÖŐúŐ
-    tmenu ToolBar.RunCtags ˝ĐßŕĐŇŘ Ţ×ÝĐÚŐ
-    tmenu ToolBar.TagJump  ¸ÔŘ ÝĐ Ţ×ÝĐÚă
-    tmenu ToolBar.Help	   żŢÜŢű
-    tmenu ToolBar.FindHelp ˝ĐňŘ ŢŃřĐčúŐúŐ
-  endfun
-endif
-
-" Syntax menu
-menutrans &Syntax &ÁŘÝâĐÚáĐ
-menutrans &Show\ filetypes\ in\ menu  ¸×ŃŢŕ\ 'filetype'\ Ř×\ &ÜŐÝŘřĐ
-menutrans Set\ '&syntax'\ only	 żŢÔŐ&áŘ\ 'syntax'\ áĐÜŢ
-menutrans Set\ '&filetype'\ too  żŢÔŐáŘ\ 'filetype'\ &âĐÚŢňŐ
-menutrans &Off	     &¸áÚůăçŐÝŢ
-menutrans &Manual    &ŔăçÝŢ
-menutrans A&utomatic	&°ăâŢÜĐâáÚŘ
-menutrans on/off\ for\ &This\ file     ´Đ/ÝŐ\ ×Đ\ ŢŇă\ &ÔĐâŢâŐÚă
-menutrans Co&lor\ test	   żŕŢŇŐŕĐ\ &ŃŢřĐ
-menutrans &Highlight\ test żŕŢŇŐŕĐ\ ŘáâŘ&ćĐúĐ
-menutrans &Convert\ to\ HTML  żŕŐâŇŢŕŘ\ &ă\ HTML
-
-" dialog texts
-let menutrans_help_dialog = "ĂÝŐáŘâŐ ÝĐŕŐÔŃă ŘŰŘ ŕŐç çŘřŐ ßŢřĐčúŐúŐ âŕĐÖŘâŐ:\n\n´ŢÔĐřâŐ i_ ×Đ ÝĐŕŐÔŃŐ ăÝŢáĐ (Ýßŕ. i_CTRL-X)\n´ŢÔĐřâŐ c_ ×Đ ÝĐŕŐÔŃŐ ÚŢÜĐÝÔÝŢÓ ŕŐÖŘÜĐ (Ýßŕ. á_<Del>)\n´ŢÔĐřâŐ ' ×Đ ŘÜŐÝĐ ŢßćŘřĐ (Ýßŕ. 'shiftwidth')"
-
-let g:menutrans_path_dialog = "ĂÝŐáŘâŐ ßăâ ßŕŐâŕĐÓŐ ×Đ ÔĐâŢâŐÚŐ\nŔĐ×ÔŇŢřŘâŐ ×ĐŕŐ×ŘÜĐ ŘÜŐÝĐ ÔŘŕŐÚâŢŕŘřăÜĐ."
-
-let g:menutrans_tags_dialog = "ĂÝŐáŘâŐ ŘÜŐÝĐ ÔĐâŢâŐÚĐ áĐ Ţ×ÝĐÚĐÜĐ\nŔĐ×ÔŇŢřŘâŐ ×ĐŕŐ×ŘÜĐ ŘÜŐÝĐ."
-
-let g:menutrans_textwidth_dialog = "ĂÝŐáŘâŐ ÝŢŇă čŘŕŘÝă âŐÚáâĐ (0 áßŕŐçĐŇĐ ßŕŐŰŢÜ)"
-
-let g:menutrans_fileformat_dialog = "¸×ĐŃŐŕŘâŐ Ňŕáâă ÔĐâŢâŐÚŐ"
-
-let menutrans_no_file = "[˝ŐÜĐ ÔĐâŢâŐÚŐ]"
+source <sfile>:p:h/menu_sr_rs.iso_8859-5.vim
--- a/runtime/lang/menu_sr_yu.utf-8.vim
+++ b/runtime/lang/menu_sr_yu.utf-8.vim
@@ -1,261 +1,3 @@
-" Menu Translations: Serbian
-" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last Change:	Fri, 30 May 2003 10:17:39 Eastern Daylight Time
-
-" Quit when menu translations have already been done.
-if exists("did_menu_trans")
-  finish
-endif
-let did_menu_trans = 1
-scriptencoding utf-8
-
-" Help menu
-menutrans &Help		      Помо&ћ
-menutrans &Overview<Tab><F1>  &Преглед<Tab><F1>
-menutrans &User\ Manual       &ĐŁĐżŃŃ‚Ńтво\ Đ·Đ°\ кориŃнике
-menutrans &How-to\ links      &Како\ да\.\.\.
-menutrans &Find		      &Нађи
-menutrans &Credits	      &Đ—Đ°ŃĐ»Ńге
-menutrans Co&pying	      Đź&реŃзимање
-menutrans O&rphans	      &Сирочићи
-menutrans &Version	      &ВерзиŃĐ°
-menutrans &About	      &Đž\ програмŃ
-
-" File menu
-menutrans &File			    &Датотека
-menutrans &Open\.\.\.<Tab>:e	    &Отвори\.\.\.<Tab>:e
-menutrans Sp&lit-Open\.\.\.<Tab>:sp &Подели-отвори\.\.\.<Tab>:sp
-menutrans &New<Tab>:enew	    &Нова<Tab>:enew
-menutrans &Close<Tab>:close	    &Затвори<Tab>:close
-menutrans &Save<Tab>:w		    &СачŃваŃ<Tab>:w
-menutrans Save\ &As\.\.\.<Tab>:sav  СачŃваŃ\ &као\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.  Подели\ и\ &Ńпореди\ ŃĐ°\.\.\.
-menutrans Split\ Patched\ &By\.\.\. По&дели\ и\ преправи\ ŃĐ°\.\.\.
-menutrans &Print		    Шта&мпаŃ
-menutrans Sa&ve-Exit<Tab>:wqa	    СачŃваŃ\ и\ Đ·Đ°&врŃи<Tab>:wqa
-menutrans E&xit<Tab>:qa		    Đš&раŃ<Tab>:qa
-
-" Edit menu
-menutrans &Edit			 &Уређивање
-menutrans &Undo<Tab>u		 &Врати<Tab>u
-menutrans &Redo<Tab>^R		 &Поврати<Tab>^R
-menutrans Rep&eat<Tab>\.	 П&онови<Tab>\.
-menutrans Cu&t<Tab>"+x		 ĐŃе&ци<Tab>"+x
-menutrans &Copy<Tab>"+y		 &КопираŃ<Tab>"+y
-menutrans &Paste<Tab>"+gP	 &Убаци<Tab>"+gP
-menutrans &Paste<Tab>"+P	&Убаци<Tab>"+gP
-menutrans Put\ &Before<Tab>[p	 Стави\ пре&д<Tab>[p
-menutrans Put\ &After<Tab>]p	 Стави\ &иза<Tab>]p
-menutrans &Delete<Tab>x		 ĐĐ·&бриŃи<Tab>x
-menutrans &Select\ all<Tab>ggVG  Đзабери\ Ńв&е<Tab>ggVG
-menutrans &Find\.\.\.		 &Нађи\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\. Нађи\ и\ &замени\.\.\.
-menutrans Settings\ &Window	 Đź&розор\ подеŃавања
-menutrans &Global\ Settings	 Оп&ŃŃ‚Đ°\ подеŃавања
-menutrans F&ile\ Settings	 ПодеŃавања\ Đ·Đ°\ Đ´Đ°&тотеке
-menutrans &Shiftwidth		 &ПомераŃ
-menutrans Soft\ &Tabstop	 &Мека\ табŃлациŃĐ°
-menutrans Te&xt\ Width\.\.\.	 &Ширина\ текŃŃ‚Đ°\.\.\.
-menutrans &File\ Format\.\.\.	 &Đ’Ń€ŃŃ‚Đ°\ датотеке\.\.\.
-menutrans C&olor\ Scheme	 Đ‘Đľ&Ńе
-menutrans &Keymap		 ПреŃ&ликавање\ Ń‚Đ°ŃŃ‚Đ°Ń‚Ńре
-menutrans Select\ Fo&nt\.\.\.	 Đзбор\ &фонта\.\.\.
-
-" Edit/Global Settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls! НаглаŃи\ &образце\ (Đ´Đ°/не)<Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic! Занемари\ \величинŃ\ &Ńлова\ (Đ´Đ°/не)<Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm! Провери\ пратећŃ\ &заградŃ\ (Đ´Đ°/не)<Tab>:set\ sm!
-menutrans &Context\ lines  Видљиви\ &редови
-menutrans &Virtual\ Edit   ВиртŃелно\ &Ńређивање
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!   Режим\ Ń&ноŃĐ°\ (Đ´Đ°/не)<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!     '&Vi'\ ŃаглаŃно\ (Đ´Đ°/не)<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\. ĐźŃтања\ &претраге\.\.\.
-menutrans Ta&g\ Files\.\.\.   &Датотеке\ ознака\.\.\.
-menutrans Toggle\ &Toolbar    ЛиниŃĐ°\ ŃĐ°\ &алаткама\ (Đ´Đ°/не)
-menutrans Toggle\ &Bottom\ Scrollbar   Доња\ Đ»&иниŃĐ°\ клизања\ (Đ´Đ°/не)
-menutrans Toggle\ &Left\ Scrollbar  &Лева\ линиŃĐ°\ клизања\ (Đ´Đ°/не)
-menutrans Toggle\ &Right\ Scrollbar &ДеŃна\ линиŃĐ°\ клизања\ (Đ´Đ°/не)
-
-" Edit/Global Settings/Virtual Edit
-menutrans Never		      Никад
-menutrans Block\ Selection    Đзбор\ блока
-menutrans Insert\ mode	      Режим\ ŃноŃĐ°
-menutrans Block\ and\ Insert  Блок\ и\ ŃноŃ
-menutrans Always	      Увек
-
-" Edit/File Settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!   Редни\ &броŃеви\ (Đ´Đ°/не)<Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!	   Режим\ &лиŃте\ (Đ´Đ°/не)<Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!	   ОбавиŃање\ &редова\ (Đ´Đ°/не)<Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!   Преломи\ &на\ реч\ (да/не)<Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!	   Размаци\ ŃмеŃŃ‚Đľ\ &табŃлациŃе\ (Đ´Đ°/не)<Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!	ĐŃŃ‚Đľ-&Ńвлачење\ (Đ´Đ°/не)<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!	   &Це-Ńвлачење\ (Đ´Đ°/не)<Tab>:set\ cin!
-
-" Edit/Keymap
-menutrans None НиŃедан
-
-" Tools menu
-menutrans &Tools	&Đлатке
-menutrans &Jump\ to\ this\ tag<Tab>g^] Скочи\ на\ &овŃ\ ознакŃ<Tab>g^]
-menutrans Jump\ &back<Tab>^T	 Скочи\ &натраг<Tab>^T
-menutrans Build\ &Tags\ File	 Đзгради\ &датотекŃ\ ознака
-menutrans &Folding	      &ПодвиŃање
-menutrans Create\ &Fold<Tab>zf		  С&твори\ подвиŃŃŃ‚Đ°Đş<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		  Đž&бриŃи\ подвиŃŃŃ‚Đ°Đş<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	  ОбриŃи\ Ńве\ по&двиŃŃтке<Tab>zD
-menutrans Fold\ column\ &width		  Ширина\ &реда\ подвиŃŃтка
-menutrans &Diff		      &Упоређивање
-menutrans &Make<Tab>:make     'mak&е'<Tab>:make
-menutrans &List\ Errors<Tab>:cl     СпиŃĐ°Đş\ &греŃака<Tab>:cl
-menutrans L&ist\ Messages<Tab>:cl!  Сп&иŃĐ°Đş\ порŃка<Tab>:cl!
-menutrans &Next\ Error<Tab>:cn	    С&ледећа\ греŃка<Tab>:cn
-menutrans &Previous\ Error<Tab>:cp  Пре&тходна\ греŃка<Tab>:cp
-menutrans &Older\ List<Tab>:cold    Стари\ ŃпиŃĐ°&Đş<Tab>:cold
-menutrans N&ewer\ List<Tab>:cnew    Но&ви\ ŃпиŃĐ°Đş<Tab>:cnew
-menutrans Error\ &Window	    Прозор\ ŃĐ°\ Đł&реŃкама
-menutrans &Set\ Compiler	    Đ&забери\ преводиоца
-menutrans &Convert\ to\ HEX<Tab>:%!xxd	   Претвори\ Ń\ &ХЕКС<Tab>:%!xxd
-menutrans Conve&rt\ back<Tab>:%!xxd\ -r    Đ’Ń€&ати\ Ń\ првобитан\ облик<Tab>:%!xxd\ -r
-
-" Tools/Folding
-menutrans &Enable/Disable\ folds<Tab>zi   &ОмогŃћи/прекини\ подвиŃање<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv	  &Покажи\ ред\ ŃĐ°\ ĐşŃŃ€Ńором<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Покажи\ &ŃĐ°ĐĽĐľ\ ред\ ŃĐ°\ ĐşŃŃ€Ńором<Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm   &Затвори\ виŃе\ подвиŃŃтака<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    Затвори\ Ń&ве\ подвиŃŃтке<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    Отвори\ виŃ&е\ подвиŃŃтака<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR     Đž&твори\ Ńве\ подвиŃŃтке<Tab>zR
-menutrans Fold\ Met&hod		       &Начин\ подвиŃања
+" Menu Translations:	Serbian
 
-" Tools/Folding/Fold Method
-menutrans M&anual	&Đ Ńчно
-menutrans I&ndent	&УвŃченоŃŃ‚
-menutrans E&xpression	&Đзраз
-menutrans S&yntax	&СинтакŃĐ°
-"menutrans &Diff
-menutrans Ma&rker	&Ознака
-
-" Tools/Diff
-menutrans &Update	&ĐжŃрираŃ
-menutrans &Get\ Block	&Прихвати\ изменŃ
-menutrans &Put\ Block	Пре&баци\ изменŃ
-
-" Tools/Error Window
-menutrans &Update<Tab>:cwin   &ĐжŃрираŃ<Tab>:cwin
-menutrans &Open<Tab>:copen    &Отвори<Tab>:copen
-menutrans &Close<Tab>:cclose  &Затвори<Tab>:cclose
-
-" Bufers menu
-menutrans &Buffers	   &Бафери
-menutrans &Refresh\ menu   &ĐжŃрираŃ
-menutrans Delete	   &ОбриŃи
-menutrans &Alternate	   Đ&лтернативни
-menutrans &Next		   &Следећи
-menutrans &Previous	   &Претходни
-menutrans [No\ File]	   [Нема\ датотеке]
-
-" Window menu
-menutrans &Window		    &Прозор
-menutrans &New<Tab>^Wn		    &Нови<Tab>^Wn
-menutrans S&plit<Tab>^Ws	    &Подели<Tab>^Ws
-menutrans Sp&lit\ To\ #<Tab>^W^^    Подели\ ŃĐ°\ &алтернативним<Tab>^W^^
-menutrans Split\ &Vertically<Tab>^Wv   Подели\ &ŃŃправно<Tab>^Wv
-menutrans Split\ File\ E&xplorer    Подели\ за\ преглед\ &датотека
-menutrans &Close<Tab>^Wc	    &Затвори<Tab>^Wc
-menutrans Close\ &Other(s)<Tab>^Wo  Затвори\ &ĐľŃтале<Tab>^Wo
-"menutrans Ne&xt<Tab>^Ww       &Следећи<Tab>^Ww
-"menutrans P&revious<Tab>^WW	  П&ретходни<Tab>^WW
-menutrans Move\ &To		    Пре&меŃти
-menutrans Rotate\ &Up<Tab>^WR	    &КрŃжно\ нагоре<Tab>^WR
-menutrans Rotate\ &Down<Tab>^Wr     КрŃжно\ надол&е<Tab>^Wr
-menutrans &Equal\ Size<Tab>^W=	    &ĐŃте\ величине<Tab>^W=
-menutrans &Max\ Height<Tab>^W_	    МакŃимална\ &виŃина<Tab>^W_
-menutrans M&in\ Height<Tab>^W1_     Минима&лна\ виŃина<Tab>^W1_
-menutrans Max\ &Width<Tab>^W\|	    МакŃимална\ &Ńирина<Tab>^W\|
-menutrans Min\ Widt&h<Tab>^W1\|     Минимална\ Ńи&рина<Tab>^W1\|
-
-" Window/Move To
-menutrans &Top<Tab>^WK		 &Врх<Tab>^WK
-menutrans &Bottom<Tab>^WJ	 &ПодножŃе<Tab>^WJ
-menutrans &Left\ side<Tab>^WH	 У&лево<Tab>^WH
-menutrans &Right\ side<Tab>^WL	 ĐŁ&деŃно<Tab>^WL
-
-" The popup menu
-menutrans &Undo		      &Врати
-menutrans Cu&t		      &ĐŃеци
-menutrans &Copy		      &КопираŃ
-menutrans &Paste	      &Убаци
-menutrans &Delete	      Đ&збриŃи
-menutrans Select\ Blockwise   БираŃ\ &правоŃгаоно
-menutrans Select\ &Word       Đзабери\ &реч
-menutrans Select\ &Line       Đзабери\ Ń€&ед
-menutrans Select\ &Block      Đзабери\ &блок
-menutrans Select\ &All	      Đзабери\ &Ńве
-
-" The GUI toolbar
-if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open     УчитаŃ
-    tmenu ToolBar.Save     СачŃваŃ
-    tmenu ToolBar.SaveAll  СачŃĐ˛Đ°Ń Ńве
-    tmenu ToolBar.Print    ШтампаŃ
-    tmenu ToolBar.Undo     Врати
-    tmenu ToolBar.Redo     Поврати
-    tmenu ToolBar.Cut      ĐŃеци
-    tmenu ToolBar.Copy     КопираŃ
-    tmenu ToolBar.Paste    Убаци
-    tmenu ToolBar.Find     Нађи
-    tmenu ToolBar.FindNext Нађи Ńледећи
-    tmenu ToolBar.FindPrev Нађи претходни
-    tmenu ToolBar.Replace  Замени
-    tmenu ToolBar.New      Нови
-    tmenu ToolBar.WinSplit Подели прозор
-    tmenu ToolBar.WinMax   МакŃимална виŃина
-    tmenu ToolBar.WinMin   Минимална виŃина
-    tmenu ToolBar.WinVSplit   Подели ŃŃправно
-    tmenu ToolBar.WinMaxWidth МакŃимална Ńирина
-    tmenu ToolBar.WinMinWidth Минимална Ńирина
-    tmenu ToolBar.WinClose Затвори прозор
-    tmenu ToolBar.LoadSesn ĐŁŃ‡Đ¸Ń‚Đ°Ń ŃеанŃŃ
-    tmenu ToolBar.SaveSesn СачŃĐ˛Đ°Ń ŃеанŃŃ
-    tmenu ToolBar.RunScript   ĐзврŃи ŃпиŃ
-    tmenu ToolBar.Make     'make'
-    tmenu ToolBar.Shell    Оперативно окрŃжење
-    tmenu ToolBar.RunCtags Направи ознаке
-    tmenu ToolBar.TagJump  Đди на ознакŃ
-    tmenu ToolBar.Help     Помоћ
-    tmenu ToolBar.FindHelp Нађи обŃĐ°Ńњење
-  endfun
-endif
-
-" Syntax menu
-menutrans &Syntax &СинтакŃĐ°
-menutrans &Show\ filetypes\ in\ menu  Đзбор\ 'filetype'\ из\ &мениŃĐ°
-menutrans Set\ '&syntax'\ only   Поде&Ńи\ 'syntax'\ ŃĐ°ĐĽĐľ
-menutrans Set\ '&filetype'\ too  ПодеŃи\ 'filetype'\ &такође
-menutrans &Off       &ĐŃкљŃчено
-menutrans &Manual    &Đ Ńчно
-menutrans A&utomatic    &ĐŃтоматŃки
-menutrans on/off\ for\ &This\ file     Да/не\ Đ·Đ°\ овŃ\ &датотекŃ
-menutrans Co&lor\ test     Провера\ &боŃĐ°
-menutrans &Highlight\ test Провера\ иŃти&цања
-menutrans &Convert\ to\ HTML  Претвори\ &Ń\ HTML
-
-" dialog texts
-let menutrans_help_dialog = "УнеŃите Đ˝Đ°Ń€ĐµĐ´Đ±Ń Đ¸Đ»Đ¸ реч чиŃе поŃĐ°Ńњење тражите:\n\nДодаŃте i_ Đ·Đ° наредбе ŃноŃĐ° (нпр. i_CTRL-X)\nДодаŃте c_ Đ·Đ° наредбе командног режима (нпр. Ń_<Del>)\nДодаŃте ' Đ·Đ° имена опциŃĐ° (нпр. 'shiftwidth')"
-
-let g:menutrans_path_dialog = "УнеŃите ĐżŃŃ‚ претраге Đ·Đ° датотеке\nРаздвоŃите зарезима имена директориŃŃĐĽĐ°."
-
-let g:menutrans_tags_dialog = "УнеŃите имена датотека ŃĐ° ознакама\nРаздвоŃите зарезима имена."
-
-let g:menutrans_textwidth_dialog = "УнеŃите Đ˝ĐľĐ˛Ń ŃĐ¸Ń€Đ¸Đ˝Ń Ń‚ĐµĐşŃŃ‚Đ° (0 Ńпречава прелом)"
-
-let g:menutrans_fileformat_dialog = "Đзаберите врŃŃ‚Ń Đ´Đ°Ń‚ĐľŃ‚ĐµĐşĐµ"
-
-let menutrans_no_file = "[Нема датотеке]"
-
-" vim: tw=0 keymap=serbcyril-US
+source <sfile>:p:h/menu_sr_rs.utf-8.vim
--- a/runtime/plugin/netrwPlugin.vim
+++ b/runtime/plugin/netrwPlugin.vim
@@ -20,7 +20,7 @@
 if &cp || exists("g:loaded_netrwPlugin")
  finish
 endif
-let g:loaded_netrwPlugin = "v136"
+let g:loaded_netrwPlugin = "v138"
 if v:version < 702
  echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
  finish
@@ -35,6 +35,7 @@ set cpo&vim
 augroup FileExplorer
  au!
  au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
+ au VimEnter * silent! call s:VimEnter(expand("<amatch>"))
  if has("win32") || has("win95") || has("win64") || has("win16")
   au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
  endif
@@ -109,6 +110,13 @@ fun! s:LocalBrowse(dirname)
 endfun
 
 " ---------------------------------------------------------------------
+" s:VimEnter: {{{2
+fun! s:VimEnter(dirname)
+  windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
+  1wincmd w
+endfun
+
+" ---------------------------------------------------------------------
 " NetrwStatusLine: {{{1
 fun! NetrwStatusLine()
 "  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
--- a/runtime/plugin/vimballPlugin.vim
+++ b/runtime/plugin/vimballPlugin.vim
@@ -1,6 +1,6 @@
 " vimballPlugin : construct a file containing both paths and files
 " Author: Charles E. Campbell, Jr.
-" Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.
+" Copyright: (c) 2004-2010 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
 "            No warranty, express or implied.
@@ -16,7 +16,7 @@
 if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballPlugin = "v30"
+let g:loaded_vimballPlugin = "v31"
 let s:keepcpo              = &cpo
 set cpo&vim
 
@@ -27,7 +27,7 @@ com! -na=? -complete=dir  UseVimball			c
 com! -na=0                VimballList			call vimball#Vimball(0)
 com! -na=* -complete=dir  RmVimball				call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
 au SourceCmd  *.vba.gz,*.vba.bz2,*.vba.zip		call vimball#Decompress(expand("<amatch>"))|call vimball#Vimball(1)
-au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'| setlocal ff=unix|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'| setlocal ma ff=unix noma |endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
 
 " =====================================================================
 " Restoration And Modelines: {{{1
--- a/runtime/plugin/zipPlugin.vim
+++ b/runtime/plugin/zipPlugin.vim
@@ -20,7 +20,7 @@
 if &cp || exists("g:loaded_zipPlugin")
  finish
 endif
-let g:loaded_zipPlugin = "v22"
+let g:loaded_zipPlugin = "v23"
 let s:keepcpo          = &cpo
 set cpo&vim
 
--- a/runtime/spell/bg/main.aap
+++ b/runtime/spell/bg/main.aap
@@ -34,9 +34,9 @@ bg_BG.aff bg_BG.dic: {buildcheck=}
         :fetch bg_BG.zip
         :sys $UNZIP bg_BG.zip
         :delete bg_BG.zip
-        :sys $VIM bg_BG.aff -e -c "set ff=unix" -c update -c q
-        :sys $VIM bg_BG.dic -e -c "set ff=unix" -c update -c q
-        :sys $VIM README_bg_BG.txt -e -c "set ff=unix" -c update -c q
+        :sys $VIM bg_BG.aff -u NONE -e -c "set ff=unix" -c update -c q
+        :sys $VIM bg_BG.dic -u NONE -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_bg_BG.txt -u NONE -e -c "set ff=unix" -c update -c q
         @if not os.path.exists('bg_BG.orig.aff'):
             :copy bg_BG.aff bg_BG.orig.aff
         @if not os.path.exists('bg_BG.orig.dic'):
new file mode 100644
--- /dev/null
+++ b/runtime/spell/br/br_FR.diff
@@ -0,0 +1,13 @@
+*** br_FR.orig.aff	2010-04-14 18:44:36.365731271 +0200
+--- br_FR.aff	2010-04-14 18:43:31.069137439 +0200
+***************
+*** 9,14 ****
+--- 9,16 ----
+  SET UTF-8
+  TRY esiaùnñrtolcdugmphbyfvkwzESIAÙNÑRTOLCDUGMPHBYFVKWZ'
+  
++ MIDWORD '
++ 
+  PFX m Y 1
+  PFX m   0          m'         [aehiouy]
+  
new file mode 100644
--- /dev/null
+++ b/runtime/spell/br/main.aap
@@ -0,0 +1,86 @@
+# Aap recipe for Breton Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+    VIM = ../../../src/vim
+@else:
+    :progsearch VIM vim
+
+SPELLDIR = ..
+FILES    = br_FR.aff br_FR.dic
+
+all: $SPELLDIR/br.latin1.spl $SPELLDIR/br.utf-8.spl ../README_br.txt
+
+$SPELLDIR/br.latin1.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=latin1"
+                -c "mkspell! $SPELLDIR/br br_FR" -c q
+
+$SPELLDIR/br.utf-8.spl : $FILES
+        :sys $VIM -u NONE -e -c "set enc=UTF-8"
+                -c "mkspell! $SPELLDIR/br br_FR" -c q
+
+../README_br.txt : package-description.txt
+        :copy $source $target
+
+#
+# Fetching the files from OpenOffice.org.
+#
+OODIR = http://extensions.services.openoffice.org/e-files/2207/3
+:attr {fetch = $OODIR/%file%} dict-br_0.3.oxt
+
+# The files don't depend on the .zip file so that we can delete it.
+# Only download the zip file if the targets don't exist.
+br_FR.aff br_FR.dic: {buildcheck=}
+        :assertpkg unzip patch
+        :fetch dict-br_0.3.oxt
+        :sys $UNZIP dict-br_0.3.oxt
+        :delete dict-br_0.3.oxt
+        :copy dictionaries/br_FR.aff br_FR.aff
+        :copy dictionaries/br_FR.dic br_FR.dic
+        # The br_FR.aff file contains a BOM, remove it.
+        :sys $VIM -u NONE -e -c "set enc=utf-8"
+                    -c "e br_FR.aff"
+                    -c "set nobomb ff=unix"
+                    -c "update" -c q
+        :sys $VIM -u NONE -e -c "set enc=utf-8"
+                    -c "e br_FR.dic"
+                    -c "set nobomb ff=unix"
+                    -c "update" -c q
+        @if not os.path.exists('br_FR.orig.aff'):
+            :copy br_FR.aff br_FR.orig.aff
+        @if os.path.exists('br_FR.diff'):
+            :sys patch <br_FR.diff
+
+# Generate diff files, so that others can get the OpenOffice files and apply
+# the diffs to get the Vim versions.
+
+diff:
+        :assertpkg diff
+        :sys {force} diff -a -C 1 dictionaries/br_FR.aff br_FR.aff >br_FR.diff
+        :sys {force} diff -a -C 1 dictionaries/br_FR.dic br_FR.dic >>br_FR.diff
+
+
+# Check for updated OpenOffice spell files.  When there are changes the
+# ".new.aff" and ".new.dic" files are left behind for manual inspection.
+
+check:
+        :assertpkg unzip diff
+        :fetch dict-br_0.3.oxt
+        :mkdir tmp
+        :cd tmp
+        @try:
+            @import stat
+            :sys $UNZIP ../dict-br_0.3.oxt
+            :sys {force} diff ../dictionaries/br_FR.aff br_FR.aff >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy br_FR.aff ../br_FR.new.aff
+            :sys {force} diff ../dictionaries/br_FR.dic br_FR.dic >d
+            @if os.stat('d')[stat.ST_SIZE] > 0:
+                :copy br_FR.dic ../br_FR.new.dic
+        @finally:
+            :cd ..
+            :delete {r}{f}{q} tmp
+            :delete dict-br_0.3.oxt
+
+
+# vim: set sts=4 sw=4 :
--- a/runtime/spell/ca/main.aap
+++ b/runtime/spell/ca/main.aap
@@ -36,8 +36,8 @@ ca_ES.aff ca_ES.dic: {buildcheck=}
         :fetch ca_ES.zip
         :sys $UNZIP ca_ES.zip
         :delete ca_ES.zip
-        :sys $VIM ca_ES.aff -c "set ff=unix" -c "update" -c q
-        :sys $VIM ca_ES.dic -c "set ff=unix" -c "update" -c q
+        :sys $VIM ca_ES.aff -u NONE -c "set ff=unix" -c "update" -c q
+        :sys $VIM ca_ES.dic -u NONE -c "set ff=unix" -c "update" -c q
         @if not os.path.exists('ca_ES.orig.aff'):
             :copy ca_ES.aff ca_ES.orig.aff
         @if not os.path.exists('ca_ES.orig.dic'):
--- a/runtime/spell/cy/main.aap
+++ b/runtime/spell/cy/main.aap
@@ -36,9 +36,9 @@ cy_GB.aff cy_GB.dic: {buildcheck=}
         :fetch cy_GB.zip
         :sys $UNZIP cy_GB.zip
         :delete cy_GB.zip
-        :sys $VIM cy_GB.aff -e -c "set ff=unix" -c update -c q
-        :sys $VIM cy_GB.dic -e -c "set ff=unix" -c update -c q
-        :sys $VIM README_cy_GB.txt -e -c "set ff=unix" -c update -c q
+        :sys $VIM cy_GB.aff -u NONE -e -c "set ff=unix" -c update -c q
+        :sys $VIM cy_GB.dic -u NONE -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_cy_GB.txt -u NONE -e -c "set ff=unix" -c update -c q
         @if not os.path.exists('cy_GB.orig.aff'):
             :copy cy_GB.aff cy_GB.orig.aff
         @if not os.path.exists('cy_GB.orig.dic'):
--- a/runtime/spell/de/main.aap
+++ b/runtime/spell/de/main.aap
@@ -133,7 +133,7 @@ de_AT.aff de_AT.dic: {buildcheck=}
 
         :print >>de_AT.dic
         # delete the first line, the word count
-        :sys $VIM de_DE.dic -e -c 1delete -c wq
+        :sys $VIM -u NONE de_DE.dic -e -c 1delete -c wq
         :cat de_DE.dic >>de_AT.dic
         :delete de_DE.dic
         :move de_DE.aff de_AT.aff
@@ -195,7 +195,7 @@ check:
             :sys $UNZIP ../$ZIPFILE_AT
             :print >>de_AT.dic
             # delete the first line, the word count
-            :sys ../$VIM de_DE.dic -e -c 1delete -c wq
+            :sys ../$VIM -u NONE de_DE.dic -e -c 1delete -c wq
             :cat de_DE.dic >>de_AT.dic
             :delete de_DE.dic
             :move de_DE.aff de_AT.aff
--- a/runtime/spell/eo/main.aap
+++ b/runtime/spell/eo/main.aap
@@ -22,7 +22,7 @@ all: $SPELLDIR/eo.iso-8859-3.spl $SPELLD
 ../README_eo.txt : README_eo_l3.txt
         :copy $source $target
         # fix missing newline
-        :sys $VIM $target -e -c "set ff=unix" -c wq
+        :sys $VIM -u NONE -e -c "set ff=unix" -c wq $target
 
 #
 # Fetching the files from OpenOffice.org.
--- a/runtime/spell/es/main.aap
+++ b/runtime/spell/es/main.aap
@@ -63,7 +63,7 @@ es_MX.aff es_MX.dic: {buildcheck=}
         :print No copyright information for es_MX wordlist >! README_es_MX.txt
         :sys $UNZIP $ZIPFILE_MX
         :delete $ZIPFILE_MX
-        :sys $VIM -e -c "set ff=unix | wq" es_MX.dic
+        :sys $VIM -u NONE -e -c "set ff=unix | wq" es_MX.dic
         @if not os.path.exists('es_MX.orig.aff'):
             :copy es_MX.aff es_MX.orig.aff
         @if not os.path.exists('es_MX.orig.dic'):
--- a/runtime/spell/ku/main.aap
+++ b/runtime/spell/ku/main.aap
@@ -36,9 +36,9 @@ ku_TR.aff ku_TR.dic: {buildcheck=}
         :fetch ku_TR.zip
         :sys $UNZIP ku_TR.zip
         :delete ku_TR.zip
-        :sys $VIM ku_TR.aff -e -c "set ff=unix" -c update -c q
-        :sys $VIM ku_TR.dic -e -c "set ff=unix" -c update -c q
-        :sys $VIM README_ku_TR.txt -e -c "set ff=unix" -c update -c q
+        :sys $VIM ku_TR.aff -u NONE -e -c "set ff=unix" -c update -c q
+        :sys $VIM ku_TR.dic -u NONE -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_ku_TR.txt -u NONE -e -c "set ff=unix" -c update -c q
         @if not os.path.exists('ku_TR.orig.aff'):
             :copy ku_TR.aff ku_TR.orig.aff
         @if not os.path.exists('ku_TR.orig.dic'):
--- a/runtime/spell/lv/main.aap
+++ b/runtime/spell/lv/main.aap
@@ -37,9 +37,9 @@ lv_LV.aff lv_LV.dic: {buildcheck=}
         :sys $UNZIP lv_LV.zip
         :delete lv_LV.zip
         :delete changelog.txt gpl.txt lin-lv_LV_add.sh win-lv_LV_add.bat
-        :sys $VIM lv_LV.aff -e -N -c "%s/\r//" -c update -c q
-        :sys $VIM lv_LV.dic -e -N -c "%s/\r//" -c update -c q
-        :sys $VIM README_lv_LV.txt -e -c "set ff=unix" -c update -c q
+        :sys $VIM lv_LV.aff -u NONE -e -N -c "%s/\r//" -c update -c q
+        :sys $VIM lv_LV.dic -u NONE -e -N -c "%s/\r//" -c update -c q
+        :sys $VIM README_lv_LV.txt -u NONE -e -c "set ff=unix" -c update -c q
         @if not os.path.exists('lv_LV.orig.aff'):
             :copy lv_LV.aff lv_LV.orig.aff
         @if not os.path.exists('lv_LV.orig.dic'):
--- a/runtime/spell/main.aap
+++ b/runtime/spell/main.aap
@@ -5,8 +5,8 @@
 # aap diff   create all the diff files
 
 # "hu" is at the end, because it takes a very long time.
-LANG = af am bg ca cs cy da de el en eo es fr fo ga gd gl he hr id it ku
-       la lt lv mg mi ms nb nl nn ny pl pt ro ru rw sk sl sv sw
+LANG = af am bg br ca cs cy da de el en eo es fr fo ga gd gl he hr id it 
+       ku la lt lv mg mi ms nb nl nn ny pl pt ro ru rw sk sl sv sw
        tet th tl tn uk yi zu hu
 
 # TODO:
--- a/runtime/spell/ms/main.aap
+++ b/runtime/spell/ms/main.aap
@@ -36,8 +36,8 @@ ms_MY.aff ms_MY.dic: {buildcheck=}
         :fetch ms_MY.zip
         :sys $UNZIP ms_MY.zip
         :delete ms_MY.zip
-        :sys $VIM ms_MY.aff -e -c "set ff=unix" -c update -c q
-        :sys $VIM ms_MY.dic -e -c "set ff=unix" -c update -c q
+        :sys $VIM ms_MY.aff -u NONE -e -c "set ff=unix" -c update -c q
+        :sys $VIM ms_MY.dic -u NONE -e -c "set ff=unix" -c update -c q
         @if not os.path.exists('ms_MY.orig.aff'):
             :copy ms_MY.aff ms_MY.orig.aff
         @if not os.path.exists('ms_MY.orig.dic'):
--- a/runtime/spell/pt/main.aap
+++ b/runtime/spell/pt/main.aap
@@ -67,13 +67,13 @@ pt_BR.aff pt_BR.dic: {buildcheck=}
         :fetch $BR_FNAME
         :sys $UNZIP $BR_FNAME
         :delete $BR_FNAME
-        :sys $VIM README_pt_BR.TXT -e -c "set ff=unix" -c update -c q
+        :sys $VIM README_pt_BR.TXT -u NONE -e -c "set ff=unix" -c update -c q
         :move README_pt_BR.TXT README_pt_BR.txt
 
 # Vim seems to ignore the dots from the word list.
 # Removing words with dot to avoid misbehaviour.
-        :sys $VIM pt_BR.dic -e -c "set ff=unix" -c "/\./d" -c update -c q
-        :sys $VIM pt_BR.aff -e -c "set ff=unix" -c update -c q
+        :sys $VIM pt_BR.dic -u NONE -e -c "set ff=unix" -c "/\./d" -c update -c q
+        :sys $VIM pt_BR.aff -u NONE -e -c "set ff=unix" -c update -c q
         @if not os.path.exists('pt_BR.orig.aff'):
             :copy pt_BR.aff pt_BR.orig.aff
         @if not os.path.exists('pt_BR.orig.dic'):
--- a/runtime/syntax/asm.vim
+++ b/runtime/syntax/asm.vim
@@ -3,7 +3,9 @@
 " Maintainer:	Erik Wognsen <erik.wognsen@gmail.com>
 "		Previous maintainer:
 "		Kevin Dahlhausen <kdahlhaus@yahoo.com>
-" Last Change:	2010 Jan 9
+" Last Change:	2010 Apr 18
+
+" Thanks to Ori Avtalion for feedback on the comment markers!
 
 " For version 5.x: Clear all syntax items
 " For version 6.0 and later: Quit when a syntax file was already loaded
@@ -45,8 +47,16 @@ syn match octNumber		"0[0-7][0-7]\+"
 syn match hexNumber		"0[xX][0-9a-fA-F]\+"
 syn match binNumber		"0[bB][0-1]*"
 
-syn match asmComment		"#.*"
-syn region asmComment		start="/\*" end="\*/"
+syn keyword asmTodo		contained TODO
+
+" GAS supports various comment markers as described here:
+" http://sourceware.org/binutils/docs-2.19/as/Comments.html
+" I have commented out the ARM comment marker "@" by default as I think more
+" people are using "@" with the .type directive. See
+" http://sourceware.org/binutils/docs-2.19/as/Type.html
+syn region asmComment		start="/\*" end="\*/" contains=asmTodo
+syn match asmComment		"[#;!|].*" contains=asmTodo
+" syn match asmComment		"@.*" contains=asmTodo
 
 syn match asmInclude		"\.include"
 syn match asmCond		"\.if"
@@ -75,6 +85,7 @@ if version >= 508 || !exists("did_asm_sy
   HiLink asmSection	Special
   HiLink asmLabel	Label
   HiLink asmComment	Comment
+  HiLink asmTodo	Todo
   HiLink asmDirective	Statement
 
   HiLink asmInclude	Include
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/cabal.vim
@@ -0,0 +1,131 @@
+" Vim syntax file
+" Language:	Haskell Cabal Build file
+" Maintainer:	Vincent Berthoux <twinside@gmail.com>
+" File Types:	.cabal
+" v1.3: Updated to the last version of cabal
+"       Added more highlighting for cabal function, true/false
+"       and version number. Also added missing comment highlighting.
+"       Cabal known compiler are highlighted too.
+"
+" V1.2: Added cpp-options which was missing. Feature implemented
+"       by GHC, found with a GHC warning, but undocumented. 
+"       Whatever...
+"
+" v1.1: Fixed operator problems and added ftdetect file
+"       (thanks to Sebastian Schwarz)
+"
+" v1.0: Cabal syntax in vimball format
+"       (thanks to Magnus Therning)
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syn keyword	cabalCategory	Library library Executable executable Flag flag
+syn keyword	cabalCategory	source-repository Source-Repository
+
+syn keyword     cabalConditional    if else
+syn match       cabalOperator       "&&\|||\|!\|==\|>=\|<="
+syn keyword     cabalFunction       os arche impl flag
+syn match       cabalComment    /--.*$/
+syn match       cabalVersion    "\d\+\(.\(\d\)\+\)\+"
+
+syn match       cabalTruth      "\ctrue"
+syn match       cabalTruth      "\cfalse"
+
+syn match       cabalCompiler   "\cghc"
+syn match       cabalCompiler   "\cnhc"
+syn match       cabalCompiler   "\cyhc"
+syn match       cabalCompiler   "\chugs"
+syn match       cabalCompiler   "\chbc"
+syn match       cabalCompiler   "\chelium"
+syn match       cabalCompiler   "\cjhc"
+syn match       cabalCompiler   "\clhc"
+
+
+syn match	cabalStatement	"\cauthor"
+syn match	cabalStatement	"\cbranch"
+syn match	cabalStatement	"\cbug-reports"
+syn match	cabalStatement	"\cbuild-depends"
+syn match	cabalStatement	"\cbuild-tools"
+syn match	cabalStatement	"\cbuild-type"
+syn match	cabalStatement	"\cbuildable"
+syn match	cabalStatement	"\cc-sources"
+syn match	cabalStatement	"\ccabal-version"
+syn match	cabalStatement	"\ccategory"
+syn match	cabalStatement	"\ccc-options"
+syn match	cabalStatement	"\ccopyright"
+syn match       cabalStatement  "\ccpp-options"
+syn match	cabalStatement	"\cdata-dir"
+syn match	cabalStatement	"\cdata-files"
+syn match	cabalStatement	"\cdefault"
+syn match	cabalStatement	"\cdescription"
+syn match	cabalStatement	"\cexecutable"
+syn match	cabalStatement	"\cexposed-modules"
+syn match	cabalStatement	"\cexposed"
+syn match	cabalStatement	"\cextensions"
+syn match	cabalStatement	"\cextra-lib-dirs"
+syn match	cabalStatement	"\cextra-libraries"
+syn match	cabalStatement	"\cextra-source-files"
+syn match	cabalStatement	"\cextra-tmp-files"
+syn match	cabalStatement	"\cfor example"
+syn match	cabalStatement	"\cframeworks"
+syn match	cabalStatement	"\cghc-options"
+syn match	cabalStatement	"\cghc-prof-options"
+syn match	cabalStatement	"\cghc-shared-options"
+syn match	cabalStatement	"\chomepage"
+syn match	cabalStatement	"\chs-source-dirs"
+syn match	cabalStatement	"\chugs-options"
+syn match	cabalStatement	"\cinclude-dirs"
+syn match	cabalStatement	"\cincludes"
+syn match	cabalStatement	"\cinstall-includes"
+syn match	cabalStatement	"\cld-options"
+syn match	cabalStatement	"\clicense-file"
+syn match	cabalStatement	"\clicense"
+syn match	cabalStatement	"\clocation"
+syn match	cabalStatement	"\cmain-is"
+syn match	cabalStatement	"\cmaintainer"
+syn match	cabalStatement	"\cmodule"
+syn match	cabalStatement	"\cname"
+syn match	cabalStatement	"\cnhc98-options"
+syn match	cabalStatement	"\cother-modules"
+syn match	cabalStatement	"\cpackage-url"
+syn match	cabalStatement	"\cpkgconfig-depends"
+syn match	cabalStatement	"\cstability"
+syn match	cabalStatement	"\csubdir"
+syn match	cabalStatement	"\csynopsis"
+syn match	cabalStatement	"\ctag"
+syn match	cabalStatement	"\ctested-with"
+syn match	cabalStatement	"\ctype"
+syn match	cabalStatement	"\cversion"
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_cabal_syn_inits")
+  if version < 508
+    let did_cabal_syn_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink cabalVersion       Number
+  HiLink cabalTruth         Boolean
+  HiLink cabalComment       Comment
+  HiLink cabalStatement     Statement
+  HiLink cabalCategory      Type
+  HiLink cabalFunction      Function
+  HiLink cabalConditional   Conditional
+  HiLink cabalOperator      Operator
+  HiLink cabalCompiler      Constant
+  delcommand HiLink
+endif
+
+let b:current_syntax = "cabal"
+
+" vim: ts=8
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/chaiscript.vim
@@ -0,0 +1,94 @@
+" Vim syntax file
+" Language:	ChaiScript
+" Maintainer:	Jason Turner <lefticus 'at' gmail com>
+
+" Quit when a (custom) syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+end
+
+syn case match
+
+" syncing method
+syn sync fromstart
+
+" Strings
+syn region chaiscriptString        start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=chaiscriptSpecial,chaiscriptEval,@Spell
+
+" Escape characters
+syn match  chaiscriptSpecial       contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}" 
+
+" String evals
+syn region chaiscriptEval          contained start="${" end="}" 
+ 
+" integer number
+syn match  chaiscriptNumber        "\<\d\+\>"
+
+" floating point number, with dot, optional exponent
+syn match  chaiscriptFloat         "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>"
+
+" floating point number, starting with a dot, optional exponent
+syn match  chaiscriptFloat         "\.\d\+\%(e[-+]\=\d\+\)\=\>"
+
+" floating point number, without dot, with exponent
+syn match  chaiscriptFloat         "\<\d\+e[-+]\=\d\+\>"
+
+" Hex strings
+syn match  chaiscriptNumber        "\<0x\x\+\>"
+
+" Binary strings
+syn match  chaiscriptNumber        "\<0b[01]\+\>"
+
+" Various language features
+syn keyword chaiscriptCond         if else
+syn keyword chaiscriptRepeat       while for do
+syn keyword chaiscriptStatement    break continue return
+syn keyword chaiscriptExceptions   try catch throw
+
+"Keyword
+syn keyword chaiscriptKeyword      def true false attr
+
+"Built in types
+syn keyword chaiscriptType         fun var
+
+"Built in funcs, keep it simple
+syn keyword chaiscriptFunc         eval throw
+
+"Let's treat all backtick operator function lookups as built in too
+syn region  chaiscriptFunc         matchgroup=chaiscriptFunc start="`" end="`"
+
+" Account for the "[1..10]" syntax, treating it as an operator
+" Intentionally leaving out all of the normal, well known operators
+syn match   chaiscriptOperator     "\.\."
+
+" Guard seperator as an operator
+syn match   chaiscriptOperator     ":"
+
+" Comments
+syn match   chaiscriptComment      "//.*$" contains=@Spell
+syn region  chaiscriptComment      matchgroup=chaiscriptComment start="/\*" end="\*/" contains=@Spell
+
+
+
+hi def link chaiscriptExceptions	Exception
+hi def link chaiscriptKeyword		Keyword
+hi def link chaiscriptStatement		Statement
+hi def link chaiscriptRepeat		Repeat
+hi def link chaiscriptString		String
+hi def link chaiscriptNumber		Number
+hi def link chaiscriptFloat		Float
+hi def link chaiscriptOperator		Operator
+hi def link chaiscriptConstant		Constant
+hi def link chaiscriptCond		Conditional
+hi def link chaiscriptFunction		Function
+hi def link chaiscriptComment		Comment
+hi def link chaiscriptTodo		Todo
+hi def link chaiscriptError		Error
+hi def link chaiscriptSpecial		SpecialChar
+hi def link chaiscriptFunc		Identifier
+hi def link chaiscriptType		Type
+hi def link chaiscriptEval	        Special
+
+let b:current_syntax = "chaiscript"
+
+" vim: nowrap sw=2 sts=2 ts=8 noet
--- a/runtime/syntax/debchangelog.vim
+++ b/runtime/syntax/debchangelog.vim
@@ -3,8 +3,8 @@
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2009 Jun 05
-" URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/syntax/debchangelog.vim;hb=debian
+" Last Change: 2010 May 06
+" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debchangelog.vim
 
 " Standard syntax initialization
 if version < 600
@@ -19,7 +19,7 @@ syn case ignore
 " Define some common expressions we can use later on
 syn match debchangelogName	contained "^[[:alnum:]][[:alnum:].+-]\+ "
 syn match debchangelogUrgency	contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
-syn match debchangelogTarget	contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|%(etch|lenny)-%(backports|volatile)|%(dapper|hardy|intrepid|jaunty|karmic)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
+syn match debchangelogTarget	contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|%(etch|lenny)-%(backports|volatile)|%(dapper|hardy|jaunty|karmic|lucid|maverick)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
 syn match debchangelogVersion	contained "(.\{-})"
 syn match debchangelogCloses	contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
 syn match debchangelogLP	contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"
--- a/runtime/syntax/debcontrol.vim
+++ b/runtime/syntax/debcontrol.vim
@@ -1,14 +1,10 @@
 " Vim syntax file
-" Language:	Debian control files
+" Language:    Debian control files
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2009 July 14
-" URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/ftplugin/debcontrol.vim;hb=debian
-
-" Comments are very welcome - but please make sure that you are commenting on
-" the latest version of this file.
-" SPAM is _NOT_ welcome - be ready to be reported!
+" Last Change: 2009 Aug 17
+" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debcontrol.vim
 
 " Standard syntax initialization
 if version < 600
@@ -28,7 +24,7 @@ syn match debControlComma ", *"
 syn match debControlSpace " "
 
 " Define some common expressions we can use later on
-syn match debcontrolArchitecture contained "\(all\|any\|alpha\|amd64\|arm\(e[bl]\)\=\|avr32\|hppa\|i386\|ia64\|m32r\|m68k\|mipsel\|mips\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc64\|sparc\|hurd-i386\|kfreebsd-\(i386\|amd64\|gnu\)\|knetbsd-i386\|netbsd-\(alpha\|i386\)\)"
+syn match debcontrolArchitecture contained "\%(all\|any\|alpha\|amd64\|arm\%(e[bl]\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\|hurd-i386\|kfreebsd-\%(i386\|amd64\|gnu\)\|knetbsd-i386\|kopensolaris-i386\|netbsd-\%(alpha\|i386\)\)"
 syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
 syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
 syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
@@ -53,7 +49,7 @@ syn match debcontrolComment "^#.*$"
 syn case ignore
 
 " List of all legal keys
-syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Essential\|Architecture\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
+syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
 
 " Fields for which we do strict syntax checking
 syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
@@ -70,7 +66,7 @@ syn region debcontrolStrictField start="
 
 " Catch-all for the other legal fields
 syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
-syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
+syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
 
 " Associate our matches and regions with pretty colours
 if version >= 508 || !exists("did_debcontrol_syn_inits")
--- a/runtime/syntax/debsources.vim
+++ b/runtime/syntax/debsources.vim
@@ -2,8 +2,8 @@
 " Language:     Debian sources.list
 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2009 Apr 17
-" URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/syntax/debsources.vim;hb=debian
+" Last Change: 2010 May 06
+" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debsources.vim
 
 " Standard syntax initialization
 if version < 600
@@ -23,7 +23,7 @@ syn match debsourcesComment        /#.*/
 
 " Match uri's
 syn match debsourcesUri            +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' 	<>"]\++
-syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(etch\|lenny\|squeeze\|\(old\)\=stable\|testing\|unstable\|sid\|experimental\|dapper\|hardy\|intrepid\|jaunty\|karmic\)\([-[:alnum:]_./]*\)+
+syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(etch\|lenny\|squeeze\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|dapper\|hardy\|jaunty\|karmic\|lucid\|maverick\)\([-[:alnum:]_./]*\)+
 
 " Associate our matches and regions with pretty colours
 hi def link debsourcesLine            Error
@@ -33,5 +33,3 @@ hi def link debsourcesComment         Co
 hi def link debsourcesUri             Constant
 
 let b:current_syntax = "debsources"
-
-" vim: ts=8
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -1,8 +1,7 @@
-" Vim syntax file
-" Language:     Java
-" Maintainer:   Claudio Fleiner <claudio@fleiner.com>
+" Vim syntax file " Language:	  Java
+" Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/java.vim
-" Last Change:  2009 Mar 14
+" Last Change:	2010 March 23
 
 " Please check :help java.vim for comments on some of the options available.
 
@@ -59,8 +58,8 @@ syn match   javaTypedef		"\.\s*\<class\>
 syn keyword javaClassDecl	enum
 syn match   javaClassDecl	"^class\>"
 syn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1
-syn match   javaAnnotation      "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
-syn match   javaClassDecl       "@interface\>"
+syn match   javaAnnotation	"@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
+syn match   javaClassDecl	"@interface\>"
 syn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
 syn match   javaUserLabelRef	"\k\+" contained
 syn match   javaVarArg		"\.\.\."
@@ -69,7 +68,7 @@ syn keyword javaScopeDecl	public protect
 if exists("java_highlight_java_lang_ids")
   let java_highlight_all=1
 endif
-if exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
+if exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang") 
   " java.lang.*
   syn match javaLangClass "\<System\>"
   syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
@@ -110,15 +109,15 @@ endif
 
 if exists("java_space_errors")
   if !exists("java_no_trail_space_error")
-    syn match   javaSpaceError  "\s\+$"
+    syn match	javaSpaceError	"\s\+$"
   endif
   if !exists("java_no_tab_space_error")
-    syn match   javaSpaceError  " \+\t"me=e-1
+    syn match	javaSpaceError	" \+\t"me=e-1
   endif
 endif
 
-syn region  javaLabelRegion     transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
-syn match   javaUserLabel       "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
+syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
+syn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
 syn keyword javaLabel		default
 
 if !exists("java_allow_cpp_keywords")
@@ -135,7 +134,7 @@ syn cluster javaTop add=javaExternal,jav
 syn keyword javaTodo		 contained TODO FIXME XXX
 if exists("java_comment_strings")
   syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
-  syn region  javaComment2String   contained start=+"+  end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
+  syn region  javaComment2String   contained start=+"+	end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
   syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
   syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
   syn match   javaCommentCharacter contained "'[^\\]'"
@@ -143,9 +142,9 @@ if exists("java_comment_strings")
   syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
 endif
 syn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
-syn match   javaCommentStar      contained "^\s*\*[^/]"me=e-1
-syn match   javaCommentStar      contained "^\s*\*$"
-syn match   javaLineComment      "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
+syn match   javaCommentStar	 contained "^\s*\*[^/]"me=e-1
+syn match   javaCommentStar	 contained "^\s*\*$"
+syn match   javaLineComment	 "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
 JavaHiLink javaCommentString javaString
 JavaHiLink javaComment2String javaString
 JavaHiLink javaCommentCharacter javaCharacter
@@ -162,14 +161,14 @@ if !exists("java_ignore_javadoc") && mai
   " here.
   syntax spell default
 
-  syn region  javaDocComment    start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
-  syn region  javaCommentTitle  contained matchgroup=javaDocComment start="/\*\*"   matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
+  syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
+  syn region  javaCommentTitle	contained matchgroup=javaDocComment start="/\*\*"   matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
 
-  syn region javaDocTags         contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
-  syn match  javaDocTags         contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
-  syn match  javaDocParam        contained "\s\S\+"
-  syn match  javaDocTags         contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
-  syn region javaDocSeeTag       contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
+  syn region javaDocTags	 contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
+  syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
+  syn match  javaDocParam	 contained "\s\S\+"
+  syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
+  syn region javaDocSeeTag	 contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
   syn match  javaDocSeeTagParam  contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
   syntax case match
 endif
@@ -178,9 +177,9 @@ endif
 syn match   javaComment		 "/\*\*/"
 
 " Strings and constants
-syn match   javaSpecialError     contained "\\."
+syn match   javaSpecialError	 contained "\\."
 syn match   javaSpecialCharError contained "[^']"
-syn match   javaSpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\+\x\{4\}\)"
+syn match   javaSpecialChar	 contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
 syn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
 " next line disabled, it can cause a crash for a long line
 "syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
@@ -193,7 +192,7 @@ syn match   javaNumber		 "\<\d\+[eE][-+]
 syn match   javaNumber		 "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
 
 " unicode characters
-syn match   javaSpecial "\\u\+\d\{4\}"
+syn match   javaSpecial "\\u\d\{4\}"
 
 syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
 
@@ -206,8 +205,8 @@ if exists("java_highlight_functions")
   else
     " This line catches method declarations at any indentation>0, but it assumes
     " two things:
-    "   1. class names are always capitalized (ie: Button)
-    "   2. method names are never capitalized (except constructors, of course)
+    "	1. class names are always capitalized (ie: Button)
+    "	2. method names are never capitalized (except constructors, of course)
     syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses
   endif
   syn match  javaBraces  "[{}]"
@@ -219,7 +218,7 @@ if exists("java_highlight_debug")
   " Strings and constants
   syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
   syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
-  syn match   javaDebugStringError      +"\([^"\\]\|\\.\)*$+
+  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
   syn match   javaDebugCharacter	contained "'[^\\]'"
   syn match   javaDebugSpecialCharacter contained "'\\.'"
   syn match   javaDebugSpecialCharacter contained "'\\''"
@@ -265,17 +264,17 @@ if exists("java_mark_braces_in_parens_as
 endif
 
 " catch errors caused by wrong parenthesis
-syn region  javaParenT  transparent matchgroup=javaParen  start="("  end=")" contains=@javaTop,javaParenT1
+syn region  javaParenT	transparent matchgroup=javaParen  start="("  end=")" contains=@javaTop,javaParenT1
 syn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
 syn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
-syn match   javaParenError       ")"
+syn match   javaParenError	 ")"
 " catch errors caused by wrong square parenthesis
-syn region  javaParenT  transparent matchgroup=javaParen  start="\["  end="\]" contains=@javaTop,javaParenT1
+syn region  javaParenT	transparent matchgroup=javaParen  start="\["  end="\]" contains=@javaTop,javaParenT1
 syn region  javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
 syn region  javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT  contained
-syn match   javaParenError       "\]"
+syn match   javaParenError	 "\]"
 
-JavaHiLink javaParenError       javaError
+JavaHiLink javaParenError	javaError
 
 if !exists("java_minlines")
   let java_minlines = 10
@@ -288,7 +287,7 @@ if version >= 508 || !exists("did_java_s
     let did_java_syn_inits = 1
   endif
   JavaHiLink javaFuncDef		Function
-  JavaHiLink javaVarArg                 Function
+  JavaHiLink javaVarArg			Function
   JavaHiLink javaBraces			Function
   JavaHiLink javaBranch			Conditional
   JavaHiLink javaUserLabelRef		javaUserLabel
@@ -320,7 +319,7 @@ if version >= 508 || !exists("did_java_s
   JavaHiLink javaConstant		Constant
   JavaHiLink javaTypedef		Typedef
   JavaHiLink javaTodo			Todo
-  JavaHiLink javaAnnotation             PreProc
+  JavaHiLink javaAnnotation		PreProc
 
   JavaHiLink javaCommentTitle		SpecialComment
   JavaHiLink javaDocTags		Special
--- a/runtime/syntax/javascript.vim
+++ b/runtime/syntax/javascript.vim
@@ -7,7 +7,7 @@
 "		(ss) repaired several quoting and grouping glitches
 "		(ss) fixed regex parsing issue with multiple qualifiers [gi]
 "		(ss) additional factoring of keywords, globals, and members
-" Last Change:	2006 Jun 19
+" Last Change:	2010 Mar 25
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -28,16 +28,14 @@ if version < 600 && exists("javaScript_f
   unlet javaScript_fold
 endif
 
-syn case ignore
-
 
 syn keyword javaScriptCommentTodo      TODO FIXME XXX TBD contained
 syn match   javaScriptLineComment      "\/\/.*" contains=@Spell,javaScriptCommentTodo
 syn match   javaScriptCommentSkip      "^[ \t]*\*\($\|[ \t]\+\)"
 syn region  javaScriptComment	       start="/\*"  end="\*/" contains=@Spell,javaScriptCommentTodo
 syn match   javaScriptSpecial	       "\\\d\d\d\|\\."
-syn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+  contains=javaScriptSpecial,@htmlPreproc
-syn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+  contains=javaScriptSpecial,@htmlPreproc
+syn region  javaScriptStringD	       start=+"+  skip=+\\\\\|\\"+  end=+"\|$+	contains=javaScriptSpecial,@htmlPreproc
+syn region  javaScriptStringS	       start=+'+  skip=+\\\\\|\\'+  end=+'\|$+	contains=javaScriptSpecial,@htmlPreproc
 
 syn match   javaScriptSpecialCharacter "'\\.'"
 syn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
@@ -51,7 +49,7 @@ syn keyword javaScriptType		Array Boolea
 syn keyword javaScriptStatement		return with
 syn keyword javaScriptBoolean		true false
 syn keyword javaScriptNull		null undefined
-syn keyword javaScriptIdentifier	arguments this var
+syn keyword javaScriptIdentifier	arguments this var let
 syn keyword javaScriptLabel		case default
 syn keyword javaScriptException		try catch finally throw
 syn keyword javaScriptMessage		alert confirm prompt status
@@ -61,7 +59,7 @@ syn keyword javaScriptDeprecated	escape 
 syn keyword javaScriptReserved		abstract boolean byte char class const debugger double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile 
 
 if exists("javaScript_fold")
-    syn match	javaScriptFunction      "\<function\>"
+    syn match	javaScriptFunction	"\<function\>"
     syn region	javaScriptFunctionFold	start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend
 
     syn sync match javaScriptSync	grouphere javaScriptFunctionFold "\<function\>"
@@ -70,7 +68,7 @@ if exists("javaScript_fold")
     setlocal foldmethod=syntax
     setlocal foldtext=getline(v:foldstart)
 else
-    syn keyword	javaScriptFunction      function
+    syn keyword javaScriptFunction	function
     syn match	javaScriptBraces	   "[{}\[\]]"
     syn match	javaScriptParens	   "[()]"
 endif
--- a/runtime/syntax/lhaskell.vim
+++ b/runtime/syntax/lhaskell.vim
@@ -4,7 +4,7 @@
 "			\begin{code} \end{code} blocks
 " Maintainer:		Haskell Cafe mailinglist <haskell-cafe@haskell.org>
 " Original Author:	Arthur van Leeuwen <arthurvl@cs.uu.nl>
-" Last Change:		2009 May 08
+" Last Change:		2010 Apr 11
 " Version:		1.04
 "
 " Thanks to Ian Lynagh for thoughtful comments on initial versions and
@@ -107,13 +107,12 @@ else
 endif
 
 syntax region lhsHaskellBirdTrack start="^>" end="\%(^[^>]\)\@=" contains=@haskellTop,lhsBirdTrack containedin=@lhsTeXContainer
-syntax region lhsHaskellBeginEndBlock start="^\\begin{code}\s*$" matchgroup=NONE end="\%(^\\end{code}.*$\)\@=" contains=@haskellTop,@beginCode containedin=@lhsTeXContainer
+syntax region lhsHaskellBeginEndBlock start="^\\begin{code}\s*$" matchgroup=NONE end="\%(^\\end{code}.*$\)\@=" contains=@haskellTop,beginCodeBegin containedin=@lhsTeXContainer
 
 syntax match lhsBirdTrack "^>" contained
 
 syntax match beginCodeBegin "^\\begin" nextgroup=beginCodeCode contained
 syntax region beginCodeCode  matchgroup=texDelimiter start="{" end="}"
-syntax cluster beginCode    contains=beginCodeBegin,beginCodeCode
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
--- a/runtime/syntax/maple.vim
+++ b/runtime/syntax/maple.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Maple V (based on release 4)
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Sep 11, 2006
-" Version:	9
+" Last Change:	Jan 05, 2010
+" Version:	10
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Package Function Selection: {{{1
@@ -164,9 +164,11 @@ syn match   mvError	"\.\.\."
 " Split into booleans, conditionals, operators, repeat-logic, etc
 syn keyword mvBool	true	false	FAIL
 syn keyword mvCond	elif	else	fi	if	then
+syn match   mvCond	"end\s\+if"
 
 syn keyword mvRepeat	by	for	in	to
 syn keyword mvRepeat	do	from	od	while
+syn match   mvRepeat	"end\s\+do"
 
 syn keyword mvSpecial	NULL
 syn match   mvSpecial	"\[\]\|{}"
--- a/runtime/syntax/mib.vim
+++ b/runtime/syntax/mib.vim
@@ -3,13 +3,13 @@
 " Maintainer:      Martin Smat <msmat@post.cz>
 " Original Author: David Pascoe <pascoedj@spamcop.net>
 " Written:     	   Wed Jan 28 14:37:23 GMT--8:00 1998
-" Last Changed:    Mon Mar 15 2010
+" Last Changed:    Mon Mar 23 2010
 
 if exists("b:current_syntax")
   finish
 endif
 
-setlocal iskeyword=@,48-57,_,128-167,224-235,-,:,=
+setlocal iskeyword=@,48-57,_,128-167,224-235,-
 
 syn keyword mibImplicit ACCESS ANY AUGMENTS BEGIN BIT BITS BOOLEAN CHOICE
 syn keyword mibImplicit COMPONENTS CONTACT-INFO DEFINITIONS DEFVAL
@@ -22,7 +22,7 @@ syn keyword mibImplicit NULL OBJECT-GROU
 syn keyword mibImplicit OBJECTS OF OPTIONAL ORGANIZATION REFERENCE
 syn keyword mibImplicit REVISION SEQUENCE SET SIZE STATUS SYNTAX
 syn keyword mibImplicit TEXTUAL-CONVENTION TRAP-TYPE TRUE UNITS VARIABLES
-syn keyword mibImplicit WRITE-SYNTAX ::=
+syn keyword mibImplicit WRITE-SYNTAX
 syn keyword mibValue accessible-for-notify current DisplayString
 syn keyword mibValue deprecated mandatory not-accessible obsolete optional
 syn keyword mibValue read-create read-only read-write write-only INTEGER
@@ -40,11 +40,13 @@ syn keyword mibEpilogue test-function-as
 syn keyword mibEpilogue leaf-name
 syn keyword mibEpilogue DEFAULT contained
 
+syn match  mibOperator  "::="
 syn match  mibComment   "\ *--.\{-}\(--\|$\)"
 syn match  mibNumber    "\<['0-9a-fA-FhH]*\>"
 syn region mibDescription start="\"" end="\"" contains=DEFAULT
 
 hi def link mibImplicit	     Statement
+hi def link mibOperator      Statement
 hi def link mibComment       Comment
 hi def link mibConstants     String
 hi def link mibNumber        Number
--- a/runtime/syntax/mysql.vim
+++ b/runtime/syntax/mysql.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     mysql
 " Maintainer:   Kenneth J. Pronovici <pronovic@ieee.org>
-" Last Change:  $LastChangedDate: 2009-06-29 23:08:37 -0500 (Mon, 29 Jun 2009) $
+" Last Change:  $LastChangedDate: 2010-04-22 09:48:02 -0500 (Thu, 22 Apr 2010) $
 " Filenames:    *.mysql
 " URL:          ftp://cedar-solutions.com/software/mysql.vim
 " Note:         The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
@@ -62,7 +62,7 @@ syn match mysqlNumber            "-\=\<[
 syn match mysqlNumber            "\<0x[abcdefABCDEF0-9]*\>"
 
 " User variables
-syn match mysqlVariable          "@\a*[A-Za-z0-9]*[._]*[A-Za-z0-9]*"
+syn match mysqlVariable          "@\a*[A-Za-z0-9]*\([._]*[A-Za-z0-9]\)*"
 
 " Comments (c-style, mysql-style and modified sql-style)
 syn region mysqlComment          start="/\*"  end="\*/"
@@ -75,7 +75,7 @@ syn sync ccomment mysqlComment
 " This gets a bit ugly.  There are two different problems we have to
 " deal with.
 "
-" The first problem is that some keywoards like 'float' can be used
+" The first problem is that some keywords like 'float' can be used
 " both with and without specifiers, i.e. 'float', 'float(1)' and
 " 'float(@var)' are all valid.  We have to account for this and we
 " also have to make sure that garbage like floatn or float_(1) is not
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/obj.vim
@@ -0,0 +1,95 @@
+" Vim syntax file
+" Language:	3D wavefront's obj file
+" Maintainer:	Vincent Berthoux <twinside@gmail.com>
+" File Types:	.obj (used in 3D)
+"
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syn match       objError        "^\a\+"
+
+syn match       objKeywords     "^cstype\s"
+syn match       objKeywords     "^ctech\s"
+syn match       objKeywords     "^stech\s"
+syn match       objKeywords     "^deg\s"
+syn match       objKeywords     "^curv\(2\?\)\s"
+syn match       objKeywords     "^parm\s"
+syn match       objKeywords     "^surf\s"
+syn match       objKeywords     "^end\s"
+syn match       objKeywords     "^bzp\s"
+syn match       objKeywords     "^bsp\s"
+syn match       objKeywords     "^res\s"
+syn match       objKeywords     "^cdc\s"
+syn match       objKeywords     "^con\s"
+
+syn match       objKeywords     "^shadow_obj\s"
+syn match       objKeywords     "^trace_obj\s"
+syn match       objKeywords     "^usemap\s"
+syn match       objKeywords     "^lod\s"
+syn match       objKeywords     "^maplib\s"
+syn match       objKeywords     "^d_interp\s"
+syn match       objKeywords     "^c_interp\s"
+syn match       objKeywords     "^bevel\s"
+syn match       objKeywords     "^mg\s"
+syn match       objKeywords     "^s\s"
+syn match       objKeywords     "^con\s"
+syn match       objKeywords     "^trim\s"
+syn match       objKeywords     "^hole\s"
+syn match       objKeywords     "^scrv\s"
+syn match       objKeywords     "^sp\s"
+syn match       objKeywords     "^step\s"
+syn match       objKeywords     "^bmat\s"
+syn match       objKeywords     "^csh\s"
+syn match       objKeywords     "^call\s"
+
+syn match       objComment      "^#.*"
+syn match       objVertex       "^v\s"
+syn match       objFace         "^f\s"
+syn match       objVertice      "^vt\s"
+syn match       objNormale      "^vn\s"
+syn match       objGroup        "^g\s.*"
+syn match       objMaterial     "^usemtl\s.*"
+syn match       objInclude      "^mtllib\s.*"
+
+syn match       objFloat        "-\?\d\+\.\d\+\(e\(+\|-\)\d\+\)\?"
+syn match       objInt          "\d\+"
+syn match       objIndex        "\d\+\/\d*\/\d*"
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_cabal_syn_inits")
+  if version < 508
+    let did_cabal_syn_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink objError           Error
+  HiLink objComment         Comment
+  HiLink objInclude         PreProc
+  HiLink objFloat           Float
+  HiLink objInt             Number
+  HiLink objGroup           Structure
+  HiLink objIndex           Constant
+  HiLink objMaterial        Label
+
+  HiLink objVertex          Keyword
+  HiLink objNormale         Keyword
+  HiLink objVertice         Keyword
+  HiLink objFace            Keyword
+  HiLink objKeywords        Keyword
+
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "obj"
+
+" vim: ts=8
--- a/runtime/syntax/perl.vim
+++ b/runtime/syntax/perl.vim
@@ -1,24 +1,24 @@
 " Vim syntax file
-" Language:	Perl
-" Maintainer:	Nick Hibma <nick@van-laarhoven.org>
-" Last Change:	2006 November 23
-" Location:	http://www.van-laarhoven.org/vim/syntax/perl.vim
+" Language:     Perl 5
+" Maintainer:   Andy Lester <andy@petdance.com>
+" URL:          http://github.com/petdance/vim-perl/tree/master
+" Last Change:  2009-09-2
+" Contributors: Andy Lester <andy@petdance.com>
+"               Hinrik Ă–rn SigurĂ°sson <hinrik.sig@gmail.com>
+"               Lukas Mai <l.mai.web.de>
+"               Nick Hibma <nick@van-laarhoven.org>
+"               Sonia Heimann <niania@netsurf.org>
+"               and many others.
 "
 " Please download most recent version first before mailing
 " any comments.
-" See also the file perl.vim.regression.pl to check whether your
-" modifications work in the most odd cases
-" http://www.van-laarhoven.org/vim/syntax/perl.vim.regression.pl
 "
-" Original version: Sonia Heimann <niania@netsurf.org>
-" Thanks to many people for their contribution.
-
 " The following parameters are available for tuning the
 " perl syntax highlighting, with defaults given:
 "
 " unlet perl_include_pod
-" unlet perl_want_scope_in_variables
-" unlet perl_extended_vars
+" unlet perl_no_scope_in_variables
+" unlet perl_no_extended_vars
 " unlet perl_string_as_statement
 " unlet perl_no_sync_on_sub
 " unlet perl_no_sync_on_global_var
@@ -28,17 +28,37 @@
 " let perl_nofold_packages = 1
 " let perl_nofold_subs = 1
 
-" Remove any old syntax stuff that was loaded (5.x) or quit when a syntax file
-" was already loaded (6.x).
 if version < 600
-  syntax clear
+  echoerr ">=vim-6.0 is required to run perl.vim"
+  finish
 elseif exists("b:current_syntax")
   finish
 endif
 
-" Unset perl_fold if it set but vim doesn't support it.
-if version < 600 && exists("perl_fold")
-  unlet perl_fold
+"
+" Folding
+
+if exists("perl_fold")
+  " Note: this bit must come before the actual highlighting of the "package"
+  " keyword, otherwise this will screw up Pod lines that match /^package/
+  if !exists("perl_nofold_packages")
+    syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
+  endif
+  if !exists("perl_nofold_subs")
+    syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
+    syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
+  endif
+
+  if exists("perl_fold_blocks")
+    syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)foreach\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
+    syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
+  endif
+
+  setlocal foldmethod=syntax
+  syn sync fromstart
+else
+  " fromstart above seems to set minlines even if perl_fold is not set.
+  syn sync minlines=0
 endif
 
 
@@ -65,64 +85,48 @@ else
 endif
 
 
+syn cluster perlTop		contains=TOP
+syn region  perlGenericBlock	matchgroup=perlGenericBlock start="{" end="}" contained transparent
+
+
 " All keywords
 "
-if exists("perl_fold") && exists("perl_fold_blocks")
-  syn match perlConditional		"\<if\>"
-  syn match perlConditional		"\<elsif\>"
-  syn match perlConditional		"\<unless\>"
-  syn match perlConditional		"\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
-else
-  syn keyword perlConditional		if elsif unless
-  syn keyword perlConditional		else nextgroup=perlElseIfError skipwhite skipnl skipempty
-endif
-syn keyword perlConditional		switch eq ne gt lt ge le cmp not and or xor err
-if exists("perl_fold") && exists("perl_fold_blocks")
-  syn match perlRepeat			"\<while\>"
-  syn match perlRepeat			"\<for\>"
-  syn match perlRepeat			"\<foreach\>"
-  syn match perlRepeat			"\<do\>"
-  syn match perlRepeat			"\<until\>"
-  syn match perlRepeat			"\<continue\>"
-else
-  syn keyword perlRepeat		while for foreach do until continue
-endif
-syn keyword perlOperator		defined undef and or not bless ref
-if exists("perl_fold")
-  " if BEGIN/END would be a keyword the perlBEGINENDFold does not work
-  syn match perlControl			"\<BEGIN\|CHECK\|INIT\|END\>" contained
-else
-  syn keyword perlControl		BEGIN END CHECK INIT
-endif
+syn match perlConditional		"\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
+syn match perlConditional		"\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
+syn match perlRepeat			"\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
+syn match perlOperator			"\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
+syn match perlControl			"\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>"
 
-syn keyword perlStatementStorage	my local our
-syn keyword perlStatementControl	goto return last next redo
-syn keyword perlStatementScalar		chomp chop chr crypt index lc lcfirst length ord pack reverse rindex sprintf substr uc ucfirst
-syn keyword perlStatementRegexp		pos quotemeta split study
-syn keyword perlStatementNumeric	abs atan2 cos exp hex int log oct rand sin sqrt srand
-syn keyword perlStatementList		splice unshift shift push pop split join reverse grep map sort unpack
-syn keyword perlStatementHash		each exists keys values tie tied untie
-syn keyword perlStatementIOfunc		carp confess croak dbmclose dbmopen die syscall
-syn keyword perlStatementFiledesc	binmode close closedir eof fileno getc lstat print printf readdir readline readpipe rewinddir select stat tell telldir write nextgroup=perlFiledescStatementNocomma skipwhite
-syn keyword perlStatementFiledesc	fcntl flock ioctl open opendir read seek seekdir sysopen sysread sysseek syswrite truncate nextgroup=perlFiledescStatementComma skipwhite
-syn keyword perlStatementVector		pack vec
-syn keyword perlStatementFiles		chdir chmod chown chroot glob link mkdir readlink rename rmdir symlink umask unlink utime
-syn match   perlStatementFiles		"-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
-syn keyword perlStatementFlow		caller die dump eval exit wantarray
-syn keyword perlStatementInclude	require
-syn match   perlStatementInclude	"\<\(use\|no\)\s\+\(\(integer\|strict\|lib\|sigtrap\|subs\|vars\|warnings\|utf8\|byte\|base\|fields\)\>\)\="
-syn keyword perlStatementScope		import
-syn keyword perlStatementProc		alarm exec fork getpgrp getppid getpriority kill pipe setpgrp setpriority sleep system times wait waitpid
-syn keyword perlStatementSocket		accept bind connect getpeername getsockname getsockopt listen recv send setsockopt shutdown socket socketpair
-syn keyword perlStatementIPC		msgctl msgget msgrcv msgsnd semctl semget semop shmctl shmget shmread shmwrite
-syn keyword perlStatementNetwork	endhostent endnetent endprotoent endservent gethostbyaddr gethostbyname gethostent getnetbyaddr getnetbyname getnetent getprotobyname getprotobynumber getprotoent getservbyname getservbyport getservent sethostent setnetent setprotoent setservent
-syn keyword perlStatementPword		getpwuid getpwnam getpwent setpwent endpwent getgrent getgrgid getlogin getgrnam setgrent endgrent
-syn keyword perlStatementTime		gmtime localtime time times
+syn match perlStatementStorage		"\<\%(my\|our\|local\|state\)\>"
+syn match perlStatementControl		"\<\%(return\|last\|next\|redo\|goto\|break\)\>"
+syn match perlStatementScalar		"\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|uc\%(first\)\=\)\>"
+syn match perlStatementRegexp		"\<\%(pos\|quotemeta\|split\|study\)\>"
+syn match perlStatementNumeric		"\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"
+syn match perlStatementList		"\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"
+syn match perlStatementHash		"\<\%(delete\|each\|exists\|keys\|values\)\>"
+syn match perlStatementIOfunc		"\<\%(syscall\|dbmopen\|dbmclose\)\>"
+syn match perlStatementFiledesc		"\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite
+syn match perlStatementFiledesc		"\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite
+syn match perlStatementVector		"\<vec\>"
+syn match perlStatementFiles		"\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
+syn match perlStatementFiles		"-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
+syn match perlStatementFlow		"\<\%(caller\|die\|dump\|eval\|exit\|wantarray\)\>"
+syn match perlStatementInclude		"\<require\>"
+syn match perlStatementInclude		"\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|diagnostics\|encoding\%(::warnings\)\=\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|open\|ops\|overload\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="
+syn match perlStatementProc		"\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
+syn match perlStatementSocket		"\<\%(acept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
+syn match perlStatementIPC		"\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
+syn match perlStatementNetwork		"\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
+syn match perlStatementPword		"\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
+syn match perlStatementTime		"\<\%(gmtime\|localtime\|time\)\>"
 
-syn keyword perlStatementMisc		warn formline reset scalar delete prototype lock
-syn keyword perlStatementNew		new
+syn match perlStatementMisc		"\<\%(warn\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
+
+syn keyword perlTodo			TODO TBD FIXME XXX NOTE contained
 
-syn keyword perlTodo			TODO TBD FIXME XXX contained
+syn region perlStatementIndirObjWrap	matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|print\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock
+
+syn match perlLabel      "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
 
 " Perl Identifiers.
 "
@@ -135,52 +139,55 @@ syn keyword perlTodo			TODO TBD FIXME XX
 " variable - there again, too complicated and too slow.
 
 " Special variables first ($^A, ...) and ($|, $', ...)
-syn match  perlVarPlain		 "$^[ADEFHILMOPSTWX]\="
+syn match  perlVarPlain		 "$^[ACDEFHILMNOPRSTVWX]\="
 syn match  perlVarPlain		 "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
-syn match  perlVarPlain		 "$\(0\|[1-9][0-9]*\)"
+syn match  perlVarPlain		 "$\%(0\|[1-9]\d*\)"
 " Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
-syn match  perlVarPlain		 "$:[^:]"
+syn match  perlVarPlain		 "$::\@!"
 " These variables are not recognized within matches.
 syn match  perlVarNotInMatches	 "$[|)]"
 " This variable is not recognized within matches delimited by m//.
 syn match  perlVarSlash		 "$/"
 
 " And plain identifiers
-syn match  perlPackageRef	 "\(\h\w*\)\=\(::\|'\)\I"me=e-1 contained
+syn match  perlPackageRef	 "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained
 
-" To highlight packages in variables as a scope reference - i.e. in $pack::var,
-" pack:: is a scope, just set "perl_want_scope_in_variables"
-" If you *want* complex things like @{${"foo"}} to be processed,
-" just set the variable "perl_extended_vars"...
+" To not highlight packages in variables as a scope reference - i.e. in
+" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"
+" If you don't want complex things like @{${"foo"}} to be processed,
+" just set the variable "perl_no_extended_vars"...
 
-" FIXME value between {} should be marked as string. is treated as such by Perl.
-" At the moment it is marked as something greyish instead of read. Probably todo
-" with transparency. Or maybe we should handle the bare word in that case. or make it into
-
-if exists("perl_want_scope_in_variables")
-  syn match  perlVarPlain	"\\\=\([@$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlVarPlain2	"\\\=%\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlFunctionName	"\\\=&\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember
+if !exists("perl_no_scope_in_variables")
+  syn match  perlVarPlain       "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn match  perlVarPlain2                   "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef
+  syn match  perlFunctionName                "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
 else
-  syn match  perlVarPlain	"\\\=\([@$]\|\$#\)\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlVarPlain2	"\\\=%\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlFunctionName	"\\\=&\$*\(\I\i*\)\=\(\(::\|'\)\I\i*\)*\>" nextgroup=perlVarMember,perlVarSimpleMember
+  syn match  perlVarPlain       "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn match  perlVarPlain2                   "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)"
+  syn match  perlFunctionName                "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
 endif
 
-if exists("perl_extended_vars")
-  syn cluster perlExpr		contains=perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ
-  syn region perlVarBlock	matchgroup=perlVarPlain start="\($#\|[@%$]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
-  syn region perlVarBlock	matchgroup=perlVarPlain start="&\$*{" skip="\\}" end="}" contains=@perlExpr
-  syn match  perlVarPlain	"\\\=\(\$#\|[@%&$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember
-  syn region perlVarMember	matchgroup=perlVarPlain start="\(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
-  syn match  perlVarSimpleMember	"\(->\)\={\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember contains=perlVarSimpleMemberName contained
+if !exists("perl_no_extended_vars")
+  syn cluster perlExpr		contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlGenericBlock
+  syn region perlArrow		matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+  syn region perlArrow		matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+  syn region perlArrow		matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+  syn match  perlArrow		"->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+  syn region perlArrow		matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+  syn region perlVarBlock	matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn region perlVarBlock2	matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn match  perlVarPlain2	"[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn match  perlVarPlain	"\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn match  perlVarSimpleMember	"\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained
   syn match  perlVarSimpleMemberName	"\I\i*" contained
-  syn region perlVarMember	matchgroup=perlVarPlain start="\(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember
-  syn match  perlMethod		"\(->\)\I\i*" contained
+  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn match perlPackageConst	"__PACKAGE__" nextgroup=perlMethod
+  syn match  perlMethod		"->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod
 endif
 
 " File Descriptors
-syn match  perlFiledescRead	"[<]\h\w\+[>]"
+syn match  perlFiledescRead	"<\h\w*>"
 
 syn match  perlFiledescStatementComma	"(\=\s*\u\w*\s*,"me=e-1 transparent contained contains=perlFiledescStatement
 syn match  perlFiledescStatementNocomma "(\=\s*\u\w*\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
@@ -188,16 +195,20 @@ syn match  perlFiledescStatementNocomma 
 syn match  perlFiledescStatement	"\u\w*" contained
 
 " Special characters in strings and matches
-syn match  perlSpecialString	"\\\(\d\+\|[xX]\x\+\|c\u\|.\)" contained
-syn match  perlSpecialStringU	"\\['\\]" contained
-syn match  perlSpecialMatch	"{\d\+\(,\(\d\+\)\=\)\=}" contained
-syn match  perlSpecialMatch	"\[\(\]\|-\)\=[^\[\]]*\(\[\|\-\)\=\]" contained
+syn match  perlSpecialString	"\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
+syn match  perlSpecialStringU2	"\\." extend contained transparent contains=NONE
+syn match  perlSpecialStringU	"\\\\" contained
+syn match  perlSpecialMatch	"\\[1-9]" contained extend
+syn match  perlSpecialMatch	"\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
+syn match  perlSpecialMatch	"\\k\%(<\h\w*>\|'\h\w*'\)" contained
+syn match  perlSpecialMatch	"{\d\+\%(,\%(\d\+\)\=\)\=}" contained
+syn match  perlSpecialMatch	"\[[]-]\=[^\[\]]*[]-]\=\]" contained
 syn match  perlSpecialMatch	"[+*()?.]" contained
 syn match  perlSpecialMatch	"(?[#:=!]" contained
-syn match  perlSpecialMatch	"(?[imsx]\+)" contained
-" FIXME the line below does not work. It should mark end of line and
-" begin of line as perlSpecial.
-" syn match perlSpecialBEOM    "^\^\|\$$" contained
+syn match  perlSpecialMatch	"(?[impsx]*\%(-[imsx]\+\)\=)" contained
+syn match  perlSpecialMatch	"(?\%([-+]\=\d\+\|R\))" contained
+syn match  perlSpecialMatch	"(?\%(&\|P[>=]\)\h\w*)" contained
+syn match  perlSpecialMatch	"(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained
 
 " Possible errors
 "
@@ -205,177 +216,195 @@ syn match  perlSpecialMatch	"(?[imsx]\+)
 syn match  perlNotEmptyLine	"^\s\+$" contained
 " Highlight '} else if (...) {', it should be '} else { if (...) { ' or
 " '} elsif (...) {'.
-"syn keyword perlElseIfError	if contained
+syn match perlElseIfError	"[^[:space:]{]\+" contained
 
 " Variable interpolation
 "
 " These items are interpolated inside "" strings and similar constructs.
 syn cluster perlInterpDQ	contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
 " These items are interpolated inside '' strings and similar constructs.
-syn cluster perlInterpSQ	contains=perlSpecialStringU
+syn cluster perlInterpSQ	contains=perlSpecialStringU,perlSpecialStringU2
 " These items are interpolated inside m// matches and s/// substitutions.
-syn cluster perlInterpSlash	contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock,perlSpecialBEOM
+syn cluster perlInterpSlash	contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock
 " These items are interpolated inside m## matches and s### substitutions.
 syn cluster perlInterpMatch	contains=@perlInterpSlash,perlVarSlash
 
 " Shell commands
-syn region  perlShellCommand	matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ
+syn region  perlShellCommand	matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend
 
 " Constants
 "
 " Numbers
-syn match  perlNumber	"[-+]\=\(\<\d[[:digit:]_]*L\=\>\|0[xX]\x[[:xdigit:]_]*\>\)"
-syn match  perlFloat	"[-+]\=\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
-syn match  perlFloat	"[-+]\=\<\d[[:digit:]_]*\.[[:digit:]_]*\([eE][\-+]\=\d\+\)\="
-syn match  perlFloat	"[-+]\=\<\.[[:digit:]_]\+\([eE][\-+]\=\d\+\)\="
+syn match  perlNumber	"\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>"
+syn match  perlFloat	"\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
+syn match  perlFloat	"\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
+syn match  perlFloat	"\.[[:digit:]_]\+\%([eE][\-+]\=\d\+\)\="
+
+syn match  perlString	"\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
+syn match  perlVStringV	"\<v" contained
+
+
+syn region perlParensSQ		start=+(+ end=+)+ extend contained transparent contains=perlParensSQ,@perlInterpSQ keepend
+syn region perlBracketsSQ	start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsSQ,@perlInterpSQ keepend
+syn region perlBracesSQ		start=+{+ end=+}+ extend contained transparent contains=perlBracesSQ,@perlInterpSQ keepend
+syn region perlAnglesSQ		start=+<+ end=+>+ extend contained transparent contains=perlAnglesSQ,@perlInterpSQ keepend
+
+syn region perlParensDQ		start=+(+ end=+)+ extend contained transparent contains=perlParensDQ,@perlInterpDQ keepend
+syn region perlBracketsDQ	start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsDQ,@perlInterpDQ keepend
+syn region perlBracesDQ		start=+{+ end=+}+ extend contained transparent contains=perlBracesDQ,@perlInterpDQ keepend
+syn region perlAnglesDQ		start=+<+ end=+>+ extend contained transparent contains=perlAnglesDQ,@perlInterpDQ keepend
 
 
 " Simple version of searches and matches
-" caters for m//, m##, m{} and m[] (and the !/ variant)
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+[m!]/+ end=+/[cgimosx]*+ contains=@perlInterpSlash
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+[m!]#+ end=+#[cgimosx]*+ contains=@perlInterpMatch
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+[m!]{+ end=+}[cgimosx]*+ contains=@perlInterpMatch
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+[m!]\[+ end=+\][cgimosx]*+ contains=@perlInterpMatch
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[cgimopsx]*+ contains=@perlInterpMatch keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[cgimopsx]*+ contains=@perlInterpMatch keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[cgimopsx]*+ contains=@perlInterpSQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[cgimopsx]*+ contains=@perlInterpMatch,perlParensDQ keepend
 
-" A special case for m!!x which allows for comments and extra whitespace in the pattern
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+[m!]!+ end=+![cgimosx]*+ contains=@perlInterpSlash,perlComment
+" A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[cgimopsx]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
 
 " Below some hacks to recognise the // variant. This is virtually impossible to catch in all
 " cases as the / is used in so many other ways, but these should be the most obvious ones.
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+^split /+lc=5 start=+[^$@%]\<split /+lc=6 start=+^while /+lc=5 start=+[^$@%]\<while /+lc=6 start=+^if /+lc=2 start=+[^$@%]\<if /+lc=3 start=+[!=]\~\s*/+lc=2 start=+[(~]/+lc=1 start=+\.\./+lc=2 start=+\s/[^= \t0-9$@%]+lc=1,me=e-1,rs=e-1 start=+^/+ skip=+\\/+ end=+/[cgimosx]*+ contains=@perlInterpSlash
+syn region perlMatch	matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash
 
 
 " Substitutions
-" caters for s///, s### and s[][]
 " perlMatch is the first part, perlSubstitution* is the substitution part
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<s'+  end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<s"+  end=+"+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionDQ
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<s/+  end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionSlash
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<s#+  end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionHash
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<s\[+ end=+\]+ contains=@perlInterpMatch nextgroup=perlSubstitutionBracket skipwhite skipempty skipnl
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<s{+ end=+}+ contains=@perlInterpMatch nextgroup=perlSubstitutionCurly skipwhite skipempty skipnl
-syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'[ecgimosx]*+ contained contains=@perlInterpSQ
-syn region perlSubstitutionDQ		matchgroup=perlMatchStartEnd start=+"+  end=+"[ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionSlash	matchgroup=perlMatchStartEnd start=+/+  end=+/[ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionHash		matchgroup=perlMatchStartEnd start=+#+  end=+#[ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionBracket	matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimosx]*+ contained contains=@perlInterpDQ
-syn region perlSubstitutionCurly	matchgroup=perlMatchStartEnd start=+{+  end=+}[ecgimosx]*+ contained contains=@perlInterpDQ
-
-" A special case for m!!x which allows for comments and extra whitespace in the pattern
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<s!+ end=+!+me=e-1 contains=@perlInterpSlash,perlComment nextgroup=perlSubstitutionPling
-syn region perlSubstitutionPling	matchgroup=perlMatchStartEnd start=+!+ end=+![ecgimosx]*+ contained contains=@perlInterpDQ
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+  end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+  end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+  end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[ecgimopsx]*+ keepend contained contains=@perlInterpDQ
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[ecgimopsx]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[ecgimopsx]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
+syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'[ecgimopsx]*+ contained contains=@perlInterpSQ keepend 
 
-" Substitutions
-" caters for tr///, tr### and tr[][]
+" Translations
 " perlMatch is the first part, perlTranslation* is the second, translator part.
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationSQ
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)"+ end=+"+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationDQ
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)/+ end=+/+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationSlash
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationHash
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\(tr\|y\)\[+ end=+\]+ contains=@perlInterpSQ nextgroup=perlTranslationBracket skipwhite skipempty skipnl
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\(tr\|y\){+ end=+}+ contains=@perlInterpSQ nextgroup=perlTranslationCurly skipwhite skipempty skipnl
-syn region perlTranslationSQ		matchgroup=perlMatchStartEnd start=+'+ end=+'[cds]*+ contained
-syn region perlTranslationDQ		matchgroup=perlMatchStartEnd start=+"+ end=+"[cds]*+ contained
-syn region perlTranslationSlash		matchgroup=perlMatchStartEnd start=+/+ end=+/[cds]*+ contained
-syn region perlTranslationHash		matchgroup=perlMatchStartEnd start=+#+ end=+#[cds]*+ contained
-syn region perlTranslationBracket	matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contained
-syn region perlTranslationCurly		matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contained
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cds]*+ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[cds]*+ contains=perlParensSQ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contains=perlBracketsSQ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contains=perlBracesSQ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[cds]*+ contains=perlAnglesSQ contained
 
 
-" The => operator forces a bareword to the left of it to be interpreted as
-" a string
-syn match  perlString "\<\I\i*\s*=>"me=e-2
-
 " Strings and q, qq, qw and qr expressions
 
-" Brackets in qq()
-syn region perlBrackets	start=+(+ end=+)+ contained transparent contains=perlBrackets,@perlStringSQ
+syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend
+syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
+
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend
 
-syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ
-syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q#+ end=+#+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q|+ end=+|+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q(+ end=+)+ contains=@perlInterpSQ,perlBrackets
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q{+ end=+}+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q/+ end=+/+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q[qx]#+ end=+#+ contains=@perlInterpDQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q[qx]|+ end=+|+ contains=@perlInterpDQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q[qx](+ end=+)+ contains=@perlInterpDQ,perlBrackets
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q[qx]{+ end=+}+ contains=@perlInterpDQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<q[qx]/+ end=+/+ contains=@perlInterpDQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qw#+  end=+#+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qw|+  end=+|+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qw(+  end=+)+ contains=@perlInterpSQ,perlBrackets
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qw{+  end=+}+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qw/+  end=+/+ contains=@perlInterpSQ
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qr#+  end=+#[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qr|+  end=+|[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qr(+  end=+)[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qr{+  end=+}[imosx]*+ contains=@perlInterpMatch
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<qr/+  end=+/[imosx]*+ contains=@perlInterpSlash
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
+
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1[imosx]*+ contains=@perlInterpMatch keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/[imosx]*+ contains=@perlInterpSlash keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#[imosx]*+ contains=@perlInterpMatch keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'[imosx]*+ contains=@perlInterpSQ keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend
+
+" A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend
 
 " Constructs such as print <<EOF [...] EOF, 'here' documents
 "
-if version >= 600
-  " XXX Any statements after the identifier are in perlString colour (i.e.
-  " 'if $a' in 'print <<EOF if $a').
-  if exists("perl_fold")
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z(.\{-}\)"+ end=+^\z1$+ contains=@perlInterpDQ fold
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z(.\{-}\)'+ end=+^\z1$+ contains=@perlInterpSQ fold
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold
-    syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<['"]\z(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)['"]+ end=+^\z1$+ contains=ALL fold
-  else
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+      end=+^\z1$+ contains=@perlInterpDQ
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z(.\{-}\)"+ end=+^\z1$+ contains=@perlInterpDQ
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z(.\{-}\)'+ end=+^\z1$+ contains=@perlInterpSQ
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine
-    syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine
-    syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\(['"]\|\)\z(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
-  endif
+" XXX Any statements after the identifier are in perlString colour (i.e.
+" 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
+" seems due to the 'auto-extending nature' of regions.
+if exists("perl_fold")
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold
+  syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold
 else
-  syn match perlUntilEOFStart	"<<EOF.*"lc=5 nextgroup=perlUntilEOFDQ skipnl transparent
-  syn match perlUntilEOFStart	"<<\s*\"EOF\".*" nextgroup=perlUntilEOFDQ skipnl transparent
-  syn match perlUntilEOFStart	"<<\s*'EOF'.*" nextgroup=perlUntilEOFSQ skipnl transparent
-  syn match perlUntilEOFStart	"<<\s*\"\".*" nextgroup=perlUntilEmptyDQ skipnl transparent
-  syn match perlUntilEOFStart	"<<\s*''.*" nextgroup=perlUntilEmptySQ skipnl transparent
-  syn region perlUntilEOFDQ	matchgroup=perlStringStartEnd start=++ end="^EOF$" contains=@perlInterpDQ contained
-  syn region perlUntilEOFSQ	matchgroup=perlStringStartEnd start=++ end="^EOF$" contains=@perlInterpSQ contained
-  syn region perlUntilEmptySQ	matchgroup=perlStringStartEnd start=++ end="^$" contains=@perlInterpDQ,perlNotEmptyLine contained
-  syn region perlUntilEmptyDQ	matchgroup=perlStringStartEnd start=++ end="^$" contains=@perlInterpSQ,perlNotEmptyLine contained
-  syn match perlHereIdentifier	"<<EOF"
-  syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\(['"]\|\)\(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\(END_\(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)$+ contains=ALL
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+    end=+^\z1$+ contains=@perlInterpDQ
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine
+  syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL
 endif
 
 
 " Class declarations
 "
-syn match  perlPackageDecl	"^\s*\<package\s\+\S\+" contains=perlStatementPackage
+syn match   perlPackageDecl		"\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage
 syn keyword perlStatementPackage	package contained
 
 " Functions
 "       sub [name] [(prototype)] {
 "
-syn region perlFunction		start="\s*\<sub\>" end="[;{]"he=e-1 contains=perlStatementSub,perlFunctionPrototype,perlFunctionPRef,perlFunctionName,perlComment
-syn keyword perlStatementSub	sub contained
+syn match perlSubError "[^[:space:];{#]" contained
+if v:version == 701 && !has('patch221')  " XXX I hope that's the right one
+    syn match perlSubAttributes ":" contained
+else
+    syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
+    syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
+    syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError
+    syn match perlSubAttributes "" contained nextgroup=perlSubError
+    syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
+endif
+syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
+syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes contained contains=perlSubPrototypeError
+syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype
 
-syn match  perlFunctionPrototype	"([^)]*)" contained
-if exists("perl_want_scope_in_variables")
+syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
+
+if !exists("perl_no_scope_in_variables")
    syn match  perlFunctionPRef	"\h\w*::" contained
    syn match  perlFunctionName	"\h\w*[^:]" contained
 else
    syn match  perlFunctionName	"\h[[:alnum:]_:]*" contained
 endif
 
+" The => operator forces a bareword to the left of it to be interpreted as
+" a string
+syn match  perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
+
 " All other # are comments, except ^#!
-syn match  perlComment		"#.*" contains=perlTodo
+syn match  perlComment		"#.*" contains=perlTodo,@Spell
 syn match  perlSharpBang	"^#!.*"
 
 " Formats
 syn region perlFormat		matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2
 syn match  perlFormatName	"format\s\+\k\+\s*="lc=7,me=e-1 contained
-syn match  perlFormatField	"[@^][|<>~]\+\(\.\.\.\)\=" contained
+syn match  perlFormatField	"[@^][|<>~]\+\%(\.\.\.\)\=" contained
 syn match  perlFormatField	"[@^]#[#.]*" contained
 syn match  perlFormatField	"@\*" contained
 syn match  perlFormatField	"@[^A-Za-z_|<>~#*]"me=e-1 contained
@@ -383,161 +412,113 @@ syn match  perlFormatField	"@$" containe
 
 " __END__ and __DATA__ clauses
 if exists("perl_fold")
-  syntax region perlDATA		start="^__\(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
+  syntax region perlDATA		start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
 else
-  syntax region perlDATA		start="^__\(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
-endif
-
-
-"
-" Folding
-
-if exists("perl_fold")
-  if !exists("perl_nofold_packages")
-    syn region perlPackageFold start="^package \S\+;\s*\(#.*\)\=$" end="^1;\s*\(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
-  endif
-  if !exists("perl_nofold_subs")
-    syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\(#.*\)\=$" transparent fold keepend
-    syn region perlSubFold start="^\z(\s*\)\<\(BEGIN\|END\|CHECK\|INIT\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
-  endif
-
-  if exists("perl_fold_blocks")
-    syn region perlBlockFold start="^\z(\s*\)\(if\|elsif\|unless\|for\|while\|until\)\s*(.*)\(\s*{\)\=\s*\(#.*\)\=$" start="^\z(\s*\)foreach\s*\(\(my\|our\)\=\s*\S\+\s*\)\=(.*)\(\s*{\)\=\s*\(#.*\)\=$" end="^\z1}\s*;\=\(#.*\)\=$" transparent fold keepend
-    syn region perlBlockFold start="^\z(\s*\)\(do\|else\)\(\s*{\)\=\s*\(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\(#.*\)\=$" transparent fold keepend
-  endif
-
-  setlocal foldmethod=syntax
-  syn sync fromstart
-else
-  " fromstart above seems to set minlines even if perl_fold is not set.
-  syn sync minlines=0
+  syntax region perlDATA		start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
 endif
 
-
-if version >= 508 || !exists("did_perl_syn_inits")
-  if version < 508
-    let did_perl_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
+command -nargs=+ HiLink hi def link <args>
 
-  " The default highlighting.
-  HiLink perlSharpBang		PreProc
-  HiLink perlControl		PreProc
-  HiLink perlInclude		Include
-  HiLink perlSpecial		Special
-  HiLink perlString		String
-  HiLink perlCharacter		Character
-  HiLink perlNumber		Number
-  HiLink perlFloat		Float
-  HiLink perlType		Type
-  HiLink perlIdentifier		Identifier
-  HiLink perlLabel		Label
-  HiLink perlStatement		Statement
-  HiLink perlConditional	Conditional
-  HiLink perlRepeat		Repeat
-  HiLink perlOperator		Operator
-  HiLink perlFunction		Function
-  HiLink perlFunctionPrototype	perlFunction
-  HiLink perlComment		Comment
-  HiLink perlTodo		Todo
-  if exists("perl_string_as_statement")
-    HiLink perlStringStartEnd	perlStatement
-  else
-    HiLink perlStringStartEnd	perlString
-  endif
-  HiLink perlList		perlStatement
-  HiLink perlMisc		perlStatement
-  HiLink perlVarPlain		perlIdentifier
-  HiLink perlVarPlain2		perlIdentifier
-  HiLink perlFiledescRead	perlIdentifier
-  HiLink perlFiledescStatement	perlIdentifier
-  HiLink perlVarSimpleMember	perlIdentifier
-  HiLink perlVarSimpleMemberName perlString
-  HiLink perlVarNotInMatches	perlIdentifier
-  HiLink perlVarSlash		perlIdentifier
-  HiLink perlQQ			perlString
-  if version >= 600
-    HiLink perlHereDoc		perlString
-  else
-    HiLink perlHereIdentifier	perlStringStartEnd
-    HiLink perlUntilEOFDQ	perlString
-    HiLink perlUntilEOFSQ	perlString
-    HiLink perlUntilEmptyDQ	perlString
-    HiLink perlUntilEmptySQ	perlString
-    HiLink perlUntilEOF		perlString
-  endif
-  HiLink perlStringUnexpanded	perlString
-  HiLink perlSubstitutionSQ	perlString
-  HiLink perlSubstitutionDQ	perlString
-  HiLink perlSubstitutionSlash	perlString
-  HiLink perlSubstitutionHash	perlString
-  HiLink perlSubstitutionBracket perlString
-  HiLink perlSubstitutionCurly 	perlString
-  HiLink perlSubstitutionPling	perlString
-  HiLink perlTranslationSlash	perlString
-  HiLink perlTranslationHash	perlString
-  HiLink perlTranslationBracket	perlString
-  HiLink perlTranslationCurly	perlString
-  HiLink perlMatch		perlString
-  HiLink perlMatchStartEnd	perlStatement
-  HiLink perlFormatName		perlIdentifier
-  HiLink perlFormatField	perlString
-  HiLink perlPackageDecl	perlType
-  HiLink perlStorageClass	perlType
-  HiLink perlPackageRef		perlType
-  HiLink perlStatementPackage	perlStatement
-  HiLink perlStatementSub	perlStatement
-  HiLink perlStatementStorage	perlStatement
-  HiLink perlStatementControl	perlStatement
-  HiLink perlStatementScalar	perlStatement
-  HiLink perlStatementRegexp	perlStatement
-  HiLink perlStatementNumeric	perlStatement
-  HiLink perlStatementList	perlStatement
-  HiLink perlStatementHash	perlStatement
-  HiLink perlStatementIOfunc	perlStatement
-  HiLink perlStatementFiledesc	perlStatement
-  HiLink perlStatementVector	perlStatement
-  HiLink perlStatementFiles	perlStatement
-  HiLink perlStatementFlow	perlStatement
-  HiLink perlStatementScope	perlStatement
-  HiLink perlStatementInclude	perlStatement
-  HiLink perlStatementProc	perlStatement
-  HiLink perlStatementSocket	perlStatement
-  HiLink perlStatementIPC	perlStatement
-  HiLink perlStatementNetwork	perlStatement
-  HiLink perlStatementPword	perlStatement
-  HiLink perlStatementTime	perlStatement
-  HiLink perlStatementMisc	perlStatement
-  HiLink perlStatementNew	perlStatement
-  HiLink perlFunctionName	perlIdentifier
-  HiLink perlMethod		perlIdentifier
-  HiLink perlFunctionPRef	perlType
-  HiLink perlPOD		perlComment
-  HiLink perlShellCommand	perlString
-  HiLink perlSpecialAscii	perlSpecial
-  HiLink perlSpecialDollar	perlSpecial
-  HiLink perlSpecialString	perlSpecial
-  HiLink perlSpecialStringU	perlSpecial
-  HiLink perlSpecialMatch	perlSpecial
-  HiLink perlSpecialBEOM	perlSpecial
-  HiLink perlDATA		perlComment
+" The default highlighting.
+HiLink perlSharpBang		PreProc
+HiLink perlControl		PreProc
+HiLink perlInclude		Include
+HiLink perlSpecial		Special
+HiLink perlString		String
+HiLink perlCharacter		Character
+HiLink perlNumber		Number
+HiLink perlFloat		Float
+HiLink perlType			Type
+HiLink perlIdentifier		Identifier
+HiLink perlLabel		Label
+HiLink perlStatement		Statement
+HiLink perlConditional		Conditional
+HiLink perlRepeat		Repeat
+HiLink perlOperator		Operator
+HiLink perlFunction		Keyword
+HiLink perlSubName		Function
+HiLink perlSubPrototype		Type
+HiLink perlSubAttributes	PreProc
+HiLink perlSubAttributesCont	perlSubAttributes
+HiLink perlComment		Comment
+HiLink perlTodo			Todo
+if exists("perl_string_as_statement")
+  HiLink perlStringStartEnd	perlStatement
+else
+  HiLink perlStringStartEnd	perlString
+endif
+HiLink perlVStringV		perlStringStartEnd
+HiLink perlList			perlStatement
+HiLink perlMisc			perlStatement
+HiLink perlVarPlain		perlIdentifier
+HiLink perlVarPlain2		perlIdentifier
+HiLink perlArrow		perlIdentifier
+HiLink perlFiledescRead		perlIdentifier
+HiLink perlFiledescStatement	perlIdentifier
+HiLink perlVarSimpleMember	perlIdentifier
+HiLink perlVarSimpleMemberName 	perlString
+HiLink perlVarNotInMatches	perlIdentifier
+HiLink perlVarSlash		perlIdentifier
+HiLink perlQQ			perlString
+HiLink perlHereDoc		perlString
+HiLink perlStringUnexpanded	perlString
+HiLink perlSubstitutionSQ	perlString
+HiLink perlSubstitutionGQQ	perlString
+HiLink perlTranslationGQ	perlString
+HiLink perlMatch		perlString
+HiLink perlMatchStartEnd	perlStatement
+HiLink perlFormatName		perlIdentifier
+HiLink perlFormatField		perlString
+HiLink perlPackageDecl		perlType
+HiLink perlStorageClass		perlType
+HiLink perlPackageRef		perlType
+HiLink perlStatementPackage	perlStatement
+HiLink perlStatementStorage	perlStatement
+HiLink perlStatementControl	perlStatement
+HiLink perlStatementScalar	perlStatement
+HiLink perlStatementRegexp	perlStatement
+HiLink perlStatementNumeric	perlStatement
+HiLink perlStatementList	perlStatement
+HiLink perlStatementHash	perlStatement
+HiLink perlStatementIOfunc	perlStatement
+HiLink perlStatementFiledesc	perlStatement
+HiLink perlStatementVector	perlStatement
+HiLink perlStatementFiles	perlStatement
+HiLink perlStatementFlow	perlStatement
+HiLink perlStatementInclude	perlStatement
+HiLink perlStatementProc	perlStatement
+HiLink perlStatementSocket	perlStatement
+HiLink perlStatementIPC		perlStatement
+HiLink perlStatementNetwork	perlStatement
+HiLink perlStatementPword	perlStatement
+HiLink perlStatementTime	perlStatement
+HiLink perlStatementMisc	perlStatement
+HiLink perlStatementIndirObj	perlStatement
+HiLink perlFunctionName		perlIdentifier
+HiLink perlMethod		perlIdentifier
+HiLink perlFunctionPRef		perlType
+HiLink perlPOD			perlComment
+HiLink perlShellCommand		perlString
+HiLink perlSpecialAscii		perlSpecial
+HiLink perlSpecialDollar	perlSpecial
+HiLink perlSpecialString	perlSpecial
+HiLink perlSpecialStringU	perlSpecial
+HiLink perlSpecialMatch		perlSpecial
+HiLink perlDATA			perlComment
 
-  HiLink perlBrackets		Error
+" Possible errors
+HiLink perlNotEmptyLine		Error
+HiLink perlElseIfError		Error
+HiLink perlSubPrototypeError	Error
+HiLink perlSubError		Error
 
-  " Possible errors
-  HiLink perlNotEmptyLine	Error
-  HiLink perlElseIfError	Error
-
-  delcommand HiLink
-endif
+delcommand HiLink
 
 " Syncing to speed up processing
 "
 if !exists("perl_no_sync_on_sub")
   syn sync match perlSync	grouphere NONE "^\s*\<package\s"
-  syn sync match perlSync	grouphere perlFunction "^\s*\<sub\s"
+  syn sync match perlSync	grouphere NONE "^\s*\<sub\>"
   syn sync match perlSync	grouphere NONE "^}"
 endif
 
@@ -559,4 +540,5 @@ syn sync match perlSyncPOD	grouphere NON
 
 let b:current_syntax = "perl"
 
-" vim: ts=8
+" XXX Change to sts=4:sw=4
+" vim:ts=8:sts=2:sw=2:expandtab:ft=vim
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/perl6.vim
@@ -0,0 +1,2249 @@
+" Vim syntax file
+" Language:     Perl 6
+" Maintainer:   Andy Lester <andy@petdance.com>
+" Homepage:     http://github.com/petdance/vim-perl/tree/master
+" Last Change:  2009-07-04
+
+" Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org>
+"               Moritz Lenz <moritz@faui2k3.org>
+"               Hinrik Ă–rn SigurĂ°sson <hinrik.sig@gmail.com>
+"
+" This is a big undertaking. Perl 6 is the sort of language that only Perl
+" can parse. But I'll do my best to get vim to.
+"
+" You can associate the extension ".pl" with the filetype "perl6" by setting
+"     autocmd BufNewFile,BufRead *.pl setf perl6
+" in your ~/.vimrc. But that will infringe on Perl 5, so you might want to
+" put a modeline near the beginning or end of your Perl 6 files instead:
+"     # vim: filetype=perl6
+
+" TODO:
+"   * Deal with s:Perl5//
+"   * m:s// is a match, not a substitution
+"   * Make these highlight as strings, not operators:
+"       <==> <=:=> <===> <=~> <« »> «>» «<»
+"   * Allow more keywords to match as function calls(leave() is export(), etc)
+"   * Optimization: use nextgroup instead of lookaround (:help syn-nextgroup)
+"   * Fix s''' substitutions being matched as package names
+"   * Match s/// and m/// better, so things like "$s/" won't match
+"   * Add more support for folding (:help syn-fold)
+"   * Add more syntax syncing hooks (:help syn-sync)
+"   * Q//:
+"       :to, :heredoc
+"       interpolate \q:s{$scalar} (though the spec isn't very clear on it)
+"
+" Impossible TODO?:
+"   * Unspace
+"   * Unicode bracketing characters for quoting (there are so many)
+"   * Various tricks depending on context. I.e. we can't know when Perl
+"     expects «*» to be a string or a hyperoperator. The latter is presumably
+"     more common, so that's what we assume.
+"   * Selective highlighting of Pod formatting codes with the :allow option
+"   * Arbitrary number, order, and negation of adverbs to Q//, q//, qq//.
+"     Currently only the first adverb is considered significant. Anything
+"     more would require an exponential amount of regexes, making this
+"     already slow syntax file even slower.
+"
+" If you want to have Pir code inside Q:PIR// strings highlighted, do:
+"  let perl6_embedded_pir=1
+"
+" The above requires pir.vim, which you can find in Parrot's repository:
+" https://svn.parrot.org/parrot/trunk/editor/
+"
+" Some less than crucial things have been made optional to speed things up.
+" Look at the comments near the if/else branches in this file to see exactly
+" which features are affected. "perl6_extended_all" enables everything.
+"
+" The defaults are:
+"
+"  unlet perl6_extended_comments
+"  unlet perl6_extended_q
+"  unlet perl6_extended_all
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+    syntax clear
+elseif exists("b:current_syntax")
+    finish
+endif
+
+" identifiers
+syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*"
+
+" This is used in the for loops below
+" Don't use the "syn keyword" construct because that always has higher
+" priority than matches/regions, so the words can't be autoquoted with
+" the "=>" and "p5=>" operators. All the lookaround stuff is to make sure
+" we don't match them as part of some other identifier.
+let s:before_keyword = " display \"\\%(\\k\\|\\K\\@<=[-']\\)\\@<!\\%("
+let s:after_keyword = "\\)\\%(\\k\\|[-']\\K\\@=\\)\\@!\""
+
+" Billions of keywords
+let s:keywords = {
+ \ "p6Attention": [
+ \   "ACHTUNG ATTN ATTENTION FIXME NB TODO TBD WTF XXX NOTE",
+ \ ],
+ \ "p6DeclareRoutine": [
+ \   "macro sub submethod method multi proto only rule token regex category",
+ \ ],
+ \ "p6Module": [
+ \   "module class role package enum grammar slang subset",
+ \ ],
+ \ "p6Variable": [
+ \   "self",
+ \ ],
+ \ "p6Include": [
+ \   "use require",
+ \ ],
+ \ "p6Conditional": [
+ \   "if else elsif unless",
+ \ ],
+ \ "p6VarStorage": [
+ \   "let my our state temp has constant",
+ \ ],
+ \ "p6Repeat": [
+ \   "for loop repeat while until gather given",
+ \ ],
+ \ "p6FlowControl": [
+ \   "take do when next last redo return contend maybe defer",
+ \   "default exit make continue break goto leave async lift",
+ \ ],
+ \ "p6TypeConstraint": [
+ \   "is as but trusts of returns handles where augment supersede",
+ \ ],
+ \ "p6ClosureTrait": [
+ \   "BEGIN CHECK INIT START FIRST ENTER LEAVE KEEP",
+ \   "UNDO NEXT LAST PRE POST END CATCH CONTROL TEMP",
+ \ ],
+ \ "p6Exception": [
+ \   "die fail try warn",
+ \ ],
+ \ "p6Property": [
+ \   "prec irs ofs ors export deep binary unary reparsed rw parsed cached",
+ \   "readonly defequiv will ref copy inline tighter looser equiv assoc",
+ \   "required",
+ \ ],
+ \ "p6Number": [
+ \   "NaN Inf",
+ \ ],
+ \ "p6Pragma": [
+ \   "oo fatal",
+ \ ],
+ \ "p6Type": [
+ \   "Object Any Junction Whatever Capture Match",
+ \   "Signature Proxy Matcher Package Module Class",
+ \   "Grammar Scalar Array Hash KeyHash KeySet KeyBag",
+ \   "Pair List Seq Range Set Bag Mapping Void Undef",
+ \   "Failure Exception Code Block Routine Sub Macro",
+ \   "Method Submethod Regex Str Blob Char Byte",
+ \   "Codepoint Grapheme StrPos StrLen Version Num",
+ \   "Complex num complex Bit bit bool True False",
+ \   "Increasing Decreasing Ordered Callable AnyChar",
+ \   "Positional Associative Ordering KeyExtractor",
+ \   "Comparator OrderingPair IO KitchenSink Role",
+ \   "Int int int1 int2 int4 int8 int16 int32 int64",
+ \   "Rat rat rat1 rat2 rat4 rat8 rat16 rat32 rat64",
+ \   "Buf buf buf1 buf2 buf4 buf8 buf16 buf32 buf64",
+ \   "UInt uint uint1 uint2 uint4 uint8 uint16 uint32",
+ \   "uint64 Abstraction utf8 utf16 utf32",
+ \ ],
+ \ "p6Operator": [
+ \   "div x xx mod also leg cmp before after eq ne le lt",
+ \   "gt ge eqv ff fff and andthen Z X or xor",
+ \   "orelse extra m mm rx s tr",
+ \ ],
+\ }
+
+for [group, words] in items(s:keywords)
+    let s:words_space = join(words, " ")
+    let s:temp = split(s:words_space)
+    let s:words = join(s:temp, "\\|")
+    exec "syn match ". group ." ". s:before_keyword . s:words . s:after_keyword
+endfor
+unlet s:keywords s:words_space s:temp s:words
+
+" More operators
+" Don't put a "\+" at the end of the character class. That makes it so
+" greedy that the "%" " in "+%foo" won't be allowed to match as a sigil,
+" among other things
+syn match p6Operator display "[-+/*~?|=^!%&,<>.;\\]"
+syn match p6Operator display "\%(:\@<!::\@!\|::=\|\.::\)"
+" these require whitespace on the left side
+syn match p6Operator display "\%(\s\|^\)\@<=\%(xx=\|p5=>\)"
+" "i" requires a digit to the left, and no keyword char to the right
+syn match p6Operator display "\d\@<=i\k\@!"
+" index overloading
+syn match p6Operator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)"
+
+" all infix operators except nonassocative ones
+let s:infix_a = [
+    \ "div % mod +& +< +> \\~& ?& \\~< \\~> +| +\\^ \\~| \\~\\^ ?| ?\\^ xx x",
+    \ "\\~ && & also <== ==> <<== ==>> == != < <= > >= \\~\\~ eq ne lt le gt",
+    \ "ge =:= === eqv before after \\^\\^ min max \\^ff ff\\^ \\^ff\\^",
+    \ "\\^fff fff\\^ \\^fff\\^ fff ff ::= := \\.= => , : p5=> Z minmax",
+    \ "\\.\\.\\. and andthen or orelse xor \\^ += -= /= \\*= \\~= //= ||=",
+    \ "+ - \\*\\* \\* // / \\~ || |",
+\ ]
+" nonassociative infix operators
+let s:infix_n = "but does <=> leg cmp \\.\\. \\.\\.\\^\\^ \\^\\.\\. \\^\\.\\.\\^"
+
+let s:infix_a_long = join(s:infix_a, " ")
+let s:infix_a_words = split(s:infix_a_long)
+let s:infix_a_pattern = join(s:infix_a_words, "\\|")
+
+let s:infix_n_words = split(s:infix_n)
+let s:infix_n_pattern = join(s:infix_n_words, "\\|")
+
+let s:both = [s:infix_a_pattern, s:infix_n_pattern]
+let s:infix = join(s:both, "\\|")
+
+let s:infix_assoc = "!\\?\\%(" . s:infix_a_pattern . "\\)"
+let s:infix = "!\\?\\%(" . s:infix . "\\)"
+
+unlet s:infix_a s:infix_a_long s:infix_a_words s:infix_a_pattern
+unlet s:infix_n s:infix_n_pattern s:both
+
+" [+] reduce
+exec "syn match p6ReduceOp display \"\\k\\@<!\\[[R\\\\]\\?!\\?". s:infix_assoc ."]\\%(«\\|<<\\)\\?\""
+unlet s:infix_assoc
+
+" Reverse and cross operators (Rop, Xop)
+exec "syn match p6ReverseCrossOp display \"[RX]". s:infix ."\""
+
+" q() or whatever() is always a function call
+syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*(\@="
+
+" basically all builtins that can be followed by parentheses
+let s:routines = [
+ \ "eager hyper substr index rindex grep map sort join lines hints chmod",
+ \ "split reduce min max reverse truncate zip cat roundrobin classify",
+ \ "first sum keys values pairs defined delete exists elems end kv any",
+ \ "all one wrap shape key value name pop push shift splice unshift floor",
+ \ "ceiling abs exp log log10 rand sign sqrt sin cos tan round strand",
+ \ "roots cis unpolar polar atan2 pick chop p5chop chomp p5chomp lc",
+ \ "lcfirst uc ucfirst capitalize normalize pack unpack quotemeta comb",
+ \ "samecase sameaccent chars nfd nfc nfkd nfkc printf sprintf caller",
+ \ "evalfile run runinstead nothing want bless chr ord gmtime time eof",
+ \ "localtime gethost getpw chroot getlogin getpeername kill fork wait",
+ \ "perl graphs codes bytes clone print open read write readline say seek",
+ \ "close opendir readdir slurp pos fmt vec link unlink symlink uniq pair",
+ \ "asin atan sec cosec cotan asec acosec acotan sinh cosh tanh asinh",
+ \ "acos acosh atanh sech cosech cotanh sech acosech acotanh asech ok",
+ \ "plan_ok dies_ok lives_ok skip todo pass flunk force_todo use_ok isa_ok",
+ \ "diag is_deeply isnt like skip_rest unlike cmp_ok eval_dies_ok nok_error",
+ \ "eval_lives_ok approx is_approx throws_ok version_lt plan eval succ pred",
+ \ "times nonce once signature new connect operator undef undefine sleep",
+ \ "from to infix postfix prefix circumfix postcircumfix minmax lazy count",
+ \ "unwrap getc pi e context void quasi body each contains rewinddir subst",
+ \ "can isa flush arity assuming rewind callwith callsame nextwith nextsame",
+ \ "attr eval_elsewhere none srand trim trim_start trim_end lastcall WHAT",
+ \ "WHERE HOW WHICH VAR WHO WHENCE ACCEPTS REJECTS does not true iterator by",
+ \ "re im invert flip",
+\ ]
+
+" we want to highlight builtins like split() though, so this comes afterwards
+" TODO: check if this would be faster as one big regex
+let s:words_space = join(s:routines, " ")
+let s:temp = split(s:words_space)
+let s:words = join(s:temp, "\\|")
+exec "syn match p6Routine ". s:before_keyword . s:words . s:after_keyword
+unlet s:before_keyword s:after_keyword s:words_space s:temp s:words s:routines
+
+" packages, must come after all the keywords
+syn match p6Normal display "\%(::\)\@<=\K\%(\k\|[-']\K\@=\)*"
+syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*\%(::\)\@="
+
+" some standard packages
+syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Order\%(::Same\|::Increase\|::Decrease\)\?\)\%(\k\|[-']\K\@=\)\@!"
+syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Bool\%(::True\|::False\)\?\)\%(\k\|[-']\K\@=\)\@!"
+
+
+syn match p6Shebang    display "\%^#!.*"
+syn match p6BlockLabel display "\%(^\s*\)\@<=\h\w*\s*::\@!\_s\@="
+syn match p6Number     display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<!\%([eE]_\@!+\?\%(\d\|_\)\+\)\?_\@<!"
+syn match p6Float      display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<![eE]_\@!-\%(\d\|_\)\+"
+syn match p6Float      display "\k\@<!_\@<!\%(\d\|__\@!\)*_\@<!\.\@<!\._\@!\.\@!\a\@!\%(\d\|_\)\+_\@<!\%([eE]_\@!\%(\d\|_\)\+\)\?"
+
+syn match p6NumberBase display "[obxd]" contained
+syn match p6Number     display "\<0\%(o[0-7][0-7_]*\)\@="     nextgroup=p6NumberBase
+syn match p6Number     display "\<0\%(b[01][01_]*\)\@="       nextgroup=p6NumberBase
+syn match p6Number     display "\<0\%(x\x[[:xdigit:]_]*\)\@=" nextgroup=p6NumberBase
+syn match p6Number     display "\<0\%(d\d[[:digit:]_]*\)\@="  nextgroup=p6NumberBase
+syn match p6Number     display "\%(\<0o\)\@<=[0-7][0-7_]*"
+syn match p6Number     display "\%(\<0b\)\@<=[01][01_]*"
+syn match p6Number     display "\%(\<0x\)\@<=\x[[:xdigit:]_]*"
+syn match p6Number     display "\%(\<0d\)\@<=\d[[:digit:]_]*"
+
+syn match p6Version    display "\<v\d\@=" nextgroup=p6VersionNum
+syn match p6VersionNum display "\d\+" nextgroup=p6VersionDot contained
+syn match p6VersionDot display "\.\%(\d\|\*\)\@=" nextgroup=p6VersionNum contained
+
+" try to distinguish the "is" function from the "is" trail auxiliary
+syn match p6Routine     display "\%(\%(\S\k\@<!\|^\)\s*\)\@<=is\>"
+
+" does is a type constraint sometimes
+syn match p6TypeConstraint display "does\%(\s*\%(\k\|[-']\K\@=\)\)\@="
+
+" int is a type sometimes
+syn match p6Type        display "\<int\>\%(\s*(\|\s\+\d\)\@!"
+
+" these Routine names are also Properties, if preceded by "is"
+syn match p6Property    display "\%(is\s\+\)\@<=\%(signature\|context\|also\|shape\)"
+
+" The sigil in ::*Package
+syn match p6PackageTwigil display "\%(::\)\@<=\*"
+
+" $<match>
+syn region p6MatchVarSigil
+    \ matchgroup=p6Variable
+    \ start="\$\%(<<\@!\)\@="
+    \ end=">\@<="
+    \ contains=p6MatchVar
+
+syn region p6MatchVar
+    \ matchgroup=p6Twigil
+    \ start="<"
+    \ end=">"
+    \ contained
+
+" Contextualizers
+syn match p6Context display "\<\%(item\|list\|slice\|hash\)\>"
+syn match p6Context display "\%(\$\|@\|%\|&\|@@\)(\@="
+
+" the "$" placeholder in "$var1, $, var2 = @list"
+syn match p6Placeholder display "\%(,\s*\)\@<=\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!"
+syn match p6Placeholder display "\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!\%(,\s*\)\@="
+
+" Quoting
+
+" one cluster for every quote adverb
+syn cluster p6Interp_s
+    \ add=p6InterpScalar
+syn cluster p6Interp_scalar
+    \ add=p6InterpScalar
+
+syn cluster p6Interp_a
+    \ add=p6InterpArray
+syn cluster p6Interp_array
+    \ add=p6InterpArray
+
+syn cluster p6Interp_h
+    \ add=p6InterpHash
+syn cluster p6Interp_hash
+    \ add=p6InterpHash
+
+syn cluster p6Interp_f
+    \ add=p6InterpFunction
+syn cluster p6Interp_f
+    \ add=p6InterpFunction
+
+syn cluster p6Interp_c
+    \ add=p6InterpClosure
+syn cluster p6Interp_closure
+    \ add=p6InterpClosure
+
+
+if exists("perl6_extended_q") || exists("perl6_extended_all")
+    syn cluster p6Interp_ww
+        \ add=p6StringSQ
+        \ add=p6StringDQ
+    syn cluster p6Interp_quotewords
+        \ add=p6StringSQ
+        \ add=p6StringDQ
+endif
+
+syn cluster p6Interp_q
+    \ add=p6EscQQ
+    \ add=p6EscBackSlash
+syn cluster p6Interp_single
+    \ add=p6EscQQ
+    \ add=p6EscBackSlash
+
+syn cluster p6Interp_b
+    \ add=@p6Interp_q
+    \ add=p6Escape
+    \ add=p6EscOpenCurly
+    \ add=p6EscCodePoint
+    \ add=p6EscHex
+    \ add=p6EscOct
+    \ add=p6EscOctOld
+    \ add=p6EscNull
+syn cluster p6Interp_backslash
+    \ add=@p6Interp_q
+    \ add=p6Escape
+    \ add=p6EscOpenCurly
+    \ add=p6EscCodePoint
+    \ add=p6EscHex
+    \ add=p6EscOct
+    \ add=p6EscOctOld
+    \ add=p6EscNull
+
+syn cluster p6Interp_qq
+    \ add=@p6Interp_scalar
+    \ add=@p6Interp_array
+    \ add=@p6Interp_hash
+    \ add=@p6Interp_function
+    \ add=@p6Interp_closure
+    \ add=@p6Interp_backslash
+syn cluster p6Interp_double
+    \ add=@p6Interp_scalar
+    \ add=@p6Interp_array
+    \ add=@p6Interp_hash
+    \ add=@p6Interp_function
+    \ add=@p6Interp_closure
+    \ add=@p6Interp_backslash
+
+syn region p6InterpScalar
+    \ start="\ze\z(\$\%(\%(\%(\d\+\|!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
+    \ start="\ze\z(\$\%(\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\|\%(\d\+\|!\|/\|¢\)\)\)"
+    \ end="\z1\zs"
+    \ contained
+    \ contains=TOP
+    \ keepend
+
+syn region p6InterpScalar
+    \ matchgroup=p6Context
+    \ start="\$\ze()\@!"
+    \ skip="([^)]*)"
+    \ end=")\zs"
+    \ contained
+    \ contains=TOP
+
+syn region p6InterpArray
+    \ start="\ze\z(@\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
+    \ end="\z1\zs"
+    \ contained
+    \ contains=TOP
+    \ keepend
+
+syn region p6InterpArray
+    \ matchgroup=p6Context
+    \ start="@\ze()\@!"
+    \ start="@@\ze()\@!"
+    \ skip="([^)]*)"
+    \ end=")\zs"
+    \ contained
+    \ contains=TOP
+
+syn region p6InterpHash
+    \ start="\ze\z(%\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
+    \ end="\z1\zs"
+    \ contained
+    \ contains=TOP
+    \ keepend
+
+syn region p6InterpHash
+    \ matchgroup=p6Context
+    \ start="%\ze()\@!"
+    \ skip="([^)]*)"
+    \ end=")\zs"
+    \ contained
+    \ contains=TOP
+
+syn region p6InterpFunction
+    \ start="\ze\z(&\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)"
+    \ end="\z1\zs"
+    \ contained
+    \ contains=TOP
+    \ keepend
+
+syn region p6InterpFunction
+    \ matchgroup=p6Context
+    \ start="&\ze()\@!"
+    \ skip="([^)]*)"
+    \ end=")\zs"
+    \ contained
+    \ contains=TOP
+
+syn region p6InterpClosure
+    \ start="\\\@<!{}\@!"
+    \ skip="{[^}]*}"
+    \ end="}"
+    \ contained
+    \ contains=TOP
+    \ keepend
+
+" generic escape
+syn match p6Escape          display "\\\S" contained
+
+" escaped closing delimiters
+syn match p6EscQuote        display "\\'" contained
+syn match p6EscDoubleQuote  display "\\\"" contained
+syn match p6EscCloseAngle   display "\\>" contained
+syn match p6EscCloseFrench  display "\\»" contained
+syn match p6EscBackTick     display "\\`" contained
+syn match p6EscForwardSlash display "\\/" contained
+syn match p6EscVerticalBar  display "\\|" contained
+syn match p6EscExclamation  display "\\!" contained
+syn match p6EscComma        display "\\," contained
+syn match p6EscDollar       display "\\\$" contained
+syn match p6EscCloseCurly   display "\\}" contained
+syn match p6EscCloseBracket display "\\\]" contained
+
+" misc escapes
+syn match p6EscOctOld    display "\\\d\{1,3}" contained
+syn match p6EscNull      display "\\0\d\@!" contained
+syn match p6EscCodePoint display "\%(\\c\)\@<=\%(\d\|\S\|\[\)\@=" contained nextgroup=p6CodePoint
+syn match p6EscHex       display "\%(\\x\)\@<=\%(\x\|\[\)\@=" contained nextgroup=p6HexSequence
+syn match p6EscOct       display "\%(\\o\)\@<=\%(\o\|\[\)\@=" contained nextgroup=p6OctSequence
+syn match p6EscQQ        display "\\qq" contained nextgroup=p6QQSequence
+syn match p6EscOpenCurly display "\\{" contained
+syn match p6EscHash      display "\\#" contained
+syn match p6EscBackSlash display "\\\\" contained
+
+syn region p6QQSequence
+    \ matchgroup=p6Escape
+    \ start="\["
+    \ skip="\[[^\]]*]"
+    \ end="]"
+    \ contained
+    \ transparent
+    \ contains=@p6Interp_qq
+
+syn match p6CodePoint   display "\%(\d\+\|\S\)" contained
+syn region p6CodePoint
+    \ matchgroup=p6Escape
+    \ start="\["
+    \ end="]"
+    \ contained
+
+syn match p6HexSequence display "\x\+" contained
+syn region p6HexSequence
+    \ matchgroup=p6Escape
+    \ start="\["
+    \ end="]"
+    \ contained
+
+syn match p6OctSequence display "\o\+" contained
+syn region p6OctSequence
+    \ matchgroup=p6Escape
+    \ start="\["
+    \ end="]"
+    \ contained
+
+" matches :key, :!key, :$var, :key<var>, etc
+" Since we don't know in advance how the adverb ends, we use a trick.
+" Consume nothing with the start pattern (\ze at the beginning),
+" while capturing the whole adverb into \z1 and then putting it before
+" the match start (\zs) of the end pattern.
+syn region p6Adverb
+    \ start="\ze\z(:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)"
+    \ start="\ze\z(:!\?[@$%]\$*\%(::\|\%(\$\@<=\d\+\|!\|/\|¢\)\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\)"
+    \ end="\z1\zs"
+    \ contained
+    \ contains=TOP
+    \ keepend
+
+" <words>
+" FIXME: not sure how to distinguish this from the "less than" operator
+" in all cases. For now, it matches if any of the following is true:
+"
+" * There is whitespace missing on either side of the "<", since
+"   people tend to put spaces around "less than"
+" * It comes after "enum", "for", "any", "all", or "none"
+" * It's the first or last thing on a line (ignoring whitespace)
+" * It's preceded by "= "
+"
+" It never matches when:
+"
+" * Preceded by [<+~=] (e.g. <<foo>>, =<$foo>)
+" * Followed by [-=] (e.g. <--, <=, <==)
+syn region p6StringAngle
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
+    \ start="\%(\s\|[<+~=]\)\@<!<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
+    \ start="[<+~=]\@<!<\%(\s\|<\|=>\|[-=]\{1,2}>\@!\)\@!"
+    \ start="\%(^\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
+    \ start="[<+~=]\@<!<\%(\s*$\)\@="
+    \ start="\%(=\s\+\)\@=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!"
+    \ skip="\\\@<!\\>"
+    \ end=">"
+    \ contains=p6InnerAnglesOne,p6EscBackSlash,p6EscCloseAngle
+
+syn region p6InnerAnglesOne
+    \ matchgroup=p6StringAngle
+    \ start="<"
+    \ skip="\\\@<!\\>"
+    \ end=">"
+    \ transparent
+    \ contained
+    \ contains=p6InnerAnglesOne
+
+" <<words>>
+syn region p6StringAngles
+    \ matchgroup=p6Quote
+    \ start="<<=\@!"
+    \ skip="\\\@<!\\>"
+    \ end=">>"
+    \ contains=p6InnerAnglesTwo,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseAngle,p6Adverb,p6StringSQ,p6StringDQ
+
+syn region p6InnerAnglesTwo
+    \ matchgroup=p6StringAngles
+    \ start="<<"
+    \ skip="\\\@<!\\>"
+    \ end=">>"
+    \ transparent
+    \ contained
+    \ contains=p6InnerAnglesTwo
+
+" «words»
+syn region p6StringFrench
+    \ matchgroup=p6Quote
+    \ start="«"
+    \ skip="\\\@<!\\»"
+    \ end="»"
+    \ contains=p6InnerFrench,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseFrench,p6Adverb,p6StringSQ,p6StringDQ
+
+syn region p6InnerFrench
+    \ matchgroup=p6StringFrench
+    \ start="«"
+    \ skip="\\\@<!\\»"
+    \ end="»"
+    \ transparent
+    \ contained
+    \ contains=p6InnerFrench
+
+" 'string'
+syn region p6StringSQ
+    \ matchgroup=p6Quote
+    \ start="'"
+    \ skip="\\\@<!\\'"
+    \ end="'"
+    \ contains=@p6Interp_q,p6EscQuote
+
+" "string"
+syn region p6StringDQ
+    \ matchgroup=p6Quote
+    \ start=+"+
+    \ skip=+\\\@<!\\"+
+    \ end=+"+
+    \ contains=@p6Interp_qq,p6EscDoubleQuote
+
+" Q// and friends.
+
+syn match p6QuoteQ display "\%([Qq]\%(ww\|to\|[qwxsahfcb]\)\?\)\>" nextgroup=p6QPairs skipwhite skipempty
+syn match p6QPairs contained transparent skipwhite skipempty nextgroup=p6StringQ,p6StringQ_PIR "\%(\_s*:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)*"
+
+if exists("perl6_embedded_pir")
+    syn include @p6PIR syntax/pir.vim
+endif
+
+" hardcoded set of delimiters
+let s:delims = [
+  \ ["\\\"",         "\\\"", "p6EscDoubleQuote",  "\\\\\\@<!\\\\\\\""],
+  \ ["'",            "'",    "p6EscQuote",        "\\\\\\@<!\\\\'"],
+  \ ["/",            "/",    "p6EscForwardSlash", "\\\\\\@<!\\\\/"],
+  \ ["`",            "`",    "p6EscBackTick",     "\\\\\\@<!\\\\`"],
+  \ ["|",            "|",    "p6EscVerticalBar",  "\\\\\\@<!\\\\|"],
+  \ ["!",            "!",    "p6EscExclamation",  "\\\\\\@<!\\\\!"],
+  \ [",",            ",",    "p6EscComma",        "\\\\\\@<!\\\\,"],
+  \ ["\\$",          "\\$",  "p6EscDollar",       "\\\\\\@<!\\\\\\$"],
+  \ ["{",            "}",    "p6EscCloseCurly",   "\\%(\\\\\\@<!\\\\}\\|{[^}]*}\\)"],
+  \ ["<",            ">",    "p6EscCloseAngle",   "\\%(\\\\\\@<!\\\\>\\|<[^>]*>\\)"],
+  \ ["«",            "»",    "p6EscCloseFrench",  "\\%(\\\\\\@<!\\\\»\\|«[^»]*»\\)"],
+  \ ["\\\[",         "]",    "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]\\|\\[^\\]]*]\\)"],
+  \ ["\\s\\@<=(",    ")",    "p6EscCloseParen",   "\\%(\\\\\\@<!\\\\)\\|([^)]*)\\)"],
+\ ]
+
+" double and triple delimiters too
+if exists("perl6_extended_q") || exists("perl6_extended_all")
+    call add(s:delims, ["««",           "»»",  "p6EscCloseFrench",  "\\%(\\\\\\@<!\\\\»»\\|««\\%([^»]\\|»»\\@!\\)*»»\\)"])
+    call add(s:delims, ["«««",          "»»»", "p6EscCloseFrench",  "\\%(\\\\\\@<!\\\\»»»\\|«««\\%([^»]\\|»\\%(»»\\)\\@!\\)*»»»\\)"])
+    call add(s:delims, ["{{",           "}}",  "p6EscCloseCurly",   "\\%(\\\\\\@<!\\\\}}\\|{{\\%([^}]\\|}}\\@!\\)*}}\\)"])
+    call add(s:delims, ["{{{",          "}}}", "p6EscCloseCurly",   "\\%(\\\\\\@<!\\\\}}}\\|{{{\\%([^}]\\|}\\%(}}\\)\\@!\\)*}}}\\)"])
+    call add(s:delims, ["\\\[\\\[",     "]]",  "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]\\|\\[\\[\\%([^\\]]\\|]]\\@!\\)*]]\\)"])
+    call add(s:delims, ["\\\[\\\[\\\[", "]]]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]]\\|\\[\\[\\[\\%([^\\]]\\|]\\%(]]\\)\\@!\\)*]]]\\)"])
+    call add(s:delims, ["\\s\\@<=((",   "))",  "p6EscCloseParen",   "\\%(\\\\\\@<!\\\\))\\|((\\%([^)]\\|))\\@!\\)*))\\)"])
+    call add(s:delims, ["\\s\\@<=(((",  ")))", "p6EscCloseParen",   "\\%(\\\\\\@<!\\\\)))\\|(((\\%([^)]\\|)\\%())\\)\\@!\\)*)))\\)"])
+    call add(s:delims, ["\\s\\@<=<<",   ">>",  "p6EscCloseAngle",   "\\%(\\\\\\@<!\\\\>>\\|<<\\%([^>]\\|>>\\@!\\)*>>\\)"])
+    call add(s:delims, ["\\s\\@<=<<<",  ">>>", "p6EscCloseAngle",   "\\%(\\\\\\@<!\\\\>>>\\|<<<\\%([^>]\\|>\\%(>>\\)\\@!\\)*>>>\\)"])
+endif
+
+if !exists("perl6_extended_q") && !exists("perl6_extended_all")
+    " simple version, no special highlighting within the string
+    for [start_delim, end_delim, end_group, skip] in s:delims
+        exec "syn region p6StringQ matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=".end_group." contained"
+    endfor
+
+    if exists("perl6_embedded_pir")
+        " highlight embedded PIR code
+        for [start_delim, end_delim, end_group, skip] in s:delims
+            exec "syn region p6StringQ_PIR matchgroup=p6Quote start=\"\\%(Q\\s*:PIR\\s*\\)\\@<=".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6PIR,".end_group." contained"
+        endfor
+    endif
+else
+    let s:before = "syn region p6StringQ matchgroup=p6Quote start=\"\\%("
+    let s:after  = "\\%(\\_s*:!\\?\\K\\%(\\k\\|[-']\\K\\@=\\)*\\%(([^)]*)\\|\\[[^\\]]*]\\|<[^>]*>\\|«[^»]*»\\|{[^}]*}\\)\\?\\)*\\_s*\\)\\@<="
+
+    let s:adverbs = [
+        \ ["s", "scalar"],
+        \ ["a", "array"],
+        \ ["h", "hash"],
+        \ ["f", "function"],
+        \ ["c", "closure"],
+        \ ["b", "backslash"],
+        \ ["w", "words"],
+        \ ["ww", "quotewords"],
+        \ ["x", "exec"],
+    \ ]
+
+    " these can't be conjoined with q and qq (e.g. as qqq and qqqq)
+    let s:q_adverbs = [
+        \ ["q", "single"],
+        \ ["qq", "double"],
+    \ ]
+
+    for [start_delim, end_delim, end_group, skip] in s:delims
+        " Q, q, and qq with any number of (ignored) adverbs
+        exec s:before ."Q". s:after .start_delim."\" end=\"". end_delim ."\""." contained"
+        exec s:before ."q". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q"." contained"
+        exec s:before ."qq". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq"." contained"
+
+        for [short, long] in s:adverbs
+            " Qs, qs, qqs, Qa, qa, qqa, etc, with ignored adverbs
+            exec s:before ."Q".short. s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained"
+            exec s:before ."q".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained"
+            exec s:before ."qq".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained"
+
+            " Q, q, and qq, with one significant adverb
+            exec s:before ."Q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained"
+            for [q_short, q_long] in s:q_adverbs
+                exec s:before ."Q\\s*:\\%(".q_short."\\|".q_long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".q_long." contained"
+            endfor
+            exec s:before ."q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained"
+            exec s:before ."qq\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained"
+
+            for [short2, long2] in s:adverbs
+                " Qs, qs, qqs, Qa, qa, qqa, etc, with one significant adverb
+                exec s:before ."Q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".long2." contained"
+                for [q_short2, q_long2] in s:q_adverbs
+                    exec s:before ."Q".short."\\s*:\\%(".q_short2."\\|".q_long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".q_long2." contained"
+                endfor
+                exec s:before ."q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long.",@p6Interp_".long2." contained"
+                exec s:before ."qq".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long.",@p6Interp_".long2." contained"
+            endfor
+        endfor
+    endfor
+    unlet s:before s:after s:adverbs s:q_adverbs
+endif
+unlet s:delims
+
+" Match these so something else above can't. E.g. the "q" in "role q { }"
+" should not be considered a string
+syn match p6Normal display "\%(\<\%(role\|grammar\|slang\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*"
+
+" :key
+syn match p6Operator display ":\@<!::\@!!\?" nextgroup=p6Key
+syn match p6Key display "\k\%(\k\|[-']\K\@=\)*" contained
+
+" => and p5=> autoquoting
+syn match p6StringP5Auto display "\K\%(\k\|[-']\K\@=\)*\ze\s\+p5=>"
+syn match p6StringAuto   display "\K\%(\k\|[-']\K\@=\)*\ze\%(p5\)\@<!=>"
+syn match p6StringAuto   display "\K\%(\k\|[-']\K\@=\)*\ze\s\+=>"
+syn match p6StringAuto   display "\K\%(\k\|[-']\K\@=\)*p5\ze=>"
+
+" Hyperoperators. Needs to come after the quoting operators (<>, «», etc)
+exec "syn match p6HyperOp display \"»"   .s:infix."»\\?\""
+exec "syn match p6HyperOp display \"«\\?".s:infix."«\""
+exec "syn match p6HyperOp display \"»"   .s:infix."«\""
+exec "syn match p6HyperOp display \"«"   .s:infix. "»\""
+
+exec "syn match p6HyperOp display \">>"          .s:infix."\\%(>>\\)\\?\""
+exec "syn match p6HyperOp display \"\\%(<<\\)\\?".s:infix."<<\""
+exec "syn match p6HyperOp display \">>"          .s:infix."<<\""
+exec "syn match p6HyperOp display \"<<"          .s:infix.">>\""
+unlet s:infix
+
+" Regexes and grammars
+
+syn match p6RegexName display "\%(\<\%(regex\|rule\|token\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*" nextgroup=p6RegexBlockCrap skipwhite skipempty
+syn match p6RegexBlockCrap "[^{]*" nextgroup=p6RegexBlock skipwhite skipempty transparent contained
+
+syn region p6RegexBlock
+    \ matchgroup=p6Normal
+    \ start="{"
+    \ end="}"
+    \ contained
+    \ contains=@p6Regexen,@p6Variables
+
+" Perl 6 regex bits
+
+syn cluster p6Regexen
+    \ add=p6RxMeta
+    \ add=p6RxEscape
+    \ add=p6EscHex
+    \ add=p6EscOct
+    \ add=p6EscNull
+    \ add=p6RxAnchor
+    \ add=p6RxCapture
+    \ add=p6RxGroup
+    \ add=p6RxAlternation
+    \ add=p6RxAdverb
+    \ add=p6RxAdverbArg
+    \ add=p6RxStorage
+    \ add=p6RxAssertion
+    \ add=p6RxQuoteWords
+    \ add=p6RxClosure
+    \ add=p6RxStringSQ
+    \ add=p6RxStringDQ
+    \ add=p6Comment
+
+syn match p6RxMeta        display contained ".\%(\k\|\s\)\@<!"
+syn match p6RxAnchor      display contained "[$^]"
+syn match p6RxEscape      display contained "\\\S"
+syn match p6RxCapture     display contained "[()]"
+syn match p6RxAlternation display contained "|"
+syn match p6RxRange       display contained "\.\."
+
+syn region p6RxClosure
+    \ matchgroup=p6Normal
+    \ start="{"
+    \ end="}"
+    \ contained
+    \ containedin=p6RxClosure
+    \ contains=TOP
+syn region p6RxGroup
+    \ matchgroup=p6StringSpecial2
+    \ start="\["
+    \ end="]"
+    \ contained
+    \ contains=@p6Regexen,@p6Variables
+syn region p6RxAssertion
+    \ matchgroup=p6StringSpecial2
+    \ start="<"
+    \ end=">"
+    \ contained
+    \ contains=@p6Regexen,@p6Variables,p6RxCharClass,p6RxAssertCall
+syn region p6RxAssertCall
+    \ matchgroup=p6Normal
+    \ start="\%(::\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\@<=(\@="
+    \ end=")\@<="
+    \ contained
+    \ contains=TOP
+syn region p6RxCharClass
+    \ matchgroup=p6StringSpecial2
+    \ start="\%(<[-!+?]\?\)\@<=\["
+    \ skip="\\]"
+    \ end="]"
+    \ contained
+    \ contains=p6RxRange,p6RxEscape,p6EscHex,p6EscOct,p6EscNull
+syn region p6RxQuoteWords
+    \ matchgroup=p6StringSpecial2
+    \ start="< "
+    \ end=">"
+    \ contained
+syn region p6RxAdverb
+    \ start="\ze\z(:!\?\K\%(\k\|[-']\K\@=\)*\)"
+    \ end="\z1\zs"
+    \ contained
+    \ contains=TOP
+    \ keepend
+syn region p6RxAdverbArg
+    \ start="\%(:!\?\K\%(\k\|[-']\K\@=\)*\)\@<=("
+    \ skip="([^)]*)"
+    \ end=")"
+    \ contained
+    \ contains=TOP
+syn region p6RxStorage
+    \ matchgroup=p6Operator
+    \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@="
+    \ end="$"
+    \ contains=TOP
+    \ contained
+
+" Perl 5 regex bits
+
+syn cluster p6RegexP5Base
+    \ add=p6RxP5Escape
+    \ add=p6RxP5Oct
+    \ add=p6RxP5Hex
+    \ add=p6RxP5EscMeta
+    \ add=p6RxP5CodePoint
+    \ add=p6RxP5Prop
+
+" normal regex stuff
+syn cluster p6RegexP5
+    \ add=@p6RegexP5Base
+    \ add=p6RxP5Quantifier
+    \ add=p6RxP5Meta
+    \ add=p6RxP5QuoteMeta
+    \ add=p6RxP5ParenMod
+    \ add=p6RxP5Verb
+    \ add=p6RxP5Count
+    \ add=p6RxP5Named
+    \ add=p6RxP5ReadRef
+    \ add=p6RxP5WriteRef
+    \ add=p6RxP5CharClass
+    \ add=p6RxP5Anchor
+
+" inside character classes
+syn cluster p6RegexP5Class
+    \ add=@p6RegexP5Base
+    \ add=p6RxP5Posix
+    \ add=p6RxP5Range
+
+syn match p6RxP5Escape     display contained "\\\S"
+syn match p6RxP5CodePoint  display contained "\\c\S\@=" nextgroup=p6RxP5CPId
+syn match p6RxP5CPId       display contained "\S"
+syn match p6RxP5Oct        display contained "\\\%(\o\{1,3}\)\@=" nextgroup=p6RxP5OctSeq
+syn match p6RxP5OctSeq     display contained "\o\{1,3}"
+syn match p6RxP5Anchor     display contained "[\^$]"
+syn match p6RxP5Hex        display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=p6RxP5HexSeq
+syn match p6RxP5HexSeq     display contained "\x\{1,2}"
+syn region p6RxP5HexSeq
+    \ matchgroup=p6RxP5Escape
+    \ start="{"
+    \ end="}"
+    \ contained
+syn region p6RxP5Named
+    \ matchgroup=p6RxP5Escape
+    \ start="\%(\\N\)\@<={"
+    \ end="}"
+    \ contained
+syn match p6RxP5Quantifier display contained "\%([+*]\|(\@<!?\)"
+syn match p6RxP5ReadRef    display contained "\\[1-9]\d\@!"
+syn match p6RxP5ReadRef    display contained "\\k<\@=" nextgroup=p6RxP5ReadRefId
+syn region p6RxP5ReadRefId
+    \ matchgroup=p6RxP5Escape
+    \ start="<"
+    \ end=">"
+    \ contained
+syn match p6RxP5WriteRef   display contained "\\g\%(\d\|{\)\@=" nextgroup=p6RxP5WriteRefId
+syn match p6RxP5WriteRefId display contained "\d\+"
+syn region p6RxP5WriteRefId
+    \ matchgroup=p6RxP5Escape
+    \ start="{"
+    \ end="}"
+    \ contained
+syn match p6RxP5Prop       display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=p6RxP5PropId
+syn match p6RxP5PropId     display contained "\a"
+syn region p6RxP5PropId
+    \ matchgroup=p6RxP5Escape
+    \ start="{"
+    \ end="}"
+    \ contained
+syn match p6RxP5Meta       display contained "[(|).]"
+syn match p6RxP5ParenMod   display contained "(\@<=?\@=" nextgroup=p6RxP5Mod,p6RxP5ModName,p6RxP5Code
+syn match p6RxP5Mod        display contained "?\%(<\?=\|<\?!\|[#:|]\)"
+syn match p6RxP5Mod        display contained "?-\?[impsx]\+"
+syn match p6RxP5Mod        display contained "?\%([-+]\?\d\+\|R\)"
+syn match p6RxP5Mod        display contained "?(DEFINE)"
+syn match p6RxP5Mod        display contained "?\%(&\|P[>=]\)" nextgroup=p6RxP5ModDef
+syn match p6RxP5ModDef     display contained "\h\w*"
+syn region p6RxP5ModName
+    \ matchgroup=p6StringSpecial
+    \ start="?'"
+    \ end="'"
+    \ contained
+syn region p6RxP5ModName
+    \ matchgroup=p6StringSpecial
+    \ start="?P\?<"
+    \ end=">"
+    \ contained
+syn region p6RxP5Code
+    \ matchgroup=p6StringSpecial
+    \ start="??\?{"
+    \ end="})\@="
+    \ contained
+    \ contains=TOP
+syn match p6RxP5EscMeta    display contained "\\[?*.{}()[\]|\^$]"
+syn match p6RxP5Count      display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=p6RxP5CountId
+syn region p6RxP5CountId
+    \ matchgroup=p6RxP5Escape
+    \ start="{"
+    \ end="}"
+    \ contained
+syn match p6RxP5Verb       display contained "(\@<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)"
+syn region p6RxP5QuoteMeta
+    \ matchgroup=p6RxP5Escape
+    \ start="\\Q"
+    \ end="\\E"
+    \ contained
+    \ contains=@p6Variables,p6EscBackSlash
+syn region p6RxP5CharClass
+    \ matchgroup=p6StringSpecial
+    \ start="\[\^\?"
+    \ skip="\\]"
+    \ end="]"
+    \ contained
+    \ contains=@p6RegexP5Class
+syn region p6RxP5Posix
+    \ matchgroup=p6RxP5Escape
+    \ start="\[:"
+    \ end=":]"
+    \ contained
+syn match p6RxP5Range      display contained "-"
+
+" 'string' inside a regex
+syn region p6RxStringSQ
+    \ matchgroup=p6Quote
+    \ start="'"
+    \ skip="\\\@<!\\'"
+    \ end="'"
+    \ contained
+    \ contains=p6EscQuote,p6EscBackSlash
+
+" "string" inside a regex
+syn region p6RxStringDQ
+    \ matchgroup=p6Quote
+    \ start=+"+
+    \ skip=+\\\@<!\\"+
+    \ end=+"+
+    \ contained
+    \ contains=p6EscDoubleQuote,p6EscBackSlash
+
+" $!, $var, $!var, $::var, $package::var $*::package::var, etc
+" Thus must come after the matches for the "$" regex anchor, but before
+" the match for the $ regex delimiter
+syn cluster p6Variables
+    \ add=p6VarSlash
+    \ add=p6VarExclam
+    \ add=p6VarMatch
+    \ add=p6VarNum
+    \ add=p6Variable
+
+syn match p6VarSlash     display "\$/"
+syn match p6VarExclam    display "\$!"
+syn match p6VarMatch     display "\$¢"
+syn match p6VarNum       display "\$\d\+"
+syn match p6Variable     display "\%(@@\|[@&$%]\$*\)\%(::\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\K\)\@=" nextgroup=p6Twigil,p6VarName,p6PackageScope
+syn match p6VarName      display "\K\%(\k\|[-']\K\@=\)*" contained
+syn match p6Twigil       display "\%([.^*?=!~]\|:\@<!::\@!\)\K\@=" nextgroup=p6PackageScope,p6VarName contained
+syn match p6PackageScope display "\%(\K\%(\k\|[-']\K\@=\)*\)\?::" nextgroup=p6PackageScope,p6VarName contained
+
+" Perl 6 regex regions
+
+" /foo/
+" Below some hacks to recognise the // variant. This is virtually impossible
+" to catch in all cases as the / is used in so many other ways, but these
+" should be the most obvious ones.
+" TODO: mostly stolen from perl.vim, might need more work
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%([$@%&*]\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
+    \ start="^//\@!"
+    \ start=+\s\@<=/[^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!/\@!+
+    \ skip="\\/"
+    \ end="/"
+    \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
+
+" m/foo/, mm/foo/, rx/foo/
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
+    \ skip="\\/"
+    \ end="/"
+    \ keepend
+    \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
+
+" m!foo!, mm!foo!, rx!foo!
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
+    \ skip="\\!"
+    \ end="!"
+    \ keepend
+    \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
+
+" m$foo$, mm$foo$, rx$foo$, m|foo|, mm|foo|, rx|foo|, etc
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!"
+    \ skip="\\\z1"
+    \ end="\z1"
+    \ keepend
+    \ contains=@p6Regexen,@p6Variables
+
+" m (foo), mm (foo), rx (foo)
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
+    \ skip="\\)"
+    \ end=")"
+    \ contains=@p6Regexen,@p6Variables
+
+" m[foo], mm[foo], rx[foo]
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
+    \ skip="\\]"
+    \ end="]"
+    \ contains=@p6Regexen,@p6Variables
+
+" m{foo}, mm{foo}, rx{foo}
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
+    \ skip="\\}"
+    \ end="}"
+    \ contains=@p6Regexen,@p6Variables
+
+" m<foo>, mm<foo>, rx<foo>
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
+    \ skip="\\>"
+    \ end=">"
+    \ contains=@p6Regexen,@p6Variables
+
+" m«foo», mm«foo», rx«foo»
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!"
+    \ skip="\\»"
+    \ end="»"
+    \ contains=@p6Regexen,@p6Variables
+
+" Substitutions
+
+" s/foo/bar/
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
+    \ skip="\\/"
+    \ end="/"me=e-1
+    \ keepend
+    \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
+    \ nextgroup=p6Substitution
+
+syn region p6Substitution
+    \ matchgroup=p6Quote
+    \ start="/"
+    \ skip="\\/"
+    \ end="/"
+    \ contained
+    \ keepend
+    \ contains=@p6Interp_qq
+
+" s!foo!bar!
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
+    \ skip="\\!"
+    \ end="!"me=e-1
+    \ keepend
+    \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
+    \ nextgroup=p6Substitution
+
+syn region p6Substitution
+    \ matchgroup=p6Quote
+    \ start="!"
+    \ skip="\\!"
+    \ end="!"
+    \ contained
+    \ keepend
+    \ contains=@p6Interp_qq
+
+" s$foo$bar$, s|foo|bar, etc
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
+    \ skip="\\\z1"
+    \ end="\z1"me=e-1
+    \ keepend
+    \ contains=@p6Regexen,@p6Variables
+    \ nextgroup=p6Substitution
+
+syn region p6Substitution
+    \ matchgroup=p6Quote
+    \ start="\z([\"'`|,$]\)"
+    \ skip="\\\z1"
+    \ end="\z1"
+    \ contained
+    \ keepend
+    \ contains=@p6Interp_qq
+
+" s{foo}
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
+    \ skip="\\}"
+    \ end="}"
+    \ contains=@p6Regexen,@p6Variables
+
+" s[foo]
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
+    \ skip="\\]"
+    \ end="]"
+    \ contains=@p6Regexen,@p6Variables
+
+" s<foo>
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
+    \ skip="\\>"
+    \ end=">"
+    \ contains=@p6Regexen,@p6Variables
+
+" s«foo»
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!"
+    \ skip="\\»"
+    \ end="»"
+    \ contains=@p6Regexen,@p6Variables
+
+" s (foo)
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
+    \ skip="\\)"
+    \ end=")"
+    \ contains=@p6Regexen,@p6Variables
+
+" Perl 5 regex regions
+
+" m:P5//
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
+    \ skip="\\/"
+    \ end="/"
+    \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
+
+" m:P5!!
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
+    \ skip="\\!"
+    \ end="!"
+    \ contains=@p6RegexP5,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
+
+" m:P5$$, m:P5||, etc
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
+    \ skip="\\\z1"
+    \ end="\z1"
+    \ contains=@p6RegexP5,@p6Variables
+
+" m:P5 ()
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
+    \ skip="\\)"
+    \ end=")"
+    \ contains=@p6RegexP5,@p6Variables
+
+" m:P5[]
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
+    \ skip="\\]"
+    \ end="]"
+    \ contains=@p6RegexP5,@p6Variables
+
+" m:P5{}
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
+    \ skip="\\}"
+    \ end="}"
+    \ contains=@p6RegexP5,p6Variables
+
+" m:P5<>
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
+    \ skip="\\>"
+    \ end=">"
+    \ contains=@p6RegexP5,p6Variables
+
+" m:P5«»
+syn region p6Match
+    \ matchgroup=p6Quote
+    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"
+    \ skip="\\»"
+    \ end="»"
+    \ contains=@p6RegexP5,p6Variables
+
+" Transliteration
+
+" tr/foo/bar/, tr|foo|bar, etc
+syn region p6String
+    \ matchgroup=p6Quote
+    \ start="\%(\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
+    \ skip="\\\z1"
+    \ end="\z1"me=e-1
+    \ contains=p6RxRange
+    \ nextgroup=p6Transliteration
+
+syn region p6Transliteration
+    \ matchgroup=p6Quote
+    \ start="\z([/\"'`|!,$]\)"
+    \ skip="\\\z1"
+    \ end="\z1"
+    \ contained
+    \ contains=@p6Interp_qq
+
+" Comments
+
+" normal end-of-line comment
+syn match p6Comment display "#.*" contains=p6Attention
+
+" Multiline comments. Arbitrary numbers of opening brackets are allowed,
+" but we only define regions for 1 to 3
+syn region p6Comment
+    \ matchgroup=p6Comment
+    \ start="^\@<!#("
+    \ skip="([^)]*)"
+    \ end=")"
+    \ matchgroup=p6Error
+    \ start="^#("
+    \ contains=p6Attention,p6Comment
+syn region p6Comment
+    \ matchgroup=p6Comment
+    \ start="^\@<!#\["
+    \ skip="\[[^\]]*]"
+    \ end="]"
+    \ matchgroup=p6Error
+    \ start="^#\["
+    \ contains=p6Attention,p6Comment
+syn region p6Comment
+    \ matchgroup=p6Comment
+    \ start="^\@<!#{"
+    \ skip="{[^}]*}"
+    \ end="}"
+    \ matchgroup=p6Error
+    \ start="^#{"
+    \ contains=p6Attention,p6Comment
+syn region p6Comment
+    \ matchgroup=p6Comment
+    \ start="^\@<!#<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ matchgroup=p6Error
+    \ start="^#<"
+    \ contains=p6Attention,p6Comment
+syn region p6Comment
+    \ matchgroup=p6Comment
+    \ start="^\@<!#«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ matchgroup=p6Error
+    \ start="^#«"
+    \ contains=p6Attention,p6Comment
+
+" double and triple delimiters
+if exists("perl6_extended_comments") || exists("perl6_extended_all")
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#(("
+        \ skip="((\%([^)\|))\@!]\)*))"
+        \ end="))"
+        \ matchgroup=p6Error
+        \ start="^#(("
+        \ contains=p6Attention,p6Comment
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#((("
+        \ skip="(((\%([^)]\|)\%())\)\@!\)*)))"
+        \ end=")))"
+        \ matchgroup=p6Error
+        \ start="^#((("
+        \ contains=p6Attention,p6Comment
+
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#\[\["
+        \ skip="\[\[\%([^\]]\|]]\@!\)*]]"
+        \ end="]]"
+        \ matchgroup=p6Error
+        \ start="^#\[\["
+        \ contains=p6Attention,p6Comment
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#\[\[\["
+        \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]"
+        \ end="]]]"
+        \ matchgroup=p6Error
+        \ start="^#\[\[\["
+        \ contains=p6Attention,p6Comment
+
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#{{"
+        \ skip="{{\%([^}]\|}}\@!\)*}}"
+        \ end="}}"
+        \ matchgroup=p6Error
+        \ start="^#{{"
+        \ contains=p6Attention,p6Comment
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#{{{"
+        \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}"
+        \ end="}}}"
+        \ matchgroup=p6Error
+        \ start="^#{{{"
+        \ contains=p6Attention,p6Comment
+
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#<<"
+        \ skip="<<\%([^>]\|>>\@!\)*>>"
+        \ end=">>"
+        \ matchgroup=p6Error
+        \ start="^#<<"
+        \ contains=p6Attention,p6Comment
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#<<<"
+        \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>"
+        \ end=">>>"
+        \ matchgroup=p6Error
+        \ start="^#<<<"
+        \ contains=p6Attention,p6Comment
+
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#««"
+        \ skip="««\%([^»]\|»»\@!\)*»»"
+        \ end="»»"
+        \ matchgroup=p6Error
+        \ start="^#««"
+        \ contains=p6Attention,p6Comment
+    syn region p6Comment
+        \ matchgroup=p6Comment
+        \ start="^\@<!#«««"
+        \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»"
+        \ end="»»»"
+        \ matchgroup=p6Error
+        \ start="^#«««"
+        \ contains=p6Attention,p6Comment
+endif
+
+" Pod
+
+" Abbreviated blocks (implicit code forbidden)
+syn region p6PodAbbrRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=\ze\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contains=p6PodAbbrNoCodeType
+    \ keepend
+
+syn region p6PodAbbrNoCodeType
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=p6PodName,p6PodAbbrNoCode
+
+syn match p6PodName contained ".\+" contains=@p6PodFormat
+syn match p6PodComment contained ".\+"
+
+syn region p6PodAbbrNoCode
+    \ start="^"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=@p6PodFormat
+
+" Abbreviated blocks (everything is code)
+syn region p6PodAbbrRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=\zecode\>"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contains=p6PodAbbrCodeType
+    \ keepend
+
+syn region p6PodAbbrCodeType
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=p6PodName,p6PodAbbrCode
+
+syn region p6PodAbbrCode
+    \ start="^"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+
+" Abbreviated blocks (everything is a comment)
+syn region p6PodAbbrRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=\zecomment\>"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contains=p6PodAbbrCommentType
+    \ keepend
+
+syn region p6PodAbbrCommentType
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=p6PodComment,p6PodAbbrNoCode
+
+" Abbreviated blocks (implicit code allowed)
+syn region p6PodAbbrRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contains=p6PodAbbrType
+    \ keepend
+
+syn region p6PodAbbrType
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=p6PodName,p6PodAbbr
+
+syn region p6PodAbbr
+    \ start="^"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=@p6PodFormat,p6PodImplicitCode
+
+" Abbreviated block to end-of-file
+syn region p6PodAbbrRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=\zeEND\>"
+    \ end="\%$"
+    \ contains=p6PodAbbrEOFType
+    \ keepend
+
+syn region p6PodAbbrEOFType
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="\%$"
+    \ contained
+    \ contains=p6PodName,p6PodAbbrEOF
+
+syn region p6PodAbbrEOF
+    \ start="^"
+    \ end="\%$"
+    \ contained
+    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode
+
+" Directives
+syn region p6PodDirectRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=\%(config\|use\)\>"
+    \ end="^\ze\%([^=]\|=\K\|\s*$\)"
+    \ contains=p6PodDirectArgRegion
+    \ keepend
+
+syn region p6PodDirectArgRegion
+    \ matchgroup=p6PodType
+    \ start="\S\+"
+    \ end="^\ze\%([^=]\|=\K\|\s*$\)"
+    \ contained
+    \ contains=p6PodDirectConfigRegion
+
+syn region p6PodDirectConfigRegion
+    \ start=""
+    \ end="^\ze\%([^=]\|=\K\|\s*$\)"
+    \ contained
+    \ contains=@p6PodConfig
+
+" =encoding is a special directive
+syn region p6PodDirectRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=encoding\>"
+    \ end="^\ze\%([^=]\|=\K\|\s*$\)"
+    \ contains=p6PodEncodingArgRegion
+    \ keepend
+
+syn region p6PodEncodingArgRegion
+    \ matchgroup=p6PodName
+    \ start="\S\+"
+    \ end="^\ze\%([^=]\|=\K\|\s*$\)"
+    \ contained
+
+" Paragraph blocks (implicit code forbidden)
+syn region p6PodParaRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=for\>"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contains=p6PodParaNoCodeTypeRegion
+    \ keepend
+    \ extend
+
+syn region p6PodParaNoCodeTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=p6PodParaNoCode,p6PodParaConfigRegion
+
+syn region p6PodParaConfigRegion
+    \ start=""
+    \ end="^\ze\%([^=]\|=\k\@<!\)"
+    \ contained
+    \ contains=@p6PodConfig
+
+syn region p6PodParaNoCode
+    \ start="^[^=]"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=@p6PodFormat
+
+" Paragraph blocks (everything is code)
+syn region p6PodParaRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=for\>\ze\s*code\>"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contains=p6PodParaCodeTypeRegion
+    \ keepend
+    \ extend
+
+syn region p6PodParaCodeTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=p6PodParaCode,p6PodParaConfigRegion
+
+syn region p6PodParaCode
+    \ start="^[^=]"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+
+" Paragraph blocks (implicit code allowed)
+syn region p6PodParaRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contains=p6PodParaTypeRegion
+    \ keepend
+    \ extend
+
+syn region p6PodParaTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=p6PodPara,p6PodParaConfigRegion
+
+syn region p6PodPara
+    \ start="^[^=]"
+    \ end="^\ze\%(\s*$\|=\K\)"
+    \ contained
+    \ contains=@p6PodFormat,p6PodImplicitCode
+
+" Paragraph block to end-of-file
+syn region p6PodParaRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=for\>\ze\s\+END\>"
+    \ end="\%$"
+    \ contains=p6PodParaEOFTypeRegion
+    \ keepend
+    \ extend
+
+syn region p6PodParaEOFTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="\%$"
+    \ contained
+    \ contains=p6PodParaEOF,p6PodParaConfigRegion
+
+syn region p6PodParaEOF
+    \ start="^[^=]"
+    \ end="\%$"
+    \ contained
+    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode
+
+" Delimited blocks (implicit code forbidden)
+syn region p6PodDelimRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=begin\>"
+    \ end="^=end\>"
+    \ contains=p6PodDelimNoCodeTypeRegion
+    \ keepend
+    \ extend
+
+syn region p6PodDelimNoCodeTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze=end\>"
+    \ contained
+    \ contains=p6PodDelimNoCode,p6PodDelimConfigRegion
+
+syn region p6PodDelimConfigRegion
+    \ start=""
+    \ end="^\ze\%([^=]\|=\K\|\s*$\)"
+    \ contained
+    \ contains=@p6PodConfig
+
+syn region p6PodDelimNoCode
+    \ start="^"
+    \ end="^\ze=end\>"
+    \ contained
+    \ contains=@p6PodNestedBlocks,@p6PodFormat
+
+" Delimited blocks (everything is code)
+syn region p6PodDelimRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=begin\>\ze\s*code\>"
+    \ end="^=end\>"
+    \ contains=p6PodDelimCodeTypeRegion
+    \ keepend
+    \ extend
+
+syn region p6PodDelimCodeTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze=end\>"
+    \ contained
+    \ contains=p6PodDelimCode,p6PodDelimConfigRegion
+
+syn region p6PodDelimCode
+    \ start="^"
+    \ end="^\ze=end\>"
+    \ contained
+    \ contains=@p6PodNestedBlocks
+
+" Delimited blocks (implicit code allowed)
+syn region p6PodDelimRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>"
+    \ end="^=end\>"
+    \ contains=p6PodDelimTypeRegion
+    \ keepend
+    \ extend
+
+syn region p6PodDelimTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="^\ze=end\>"
+    \ contained
+    \ contains=p6PodDelim,p6PodDelimConfigRegion
+
+syn region p6PodDelim
+    \ start="^"
+    \ end="^\ze=end\>"
+    \ contained
+    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode
+
+" Delimited block to end-of-file
+syn region p6PodDelimRegion
+    \ matchgroup=p6PodPrefix
+    \ start="^=begin\>\ze\s\+END\>"
+    \ end="\%$"
+    \ contains=p6PodDelimEOFTypeRegion
+    \ extend
+
+syn region p6PodDelimEOFTypeRegion
+    \ matchgroup=p6PodType
+    \ start="\K\k*"
+    \ end="\%$"
+    \ contained
+    \ contains=p6PodDelimEOF,p6PodDelimConfigRegion
+
+syn region p6PodDelimEOF
+    \ start="^"
+    \ end="\%$"
+    \ contained
+    \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode
+
+syn cluster p6PodConfig
+    \ add=p6PodConfigOperator
+    \ add=p6PodExtraConfig
+    \ add=p6StringAuto
+    \ add=p6PodAutoQuote
+    \ add=p6StringSQ
+
+syn region p6PodParens
+    \ start="("
+    \ end=")"
+    \ contained
+    \ contains=p6Number,p6StringSQ
+
+syn match p6PodAutoQuote      display contained "=>"
+syn match p6PodConfigOperator display contained ":!\?" nextgroup=p6PodConfigOption
+syn match p6PodConfigOption   display contained "[^[:space:](<]\+" nextgroup=p6PodParens,p6StringAngle
+syn match p6PodExtraConfig    display contained "^="
+syn match p6PodVerticalBar    display contained "|"
+syn match p6PodColon          display contained ":"
+syn match p6PodSemicolon      display contained ";"
+syn match p6PodComma          display contained ","
+syn match p6PodImplicitCode   display contained "^\s.*"
+
+syn region p6PodDelimEndRegion
+    \ matchgroup=p6PodType
+    \ start="\%(^=end\>\)\@<="
+    \ end="\K\k*"
+
+" These may appear inside delimited blocks
+syn cluster p6PodNestedBlocks
+    \ add=p6PodAbbrRegion
+    \ add=p6PodDirectRegion
+    \ add=p6PodParaRegion
+    \ add=p6PodDelimRegion
+    \ add=p6PodDelimEndRegion
+
+" Pod formatting codes
+
+syn cluster p6PodFormat
+    \ add=p6PodFormatOne
+    \ add=p6PodFormatTwo
+    \ add=p6PodFormatThree
+    \ add=p6PodFormatFrench
+
+" Balanced angles found inside formatting codes. Ensures proper nesting.
+
+syn region p6PodFormatAnglesOne
+    \ matchgroup=p6PodFormat
+    \ start="<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ transparent
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne
+
+syn region p6PodFormatAnglesTwo
+    \ matchgroup=p6PodFormat
+    \ start="<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ transparent
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo
+
+syn region p6PodFormatAnglesThree
+    \ matchgroup=p6PodFormat
+    \ start="<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ transparent
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree
+
+syn region p6PodFormatAnglesFrench
+    \ matchgroup=p6PodFormat
+    \ start="«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ transparent
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree
+
+" All formatting codes
+
+syn region p6PodFormatOne
+    \ matchgroup=p6PodFormatCode
+    \ start="\u<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ contained
+    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne
+
+syn region p6PodFormatTwo
+    \ matchgroup=p6PodFormatCode
+    \ start="\u<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ contained
+    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo
+
+syn region p6PodFormatThree
+    \ matchgroup=p6PodFormatCode
+    \ start="\u<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ contained
+    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree
+
+syn region p6PodFormatFrench
+    \ matchgroup=p6PodFormatCode
+    \ start="\u«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree
+
+" C<> and V<> don't allow nested formatting formatting codes
+
+syn region p6PodFormatOne
+    \ matchgroup=p6PodFormatCode
+    \ start="[CV]<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ contained
+    \ contains=p6PodFormatAnglesOne
+
+syn region p6PodFormatTwo
+    \ matchgroup=p6PodFormatCode
+    \ start="[CV]<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ contained
+    \ contains=p6PodFormatAnglesTwo
+
+syn region p6PodFormatThree
+    \ matchgroup=p6PodFormatCode
+    \ start="[CV]<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ contained
+    \ contains=p6PodFormatAnglesThree
+
+syn region p6PodFormatFrench
+    \ matchgroup=p6PodFormatCode
+    \ start="[CV]«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ contained
+    \ contains=p6PodFormatAnglesFrench
+
+" L<> can have a "|" separator
+
+syn region p6PodFormatOne
+    \ matchgroup=p6PodFormatCode
+    \ start="L<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ contained
+    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar
+
+syn region p6PodFormatTwo
+    \ matchgroup=p6PodFormatCode
+    \ start="L<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ contained
+    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar
+
+syn region p6PodFormatThree
+    \ matchgroup=p6PodFormatCode
+    \ start="L<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ contained
+    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar
+
+syn region p6PodFormatFrench
+    \ matchgroup=p6PodFormatCode
+    \ start="L«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar
+
+" E<> can have a ";" separator
+
+syn region p6PodFormatOne
+    \ matchgroup=p6PodFormatCode
+    \ start="E<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ contained
+    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodSemiColon
+
+syn region p6PodFormatTwo
+    \ matchgroup=p6PodFormatCode
+    \ start="E<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ contained
+    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodSemiColon
+
+syn region p6PodFormatThree
+    \ matchgroup=p6PodFormatCode
+    \ start="E<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ contained
+    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon
+
+syn region p6PodFormatFrench
+    \ matchgroup=p6PodFormatCode
+    \ start="E«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon
+
+" M<> can have a ":" separator
+
+syn region p6PodFormatOne
+    \ matchgroup=p6PodFormatCode
+    \ start="M<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ contained
+    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodColon
+
+syn region p6PodFormatTwo
+    \ matchgroup=p6PodFormatCode
+    \ start="M<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ contained
+    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodColon
+
+syn region p6PodFormatThree
+    \ matchgroup=p6PodFormatCode
+    \ start="M<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ contained
+    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon
+
+syn region p6PodFormatFrench
+    \ matchgroup=p6PodFormatCode
+    \ start="M«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon
+
+" D<> can have "|" and ";" separators
+
+syn region p6PodFormatOne
+    \ matchgroup=p6PodFormatCode
+    \ start="D<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ contained
+    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon
+
+syn region p6PodFormatTwo
+    \ matchgroup=p6PodFormatCode
+    \ start="D<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ contained
+    \ contains=p6PodFormatAngleTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon
+
+syn region p6PodFormatThree
+    \ matchgroup=p6PodFormatCode
+    \ start="D<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ contained
+    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon
+
+syn region p6PodFormatFrench
+    \ matchgroup=p6PodFormatCode
+    \ start="D«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon
+
+" X<> can have "|", "," and ";" separators
+
+syn region p6PodFormatOne
+    \ matchgroup=p6PodFormatCode
+    \ start="X<"
+    \ skip="<[^>]*>"
+    \ end=">"
+    \ contained
+    \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon,p6PodComma
+
+syn region p6PodFormatTwo
+    \ matchgroup=p6PodFormatCode
+    \ start="X<<"
+    \ skip="<<[^>]*>>"
+    \ end=">>"
+    \ contained
+    \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon,p6PodComma
+
+syn region p6PodFormatThree
+    \ matchgroup=p6PodFormatCode
+    \ start="X<<<"
+    \ skip="<<<[^>]*>>>"
+    \ end=">>>"
+    \ contained
+    \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma
+
+syn region p6PodFormatFrench
+    \ matchgroup=p6PodFormatCode
+    \ start="X«"
+    \ skip="«[^»]*»"
+    \ end="»"
+    \ contained
+    \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_perl6_syntax_inits")
+    if version < 508
+        let did_perl6_syntax_inits = 1
+        command -nargs=+ HiLink hi link <args>
+    else
+        command -nargs=+ HiLink hi def link <args>
+    endif
+
+    HiLink p6EscOctOld       p6Error
+    HiLink p6PackageTwigil   p6Twigil
+    HiLink p6StringAngle     p6String
+    HiLink p6StringFrench    p6String
+    HiLink p6StringAngles    p6String
+    HiLink p6StringSQ        p6String
+    HiLink p6StringDQ        p6String
+    HiLink p6StringQ         p6String
+    HiLink p6RxStringSQ      p6String
+    HiLink p6RxStringDQ      p6String
+    HiLink p6Substitution    p6String
+    HiLink p6Transliteration p6String
+    HiLink p6StringAuto      p6String
+    HiLink p6StringP5Auto    p6String
+    HiLink p6Key             p6String
+    HiLink p6Match           p6String
+    HiLink p6RegexBlock      p6String
+    HiLink p6RxP5CharClass   p6String
+    HiLink p6RxP5QuoteMeta   p6String
+    HiLink p6RxCharClass     p6String
+    HiLink p6RxQuoteWords    p6String
+    HiLink p6ReduceOp        p6Operator
+    HiLink p6ReverseCrossOp  p6Operator
+    HiLink p6HyperOp         p6Operator
+    HiLink p6QuoteQ          p6Operator
+    HiLink p6RxRange         p6StringSpecial
+    HiLink p6RxAnchor        p6StringSpecial
+    HiLink p6RxP5Anchor      p6StringSpecial
+    HiLink p6CodePoint       p6StringSpecial
+    HiLink p6RxMeta          p6StringSpecial
+    HiLink p6RxP5Range       p6StringSpecial
+    HiLink p6RxP5CPId        p6StringSpecial
+    HiLink p6RxP5Posix       p6StringSpecial
+    HiLink p6RxP5Mod         p6StringSpecial
+    HiLink p6RxP5HexSeq      p6StringSpecial
+    HiLink p6RxP5OctSeq      p6StringSpecial
+    HiLink p6RxP5WriteRefId  p6StringSpecial
+    HiLink p6HexSequence     p6StringSpecial
+    HiLink p6OctSequence     p6StringSpecial
+    HiLink p6RxP5Named       p6StringSpecial
+    HiLink p6RxP5PropId      p6StringSpecial
+    HiLink p6RxP5Quantifier  p6StringSpecial
+    HiLink p6RxP5CountId     p6StringSpecial
+    HiLink p6RxP5Verb        p6StringSpecial
+    HiLink p6Escape          p6StringSpecial2
+    HiLink p6EscNull         p6StringSpecial2
+    HiLink p6EscHash         p6StringSpecial2
+    HiLink p6EscQQ           p6StringSpecial2
+    HiLink p6EscQuote        p6StringSpecial2
+    HiLink p6EscDoubleQuote  p6StringSpecial2
+    HiLink p6EscBackTick     p6StringSpecial2
+    HiLink p6EscForwardSlash p6StringSpecial2
+    HiLink p6EscVerticalBar  p6StringSpecial2
+    HiLink p6EscExclamation  p6StringSpecial2
+    HiLink p6EscDollar       p6StringSpecial2
+    HiLink p6EscOpenCurly    p6StringSpecial2
+    HiLink p6EscCloseCurly   p6StringSpecial2
+    HiLink p6EscCloseBracket p6StringSpecial2
+    HiLink p6EscCloseAngle   p6StringSpecial2
+    HiLink p6EscCloseFrench  p6StringSpecial2
+    HiLink p6EscBackSlash    p6StringSpecial2
+    HiLink p6RxEscape        p6StringSpecial2
+    HiLink p6RxCapture       p6StringSpecial2
+    HiLink p6RxAlternation   p6StringSpecial2
+    HiLink p6RxP5            p6StringSpecial2
+    HiLink p6RxP5ReadRef     p6StringSpecial2
+    HiLink p6RxP5Oct         p6StringSpecial2
+    HiLink p6RxP5Hex         p6StringSpecial2
+    HiLink p6RxP5EscMeta     p6StringSpecial2
+    HiLink p6RxP5Meta        p6StringSpecial2
+    HiLink p6RxP5Escape      p6StringSpecial2
+    HiLink p6RxP5CodePoint   p6StringSpecial2
+    HiLink p6RxP5WriteRef    p6StringSpecial2
+    HiLink p6RxP5Prop        p6StringSpecial2
+
+    HiLink p6Property       Tag
+    HiLink p6Attention      Todo
+    HiLink p6Type           Type
+    HiLink p6Error          Error
+    HiLink p6BlockLabel     Label
+    HiLink p6Float          Float
+    HiLink p6Normal         Normal
+    HiLink p6Package        Normal
+    HiLink p6PackageScope   Normal
+    HiLink p6Number         Number
+    HiLink p6VersionNum     Number
+    HiLink p6String         String
+    HiLink p6Repeat         Repeat
+    HiLink p6Keyword        Keyword
+    HiLink p6Pragma         Keyword
+    HiLink p6Module         Keyword
+    HiLink p6DeclareRoutine Keyword
+    HiLink p6VarStorage     Special
+    HiLink p6FlowControl    Special
+    HiLink p6NumberBase     Special
+    HiLink p6Twigil         Special
+    HiLink p6StringSpecial2 Special
+    HiLink p6VersionDot     Special
+    HiLink p6Comment        Comment
+    HiLink p6Include        Include
+    HiLink p6Shebang        PreProc
+    HiLink p6ClosureTrait   PreProc
+    HiLink p6Routine        Function
+    HiLink p6Operator       Operator
+    HiLink p6Version        Operator
+    HiLink p6Context        Operator
+    HiLink p6Quote          Delimiter
+    HiLink p6TypeConstraint PreCondit
+    HiLink p6Exception      Exception
+    HiLink p6Placeholder    Identifier
+    HiLink p6Variable       Identifier
+    HiLink p6VarSlash       Identifier
+    HiLink p6VarNum         Identifier
+    HiLink p6VarExclam      Identifier
+    HiLink p6VarMatch       Identifier
+    HiLink p6VarName        Identifier
+    HiLink p6MatchVar       Identifier
+    HiLink p6RxP5ReadRefId  Identifier
+    HiLink p6RxP5ModDef     Identifier
+    HiLink p6RxP5ModName    Identifier
+    HiLink p6Conditional    Conditional
+    HiLink p6StringSpecial  SpecialChar
+
+    HiLink p6PodAbbr         p6Pod
+    HiLink p6PodAbbrEOF      p6Pod
+    HiLink p6PodAbbrNoCode   p6Pod
+    HiLink p6PodAbbrCode     p6PodCode
+    HiLink p6PodPara         p6Pod
+    HiLink p6PodParaEOF      p6Pod
+    HiLink p6PodParaNoCode   p6Pod
+    HiLink p6PodParaCode     p6PodCode
+    HiLink p6PodDelim        p6Pod
+    HiLink p6PodDelimEOF     p6Pod
+    HiLink p6PodDelimNoCode  p6Pod
+    HiLink p6PodDelimCode    p6PodCode
+    HiLink p6PodImplicitCode p6PodCode
+    HiLink p6PodExtraConfig  p6PodPrefix
+    HiLink p6PodVerticalBar  p6PodFormatCode
+    HiLink p6PodColon        p6PodFormatCode
+    HiLink p6PodSemicolon    p6PodFormatCode
+    HiLink p6PodComma        p6PodFormatCode
+    HiLink p6PodFormatOne    p6PodFormat
+    HiLink p6PodFormatTwo    p6PodFormat
+    HiLink p6PodFormatThree  p6PodFormat
+    HiLink p6PodFormatFrench p6PodFormat
+
+    HiLink p6PodType           Type
+    HiLink p6PodConfigOption   String
+    HiLink p6PodCode           PreProc
+    HiLink p6Pod               Comment
+    HiLink p6PodComment        Comment
+    HiLink p6PodAutoQuote      Operator
+    HiLink p6PodConfigOperator Operator
+    HiLink p6PodPrefix         Statement
+    HiLink p6PodName           Identifier
+    HiLink p6PodFormatCode     SpecialChar
+    HiLink p6PodFormat         SpecialComment
+
+    delcommand HiLink
+endif
+
+" Syncing to speed up processing
+"syn sync match p6SyncPod groupthere p6PodAbbrRegion     "^=\K\k*\>"
+"syn sync match p6SyncPod groupthere p6PodDirectRegion   "^=\%(config\|use\|encoding\)\>"
+"syn sync match p6SyncPod groupthere p6PodParaRegion     "^=for\>"
+"syn sync match p6SyncPod groupthere p6PodDelimRegion    "^=begin\>"
+"syn sync match p6SyncPod groupthere p6PodDelimEndRegion "^=end\>"
+
+" Let's just sync whole file, the other methods aren't reliable (or I don't
+" know how to use them reliably)
+syn sync fromstart
+
+setlocal foldmethod=syntax
+
+let b:current_syntax = "perl6"
+
+" vim:ts=8:sts=4:sw=4:expandtab:ft=vim
--- a/runtime/syntax/rhelp.vim
+++ b/runtime/syntax/rhelp.vim
@@ -1,14 +1,17 @@
 " Vim syntax file
 " Language:    R Help File
 " Maintainer:  Johannes Ranke <jranke@uni-bremen.de>
-" Last Change: 2009 Mai 12
-" Version:     0.7.2
-" SVN:		   $Id: rhelp.vim 86 2009-05-12 19:23:47Z ranke $
+" Last Change: 2010 Apr 22
+" Version:     0.7.3
+" SVN:		   $Id: rhelp.vim 88 2010-04-22 19:37:09Z ranke $
 " Remarks:     - Now includes R syntax highlighting in the appropriate
 "                sections if an r.vim file is in the same directory or in the
 "                default debian location.
 "              - There is no Latex markup in equations
 "              - Thanks to Will Gray for finding and fixing a bug
+"              - No support for \if, \ifelse and \out as I don't understand
+"                them and have no examples at hand (help welcome).
+"              - No support for \var tag within quoted string (dito)
 
 " Version Clears: {{{1
 " For version 5.x: Clear all syntax items
@@ -37,6 +40,7 @@ syn region rhelpRcode matchgroup=Delimit
 syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end=/}/ contains=@R contained
 syn region rhelpRcode matchgroup=Delimiter start="\\code{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpLink contained
 syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=/)/ contains=@R,rhelpDots contained
+syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end=/}/ contains=@R
 
 " Strings {{{1
 syn region rhelpString start=/"/ end=/"/ 
@@ -55,6 +59,56 @@ syn match rhelpKeyword  "--"
 syn match rhelpKeyword  "---"
 syn match rhelpKeyword  "<"
 syn match rhelpKeyword  ">"
+syn match rhelpKeyword	"\\ge"
+syn match rhelpKeyword	"\\le"
+syn match rhelpKeyword	"\\alpha"
+syn match rhelpKeyword	"\\beta"
+syn match rhelpKeyword	"\\gamma"
+syn match rhelpKeyword	"\\delta"
+syn match rhelpKeyword	"\\epsilon"
+syn match rhelpKeyword	"\\zeta"
+syn match rhelpKeyword	"\\eta"
+syn match rhelpKeyword	"\\theta"
+syn match rhelpKeyword	"\\iota"
+syn match rhelpKeyword	"\\kappa"
+syn match rhelpKeyword	"\\lambda"
+syn match rhelpKeyword	"\\mu"
+syn match rhelpKeyword	"\\nu"
+syn match rhelpKeyword	"\\xi"
+syn match rhelpKeyword	"\\omicron"
+syn match rhelpKeyword	"\\pi"
+syn match rhelpKeyword	"\\rho"
+syn match rhelpKeyword	"\\sigma"
+syn match rhelpKeyword	"\\tau"
+syn match rhelpKeyword	"\\upsilon"
+syn match rhelpKeyword	"\\phi"
+syn match rhelpKeyword	"\\chi"
+syn match rhelpKeyword	"\\psi"
+syn match rhelpKeyword	"\\omega"
+syn match rhelpKeyword	"\\Alpha"
+syn match rhelpKeyword	"\\Beta"
+syn match rhelpKeyword	"\\Gamma"
+syn match rhelpKeyword	"\\Delta"
+syn match rhelpKeyword	"\\Epsilon"
+syn match rhelpKeyword	"\\Zeta"
+syn match rhelpKeyword	"\\Eta"
+syn match rhelpKeyword	"\\Theta"
+syn match rhelpKeyword	"\\Iota"
+syn match rhelpKeyword	"\\Kappa"
+syn match rhelpKeyword	"\\Lambda"
+syn match rhelpKeyword	"\\Mu"
+syn match rhelpKeyword	"\\Nu"
+syn match rhelpKeyword	"\\Xi"
+syn match rhelpKeyword	"\\Omicron"
+syn match rhelpKeyword	"\\Pi"
+syn match rhelpKeyword	"\\Rho"
+syn match rhelpKeyword	"\\Sigma"
+syn match rhelpKeyword	"\\Tau"
+syn match rhelpKeyword	"\\Upsilon"
+syn match rhelpKeyword	"\\Phi"
+syn match rhelpKeyword	"\\Chi"
+syn match rhelpKeyword	"\\Psi"
+syn match rhelpKeyword	"\\Omega"
 
 " Links {{{1
 syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend
@@ -112,6 +166,7 @@ syn match rhelpSection		"\\donttest\>"
 
 " Freely named Sections {{{1
 syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end=/}/ 
+syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end=/}/ 
 
 " R help file comments {{{1
 syn match rhelpComment /%.*$/ contained 
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -2,8 +2,8 @@
 " Language:		shell (sh) Korn shell (ksh) bash (sh)
 " Maintainer:		Dr. Charles E. Campbell, Jr.  <NdrOchipS@PcampbellAfamily.Mbiz>
 " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:		Nov 17, 2009
-" Version:		110
+" Last Change:		Apr 12, 2010
+" Version:		111
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 " For options and settings, please use:      :help ft-sh-syntax
 " This file includes many ideas from Éric Brunet (eric.brunet@ens.fr)
@@ -59,7 +59,7 @@ if !exists("s:sh_fold_ifdofor")
  let s:sh_fold_ifdofor   = 4
 endif
 if g:sh_fold_enabled && &fdm == "manual"
- set fdm=syntax
+ setlocal fdm=syntax
 endif
 
 " sh syntax is case sensitive {{{1
@@ -157,7 +157,7 @@ syn region shSubSh transparent matchgrou
 
 " Tests: {{{1
 "=======
-syn region shExpr	matchgroup=shRange start="\[" skip=+\\\\\|\\$+ end="\]" contains=@shTestList,shSpecial
+syn region shExpr	matchgroup=shRange start="\[" skip=+\\\\\|\\$\|\[+ end="\]" contains=@shTestList,shSpecial
 syn region shTest	transparent matchgroup=shStatement start="\<test\s" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=@shExprList1
 syn match  shTestOpr	contained	"<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!<>]"
 syn match  shTestOpr	contained	'=' skipwhite nextgroup=shTestDoubleQuote,shTestSingleQuote,shTestPattern
--- a/runtime/syntax/sisu.vim
+++ b/runtime/syntax/sisu.vim
@@ -1,6 +1,6 @@
 "SiSU Vim syntax file
 "SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
-"SiSU Markup:     SiSU (sisu-0.69.0, 2008-09-16)
+"SiSU Markup:     SiSU (sisu-2.0.1, 2010-03-17)
 "(originally looked at Ruby Vim by Mirko Nasato)
 
 if version < 600
@@ -16,25 +16,26 @@ syn match sisu_error contains=sisu_link,
 " Markers Identifiers:
 if !exists("sisu_no_identifiers")
   syn match   sisu_mark_endnote                                           "\~^"
-  syn match   sisu_contain             contains=@NoSpell                  "</\?sub>"
   syn match   sisu_break               contains=@NoSpell                  "<br>\|<br />"
-  syn match   sisu_control             contains=@NoSpell                  "<p>\|</p>\|<p />\|<:p[bn]>"
-  syn match   sisu_html                                                   "<center>\|</center>"
+  syn match   sisu_control             contains=@NoSpell                  "<:p[bn]>"
   syn match   sisu_marktail                                               "[~-]#"
-  syn match   sisu_html                contains=@NoSpell                  "<td>\|<td \|<tr>\|</td>\|</tr>\|<table>\|<table \|</table>"
   syn match   sisu_control                                                "\""
   syn match   sisu_underline                                              "\(^\| \)_[a-zA-Z0-9]\+_\([ .,]\|$\)"
   syn match   sisu_number              contains=@NoSpell                  "[0-9a-f]\{32\}\|[0-9a-f]\{64\}"
   syn match   sisu_link                contains=@NoSpell                  "\(_\?https\?://\|\.\.\/\)\S\+"
-  "metaverse specific
-  syn match   sisu_ocn                 contains=@NoSpell                  "<\~\d\+;\w\d\+;\w\d\+>"
-  syn match   sisu_marktail                                               "<\~#>"
-  syn match   sisu_markpara            contains=@NoSpell                  "<:i[1-9]>"
   syn match   sisu_link                                                   " \*\~\S\+"
   syn match   sisu_action                                                 "^<:insert\d\+>"
   syn match   sisu_require             contains=@NoSpell                  "^<<\s*[a-zA-Z0-9^._-]\+\.ss[it]$"
   syn match   sisu_require             contains=@NoSpell                  "^<<{[a-zA-Z0-9^._-]\+\.ss[it]}$"
-  syn match   sisu_contain                                                "<:e>"
+  syn match   sisu_structure                                              "^:A\~$"
+  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|note\):\s" "group=sisu_header_content
+  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|translator\|illustrator\|photographer\|audio\|digitized_by\|prepared_by\):\s"
+  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|audio\|digitization\|license\|all\):\s"                                         "access_rights license
+  syn match   sisu_sub_header_classify                                    "^\s\+:\(type\|subject\|topic_register\|keywords\|coverage\|relation\|format\|identifier\|isbn\|dewey\|loc\|pg\):\s"
+  syn match   sisu_sub_header_dates                                       "^\s\+:\(published\|available\|created\|issued\|valid\|modified\|added_to_site\|translated\|original_publication\):\s"
+  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|institution\|nationality\|source\):\s"
+  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|italics\|bold\|skin\|stamp\|promo\|ad\|manpage\):\s"
+  syn match   sisu_sub_header_notes                                       "^\s\+:\(comment\|abstract\|description\|history\|prefix\|prefix_[ab]\):\s"
   syn match   sisu_sem_marker                                             ";{\|};[a-z._]*[a-z]"
   syn match   sisu_sem_marker_block                                       "\([a-z][a-z._]*\|\):{\|}:[a-z._]*[a-z]"
   syn match   sisu_sem_ex_marker                                          ";\[\|\];[a-z._]*[a-z]"
@@ -57,19 +58,28 @@ syn match sisu_error             contain
 "url/link
 syn region sisu_link contains=sisu_error,sisu_error_wspace matchgroup=sisu_action start="^<<\s*|[a-zA-Z0-9^._-]\+|@|[a-zA-Z0-9^._-]\+|"rs=s+2 end="$"
 "header
-syn region sisu_header_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break matchgroup=sisu_header start="^0\~\(\S\+\|[^-]\)" end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break matchgroup=sisu_header start="^[@%]\S\+:[+-]\?\s"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_title matchgroup=sisu_header start="^[@]title:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_creator matchgroup=sisu_header start="^[@]creator:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_rights matchgroup=sisu_header start="^[@]rights:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_classify matchgroup=sisu_header start="^[@]classify:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_dates matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_original matchgroup=sisu_header start="^[@]original:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_source matchgroup=sisu_header start="^[@]source:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_linked,sisu_sub_header_links matchgroup=sisu_header start="^[@]links:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
 "headings
 syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$"
 "grouped text
 syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table"
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n\n"
+syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$"
 syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(alt\|group\|poem\){" end="^}\(alt\|group\|poem\)"
 syn region sisu_content_alt contains=sisu_error matchgroup=sisu_contain start="^code{" end="^}code"
 "endnotes
 syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n"
 syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n"
-syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n\n"
+syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$"
 "links and images
 syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|\.\./\)\S\+" oneline
 syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline
@@ -78,7 +88,6 @@ syn region sisu_linked contains=sisu_fon
 syn region sisu_control contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_control start="\(\(^\| \)!_ \|<:b>\)" end="$"
 syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$"
 syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^\(#[ 1]\|_# \)" end="$"
-syn region sisu_comment matchgroup=sisu_comment start="^%\{1,2\} " end="$"
 "font face curly brackets
 "syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline
 syn region sisu_index matchgroup=sisu_index_block start="^={" end="}"
@@ -96,18 +105,6 @@ syn region sisu_control contains=sisu_er
 syn region sisu_identifier contains=sisu_error matchgroup=sisu_content_alt start="\([ ]\|^\)/[^{ \|\n\\]"hs=e-1 end="/\[ \.\]" skip="[a-zA-Z0-9']" oneline
 "misc
 syn region sisu_identifier contains=sisu_error matchgroup=sisu_fontface start="\^[^ {\|\n\\]"rs=s+1 end="\^[ ,.;:'})\\\n]" skip="[a-zA-Z0-9']" oneline
-"metaverse html (flagged as errors for filetype sisu)
-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_mark matchgroup=sisu_html start="<b>" end="</b>" skip="\n" oneline
-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_mark matchgroup=sisu_html start="<em>" end="</em>" skip="\n" oneline
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_mark matchgroup=sisu_html start="<i>" end="</i>" skip="\n" oneline
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_mark matchgroup=sisu_html start="<u>" end="</u>" skip="\n" oneline
-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_mark matchgroup=sisu_html start="<ins>" end="</ins>" skip="\\\\\|\\'" oneline
-syn region sisu_identifier contains=sisu_error matchgroup=sisu_html start="<del>" end="</del>" oneline
-"metaverse
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="<:Table.\{-}>" end="<:Table[-_]end>"
-syn region sisu_content_alt contains=sisu_error matchgroup=sisu_contain start="<:code>" end="<:code[-_]end>"
-syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="<:alt>" end="<:alt[-_]end>"
-syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="<:poem>" end="<:poem[-_]end>"
 
 "Expensive Mode:
 if !exists("sisu_no_expensive")
@@ -120,18 +117,19 @@ syn match sisu_control contains=sisu_err
 syn region  sisu_markpara contains=sisu_error,sisu_error_wspace start="^=begin" end="^=end.*$"
 
 "Errors:
-syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+"
+syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+[^:]"
 syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+"
-syn match sisu_error_wspace contains=sisu_error_wspace  " \s*$"
+syn match sisu_error_wspace contains=sisu_error_wspace " \s*$"
 syn match sisu_error contains=sisu_error_wspace "\t\+"
 syn match sisu_error contains=sisu_error,sisu_error_wspace "\([^ (][_\\]\||[^ (}]\)https\?:\S\+"
 syn match sisu_error contains=sisu_error "_\?https\?:\S\+[}><]"
-syn match sisu_error contains=sisu_error "\([!*/_\+,^]\){\([^(\}\1)]\)\{-}\n\n"
-syn match sisu_error contains=sisu_error "^[\~]{[^{]\{-}\n\n"
+syn match sisu_error contains=sisu_error "\([!*/_\+,^]\){\([^(\}\1)]\)\{-}\n$"
+syn match sisu_error contains=sisu_error "^[\~]{[^{]\{-}\n$"
 syn match sisu_error contains=sisu_error "\s\+.{{"
 syn match sisu_error contains=sisu_error "^\~\s*$"
-syn match sisu_error contains=sisu_error "^[0-9]\~\s*$"
-syn match sisu_error contains=sisu_error "^[0-9]\~\S\+\s*$"
+syn match sisu_error contains=sisu_error "^0\~.*"
+syn match sisu_error contains=sisu_error "^[1-9]\~\s*$"
+syn match sisu_error contains=sisu_error "^[1-9]\~\S\+\s*$"
 syn match sisu_error contains=sisu_error "[^{]\~\^[^ \)]"
 syn match sisu_error contains=sisu_error "\~\^\s\+\.\s*"
 syn match sisu_error contains=sisu_error "{\~^\S\+"
@@ -140,55 +138,67 @@ syn match sisu_error contains=sisu_error
 syn match sisu_error contains=sisu_error "<dir>"
 "errors for filetype sisu, though not error in 'metaverse':
 syn match sisu_error contains=sisu_error,sisu_match,sisu_strikeout,sisu_contain,sisu_content_alt,sisu_mark,sisu_break,sisu_number "<[a-zA-Z\/]\+>"
-syn match sisu_error  "/\?<\([biu]\)>[^(</\1>)]\{-}\n\n"
+syn match sisu_error  "/\?<\([biu]\)>[^(</\1>)]\{-}\n$"
 
 "Error Exceptions:
-syn match sisu_control "\n\n" "contains=ALL
+syn match sisu_control "\n$" "contains=ALL
 syn match sisu_control " //"
-syn match sisu_error  "%{"
-syn match sisu_error "<br>_\?https\?:\S\+\|_\?https\?:\S\+<br>"
-syn match sisu_error "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]"
+syn match sisu_error   "%{"
+syn match sisu_error   "<br>_\?https\?:\S\+\|_\?https\?:\S\+<br>"
+syn match sisu_error   "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]"
+syn match sisu_comment "^%\{1,2\}.\+"
 
 "Definitions Default Highlighting:
-hi def link sisu_normal           Normal
-hi def link sisu_header           PreProc
-hi def link sisu_header_content   Statement
-hi def link sisu_heading          Title
-hi def link sisu_structure        Operator
-hi def link sisu_contain          Include
-hi def link sisu_mark_endnote     Include
-hi def link sisu_require          NonText
-hi def link sisu_link             NonText
-hi def link sisu_linked           String
-hi def link sisu_fontface         Include
-hi def link sisu_strikeout        DiffDelete
-hi def link sisu_content_alt      Special
-hi def link sisu_sem_content      SpecialKey
-hi def link sisu_sem_block        Special
-hi def link sisu_sem_marker       Visual
-"hi def link sisu_sem_marker       Structure
-hi def link sisu_sem_marker_block MatchParen
-hi def link sisu_sem_ex_marker    FoldColumn
-hi def link sisu_sem_ex_marker_block Folded
-hi def link sisu_sem_ex_content   Comment
-"hi def link sisu_sem_ex_content   SpecialKey
-hi def link sisu_sem_ex_block     Comment
-hi def link sisu_index            SpecialKey
-hi def link sisu_index_block      Visual
-hi def link sisu_content_endnote  Special
-hi def link sisu_control          Define
-hi def link sisu_ocn              Include
-hi def link sisu_number           Number
-hi def link sisu_identifier       Function
-hi def link sisu_underline        Underlined
-hi def link sisu_markpara         Include
-hi def link sisu_marktail         Include
-hi def link sisu_mark             Identifier
-hi def link sisu_break            Structure
-hi def link sisu_html             Type
-hi def link sisu_action           Identifier
-hi def link sisu_comment          Comment
-hi def link sisu_error_sem_marker Error
-hi def link sisu_error_wspace     Error
-hi def link sisu_error            Error
+hi def link sisu_normal                Normal
+hi def link sisu_header                PreProc
+hi def link sisu_header_content        Normal
+hi def link sisu_sub_header_title      Statement
+hi def link sisu_sub_header_creator    Statement
+hi def link sisu_sub_header_rights     Statement
+hi def link sisu_sub_header_classify   Statement
+hi def link sisu_sub_header_dates      Statement
+hi def link sisu_sub_header_make       Statement
+hi def link sisu_sub_header_links      Statement
+hi def link sisu_sub_header_publisher  Statement
+hi def link sisu_sub_header_notes      Statement
+hi def link sisu_sub_header_original   Statement
+hi def link sisu_sub_header_source     Statement
+hi def link sisu_heading               Title
+hi def link sisu_structure             Operator
+hi def link sisu_contain               Include
+hi def link sisu_mark_endnote          Include
+hi def link sisu_require               NonText
+hi def link sisu_link                  NonText
+hi def link sisu_linked                String
+hi def link sisu_fontface              Include
+hi def link sisu_strikeout             DiffDelete
+hi def link sisu_content_alt           Special
+hi def link sisu_sem_content           SpecialKey
+hi def link sisu_sem_block             Special
+hi def link sisu_sem_marker            Visual
+"hi def link sisu_sem_marker            Structure
+hi def link sisu_sem_marker_block      MatchParen
+hi def link sisu_sem_ex_marker         FoldColumn
+hi def link sisu_sem_ex_marker_block   Folded
+hi def link sisu_sem_ex_content        Comment
+"hi def link sisu_sem_ex_content        SpecialKey
+hi def link sisu_sem_ex_block          Comment
+hi def link sisu_index                 SpecialKey
+hi def link sisu_index_block           Visual
+hi def link sisu_content_endnote       Special
+hi def link sisu_control               Define
+hi def link sisu_ocn                   Include
+hi def link sisu_number                Number
+hi def link sisu_identifier            Function
+hi def link sisu_underline             Underlined
+hi def link sisu_markpara              Include
+hi def link sisu_marktail              Include
+hi def link sisu_mark                  Identifier
+hi def link sisu_break                 Structure
+hi def link sisu_html                  Type
+hi def link sisu_action                Identifier
+hi def link sisu_comment               Comment
+hi def link sisu_error_sem_marker      Error
+hi def link sisu_error_wspace          Error
+hi def link sisu_error                 Error
 let b:current_syntax = "sisu"
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/svg.vim
@@ -0,0 +1,15 @@
+" Vim syntax file
+" Language:	SVG (Scalable Vector Graphics)
+" Maintainer:	Vincent Berthoux <twinside@gmail.com>
+" File Types:	.svg (used in Web and vector programs)
+"
+" Directly call the xml syntax, because SVG is an XML
+" dialect. But as some plugins base their effect on filetype,
+" providing a distinct filetype from xml is better.
+
+if exists("b:current_syntax")
+  finish
+endif
+
+runtime! syntax/xml.vim
+let b:current_syntax = "svg"
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	TeX
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change:	Dec 28, 2009
-" Version:	46
+" Last Change:	Apr 14, 2010
+" Version:	47
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Notes: {{{1
@@ -77,7 +77,7 @@ elseif g:tex_fold_enabled && !has("foldi
  echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
 endif
 if g:tex_fold_enabled && &fdm == "manual"
- set fdm=syntax
+ setl fdm=syntax
 endif
 
 " (La)TeX keywords: only use the letters a-zA-Z {{{1
--- a/runtime/syntax/xs.vim
+++ b/runtime/syntax/xs.vim
@@ -1,53 +1,38 @@
 " Vim syntax file
-" Language:	XS (Perl extension interface language)
-" Maintainer:	Michael W. Dodge <sarge@pobox.com>
-" Last Change:	2001 May 09
+" Language:     XS (Perl extension interface language)
+" Maintainer:   Andy Lester <andy@petdance.com>
+" URL:          http://github.com/petdance/vim-perl
+" Last Change:  2009-08-14
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
-  finish
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+    finish
 endif
 
 " Read the C syntax to start with
-if version < 600
-  source <sfile>:p:h/c.vim
-else
-  runtime! syntax/c.vim
-endif
+runtime! syntax/c.vim
 
 " XS extentions
 " TODO: Figure out how to look for trailing '='.
-syn keyword xsKeyword	MODULE PACKAGE PREFIX
-syn keyword xsKeyword	OUTPUT: CODE: INIT: PREINIT: INPUT:
-syn keyword xsKeyword	PPCODE: REQUIRE: CLEANUP: BOOT:
-syn keyword xsKeyword	VERSIONCHECK: PROTOTYPES: PROTOTYPE:
-syn keyword xsKeyword	ALIAS: INCLUDE: CASE:
+syn keyword xsKeyword   MODULE PACKAGE PREFIX
+syn keyword xsKeyword   OUTPUT: CODE: INIT: PREINIT: INPUT:
+syn keyword xsKeyword   PPCODE: REQUIRE: CLEANUP: BOOT:
+syn keyword xsKeyword   VERSIONCHECK: PROTOTYPES: PROTOTYPE:
+syn keyword xsKeyword   ALIAS: INCLUDE: CASE:
 " TODO: Figure out how to look for trailing '('.
-syn keyword xsMacro	SV EXTEND PUSHs
-syn keyword xsVariable	RETVAL NO_INIT
-"syn match xsCast	"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
-"syn match xsCast	"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
+syn keyword xsMacro     SV EXTEND PUSHs
+syn keyword xsVariable  RETVAL NO_INIT
+"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
+"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_xs_syntax_inits")
-  if version < 508
-    let did_xs_syntax_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
+" Define the default highlighting, but only when an item doesn't have highlighting yet
+command -nargs=+ HiLink hi def link <args>
 
-  HiLink xsKeyword	Keyword
-  HiLink xsMacro	Macro
-  HiLink xsVariable	Identifier
+HiLink xsKeyword    Keyword
+HiLink xsMacro      Macro
+HiLink xsVariable   Identifier
 
-  delcommand HiLink
-endif
+delcommand HiLink
 
 let b:current_syntax = "xs"