changeset 4339:22fa3049e934

Updated runtime files.
author Bram Moolenaar <bram@vim.org>
date Wed, 24 Apr 2013 18:51:19 +0200
parents c61da758a9a2
children 12636b824816
files runtime/autoload/getscript.vim runtime/autoload/netrw.vim runtime/autoload/netrwFileHandlers.vim runtime/autoload/netrwSettings.vim runtime/autoload/tar.vim runtime/autoload/zip.vim runtime/doc/pattern.txt runtime/doc/pi_getscript.txt runtime/doc/pi_netrw.txt runtime/doc/pi_tar.txt runtime/doc/pi_zip.txt runtime/doc/tags runtime/doc/todo.txt runtime/ftplugin/make.vim runtime/plugin/getscriptPlugin.vim runtime/plugin/netrwPlugin.vim runtime/plugin/tarPlugin.vim runtime/plugin/zipPlugin.vim runtime/syntax/aptconf.vim runtime/syntax/groovy.vim runtime/syntax/netrw.vim runtime/syntax/ninja.vim runtime/syntax/redif.vim runtime/tutor/tutor.eo src/po/fi.po src/po/ja.po src/po/ja.sjis.po
diffstat 27 files changed, 2171 insertions(+), 1510 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/getscript.vim
+++ b/runtime/autoload/getscript.vim
@@ -1,8 +1,8 @@
 " ---------------------------------------------------------------------
 " getscript.vim
-"  Author:	Charles E. Campbell, Jr.
-"  Date:	Jan 17, 2012
-"  Version:	34
+"  Author:	Charles E. Campbell
+"  Date:	Apr 17, 2013
+"  Version:	35
 "  Installing:	:help glvs-install
 "  Usage:	:help glvs
 "
@@ -15,7 +15,7 @@
 if exists("g:loaded_getscript")
  finish
 endif
-let g:loaded_getscript= "v34"
+let g:loaded_getscript= "v35"
 if &cp
  echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
  finish
@@ -74,6 +74,11 @@ if !exists("g:GetLatestVimScripts_allowa
  let g:GetLatestVimScripts_allowautoinstall= 1
 endif
 
+" set up default scriptaddr address
+if !exists("g:GetLatestVimScripts_scriptaddr")
+ let g:GetLatestVimScripts_scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='
+endif
+
 "" For debugging:
 "let g:GetLatestVimScripts_wget    = "echo"
 "let g:GetLatestVimScripts_options = "options"
@@ -314,7 +319,7 @@ fun! getscript#GetLatestVimScripts()
   if &mod
    silent! w!
   endif
-  q
+  q!
 
   " restore events and current directory
   exe "cd ".fnameescape(substitute(origdir,'\','/','ge'))
@@ -415,7 +420,7 @@ fun! s:GetOneScript(...)
   echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
 
   " grab a copy of the plugin's vim.sourceforge.net webpage
-  let scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='.scriptid
+  let scriptaddr = g:GetLatestVimScripts_scriptaddr.scriptid
   let tmpfile    = tempname()
   let v:errmsg   = ""
 
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,10 +1,10 @@
 " netrw.vim: Handles file transfer and remote directory listing across
 "            AUTOLOAD SECTION
-" Date:		Oct 25, 2012
-" Version:	146
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:		Apr 16, 2013
+" Version:	148
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -22,10 +22,10 @@
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v146"
-if v:version < 702
+let g:loaded_netrw = "v148"
+if v:version < 703 || (v:version == 703 && !has("patch465"))
  echohl WarningMsg
- echo "***warning*** this version of netrw needs vim 7.2"
+ echo "***warning*** this version of netrw needs vim 7.3.465 or later"
  echohl Normal
  finish
 endif
@@ -35,12 +35,6 @@ if !exists("s:NOTE")
  let s:ERROR   = 2
 endif
 
-" sanity checks
-if v:version < 700
- call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
- finish
-endif
-
 let s:keepcpo= &cpo
 set cpo&vim
 "DechoTabOn
@@ -55,7 +49,7 @@ set cpo&vim
 "   0=note     = s:NOTE
 "   1=warning  = s:WARNING
 "   2=error    = s:ERROR
-"  Oct 24, 2012 : max errnum currently is 91
+"  Apr 02, 2013 : max errnum currently is 92
 fun! netrw#ErrorMsg(level,msg,errnum)
 "  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
 
@@ -97,7 +91,7 @@ fun! netrw#ErrorMsg(level,msg,errnum)
     sil! keepj call s:NetrwSafeOptions()
     setl bt=nofile
     keepj file NetrwMessage
-"    call Decho("setlocal ma noro")
+"    call Decho("setl ma noro")
     setl ma noro
     call setline(line("$"),level.a:msg)
    endif
@@ -134,9 +128,12 @@ endfun
 " NetrwInit: initializes variables if they haven't been defined {{{2
 "            Loosely,  varname = value.
 fun s:NetrwInit(varname,value)
+"  call Decho("varname<".a:varname."> value=".a:value)
   if !exists(a:varname)
    if type(a:value) == 0
     exe "let ".a:varname."=".a:value
+   elseif type(a:value) == 1 && a:value =~ '^[{[]'
+    exe "let ".a:varname."=".a:value
    elseif type(a:value) == 1
     exe "let ".a:varname."="."'".a:value."'"
    else
@@ -251,6 +248,7 @@ call s:NetrwInit("g:netrw_cursor"      ,
 let s:netrw_usercul = &cursorline
 let s:netrw_usercuc = &cursorcolumn
 " Default values - d-g ---------- {{{3
+call s:NetrwInit("s:didstarstar",0)
 call s:NetrwInit("g:netrw_dirhist_cnt"      , 0)
 call s:NetrwInit("g:netrw_decompress"       , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }')
 call s:NetrwInit("g:netrw_dirhistmax"       , 10)
@@ -297,7 +295,7 @@ endif
 call s:NetrwInit("g:netrw_list_hide","")
 " Default values - lh-lz ---------- {{{3
 if exists("g:netrw_local_copycmd")
- let g:netrw_localcopycmd= g:netrw_local_copycmd"
+ let g:netrw_localcopycmd= g:netrw_local_copycmd
  call netrw#ErrorMsg(s:NOTE,"g:netrw_local_copycmd is deprecated in favor of g:netrw_localcopycmd",84)
 endif
 if !exists("g:netrw_localcmdshell")
@@ -323,7 +321,7 @@ endif
 call s:NetrwInit("g:netrw_localmkdir","mkdir")
 call s:NetrwInit("g:netrw_remote_mkdir","mkdir")
 if exists("g:netrw_local_movecmd")
- let g:netrw_localmovecmd= g:netrw_local_movecmd"
+ let g:netrw_localmovecmd= g:netrw_local_movecmd
  call netrw#ErrorMsg(s:NOTE,"g:netrw_local_movecmd is deprecated in favor of g:netrw_localmovecmd",88)
 endif
 if !exists("g:netrw_localmovecmd")
@@ -341,7 +339,7 @@ if !exists("g:netrw_localmovecmd")
 endif
 call s:NetrwInit("g:netrw_localrmdir", "rmdir")
 if exists("g:netrw_local_rmdir")
- let g:netrw_localrmdir= g:netrw_local_rmdir"
+ let g:netrw_localrmdir= g:netrw_local_rmdir
  call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86)
 endif
 call s:NetrwInit("g:netrw_liststyle"  , s:THINLIST)
@@ -357,7 +355,7 @@ call s:NetrwInit("g:netrw_markfileesc"  
 call s:NetrwInit("g:netrw_maxfilenamelen", 32)
 call s:NetrwInit("g:netrw_menu"          , 1)
 call s:NetrwInit("g:netrw_mkdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir")
-call s:NetrwInit("g:netrw_mousemaps"     , (exists("&mouse") && &mouse =~ '[anh]'))
+call s:NetrwInit("g:netrw_mousemaps"     , (exists("+mouse") && &mouse =~ '[anh]'))
 call s:NetrwInit("g:netrw_retmap"        , 0)
 if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
  call s:NetrwInit("g:netrw_chgperm"       , "chmod PERM FILENAME")
@@ -392,7 +390,17 @@ call s:NetrwInit("g:netrw_ssh_browse_rej
 call s:NetrwInit("g:netrw_use_noswf"        , 0)
 " Default values - t-w ---------- {{{3
 call s:NetrwInit("g:netrw_timefmt","%c")
-call s:NetrwInit("g:netrw_xstrlen",0)
+if !exists("g:netrw_xstrlen")
+ if exists("g:Align_xstrlen")
+  let g:netrw_xstrlen= g:Align_xstrlen
+ elseif exists("g:drawit_xstrlen")
+  let g:netrw_xstrlen= g:drawit_xstrlen
+ elseif &enc == "latin1" || !has("multi_byte")
+  let g:netrw_xstrlen= 0
+ else
+  let g:netrw_xstrlen= 1
+ endif
+endif
 call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
 call s:NetrwInit("g:netrw_win95ftp",1)
 call s:NetrwInit("g:netrw_winsize",50)
@@ -402,11 +410,11 @@ if g:netrw_winsize > 100|let g:netrw_win
 " Default values for netrw's script variables: {{{2
 call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
 if has("win32") || has("win95") || has("win64") || has("win16")
- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{$')
+ call s:NetrwInit("g:netrw_glob_escape",'*?`{[]$')
 else
- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$\')
+ call s:NetrwInit("g:netrw_glob_escape",'*[]?`{~$\')
 endif
-call s:NetrwInit("g:netrw_menu_escape",'./&? \')
+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>\"")
 
@@ -459,7 +467,7 @@ if v:version >= 700 && has("balloon_eval
 endif
 
 " ------------------------------------------------------------------------
-" s:NetrwOptionSave: save options and set to "standard" form {{{2
+" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2
 "  06/08/07 : removed call to NetrwSafeOptions(), either placed
 "             immediately after NetrwOptionSave() calls in NetRead
 "             and NetWrite, or after the s:NetrwEnew() call in
@@ -475,7 +483,7 @@ fun! s:NetrwOptionSave(vt)
 "   call Dret("s:NetrwOptionSave : options already saved")
    return
   endif
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
+"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
 
   " Save current settings and current directory
 "  call Decho("saving current settings and current directory")
@@ -487,6 +495,7 @@ fun! s:NetrwOptionSave(vt)
   let {a:vt}netrw_blkeep    = &l:bl
   let {a:vt}netrw_btkeep    = &l:bt
   let {a:vt}netrw_bombkeep  = &l:bomb
+  let {a:vt}netrw_cedit     = &cedit
   let {a:vt}netrw_cikeep    = &l:ci
   let {a:vt}netrw_cinkeep   = &l:cin
   let {a:vt}netrw_cinokeep  = &l:cino
@@ -552,7 +561,7 @@ fun! s:NetrwOptionRestore(vt)
   endif
   unlet {a:vt}netrw_optionsave
 
-  if exists("&acd")
+  if exists("+acd")
    if exists("{a:vt}netrw_acdkeep")
 "    call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
     let curdir = getcwd()
@@ -572,10 +581,13 @@ 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_bhkeep")   |let &l:bh     = {a:vt}netrw_bhkeep      |unlet {a:vt}netrw_bhkeep   |endif
+  if g:netrw_liststyle != s:TREELIST
+   if exists("{a:vt}netrw_bhkeep")  |let &l:bh     = {a:vt}netrw_bhkeep      |unlet {a:vt}netrw_bhkeep   |endif
+  endif
   if exists("{a:vt}netrw_blkeep")   |let &l:bl     = {a:vt}netrw_blkeep      |unlet {a:vt}netrw_blkeep   |endif
   if exists("{a:vt}netrw_btkeep")   |let &l:bt     = {a:vt}netrw_btkeep      |unlet {a:vt}netrw_btkeep   |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_cedit")    |let &cedit    = {a:vt}netrw_cedit       |unlet {a:vt}netrw_cedit    |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
@@ -612,7 +624,7 @@ fun! s:NetrwOptionRestore(vt)
     " to the current directory as returned by getcwd().
     let &l:directory   = getcwd()
     sil! let &l:swf = {a:vt}netrw_swfkeep
-    setlocal directory=
+    setl directory=
     unlet {a:vt}netrw_swfkeep
    elseif &l:swf != {a:vt}netrw_swfkeep
     " following line causes a Press ENTER in windows -- can't seem to work around it!!!
@@ -636,55 +648,549 @@ fun! s:NetrwOptionRestore(vt)
   endif
 
 "  call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-"  call Decho("(NetrwOptionRestore) fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Decho("(NetrwOptionRestore) fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist"))
 "  call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "  call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
 "  call Decho("(NetrwOptionRestore) ts=".&l:ts)
+  " Moved the filetype detect here from NetrwGetFile() because remote files
+  " were having their filetype detect-generated settings overwritten by
+  " NetrwOptionRestore.
+  if &ft != "netrw"
+"   call Decho("(NetrwOptionRestore) filetype detect  (ft=".&ft.")")
+   filetype detect
+  endif
 "  call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwSafeOptions: sets options to help netrw do its job {{{2
+"                     Use  s:NetrwSaveOptions() to save user settings
+"                     Use  s:NetrwOptionRestore() to restore user settings
 fun! s:NetrwSafeOptions()
 "  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$"))
 "  call Decho("win#".winnr()."'s ft=".&ft)
-  if exists("&acd") | setlocal noacd | endif
-  setlocal noai
-  setlocal noaw
-  setlocal nobomb
-  setlocal noci
-  setlocal nocin
-  setlocal cino=
-  setlocal com=
-  setlocal cpo-=a
-  setlocal cpo-=A
-  setlocal fo=nroql2
-  setlocal nohid
-  setlocal noim
-  setlocal isk+=@ isk+=* isk+=/
-  setlocal magic
-  setlocal report=10000
-  setlocal sel=inclusive
-  setlocal nospell
-  setlocal tw=0
-  setlocal wig=
+  if exists("+acd") | setl noacd | endif
+  setl noai
+  setl noaw
+  setl nobomb
+  setl noci
+  setl nocin
+  if g:netrw_liststyle == s:TREELIST
+   setl bh=hide
+  endif
+  setl cino=
+  setl com=
+  setl cpo-=a
+  setl cpo-=A
+  setl fo=nroql2
+   setl nohid
+  setl noim
+  setl isk+=@ isk+=* isk+=/
+  setl magic
+  setl report=10000
+  setl sel=inclusive
+  setl nospell
+  setl tw=0
+  setl wig=
+  set  cedit&
   if g:netrw_use_noswf && has("win32") && !has("win95")
-   setlocal noswf
+   setl noswf
   endif
   call s:NetrwCursor()
 
   " allow the user to override safe options
 "  call Decho("ft<".&ft."> ei=".&ei)
   if &ft == "netrw"
-"   call Decho("do any netrw FileType autocmds")
+"   call Decho("do any netrw FileType autocmds (doau FileType netrw)")
    sil! keepalt keepj doau FileType netrw
   endif
 
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh)
 "  call Dret("s:NetrwSafeOptions")
 endfun
 
 " ---------------------------------------------------------------------
+" netrw#Explore: launch the local browser in the directory of the current file {{{2
+"          indx:  == -1: Nexplore
+"                 == -2: Pexplore
+"                 ==  +: this is overloaded:
+"                      * If Nexplore/Pexplore is in use, then this refers to the
+"                        indx'th item in the w:netrw_explore_list[] of items which
+"                        matched the */pattern **/pattern *//pattern **//pattern
+"                      * If Hexplore or Vexplore, then this will override
+"                        g:netrw_winsize to specify the qty of rows or columns the
+"                        newly split window should have.
+"          dosplit==0: the window will be split iff the current file has been modified
+"          dosplit==1: the window will be split before running the local browser
+"          style == 0: Explore     style == 1: Explore!
+"                == 2: Hexplore    style == 3: Hexplore!
+"                == 4: Vexplore    style == 5: Vexplore!
+"                == 6: Texplore
+fun! netrw#Explore(indx,dosplit,style,...)
+"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%"))
+  if !exists("b:netrw_curdir")
+   let b:netrw_curdir= getcwd()
+"   call Decho("(Explore) set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
+  endif
+  let curdir     = simplify(b:netrw_curdir)
+  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+"  call Decho("(Explore) curdir<".curdir.">  curfiledir<".curfiledir.">")
+
+  " save registers
+  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("(Explore) case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
+   call s:SaveWinVars()
+   let winsz= g:netrw_winsize
+   if a:indx > 0
+    let winsz= a:indx
+   endif
+
+   if a:style == 0      " Explore, Sexplore
+"    call Decho("(Explore) style=0: Explore or Sexplore")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe winsz."wincmd s"
+
+   elseif a:style == 1  "Explore!, Sexplore!
+"    call Decho("(Explore) style=1: Explore! or Sexplore!")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt ".winsz."wincmd v"
+
+   elseif a:style == 2  " Hexplore
+"    call Decho("(Explore) style=2: Hexplore")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe "keepalt bel ".winsz."wincmd s"
+
+   elseif a:style == 3  " Hexplore!
+"    call Decho("(Explore) style=3: Hexplore!")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe "keepalt abo ".winsz."wincmd s"
+
+   elseif a:style == 4  " Vexplore
+"    call Decho("(Explore) style=4: Vexplore")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt lefta ".winsz."wincmd v"
+
+   elseif a:style == 5  " Vexplore!
+"    call Decho("(Explore) style=5: Vexplore!")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt rightb ".winsz."wincmd v"
+
+   elseif a:style == 6  " Texplore
+    call s:SaveBufVars()
+"    call Decho("(Explore) style  = 6: Texplore")
+    exe "keepalt tabnew ".fnameescape(curdir)
+    call s:RestoreBufVars()
+   endif
+   call s:RestoreWinVars()
+"  else " Decho
+"   call Decho("(Explore) case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
+  endif
+  keepj norm! 0
+
+  if a:0 > 0
+"   call Decho("(Explore) case [a:0=".a:0."] > 0")
+   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
+"    call Decho("(Explore) ..case a:1<".a:1.">: starts with ~ and unix or cygwin")
+    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
+"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ~ && unix||cygwin)")
+   elseif a:1 == '.'
+"    call Decho("(Explore) ..case a:1<".a:1.">: matches .")
+    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
+    if dirname !~ '/$'
+     let dirname= dirname."/"
+    endif
+"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
+   elseif a:1 =~ '\$'
+"    call Decho("(Explore) ..case a:1<".a:1.">: matches ending $")
+    let dirname= simplify(expand(a:1))
+"    call Decho("(Explore) ..using user-specified dirname<".dirname."> with $env-var")
+   elseif a:1 !~ '^\*\{1,2}/'
+"    call Decho("(Explore) ..case a:1<".a:1.">: other, not pattern or filepattern")
+    let dirname= simplify(a:1)
+"    call Decho("(Explore) ..using user-specified dirname<".dirname.">")
+   else
+"    call Decho("(Explore) ..case a:1: pattern or filepattern")
+    let dirname= a:1
+   endif
+  else
+   " clear explore
+"   call Decho("(Explore) case a:0=".a:0.": clearing Explore list")
+   call s:NetrwClearExplore()
+"   call Dret("netrw#Explore : cleared list")
+   return
+  endif
+
+"  call Decho("(Explore) dirname<".dirname.">")
+  if dirname =~ '\.\./\=$'
+   let dirname= simplify(fnamemodify(dirname,':p:h'))
+  elseif dirname =~ '\.\.' || dirname == '.'
+   let dirname= simplify(fnamemodify(dirname,':p'))
+  endif
+"  call Decho("(Explore) dirname<".dirname.">  (after simplify)")
+
+  if dirname =~ '^\*//'
+   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
+"   call Decho("(Explore) case Explore *//pattern")
+   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
+   let starpat= 1
+"   call Decho("(Explore) ..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+
+  elseif dirname =~ '^\*\*//'
+   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
+"   call Decho("(Explore) case Explore **//pattern")
+   let pattern= substitute(dirname,'^\*\*//','','')
+   let starpat= 2
+"   call Decho("(Explore) ..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+
+  elseif dirname =~ '/\*\*/'
+   " handle .../**/.../filepat
+"   call Decho("(Explore) case Explore .../**/.../filepat")
+   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
+   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
+    let b:netrw_curdir = prefixdir
+   else
+    let b:netrw_curdir= getcwd().'/'.prefixdir
+   endif
+   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
+   let starpat= 4
+"   call Decho("(Explore) ..pwd<".getcwd()."> dirname<".dirname.">")
+"   call Decho("(Explore) ..case Explore ../**/../filepat (starpat=".starpat.")")
+
+  elseif dirname =~ '^\*/'
+   " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+   let starpat= 3
+"   call Decho("(Explore) case Explore */filepat (starpat=".starpat.")")
+
+  elseif dirname=~ '^\*\*/'
+   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+   let starpat= 4
+"   call Decho("(Explore) case Explore **/filepat (starpat=".starpat.")")
+
+  else
+   let starpat= 0
+"   call Decho("(Explore) default case: starpat=".starpat)
+  endif
+
+  if starpat == 0 && a:indx >= 0
+   " [Explore Hexplore Vexplore Sexplore] [dirname]
+"   call Decho("(Explore) case starpat==0 && a:indx=".a:indx.": dirname<".dirname."> Explore Hexplore Vexplore Sexplore")
+   if dirname == ""
+    let dirname= curfiledir
+"    call Decho("(Explore) ..empty dirname, using current file's directory<".dirname.">")
+   endif
+   if dirname =~ '^scp:' || dirname =~ '^ftp:'
+"    call Decho("(Explore) ..calling NetrwBrowse(0,dirname<".dirname.">)")
+    call s:NetrwBrowse(0,dirname)
+   else
+    if dirname == ""|let dirname= getcwd()|endif
+"    call Decho("(Explore) ..calling LocalBrowseCheck(dirname<".dirname.">)")
+    call netrw#LocalBrowseCheck(dirname)
+"    call Decho("(Explore) win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+   endif
+   if exists("w:netrw_bannercnt")
+    " done to handle P08-Ingelrest. :Explore will _Always_ go to the line just after the banner.
+    " If one wants to return the same place in the netrw window, use :Rex instead.
+    exe w:netrw_bannercnt
+   endif
+
+"   call Decho("(Explore) curdir<".curdir.">")
+   " ---------------------------------------------------------------------
+   " Jan 24, 2013: not sure why the following was present.  See P08-Ingelrest
+"   if has("win32") || has("win95") || has("win64") || has("win16")
+"    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
+"   else
+"    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
+"   endif
+   " ---------------------------------------------------------------------
+
+  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+  elseif a:indx <= 0
+   " Nexplore, Pexplore, Explore: handle starpat
+"   call Decho("(Explore) case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
+   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
+"    call Decho("(Explore) ..set up <s-up> and <s-down> maps")
+    let s:didstarstar= 1
+    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+   endif
+
+   if has("path_extra")
+"    call Decho("(Explore) ..starpat=".starpat.": has +path_extra")
+    if !exists("w:netrw_explore_indx")
+     let w:netrw_explore_indx= 0
+    endif
+
+    let indx = a:indx
+"    call Decho("(Explore) ..starpat=".starpat.": set indx= [a:indx=".indx."]")
+
+    if indx == -1
+     " Nexplore
+"     call Decho("(Explore) ..case Nexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
+     endif
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
+     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
+      let indx= indx + 1
+"      call Decho("(Explore) ....indx=".indx." (Nexplore while loop)")
+     endwhile
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+"     call Decho("(Explore) ....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+
+    elseif indx == -2
+     " Pexplore
+"     call Decho("(Explore) case Pexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
+     endif
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
+     while indx >= 0 && curfile == w:netrw_explore_list[indx]
+      let indx= indx - 1
+"      call Decho("(Explore) ....indx=".indx." (Pexplore while loop)")
+     endwhile
+     if indx < 0                        | let indx= 0                           | endif
+"     call Decho("(Explore) ....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+
+    else
+     " Explore -- initialize
+     " build list of files to Explore with Nexplore/Pexplore
+"     call Decho("(Explore) ..starpat=".starpat.": case Explore: initialize (indx=".indx.")")
+     keepj keepalt call s:NetrwClearExplore()
+     let w:netrw_explore_indx= 0
+     if !exists("b:netrw_curdir")
+      let b:netrw_curdir= getcwd()
+     endif
+"     call Decho("(Explore) ....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
+
+     " switch on starpat to build the w:netrw_explore_list of files
+     if starpat == 1
+      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+"      call Decho("(Explore) ..case starpat=".starpat.": build *//pattern list  (curdir-only srch for files containing pattern)  &hls=".&hls)
+"      call Decho("(Explore) ....pattern<".pattern.">")
+      try
+       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+       keepalt call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
+       return
+      endtry
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
+      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+
+     elseif starpat == 2
+      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+"      call Decho("(Explore) ..case starpat=".starpat.": build **//pattern list  (recursive descent files containing pattern)")
+"      call Decho("(Explore) ....pattern<".pattern.">")
+      try
+       exe "sil keepj noautocmd keepalt vimgrep /".pattern."/gj "."**/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+       keepalt call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
+       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+       sil! let @* = keepregstar
+       sil! let @+ = keepregstar
+       sil! let @/ = keepregslash
+"       call Dret("netrw#Explore : no files matched pattern")
+       return
+      endtry
+      let s:netrw_curdir       = b:netrw_curdir
+      let w:netrw_explore_list = getqflist()
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
+      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+
+     elseif starpat == 3
+      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+"      call Decho("(Explore) ..case starpat=".starpat.": build */filepat list  (curdir-only srch filenames matching filepat)  &hls=".&hls)
+      let filepat= substitute(dirname,'^\*/','','')
+      let filepat= substitute(filepat,'^[%#<]','\\&','')
+"      call Decho("(Explore) ....b:netrw_curdir<".b:netrw_curdir.">")
+"      call Decho("(Explore) ....filepat<".filepat.">")
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
+      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
+
+     elseif starpat == 4
+      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+"      call Decho("(Explore) ..case starpat=".starpat.": build **/filepat list  (recursive descent srch filenames matching filepat)  &hls=".&hls)
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
+      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+     endif " switch on starpat to build w:netrw_explore_list
+
+     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+"     call Decho("(Explore) ....w:netrw_explore_list<".string(w:netrw_explore_list).">")
+"     call Decho("(Explore) ....w:netrw_explore_listlen=".w:netrw_explore_listlen)
+
+     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
+      keepalt keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore : no files matched")
+      return
+     endif
+    endif  " if indx ... endif
+
+    " NetrwStatusLine support - for exploring support
+    let w:netrw_explore_indx= indx
+"    call Decho("(Explore) ....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
+
+    " wrap the indx around, but issue a note
+    if indx >= w:netrw_explore_listlen || indx < 0
+"     call Decho("(Explore) ....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
+     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
+     let w:netrw_explore_indx= indx
+     keepalt keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
+    endif
+
+    exe "let dirfile= w:netrw_explore_list[".indx."]"
+"    call Decho("(Explore) ....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+    let newdir= substitute(dirfile,'/[^/]*$','','e')
+"    call Decho("(Explore) ....newdir<".newdir.">")
+
+"    call Decho("(Explore) ....calling LocalBrowseCheck(newdir<".newdir.">)")
+    call netrw#LocalBrowseCheck(newdir)
+    if !exists("w:netrw_liststyle")
+     let w:netrw_liststyle= g:netrw_liststyle
+    endif
+    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
+     keepalt keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
+    else
+     keepalt keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+    endif
+    let w:netrw_explore_mtchcnt = indx + 1
+    let w:netrw_explore_bufnr   = bufnr("%")
+    let w:netrw_explore_line    = line(".")
+    keepalt keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
+"    call Decho("(Explore) ....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
+
+   else
+"    call Decho("(Explore) ..your vim does not have +path_extra")
+    if !exists("g:netrw_quiet")
+     keepalt keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
+    endif
+    sil! let @* = keepregstar
+    sil! let @+ = keepregstar
+    sil! let @/ = keepregslash
+"    call Dret("netrw#Explore : missing +path_extra")
+    return
+   endif
+
+  else
+"   call Decho("(Explore) ..default case: Explore newdir<".dirname.">")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
+    sil! unlet w:netrw_treedict
+    sil! unlet w:netrw_treetop
+   endif
+   let newdir= dirname
+   if !exists("b:netrw_curdir")
+    keepj call netrw#LocalBrowseCheck(getcwd())
+   else
+    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
+   endif
+  endif
+
+  " visual display of **/ **// */ Exploration files
+"  call Decho("(Explore) w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
+"  call Decho("(Explore) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
+  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
+"   call Decho("(Explore) s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
+   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
+    " only update match list if current directory isn't the same as before
+"    call Decho("(Explore) only update match list if current directory not the same as before")
+    let s:explore_prvdir = b:netrw_curdir
+    let s:explore_match  = ""
+    let dirlen           = s:Strlen(b:netrw_curdir)
+    if b:netrw_curdir !~ '/$'
+     let dirlen= dirlen + 1
+    endif
+    let prvfname= ""
+    for fname in w:netrw_explore_list
+"     call Decho("(Explore) fname<".fname.">")
+     if fname =~ '^'.b:netrw_curdir
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+      endif
+     elseif fname !~ '^/' && fname != prvfname
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
+      endif
+     endif
+     let prvfname= fname
+    endfor
+"    call Decho("(Explore) explore_match<".s:explore_match.">")
+    exe "2match netrwMarkFile /".s:explore_match."/"
+   endif
+   echo "<s-up>==Pexplore  <s-down>==Nexplore"
+  else
+   2match none
+   if exists("s:explore_match")  | unlet s:explore_match  | endif
+   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
+   echo " "
+"   call Decho("(Explore) cleared explore match list")
+  endif
+
+  sil! let @* = keepregstar
+  sil! let @+ = keepregstar
+  sil! let @/ = keepregslash
+"  call Dret("netrw#Explore : @/<".@/.">")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetrwMakeTgt: make a target out of the directory name provided {{{2
+fun! netrw#NetrwMakeTgt(dname)
+"  call Dfunc("netrw#NetrwMakeTgt(dname<".a:dname.">)")
+   " simplify the target (eg. /abc/def/../ghi -> /abc/ghi)
+  let svpos               = netrw#NetrwSavePosn()
+  let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://')
+"  call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal)
+  if s:netrwmftgt_islocal
+   let netrwmftgt= simplify(a:dname)
+  else
+   let netrwmftgt= a:dname
+  endif
+  if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt
+   " re-selected target, so just clear it
+   unlet s:netrwmftgt s:netrwmftgt_islocal
+  else
+   let s:netrwmftgt= netrwmftgt
+  endif
+  if g:netrw_fastbrowse <= 1
+   call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir)
+  endif
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("netrw#NetrwMakeTgt")
+endfun
+
+" ---------------------------------------------------------------------
 " netrw#NetrwClean: remove netrw {{{2
 " supports :NetrwClean  -- remove netrw from first directory on runtimepath
 "          :NetrwClean! -- remove netrw from all directories on runtimepath
@@ -741,6 +1247,257 @@ fun! netrw#Nread(mode,fname)
 endfun
 
 " ------------------------------------------------------------------------
+" netrw#NetrwObtain: {{{2
+"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
+"     islocal=0  obtain from remote source
+"            =1  obtain from local source
+"     fname  :   a filename or a list of filenames
+"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
+fun! netrw#NetrwObtain(islocal,fname,...)
+"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
+  " NetrwStatusLine support - for obtaining support
+
+  if type(a:fname) == 1
+   let fnamelist= [ a:fname ]
+  elseif type(a:fname) == 3
+   let fnamelist= a:fname
+  else
+   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
+"   call Dret("netrw#NetrwObtain")
+   return
+  endif
+"  call Decho("fnamelist<".string(fnamelist).">")
+  if a:0 > 0
+   let tgtdir= a:1
+  else
+   let tgtdir= getcwd()
+  endif
+"  call Decho("tgtdir<".tgtdir.">")
+
+  if exists("b:netrw_islocal") && b:netrw_islocal
+   " obtain a file from local b:netrw_curdir to (local) tgtdir
+"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
+   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
+    let topath= s:ComposePath(tgtdir,"")
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+     " transfer files one at time
+"     call Decho("transfer files one at a time")
+     for fname in fnamelist
+"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
+      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+      if v:shell_error != 0
+       call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+"       call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+       return
+      endif
+     endfor
+    else
+     " transfer files with one command
+"     call Decho("transfer files with one command")
+     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
+"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
+     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+     if v:shell_error != 0
+      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+"      call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+      return
+     endif
+    endif
+   elseif !exists("b:netrw_curdir")
+    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
+   else
+    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
+   endif
+
+  else
+   " obtain files from remote b:netrw_curdir to local tgtdir
+"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
+   if type(a:fname) == 1
+    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
+   endif
+   call s:NetrwMethod(b:netrw_curdir)
+
+   if b:netrw_method == 4
+    " obtain file using scp
+"    call Decho("obtain via scp (method#4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
+    else
+     let useport= ""
+    endif
+    if b:netrw_fname =~ '/'
+     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
+    else
+     let path= ""
+    endif
+    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
+
+   elseif b:netrw_method == 2
+    " obtain file using ftp + .netrc
+"     call Decho("obtain via ftp+.netrc (method #2)")
+     call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
+     let tmpbufnr= bufnr("%")
+     setl ff=unix
+     if exists("g:netrw_ftpmode") && 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.'"')
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     if exists("g:netrw_ftpextracmd")
+      keepj put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline('$'))
+     endif
+     for fname in fnamelist
+      call setline(line("$")+1,'get "'.fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endfor
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     else
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".s: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)
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep= &debug
+      setl debug=msg
+      call netrw#ErrorMsg(s:ERROR,getline(1),4)
+      let &debug= debugkeep
+     endif
+
+   elseif b:netrw_method == 3
+    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
+"    call Decho("obtain via ftp+mipf (method #3)")
+    call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
+    let tmpbufnr= bufnr("%")
+    setl ff=unix
+
+    if exists("g:netrw_port") && g:netrw_port != ""
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('$'))
+    else
+     keepj put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+"      call Decho("filter input: ".getline('$'))
+      if exists("s:netrw_passwd") && s:netrw_passwd != ""
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+"      call Decho("filter input: ".getline('$'))
+     elseif exists("s:netrw_passwd")
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('$'))
+     endif
+    endif
+
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     keepj put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("b:netrw_fname") && b:netrw_fname != ""
+     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('$'))
+    endif
+    for fname in fnamelist
+     keepj call setline(line("$")+1,'get "'.fname.'"')
+    endfor
+"    call Decho("filter input: ".getline('$'))
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    keepj norm! 1Gdd
+"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+"     call Decho("error<".getline(1).">")
+     if !exists("g:netrw_quiet")
+      keepj call netrw#ErrorMsg(s:ERROR,getline(1),5)
+     endif
+    endif
+   elseif !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetrwObtain : unsupported method")
+    return
+   endif
+
+   " restore status line
+   if type(a:fname) == 1 && exists("s:netrw_users_stl")
+    keepj call s:SetupNetrwStatusLine(s:netrw_users_stl)
+   endif
+
+  endif
+
+  " cleanup
+  if exists("tmpbufnr")
+   if bufnr("%") != tmpbufnr
+    exe tmpbufnr."bw!"
+   else
+    q!
+   endif
+  endif
+
+"  call Dret("netrw#NetrwObtain")
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwStatusLine: {{{2
+fun! NetrwStatusLine()
+
+" vvv NetrwStatusLine() debugging vvv
+"  let g:stlmsg=""
+"  if !exists("w:netrw_explore_bufnr")
+"   let g:stlmsg="!X<explore_bufnr>"
+"  elseif w:netrw_explore_bufnr != bufnr("%")
+"   let g:stlmsg="explore_bufnr!=".bufnr("%")
+"  endif
+"  if !exists("w:netrw_explore_line")
+"   let g:stlmsg=" !X<explore_line>"
+"  elseif w:netrw_explore_line != line(".")
+"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
+"  endif
+"  if !exists("w:netrw_explore_list")
+"   let g:stlmsg=" !X<explore_list>"
+"  endif
+" ^^^ NetrwStatusLine() debugging ^^^
+
+  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
+   " restore user's status line
+   let &stl        = s:netrw_users_stl
+   let &laststatus = s:netrw_users_ls
+   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
+   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
+   return ""
+  else
+   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+  endif
+endfun
+
+" ---------------------------------------------------------------------
 "  Netrw Transfer Functions: {{{1
 " ===============================
 
@@ -899,7 +1656,7 @@ fun! netrw#NetRead(mode,...)
      let netrw_fname= b:netrw_fname
      keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
      let filtbuf= bufnr("%")
-     setlocal ff=unix
+     setl ff=unix
      keepj put =g:netrw_ftpmode
 "     call Decho("filter input: ".getline(line("$")))
      if exists("g:netrw_ftpextracmd")
@@ -918,7 +1675,7 @@ fun! netrw#NetRead(mode,...)
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       let debugkeep = &debug
-      setlocal debug=msg
+      setl debug=msg
       keepj call netrw#ErrorMsg(s:ERROR,getline(1),4)
       let &debug    = debugkeep
      endif
@@ -940,7 +1697,7 @@ fun! netrw#NetRead(mode,...)
     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
     keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
     let filtbuf= bufnr("%")
-    setlocal ff=unix
+    setl ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
 "     call Decho("filter input: ".getline('.'))
@@ -1064,7 +1821,7 @@ fun! netrw#NetRead(mode,...)
      " Construct execution string (four lines) which will be passed through filter
      let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
      new
-     setlocal ff=unix
+     setl ff=unix
      if exists("g:netrw_port") && g:netrw_port != ""
       keepj put ='open '.g:netrw_machine.' '.g:netrw_port
      else
@@ -1307,11 +2064,11 @@ fun! netrw#NetWrite(...) range
     " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
     let bhkeep      = &l:bh
     let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
+    setl bh=hide
+    keepalt enew
 
 "    call Decho("filter input window#".winnr())
-    setlocal ff=unix
+    setl ff=unix
     keepj put =g:netrw_ftpmode
 "    call Decho("filter input: ".getline('$'))
     if exists("g:netrw_ftpextracmd")
@@ -1354,9 +2111,9 @@ fun! netrw#NetWrite(...) range
 
     " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
     let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
-    setlocal ff=unix
+    setl bh=hide
+    keepalt enew
+    setl ff=unix
 
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
@@ -1442,10 +2199,10 @@ fun! netrw#NetWrite(...) range
 
     " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
     let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
-
-    setlocal ff=unix
+    setl bh=hide
+    keepalt enew
+
+    setl ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
     else
@@ -1491,10 +2248,10 @@ fun! netrw#NetWrite(...) range
     " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
     let bhkeep = &l:bh
     let curbuf = bufnr("%")
-    setlocal bh=hide
-    enew
-
-    setlocal ff=unix
+    setl bh=hide
+    keepalt enew
+
+    setl ff=unix
     call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
 "    call Decho("filter input: ".getline('.'))
 "    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
@@ -1647,7 +2404,7 @@ fun! s:NetrwGetFile(readcmd, tfile, meth
 "   call Decho("detect filetype of local version of remote file")
    let iskkeep= &l:isk
    setl isk-=/
-   filetype detect
+   " filetype detect " COMBAK - trying filetype detect in NetrwOptionRestore Jan 24, 2013
    let &l:isk= iskkeep
 "   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
    let line1 = 1
@@ -2104,25 +2861,25 @@ fun! s:NetrwMaps(islocal)
 "  call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
 
   " set up Rexplore and [ 2-leftmouse-click -or- c-leftmouse ]
-"  call Decho("set up Rexplore command")
+"  call Decho("(NetrwMaps) set up Rexplore command")
   com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif
   if g:netrw_mousemaps && g:netrw_retmap
-"   call Decho("set up Rexplore 2-leftmouse")
+"   call Decho("(NetrwMaps) set up Rexplore 2-leftmouse")
    if !hasmapto("<Plug>NetrwReturn")
     if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$'
-"     call Decho("making map for 2-leftmouse")
+"     call Decho("(NetrwMaps) making map for 2-leftmouse")
      nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
     elseif maparg("<c-leftmouse>","n") == ""
-"     call Decho("making map for c-leftmouse")
+"     call Decho("(NetrwMaps) making map for c-leftmouse")
      nmap <unique> <silent> <c-leftmouse>	<Plug>NetrwReturn
     endif
    endif
    nno <silent> <Plug>NetrwReturn	:Rexplore<cr>
-"   call Decho("made <Plug>NetrwReturn map")
+"   call Decho("(NetrwMaps) made <Plug>NetrwReturn map")
   endif
 
   if a:islocal
-"   call Decho("make local maps")
+"   call Decho("(NetrwMaps) make local maps")
    " local normal-mode maps
    nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
    nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
@@ -2144,6 +2901,7 @@ fun! s:NetrwMaps(islocal)
    nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
    nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
    nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mF	:<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
    nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
    nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
@@ -2162,11 +2920,13 @@ fun! s:NetrwMaps(islocal)
    nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
    nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr>
    nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
    nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
    nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
-   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
    nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
+   nnoremap <buffer> <silent> Tb	:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   nnoremap <buffer> <silent> Th	:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
    nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
    nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
    nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
@@ -2209,11 +2969,13 @@ fun! s:NetrwMaps(islocal)
    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> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<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)<bar>norm! gT<cr>
    inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(4)<cr>
+   inoremap <buffer> <silent> Tb	<c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   inoremap <buffer> <silent> Th	<c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<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>
@@ -2240,6 +3002,8 @@ fun! s:NetrwMaps(islocal)
    if g:netrw_mousemaps == 1
     nmap <buffer> <leftmouse>   <Plug>NetrwLeftmouse
     nno  <buffer> <silent>	<Plug>NetrwLeftmouse	<leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
+    nmap <buffer> <s-rightdrag>	<Plug>NetrwRightdrag
+    nno  <buffer> <silent>	<Plug>NetrwRightdrag	<leftmouse>:call <SID>NetrwRightdrag(1)<cr>
     nmap <buffer> <middlemouse>	<Plug>NetrwMiddlemouse
     nno  <buffer> <silent>	<Plug>NetrwMiddlemouse	<leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
     nmap <buffer> <s-leftmouse>	<Plug>NetrwSLeftmouse
@@ -2270,7 +3034,7 @@ fun! s:NetrwMaps(islocal)
    nnoremap <buffer> <F1>		:he netrw-quickhelp<cr>
 
   else " remote
-"   call Decho("make remote maps")
+"   call Decho("(NetrwMaps) make remote maps")
    call s:RemotePathAnalysis(b:netrw_curdir)
    " remote normal-mode maps
    nnoremap <buffer> <silent> <cr>	:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
@@ -2282,6 +3046,7 @@ fun! s:NetrwMaps(islocal)
    nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
    nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
    nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mF	:<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
    nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
    nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
@@ -2309,11 +3074,13 @@ fun! s:NetrwMaps(islocal)
    nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr>
    nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
    nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
    nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
    nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
-   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
+   nnoremap <buffer> <silent> Tb	:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   nnoremap <buffer> <silent> Th	:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
    nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
    nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
@@ -2354,11 +3121,13 @@ fun! s:NetrwMaps(islocal)
    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> qF	:<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<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> Tb	<c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   inoremap <buffer> <silent> Th	<c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<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>
@@ -2381,6 +3150,8 @@ fun! s:NetrwMaps(islocal)
    if g:netrw_mousemaps == 1
     nmap <leftmouse>		<Plug>NetrwLeftmouse
     nno <buffer> <silent>	<Plug>NetrwLeftmouse	<leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
+    nmap <buffer> <leftdrag>	<Plug>NetrwLeftdrag
+    nno  <buffer> <silent>	<Plug>NetrwLeftdrag	:call <SID>NetrwLeftdrag(0)<cr>
     nmap <middlemouse>		<Plug>NetrwMiddlemouse
     nno  <buffer> <silent>	<middlemouse>		<Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
     nmap <buffer> <s-leftmouse>	<Plug>NetrwSLeftmouse
@@ -2441,6 +3212,10 @@ endfun
 "    6: (user: <mB>)   delete bookmark
 fun! s:NetrwBookHistHandler(chg,curdir)
 "  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   "  call Dret("s:NetrwBookHistHandler - suppressed due to g:netrw_dirhistmax")
+   return
+  endif
 
   let ykeep= @@
   if a:chg == 0
@@ -2458,8 +3233,9 @@ fun! s:NetrwBookHistHandler(chg,curdir)
 
   elseif a:chg == 1
    " change to the bookmarked directory
-"   call Decho("(user: <".v:count."mb>) change to the bookmarked directory")
+"   call Decho("(user: <".v:count."gb>) change to the bookmarked directory")
    if exists("g:netrw_bookmarklist[v:count-1]")
+"    call Decho("(user: <".v:count."gb>) bookmarklist=".string(g:netrw_bookmarklist))
     exe "keepj e ".fnameescape(g:netrw_bookmarklist[v:count-1])
    else
     echomsg "Sorry, bookmark#".v:count." doesn't exist!"
@@ -2475,7 +3251,7 @@ fun! s:NetrwBookHistHandler(chg,curdir)
     let cnt= 1
     for bmd in g:netrw_bookmarklist
 "     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
-     echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]
+     echo printf("Netrw Bookmark#%-2d: %s",cnt,g:netrw_bookmarklist[cnt-1])
      let didwork = 1
      let cnt     = cnt + 1
     endfor
@@ -2488,14 +3264,14 @@ fun! s:NetrwBookHistHandler(chg,curdir)
    if g:netrw_dirhistmax > 0
     while ( first || cnt != g:netrw_dirhist_cnt )
 "    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
-     let histcnt= histcnt + 1
      if exists("g:netrw_dirhist_{cnt}")
 "     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
-      echo "Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt}
+      echo printf("Netrw  History#%-2d: %s",histcnt,g:netrw_dirhist_{cnt})
       let didwork= 1
      endif
-     let first = 0
-     let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+     let histcnt = histcnt + 1
+     let first   = 0
+     let cnt     = ( cnt - 1 ) % g:netrw_dirhistmax
      if cnt < 0
       let cnt= cnt + g:netrw_dirhistmax
      endif
@@ -2522,7 +3298,7 @@ fun! s:NetrwBookHistHandler(chg,curdir)
    " u: change to the previous directory stored on the history list
 "   call Decho("(user: <u>) chg to prev dir from history")
    if g:netrw_dirhistmax > 0
-    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
+    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - v:count1 ) % g:netrw_dirhistmax
     if g:netrw_dirhist_cnt < 0
      let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
     endif
@@ -2543,7 +3319,7 @@ fun! s:NetrwBookHistHandler(chg,curdir)
     exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
    else
     if g:netrw_dirhistmax > 0
-     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + v:count1 ) % g:netrw_dirhistmax
     else
      let g:netrw_dirhist_cnt= 0
     endif
@@ -2585,12 +3361,17 @@ fun! s:NetrwBookHistHandler(chg,curdir)
 "   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
    let savefile= s:NetrwHome()."/.netrwbook"
    if filereadable(savefile)
+"    call Decho("merge bookmarks (active and file)")
     keepj call s:NetrwBookHistSave() " done here to merge bookmarks first
+"    call Decho("bookmark delete savefile<".savefile.">")
     keepj call delete(savefile)
    endif
+"   call Decho("remove g:netrw_bookmarklist[".(v:count-1)."]")
    keepj call remove(g:netrw_bookmarklist,v:count-1)
+"   call Decho("resulting g:netrw_bookmarklist=".string(g:netrw_bookmarklist))
   endif
   call s:NetrwBookmarkMenu()
+  call s:NetrwTgtMenu()
   let @@= ykeep
 "  call Dret("s:NetrwBookHistHandler")
 endfun
@@ -2600,19 +3381,23 @@ endfun
 "                      Sister function: s:NetrwBookHistSave()
 fun! s:NetrwBookHistRead()
 "  call Dfunc("s:NetrwBookHistRead()")
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   "  call Dret("s:NetrwBookHistRead - suppressed due to g:netrw_dirhistmax")
+   return
+  endif
   let ykeep= @@
   if !exists("s:netrw_initbookhist")
    let home    = s:NetrwHome()
    let savefile= home."/.netrwbook"
    if filereadable(savefile)
 "    call Decho("sourcing .netrwbook")
-    exe "keepj so ".savefile
+    exe "keepalt keepj so ".savefile
    endif
    if g:netrw_dirhistmax > 0
     let savefile= home."/.netrwhist"
     if filereadable(savefile)
 "    call Decho("sourcing .netrwhist")
-     exe "keepj so ".savefile
+     exe "keepalt keepj so ".savefile
     endif
     let s:netrw_initbookhist= 1
     au VimLeave * call s:NetrwBookHistSave()
@@ -2629,7 +3414,7 @@ endfun
 "                      be unreliable for long-term storage
 fun! s:NetrwBookHistSave()
 "  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
-  if g:netrw_dirhistmax <= 0
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
 "   call Dret("s:NetrwBookHistSave : dirhistmax=".g:netrw_dirhistmax)
    return
   endif
@@ -2637,14 +3422,14 @@ fun! s:NetrwBookHistSave()
   let savefile= s:NetrwHome()."/.netrwhist"
   1split
   call s:NetrwEnew()
-  setlocal cino= com= cpo-=a cpo-=A fo=nroql2 tw=0 report=10000 noswf
-  setlocal nocin noai noci magic nospell nohid wig= noaw
-  setlocal ma noro write
-  if exists("&acd") | setlocal noacd | endif
+  setl cino= com= cpo-=a cpo-=A fo=nroql2 tw=0 report=10000 noswf
+  setl nocin noai noci magic nospell nohid wig= noaw
+  setl ma noro write
+  if exists("+acd") | setl noacd | endif
   sil! keepj keepalt %d
 
   " save .netrwhist -- no attempt to merge
-  sil! file .netrwhist
+  sil! keepalt file .netrwhist
   call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
   call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
   let lastline = line("$")
@@ -2662,7 +3447,7 @@ fun! s:NetrwBookHistSave()
 
    if filereadable(savefile)
     let booklist= deepcopy(g:netrw_bookmarklist)
-    exe "sil keepj so ".savefile
+    exe "sil keepj keepalt so ".savefile
     for bdm in booklist
      if index(g:netrw_bookmarklist,bdm) == -1
       call add(g:netrw_bookmarklist,bdm)
@@ -2678,7 +3463,7 @@ fun! s:NetrwBookHistSave()
   endif
   let bgone= bufnr("%")
   q!
-  exe bgone."bwipe!"
+  exe "keepalt ".bgone."bwipe!"
 
 "  call Dret("s:NetrwBookHistSave")
 endfun
@@ -2691,7 +3476,7 @@ endfun
 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("%")."> win#".winnr())
-"  call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+"  call Decho("(NetrwBrowse) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 "  call Dredir("ls!")
   " s:NetrwBrowse: initialize history {{{3
   if !exists("s:netrw_initbookhist")
@@ -2729,38 +3514,38 @@ fun! s:NetrwBrowse(islocal,dirname)
 
   " s:NetrwBrowse: re-instate any marked files {{{3
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
-"   call Decho("clearing marked files")
+"   call Decho("(NetrwBrowse) clearing marked files")
    exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
   endif
 
   if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
    " s:NetrwBrowse: set up "safe" options for local directory/file {{{3
-"   call Decho("handle w:netrw_acdkeep:")
-"   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
+"   call Decho("(NetrwBrowse) handle w:netrw_acdkeep:")
+"   call Decho("(NetrwBrowse) keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
    exe 'keepj lcd '.fnameescape(dirname)
    call s:NetrwSafeOptions()
-"   call Decho("getcwd<".getcwd().">")
+"   call Decho("(NetrwBrowse) getcwd<".getcwd().">")
 
   elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
    " s:NetrwBrowse: looks like a remote regular file, attempt transfer {{{3
-"   call Decho("attempt transfer as regular file<".dirname.">")
+"   call Decho("(NetrwBrowse) attempt transfer as regular file<".dirname.">")
 
    " remove any filetype indicator from end of dirname, except for the
    " "this is a directory" indicator (/).
    " There shouldn't be one of those here, anyway.
    let path= substitute(dirname,'[*=@|]\r\=$','','e')
-"   call Decho("new path<".path.">")
+"   call Decho("(NetrwBrowse) new path<".path.">")
    call s:RemotePathAnalysis(dirname)
 
    " s:NetrwBrowse: remote-read the requested file into current buffer {{{3
    keepj mark '
    call s:NetrwEnew(dirname)
    call s:NetrwSafeOptions()
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
+   setl ma noro
+"   call Decho("(NetrwBrowse) setl ma noro")
    let b:netrw_curdir = dirname
    let url            = s:method."://".s:user.s:machine.(s:port ? ":".s:port : "")."/".s:path
-"   call Decho("exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")")
+"   call Decho("(NetrwBrowse) exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")")
    exe "sil! keepj keepalt file ".fnameescape(url)
    exe "sil! keepj keepalt doau BufReadPre ".fnameescape(s:fname)
    sil call netrw#NetRead(2,url)
@@ -2772,7 +3557,7 @@ fun! s:NetrwBrowse(islocal,dirname)
    " s:NetrwBrowse: save certain window-oriented variables into buffer-oriented variables {{{3
    call s:SetBufWinVars()
    call s:NetrwOptionRestore("w:")
-"   call Decho("setl ma nomod")
+"   call Decho("(NetrwBrowse) setl ma nomod")
    setl ma nomod
 "   call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 
@@ -2795,24 +3580,24 @@ fun! s:NetrwBrowse(islocal,dirname)
   let reusing= s:NetrwGetBuffer(a:islocal,dirname)
   " maintain markfile highlighting
   if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
-"   call Decho("bufnr(%)=".bufnr('%'))
-"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
+"   call Decho("(NetrwBrowse) bufnr(%)=".bufnr('%'))
+"   call Decho("(NetrwBrowse) exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
    exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
   else
-"   call Decho("2match none")
+"   call Decho("(NetrwBrowse) 2match none")
    2match none
   endif
-  if reusing
+  if reusing && line("$") > 1
    call s:NetrwOptionRestore("w:")
 "   call Decho("(NetrwBrowse) setl noma nomod nowrap")
    setl noma nomod nowrap
-"   call Decho("(set noma nomod nowrap)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Decho("(NetrwBrowse) (set noma nomod nowrap)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "   call Dret("s:NetrwBrowse : re-using buffer")
    return
   endif
 
   " set b:netrw_curdir to the new directory name {{{3
-"  call Decho("set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
+"  call Decho("(NetrwBrowse) 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')
@@ -2830,21 +3615,21 @@ fun! s:NetrwBrowse(islocal,dirname)
   if !a:islocal && b:netrw_curdir !~ '/$'
    let b:netrw_curdir= b:netrw_curdir.'/'
   endif
-"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+"  call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir.">")
 
   " ------------
   " (local only) {{{3
   " ------------
   if a:islocal
-"   call Decho("local only:")
+"   call Decho("(NetrwBrowse) local only:")
 
    " Set up ShellCmdPost handling.  Append current buffer to browselist
    call s:LocalFastBrowser()
 
   " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
    if !g:netrw_keepdir
-"    call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-"    call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
+"    call Decho("(NetrwBrowse) handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"    call Decho("(NetrwBrowse) l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
     if !exists("&l:acd") || !&l:acd
 "     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
      try
@@ -2870,23 +3655,23 @@ fun! s:NetrwBrowse(islocal,dirname)
   " remote handling: {{{3
   " --------------------------------
   else
-"   call Decho("remote only:")
+"   call Decho("(NetrwBrowse) remote only:")
 
    " analyze dirname and g:netrw_list_cmd {{{3
-"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
+"   call Decho("(NetrwBrowse) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
    if dirname =~ "^NetrwTreeListing\>"
     let dirname= b:netrw_curdir
-"    call Decho("(dirname was <NetrwTreeListing>) dirname<".dirname.">")
+"    call Decho("(NetrwBrowse) (dirname was <NetrwTreeListing>) dirname<".dirname.">")
    elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
     let dirname= substitute(b:netrw_curdir,'\\','/','g')
     if dirname !~ '/$'
      let dirname= dirname.'/'
     endif
     let b:netrw_curdir = dirname
-"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
+"    call Decho("(NetrwBrowse) (liststyle is TREELIST) dirname<".dirname.">")
    else
     let dirname = substitute(dirname,'\\','/','g')
-"    call Decho("(normal) dirname<".dirname.">")
+"    call Decho("(NetrwBrowse) (normal) dirname<".dirname.">")
    endif
 
    let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
@@ -2902,7 +3687,7 @@ fun! s:NetrwBrowse(islocal,dirname)
     return
    endif
    let b:netrw_curdir= dirname
-"   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
+"   call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir."> (remote)")
   endif  " (additional remote handling)
 
   " -----------------------
@@ -2912,7 +3697,7 @@ fun! s:NetrwBrowse(islocal,dirname)
   keepj call s:PerformListing(a:islocal)
   if v:version >= 700 && has("balloon_eval") && &beval == 0 && &l:bexpr == "" && !exists("g:netrw_nobeval")
    let &l:bexpr= "netrw#NetrwBalloonHelp()"
-"   call Decho("set up balloon help: l:bexpr=".&l:bexpr)
+"   call Decho("(NetrwBrowse) set up balloon help: l:bexpr=".&l:bexpr)
    set beval
   endif
   call s:NetrwOptionRestore("w:")
@@ -2977,35 +3762,36 @@ fun! s:NetrwGetBuffer(islocal,dirname)
   let dirname= a:dirname
 
   " re-use buffer if possible {{{3
-"  call Decho("--re-use a buffer if possible--")
+"  call Decho("(NetrwGetBuffer) --re-use a buffer if possible--")
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
    " find NetrwTreeList buffer if there is one
-"   call Decho("case liststyle=treelist: find NetrwTreeList buffer if there is one")
+"   call Decho("(NetrwGetBuffer) case liststyle=treelist: find NetrwTreeList buffer if there is one")
    if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
-"    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
+"    call Decho("(NetrwGetBuffer)   re-use w:netrw_treebufnr=".w:netrw_treebufnr)
+    sil keepj %d
     let eikeep= &ei
     set ei=all
-    exe "sil! b ".w:netrw_treebufnr
+    exe "sil! keepalt b ".w:netrw_treebufnr
     let &ei= eikeep
-"    call Dret("s:NetrwGetBuffer 1<buffer not cleared> : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
-    return 1
+"    call Dret("s:NetrwGetBuffer 0<buffer cleared> : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
+    return 0
    endif
    let bufnum= -1
-"   call Decho("  liststyle=TREE but w:netrw_treebufnr doesn't exist")
+"   call Decho("(NetrwGetBuffer)   liststyle=TREE but w:netrw_treebufnr doesn't exist")
 
   else
    " find buffer number of buffer named precisely the same as dirname {{{3
-"   call Decho("case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--")
+"   call Decho("(NetrwGetBuffer) case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--")
 "   call Dredir("ls!")
 
    " get dirname and associated buffer number
    let bufnum  = bufnr(escape(dirname,'\'))
-"   call Decho("  find buffer<".dirname.">'s number ")
-"   call Decho("  bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
+"   call Decho("(NetrwGetBuffer)   find buffer<".dirname.">'s number ")
+"   call Decho("(NetrwGetBuffer)   bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
 
    if bufnum < 0 && dirname !~ '/$'
     " try appending a trailing /
-"    call Decho("  try appending a trailing / to dirname<".dirname.">")
+"    call Decho("(NetrwGetBuffer)   try appending a trailing / to dirname<".dirname.">")
     let bufnum= bufnr(escape(dirname.'/','\'))
     if bufnum > 0
      let dirname= dirname.'/'
@@ -3014,30 +3800,30 @@ fun! s:NetrwGetBuffer(islocal,dirname)
 
    if bufnum < 0 && dirname =~ '/$'
     " try removing a trailing /
-"    call Decho("  try removing a trailing / from dirname<".dirname.">")
+"    call Decho("(NetrwGetBuffer)   try removing a trailing / from dirname<".dirname.">")
     let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
     if bufnum > 0
      let dirname= substitute(dirname,'/$','','')
     endif
    endif
 
-"   call Decho("  findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
+"   call Decho("(NetrwGetBuffer)   findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
    " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
    if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
     " handle approximate matches
-"    call Decho("  handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'")
+"    call Decho("(NetrwGetBuffer)   handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'")
     let ibuf    = 1
     let buflast = bufnr("$")
-"    call Decho("  findbuf2: buflast=bufnr($)=".buflast)
+"    call Decho("(NetrwGetBuffer)   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."> bname=bufname(".ibuf.")<".bname.">")
+"     call Decho("(NetrwGetBuffer)   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 !~ ^/')
+"      call Decho("(NetrwGetBuffer)   findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
       break
      endif
      if bname =~ '^'.dirname.'/\=$'
@@ -3060,59 +3846,59 @@ fun! s:NetrwGetBuffer(islocal,dirname)
     else
      let bufnum= ibuf
     endif
-"    call Decho("  findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
+"    call Decho("(NetrwGetBuffer)   findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
    endif
   endif
 
   " get enew buffer and name it -or- re-use buffer {{{3
-"  call Decho("  get enew buffer and name it OR re-use buffer")
-  sil! keepj mark '
+"  call Decho("(NetrwGetBuffer)   get enew buffer and name it OR re-use buffer")
+  sil! keepj keepalt mark '
   if bufnum < 0 || !bufexists(bufnum)
-"   call Decho("--get enew buffer and name it  (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)")
+"   call Decho("(NetrwGetBuffer) --get enew buffer and name it  (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)")
    call s:NetrwEnew(dirname)
-"   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
+"   call Decho("(NetrwGetBuffer)   got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
    " name the buffer
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
     " Got enew buffer; transform into a NetrwTreeListing
-"    call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
+"    call Decho("(NetrwGetBuffer) --transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
     if !exists("s:netrw_treelistnum")
      let s:netrw_treelistnum= 1
     else
      let s:netrw_treelistnum= s:netrw_treelistnum + 1
     endif
     let w:netrw_treebufnr= bufnr("%")
-"    call Decho("  exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
+"    call Decho("(NetrwGetBuffer)   exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
     exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
     set bt=nofile noswf
     nnoremap <silent> <buffer> [	:sil call <SID>TreeListMove('[')<cr>
     nnoremap <silent> <buffer> ]	:sil call <SID>TreeListMove(']')<cr>
     nnoremap <silent> <buffer> [[       :sil call <SID>TreeListMove('[')<cr>
     nnoremap <silent> <buffer> ]]       :sil call <SID>TreeListMove(']')<cr>
-"    call Decho("  tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
+"    call Decho("(NetrwGetBuffer)   tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
    else
 "    let v:errmsg= "" " Decho
     let escdirname= fnameescape(dirname)
-"    call Decho("  errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
+"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
 "    call Decho('  exe sil! 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("%").">")
+"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+   endif
+"   call Decho("(NetrwGetBuffer)   named enew buffer#".bufnr("%")."<".bufname("%").">")
 
   else " Re-use the buffer
-"   call Decho("--re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)")
+"   call Decho("(NetrwGetBuffer) --re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)")
    let eikeep= &ei
    set ei=all
    if getline(2) =~ '^" Netrw Directory Listing'
-"    call Decho("  getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum)
+"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum)
     exe "sil! keepalt b ".bufnum
    else
-"    call Decho("  getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum)
-    exe "sil! b ".bufnum
+"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum)
+    exe "sil! keepalt b ".bufnum
    endif
    if bufname("%") == '.'
-"    call Decho("exe sil! keepalt file ".fnameescape(getcwd()))
+"    call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(getcwd()))
     exe "sil! keepalt file ".fnameescape(getcwd())
    endif
    let &ei= eikeep
@@ -3126,8 +3912,8 @@ fun! s:NetrwGetBuffer(islocal,dirname)
 "    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but refreshing due to g:netrw_fastbrowse=".g:netrw_fastbrowse)
     return 0
    elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-"    call Decho("--re-use tree listing--")
-"    call Decho("  clear buffer<".expand("%")."> with :%d")
+"    call Decho("(NetrwGetBuffer) --re-use tree listing--")
+"    call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
     sil keepj %d
     keepj call s:NetrwListSettings(a:islocal)
 "    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
@@ -3143,15 +3929,15 @@ 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#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
+"  call Decho("(NetrwGetBuffer) --do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
   let fname= expand("%")
   keepj call s:NetrwListSettings(a:islocal)
-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
+"  call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(fname))
   exe "sil! keepj keepalt file ".fnameescape(fname)
 
   " delete all lines from buffer {{{3
-"  call Decho("--delete all lines from buffer--")
-"  call Decho("  clear buffer<".expand("%")."> with :%d")
+"  call Decho("(NetrwGetBuffer) --delete all lines from buffer--")
+"  call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
   sil! keepalt keepj %d
 
 "  call Dret("s:NetrwGetBuffer 0<cleared buffer> : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
@@ -3286,21 +4072,21 @@ endfun
 fun! s:NetrwListSettings(islocal)
 "  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
   let fname= bufname("%")
-"  call Decho("setlocal bt=nofile nobl ma nonu nowrap noro")
-  setlocal bt=nofile nobl ma nonu nowrap noro
-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
+"  call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro")
+  setl bt=nofile nobl ma nonu nowrap noro
+"  call Decho("(NetrwListSettings) exe sil! keepalt file ".fnameescape(fname))
   exe "sil! keepalt file ".fnameescape(fname)
   if g:netrw_use_noswf
-   setlocal noswf
+   setl noswf
   endif
 "  call Dredir("ls!")
-"  call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
+"  call Decho("(NetrwListSettings) exe setl ts=".(g:netrw_maxfilenamelen+1))
   exe "setl ts=".(g:netrw_maxfilenamelen+1)
-  setlocal isk+=.,~,-
+  setl isk+=.,~,-
   if g:netrw_fastbrowse > a:islocal
-   setlocal bh=hide
+   setl bh=hide
   else
-   setlocal bh=delete
+   setl bh=delete
   endif
 "  call Dret("s:NetrwListSettings")
 endfun
@@ -3344,8 +4130,8 @@ fun! s:NetrwListStyle(islocal)
    let w:netrw_liststyle = g:netrw_liststyle
    let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
   endif
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
+  setl ma noro
+"  call Decho("setl ma noro")
 
   " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
 "  call Decho("clear buffer<".expand("%")."> with :%d")
@@ -3422,7 +4208,7 @@ fun! s:NetrwBookmarkMenu()
    endif
 
    " show bookmarked places
-   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
+   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
     let cnt= 1
     for bmd in g:netrw_bookmarklist
 "     call Decho('sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.'	:e '.bmd)
@@ -3509,19 +4295,19 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    " apparently vim is "recognizing" that it is in a directory and
    " is removing the trailing "/".  Bad idea, so let's put it back.
    let dirname= dirname.'/'
-"   call Decho("adjusting dirname<".dirname.">")
+"   call Decho("(NetrwBrowseChgDir) adjusting dirname<".dirname.">")
   endif
 
   if newdir !~ dirpat
    " ------------------------------
    " NetrwBrowseChgDir: edit a file {{{3
    " ------------------------------
-"   call Decho('(NetrwBrowseChgDir) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+"   call Decho('(NetrwBrowseChgDir:edit-a-file) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
 
    " save position for benefit of Rexplore
    let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn()
 
-"   call Decho("(NetrwBrowseChgDir) setting s:rexposn_".bufnr("%")." to SavePosn")
+"   call Decho("(NetrwBrowseChgDir:edit-a-file) setting s:rexposn_".bufnr("%")." to SavePosn")
    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
     let dirname= s:NetrwTreeDir()
     if dirname =~ '/$'
@@ -3529,35 +4315,35 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
     else
      let dirname= s:NetrwTreeDir()."/".newdir
     endif
-"    call Decho("(NetrwBrowseChgDir) dirname<".dirname.">")
-"    call Decho("(NetrwBrowseChgDir) tree listing")
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) dirname<".dirname.">")
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) tree listing")
    elseif newdir =~ '^\(/\|\a:\)'
     let dirname= newdir
    else
     let dirname= s:ComposePath(dirname,newdir)
    endif
-"   call Decho("(NetrwBrowseChgDir) handling a file: dirname<".dirname."> (a:0=".a:0.")")
+"   call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file: dirname<".dirname."> (a:0=".a:0.")")
    " this lets NetrwBrowseX avoid the edit
    if a:0 < 1
-"    call Decho("(NetrwBrowseChgDir) set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
     keepj call s:NetrwOptionRestore("s:")
     if !exists("s:didsplit")
-"     call Decho("s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr())
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr())
      if     g:netrw_browse_split == 1
       " horizontally splitting the window first
-      new
+      keepalt new
       if !&ea
-       wincmd _
+       keepalt wincmd _
       endif
      elseif g:netrw_browse_split == 2
       " vertically splitting the window first
-      rightb vert new
+      keepalt rightb vert new
       if !&ea
-       wincmd |
+       keepalt wincmd |
       endif
      elseif g:netrw_browse_split == 3
       " open file in new tab
-      tabnew
+      keepalt tabnew
      elseif g:netrw_browse_split == 4
       " act like "P" (ie. open previous window)
       if s:NetrwPrevWinOpen(2) == 3
@@ -3567,11 +4353,11 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
       endif
      else
       " handling a file, didn't split, so remove menu
-"      call Decho("(NetrwBrowseChgDir) handling a file+didn't split, so remove menu")
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file+didn't split, so remove menu")
       call s:NetrwMenu(0)
       " optional change to window
       if g:netrw_chgwin >= 1
-       exe "keepjumps ".g:netrw_chgwin."wincmd w"
+       exe "keepj keepalt ".g:netrw_chgwin."wincmd w"
       endif
      endif
     endif
@@ -3579,11 +4365,11 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
     " the point where netrw actually edits the (local) file
     " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
     if a:islocal
-"     call Decho("(NetrwBrowseChgDir) edit local file: exe e! ".fnameescape(dirname))
-     exe "e! ".fnameescape(dirname)
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) edit local file: exe e! ".fnameescape(dirname))
+     exe "keepj keepalt e! ".fnameescape(dirname)
      call s:NetrwCursor()
     else
-"     call Decho("(NetrwBrowseChgDir) remote file: NetrwBrowse will edit it")
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) remote file: NetrwBrowse will edit it")
     endif
     let dolockout= 1
 
@@ -3592,12 +4378,12 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
     "   or as a list of function references.  It will ignore anything that's not
     "   a function reference.  See  :help Funcref  for information about function references.
     if exists("g:Netrw_funcref")
-"     call Decho("(NetrwBrowseChgDir) handle optional Funcrefs")
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) handle optional Funcrefs")
      if type(g:Netrw_funcref) == 2
-"      call Decho("(NetrwBrowseChgDir) handling a g:Netrw_funcref")
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a g:Netrw_funcref")
       keepj call g:Netrw_funcref()
      elseif type(g:Netrw_funcref) == 3
-"      call Decho("(NetrwBrowseChgDir) handling a list of g:Netrw_funcrefs")
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a list of g:Netrw_funcrefs")
       for Fncref in g:Netrw_funcref
        if type(FncRef) == 2
         keepj call FncRef()
@@ -3611,7 +4397,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    " ----------------------------------------------------
    " NetrwBrowseChgDir: just go to the new directory spec {{{3
    " ----------------------------------------------------
-"   call Decho('(NetrwBrowseChgDir) case "just go to new directory spec": newdir<'.newdir.'>')
+"   call Decho('(NetrwBrowseChgDir:goto-newdir) case "just go to new directory spec": newdir<'.newdir.'>')
    let dirname    = newdir
    keepj call s:SetRexDir(a:islocal,dirname)
    keepj call s:NetrwOptionRestore("s:")
@@ -3620,37 +4406,37 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    " ---------------------------------------------
    " NetrwBrowseChgDir: refresh the directory list {{{3
    " ---------------------------------------------
-"   call Decho('(NetrwBrowseChgDir) case "refresh directory listing": newdir == "./"')
+"   call Decho('(NetrwBrowseChgDir:refresh-dirlist) case "refresh directory listing": newdir == "./"')
    keepj call s:SetRexDir(a:islocal,dirname)
 
   elseif newdir == '../'
    " --------------------------------------
    " NetrwBrowseChgDir: go up one directory {{{3
    " --------------------------------------
-"   call Decho('(NetrwBrowseChgDir) case "go up one directory": newdir == "../"')
+"   call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../"')
 
    if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
     " force a refresh
-"    call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d")
-"    call Decho("(NetrwBrowseChgDir) setl noro ma")
+"    call Decho("(NetrwBrowseChgDir:go-up) clear buffer<".expand("%")."> with :%d")
+"    call Decho("(NetrwBrowseChgDir:go-up) setl noro ma")
     setl noro ma
     keepj %d
    endif
 
    if has("amiga")
     " amiga
-"    call Decho('(NetrwBrowseChgDir) case "go up one directory": newdir == "../" and amiga')
+"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and amiga')
     if a:islocal
      let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
      let dirname= substitute(dirname,'/$','','')
     else
      let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
     endif
-"    call Decho("(NetrwBrowseChgDir) amiga: dirname<".dirname."> (go up one dir)")
+"    call Decho("(NetrwBrowseChgDir:go-up) amiga: dirname<".dirname."> (go up one dir)")
 
    else
     " unix or cygwin
-"    call Decho('(NetrwBrowseChgDir) case "go up one directory": newdir == "../" and unix or cygwin')
+"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and unix or cygwin')
     if a:islocal
      let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
      if dirname == ""
@@ -3659,7 +4445,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
     else
      let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
     endif
-"    call Decho("(NetrwBrowseChgDir) unix: dirname<".dirname."> (go up one dir)")
+"    call Decho("(NetrwBrowseChgDir:go-up) unix: dirname<".dirname."> (go up one dir)")
    endif
    keepj call s:SetRexDir(a:islocal,dirname)
 
@@ -3667,9 +4453,9 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    " --------------------------------------
    " NetrwBrowseChgDir: Handle Tree Listing {{{3
    " --------------------------------------
-"   call Decho('(NetrwBrowseChgDir) case liststyle is TREELIST and w:netrw_treedict exists')
+"   call Decho('(NetrwBrowseChgDir:tree-list) case liststyle is TREELIST and w:netrw_treedict exists')
    " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
-"   call Decho("(NetrwBrowseChgDir) setl noro ma")
+"   call Decho("(NetrwBrowseChgDir) (treelist) setl noro ma")
    setl noro ma
    if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
 "    call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d")
@@ -3678,24 +4464,24 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    let treedir      = s:NetrwTreeDir()
    let s:treecurpos = nbcd_curpos
    let haskey= 0
-"   call Decho("(NetrwBrowseChgDir) w:netrw_treedict<".string(w:netrw_treedict).">")
+"   call Decho("(NetrwBrowseChgDir:tree-list) w:netrw_treedict<".string(w:netrw_treedict).">")
 
    " search treedict for tree dir as-is
    if has_key(w:netrw_treedict,treedir)
-"    call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'> : found it!')
+"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : found it!')
     let haskey= 1
    else
-"    call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'> : not found')
+"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
    endif
 
    " search treedict for treedir with a / appended
    if !haskey && treedir !~ '/$'
     if has_key(w:netrw_treedict,treedir."/")
      let treedir= treedir."/"
-"     call Decho('(NetrwBrowseChgDir) ....searched.for treedir<'.treedir.'> found it!')
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
      let haskey = 1
     else
-"     call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'/> : not found')
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'/> : not found')
     endif
    endif
 
@@ -3703,16 +4489,16 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    if !haskey && treedir =~ '/$'
     let treedir= substitute(treedir,'/$','','')
     if has_key(w:netrw_treedict,treedir)
-"     call Decho('(NetrwBrowseChgDir) ....searched.for treedir<'.treedir.'> found it!')
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
      let haskey = 1
     else
-"     call Decho('(NetrwBrowseChgDir) ....searched for treedir<'.treedir.'> : not found')
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
     endif
    endif
 
    if haskey
     " close tree listing for selected subdirectory
-"    call Decho("(NetrwBrowseChgDir) closing selected subdirectory<".dirname.">")
+"    call Decho("(NetrwBrowseChgDir:tree-list) closing selected subdirectory<".dirname.">")
     call remove(w:netrw_treedict,treedir)
 "    call Decho("(NetrwBrowseChgDir) removed     entry<".treedir."> from treedict")
 "    call Decho("(NetrwBrowseChgDir) yielding treedict<".string(w:netrw_treedict).">")
@@ -3720,7 +4506,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    else
     " go down one directory
     let dirname= substitute(treedir,'/*$','/','')
-"    call Decho("(NetrwBrowseChgDir) go down one dir: treedir<".treedir.">")
+"    call Decho("(NetrwBrowseChgDir:tree-list) go down one dir: treedir<".treedir.">")
    endif
    keepj call s:SetRexDir(a:islocal,dirname)
    let s:treeforceredraw = 1
@@ -3730,7 +4516,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
    " NetrwBrowseChgDir: Go down one directory {{{3
    " ----------------------------------------
    let dirname    = s:ComposePath(dirname,newdir)
-"   call Decho("(NetrwBrowseChgDir) go down one dir: dirname<".dirname."> newdir<".newdir.">")
+"   call Decho("(NetrwBrowseChgDir:go-down) go down one dir: dirname<".dirname."> newdir<".newdir.">")
    keepj call s:SetRexDir(a:islocal,dirname)
   endif
 
@@ -3739,17 +4525,17 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,
  " --------------------------------------
   keepj call s:NetrwOptionRestore("s:")
   if dolockout
-"   call Decho("(NetrwBrowseChgDir) filewritable(dirname<".dirname.">)=".filewritable(dirname))
+"   call Decho("(NetrwBrowseChgDir:restore) filewritable(dirname<".dirname.">)=".filewritable(dirname))
    if filewritable(dirname)
-"    call Decho("(NetrwBrowseChgDir) doing modification lockout settings: ma nomod noro")
-"    call Decho("(NetrwBrowseChgDir) setl ma nomod noro")
+"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod noro")
+"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
     setl ma nomod noro
-"    call Decho("(NetrwBrowseChgDir) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
    else
-"    call Decho("(NetrwBrowseChgDir) doing modification lockout settings: ma nomod ro")
-"    call Decho("(NetrwBrowseChgDir) setl ma nomod noro")
+"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod ro")
+"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
     setl ma nomod ro
-"    call Decho("(NetrwBrowseChgDir) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
    endif
   endif
   let @@= ykeep
@@ -3775,7 +4561,7 @@ fun! netrw#NetrwBrowseX(fname,remote)
      " g:Netrw_corehandler is a function reference (see :help Funcref)
 "     call Decho("g:Netrw_corehandler is a funcref")
      call g:Netrw_corehandler(a:fname)
-    elseif type(g:Netrw_corehandler) == 3)
+    elseif type(g:Netrw_corehandler) == 3
      " g:Netrw_corehandler is a List of function references (see :help Funcref)
 "     call Decho("g:Netrw_corehandler is a List")
      for Fncref in g:Netrw_corehandler
@@ -3817,7 +4603,7 @@ fun! netrw#NetrwBrowseX(fname,remote)
   if a:remote == 1
    " create a local copy
 "   call Decho("(remote) a:remote=".a:remote.": create a local copy of <".a:fname.">")
-   setlocal bh=delete
+   setl bh=delete
    call netrw#NetRead(3,a:fname)
    " attempt to rename tempfile
    let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
@@ -3963,9 +4749,9 @@ fun! netrw#NetrwBrowseX(fname,remote)
 "  endif
 
   if a:remote == 1
-   setlocal bh=delete bt=nofile
+   setl bh=delete bt=nofile
    if g:netrw_use_noswf
-    setlocal noswf
+    setl noswf
    endif
    exe "sil! keepj norm! \<c-o>"
 "   redraw!
@@ -4019,453 +4805,6 @@ fun! s:NetrwClearExplore()
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#Explore: launch the local browser in the directory of the current file {{{2
-"          indx:  == -1: Nexplore
-"                 == -2: Pexplore
-"                 ==  +: this is overloaded:
-"                      * If Nexplore/Pexplore is in use, then this refers to the
-"                        indx'th item in the w:netrw_explore_list[] of items which
-"                        matched the */pattern **/pattern *//pattern **//pattern
-"                      * If Hexplore or Vexplore, then this will override
-"                        g:netrw_winsize to specify the qty of rows or columns the
-"                        newly split window should have.
-"          dosplit==0: the window will be split iff the current file has been modified
-"          dosplit==1: the window will be split before running the local browser
-"          style == 0: Explore     style == 1: Explore!
-"                == 2: Hexplore    style == 3: Hexplore!
-"                == 4: Vexplore    style == 5: Vexplore!
-"                == 6: Texplore
-fun! netrw#Explore(indx,dosplit,style,...)
-"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%"))
-  if !exists("b:netrw_curdir")
-   let b:netrw_curdir= getcwd()
-"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
-  endif
-  let curdir     = simplify(b:netrw_curdir)
-  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
-"  call Decho("curdir<".curdir.">  curfiledir<".curfiledir.">")
-
-  " save registers
-  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.": dosplit or file has been modified")
-   call s:SaveWinVars()
-   let winsz= g:netrw_winsize
-   if a:indx > 0
-    let winsz= a:indx
-   endif
-
-   if a:style == 0      " Explore, Sexplore
-"    call Decho("style=0: Explore or Sexplore")
-    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
-    exe winsz."wincmd s"
-
-   elseif a:style == 1  "Explore!, Sexplore!
-"    call Decho("style=1: Explore! or Sexplore!")
-    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
-    exe winsz."wincmd v"
-
-   elseif a:style == 2  " Hexplore
-"    call Decho("style=2: Hexplore")
-    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
-    exe "bel ".winsz."wincmd s"
-
-   elseif a:style == 3  " Hexplore!
-"    call Decho("style=3: Hexplore!")
-    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
-    exe "abo ".winsz."wincmd s"
-
-   elseif a:style == 4  " Vexplore
-"    call Decho("style=4: Vexplore")
-    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
-    exe "lefta ".winsz."wincmd v"
-
-   elseif a:style == 5  " Vexplore!
-"    call Decho("style=5: Vexplore!")
-    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
-    exe "rightb ".winsz."wincmd v"
-
-   elseif a:style == 6  " Texplore
-    call s:SaveBufVars()
-"    call Decho("style  = 6: Texplore")
-    exe "tabnew ".fnameescape(curdir)
-    call s:RestoreBufVars()
-   endif
-   call s:RestoreWinVars()
-"  else " Decho
-"   call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
-  endif
-  keepj norm! 0
-
-  if a:0 > 0
-"   call Decho("case [a:0=".a:0."] > 0")
-   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
-"    call Decho("..case a:1<".a:1.">: starts with ~ and unix or cygwin")
-    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
-"    call Decho("..using dirname<".dirname.">  (case: ~ && unix||cygwin)")
-   elseif a:1 == '.'
-"    call Decho("..case a:1<".a:1.">: matches .")
-    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 =~ '\$'
-"    call Decho("..case a:1<".a:1.">: matches ending $")
-    let dirname= simplify(expand(a:1))
-"    call Decho("..using user-specified dirname<".dirname."> with $env-var")
-   elseif a:1 !~ '^\*\{1,2}/'
-"    call Decho("..case a:1<".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
-   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 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 =~ '^\*//'
-   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
-"   call Decho("case Explore *//pattern")
-   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
-   let starpat= 1
-"   call Decho("..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
-   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-
-  elseif dirname =~ '^\*\*//'
-   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
-"   call Decho("case Explore **//pattern")
-   let pattern= substitute(dirname,'^\*\*//','','')
-   let starpat= 2
-"   call Decho("..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
-
-  elseif dirname =~ '/\*\*/'
-   " handle .../**/.../filepat
-"   call Decho("case Explore .../**/.../filepat")
-   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
-   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
-    let b:netrw_curdir = prefixdir
-   else
-    let b:netrw_curdir= getcwd().'/'.prefixdir
-   endif
-   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
-   let starpat= 4;
-"   call Decho("..pwd<".getcwd()."> dirname<".dirname.">")
-"   call Decho("..case Explore ../**/../filepat (starpat=".starpat.")")
-
-  elseif dirname =~ '^\*/'
-   " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-   let starpat= 3
-"   call Decho("case Explore */filepat (starpat=".starpat.")")
-
-  elseif dirname=~ '^\*\*/'
-   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-   let starpat= 4
-"   call Decho("case Explore **/filepat (starpat=".starpat.")")
-
-  else
-   let starpat= 0
-"   call Decho("default case: starpat=".starpat)
-  endif
-
-  if starpat == 0 && a:indx >= 0
-   " [Explore Hexplore Vexplore Sexplore] [dirname]
-"   call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname."> Explore Hexplore Vexplore Sexplore")
-   if dirname == ""
-    let dirname= curfiledir
-"    call Decho("..empty dirname, using current file's directory<".dirname.">")
-   endif
-   if dirname =~ '^scp:' || dirname =~ '^ftp:'
-"    call Decho("..calling NetrwBrowse(0,dirname<".dirname.">)")
-    call s:NetrwBrowse(0,dirname)
-   else
-    if dirname == ""|let dirname= getcwd()|endif
-"    call Decho("..calling LocalBrowseCheck(dirname<".dirname.">)")
-    call netrw#LocalBrowseCheck(dirname)
-"    call Decho("win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
-   endif
-
-"   call Decho("curdir<".curdir.">")
-   if has("win32") || has("win95") || has("win64") || has("win16")
-    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
-   else
-    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
-   endif
-
-  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-  elseif a:indx <= 0
-   " Nexplore, Pexplore, Explore: handle starpat
-"   call Decho("case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
-   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
-"    call Decho("..set up <s-up> and <s-down> maps")
-    let s:didstarstar= 1
-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
-   endif
-
-   if has("path_extra")
-"    call Decho("..starpat=".starpat.": has +path_extra")
-    if !exists("w:netrw_explore_indx")
-     let w:netrw_explore_indx= 0
-    endif
-
-    let indx = a:indx
-"    call Decho("..starpat=".starpat.": set indx= [a:indx=".indx."]")
-
-    if indx == -1
-     " Nexplore
-"     call Decho("..case Nexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("....indx=".indx." curfile<".curfile.">")
-     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
-      let indx= indx + 1
-"      call Decho("....indx=".indx." (Nexplore while loop)")
-     endwhile
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-"     call Decho("....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    elseif indx == -2
-     " Pexplore
-"     call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("....indx=".indx." curfile<".curfile.">")
-     while indx >= 0 && curfile == w:netrw_explore_list[indx]
-      let indx= indx - 1
-"      call Decho("....indx=".indx." (Pexplore while loop)")
-     endwhile
-     if indx < 0                        | let indx= 0                           | endif
-"     call Decho("....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    else
-     " Explore -- initialize
-     " build list of files to Explore with Nexplore/Pexplore
-"     call Decho("..starpat=".starpat.": case Explore: initialize (indx=".indx.")")
-     keepj call s:NetrwClearExplore()
-     let w:netrw_explore_indx= 0
-     if !exists("b:netrw_curdir")
-      let b:netrw_curdir= getcwd()
-     endif
-"     call Decho("....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
-
-     " switch on starpat to build the w:netrw_explore_list of files
-     if starpat == 1
-      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-"      call Decho("..case starpat=".starpat.": build *//pattern list  (curdir-only srch for files containing pattern)  &hls=".&hls)
-"      call Decho("....pattern<".pattern.">")
-      try
-       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.">")
-       return
-      endtry
-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
-      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-
-     elseif starpat == 2
-      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-"      call Decho("..case starpat=".starpat.": build **//pattern list  (recursive descent files containing pattern)")
-"      call Decho("....pattern<".pattern.">")
-      try
-       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
-       sil! let @* = keepregstar
-       sil! let @+ = keepregstar
-       sil! let @/ = keepregslash
-"       call Dret("netrw#Explore : no files matched pattern")
-       return
-      endtry
-      let s:netrw_curdir       = b:netrw_curdir
-      let w:netrw_explore_list = getqflist()
-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
-      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-
-     elseif starpat == 3
-      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-"      call Decho("..case starpat=".starpat.": build */filepat list  (curdir-only srch filenames matching filepat)  &hls=".&hls)
-      let filepat= substitute(dirname,'^\*/','','')
-      let filepat= substitute(filepat,'^[%#<]','\\&','')
-"      call Decho("....b:netrw_curdir<".b:netrw_curdir.">")
-"      call Decho("....filepat<".filepat.">")
-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
-      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
-
-     elseif starpat == 4
-      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-"      call Decho("..case starpat=".starpat.": build **/filepat list  (recursive descent srch filenames matching filepat)  &hls=".&hls)
-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
-      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
-     endif " switch on starpat to build w:netrw_explore_list
-
-     let w:netrw_explore_listlen = len(w:netrw_explore_list)
-"     call Decho("....w:netrw_explore_list<".string(w:netrw_explore_list).">")
-"     call Decho("....w:netrw_explore_listlen=".w:netrw_explore_listlen)
-
-     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
-      keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore : no files matched")
-      return
-     endif
-    endif  " if indx ... endif
-
-    " NetrwStatusLine support - for exploring support
-    let w:netrw_explore_indx= indx
-"    call Decho("....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
-
-    " wrap the indx around, but issue a note
-    if indx >= w:netrw_explore_listlen || indx < 0
-"     call Decho("....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
-     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
-     let w:netrw_explore_indx= indx
-     keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
-    endif
-
-    exe "let dirfile= w:netrw_explore_list[".indx."]"
-"    call Decho("....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
-    let newdir= substitute(dirfile,'/[^/]*$','','e')
-"    call Decho("....newdir<".newdir.">")
-
-"    call Decho("....calling LocalBrowseCheck(newdir<".newdir.">)")
-    call netrw#LocalBrowseCheck(newdir)
-    if !exists("w:netrw_liststyle")
-     let w:netrw_liststyle= g:netrw_liststyle
-    endif
-    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
-     keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
-    else
-     keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
-    endif
-    let w:netrw_explore_mtchcnt = indx + 1
-    let w:netrw_explore_bufnr   = bufnr("%")
-    let w:netrw_explore_line    = line(".")
-    keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
-"    call Decho("....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
-
-   else
-"    call Decho("..your vim does not have +path_extra")
-    if !exists("g:netrw_quiet")
-     keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
-    endif
-    sil! let @* = keepregstar
-    sil! let @+ = keepregstar
-    sil! let @/ = keepregslash
-"    call Dret("netrw#Explore : missing +path_extra")
-    return
-   endif
-
-  else
-"   call Decho("..default case: Explore newdir<".dirname.">")
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
-    sil! unlet w:netrw_treedict
-    sil! unlet w:netrw_treetop
-   endif
-   let newdir= dirname
-   if !exists("b:netrw_curdir")
-    keepj call netrw#LocalBrowseCheck(getcwd())
-   else
-    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
-   endif
-  endif
-
-  " visual display of **/ **// */ Exploration files
-"  call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
-  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
-"   call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
-   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
-    " only update match list if current directory isn't the same as before
-"    call Decho("only update match list if current directory not the same as before")
-    let s:explore_prvdir = b:netrw_curdir
-    let s:explore_match  = ""
-    let dirlen           = s:Strlen(b:netrw_curdir)
-    if b:netrw_curdir !~ '/$'
-     let dirlen= dirlen + 1
-    endif
-    let prvfname= ""
-    for fname in w:netrw_explore_list
-"     call Decho("fname<".fname.">")
-     if fname =~ '^'.b:netrw_curdir
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
-      endif
-     elseif fname !~ '^/' && fname != prvfname
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
-      endif
-     endif
-     let prvfname= fname
-    endfor
-"    call Decho("explore_match<".s:explore_match.">")
-    exe "2match netrwMarkFile /".s:explore_match."/"
-   endif
-   echo "<s-up>==Pexplore  <s-down>==Nexplore"
-  else
-   2match none
-   if exists("s:explore_match")  | unlet s:explore_match  | endif
-   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
-   echo " "
-"   call Decho("cleared explore match list")
-  endif
-
-  sil! let @* = keepregstar
-  sil! let @+ = keepregstar
-  sil! let @/ = keepregslash
-"  call Dret("netrw#Explore : @/<".@/.">")
-endfun
-
-" ---------------------------------------------------------------------
 " s:NetrwExploreListUniq: {{{2
 fun! s:NetrwExploreListUniq(explist)
 "  call Dfunc("s:NetrwExploreListUniq(explist<".string(a:explist).">)")
@@ -4511,13 +4850,17 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwForceFile: (gf support) Force treatment as a file {{{2
 fun! s:NetrwForceFile(islocal,newfile)
-"  "  call Dfunc("s:NetrwForceFile(islocal=".a:islocal." newdir<".a:newdir.">)")
+"  call Dfunc("s:NetrwForceFile(islocal=".a:islocal." newdir<".a:newfile.">)")
   if a:newfile =~ '[/@*=|\\]$'
    let newfile= substitute(a:newfile,'.$','','')
   else
    let newfile= a:newfile
   endif
-  call s:NetrwBrowseChgDir(a:islocal,newfile)
+  if a:islocal
+   call s:NetrwBrowseChgDir(a:islocal,newfile)
+  else
+   call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,newfile))
+  endif
 "  call Dret("s:NetrwForceFile")
 endfun
 
@@ -4539,7 +4882,7 @@ fun! s:NetrwHide(islocal)
 
    " hide the files in the markfile list
    for fname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk)
+"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." l:isk=".&l:isk)
     if match(g:netrw_list_hide,'\<'.fname.'\>') != -1
      " remove fname from hiding list
      let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','')
@@ -4626,7 +4969,7 @@ fun! s:NetrwHome()
    endif
   endif
   " insure that the home directory exists
-  if !isdirectory(home)
+  if g:netrw_dirhistmax > 0 && !isdirectory(home)
    if exists("g:netrw_mkdir")
     call system(g:netrw_mkdir." ".shellescape(home))
    else
@@ -4640,6 +4983,9 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
 fun! s:NetrwLeftmouse(islocal)
+  if exists("s:netrwdrag")
+   return
+  endif
 "  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
 
   let ykeep= @@
@@ -4680,6 +5026,47 @@ fun! s:NetrwLeftmouse(islocal)
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwRightdrag: {{{2
+"DechoTabOn
+fun! s:NetrwRightdrag(islocal)
+"  call Dfunc("s:NetrwRightdrag(islocal=".a:islocal.")")
+  if !exists("s:netrwdrag")
+   let s:netrwdrag     = winnr()
+   call s:NetrwMarkFile(a:islocal,s:NetrwGetWord())
+   if a:islocal
+    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(1)<cr>
+   else
+    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(0)<cr>
+   endif
+  endif
+"  call Dret("s:NetrwRightdrag : s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRightrelease: {{{2
+fun! s:NetrwRightrelease(islocal)
+"  call Dfunc("s:NetrwRightrelease(islocal=".a:islocal.") s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
+  if exists("s:netrwdrag")
+   nunmap <s-rightrelease>
+   let tgt = s:NetrwGetWord()
+"   call Decho("target#1: ".tgt)
+   if tgt =~ '/$' && tgt !~ '^\./$'
+    let tgt = b:netrw_curdir."/".tgt
+   else
+    let tgt= b:netrw_curdir
+   endif
+"   call Decho("target#2: ".tgt)
+   call netrw#NetrwMakeTgt(tgt)
+   let curwin= winnr()
+   exe s:netrwdrag."wincmd w"
+   call s:NetrwMarkFileMove(a:islocal)
+   exe curwin."wincmd w"
+   unlet s:netrwdrag
+  endif
+"  call Dret("s:NetrwRightrelease")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
 " separated patterns given in g:netrw_list_hide
 fun! s:NetrwListHide()
@@ -4900,6 +5287,13 @@ endfun
 "    b:netrw_islocal
 fun! s:NetrwMarkFile(islocal,fname)
 "  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
+
+  " sanity check
+  if empty(a:fname)
+"   call Dret("s:NetrwMarkFile : emtpy fname")
+   return
+  endif
+
   let ykeep   = @@
   let curbufnr= bufnr("%")
   let curdir  = b:netrw_curdir
@@ -5010,34 +5404,44 @@ fun! s:NetrwMarkFileCompress(islocal)
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileCompress")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress")
+
+   " for every filename in the marked list
    for fname in s:netrwmarkfilelist_{curbufnr}
-    " for every filename in the marked list
-    for sfx in sort(keys(g:netrw_decompress))
-     if fname =~ '\'.sfx.'$'
-      " fname has a suffix indicating that its compressed; apply associated decompression routine
-      let exe= netrw#WinPath(g:netrw_decompress[sfx])
-"      call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
+    let sfx= substitute(fname,'^.\{-}\(\.\a\+\)$','\1','')
+"    call Decho("extracted sfx<".sfx.">")
+    if exists("g:netrw_decompress['".sfx."']")
+     " fname has a suffix indicating that its compressed; apply associated decompression routine
+     let exe= g:netrw_decompress[sfx]
+"     call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
+     let exe= netrw#WinPath(exe)
+     if a:islocal
+      if g:netrw_keepdir
+       let fname= shellescape(s:ComposePath(curdir,fname))
+      endif
+     else
+      let fname= shellescape(b:netrw_curdir.fname,1)
+     endif
+     if executable(exe)
       if a:islocal
-       if g:netrw_keepdir
-        let fname= shellescape(s:ComposePath(curdir,fname))
-       endif
+       call system(exe." ".fname)
       else
-       let fname= shellescape(b:netrw_curdir.fname,1)
+       keepj call s:RemoteSystem(exe." ".fname)
       endif
-      if executable(exe)
-       if a:islocal
-	call system(exe." ".fname)
-       else
-        keepj call s:RemoteSystem(exe." ".fname)
-       endif
-      else
-       keepj call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
-      endif
-      break
+     else
+      keepj call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
      endif
-     unlet sfx
-    endfor
+    endif
+    unlet sfx
+
     if exists("exe")
      unlet exe
     elseif a:islocal
@@ -5047,7 +5451,8 @@ fun! s:NetrwMarkFileCompress(islocal)
      " fname not a compressed file, so compress it
      keepj call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
     endif
-   endfor
+   endfor	" for every file in the marked list
+
    call s:NetrwUnmarkList(curbufnr,curdir)
    keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
    keepj call netrw#NetrwRestorePosn(svpos)
@@ -5064,36 +5469,52 @@ endfun
 "                              0=failure
 fun! s:NetrwMarkFileCopy(islocal)
 "  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">")
-
-  " sanity checks
-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
-   keepj call netrw#ErrorMsg(s:ERROR,"there are no marked files in this window (:help netrw-mf)",66)
-"   call Dret("s:NetrwMarkFileCopy 0")
-   return 0
-  endif
-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileCopy")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if !exists("s:netrwmftgt")
    keepj call netrw#ErrorMsg(s:ERROR,"your marked file target is empty! (:help netrw-mt)",67)
 "   call Dret("s:NetrwMarkFileCopy 0")
    return 0
   endif
 "  call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">")
-  let curdir   = b:netrw_curdir
-  let curbufnr = bufnr("%")
 
   if      a:islocal &&  s:netrwmftgt_islocal
    " Copy marked files, local directory to local directory
 "   call Decho("copy from local to local")
-   if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '^cmd '
+   if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '\<cmd\s'
     call netrw#ErrorMsg(s:ERROR,"g:netrw_localcopycmd<".g:netrw_localcopycmd."> not executable on your system, aborting",91)
 "    call Dfunc("s:NetrwMarkFileMove : g:netrw_localcopycmd<".g:netrw_localcopycmd."> n/a!")
     return
    endif
    let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
-"   call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
-   call system(netrw#WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
+   let tgt = shellescape(s:netrwmftgt)
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let args= substitute(args,'/','\\','g')
+    let tgt = substitute(tgt, '/','\\','g')
+   endif
+   if g:netrw_localcopycmd =~ '\s'
+    let copycmd     = substitute(g:netrw_localcopycmd,'\s.*$','','')
+    let copycmdargs = substitute(g:netrw_localcopycmd,'^.\{-}\(\s.*\)$','\1','')
+    let copycmd     = netrw#WinPath(copycmd).copycmdargs
+   else
+    let copycmd = netrw#WinPath(g:netrw_localcopycmd)
+   endif
+"   call Decho("args   <".args.">")
+"   call Decho("tgt    <".tgt.">")
+"   call Decho("copycmd<".copycmd.">")
+"   call Decho("system(".copycmd." ".args." ".tgt.")")
+   call system(copycmd." ".args." ".tgt)
    if v:shell_error != 0
-    call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+    call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localcopycmd<".g:netrw_localcopycmd.">; it doesn't work!",80)
 "    call Dret("s:NetrwMarkFileCopy 0 : failed: system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt))
     return 0
    endif
@@ -5178,7 +5599,15 @@ fun! s:NetrwMarkFileDiff(islocal)
 "  call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
   let curbufnr= bufnr("%")
 
-  if exists("s:netrwmarkfilelist_{curbufnr}")
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileDiff")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
+  if exists("s:netrwmarkfilelist_{."curbufnr}")
    let cnt    = 0
    let curdir = b:netrw_curdir
    for fname in s:netrwmarkfilelist
@@ -5211,6 +5640,15 @@ fun! s:NetrwMarkFileEdit(islocal)
 
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileEdit")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
    call s:SetRexDir(a:islocal,curdir)
    let flist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
@@ -5220,11 +5658,43 @@ fun! s:NetrwMarkFileEdit(islocal)
 "   call Decho("exe sil args ".flist)
    exe "sil args ".flist
   endif
+  echo "(use :bn, :bp to navigate files; :Rex to return)"
   
 "  call Dret("s:NetrwMarkFileEdit")
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwMarkFileQFEL: convert a quickfix-error list into a marked file list {{{2
+fun! s:NetrwMarkFileQFEL(islocal,qfel)
+"  call Dfunc("s:NetrwMarkFileQFEL(islocal=".a:islocal.",qfel)")
+  call s:NetrwUnmarkAll()
+  let curbufnr= bufnr("%")
+
+  if !empty(a:qfel)
+   for entry in a:qfel
+    let bufnmbr= entry["bufnr"]
+"    call Decho("bufname(".bufnmbr.")<".bufname(bufnmbr)."> line#".entry["lnum"]." text=".entry["text"])
+    if !exists("s:netrwmarkfilelist_{curbufnr}")
+"     call Decho("case: no marked file list")
+     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
+    elseif index(s:netrwmarkfilelist_{curbufnr},bufname(bufnmbr)) == -1
+     " s:NetrwMarkFile will remove duplicate entries from the marked file list.
+     " So, this test lets two or more hits on the same pattern to be ignored.
+"     call Decho("case: ".bufname(bufnmbr)." not currently in marked file list")
+     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
+    else
+"     call Decho("case: ".bufname(bufnmbr)." already in marked file list")
+    endif
+   endfor
+   echo "(use me to edit marked files)"
+  else
+   call netrw#ErrorMsg(s:WARNING,"can't convert quickfix error list; its empty!",92)
+  endif
+
+"  call Dret("s:NetrwMarkFileQFEL")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwMarkFileExe: (invoked by mx) execute arbitrary system command on marked files, one at a time {{{2
 "                     Uses the local marked-file list.
 fun! s:NetrwMarkFileExe(islocal)
@@ -5233,6 +5703,14 @@ fun! s:NetrwMarkFileExe(islocal)
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileExe")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
    " get the command
    call inputsave()
@@ -5353,6 +5831,14 @@ fun! s:NetrwMarkFileVimCmd(islocal)
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileVimCmd")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
    " get the command
    call inputsave()
@@ -5463,30 +5949,47 @@ fun! s:NetrwMarkFileGrep(islocal)
 "  call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
    call s:NetrwUnmarkAll()
-
-   " ask user for pattern
-   call inputsave()
-   let pat= input("Enter pattern: ","")
-   call inputrestore()
-   if pat !~ '^\s'
-    if pat !~ '^/'
-     let pat= '/'.pat.'/'
-    endif
-    let pat= " ".pat
-   endif
-
-   " use vimgrep for both local and remote
-"   call Decho("exe vimgrep".pat." ".netrwmarkfilelist)
-   try
-    exe "keepj noautocmd vimgrep".pat." ".netrwmarkfilelist
-    catch /^Vim\%((\a\+)\)\=:E480/
-    keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
-"    call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
-    return
-   endtry
-
-   2match none
-   keepj call netrw#NetrwRestorePosn(svpos)
+  else
+"   call Decho('no marked files, using "*"')
+   let netrwmarkfilelist= "*"
+  endif
+
+  " ask user for pattern
+  call inputsave()
+  let pat= input("Enter pattern: ","")
+  call inputrestore()
+  let patbang = ""
+  if pat =~ '^!'
+   let patbang = "!"
+   let pat= strpart(pat,2)
+  endif
+  if pat =~ '^\i'
+   let pat    = escape(pat,'/')
+   let pat    = '/'.pat.'/'
+  else
+   let nonisi = pat[0]
+  endif
+
+  " use vimgrep for both local and remote
+"  call Decho("exe vimgrep".patbang." ".pat." ".netrwmarkfilelist)
+  try
+   exe "keepj noautocmd vimgrep".patbang." ".pat." ".netrwmarkfilelist
+  catch /^Vim\%((\a\+)\)\=:E480/
+   keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pat.">",76)
+"   call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pat.">")
+   return
+  endtry
+  echo "(use :cn, :cp to navigate, :Rex to return)"
+
+  2match none
+  keepj call netrw#NetrwRestorePosn(svpos)
+
+  if exists("nonisi")
+   " original, user-supplied pattern did not begin with a character from isident
+"   call Decho("looking for trailing nonisi<".nonisi."> followed by a j, gj, or jg")
+   if pat =~ nonisi.'j$\|'.nonisi.'gj$\|'.nonisi.'jg$'
+    call s:NetrwMarkFileQFEL(a:islocal,getqflist())
+   endif
   endif
 
 "  call Dret("s:NetrwMarkFileGrep")
@@ -5503,12 +6006,13 @@ fun! s:NetrwMarkFileMove(islocal)
   let curbufnr = bufnr("%")
 
   " sanity check
-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
    keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
 "   call Dret("s:NetrwMarkFileMove")
    return
   endif
-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if !exists("s:netrwmftgt")
    keepj call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
 "   call Dret("s:NetrwMarkFileCopy 0")
@@ -5520,16 +6024,37 @@ fun! s:NetrwMarkFileMove(islocal)
    " move: local -> local
 "   call Decho("move from local to local")
 "   call Decho("(s:NetrwMarkFileMove) local to local move")
-   if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '^cmd '
+   if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '\<cmd\s'
     call netrw#ErrorMsg(s:ERROR,"g:netrw_localmovecmd<".g:netrw_localmovecmd."> not executable on your system, aborting",90)
 "    call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!")
     return
    endif
+   let tgt         = shellescape(s:netrwmftgt)
+"   call Decho("tgt<".tgt.">")
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let tgt         = substitute(tgt, '/','\\','g')
+"    call Decho("windows exception: tgt<".tgt.">")
+    if g:netrw_localmovecmd =~ '\s'
+     let movecmd     = substitute(g:netrw_localmovecmd,'\s.*$','','')
+     let movecmdargs = substitute(g:netrw_localmovecmd,'^.\{-}\(\s.*\)$','\1','')
+     let movecmd     = netrw#WinPath(movecmd).movecmdargs
+"     call Decho("windows exception: movecmd<".movecmd."> (#1: had a space)")
+    else
+     let movecmd = netrw#WinPath(movecmd)
+"     call Decho("windows exception: movecmd<".movecmd."> (#2: no space)")
+    endif
+   else
+    let movecmd = netrw#WinPath(g:netrw_localmovecmd)
+"    call Decho("movecmd<".movecmd."> (#3 linux or cygwin)")
+   endif
    for fname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")")
-    let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt))
-    if v:shell_error < 0
-     call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
+"    call Decho("system(".movecmd." ".shellescape(fname)." ".tgt.")")
+    if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+     let fname= substitute(fname,'/','\\','g')
+    endif
+    let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".tgt)
+    if v:shell_error != 0
+     call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localmovecmd<".g:netrw_localmovecmd.">; it doesn't work!",54)
      break
     endif
    endfor
@@ -5605,6 +6130,14 @@ endfun
 fun! s:NetrwMarkFilePrint(islocal)
 "  call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")")
   let curbufnr= bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFilePrint")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
   if exists("s:netrwmarkfilelist_{curbufnr}")
    let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr}
    let curdir            = b:netrw_curdir
@@ -5633,7 +6166,7 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2
 "                        files when given a regexp (for which a prompt is
-"                        issued).
+"                        issued) (matches to name of files).
 fun! s:NetrwMarkFileRegexp(islocal)
 "  call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")")
 
@@ -5645,8 +6178,8 @@ fun! s:NetrwMarkFileRegexp(islocal)
   if a:islocal
    " get the matching list of files using local glob()
 "   call Decho("handle local regexp")
-   let dirname  = escape(b:netrw_curdir,g:netrw_glob_escape)
-   let files = glob(s:ComposePath(dirname,regexp))
+   let dirname = escape(b:netrw_curdir,g:netrw_glob_escape)
+   let files   = glob(s:ComposePath(dirname,regexp))
 "   call Decho("files<".files.">")
    let filelist= split(files,"\n")
 
@@ -5699,6 +6232,7 @@ fun! s:NetrwMarkFileRegexp(islocal)
    let @a  = areg
    let &ei = eikeep
   endif
+  echo "  (use me to edit marked files)"
 
 "  call Dret("s:NetrwMarkFileRegexp")
 endfun
@@ -5709,6 +6243,14 @@ endfun
 fun! s:NetrwMarkFileSource(islocal)
 "  call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")")
   let curbufnr= bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileSource")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
   if exists("s:netrwmarkfilelist_{curbufnr}")
    let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")}
    let curdir            = b:netrw_curdir
@@ -5739,6 +6281,14 @@ fun! s:NetrwMarkFileTag(islocal)
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileTag")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist")
 "   call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "shellescape(v:val,".!a:islocal.")"))
@@ -5774,9 +6324,9 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwMarkFileTgt:  (invoked by mt) This function sets up a marked file target {{{2
 "   Sets up two variables, 
-"     s:netrwmftgt : holds the target directory
+"     s:netrwmftgt         : holds the target directory
 "     s:netrwmftgt_islocal : 0=target directory is remote
-"                    1=target directory is local
+"                            1=target directory is local
 fun! s:NetrwMarkFileTgt(islocal)
 "  call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")")
   let svpos  = netrw#NetrwSavePosn()
@@ -5788,9 +6338,21 @@ fun! s:NetrwMarkFileTgt(islocal)
 
   " set up target
   if line(".") < w:netrw_bannercnt
-   " if cursor in banner region, use b:netrw_curdir for the target
-   let s:netrwmftgt= b:netrw_curdir
-"   call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
+   " if cursor in banner region, use b:netrw_curdir for the target unless its already the target
+   if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") && s:netrwmftgt == b:netrw_curdir
+"    call Decho("cursor in banner region, and target already is <".b:netrw_curdir.">: removing target")
+    unlet s:netrwmftgt s:netrwmftgt_islocal
+    if g:netrw_fastbrowse <= 1
+     call s:LocalBrowseShellCmdRefresh()
+    endif
+    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+    call netrw#NetrwRestorePosn(svpos)
+"    call Dret("s:NetrwMarkFileTgt : removed target")
+    return
+   else
+    let s:netrwmftgt= b:netrw_curdir
+"    call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
+   endif
 
   else
    " get word under cursor.
@@ -5866,6 +6428,8 @@ endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2
+"   User access provided by the <mu> mapping. (see :help netrw-mu)
+"   Used by many MarkFile functions.
 fun! s:NetrwUnmarkList(curbufnr,curdir)
 "  call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)")
 
@@ -5903,7 +6467,7 @@ fun! s:NetrwUnmarkAll()
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwUnmarkAll2: {{{2
+" s:NetrwUnmarkAll2: unmark all files from all buffers {{{2
 fun! s:NetrwUnmarkAll2()
 "  call Dfunc("s:NetrwUnmarkAll2()")
   redir => netrwmarkfilelist_let
@@ -5956,58 +6520,74 @@ fun! s:NetrwMenu(domenu)
    if !exists("s:netrw_menu_enabled") && a:domenu
 "    call Decho("initialize menu")
     let s:netrw_menu_enabled= 1
-    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.Create\ New\ File<tab>%	%'
-    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'
+    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'
+    if g:netrw_dirhistmax > 0
+     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'
+    else
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8     '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History	:echo "(disabled)"'."\<cr>"
+    endif
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1    '.g:NetrwTopLvlMenu.'Browsing\ Control.Horizontal\ Split<tab>o	o'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2    '.g:NetrwTopLvlMenu.'Browsing\ Control.Vertical\ Split<tab>v	v'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3    '.g:NetrwTopLvlMenu.'Browsing\ Control.New\ Tab<tab>t	t'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4    '.g:NetrwTopLvlMenu.'Browsing\ Control.Preview<tab>p	p'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.6    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.7    '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.8    '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.9    '.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.Create\ New\ File<tab>%	%'
+    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.1 '.g:NetrwTopLvlMenu.'Style.Listing.thin<tab>i	:let w:netrw_liststyle=0<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.long<tab>i	:let w:netrw_liststyle=1<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.wide<tab>i	:let w:netrw_liststyle=2<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.tree<tab>i	:let w:netrw_liststyle=3<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.1 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Show\ All<tab>a	:let g:netrw_hide=0<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.3 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Normal<tab>a	:let g:netrw_hide=1<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.2 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Hidden\ Only<tab>a	:let g:netrw_hide=2<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3   '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.1 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Name<tab>s       :let g:netrw_sort_by="name"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.2 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Time<tab>s       :let g:netrw_sort_by="time"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.3 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Size<tab>s       :let g:netrw_sort_by="size"<cr><c-L>'
+    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'
+    let s:netrw_menucnt= 28
     call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
-    let s:netrw_menucnt= 28
+    call s:NetrwTgtMenu()      " let bookmarks and history be easy targets
 
    elseif !a:domenu
     let s:netrwcnt = 0
@@ -6048,222 +6628,6 @@ fun! s:NetrwObtain(islocal)
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#NetrwObtain: {{{2
-"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
-"     islocal=0  obtain from remote source
-"            =1  obtain from local source
-"     fname  :   a filename or a list of filenames
-"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
-fun! netrw#NetrwObtain(islocal,fname,...)
-"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
-  " NetrwStatusLine support - for obtaining support
-
-  if type(a:fname) == 1
-   let fnamelist= [ a:fname ]
-  elseif type(a:fname) == 3
-   let fnamelist= a:fname
-  else
-   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
-"   call Dret("netrw#NetrwObtain")
-   return
-  endif
-"  call Decho("fnamelist<".string(fnamelist).">")
-  if a:0 > 0
-   let tgtdir= a:1
-  else
-   let tgtdir= getcwd()
-  endif
-"  call Decho("tgtdir<".tgtdir.">")
-
-  if exists("b:netrw_islocal") && b:netrw_islocal
-   " obtain a file from local b:netrw_curdir to (local) tgtdir
-"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
-   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
-    let topath= s:ComposePath(tgtdir,"")
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-     " transfer files one at time
-"     call Decho("transfer files one at a time")
-     for fname in fnamelist
-"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
-      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
-      if v:shell_error != 0
-       call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
-"       call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
-       return
-     endfor
-    else
-     " transfer files with one command
-"     call Decho("transfer files with one command")
-     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
-"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
-     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
-     if v:shell_error != 0
-      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
-"      call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
-     return
-    endif
-   elseif !exists("b:netrw_curdir")
-    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
-   else
-    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
-   endif
-
-  else
-   " obtain files from remote b:netrw_curdir to local tgtdir
-"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
-   if type(a:fname) == 1
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
-   endif
-   call s:NetrwMethod(b:netrw_curdir)
-
-   if b:netrw_method == 4
-    " obtain file using scp
-"    call Decho("obtain via scp (method#4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-    if b:netrw_fname =~ '/'
-     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
-    else
-     let path= ""
-    endif
-    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
-
-   elseif b:netrw_method == 2
-    " obtain file using ftp + .netrc
-"     call Decho("obtain via ftp+.netrc (method #2)")
-     call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
-     let tmpbufnr= bufnr("%")
-     setlocal ff=unix
-     if exists("g:netrw_ftpmode") && 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.'"')
-"      call Decho("filter input: ".getline('$'))
-     endif
-
-     if exists("g:netrw_ftpextracmd")
-      keepj put =g:netrw_ftpextracmd
-"      call Decho("filter input: ".getline('$'))
-     endif
-     for fname in fnamelist
-      call setline(line("$")+1,'get "'.fname.'"')
-"      call Decho("filter input: ".getline('$'))
-     endfor
-     if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
-     else
-"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-      exe s:netrw_silentxfer."%!".s: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)
-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
-      let debugkeep= &debug
-      setlocal debug=msg
-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
-      let &debug= debugkeep
-     endif
-
-   elseif b:netrw_method == 3
-    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
-"    call Decho("obtain via ftp+mipf (method #3)")
-    call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
-    let tmpbufnr= bufnr("%")
-    setlocal ff=unix
-
-    if exists("g:netrw_port") && g:netrw_port != ""
-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline('$'))
-    else
-     keepj put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline('$'))
-    endif
-
-    if exists("g:netrw_uid") && g:netrw_uid != ""
-     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-      keepj put =g:netrw_uid
-"      call Decho("filter input: ".getline('$'))
-      if exists("s:netrw_passwd") && s:netrw_passwd != ""
-       keepj put ='\"'.s:netrw_passwd.'\"'
-      endif
-"      call Decho("filter input: ".getline('$'))
-     elseif exists("s:netrw_passwd")
-      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"      call Decho("filter input: ".getline('$'))
-     endif
-    endif
-
-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     keepj put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline('$'))
-    endif
-
-    if exists("b:netrw_fname") && b:netrw_fname != ""
-     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
-"     call Decho("filter input: ".getline('$'))
-    endif
-
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('$'))
-    endif
-
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('$'))
-    endif
-    for fname in fnamelist
-     keepj call setline(line("$")+1,'get "'.fname.'"')
-    endfor
-"    call Decho("filter input: ".getline('$'))
-
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-    keepj norm! 1Gdd
-"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
-    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-"     call Decho("error<".getline(1).">")
-     if !exists("g:netrw_quiet")
-      keepj call netrw#ErrorMsg(s:ERROR,getline(1),5)
-     endif
-    endif
-   elseif !exists("b:netrw_method") || b:netrw_method < 0
-"    call Dfunc("netrw#NetrwObtain : unsupported method")
-    return
-   endif
-
-   " restore status line
-   if type(a:fname) == 1 && exists("s:netrw_users_stl")
-    keepj call s:SetupNetrwStatusLine(s:netrw_users_stl)
-   endif
-
-  endif
-
-  " cleanup
-  if exists("tmpbufnr")
-   if bufnr("%") != tmpbufnr
-    exe tmpbufnr."bw!"
-   else
-    q!
-   endif
-  endif
-
-"  call Dret("netrw#NetrwObtain")
-endfun
-
-" ---------------------------------------------------------------------
 " s:NetrwPrevWinOpen: open file/directory in previous window.  {{{2
 "   If there's only one window, then the window will first be split.
 "   Returns:
@@ -6487,7 +6851,7 @@ fun! s:NetrwUpload(fname,tgt,...)
      let netrw_fname= b:netrw_fname
      keepj call s:SaveBufVars()|sil keepj new|keepj call s:RestoreBufVars()
      let tmpbufnr= bufnr("%")
-     setlocal ff=unix
+     setl ff=unix
 
      if exists("g:netrw_port") && g:netrw_port != ""
       keepj put ='open '.g:netrw_machine.' '.g:netrw_port
@@ -6541,7 +6905,7 @@ fun! s:NetrwUpload(fname,tgt,...)
      call histdel("/",-1)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       let debugkeep= &debug
-      setlocal debug=msg
+      setl debug=msg
       call netrw#ErrorMsg(s:ERROR,getline(1),15)
       let &debug = debugkeep
       let mod    = 1
@@ -6596,11 +6960,12 @@ fun! s:NetrwRefresh(islocal,dirname)
   " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first.
   " (defunct) NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
   " (defunct) Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
+  setl ma noro
+"  call Decho("setl ma noro")
 "  call Decho("clear buffer<".expand("%")."> with :%d")
   let ykeep      = @@
   let screenposn = netrw#NetrwSavePosn()
+"  call Decho("clearing buffer prior to refresh")
   sil! keepj %d
   if a:islocal
    keepj call netrw#LocalBrowseCheck(a:dirname)
@@ -6730,6 +7095,37 @@ fun! s:NetrwSetSort()
 "  call Dret("SetSort")
 endfun
 
+" ---------------------------------------------------------------------
+" s:NetrwSetTgt: sets the target to the specified choice index {{{2
+"    Implements [count]Tb  (bookhist<b>)
+"               [count]Th  (bookhist<h>)
+"               See :help netrw-qb for how to make the choice.
+fun! s:NetrwSetTgt(bookhist,choice)
+"  call Dfunc("s:NetrwSetTgt(bookhist<".a:bookhist."> choice#".a:choice.")")
+
+  if     a:bookhist == 'b'
+   " supports choosing a bookmark as a target using a qb-generated list
+   let choice= a:choice - 1
+   if exists("g:netrw_bookmarklist[".choice."]")
+    call netrw#NetrwMakeTgt(g:netrw_bookmarklist[choice])
+   else
+    echomsg "Sorry, bookmark#".a:choice." doesn't exist!"
+   endif
+
+  elseif a:bookhist == 'h'
+   " supports choosing a history stack entry as a target using a qb-generated list
+   let choice= (a:choice % g:netrw_dirhistmax) + 1
+   if exists("g:netrw_dirhist_".choice)
+    let histentry = g:netrw_dirhist_{choice}
+    call netrw#NetrwMakeTgt(histentry)
+   else
+    echomsg "Sorry, history#".a:choice." not available!"
+   endif
+  endif
+
+"  call Dret("s:NetrwSetTgt")
+endfun
+
 " =====================================================================
 " s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2
 fun! s:NetrwSortStyle(islocal)
@@ -6830,36 +7226,53 @@ fun! s:NetrwSplit(mode)
 endfun
 
 " ---------------------------------------------------------------------
-" NetrwStatusLine: {{{2
-fun! NetrwStatusLine()
-
-" vvv NetrwStatusLine() debugging vvv
-"  let g:stlmsg=""
-"  if !exists("w:netrw_explore_bufnr")
-"   let g:stlmsg="!X<explore_bufnr>"
-"  elseif w:netrw_explore_bufnr != bufnr("%")
-"   let g:stlmsg="explore_bufnr!=".bufnr("%")
-"  endif
-"  if !exists("w:netrw_explore_line")
-"   let g:stlmsg=" !X<explore_line>"
-"  elseif w:netrw_explore_line != line(".")
-"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
-"  endif
-"  if !exists("w:netrw_explore_list")
-"   let g:stlmsg=" !X<explore_list>"
-"  endif
-" ^^^ NetrwStatusLine() debugging ^^^
-
-  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
-   " restore user's status line
-   let &stl        = s:netrw_users_stl
-   let &laststatus = s:netrw_users_ls
-   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
-   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
-   return ""
-  else
-   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
-  endif
+" s:NetrwTgtMenu: {{{2
+fun! s:NetrwTgtMenu()
+  if !exists("s:netrw_menucnt")
+   return
+  endif
+"  call Dfunc("s:NetrwTgtMenu()")
+
+  " the following test assures that gvim is running, has menus available, and has menus enabled.
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+   if exists("g:NetrwTopLvlMenu")
+"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Targets'
+   endif
+   if !exists("s:netrw_initbookhist")
+    call s:NetrwBookHistRead()
+   endif
+
+   " target bookmarked places
+   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
+"    call Decho("installing bookmarks as easy targets")
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+     let ebmd= escape(bmd,g:netrw_menu_escape)
+     " show bookmarks for goto menu
+"     call Decho("menu: Targets: ".bmd)
+     exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd."	:call netrw#NetrwMakeTgt('".bmd."')\<cr>"
+     let cnt= cnt + 1
+    endfor
+   endif
+
+   " target directory browsing history
+   if exists("g:netrw_dirhistmax") && g:netrw_dirhistmax > 0
+"    call Decho("installing history as easy targets (histmax=".g:netrw_dirhistmax.")")
+    let histcnt = 1
+    while histcnt <= g:netrw_dirhistmax
+     let priority = g:netrw_dirhist_cnt + histcnt
+     if exists("g:netrw_dirhist_{histcnt}")
+      let histentry  = g:netrw_dirhist_{histcnt}
+      let ehistentry = escape(histentry,g:netrw_menu_escape)
+"      call Decho("menu: Targets: ".histentry)
+      exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry."	:call netrw#NetrwMakeTgt('".histentry."')\<cr>"
+     endif
+     let histcnt = histcnt + 1
+    endwhile
+   endif
+  endif
+"  call Dret("s:NetrwTgtMenu")
 endfun
 
 " ---------------------------------------------------------------------
@@ -6869,12 +7282,12 @@ fun! s:NetrwTreeDir()
 "  call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">")
 
   let treedir= b:netrw_curdir
-"  call Decho("set initial treedir<".treedir.">")
+"  call Decho("(NetrwTreeDir) set initial treedir<".treedir.">")
   let s:treecurpos= netrw#NetrwSavePosn()
 
   if w:netrw_liststyle == s:TREELIST
-"   call Decho("w:netrrw_liststyle is TREELIST:")
-"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
+"   call Decho("(NetrwTreeDir) w:netrw_liststyle is TREELIST:")
+"   call Decho("(NetrwTreeDir) line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
 
    " extract tree directory if on a line specifying a subdirectory (ie. ends with "/")
    if getline('.') =~ '/$'
@@ -6882,13 +7295,13 @@ fun! s:NetrwTreeDir()
    else
     let treedir= ""
    endif
-"   call Decho("treedir<".treedir.">")
+"   call Decho("(NetrwTreeDir) treedir<".treedir.">")
 
    " detect user attempting to close treeroot
    if getline('.') !~ '|' && getline('.') != '..'
 "    call Decho("user attempted to close treeroot")
     " now force a refresh
-"    call Decho("clear buffer<".expand("%")."> with :%d")
+"    call Decho("(NetrwTreeDir) clear buffer<".expand("%")."> with :%d")
     sil! keepj %d
 "    call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
     return b:netrw_curdir
@@ -6896,26 +7309,26 @@ fun! s:NetrwTreeDir()
 
    " elide all non-depth information
    let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
-"   call Decho("depth<".depth."> 1st subst (non-depth info removed)")
+"   call Decho("(NetrwTreeDir) depth<".depth."> 1st subst (non-depth info removed)")
 
    " elide first depth
    let depth = substitute(depth,'^| ','','')
-"   call Decho("depth<".depth."> 2nd subst (first depth removed)")
+"   call Decho("(NetrwTreeDir) depth<".depth."> 2nd subst (first depth removed)")
 
    " construct treedir by searching backwards at correct depth
-"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
+"   call Decho("(NetrwTreeDir) constructing treedir<".treedir."> depth<".depth.">")
    while depth != "" && search('^'.depth.'[^|].\{-}/$','bW')
     let dirname= substitute(getline('.'),'^\(| \)*','','e')
     let treedir= dirname.treedir
     let depth  = substitute(depth,'^| ','','')
-"    call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
+"    call Decho("(NetrwTreeDir) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
    endwhile
    if w:netrw_treetop =~ '/$'
     let treedir= w:netrw_treetop.treedir
    else
     let treedir= w:netrw_treetop.'/'.treedir
    endif
-"   call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
+"   call Decho("(NetrwTreeDir) bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
   endif
   let treedir= substitute(treedir,'//$','/','')
 
@@ -6929,7 +7342,7 @@ fun! s:NetrwTreeDisplay(dir,depth)
 "  call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)")
 
   " insure that there are no folds
-  setlocal nofen
+  setl nofen
 
   " install ../ and shortdir
   if a:depth == ""
@@ -7033,8 +7446,8 @@ fun! s:NetrwWideListing()
    " cpf: characters per filename
    " fpl: filenames per line
    " fpc: filenames per column
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
+   setl ma noro
+"   call Decho("setl ma noro")
    let b:netrw_cpf= 0
    if line("$") >= w:netrw_bannercnt
     exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
@@ -7091,28 +7504,28 @@ fun! s:PerformListing(islocal)
 "  call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">")
 
   " set up syntax highlighting {{{3
-"  call Decho("set up syntax highlighting")
+"  call Decho("(PerformListing) set up syntax highlighting")
   if has("syntax")
    if !exists("g:syntax_on") || !g:syntax_on
-"    call Decho("but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>"))
-    setlocal ft=
+"    call Decho("(PerformListing) but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>"))
+    setl ft=
    elseif &ft != "netrw"
-    setlocal ft=netrw
+    setl ft=netrw
    endif
   endif
 
   keepj call s:NetrwSafeOptions()
-  setlocal noro ma
-"  call Decho("setlocal noro ma")
+  set noro ma
+"  call Decho("(PerformListing) setl noro ma bh=".&bh)
 
 "  if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1	" Decho
-"   call Decho("(netrw) Processing your browsing request...")
+"   call Decho("(PerformListing) (netrw) Processing your browsing request...")
 "  endif								" Decho
 
 "  call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'))
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
    " force a refresh for tree listings
-"   call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
+"   call Decho("(PerformListing) force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
    sil! keepj %d
   endif
 
@@ -7121,7 +7534,7 @@ fun! s:PerformListing(islocal)
 
   " Set up the banner {{{3
   if g:netrw_banner
-"   call Decho("set up banner")
+"   call Decho("(PerformListing) set up banner")
    keepj call setline(1,'" ============================================================================')
    keepj call setline(2,'" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')')
    keepj call setline(3,'"   '.b:netrw_curdir)
@@ -7139,15 +7552,15 @@ fun! s:PerformListing(islocal)
 
   " Sorted by... {{{3
   if g:netrw_banner
-"   call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
+"   call Decho("(PerformListing) handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
    if g:netrw_sort_by =~ "^n"
-"   call Decho("directories will be sorted by name")
+"   call Decho("(PerformListing) directories will be sorted by name")
     " sorted by name
     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")
+"   call Decho("(PerformListing) directories will be sorted by size or time")
     " sorted by size or date
     keepj put ='\"   Sorted by '.sortby
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
@@ -7158,7 +7571,7 @@ fun! s:PerformListing(islocal)
   " 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.">")
+"    call Decho("(PerformListing) show copy/move target<".s:netrwmftgt.">")
     keepj put =''
     if s:netrwmftgt_islocal
      sil! keepj call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
@@ -7167,14 +7580,14 @@ fun! s:PerformListing(islocal)
     endif
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
    else
-"    call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
+"    call Decho("(PerformListing) s:netrwmftgt does not exist, don't make Copy/Move Tgt")
    endif
    exe "sil! keepj ".w:netrw_bannercnt
   endif
 
   " Hiding...  -or-  Showing... {{{3
   if g:netrw_banner
-"   call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
+"   call Decho("(PerformListing) 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
      keepj put ='\"   Hiding:        '.g:netrw_list_hide
@@ -7193,37 +7606,37 @@ fun! s:PerformListing(islocal)
   if g:netrw_banner
    let w:netrw_bannercnt= w:netrw_bannercnt + 1
    exe "sil! keepj ".w:netrw_bannercnt
-"   call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
+"   call Decho("(PerformListing) bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
   endif
 
   " get list of files
-"  call Decho("Get list of files - islocal=".a:islocal)
+"  call Decho("(PerformListing) Get list of files - islocal=".a:islocal)
   if a:islocal
    keepj call s:LocalListing()
   else " remote
    keepj call s:NetrwRemoteListing()
   endif
-"  call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
+"  call Decho("(PerformListing) g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
 
   " manipulate the directory listing (hide, sort) {{{3
   if !exists("w:netrw_bannercnt")
    let w:netrw_bannercnt= 0
   endif
   if !g:netrw_banner || line("$") >= w:netrw_bannercnt
-"   call Decho("manipulate directory listing (hide)")
-"   call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+"   call Decho("(PerformListing) manipulate directory listing (hide)")
+"   call Decho("(PerformListing) g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
    if g:netrw_hide && g:netrw_list_hide != ""
     keepj call s:NetrwListHide()
    endif
    if !g:netrw_banner || line("$") >= w:netrw_bannercnt
-"    call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
+"    call Decho("(PerformListing) manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
 
     if g:netrw_sort_by =~ "^n"
      " sort by name
      keepj call s:NetrwSetSort()
 
      if !g:netrw_banner || w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
+"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
       if g:netrw_sort_direction =~ 'n'
        " normal direction sorting
        exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
@@ -7233,13 +7646,13 @@ fun! s:PerformListing(islocal)
       endif
      endif
      " remove priority pattern prefix
-"     call Decho("remove priority pattern prefix")
+"     call Decho("(PerformListing) remove priority pattern prefix")
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
      keepj call histdel("/",-1)
 
     elseif a:islocal
      if !g:netrw_banner || w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
+"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction)
       if g:netrw_sort_direction =~ 'n'
 "       call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort')
        exe 'sil! keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
@@ -7262,30 +7675,30 @@ fun! s:PerformListing(islocal)
   endif
 
   " convert to wide/tree listing {{{3
-"  call Decho("modify display if wide/tree listing style")
+"  call Decho("(PerformListing) modify display if wide/tree listing style")
   keepj call s:NetrwWideListing()
   keepj call s:NetrwTreeListing(b:netrw_curdir)
 
   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")
+"   call Decho("(PerformListing) place cursor on top-left corner of file listing")
    exe 'sil! keepj '.w:netrw_bannercnt
    sil! keepj norm! 0
   endif
 
   " record previous current directory
   let w:netrw_prvdir= b:netrw_curdir
-"  call Decho("record netrw_prvdir<".w:netrw_prvdir.">")
+"  call Decho("(PerformListing) record netrw_prvdir<".w:netrw_prvdir.">")
 
   " save certain window-oriented variables into buffer-oriented variables {{{3
   keepj call s:SetBufWinVars()
   keepj call s:NetrwOptionRestore("w:")
 
   " set display to netrw display settings
-"  call Decho("set display to netrw display settings (noma nomod etc)")
+"  call Decho("(PerformListing) set display to netrw display settings (".g:netrw_bufsettings.")")
   exe "setl ".g:netrw_bufsettings
   if g:netrw_liststyle == s:LONGLIST
-"   call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
+"   call Decho("(PerformListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
    exe "setl ts=".(g:netrw_maxfilenamelen+1)
   endif
   if exists("s:treecurpos")
@@ -7333,7 +7746,7 @@ fun! s:SetupNetrwStatusLine(statline)
   " insure that windows have a statusline
   " make sure statusline is displayed
   let &stl=a:statline
-  setlocal laststatus=2
+  setl laststatus=2
 "  call Decho("stl=".&stl)
   redraw
 
@@ -7634,7 +8047,6 @@ fun! s:NetrwRemoteRmFile(path,rmfile,all
     endif
    elseif ok =~ 'q\%[uit]'
 "    call Decho("ok==".ok)
-    break
    endif
 
   else
@@ -7677,7 +8089,7 @@ fun! s:NetrwRemoteRmFile(path,rmfile,all
     endif
 
    elseif ok =~ 'q\%[uit]'
-    break
+"    call Decho("ok==".ok)
    endif
   endif
 
@@ -7696,8 +8108,8 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
 
   " because WinXX ftp uses unix style input
   let ffkeep= &ff
-  setlocal ma ff=unix noro
-"  call Decho("setlocal ma ff=unix noro")
+  setl ma ff=unix noro
+"  call Decho("setl ma ff=unix noro")
 
   " clear off any older non-banner lines
   " note that w:netrw_bannercnt indexes the line after the banner
@@ -7727,7 +8139,7 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
    ".........................................
   elseif w:netrw_method == 3
    " ftp + machine,id,passwd,filename:  Method #3
-    setlocal ff=unix
+    setl ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
     else
@@ -7923,7 +8335,8 @@ fun! netrw#FileUrlRead(fname)
 "  call Decho("plainfname<".plainfname.">")
   exe "sil doau BufReadPre ".fname2396e
   exe 'keepj r '.plainfname
-  exe 'file! '.plainfname
+  exe 'sil! bdelete '.plainfname
+  exe 'keepalt file! '.plainfname
   keepj 1d
 "  call Decho("(FileUrlRead) setl nomod")
   setl nomod
@@ -7942,22 +8355,22 @@ fun! netrw#LocalBrowseCheck(dirname)
   " The &ft == "netrw" test was installed because the BufEnter event
   " would hit when re-entering netrw windows, creating unexpected
   " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
-"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
+"  call Decho("(LocalBrowseCheck) isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
 "  call Dredir("LocalBrowseCheck","ls!")|redraw!|sleep 3
   let ykeep= @@
   if isdirectory(a:dirname)
-"   call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse)
+"   call Decho("(LocalBrowseCheck) ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse)
    let svposn= netrw#NetrwSavePosn()
    if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) || g:netrw_fastbrowse <= 1
-    sil! keepj call s:NetrwBrowse(1,a:dirname)
-    call netrw#NetrwRestorePosn(svposn)
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    elseif &ft == "netrw" && line("$") == 1
-    sil! keepj call s:NetrwBrowse(1,a:dirname)
-    call netrw#NetrwRestorePosn(svposn)
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    elseif exists("s:treeforceredraw")
     unlet s:treeforceredraw
-    sil! keepj call s:NetrwBrowse(1,a:dirname)
-    call netrw#NetrwRestorePosn(svposn)
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    endif
   endif
   " following code wipes out currently unused netrw buffers
@@ -7968,7 +8381,7 @@ fun! netrw#LocalBrowseCheck(dirname)
    let buflast = bufnr("$")
    while ibuf <= buflast
     if bufwinnr(ibuf) == -1 && isdirectory(bufname(ibuf))
-     exe "sil! ".ibuf."bw!"
+     exe "sil! keepalt ".ibuf."bw!"
     endif
     let ibuf= ibuf + 1
    endwhile
@@ -7984,74 +8397,36 @@ fun! s:LocalListing()
 "  call Decho("(LocalListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "  call Decho("(LocalListing) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 
-"  if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("b:netrw_curdir doesn't exist") |endif
-"  if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
+"  if exists("b:netrw_curdir") |call Decho('(LocalListing) b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("(LocalListing) b:netrw_curdir doesn't exist") |endif
+"  if exists("g:netrw_sort_by")|call Decho('(LocalListing) g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("(LocalListing) g:netrw_sort_by doesn't exist")|endif
 
   " get the list of files contained in the current directory
   let dirname    = b:netrw_curdir
   let dirnamelen = s:Strlen(b:netrw_curdir)
-  let filelist   = glob(s:ComposePath(dirname,"*"))
-"  call Decho("(LocalListing) glob(dirname<".dirname."/*>)=".filelist)
-  if filelist != ""
-   let filelist= filelist."\n"
-  endif
-  let filelist= filelist.glob(s:ComposePath(dirname,".*"))
-"  call Decho("(LocalListing) glob(dirname<".dirname."/.*>)=".filelist)
-
-  " Coding choice: either   elide   ./ if present
-  "                or       include ./ if not present
-  if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)'
-   " elide /path/. from glob() entries if present
-"   call Decho("(LocalListing) elide /path/. from glob entries if present")
-   let filelist = substitute(filelist,'\n','\t','g')
-   let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','')
-   let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'\t','\n','g')
-  endif
-"  call Decho("(LocalListing) filelist<".filelist.">")
-  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
+  let filelist   = glob(s:ComposePath(dirname,"*"),0,1)
+  let filelist   = filelist + glob(s:ComposePath(dirname,".*"),0,1)
+"  call Decho("(LocalListing) filelist=".filelist)
+
+  if index(filelist,'..') == -1 && b:netrw_curdir != '/'
     " include ../ in the glob() entry if its missing
-"    call Decho("(LocalListing) forcibly tacking on ..")
-   let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
-"   call Decho("(LocalListing) filelist<".filelist.">")
-  endif
-  if b:netrw_curdir == '/'
-   " remove .. from filelist when current directory is root directory
-"   call Decho("(LocalListing) remove .. from filelist")
-   let filelist= substitute(filelist,'/\.\.\n','','')
-  endif
-  " remove multiple contiguous newlines
-  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
-  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
-   " change all \s to /s
-"   call Decho('(LocalListing) change all \s to /s')
-   let filelist= substitute(filelist,'\','/','g')
-  else
-   " escape all \s to \\
-"   call Decho('(LocalListing) escape all \s to \\')
-   let filelist= substitute(filelist,'\','\\','g')
+"   call Decho("(LocalListing) forcibly tacking on \"..\"")
+   let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")]
+"   call Decho("(LocalListing) filelist=".string(filelist))
   endif
 
 "  call Decho("(LocalListing) (before while) dirname<".dirname.">")
 "  call Decho("(LocalListing) (before while) dirnamelen<".dirnamelen.">")
-"  call Decho("(LocalListing) (before while) filelist<".filelist.">")
-
+"  call Decho("(LocalListing) (before while) filelist=".string(filelist))
 
   if get(g:, 'netrw_dynamic_maxfilenamelen', 0)
-    let g:netrw_maxfilenamelen = max(map(split(filelist, '\n'), 'len(fnamemodify(v:val, ":t"))')) + 1
-  endif
-
-  while filelist != ""
-   if filelist =~ '\n'
-    let filename = substitute(filelist,'\n.*$','','e')
-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
-   else
-    let filename = filelist
-    let filelist = ""
-   endif
-"   call Decho(" ")
-"   call Decho("(LocalListing) (while) filelist<".filelist.">")
+   let filelistcopy           = map(deepcopy(filelist),'fnamemodify(v:val, ":t")')
+   let g:netrw_maxfilenamelen = max(map(filelistcopy,'len(v:val)')) + 1
+"   call Decho("(LocalListing) dynamic_maxfilenamelen: filenames             =".string(filelistcopy))
+"   call Decho("(LocalListing) dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen)
+  endif
+
+  for filename in filelist
+"   call Decho("(LocalListing)  ")
 "   call Decho("(LocalListing) (while) filename<".filename.">")
 
    if getftype(filename) == "link"
@@ -8117,7 +8492,7 @@ fun! s:LocalListing()
 
    if     g:netrw_sort_by =~ "^t"
     " sort by time (handles time up to 1 quintillion seconds, US)
-"    call Decho("getftime(".filename.")=".getftime(filename))
+"    call Decho("(LocalListing) getftime(".filename.")=".getftime(filename))
     let t  = getftime(filename)
     let ft = strpart("000000000000000000",1,18-strlen(t)).t
 "    call Decho("(LocalListing) exe keepjumps put ='".ft.'/'.filename."'")
@@ -8138,7 +8513,7 @@ fun! s:LocalListing()
 "    call Decho("(LocalListing) exe keepjumps put ='".pfile."'")
     sil! keepj put=pfile
    endif
-  endwhile
+  endfor
 
   " cleanup any windows mess at end-of-line
   sil! keepj g/^$/d
@@ -8182,25 +8557,25 @@ fun! s:LocalBrowseShellCmdRefresh()
    let itab       = itab + 1
    tabn
   endwhile
-"  call Decho("buftablist".string(buftablist))
-"  call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
+"  call Decho("(LocalBrowseShellCmdRefresh) buftablist".string(buftablist))
+"  call Decho("(LocalBrowseShellCmdRefresh) s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
   "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
   "   | refresh any netrw window
   "   | wipe out any non-displaying netrw buffer
   let curwin = winnr()
   let ibl    = 0
   for ibuf in s:netrw_browselist
-"   call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
+"   call Decho("(LocalBrowseShellCmdRefresh) bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
    if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
     " wipe out any non-displaying netrw buffer
-"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
+"    call Decho("(LocalBrowseShellCmdRefresh) wiping  buf#".ibuf,"<".bufname(ibuf).">")
     exe "sil! bd ".fnameescape(ibuf)
     call remove(s:netrw_browselist,ibl)
-"    call Decho("browselist=".string(s:netrw_browselist))
+"    call Decho("(LocalBrowseShellCmdRefresh) browselist=".string(s:netrw_browselist))
     continue
    elseif index(tabpagebuflist(),ibuf) != -1
     " refresh any netrw buffer
-"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
+"    call Decho("(LocalBrowseShellCmdRefresh) refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
     exe bufwinnr(ibuf)."wincmd w"
     keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
    endif
@@ -8229,15 +8604,15 @@ fun! s:LocalFastBrowser()
 
   " initialize browselist, a list of buffer numbers that the local browser has used
   if !exists("s:netrw_browselist")
-"   call Decho("initialize s:netrw_browselist")
+"   call Decho("(LocalFastBrowser) initialize s:netrw_browselist")
    let s:netrw_browselist= []
   endif
 
   " append current buffer to fastbrowse list
   if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
-"   call Decho("appendng current buffer to browselist")
+"   call Decho("(LocalFastBrowser) appendng current buffer to browselist")
    call add(s:netrw_browselist,bufnr("%"))
-"   call Decho("browselist=".string(s:netrw_browselist))
+"   call Decho("(LocalFastBrowser) browselist=".string(s:netrw_browselist))
   endif
 
   " enable autocmd events to handle refreshing/removing local browser buffers
@@ -8247,16 +8622,16 @@ fun! s:LocalFastBrowser()
   "                      =1 : medium speed, re-use directory listing for remote only
   "                      =2 : fast   speed, always re-use directory listing when possible
   if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
-"   call Decho("setting up local-browser shell command refresh")
+"   call Decho("(LocalFastBrowser) setting up local-browser shell command refresh")
    let s:netrw_browser_shellcmd= 1
    augroup AuNetrwShellCmd
     au!
     if (has("win32") || has("win95") || has("win64") || has("win16"))
-"     call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
+"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
      au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
     else
      au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
-"     call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
+"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
     endif
    augroup END
   endif
@@ -8264,7 +8639,7 @@ fun! s:LocalFastBrowser()
   " user must have changed fastbrowse to its fast setting, so remove
   " the associated autocmd events
   if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
-"   call Decho("remove AuNetrwShellCmd autcmd group")
+"   call Decho("(LocalFastBrowser) remove AuNetrwShellCmd autcmd group")
    unlet s:netrw_browser_shellcmd
    augroup AuNetrwShellCmd
     au!
@@ -8535,7 +8910,9 @@ fun! netrw#NetrwRestorePosn(...)
   let eikeep= &ei
   set ei=all
   if expand("%") == "NetrwMessage"
-   exe s:winBeforeErr."wincmd w"
+   if exists("s:winBeforeErr")
+    exe s:winBeforeErr."wincmd w"
+   endif
   endif
 
   if a:0 > 0
@@ -8544,7 +8921,7 @@ fun! netrw#NetrwRestorePosn(...)
 
   " restore window
   if exists("w:netrw_winnr")
-"   call Decho("restore window: exe sil! ".w:netrw_winnr."wincmd w")
+"   call Decho("(NetrwRestorePosn) restore window: exe sil! ".w:netrw_winnr."wincmd w")
    exe "sil! ".w:netrw_winnr."wincmd w"
   endif
   if v:shell_error == 0
@@ -8555,29 +8932,29 @@ fun! netrw#NetrwRestorePosn(...)
 
   " restore top-of-screen line
   if exists("w:netrw_hline")
-"   call Decho("restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z")
+"   call Decho("(NetrwRestorePosn) restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z")
    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 keepj norm! ".w:netrw_line."G0".w:netrw_col."|")
+"   call Decho("(NetrwRestorePosn) restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|")
    exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
   endif
 
   let &ei= eikeep
-"  call Dret("netrw#NetrwRestorePosn")
+"  call Dret("netrw#NetrwRestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
 endfun
 
 " ---------------------------------------------------------------------
 " netrw#NetrwSavePosn: saves position of cursor on screen {{{2
 fun! netrw#NetrwSavePosn()
-"  call Dfunc("netrw#NetrwSavePosn()")
+"  call Dfunc("netrw#NetrwSavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
   " Save current line and column
   let w:netrw_winnr= winnr()
   let w:netrw_line = line(".")
   let w:netrw_col  = virtcol(".")
-"  call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
+"  call Decho("(NetrwSavePosn) currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
 
   " Save top-of-screen line
   keepj norm! H0
@@ -8805,11 +9182,11 @@ fun! s:NetrwCursor()
    " thin-long-tree: cursorline, user's cursorcolumn
    " wide          : cursorline, cursorcolumn
    if w:netrw_liststyle == s:WIDELIST
-"    call Decho("case g:netrw_cursor==3 and wide: setlocal cul cuc")
+"    call Decho("case g:netrw_cursor==3 and wide: setl cul cuc")
     setl cursorline
     setl cursorcolumn
    else
-"    call Decho("case g:netrw_cursor==3 and not wide: setlocal cul (use user's cuc)")
+"    call Decho("case g:netrw_cursor==3 and not wide: setl cul (use user's cuc)")
     setl cursorline
     let &l:cursorcolumn   = s:netrw_usercuc
    endif
@@ -8817,7 +9194,7 @@ fun! s:NetrwCursor()
   elseif g:netrw_cursor == 2
    " thin-long-tree: cursorline, user's cursorcolumn
    " wide          : cursorline, user's cursorcolumn
-"   call Decho("case g:netrw_cursor==2: setlocal cuc (use user's cul)")
+"   call Decho("case g:netrw_cursor==2: setl cuc (use user's cul)")
    let &l:cursorcolumn = s:netrw_usercuc
    setl cursorline
 
@@ -8826,7 +9203,7 @@ fun! s:NetrwCursor()
    " wide          : cursorline,        user's cursorcolumn
    let &l:cursorcolumn = s:netrw_usercuc
    if w:netrw_liststyle == s:WIDELIST
-"    call Decho("case g:netrw_cursor==2 and wide: setlocal cul (use user's cuc)")
+"    call Decho("case g:netrw_cursor==2 and wide: setl cul (use user's cuc)")
     set cursorline
    else
 "    call Decho("case g:netrw_cursor==2 and not wide: (use user's cul,cuc)")
@@ -8868,7 +9245,7 @@ fun! s:NetrwDelete(path)
   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
    if exists("+shellslash")
     let sskeep= &shellslash
-    setlocal noshellslash
+    setl noshellslash
     let result      = delete(path)
     let &shellslash = sskeep
    else
@@ -8948,7 +9325,7 @@ fun! s:NetrwEnew(...)
    if b:netrw_curdir =~ '/$'
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
      file NetrwTreeListing
-     set bt=nowrite noswf
+     set bt=nowrite noswf bh=hide
      nno <silent> <buffer> [	:sil call <SID>TreeListMove('[')<cr>
      nno <silent> <buffer> ]	:sil call <SID>TreeListMove(']')<cr>
     else
@@ -8957,7 +9334,7 @@ fun! s:NetrwEnew(...)
    endif
   endif
 
-"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
+"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#")."> bh=".&bh)
 endfun
 
 " ---------------------------------------------------------------------
@@ -8977,7 +9354,7 @@ fun! s:NetrwInsureWinVars()
     endif
     let iwin= iwin + 1
    endwhile
-   exe curwin."wincmd w"
+   exe "keepalt ".curwin."wincmd w"
    if exists("winvars")
 "    call Decho("copying w#".iwin." window variables to w#".curwin)
     for k in keys(winvars)
@@ -9105,6 +9482,9 @@ endfun
 "
 "             s:nbcd_curpos_{bufnr('%')} is set up by s:NetrwBrowseChgDir()
 fun! s:NetrwRexplore(islocal,dirname)
+  if exists("s:netrwdrag")
+   return
+  endif
 "  call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">")
   if !exists("w:netrw_rexlocal")
 "   "   call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist")
@@ -9204,7 +9584,7 @@ endfun
 
 " ---------------------------------------------------------------------
 " s:Strlen: this function returns the length of a string, even if its {{{2
-"           using two-byte etc characters.
+"           using multiple-byte characters.
 "           Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck,
 "           and a bit from me.
 "           if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used.
@@ -9231,6 +9611,7 @@ fun! s:Strlen(x)
    call setline(line("."),a:x)
    let ret= virtcol("$") - 1
    keepj d
+   keepj norm! k
    let &mod= modkeep
 
   else
--- a/runtime/autoload/netrwFileHandlers.vim
+++ b/runtime/autoload/netrwFileHandlers.vim
@@ -1,9 +1,9 @@
 " netrwFileHandlers: contains various extension-based file handlers for
 "                    netrw's browsers' x command ("eXecute launcher")
-" Author:	Charles E. Campbell, Jr.
+" Author:	Charles E. Campbell
 " Date:		Mar 14, 2012
 " Version:	11a
-" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
--- a/runtime/autoload/netrwSettings.vim
+++ b/runtime/autoload/netrwSettings.vim
@@ -1,8 +1,8 @@
 " netrwSettings.vim: makes netrw settings simpler
 " Date:		Sep 03, 2008
-" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+" Maintainer:	Charles E Campbell <drchipNOSPAM at campbellfamily dot biz>
 " Version:	13
-" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -63,7 +63,7 @@ fun! netrwSettings#NetrwSettings()
   endif
 
   put ='+ ---------------------------------------------'
-  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
+  put ='+  NetrwSettings:  by Charles E. Campbell'
   put ='+ Press <F1> with cursor atop any line for help'
   put ='+ ---------------------------------------------'
   let s:netrw_settings_stop= line(".")
--- a/runtime/autoload/tar.vim
+++ b/runtime/autoload/tar.vim
@@ -1,13 +1,13 @@
 " tar.vim: Handles browsing tarfiles
 "            AUTOLOAD PORTION
-" Date:			Jan 17, 2012
-" Version:		28
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:			Apr 17, 2013
+" Version:		29
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
 "
 "	Contains many ideas from Michael Toren's <tar.vim>
 "
-" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -22,7 +22,7 @@
 if &cp || exists("g:loaded_tar")
  finish
 endif
-let g:loaded_tar= "v28"
+let g:loaded_tar= "v29"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of tar needs vim 7.2"
@@ -31,6 +31,7 @@ if v:version < 702
 endif
 let s:keepcpo= &cpo
 set cpo&vim
+"DechoTabOn
 "call Decho("loading autoload/tar.vim")
 
 " ---------------------------------------------------------------------
@@ -80,7 +81,7 @@ endif
 
 " set up shell quoting character
 if !exists("g:tar_shq")
- if exists("&shq") && &shq != ""
+ if exists("+shq") && exists("&shq") && &shq != ""
   let g:tar_shq= &shq
  elseif has("win32") || has("win95") || has("win64") || has("win16")
   if exists("g:netrw_cygwin") && g:netrw_cygwin
@@ -147,7 +148,7 @@ fun! tar#Browse(tarfile)
   keepj $
 
   let tarfile= a:tarfile
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
@@ -227,7 +228,7 @@ fun! s:TarBrowseSelect()
   " about to make a new window, need to use b:tarfile
   let tarfile= b:tarfile
   let curfile= expand("%")
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
@@ -239,6 +240,8 @@ fun! s:TarBrowseSelect()
   let s:tblfile_{winnr()}= curfile
   call tar#Read("tarfile:".tarfile.'::'.fname,1)
   filetype detect
+  set nomod
+  exe 'com! -buffer -nargs=? -complete=file TarDiff	:call tar#Diff(<q-args>,"'.fnameescape(fname).'")'
 
   let &report= repkeep
 "  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
@@ -252,7 +255,7 @@ fun! tar#Read(fname,mode)
   set report=10
   let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
   let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
@@ -425,7 +428,7 @@ fun! tar#Write(fname)
  
    if fname =~ '/'
     let dirpath = substitute(fname,'/[^/]\+$','','e')
-    if executable("cygpath")
+    if has("win32unix") && executable("cygpath")
      let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e')
     endif
     call mkdir(dirpath,"p")
@@ -445,7 +448,7 @@ fun! tar#Write(fname)
     let tar_secure= " "
    endif
    exe "w! ".fnameescape(fname)
-   if executable("cygpath")
+   if has("win32unix") && executable("cygpath")
     let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e')
    endif
  
@@ -501,6 +504,30 @@ fun! tar#Write(fname)
 endfun
 
 " ---------------------------------------------------------------------
+" tar#Diff: {{{2
+fun! tar#Diff(userfname,fname)
+"  call Dfunc("tar#Diff(userfname<".a:userfname."> fname<".a:fname.")")
+  let fname= a:fname
+  if a:userfname != ""
+   let fname= a:userfname
+  endif
+  if filereadable(fname)
+   " sets current file (from tarball) for diff'ing
+   " splits window vertically
+   " opens original file, sets it for diff'ing
+   " sets up b:tardiff_otherbuf variables so each buffer knows about the other (for closing purposes)
+   diffthis
+   wincmd v
+   exe "e ".fnameescape(fname)
+   diffthis
+  else
+   redraw!
+   echo "***warning*** unable to read file<".fname.">"
+  endif
+"  call Dret("tar#Diff")
+endfun
+
+" ---------------------------------------------------------------------
 " s:Rmdir: {{{2
 fun! s:Rmdir(fname)
 "  call Dfunc("Rmdir(fname<".a:fname.">)")
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,10 +1,10 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:		Jan 17, 2012
-" Version:	25
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:		Apr 17, 2013
+" Version:	26
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:	Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005-2012 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -19,7 +19,7 @@
 if &cp || exists("g:loaded_zip")
  finish
 endif
-let g:loaded_zip= "v25"
+let g:loaded_zip= "v26"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of zip needs vim 7.2"
@@ -188,13 +188,23 @@ fun! zip#Read(fname,mode)
   else
    let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
    let fname   = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
-   let fname = substitute(fname, '[', '[[]', 'g')
+   let fname   = substitute(fname, '[', '[[]', 'g')
   endif
 "  call Decho("zipfile<".zipfile.">")
 "  call Decho("fname  <".fname.">")
 
-"  call Decho("exe r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1))
-  exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
+  " the following code does much the same thing as
+  "   exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
+  " but allows zipfile:... entries in quickfix lists
+  let temp = tempname()
+  let fn   = expand('%:p')
+  exe "sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp
+"  call Decho("exe sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp)
+  sil exe 'keepalt file '.temp
+  sil keepj e!
+  sil exe 'keepalt file '.fnameescape(fn)
+  call delete(temp)
+
   filetype detect
 
   " cleanup
@@ -267,7 +277,7 @@ fun! zip#Write(fname)
 
   if fname =~ '/'
    let dirpath = substitute(fname,'/[^/]\+$','','e')
-   if executable("cygpath")
+   if has("win32unix") && executable("cygpath")
     let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
    endif
 "   call Decho("mkdir(dirpath<".dirpath.">,p)")
@@ -279,7 +289,7 @@ fun! zip#Write(fname)
 "  call Decho("zipfile<".zipfile."> fname<".fname.">")
 
   exe "w! ".fnameescape(fname)
-  if executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e')
   endif
 
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -1,4 +1,4 @@
-*pattern.txt*   For Vim version 7.3.  Last change: 2013 Jan 25
+*pattern.txt*   For Vim version 7.3.  Last change: 2013 Apr 20
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1061,6 +1061,8 @@ x	A single character, with no special me
 	  any character that's not in "^]-\bdertnoUux".  "[\xyz]" matches '\',
 	  'x', 'y' and 'z'.  It's better to use "\\" though, future expansions
 	  may use other characters after '\'.
+	- Omitting the trailing ] is not considered an error. "[]" works like
+	  "[]]", it matches the ']' character.
 	- The following translations are accepted when the 'l' flag is not
 	  included in 'cpoptions' {not in Vi}:
 		\e	<Esc>
--- a/runtime/doc/pi_getscript.txt
+++ b/runtime/doc/pi_getscript.txt
@@ -1,11 +1,11 @@
-*pi_getscript.txt*  For Vim version 7.0.  Last change: 2011 Jun 23
+*pi_getscript.txt*  For Vim version 7.0.  Last change: 2012 Apr 07
 >
-		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell, Jr.
+		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell
 <
-Authors:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamilyA.Mbiz>
+Authors:  Charles E. Campbell  <NdrOchip@ScampbellPfamilyA.Mbiz>
 	  (remove NOSPAM from the email address)
 						*GetLatestVimScripts-copyright*
-Copyright: (c) 2004-2012 by Charles E. Campbell, Jr.	*glvs-copyright*
+Copyright: (c) 2004-2012 by Charles E. Campbell	*glvs-copyright*
 	The VIM LICENSE (see |copyright|) applies to the files in this
 	package, including getscriptPlugin.vim, getscript.vim,
 	GetLatestVimScripts.dist, and pi_getscript.txt, except use "getscript"
@@ -343,6 +343,11 @@ 7. GetLatestVimScripts Options					*glvs
 	default= $HOME/vimfiles (windows)
 		Override where :AutoInstall: scripts will be installed.
 		Doesn't override vimball installation.
+>
+	g:GetLatestVimScripts_scriptaddr
+<       default='http://vim.sourceforge.net/script.php?script_id='
+		Override this if your system needs
+	  ...  ='http://vim.sourceforge.net/script/script.php?script_id='
 
 ==============================================================================
 8. GetLatestVimScripts Algorithm		*glvs-algorithm* *glvs-alg*
@@ -380,7 +385,11 @@ The AutoInstall process will:
 ==============================================================================
 9. GetLatestVimScripts History		*getscript-history* *glvs-hist* {{{1
 
-v44 Jun 23, 2011 : * handles additional decompression options for tarballs
+v35 Apr 07, 2012 : * (MengHuan Yu) pointed out that the script url has
+		     changed (somewhat).  However, it doesn't work, and
+		     the original one does (under Linux). I'll make it
+		     yet-another-option.
+v34 Jun 23, 2011 : * handles additional decompression options for tarballs
                      (tgz taz tbz txz)
 v33 May 31, 2011 : * using fnameescape() instead of escape()
 		   * *.xz support
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,12 +1,12 @@
-*pi_netrw.txt*  For Vim version 7.3.  Last change: 2012 Oct 25
-
-	    -----------------------------------------------------
-	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
-	    -----------------------------------------------------
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+*pi_netrw.txt*  For Vim version 7.3.  Last change: 2013 Apr 19
+
+	    ------------------------------------------------
+	    NETRW REFERENCE MANUAL    by Charles E. Campbell
+	    ------------------------------------------------
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
 
-Copyright: Copyright (C) 1999-2012 Charles E Campbell, Jr    *netrw-copyright*
+Copyright: Copyright (C) 1999-2013 Charles E Campbell    *netrw-copyright*
 	The VIM LICENSE applies to the files in this package, including
 	netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and
 	syntax/netrw.vim.  Like anything else that's free, netrw.vim and its
@@ -25,83 +25,87 @@ Copyright: Copyright (C) 1999-2012 Charl
 ==============================================================================
 1. Contents						*netrw-contents* {{{1
 
-1.  Contents.............................................|netrw-contents|
-2.  Starting With Netrw..................................|netrw-start|
-3.  Netrw Reference......................................|netrw-ref|
-      EXTERNAL APPLICATIONS AND PROTOCOLS................|netrw-externapp|
-      READING............................................|netrw-read|
-      WRITING............................................|netrw-write|
-      SOURCING...........................................|netrw-source|
-      DIRECTORY LISTING..................................|netrw-dirlist|
-      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
-      VARIABLES AND SETTINGS.............................|netrw-variables|
-      PATHS..............................................|netrw-path|
-4.  Network-Oriented File Transfer.......................|netrw-xfer|
-      NETRC..............................................|netrw-netrc|
-      PASSWORD...........................................|netrw-passwd|
-5.  Activation...........................................|netrw-activate|
-6.  Transparent Remote File Editing......................|netrw-transparent|
-7.  Ex Commands..........................................|netrw-ex|
-8.  Variables and Options................................|netrw-variables|
-9.  Browsing.............................................|netrw-browse|
-      Introduction To Browsing...........................|netrw-intro-browse|
-      Quick Reference: Maps..............................|netrw-browse-maps|
-      Quick Reference: Commands..........................|netrw-browse-cmds|
-      Bookmarking A Directory............................|netrw-mb|
-      Browsing...........................................|netrw-cr|
-      Browsing With A Horizontally Split Window..........|netrw-o|
-      Browsing With A New Tab............................|netrw-t|
-      Browsing With A Vertically Split Window............|netrw-v|
-      Change Listing Style.(thin wide long tree).........|netrw-i|
-      Changing To A Bookmarked Directory.................|netrw-gb|
-      Changing To A Predecessor Directory................|netrw-u|
-      Changing To A Successor Directory..................|netrw-U|
-      Customizing Browsing With A User Function..........|netrw-x|
-      Deleting Bookmarks.................................|netrw-mB|
-      Deleting Files Or Directories......................|netrw-D|
-      Directory Exploring Commands.......................|netrw-explore|
-      Exploring With Stars and Patterns..................|netrw-star|
-      Displaying Information About File..................|netrw-qf|
-      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
-      Editing The Sorting Sequence.......................|netrw-S|
-      Forcing treatment as a file or directory...........|netrw-gd| |netrw-gf|
-      Going Up...........................................|netrw--|
-      Hiding Files Or Directories........................|netrw-a|
-      Improving Browsing.................................|netrw-ssh-hack|
-      Listing Bookmarks And History......................|netrw-qb|
-      Making A New Directory.............................|netrw-d|
-      Making The Browsing Directory The Current Directory|netrw-c|
-      Marking Files......................................|netrw-mf|
-      Marking Files By Regular Expression................|netrw-mr|
-      Marked Files: Arbitrary Command....................|netrw-mx|
-      Marked Files: Compression And Decompression........|netrw-mz|
-      Marked Files: Copying..............................|netrw-mc|
-      Marked Files: Diff.................................|netrw-md|
-      Marked Files: Editing..............................|netrw-me|
-      Marked Files: Grep.................................|netrw-mg|
-      Marked Files: Hiding and Unhiding by Suffix........|netrw-mh|
-      Marked Files: Moving...............................|netrw-mm|
-      Marked Files: Printing.............................|netrw-mp|
-      Marked Files: Sourcing.............................|netrw-ms|
-      Marked Files: Tagging..............................|netrw-mT|
-      Marked Files: Setting the Target Directory.........|netrw-mt|
-      Marked Files: Unmarking............................|netrw-mu|
-      Netrw Browser Variables............................|netrw-browser-var|
-      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
-      Netrw Settings Window..............................|netrw-settings-window|
-      Obtaining A File...................................|netrw-O|
-      Preview Window.....................................|netrw-p|
-      Previous Window....................................|netrw-P|
-      Refreshing The Listing.............................|netrw-ctrl-l|
-      Renaming Files Or Directories......................|netrw-move|
-      Reversing Sorting Order............................|netrw-r|
-      Selecting Sorting Style............................|netrw-s|
-      Setting Editing Window.............................|netrw-C|
-10. Problems and Fixes...................................|netrw-problems|
-11. Debugging Netrw Itself...............................|netrw-debug|
-12. History..............................................|netrw-history|
-13. Todo.................................................|netrw-todo|
-14. Credits..............................................|netrw-credits|
+1.  Contents..............................................|netrw-contents|
+2.  Starting With Netrw...................................|netrw-start|
+3.  Netrw Reference.......................................|netrw-ref|
+      EXTERNAL APPLICATIONS AND PROTOCOLS.................|netrw-externapp|
+      READING.............................................|netrw-read|
+      WRITING.............................................|netrw-write|
+      SOURCING............................................|netrw-source|
+      DIRECTORY LISTING...................................|netrw-dirlist|
+      CHANGING THE USERID AND PASSWORD....................|netrw-chgup|
+      VARIABLES AND SETTINGS..............................|netrw-variables|
+      PATHS...............................................|netrw-path|
+4.  Network-Oriented File Transfer........................|netrw-xfer|
+      NETRC...............................................|netrw-netrc|
+      PASSWORD............................................|netrw-passwd|
+5.  Activation............................................|netrw-activate|
+6.  Transparent Remote File Editing.......................|netrw-transparent|
+7.  Ex Commands...........................................|netrw-ex|
+8.  Variables and Options.................................|netrw-variables|
+9.  Browsing..............................................|netrw-browse|
+      Introduction To Browsing............................|netrw-intro-browse|
+      Quick Reference: Maps...............................|netrw-browse-maps|
+      Quick Reference: Commands...........................|netrw-browse-cmds|
+      Bookmarking A Directory.............................|netrw-mb|
+      Browsing............................................|netrw-cr|
+      Browsing With A Horizontally Split Window...........|netrw-o|
+      Browsing With A New Tab.............................|netrw-t|
+      Browsing With A Vertically Split Window.............|netrw-v|
+      Change Listing Style.(thin wide long tree)..........|netrw-i|
+      Changing To A Bookmarked Directory..................|netrw-gb|
+      Changing To A Predecessor Directory.................|netrw-u|
+      Changing To A Successor Directory...................|netrw-U|
+      Customizing Browsing With A User Function...........|netrw-x|
+      Deleting Bookmarks..................................|netrw-mB|
+      Deleting Files Or Directories.......................|netrw-D|
+      Directory Exploring Commands........................|netrw-explore|
+      Exploring With Stars and Patterns...................|netrw-star|
+      Displaying Information About File...................|netrw-qf|
+      Edit File Or Directory Hiding List..................|netrw-ctrl-h|
+      Editing The Sorting Sequence........................|netrw-S|
+      Forcing treatment as a file or directory............|netrw-gd| |netrw-gf|
+      Going Up............................................|netrw--|
+      Hiding Files Or Directories.........................|netrw-a|
+      Improving Browsing..................................|netrw-ssh-hack|
+      Listing Bookmarks And History.......................|netrw-qb|
+      Making A New Directory..............................|netrw-d|
+      Making The Browsing Directory The Current Directory.|netrw-c|
+      Marking Files.......................................|netrw-mf|
+      Unmarking Files.....................................|netrw-mF|
+      Marking Files By QuickFix List......................|netrw-qF|
+      Marking Files By Regular Expression.................|netrw-mr|
+      Marked Files: Arbitrary Command.....................|netrw-mx|
+      Marked Files: Compression And Decompression.........|netrw-mz|
+      Marked Files: Copying...............................|netrw-mc|
+      Marked Files: Diff..................................|netrw-md|
+      Marked Files: Editing...............................|netrw-me|
+      Marked Files: Grep..................................|netrw-mg|
+      Marked Files: Hiding and Unhiding by Suffix.........|netrw-mh|
+      Marked Files: Moving................................|netrw-mm|
+      Marked Files: Printing..............................|netrw-mp|
+      Marked Files: Sourcing..............................|netrw-ms|
+      Marked Files: Setting the Target Directory..........|netrw-mt|
+      Marked Files: Tagging...............................|netrw-mT|
+      Marked Files: Target Directory Using Bookmarks......|netrw-Tb|
+      Marked Files: Target Directory Using History........|netrw-Th|
+      Marked Files: Unmarking.............................|netrw-mu|
+      Netrw Browser Variables.............................|netrw-browser-var|
+      Netrw Browsing And Option Incompatibilities.........|netrw-incompatible|
+      Netrw Settings Window...............................|netrw-settings-window|
+      Obtaining A File....................................|netrw-O|
+      Preview Window......................................|netrw-p|
+      Previous Window.....................................|netrw-P|
+      Refreshing The Listing..............................|netrw-ctrl-l|
+      Reversing Sorting Order.............................|netrw-r|
+      Renaming Files Or Directories.......................|netrw-R|
+      Selecting Sorting Style.............................|netrw-s|
+      Setting Editing Window..............................|netrw-C|
+10. Problems and Fixes....................................|netrw-problems|
+11. Debugging Netrw Itself................................|netrw-debug|
+12. History...............................................|netrw-history|
+13. Todo..................................................|netrw-todo|
+14. Credits...............................................|netrw-credits|
 
 {Vi does not have any of this}
 
@@ -142,7 +146,7 @@ and has lines resembling >
 <
 Windows' ftp doesn't support .netrc; however, one may have in one's .vimrc:  >
 
-	let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
+   let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
 <
 Netrw will substitute the host's machine name for MACHINE from the url it is
 attempting to open, and so one may specify >
@@ -282,7 +286,7 @@ SOURCING					*netrw-source* {{{2
 	:Nsource "scp://[user@]machine[[:#]port]/path"	uses scp
 	:Nsource "sftp://[user@]machine/path"		uses sftp
 
-DIRECTORY LISTING				*netrw-trailingslash* *netrw-dirlist* {{{2
+DIRECTORY LISTING			*netrw-trailingslash* *netrw-dirlist* {{{2
 
 	One may browse a directory to get a listing by simply attempting to
 	edit the directory: >
@@ -538,8 +542,8 @@ netrw will substitute the current machin
 for MACHINE.  Hence one can have multiple machine.ftp files containing login
 and password for ftp.  Example: >
 
-	let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
-	vim ftp://myhost.somewhere.net/
+    let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
+    vim ftp://myhost.somewhere.net/
 will use a file >
 	C:\Users\Myself\myhost.ftp
 <
@@ -1086,8 +1090,8 @@ QUICK REFERENCE: MAPS				*netrw-browse-m
 	<2-leftmouse>	(gvim only) when:
 	                 * in a netrw-selected file, AND
 		         * |g:netrw_retmap| == 1     AND
-		         * the user doesn't already have a <2-leftmouse> mapping
-			   defined before netrw is autoloaded,
+		         * the user doesn't already have a <2-leftmouse>
+			   mapping defined before netrw is autoloaded,
 			then a double clicked leftmouse button will return
 			to the netrw browser window.  See |g:netrw_retmap|.
 	<s-leftmouse>	(gvim only) like mf, will mark files
@@ -1183,17 +1187,18 @@ cursor at the top.
 
 Associated setting variables: |g:netrw_alto| |g:netrw_winsize|
 
-Related Actions |netrw-cr| |netrw-p| |netrw-t| |netrw-T| |netrw-v|
+Related Actions |netrw-cr| |netrw-p| |netrw-t| |netrw-v|
 Associated setting variables:
    |g:netrw_alto|    control above/below splitting
    |g:netrw_winsize| control initial sizing
 
-BROWSING WITH A NEW TAB				*netrw-t* *netrw-T* {{{2
+BROWSING WITH A NEW TAB				*netrw-t*
 
 Normally one enters a file or directory using the <cr>.  The "t" map
 allows one to open a new window holding the new directory listing or file in
-a new tab.  The "T" version puts the file or directory into a background tab
-(see |gT|)
+a new tab.
+
+If you'd like to have the new listing in a background tab, use |gT|.
 
 Related Actions |netrw-cr| |netrw-o| |netrw-p| |netrw-v|
 Associated setting variables:
@@ -1213,7 +1218,7 @@ will split the screen, but the same buff
 
 Associated setting variable: |g:netrw_altv| |g:netrw_winsize|
 
-Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-T| |netrw-v|
+Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
 Associated setting variables:
    |g:netrw_altv|    control right/left splitting
    |g:netrw_winsize| control initial sizing
@@ -1276,6 +1281,8 @@ To change directory back to a bookmarked
 	{cnt}gb
 
 Any count may be used to reference any of the bookmarks.
+Note that |netrw-qb| shows both bookmarks and history; to go
+to a location stored in the history see |netrw-u| and |netrw-U|.
 
 Related Topics:
 	|netrw-mB| how to delete bookmarks
@@ -1291,6 +1298,13 @@ list (unless |g:netrw_dirhistmax| is zer
 "u" map, one can change to an earlier directory (predecessor).  To do
 the opposite, see |netrw-U|.
 
+The "u" map also accepts counts to go back in the history several slots.
+For your convenience, |netrw-qb| lists the history number which can be
+re-used in that count.
+
+See |g:netrw_dirhistmax| for how to control the quantity of history stack
+slots.
+
 
 CHANGING TO A SUCCESSOR DIRECTORY		*netrw-U* *netrw-downdir* {{{2
 
@@ -1298,6 +1312,11 @@ With the "U" map, one can change to a la
 This map is the opposite of the "u" map. (see |netrw-u|)  Use the
 q map to list both the bookmarks and history. (see |netrw-qb|)
 
+The "U" map also accepts counts to go forward in the history several slots.
+
+See |g:netrw_dirhistmax| for how to control the quantity of history stack
+slots.
+
 
 NETRW CLEAN					*netrw-clean* *:NetrwClean*
 
@@ -1674,7 +1693,7 @@ As a quick shortcut, one may press >
 to toggle between hiding files which begin with a period (dot) and not hiding
 them.
 
-Associated setting variable: |g:netrw_list_hide|
+Associated setting variable: |g:netrw_list_hide|  |g:netrw_hide|
 Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|
 
 IMPROVING BROWSING			*netrw-listhack* *netrw-ssh-hack* {{{2
@@ -1785,9 +1804,10 @@ Associated setting variables:	|g:netrw_l
 MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* {{{2
 
 By default, |g:netrw_keepdir| is 1.  This setting means that the current
-directory will not track the browsing directory.
-
-Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
+directory will not track the browsing directory. (done for backwards
+compatibility with v6's file explorer).
+
+Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory
 track netrw's browsing directory.
 
 However, given the default setting for g:netrw_keepdir of 1 where netrw
@@ -1810,6 +1830,7 @@ maps make use of marked files:
     |netrw-mc|	Copy marked files to target
     |netrw-md|	Apply vimdiff to marked files
     |netrw-me|	Edit marked files
+    |netrw-mF|	Unmark marked files
     |netrw-mg|	Apply vimgrep to marked files
     |netrw-mm|	Move marked files
     |netrw-mp|	Print marked files
@@ -1817,6 +1838,7 @@ maps make use of marked files:
     |netrw-mT|	Generate tags using marked files
     |netrw-mx|	Apply shell command to marked files
     |netrw-mz|	Compress/Decompress marked files
+    |netrw-qF|	Mark files using quickfix list
     |netrw-O|	Obtain marked files
     |netrw-R|	Rename marked files
 
@@ -1844,6 +1866,22 @@ commands which operate on marked files u
 lists.
 
 
+UNMARKING FILES							*netrw-mF* {{{2
+	(also see |netrw-mf|)
+
+This command will unmark all files in the current buffer.  One may also use
+mf (|netrw-mf|) on a specific file to unmark just that file.
+
+
+MARKING FILES BY QUICKFIX LIST				*netrw-qF*
+	(also see |netrw-mf|)
+
+One may convert the |quickfix-error-lists| into a marked file list using
+"qF".  You may then proceed with commands such as me (|netrw-me|) to
+edit them.  Quickfix error lists are generated, for example, by calls
+to |:vimgrep|.
+
+
 MARKING FILES BY REGULAR EXPRESSION				*netrw-mr* {{{2
 	(also see |netrw-mf|)
 
@@ -1902,17 +1940,27 @@ MARKED FILES: EDITING						*netrw-me* {{
 
 This command will place the marked files on the |arglist| and commence
 editing them.  One may return the to explorer window with |:Rexplore|.
+(use |:n| and |:p| to edit next and previous files in the arglist)
 
 MARKED FILES: GREP						*netrw-mg* {{{2
 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
 		      (uses the global marked file list)
 
-This command will apply |:vimgrep| to the marked files.  The command will ask
-for the requested pattern; one may enter: >
+This command will apply |:vimgrep| to the marked files.
+The command will ask for the requested pattern; one may then enter: >
+
 	/pattern/[g][j]
 	! /pattern/[g][j]
 	pattern
 <
+In the cases of "j" option usage as shown above, "mg" will winnow the current
+marked file list to just those possessing the specified pattern.
+Thus, one may use >
+	mr ...file-pattern
+	mg ..contents-pattern
+to have a marked file list satisfying the file-pattern but containing the
+desried contents-pattern.
+
 MARKED FILES: HIDING AND UNHIDING BY SUFFIX			*netrw-mh* {{{2
 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
 		      (uses the local marked file list)
@@ -1958,6 +2006,36 @@ MARKED FILES: SOURCING						*netrw-ms* {
 Netrw will source the marked files (using vim's |:source| command)
 
 
+MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
+     (See |netrw-mf| and |netrw-mr| for how to mark files)
+
+Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
+
+  * If the cursor is atop a file name, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+
+  * Also, if the cursor is in the banner, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+    Unless the target already is the current directory.  In which case,
+    remove the target.
+
+  * However, if the cursor is atop a directory name, then that directory is
+    used for the copy/move-to target
+
+There is only one copy/move-to target per vim session; ie. the target is a
+script variable (see |s:var|) and is shared between all netrw windows (in an
+instance of vim).
+
+When using menus and gvim, netrw provides a "Targets" entry which allows one
+to pick a target from the list of bookmarks and history.
+
+Related topics:
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
+      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
+      Marked Files: Target Directory Using History.......|netrw-Th|
+
+
 MARKED FILES: TAGGING						*netrw-mT* {{{2
 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
 		      (uses the global marked file list)
@@ -1983,24 +2061,37 @@ edit the desired file and go to the tag.
 
 Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|
 
-
-MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
-     (See |netrw-mf| and |netrw-mr| for how to mark files)
-
-Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
-
-  * if the cursor is atop a file name, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
-
-  * also, if the cursor is in the banner, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
-
-  * however, if the cursor is atop a directory name, then that directory is
-    used for the copy/move-to target
-
-There is only one copy/move-to target per vim session; ie. the target is a
-script variable (see |s:var|) and is shared between all netrw windows (in an
-instance of vim).
+MARKED FILES: TARGET DIRECTORY USING BOOKMARKS  		*netrw-Tb* {{{2
+
+Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
+
+The |netrw-qb| map will give you a list of bookmarks (and history).
+One may choose one of the bookmarks to become your marked file
+target by using [count]Tb (default count: 1).
+
+Related topics:
+      Listing Bookmarks and History......................|netrw-qb|
+      Marked Files: Setting The Target Directory.........|netrw-mt|
+      Marked Files: Target Directory Using History.......|netrw-Th|
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
+
+
+MARKED FILES: TARGET DIRECTORY USING HISTORY	  		*netrw-Th* {{{2
+
+Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
+
+The |netrw-qb| map will give you a list of history (and bookmarks).
+One may choose one of the history entries to become your marked file
+target by using [count]Th (default count: 0; ie. the current directory).
+
+Related topics:
+      Listing Bookmarks and History......................|netrw-qb|
+      Marked Files: Setting The Target Directory.........|netrw-mt|
+      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
+
 
 MARKED FILES: UNMARKING						*netrw-mu* {{{2
      (See |netrw-mf| and |netrw-mr| for how to mark files)
@@ -2020,21 +2111,21 @@ your browsing preferences.  (see also: |
    ---				-----------
    Var				Explanation
    ---				-----------
-< *g:netrw_alto*		  change from above splitting to below splitting
+< *g:netrw_alto*		change from above splitting to below splitting
 				by setting this variable (see |netrw-o|)
 				 default: =&sb           (see |'sb'|)
 
-  *g:netrw_altv*		  change from left splitting to right splitting
+  *g:netrw_altv*		change from left splitting to right splitting
 				by setting this variable (see |netrw-v|)
 				 default: =&spr          (see |'spr'|)
 
-  *g:netrw_banner*		  enable/suppress the banner
+  *g:netrw_banner*		enable/suppress the banner
 				=0: suppress the banner
 				=1: banner is enabled (default)
 				NOTE: suppressing the banner is a new feature
 				which may cause problems.
 
-  *g:netrw_browse_split*	  when browsing, <cr> will open the file by:
+  *g:netrw_browse_split*	when browsing, <cr> will open the file by:
 				=0: re-using the same window
 				=1: horizontally splitting the window first
 				=2: vertically   splitting the window first
@@ -2044,7 +2135,7 @@ your browsing preferences.  (see also: |
 				    to get vertical splitting instead of
 				    horizontal splitting.
 
-  *g:netrw_browsex_viewer*	  specify user's preference for a viewer: >
+  *g:netrw_browsex_viewer*	specify user's preference for a viewer: >
 					"kfmclient exec"
 					"gnome-open"
 <				If >
@@ -2053,15 +2144,15 @@ your browsing preferences.  (see also: |
 				a script/function to handle the given
 				extension.  (see |netrw_filehandler|).
 
-  *g:netrw_chgperm*		  Unix/Linux: "chmod PERM FILENAME"
+  *g:netrw_chgperm*		Unix/Linux: "chmod PERM FILENAME"
 				Windows:    "cacls FILENAME /e /p PERM"
 				Used to change access permission for a file.
 
-  *g:netrw_compress*		  ="gzip"
+  *g:netrw_compress*		="gzip"
 				    Will compress marked files with this
 				    command
 
-  *g:Netrw_corehandler*		  Allows one to specify something additional
+  *g:Netrw_corehandler*		Allows one to specify something additional
 				to do when handling <core> files via netrw's
 				browser's "x" command (see |netrw-x|).  If
 				present, g:Netrw_corehandler specifies
@@ -2070,10 +2161,11 @@ your browsing preferences.  (see also: |
 				is required its holding a function reference)
 
 
-  *g:netrw_ctags*		  ="ctags"
-				The default external program used to create tags
-
-  *g:netrw_cursor*		  = 2 (default)
+  *g:netrw_ctags*		="ctags"
+				The default external program used to create
+				tags
+
+  *g:netrw_cursor*		= 2 (default)
   				This option controls the use of the
 				|'cursorline'| (cul) and |'cursorcolumn'|
 				(cuc) settings by netrw:
@@ -2091,7 +2183,7 @@ your browsing preferences.  (see also: |
 				  cul   : |'cursorline'|  locally set
 				  cuc   : |'cursorcolumn'| locally set
 
-  *g:netrw_decompress*		  = { ".gz" : "gunzip" ,
+  *g:netrw_decompress*		= { ".gz"  : "gunzip" ,
 				    ".bz2" : "bunzip2" ,
 				    ".zip" : "unzip" ,
 				    ".tar" : "tar -xf"}
@@ -2112,7 +2204,7 @@ your browsing preferences.  (see also: |
 				    1: warnings
 				    2: errors
 
-  *g:netrw_fastbrowse*		  =0: slow speed directory browsing;
+  *g:netrw_fastbrowse*		=0: slow speed directory browsing;
 				    never re-uses directory listings,
 				    always obtains directory listings.
 				=1: medium speed directory browsing;
@@ -2136,10 +2228,10 @@ your browsing preferences.  (see also: |
 				trading off accuracy (ie. up-to-date listing)
 				versus speed.
 
-  *g:netrw_fname_escape*	  =' ?&;%'
+  *g:netrw_fname_escape*	=' ?&;%'
 				Used on filenames before remote reading/writing
 
-  *g:netrw_ftp_browse_reject*	  ftp can produce a number of errors and warnings
+  *g:netrw_ftp_browse_reject*	ftp can produce a number of errors and warnings
 				that can show up as "directories" and "files"
 				in the listing.  This pattern is used to
 				remove such embedded messages.  By default its
@@ -2152,19 +2244,19 @@ your browsing preferences.  (see also: |
 				 : connect to address [0-9a-fA-F:]*
 				 : No route to host$'
 
-  *g:netrw_ftp_list_cmd*	  options for passing along to ftp for directory
+  *g:netrw_ftp_list_cmd*	options for passing along to ftp for directory
 				listing.  Defaults:
 				 unix or g:netrw_cygwin set: : "ls -lF"
 				 otherwise                     "dir"
 
 
-  *g:netrw_ftp_sizelist_cmd*	  options for passing along to ftp for directory
+  *g:netrw_ftp_sizelist_cmd*	options for passing along to ftp for directory
 				listing, sorted by size of file.
 				Defaults:
 				 unix or g:netrw_cygwin set: : "ls -slF"
 				 otherwise                     "dir"
 
-  *g:netrw_ftp_timelist_cmd*	  options for passing along to ftp for directory
+  *g:netrw_ftp_timelist_cmd*	options for passing along to ftp for directory
 				listing, sorted by time of last modification.
 				Defaults:
 				 unix or g:netrw_cygwin set: : "ls -tlF"
@@ -2175,61 +2267,64 @@ your browsing preferences.  (see also: |
 				These characters in directory names are
 				escaped before applying glob()
 
-  *g:netrw_hide*		  if true, the hiding list is used
+  *g:netrw_hide*		Controlled by the "a" map (see |netrw-a|)
+				=0 : show all
+				=1 : show not-hidden files
+				=2 : show hidden files only
 				 default: =0
 
-  *g:netrw_home*		  The home directory for where bookmarks and
+  *g:netrw_home*		The home directory for where bookmarks and
 				history are saved (as .netrwbook and
 				.netrwhist).
 				 default: the first directory on the
 				         |'runtimepath'|
 
-  *g:netrw_keepdir*		  =1 (default) keep current directory immune from
+  *g:netrw_keepdir*		=1 (default) keep current directory immune from
 				   the browsing directory.
 				=0 keep the current directory the same as the
 				   browsing directory.
 				The current browsing directory is contained in
 				b:netrw_curdir (also see |netrw-c|)
 
-  *g:netrw_list_cmd*		  command for listing remote directories
+  *g:netrw_list_cmd*		command for listing remote directories
 				 default: (if ssh is executable)
 				          "ssh HOSTNAME ls -FLa"
 
-  *g:netrw_liststyle*		  Set the default listing style:
+  *g:netrw_liststyle*		Set the default listing style:
                                 = 0: thin listing (one file per line)
                                 = 1: long listing (one file per line with time
 				     stamp information and file size)
 				= 2: wide listing (multiple files in columns)
 				= 3: tree style listing
-  *g:netrw_list_hide*		  comma separated pattern list for hiding files
+  *g:netrw_list_hide*		comma separated pattern list for hiding files
 				Patterns are regular expressions (see |regexp|)
 				Example: let g:netrw_list_hide= '.*\.swp$'
 				 default: ""
 
-  *g:netrw_localcopycmd*	  ="cp" Linux/Unix/MacOS/Cygwin
+  *g:netrw_localcopycmd*	="cp" Linux/Unix/MacOS/Cygwin
 				="copy" Windows
 				Copies marked files (|netrw-mf|) to target
 				directory (|netrw-mt|, |netrw-mc|)
 
-  *g:netrw_localmovecmd*	  ="mv" Linux/Unix/MacOS/Cygwin
+  *g:netrw_localmovecmd*	="mv" Linux/Unix/MacOS/Cygwin
 				="move" Windows
 				Moves marked files (|netrw-mf|) to target
 				directory (|netrw-mt|, |netrw-mm|)
 
-  *g:netrw_localmkdir*		  command for making a local directory
+  *g:netrw_localmkdir*		command for making a local directory
 				 default: "mkdir"
 
-  *g:netrw_localrmdir*		  remove directory command (rmdir)
+  *g:netrw_localrmdir*		remove directory command (rmdir)
 				 default: "rmdir"
 
-  *g:netrw_maxfilenamelen*	  =32 by default, selected so as to make long
+  *g:netrw_maxfilenamelen*	=32 by default, selected so as to make long
 				    listings fit on 80 column displays.
 				If your screen is wider, and you have file
 				or directory names longer than 32 bytes,
 				you may set this option to keep listings
 				columnar.
 
-  *g:netrw_mkdir_cmd*		  command for making a remote directory
+  *g:netrw_mkdir_cmd*		command for making a remote directory
 				via ssh  (also see |g:netrw_remote_mkdir|)
 				 default: "ssh USEPORT HOSTNAME mkdir"
 
@@ -2246,11 +2341,11 @@ your browsing preferences.  (see also: |
 				evaluation will be suppressed
 				(see |'ballooneval'|)
 
-  *g:netrw_remote_mkdir*	  command for making a local directory
+  *g:netrw_remote_mkdir*	command for making a local directory
 				via ftp  (also see |g:netrw_mkdir_cmd|)
 				 default: "mkdir"
 
-  *g:netrw_retmap*		  if it exists and is set to one, then:
+  *g:netrw_retmap*		if it exists and is set to one, then:
 				 * if in a netrw-selected file, AND
 				 * no normal-mode <2-leftmouse> mapping exists,
 				then the <2-leftmouse> will be mapped for easy
@@ -2269,22 +2364,22 @@ your browsing preferences.  (see also: |
 
 				  default: =0
 
-  *g:netrw_rm_cmd*		  command for removing files
+  *g:netrw_rm_cmd*		command for removing files
 				 default: "ssh USEPORT HOSTNAME rm"
 
-  *g:netrw_rmdir_cmd*		  command for removing directories
+  *g:netrw_rmdir_cmd*		command for removing directories
 				 default: "ssh USEPORT HOSTNAME rmdir"
 
-  *g:netrw_rmf_cmd*		   command for removing softlinks
+  *g:netrw_rmf_cmd*		command for removing softlinks
 				 default: "ssh USEPORT HOSTNAME rm -f"
 
-  *g:netrw_sort_by*		  sort by "name", "time", or "size"
+  *g:netrw_sort_by*		sort by "name", "time", or "size"
 				 default: "name"
 
-  *g:netrw_sort_direction*	  sorting direction: "normal" or "reverse"
+  *g:netrw_sort_direction*	sorting direction: "normal" or "reverse"
 				 default: "normal"
 
-  *g:netrw_sort_options*	  sorting is done using |:sort|; this
+  *g:netrw_sort_options*	sorting is done using |:sort|; this
 				variable's value is appended to the
 				sort command.  Thus one may ignore case,
 				for example, with the following in your
@@ -2292,14 +2387,14 @@ your browsing preferences.  (see also: |
 					let g:netrw_sort_options="i"
 <				 default: ""
 
-  *g:netrw_sort_sequence*	  when sorting by name, first sort by the
+  *g:netrw_sort_sequence*	when sorting by name, first sort by the
 				comma-separated pattern sequence.  Note that
 				the filigree added to indicate filetypes
 				should be accounted for in your pattern.
 				 default: '[\/]$,*,\.bak$,\.o$,\.h$,
 				           \.info$,\.swp$,\.obj$'
 
-  *g:netrw_special_syntax*	  If true, then certain files will be shown
+  *g:netrw_special_syntax*	If true, then certain files will be shown
 				using special syntax in the browser:
 
 					netrwBak     : *.bak
@@ -2321,12 +2416,12 @@ your browsing preferences.  (see also: |
 <				into one's <.vimrc> to use one's own
 				preferences.
 
-  *g:netrw_ssh_cmd*		  One may specify an executable command
+  *g:netrw_ssh_cmd*		One may specify an executable command
 				to use instead of ssh for remote actions
 				such as listing, file removal, etc.
 				 default: ssh
 
-  *g:netrw_ssh_browse_reject*	  ssh can sometimes produce unwanted lines,
+  *g:netrw_ssh_browse_reject*	ssh can sometimes produce unwanted lines,
 				messages, banners, and whatnot that one doesn't
 				want masquerading as "directories" and "files".
 				Use this pattern to remove such embedded
@@ -2334,11 +2429,11 @@ your browsing preferences.  (see also: |
 					 '^total\s\+\d\+$'
 
 
-  *g:netrw_tmpfile_escape*	  =' &;'
+  *g:netrw_tmpfile_escape*	=' &;'
 				escape() is applied to all temporary files
 				to escape these characters.
 
-  *g:netrw_timefmt*		  specify format string to vim's strftime().
+  *g:netrw_timefmt*		specify format string to vim's strftime().
 				The default, "%c", is "the preferred date
 				and time representation for the current
 				locale" according to my manpage entry for
@@ -2348,7 +2443,7 @@ your browsing preferences.  (see also: |
 				 " %a %Y-%m-%d  %I-%M-%S %p"
 				 default: "%c"
 
-  *g:netrw_use_noswf*		  netrw normally avoids writing swapfiles
+  *g:netrw_use_noswf*		netrw normally avoids writing swapfiles
 				for browser buffers.  However, under some
 				systems this apparently is causing nasty
 				ml_get errors to appear; if you're getting
@@ -2356,7 +2451,7 @@ your browsing preferences.  (see also: |
 				  let g:netrw_use_noswf= 0
 				in your .vimrc.
 
-  *g:netrw_winsize*		  specify initial size of new windows made with
+  *g:netrw_winsize*		specify initial size of new windows made with
 				"o" (see |netrw-o|), "v" (see |netrw-v|),
 				|:Hexplore| or |:Vexplore|.  The g:netrw_winsize
 				is an integer describing the percentage of the
@@ -2367,7 +2462,7 @@ your browsing preferences.  (see also: |
 				or columns will be used for the new window.
 				 default: 50  (for 50%)
 
-  *g:netrw_xstrlen*		  Controls how netrw computes string lengths,
+  *g:netrw_xstrlen*		Controls how netrw computes string lengths,
 				including multi-byte characters' string
 				length. (thanks to N Weibull, T Mechelynck)
 				=0: uses Vim's built-in strlen()
@@ -2383,7 +2478,7 @@ your browsing preferences.  (see also: |
 				    immediately preceded by lam, one
 				    otherwise, etc)
 
-  *g:NetrwTopLvlMenu*		  This variable specifies the top level
+  *g:NetrwTopLvlMenu*		This variable specifies the top level
 				menu name; by default, it's "Netrw.".  If
 				you wish to change this, do so in your
 				.vimrc.
@@ -2483,7 +2578,7 @@ has been modified, and there's only one 
 the user will be asked if s/he wishes to save the buffer first (yes,
 no, or cancel).
 
-Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-T| |netrw-v|
+Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
 Associated setting variables:
    |g:netrw_alto|    control above/below splitting
    |g:netrw_altv|    control right/left splitting
@@ -2498,6 +2593,15 @@ hit the <cr> when atop the ./ directory 
 refresh a local directory by using ":e .".
 
 
+REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
+
+One may toggle between normal and reverse sorting order by pressing the
+"r" key.
+
+Related topics:              |netrw-s|
+Associated setting variable: |g:netrw_sort_direction|
+
+
 RENAMING FILES OR DIRECTORIES	*netrw-move* *netrw-rename* *netrw-R* {{{2
 
 If there are no marked files: (see |netrw-mf|)
@@ -2528,15 +2632,6 @@ One may rename a block of files and dire
 the V (|linewise-visual|).
 
 
-REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
-
-One may toggle between normal and reverse sorting order by pressing the
-"r" key.
-
-Related topics:              |netrw-s|
-Associated setting variable: |g:netrw_sort_direction|
-
-
 SELECTING SORTING STYLE			*netrw-s* *netrw-sort* {{{2
 
 One may select the sorting style by name, time, or (file) size.  The "s" map
@@ -2620,9 +2715,9 @@ 10. Problems and Fixes					*netrw-proble
 	P5. My times come up oddly in local browsing
 
 		Does your system's strftime() accept the "%c" to yield dates
-		such as "Sun Apr 27 11:49:23 1997"?  If not, do a "man strftime"
-		and find out what option should be used.  Then put it into
-		your |.vimrc|: >
+		such as "Sun Apr 27 11:49:23 1997"?  If not, do a
+		"man strftime" and find out what option should be used.  Then
+		put it into your |.vimrc|: >
 
 			let g:netrw_timefmt= "%X"  (where X is the option)
 <
@@ -2895,6 +2990,57 @@ which is loaded automatically at startup
 ==============================================================================
 12. History						*netrw-history* {{{1
 
+	v148:	Apr 16, 2013	* changed Netrw's Style menu to allow direct
+				  choice of listing style, hiding style, and
+				  sorting style
+	v147:	Nov 24, 2012	* (James McCoy) Even with g:netrw_dirhistmax
+				  at zero, the .vim/ directory would be
+				  created to support history/bookmarks.  I've
+				  gone over netrw to suppress history and
+				  bookmarking when g:netrw_dirhistmax is zero.
+				  For instance, the menus will display
+				  (disabled) when attempts to use
+				  bookmarks/history are made.
+		Nov 29, 2012	* (Kim Jang-hwan) reported that with
+				  g:Align_xstrlen set to 3 that the cursor was
+				  moved (linewise) after invocation.  This
+				  problem also afflicted netrw.
+				  (see |g:netrw_xstrlen|) Fixed.
+		Jan 21, 2013	* (mattn) provided a patch to insert some
+				  endifs needed with the code implementing
+				  |netrw-O|.
+		Jan 24, 2013	* (John Szakmeister) found that remote file
+				  editing resulted in filetype options being
+				  overwritten by NetrwOptionRestore().  I
+				  moved filetype detect from NetrwGetFile()
+				  to NetrwOptionRestore.
+		Feb 17, 2013	* (Yukhiro Nakadaira) provided a patch
+				  correcting some syntax errors.
+		Feb 28, 2013	* (Ingo Karkat) provided a patch preventing
+				  receipt of an |E95| when revisiting a
+				  file://... style url.
+		Mar 18, 2013	* (Gary Johnson) pointed out that changing
+				  cedit to <Esc> caused problems with visincr;
+				  the cedit setting is now bypassed in netrw too.
+		Apr 02, 2013	* (Paul Domaskis) reported an undefined
+				  variable error (s:didstarstar) was
+				  occurring.  It is now defined at
+				  initialization.
+				* included additional sanity checking for the
+				  marked file functions.
+				* included |netrw-qF| and special "j" option
+				  handling for |netrw-mg|
+		Apr 12, 2013	* |netrw-u| and |netrw-U| now handle counts
+				* the former mapping for "T" has been removed;
+				  in its place are new maps, |netrw-Tb| and |netrw-Th|.
+				* the menu now supports a "Targets" entry for
+				  easier target selection. (see |netrw-mt|)
+				* (Paul Domaskis) reported some problems with
+				  moving/copying files under Windows' gvim
+				  (ie. not cygwin).  Fixed.
+				* (Paul Mueller) provided a patch to get
+				  start and rundll working via |netrw-gx|
+				  by bypassing the user's |'shellslash'| option.
 	v146:	Oct 20, 2012	* (David Kotchan) reported that under Windows,
 				  directories named with unusual characters
 				  such as "#" or "$" were not being listed
@@ -2904,6 +3050,10 @@ 12. History						*netrw-history* {{{1
 				  Netrw will now |:bwipe| netrw buffers
 				  upon editing a file if g:netrw_fastbrowse
 				  is zero and its not in tree listing style.
+				* fixed a bug with s:NetrwInit() that
+				  prevented initialization with |Lists| and
+				  |Dictionaries|.
+				* |netrw-mu| now unmarks marked-file lists
 	v145:	Apr 05, 2012	* moved some command from a g:netrw_local_...
 				  format to g:netwr_local... format
 				* included some NOTE level messages about
--- a/runtime/doc/pi_tar.txt
+++ b/runtime/doc/pi_tar.txt
@@ -1,10 +1,10 @@
-*pi_tar.txt*	For Vim version 7.3.  Last change: 2012 Jan 17
+*pi_tar.txt*	For Vim version 7.3.  Last change: 2013 Apr 17
 
 		       +====================+
 		       | Tar File Interface |
 		       +====================+
 
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
 Copyright 2005-2012:					*tar-copyright*
 	The VIM LICENSE (see |copyright|) applies to the files in this
@@ -50,6 +50,21 @@ 2. Usage					*tar-usage* *tar-manual*
 	*g:tar_extractcmd* , which by default is >
 		"tar -xf"
 <
+						*:TarDiff*
+   DIFFERENCING SUPPORT~
+
+   :TarDiff [filename]
+
+	This command will attempt to show the differences between the tarball
+	version of a file and the associated file on the system.  In order to
+	find that file on the system, the script uses the path associated with
+	the file mentioned in the tarball.  If the current directory is not
+	correct for that path, :TarDiff will fail to find the associated file.
+
+	If the [filename] is given, that that filename (and path) will be used
+	to specify the associated file.
+
+
    PREVENTING LOADING~
 
    If for some reason you do not wish to use vim to examine tar'd files,
--- a/runtime/doc/pi_zip.txt
+++ b/runtime/doc/pi_zip.txt
@@ -1,12 +1,12 @@
-*pi_zip.txt*	For Vim version 7.3.  Last change: 2012 Jan 17
+*pi_zip.txt*	For Vim version 7.3.  Last change: 2013 Apr 17
 
 				+====================+
 				| Zip File Interface |
 				+====================+
 
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright: Copyright (C) 2005-2011 Charles E Campbell, Jr *zip-copyright*
+Copyright: Copyright (C) 2005-2012 Charles E Campbell	 *zip-copyright*
 	The VIM LICENSE (see |copyright|) applies to the files in this
 	package, including zipPlugin.vim, zip.vim, and pi_zip.vim.  except use
 	"zip.vim" instead of "VIM".  Like anything else that's free, zip.vim
@@ -85,8 +85,13 @@ 3. Additional Extensions					*zip-extens
 
 ==============================================================================
 4. History							*zip-history* {{{1
+   v26 Nov 15, 2012 * (Jason Spiro) provided a lot of new extensions that
+		      are synonyms for .zip
    v25 Jun 27, 2011 * using keepj with unzip -Z
 		      (consistent with the -p variant)
+		    * (Ben Staniford) now uses
+			has("win32unix") && executable("cygpath")
+		      before converting to cygwin-style paths
    v24 Jun 21, 2010 * (Cédric Bosdonnat) unzip seems to need its filenames
 		      fnameescape'd as well as shellquote'd
 		    * (Motoya Kurotsu) inserted keepj before 0d to protect
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1834,6 +1834,7 @@ 90.5	usr_90.txt	/*90.5*
 :RmVimball	pi_vimball.txt	/*:RmVimball*
 :Sexplore	pi_netrw.txt	/*:Sexplore*
 :TOhtml	syntax.txt	/*:TOhtml*
+:TarDiff	pi_tar.txt	/*:TarDiff*
 :Texplore	pi_netrw.txt	/*:Texplore*
 :UseVimball	pi_vimball.txt	/*:UseVimball*
 :Vexplore	pi_netrw.txt	/*:Vexplore*
@@ -6862,7 +6863,8 @@ netrw-O	pi_netrw.txt	/*netrw-O*
 netrw-P	pi_netrw.txt	/*netrw-P*
 netrw-R	pi_netrw.txt	/*netrw-R*
 netrw-S	pi_netrw.txt	/*netrw-S*
-netrw-T	pi_netrw.txt	/*netrw-T*
+netrw-Tb	pi_netrw.txt	/*netrw-Tb*
+netrw-Th	pi_netrw.txt	/*netrw-Th*
 netrw-U	pi_netrw.txt	/*netrw-U*
 netrw-X	pi_netrw.txt	/*netrw-X*
 netrw-a	pi_netrw.txt	/*netrw-a*
@@ -6931,6 +6933,7 @@ netrw-listbookmark	pi_netrw.txt	/*netrw-
 netrw-listhack	pi_netrw.txt	/*netrw-listhack*
 netrw-login	pi_netrw.txt	/*netrw-login*
 netrw-mB	pi_netrw.txt	/*netrw-mB*
+netrw-mF	pi_netrw.txt	/*netrw-mF*
 netrw-mT	pi_netrw.txt	/*netrw-mT*
 netrw-mb	pi_netrw.txt	/*netrw-mb*
 netrw-mc	pi_netrw.txt	/*netrw-mc*
@@ -6985,6 +6988,7 @@ netrw-prvwin	pi_netrw.txt	/*netrw-prvwin
 netrw-pscp	pi_netrw.txt	/*netrw-pscp*
 netrw-psftp	pi_netrw.txt	/*netrw-psftp*
 netrw-putty	pi_netrw.txt	/*netrw-putty*
+netrw-qF	pi_netrw.txt	/*netrw-qF*
 netrw-qb	pi_netrw.txt	/*netrw-qb*
 netrw-qf	pi_netrw.txt	/*netrw-qf*
 netrw-quickcom	pi_netrw.txt	/*netrw-quickcom*
@@ -7328,7 +7332,9 @@ python-input	if_pyth.txt	/*python-input*
 python-output	if_pyth.txt	/*python-output*
 python-pyeval	if_pyth.txt	/*python-pyeval*
 python-range	if_pyth.txt	/*python-range*
+python-vars	if_pyth.txt	/*python-vars*
 python-vim	if_pyth.txt	/*python-vim*
+python-vvars	if_pyth.txt	/*python-vvars*
 python-window	if_pyth.txt	/*python-window*
 python-windows	if_pyth.txt	/*python-windows*
 python.vim	syntax.txt	/*python.vim*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.3.  Last change: 2013 Apr 12
+*todo.txt*      For Vim version 7.3.  Last change: 2013 Apr 24
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -39,8 +39,6 @@ highlight group.  Add a "\zs" after it?
 
 Go through more coverity reports.
 
-Valgrind errors in test 16.
-
 Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
 
 Checking runtime scripts: Thilo Six, 2012 Jun 6.
@@ -59,16 +57,14 @@ That is, calling a dictionary function o
 Works OK for echo, just not for  ":call" and ":call call()". (Ted, 2011 Mar
 17)
 Patch by Christian Brabandt, 2013 Mar 23.
-
-Patch to make building with Ruby 2.0 on 64 bit system work. (eagletmt (Kohei
-Suzuki), 2013 Mar 25)
+Not 100% sure this is the right solution.
 
 Win32: When a directory name contains an exclamation mark, completion doesn't
 complete the contents of the directory.  No escaping for the "!"? (Jan
 Stocker, 2012 Jan 5)
 
-Patch to avoid that visul motion breaks repeat with ".". (Sung Pae, 2013 Mar
-25)
+Patch to load ~/.vim/vimrc when ~/.vimrc isn't found. (Lech Lorens, 2013 Apr
+13)
 
 Problem caused by patch 7.3.638: window->open does not update window
 correctly. Issue 91.
@@ -87,22 +83,31 @@ 28)  With tests: Oct 9.
 
 Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec)
 
-Patch to add more testing for Visual operators. (glts, 2013 Mar 28)
-
 Patch for IME handling, adds 'imactivatefunc' and 'imstatusfunc' option.
 (Yukihiro Nakadaira, 2012 Aug 16)
 Patch to improve IME handling. (Yasuhiro Matsumoto, 2012 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?
+Patch by Christian Brabandt, 2012 Nov 16.
+
 Issue 54: document behavior of -complete, also expands arg.
 
 Matches might be highlighted correctly. Inefficient patch by Christian
 Brabandt, 2013 Feb 26.
 
-New syntax files for apt. (quidame, 2012 Sep 21)
+-   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
+    the two into a regex for searching. (Ned Konz)
+Patch by Christian Brabandt, 2013 Apr 20, unfinished.
 
 Patch to use bold/italic fonts when 'guifontewide' is set. (Ken Takata, 2013
 Mar 31)
 
+Patch to fix finding toolbar bitmaps.  Issue 129.
+
+Patch to handle Python SystemExit. (Yasuhiro Matsumoto, 2013 Apr 15)
+
 v:register is not directly reset to " after a delete command that specifies a
 register.  It is reset after the next command. (Steve Vermeulen, 2013 Mar 16)
 
@@ -116,15 +121,8 @@ Patch to check if 'foldexpr' sets did_em
 Patch to set antialiasing style on Windows. (Ondrej Balaz, 2013 Mar 14)
 Needs a different check for CLEARTYPE_QUALITY.
 
-Patch for repeating change that uses ":normal". (glts, 2013 March 23)
-
 Issue 72: 'autochdir' causes problems for :vimgrep.
 
-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?
-Patch by Christian Brabandt, 2012 Nov 16.
-
 In the ATTENTION message about an existing swap file, mention the name of the
 process that is running.  It might actually be some other program, e.g. after
 a reboot.
@@ -177,6 +175,9 @@ Patch to improve equivalence classes in 
 Patch with suggestions for starting.txt. (Tony Mechelynck, 2012 Oct 24)
 But use Gnome instead of GTK?
 
+Patch to make FocusGained and FocusLost work in modern terminals. (Hayaki
+Saito, 2013 Apr 24)
+
 Should be possible to enable/disable matchparen per window or buffer.
 Add a check for b:no_match_paren in Highlight_matching_Pair() (Marcin
 Szamotulski, 2012 Nov 8)
@@ -246,6 +247,9 @@ Patch for input method status. (Hirohito
 Patch to print the result of a :python command. (Maxim Philippov
 <philippovmi@gmail.com>, 2012 Aug 16)  Update Aug 17.
 
+Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013
+Apr 18)
+
 Problem with winfixheight and resizing. (Yukihiro Nakadaira, 2011 Sep 17)
 Patch Sep 18.
 
@@ -934,6 +938,7 @@ ATTENTION message?  (Tony Mechelynck, 20
 Also: swap files are in ~/tmp/  One has relative file name ".mozilla/...".
 
 Add v:motion_force. (Kana Natsuno, 2008 Dec 6)
+Maybe call it v:motiontype.
 
 Runtime files for Clojure. (Toralf Wittner, 2008 Jun 25)
 
@@ -5086,8 +5091,6 @@ 8   When using "gf" on an absolute file 
 -   Add a variant of CTRL-V that stops interpretation of more than one
     character.	For entering mappings on the command line where a key contains
     several special characters, e.g. a trailing newline.
--   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
-    the two into a regex for searching. (Ned Konz)
 -   Make '2' option in 'formatoptions' also work inside comments.
 -   Add 's' flag to 'formatoptions': Do not break when inside a string. (Dodt)
 -   When window size changed (with the mouse) and made too small, set it back
--- a/runtime/ftplugin/make.vim
+++ b/runtime/ftplugin/make.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Make
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2006 Jun 17
+" Last Change:	2013 Apr 22
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -26,3 +26,8 @@ setlocal commentstring=#\ %s
 
 " Including files.
 let &l:include = '^\s*include'
+
+" For matchit.vim, suggested by Albert Netymk.
+if exists("loaded_matchit")
+  let b:match_words = '\<if\(n\)\=\(eq\|def\)\>:\<else\>:\<endif\>,\<define\>:\<endef\>'
+endif
--- a/runtime/plugin/getscriptPlugin.vim
+++ b/runtime/plugin/getscriptPlugin.vim
@@ -1,6 +1,6 @@
 " ---------------------------------------------------------------------
 " getscriptPlugin.vim
-"  Author:	Charles E. Campbell, Jr.
+"  Author:	Charles E. Campbell
 "  Date:	Jan 07, 2008
 "  Installing:	:help glvs-install
 "  Usage:	:help glvs
@@ -19,7 +19,7 @@ if &cp || exists("g:loaded_getscriptPlug
  endif
  finish
 endif
-let g:loaded_getscriptPlugin = "v34"
+let g:loaded_getscriptPlugin = "v35"
 let s:keepcpo                = &cpo
 set cpo&vim
 
--- a/runtime/plugin/netrwPlugin.vim
+++ b/runtime/plugin/netrwPlugin.vim
@@ -1,9 +1,9 @@
 " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN SECTION
-" Date:		Aug 24, 2011
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:		Dec 06, 2012
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,7 +20,7 @@
 if &cp || exists("g:loaded_netrwPlugin")
  finish
 endif
-let g:loaded_netrwPlugin = "v146"
+let g:loaded_netrwPlugin = "v148"
 if v:version < 702
  echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
  finish
@@ -48,10 +48,10 @@ augroup END
 augroup Network
  au!
  au BufReadCmd   file://*		call netrw#FileUrlRead(expand("<amatch>"))
- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
- au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
- au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
- au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
+ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
+ au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
+ au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
+ au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
  try
   au SourceCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
  catch /^Vim\%((\a\+)\)\=:E216/
--- a/runtime/plugin/tarPlugin.vim
+++ b/runtime/plugin/tarPlugin.vim
@@ -1,6 +1,6 @@
 " tarPlugin.vim -- a Vim plugin for browsing tarfiles
 " Original was copyright (c) 2002, Michael C. Toren <mct@toren.net>
-" Modified by Charles E. Campbell, Jr.
+" Modified by Charles E. Campbell
 " Distributed under the GNU General Public License.
 "
 " Updates are available from <http://michael.toren.net/code/>.  If you
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_tarPlugin")
  finish
 endif
-let g:loaded_tarPlugin = "v28"
+let g:loaded_tarPlugin = "v29"
 let s:keepcpo          = &cpo
 set cpo&vim
 
--- a/runtime/plugin/zipPlugin.vim
+++ b/runtime/plugin/zipPlugin.vim
@@ -1,9 +1,9 @@
 " zipPlugin.vim: Handles browsing zipfiles
 "            PLUGIN PORTION
-" Date:			Aug 15, 2011
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:			Nov 15, 2012
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,7 +20,7 @@
 if &cp || exists("g:loaded_zipPlugin")
  finish
 endif
-let g:loaded_zipPlugin = "v25"
+let g:loaded_zipPlugin = "v26"
 let s:keepcpo          = &cpo
 set cpo&vim
 
@@ -40,7 +40,7 @@ augroup zip
   au FileWriteCmd zipfile:*/*	call zip#Write(expand("<amatch>"))
  endif
 
- au BufReadCmd   *.zip,*.jar,*.xpi,*.war,*.ear,*.celzip,*.oxt		call zip#Browse(expand("<amatch>"))
+ au BufReadCmd   *.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,*.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm,*.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx		call zip#Browse(expand("<amatch>"))
 augroup END
 
 " ---------------------------------------------------------------------
--- a/runtime/syntax/aptconf.vim
+++ b/runtime/syntax/aptconf.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	APT config file
 " Maintainer:	Yann Amar <quidame@poivron.org>
-" Last Change:	2012 Oct 06
+" Last Change:	2013 Apr 12
 
 " For version 5.x: Clear all syntax items
 " For version 6.x and 7.x: Quit when a syntax file was already loaded
@@ -17,7 +17,6 @@ endif
 let s:cpo_save = &cpo
 set cpo&vim
 
-
 " Errors:
 " Catch all that is not overridden by next rules/items:
 syn match	aptconfError		display '[^[:blank:]]'
@@ -198,6 +197,24 @@ syn keyword	aptconfAptitudeUI contained
 	\ Package-Status-Format Pause-After-Download Preview-Limit
 	\ Prompt-On-Exit Styles ViewTabs
 
+syn keyword	aptconfAptitudeUIKeyBindings contained
+	\ ApplySolution Begin BugReport Cancel Changelog ChangePkgTreeGrouping
+	\ ChangePkgTreeLimit ChangePkgTreeSorting ClearAuto CollapseAll
+	\ CollapseTree Commit Confirm Cycle CycleNext CycleOrder CyclePrev
+	\ DelBOL DelBack DelEOL DelForward Dependencies DescriptionCycle
+	\ DescriptionDown DescriptionUp DoInstallRun Down DpkgReconfigure
+	\ DumpResolver EditHier End ExamineSolution ExpandAll ExpandTree
+	\ FirstSolution ForbidUpgrade ForgetNewPackages Help HistoryNext
+	\ HistoryPrev Hold Install InstallSingle Keep LastSolution Left
+	\ LevelDown LevelUp MarkUpgradable MineFlagSquare MineLoadGame
+	\ MineSaveGame MineSweepSquare MineUncoverSquare MineUncoverSweepSquare
+	\ NextPage NextSolution No Parent PrevPage PrevSolution Purge
+	\ PushButton Quit QuitProgram RejectBreakHolds Refresh Remove
+	\ ReInstall RepeatSearchBack ReSearch ReverseDependencies Right
+	\ SaveHier Search SearchBack SearchBroken SetAuto ShowHideDescription
+	\ SolutionActionApprove SolutionActionReject ToggleExpanded
+	\ ToggleMenuActive Undo Up UpdatePackageList Versions Yes
+
 syn keyword	aptconfAptitudeUIStyles contained
 	\ Bullet ChangeLogNewerVersion Default DepBroken DisabledMenuEntry
 	\ DownloadHit DownloadProgress EditLine Error Header HighlightedMenuBar
@@ -220,7 +237,8 @@ syn cluster	aptconfAptitude_ contains=ap
 	\ aptconfAptitudeCmdlineSafeUpgrade,aptconfAptitudeLogging,
 	\ aptconfAptitudeProblemResolver,aptconfAptitudeSafeResolver,
 	\ aptconfAptitudeScreenshot,aptconfAptitudeSections,aptconfAptitudeUI,
-	\ aptconfAptitudeUIStyles,aptconfAptitudeUIStylesElements
+	\ aptconfAptitudeUIKeyBindings,aptconfAptitudeUIStyles,
+	\ aptconfAptitudeUIStylesElements
 " }}}
 " DebTags: {{{
 syn keyword	aptconfDebTags contained
@@ -449,6 +467,7 @@ hi def link aptconfAptitudeSafeResolver	
 hi def link aptconfAptitudeScreenshot		aptconfOption
 hi def link aptconfAptitudeSections		aptconfOption
 hi def link aptconfAptitudeUI			aptconfOption
+hi def link aptconfAptitudeUIKeyBindings	aptconfOption
 hi def link aptconfAptitudeUIStyles		aptconfOption
 hi def link aptconfAptitudeUIStylesElements	aptconfOption
 
--- a/runtime/syntax/groovy.vim
+++ b/runtime/syntax/groovy.vim
@@ -2,9 +2,9 @@
 " Language:	Groovy
 " Original Author:	Alessio Pace <billy.corgan@tiscali.it>
 " Maintainer:	Tobias Rapp <yahuxo@gmx.de>
-" Version: 	0.1.12
+" Version: 	0.1.13
 " URL:	  http://www.vim.org/scripts/script.php?script_id=945
-" Last Change:	2013 Mar 14
+" Last Change:	2013 Apr 24
 
 " THE ORIGINAL AUTHOR'S NOTES:
 "
@@ -74,7 +74,7 @@ endif
 
 " keyword definitions
 syn keyword groovyExternal        native package
-syn match groovyExternal          "\<import\(\s\+static\>\)\?"
+syn match groovyExternal          "\<import\>\(\s\+static\>\)\?"
 syn keyword groovyError           goto const
 syn keyword groovyConditional     if else switch
 syn keyword groovyRepeat          while for do
--- a/runtime/syntax/netrw.vim
+++ b/runtime/syntax/netrw.vim
@@ -1,7 +1,7 @@
 " Language   : Netrw Remote-Directory Listing Syntax
 " Maintainer : Charles E. Campbell, Jr.
-" Last change: Jan 14, 2009
-" Version    : 16
+" Last change: Dec 18, 2012
+" Version    : 17
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -56,13 +56,16 @@ if exists("g:netrw_special_syntax") && n
  if has("unix")
   syn match netrwCoreDump	"\<core\%(\.\d\+\)\=\>"				contains=netrwTreeBar,@NoSpell
  endif
+ syn match netrwLex		"\(\S\+ \)*\S\+\.\%(l\|lex\)\>"			contains=netrwTreeBar,@NoSpell
+ syn match netrwYacc		"\(\S\+ \)*\S\+\.y\>"				contains=netrwTreeBar,@NoSpell
  syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar,@NoSpell
- syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar,@NoSpell
+ syn match netrwDoc		"\(\S\+ \)*\S\+\.\%(doc\|txt\|pdf\|ps\)"	contains=netrwTreeBar,@NoSpell
+ syn match netrwHdr		"\(\S\+ \)*\S\+\.\%(h\|hpp\)\>"			contains=netrwTreeBar,@NoSpell
  syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar,@NoSpell
  syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar,@NoSpell
  syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar,@NoSpell
+ syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar,@NoSpell
  syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar,@NoSpell
- syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar,@NoSpell
  syn match netrwTilde		"\(\S\+ \)*\S\+\~\*\=\>"			contains=netrwTreeBar,@NoSpell
  syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar,@NoSpell
 endif
@@ -95,12 +98,15 @@ if !exists("did_drchip_netrwlist_syntax"
  hi default link netrwCompress	Folded
  hi default link netrwCoreDump	WarningMsg
  hi default link netrwData	DiffChange
+ hi default link netrwHdr	netrwPlain
+ hi default link netrwLex	netrwPlain
  hi default link netrwLib	DiffChange
  hi default link netrwMakefile	DiffChange
  hi default link netrwObj	Folded
  hi default link netrwTilde	Folded
  hi default link netrwTmp	Folded
  hi default link netrwTags	Folded
+ hi default link netrwYacc	netrwPlain
 endif
 
 " Current Syntax: {{{1
--- a/runtime/syntax/ninja.vim
+++ b/runtime/syntax/ninja.vim
@@ -2,8 +2,11 @@
 " Language: ninja build file as described at
 "           http://martine.github.com/ninja/manual.html
 " Version: 1.3
-" Last Change: 2013 Apr 12
+" Last Change: 2013/04/16
 " Maintainer: Nicolas Weber <nicolasweber@gmx.de>
+" Version 1.3 of this script is in the upstream vim repository and will be
+" included in the next vim release. If you change this, please send your change
+" upstream.
 
 " ninja lexer and parser are at
 " https://github.com/martine/ninja/blob/master/src/lexer.in.cc
@@ -13,6 +16,9 @@ if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case match
 
 syn match ninjaComment /#.*/  contains=@Spell
@@ -33,7 +39,8 @@ syn match ninjaKeyword "^subninja\>"
 " let assignments.
 " manifest_parser.cc, ParseRule()
 syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent
-syn keyword ninjaRuleCommand contained command deps depfile description generator pool restat rspfile rspfile_content
+syn keyword ninjaRuleCommand contained command deps depfile description generator
+                                     \ pool restat rspfile rspfile_content
 
 syn region ninjaPool start="^pool" end="^\ze\S" contains=ALL transparent
 syn keyword ninjaPoolCommand contained depth
@@ -69,3 +76,6 @@ hi def link ninjaSimpleVar ninjaVar
 hi def link ninjaVar Identifier
 
 let b:current_syntax = "ninja"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/syntax/redif.vim
+++ b/runtime/syntax/redif.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:          ReDIF
 " Maintainer:        Axel Castellane <axel.castellane@polytechnique.edu>
-" Last Change:       2013 April 08
+" Last Change:       2013 April 17
 " Original Author:   Axel Castellane
 " Source:            http://openlib.org/acmes/root/docu/redif_1.html
 " File Extension:    rdf
@@ -581,6 +581,7 @@ syntax region redifArgumentNameMiddle st
 syntax region redifArgumentNamePrefix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
 syntax region redifArgumentNameSuffix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
 syntax region redifArgumentName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNumber start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
 syntax region redifArgumentOrderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
 syntax region redifArgumentOrderURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
 syntax region redifArgumentPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
@@ -793,12 +794,11 @@ highlight def link redifSpecialPublicati
 "    Month
 "    TODO Are numbers also allowed?
 syntax match redifArgumentMonth /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodMonth contained display
-syntax match redifGoodMonth /\<\(Jan\%(uary\)\=\|Feb\%(ruary\)\=\|Mar\%(ch\)\=\|Apr\%(il\)\=\|May\|June\=\|July\=\|Aug\%(ust\)\=\|Sep\%(tember\)\=\|Oct\%(ober\)\=\|Nov\%(ember\)\=\|Dec\%(ember\)\=\)\>/ nextgroup=redifWrongLineEnding contained display
+syntax match redifGoodMonth /\<\(Jan\%(uary\)\=\|Feb\%(ruary\)\=\|Mar\%(ch\)\=\|Apr\%(il\)\=\|May\|June\=\|July\=\|Aug\%(ust\)\=\|Sep\%(tember\)\=\|Oct\%(ober\)\=\|Nov\%(ember\)\=\|Dec\%(ember\)\=\)\>/ contained display
 
 highlight def link redifGoodMonth redifSpecial
 
-"    Integers: Number, Volume, Chapter
-syntax match redifArgumentNumber /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
+"    Integers: Volume, Chapter
 syntax match redifArgumentVolume /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
 syntax match redifArgumentChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
 syntax match redifCorrectInteger /[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
@@ -815,19 +815,19 @@ highlight def link redifArgumentYear red
 "    Edition
 "    Based on the example in the documentation.
 syntax match redifArgumentEdition /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodEdition contained display
-syntax match redifGoodEdition /1st\|2nd\|3rd\|[4-9]th\|[1-9]\d*\%(1st\|2nd\|3rd\|[4-9]th\)\|[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
+syntax match redifGoodEdition /1st\|2nd\|3rd\|[4-9]th\|[1-9]\d*\%(1st\|2nd\|3rd\|[4-9]th\)\|[1-9]\d*/ contained display
 
 highlight def link redifGoodEdition redifSpecial
 
 "    ISBN
 syntax match redifArgumentISBN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISBN contained display
-syntax match redifGoodISBN /\d[0-9-]\{8,15}\d/ nextgroup=redifWrongLineEnding contained display
+syntax match redifGoodISBN /\d[0-9-]\{8,15}\d/ contained display
 
 highlight def link redifGoodISBN redifSpecial
 
 "    ISSN
 syntax match redifArgumentISSN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISSN contained display
-syntax match redifGoodISSN /\d\{4}-\d\{3}[0-9X]/ nextgroup=redifWrongLineEnding contained display
+syntax match redifGoodISSN /\d\{4}-\d\{3}[0-9X]/ contained display
 
 highlight def link redifGoodISSN redifSpecial
 
@@ -862,7 +862,7 @@ highlight def link redifArgumentRevision
 
 "    Classification-JEL
 syntax match redifArgumentClassificationJEL /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectJEL contained display
-syntax match redifCorrectJEL /\<\u\d\{,2}\%([,; \t]\s*\)\=/ contains=redifSpecialJEL nextgroup=redifWrongLineEnding contained display
+syntax match redifCorrectJEL /\<\%(\u\d\{,2}[,; \t]\s*\)*\u\d\{,2}/ contains=redifSpecialJEL nextgroup=redifWrongLineEnding contained display
 syntax match redifSpecialJEL /\<\u\d\{,2}/ contained display
 
 highlight def link redifArgumentClassificationJEL redifError
--- a/runtime/tutor/tutor.eo
+++ b/runtime/tutor/tutor.eo
@@ -645,7 +645,7 @@ RIMARKO: iuj  :  komandoj devas finii per tajpo de <Enenklavo>
   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
 
   4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
-     Por kontroli tion, tajpu   :!dir   a   !ls   denove por vidigi vian
+     Por kontroli tion, tajpu   :!dir   a   :!ls   denove por vidigi vian
      dosierujon.
 
 RIMARKO: Se vi volus eliri el Vim kaj restartigi in denove per  vim TESTO,
--- a/src/po/fi.po
+++ b/src/po/fi.po
@@ -367,7 +367,7 @@ msgstr "E684: Indeksi %ld luettelon rajo
 
 #, c-format
 msgid "E121: Undefined variable: %s"
-msgstr "E121: Mrittelemtn muuttuja %s"
+msgstr "E121: Mrittelemtn muuttuja: %s"
 
 msgid "E111: Missing ']'"
 msgstr "E111: ] puuttuu"
@@ -392,7 +392,7 @@ msgstr "E715: Sanakirja tarvitaan"
 
 #, c-format
 msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Liikaa argumentteja funktiolle %s"
+msgstr "E118: Liikaa argumentteja funktiolle: %s"
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
@@ -1266,7 +1266,7 @@ msgstr "E179: -complete vaatii argumenti
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
-msgstr "E181: Virheellinen attribuutti %s"
+msgstr "E181: Virheellinen attribuutti: %s"
 
 msgid "E182: Invalid command name"
 msgstr "E182: Virheellinen komennon nimi"
@@ -2220,7 +2220,7 @@ msgstr "E253: Fontsetin nimi: %s\n"
 
 #, c-format
 msgid "Font0: %s\n"
-msgstr "Fontti0. %s\n"
+msgstr "Fontti0: %s\n"
 
 #, c-format
 msgid "Font1: %s\n"
@@ -2481,7 +2481,7 @@ msgstr ""
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: ei voi avata csope-tietokantaa %s"
+msgstr "E625: ei voi avata cscope-tietokantaa: %s"
 
 msgid "E626: cannot get cscope database information"
 msgstr "E626: ei voi hakea cscope-tietokannan tietoja"
@@ -5328,7 +5328,7 @@ msgstr "E397: Tiedostonimi puuttuu"
 
 #, c-format
 msgid "E789: Missing ']': %s"
-msgstr "E789: ] puuttuu; %s"
+msgstr "E789: ] puuttuu: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
@@ -6173,11 +6173,11 @@ msgstr "E474: Virheellinen argumentti"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Virheellinen argumentti %s"
+msgstr "E475: Virheellinen argumentti: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
-msgstr "E15: Virheellinen ilmaus %s"
+msgstr "E15: Virheellinen ilmaus: %s"
 
 msgid "E16: Invalid range"
 msgstr "E16: Virheellinen arvoalue"
--- a/src/po/ja.po
+++ b/src/po/ja.po
@@ -3,7 +3,7 @@
 # Do ":help uganda"  in Vim to read copying and usage conditions.
 # Do ":help credits" in Vim to see a list of people who contributed.
 #
-# Last Change: 24-Feb-2013.
+# Last Change: 17-Apr-2013.
 #
 # Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
 # THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-24 12:38+0900\n"
-"PO-Revision-Date: 2013-02-24 13:30+0900\n"
+"POT-Creation-Date: 2013-04-17 19:56+0900\n"
+"PO-Revision-Date: 2013-04-17 20:00+0900\n"
 "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language: Japanese\n"
@@ -569,7 +569,7 @@ msgid "add() argument"
 msgstr "add() ΰ"
 
 msgid "E699: Too many arguments"
-msgstr "E699: ¿᤮ޤ"
+msgstr "E699: ¿᤮ޤ"
 
 msgid "E785: complete() can only be used in Insert mode"
 msgstr "E785: complete() ⡼ɤǤѤǤޤ"
@@ -685,7 +685,7 @@ msgid "E730: using List as a String"
 msgstr "E730: ꥹȷʸȤưäƤޤ"
 
 msgid "E731: using Dictionary as a String"
-msgstr "E731: ѿʸȤưäƤޤ"
+msgstr "E731: 񷿤ʸȤưäƤޤ"
 
 msgid "E806: using Float as a String"
 msgstr "E806: ưʸȤưäƤޤ"
@@ -998,6 +998,10 @@ msgstr "E148: globalޥɤɽꤵƤޤ"
 msgid "Pattern found in every line: %s"
 msgstr "ѥƤιԤǸĤޤ: %s"
 
+#, c-format
+msgid "Pattern not found: %s"
+msgstr "ѥϸĤޤǤ: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
--- a/src/po/ja.sjis.po
+++ b/src/po/ja.sjis.po
@@ -3,7 +3,7 @@
 # Do ":help uganda"  in Vim to read copying and usage conditions.
 # Do ":help credits" in Vim to see a list of people who contributed.
 #
-# Last Change: 24-Feb-2013.
+# Last Change: 17-Apr-2013.
 #
 # Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
 # THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-24 12:38+0900\n"
-"PO-Revision-Date: 2013-02-24 13:30+0900\n"
+"POT-Creation-Date: 2013-04-17 19:56+0900\n"
+"PO-Revision-Date: 2013-04-17 20:00+0900\n"
 "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language: Japanese\n"
@@ -569,7 +569,7 @@ msgid "add() argument"
 msgstr "add() ̈"
 
 msgid "E699: Too many arguments"
-msgstr "E699: ߂܂"
+msgstr "E699: ߂܂"
 
 msgid "E785: complete() can only be used in Insert mode"
 msgstr "E785: complete() ͑}[hłpł܂"
@@ -685,7 +685,7 @@ msgid "E730: using List as a String"
 msgstr "E730: Xg^𕶎ƂĈĂ܂"
 
 msgid "E731: using Dictionary as a String"
-msgstr "E731: ϐ^𕶎ƂĈĂ܂"
+msgstr "E731: ^𕶎ƂĈĂ܂"
 
 msgid "E806: using Float as a String"
 msgstr "E806: _𕶎ƂĈĂ܂"
@@ -998,6 +998,10 @@ msgstr "E148: globalR}hɐK\\w肳Ă܂"
 msgid "Pattern found in every line: %s"
 msgstr "p^[SĂ̍sŌ‚܂: %s"
 
+#, c-format
+msgid "Pattern not found: %s"
+msgstr "p^[͌‚܂ł: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"