updated for version 7.0128
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index edda27a..0b7c616 100644
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
-" Last Change:	Aug 08, 2005
+" Last Change:	Aug 10, 2005
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	59
+" Version:	60
 " License:	Vim License  (see vim's :help license)
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr.
 "               Permission is hereby granted to use and distribute this code,
@@ -22,9 +22,11 @@
 if exists("g:loaded_netrw") || &cp
   finish
 endif
-let g:loaded_netrw  = "v59"
-let loaded_explorer = 1
-let s:keepcpo       = &cpo
+let g:loaded_netrw  = "v60"
+if v:version < 700
+ let loaded_explorer = 1
+endif
+let s:keepcpo= &cpo
 set cpo&vim
 
 " ---------------------------------------------------------------------
@@ -255,28 +257,28 @@
 fun! s:NetSavePosn()
 "  call Dfunc("NetSavePosn()")
   " Save current line and column
-  let s:netrw_winnr= winnr()
-  let s:netrw_line = line(".")
-  let s:netrw_col  = virtcol(".")
+  let w:netrw_winnr= winnr()
+  let w:netrw_line = line(".")
+  let w:netrw_col  = virtcol(".")
 
   " Save top-of-screen line
   norm! H0
-  let s:netrw_hline= line(".")
+  let w:netrw_hline= line(".")
 
   call s:NetRestorePosn()
-"  call Dret("NetSavePosn : winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+"  call Dret("NetSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
 endfun
 
 " ------------------------------------------------------------------------
 " NetRestorePosn: restores the cursor and file position as saved by NetSavePosn() {{{1
 fun! <SID>NetRestorePosn()
-"  call Dfunc("NetRestorePosn() winnr=".s:netrw_winnr." line=".s:netrw_line." col=".s:netrw_col." hline=".s:netrw_hline)
+"  call Dfunc("NetRestorePosn() winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
   let eikeep= &ei
   set ei=all
 
   " restore window
-"  call Decho("restore window: exe silent! ".s:netrw_winnr."wincmd w")
-  exe "silent! ".s:netrw_winnr."wincmd w"
+"  call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
+  exe "silent! ".w:netrw_winnr."wincmd w"
 "  if v:shell_error == 0
 "   " as suggested by Bram M: redraw on no error
 "   " allows protocol error messages to remain visible
@@ -284,12 +286,12 @@
 "  endif
 
   " restore top-of-screen line
-"  call Decho("restore topofscreen: exe norm! ".s:netrw_hline."G0z")
-  exe "norm! ".s:netrw_hline."G0z\<CR>"
+"  call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
+  exe "norm! ".w:netrw_hline."G0z\<CR>"
 
   " restore position
-"  call Decho("restore posn: exe norm! ".s:netrw_line."G0".s:netrw_col."|")
-  exe "norm! ".s:netrw_line."G0".s:netrw_col."\<bar>"
+"  call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
+  exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
 
   let &ei= eikeep
 "  call Dret("NetRestorePosn")
@@ -1050,6 +1052,12 @@
 fun! <SID>NetBrowse(dirname)
 "  call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
 
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Dret("NetBrowse")
+   return
+  endif
+
   " sanity check
   if exists("b:netrw_method") && b:netrw_method =~ '[235]'
 "   call Decho("b:netrw_method=".b:netrw_method)
@@ -1106,8 +1114,8 @@
   endif
 
   if exists("b:netrw_method")
-"   call Decho("setting s:netrw_method<".b:netrw_method.">")
-   let s:netrw_method= b:netrw_method
+"   call Decho("setting w:netrw_method<".b:netrw_method.">")
+   let w:netrw_method= b:netrw_method
   endif
 
   " optionally sort by time (-t) or by size (-S)
@@ -1200,14 +1208,14 @@
   nnoremap <buffer> <silent> B		:<c-u>call <SID>NetBookmarkDir(1,expand("%"))<cr>
   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(0)<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(0)<cr>
-  nnoremap <buffer> <silent> o		:exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> o		:call <SID>NetSplit(0)<cr>
   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,expand("%"))<cr>
   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr>
   nnoremap <buffer> <silent> s		:call <SID>NetSaveWordPosn()<bar>let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<bar>call <SID>NetRestoreWordPosn()<cr>
   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
-  nnoremap <buffer> <silent> v		:exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> v		:call <SID>NetSplit(1)<cr>
   nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()),1)<cr>
   nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))<cr>
   exe 'nnoremap <buffer> <silent> <del>	:exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>'
@@ -1225,15 +1233,15 @@
   keepjumps put ='\" ==========================================================================='
   keepjumps put ='\" Netrw Remote Directory Listing'
   keepjumps put ='\"   '.bufname
-  let s:netrw_bannercnt= 7
-  let sortby= g:netrw_sort_by
+  let w:netrw_bannercnt = 7
+  let sortby            = g:netrw_sort_by
   if g:netrw_sort_direction =~ "^r"
-   let sortby= sortby." reversed"
+   let sortby           = sortby." reversed"
   endif
 
   if g:netrw_sort_by =~ "^n"
    " sorted by name
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
    keepjumps put ='\"   Sorted by      '.sortby
    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
   else
@@ -1246,7 +1254,7 @@
    else
     keepjumps put ='\"   Showing:       '.g:netrw_list_hide
    endif
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
   endif
   keepjumps put ='\"   Quick Help:    ?:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
   keepjumps put ='\" ==========================================================================='
@@ -1263,7 +1271,7 @@
    if !g:netrw_longlist
     " shorten the listing
 "    call Decho("generate short listing")
-    exe "keepjumps ".s:netrw_bannercnt
+    exe "keepjumps ".w:netrw_bannercnt
 
     " cleanup
     if g:netrw_ftp_browse_reject != ""
@@ -1283,9 +1291,9 @@
     keepjumps norm! 0
 
     " more cleanup
-    exe 'keepjumps silent! '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
-    exe "keepjumps silent! ".s:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
-    exe "keepjumps silent! ".s:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
+    exe 'keepjumps silent! '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
+    exe "keepjumps silent! ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
    endif
 
   else
@@ -1315,7 +1323,7 @@
   endif
 
   " manipulate the directory listing (hide, sort)
-  if line("$") >= s:netrw_bannercnt
+  if line("$") >= w:netrw_bannercnt
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
    endif
@@ -1326,7 +1334,7 @@
 
     if method == "ftp"
      " cleanup
-     exe "keepjumps ".s:netrw_bannercnt
+     exe "keepjumps ".w:netrw_bannercnt
      while getline(".") =~ g:netrw_ftp_browse_reject
       keepjumps d
      endwhile
@@ -1336,37 +1344,37 @@
      silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
      let line2= line(".")
      if line2 == 0
-      exe 'keepjumps '.s:netrw_bannercnt."put='./'"
-      exe 'keepjumps '.s:netrw_bannercnt."put='../'"
+      exe 'keepjumps '.w:netrw_bannercnt."put='./'"
+      exe 'keepjumps '.w:netrw_bannercnt."put='../'"
      endif
     exe "keepjumps ".line1
     keepjumps norm! 0
     endif
 
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$s/ -> .*$//e'
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
-    exe s:netrw_bannercnt
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/ -> .*$//e'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+    exe w:netrw_bannercnt
    endif
 
-   if line("$") >= s:netrw_bannercnt
+   if line("$") >= w:netrw_bannercnt
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
      if v:version < 700
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
      elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
     endif
     if g:netrw_longlist
      " shorten the list to keep its width <= 80 characters
-     exe "keepjumps silent ".s:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
+     exe "keepjumps silent ".w:netrw_bannercnt.',$s/\t[-dstrwx]\+/\t/e'
     endif
    endif
   endif
-  exe "keepjumps ".s:netrw_bannercnt
+  exe "keepjumps ".w:netrw_bannercnt
 
   setlocal nomod noma nonu
 
@@ -1421,8 +1429,27 @@
 "  NetGetWord: it gets the directory named under the cursor
 fun! <SID>NetGetWord()
 "  call Dfunc("NetGetWord() line#".line("."))
-  if line(".") < s:netrw_bannercnt
+  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
    let dirname= "./"
+   let curline= getline(".")
+   if curline =~ '"\s*Sorted by\s'
+    norm s
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "s" also works'
+   elseif curline =~ '"\s*Sort sequence:'
+    let s:netrw_skipbrowse= 1
+    echo 'Press "S" to edit sorting sequence'
+   elseif curline =~ '"\s*Quick Help:'
+    norm ?
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "?" also works'
+   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
+    norm a
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "a" also works'
+   elseif line("$") > w:netrw_bannercnt
+    exe w:netrw_bannercnt
+   endif
   else
    let dirname= getline(".")
    if dirname =~ '\t'
@@ -1466,7 +1493,7 @@
     endif
 
     if all || ok =~ 'y\%[es]' || ok == ""
-     if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
       silent! keepjumps .,$d
       call NetBrowseFtpCmd(a:path,"delete ".rmfile)
      else
@@ -1492,7 +1519,7 @@
     endif
 
     if all || ok =~ 'y\%[es]' || ok == ""
-     if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
       call NetBrowseFtpCmd(a:path,"rmdir ".rmfile)
      else
       let rmfile         = a:path.rmfile
@@ -1552,7 +1579,7 @@
    let newname= input("Moving ".oldname." to : ",oldname)
    call inputrestore()
 
-   if exists("s:netrw_method") && (s:netrw_method == 2 || s:netrw_method == 3)
+   if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
     call NetBrowseFtpCmd(a:path,"rename ".oldname." ".newname)
    else
     let oldname= a:path.oldname
@@ -1583,6 +1610,41 @@
 endfun
 
 " ---------------------------------------------------------------------
+" NetSplit: mode {{{2
+"           =0 : net   and o
+"           =1 : net   and v
+"           =2 : local and o
+"           =3 : local and v
+fun! s:NetSplit(mode)
+"  call Dfunc("NetSplit(mode=".a:mode.")")
+
+  call s:SaveWinVars()
+  if a:mode == 0
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
+  elseif a:mode ==1
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetWord()))
+  elseif a:mode ==2
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
+  else
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   call s:CopyWinVars()
+   exe "norm! 0"
+   call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))
+  endif
+
+"  call Dret("NetSplit")
+endfun
+
+" ---------------------------------------------------------------------
 " NetBrowseX:  allows users to write custom functions to operate on {{{2
 "              files given their extension.  Passes 0=local, 1=remote
 fun! <SID>NetBrowseX(fname,remote)
@@ -1661,7 +1723,7 @@
 "  and reverse sorts will be requested of the server but not otherwise
 "  enforced here.
 fun! NetBrowseFtpCmd(path,cmd)
-"  call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".s:netrw_method)
+"  call Dfunc("NetBrowseFtpCmd(path<".a:path."> cmd<".a:cmd.">) netrw_method=".w:netrw_method)
 
   " because WinXX ftp uses unix style input
   " curline is one more than the bannercnt in order to account
@@ -1669,11 +1731,11 @@
   " buffer yields a blank first line)
   let ffkeep= &ff
   setlocal ma ff=unix
-  let curline= s:netrw_bannercnt+1
+  let curline= w:netrw_bannercnt+1
   exe "silent! keepjumps ".curline.",$d"
 
    ".........................................
-  if s:netrw_method == 2 || s:netrw_method == 5
+  if w:netrw_method == 2 || w:netrw_method == 5
    " ftp + <.netrc>:  Method #2
    if a:path != ""
     put ='cd '.a:path
@@ -1689,7 +1751,7 @@
    endif
 
    ".........................................
-  elseif s:netrw_method == 3
+  elseif w:netrw_method == 3
    " ftp + machine,id,passwd,filename:  Method #3
     setlocal ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -1759,9 +1821,9 @@
    " Prune the list by hiding any files which match
 "   call Decho("pruning <".hide."> listhide<".listhide.">")
    if g:netrw_hide == 1
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$g~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g~'.hide.'~d'
    elseif g:netrw_hide == 2
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$v~'.hide.'~d'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v~'.hide.'~d'
    endif
   endwhile
 
@@ -1838,7 +1900,8 @@
    silent call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,"./"))
   endif
 
-"  call s:NetRestorePosn()
+  call s:NetRestorePosn()
+
 "  call Dret("NetLongList : g:netrw_longlist=".g:netrw_longlist)
 endfun
 
@@ -1964,6 +2027,15 @@
 "    5: (user: <U>)   go down (next)     bookmark
 fun! <SID>NetBookmarkDir(chg,curdir)
 "  call Dfunc("NetBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count)
+  if exists("w:netrw_bannercnt") && line(".") <= w:netrw_bannercnt
+   " looks like a "b" was pressed while in the banner region
+   if line("$") > w:netrw_bannercnt
+    exe w:netrw_bannercnt
+   endif
+   echo ""
+"  call Dret("NetBookmarkDir - ignoring")
+   return
+  endif
 
   if a:chg == 0
    " bookmark the current directory
@@ -1973,6 +2045,7 @@
    elseif v:count > g:NETRW_BOOKMARKMAX
     let g:NETRW_BOOKMARKMAX= v:count
    endif
+   echo "bookmarked the current directory"
 
   elseif a:chg == 1
    " change to the bookmarked directory
@@ -2072,6 +2145,12 @@
 "  call Dfunc("LocalBrowse(dirname<".a:dirname.">) buf#".bufnr("%")." winnr=".winnr()." sortby=".g:netrw_sort_by)
 "  call Dredir("ls!")
 
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Dret("NetBrowse")
+   return
+  endif
+
   if v:version < 603
    if !exists("g:netrw_quiet")
     echohl Error | echo "***netrw*** vim version<".v:version."> too old for browsing with netrw" | echohl None
@@ -2142,7 +2221,18 @@
   " make netrw's idea of the current directory vim's if the user wishes
   if !g:netrw_keepdir
 "   call Decho("change directory: cd ".b:netrw_curdir)
-   exe 'cd '.b:netrw_curdir
+   try
+    exe 'cd '.b:netrw_curdir
+   catch /^Vim\%((\a\+)\)\=:E472/
+    echohl Error | echo "***netrw*** unable to change directory to <".b:netrw_curdir."> (permissions?)" | echohl None
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+    if exists("w:netrw_prvdir")
+     let b:netrw_curdir= w:netrw_prvdir
+    else
+"     call Dret("LocalBrowse : reusing buffer#".bufnum."<".a:dirname.">")
+     return
+    endif
+   endtry
   endif
 
   " change the name of the buffer to reflect the b:netrw_curdir
@@ -2174,7 +2264,7 @@
   nnoremap <buffer> <silent> d		:call <SID>NetMakeDir("")<cr>
   nnoremap <buffer> <silent> <c-h>	:call <SID>NetHideEdit(1)<cr>
   nnoremap <buffer> <silent> i		:call <SID>NetLongList(1)<cr>
-  nnoremap <buffer> <silent> o		:exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> o		:call <SID>NetSplit(2)<cr>
   nnoremap <buffer> <silent> p		:exe "norm! 0"<bar>call <SID>LocalPreview(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),1))<cr>
   nnoremap <buffer> <silent> q		:<c-u>call <SID>NetBookmarkDir(2,b:netrw_curdir)<cr>
   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,'./'))<cr>
@@ -2182,7 +2272,7 @@
   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetBookmarkDir(4,expand("%"))<cr>
   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetBookmarkDir(5,expand("%"))<cr>
-  nnoremap <buffer> <silent> v		:exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
+  nnoremap <buffer> <silent> v		:call <SID>NetSplit(3)<cr>
   nnoremap <buffer> <silent> x		:exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord(),0),0)<cr>
   nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalRefresh(<SID>LocalBrowseChgDir(b:netrw_curdir,<SID>NetGetWord()))<cr>
   nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
@@ -2202,7 +2292,7 @@
   keepjumps 1d
   keepjumps put ='\" Directory Listing                                              (netrw '.g:loaded_netrw.')'
   keepjumps put ='\"   '.b:netrw_curdir
-  let s:netrw_bannercnt= 3
+  let w:netrw_bannercnt= 3
 
   let sortby= g:netrw_sort_by
   if g:netrw_sort_direction =~ "^r"
@@ -2215,12 +2305,12 @@
    " sorted by name
    keepjumps put ='\"   Sorted by      '.sortby
    keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
-   let s:netrw_bannercnt= s:netrw_bannercnt + 2
+   let w:netrw_bannercnt= w:netrw_bannercnt + 2
   else
 "   call Decho("directories will be sorted by size or date")
    " sorted by size or date
    keepjumps put ='\"   Sorted by '.sortby
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
   endif
 
   " Hiding...  -or-  Showing...
@@ -2230,15 +2320,15 @@
    else
     keepjumps put ='\"   Showing:       '.g:netrw_list_hide
    endif
-   let s:netrw_bannercnt= s:netrw_bannercnt + 1
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
   endif
   keepjumps put ='\"   Quick Help:    ?:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
   keepjumps put ='\" ============================================================================'
-  let s:netrw_bannercnt= s:netrw_bannercnt + 2
+  let w:netrw_bannercnt= w:netrw_bannercnt + 2
 
   " bannercnt should index the line just after the banner
-  let s:netrw_bannercnt= s:netrw_bannercnt + 1
-"  call Decho("bannercnt=".s:netrw_bannercnt)
+  let w:netrw_bannercnt= w:netrw_bannercnt + 1
+"  call Decho("bannercnt=".w:netrw_bannercnt)
 
   " generate the requested directory listing
   call LocalBrowseList()
@@ -2252,38 +2342,43 @@
   endif
 
   " manipulate the directory listing (hide, sort)
-  if line("$") >= s:netrw_bannercnt
+  if line("$") >= w:netrw_bannercnt
    if g:netrw_hide && g:netrw_list_hide != ""
     call s:NetrwListHide()
    endif
-   if line("$") >= s:netrw_bannercnt
+   if line("$") >= w:netrw_bannercnt
 
     if g:netrw_sort_by =~ "^n"
      call s:SetSort()
 
      if v:version < 700
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
      elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{3}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
 
     else
      if v:version < 700
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$call s:NetSort()'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$call s:NetSort()'
      elseif g:netrw_sort_direction =~ 'n'
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort'
      else
-      exe 'keepjumps silent '.s:netrw_bannercnt.',$sort!'
+      exe 'keepjumps silent '.w:netrw_bannercnt.',$sort!'
      endif
-     exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\d\{-}\///e'
+     exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
     endif
 
    endif
   endif
-  exe s:netrw_bannercnt
+  if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
+   exe w:netrw_bannercnt
+  endif
+
+  " record previous current directory
+  let w:netrw_prvdir= b:netrw_curdir
 
   setlocal noma nomod nonu bh=hide nobl
   if has("netbeans_intg") || has("sun_workshop")
@@ -2454,7 +2549,7 @@
    exe "keepjumps ".ctr
 
    " sanity checks
-   if line(".") < s:netrw_bannercnt
+   if line(".") < w:netrw_bannercnt
     let ctr= ctr + 1
     continue
    endif
@@ -2558,7 +2653,7 @@
    exe "keepjumps ".ctr
 
    " sanity checks
-   if line(".") < s:netrw_bannercnt
+   if line(".") < w:netrw_bannercnt
     let ctr= ctr + 1
     continue
    endif
@@ -2630,46 +2725,67 @@
 
   " if dosplit or file has been modified
   if a:dosplit || &modified
+   call <SID>SaveWinVars()
+
    if a:style == 0      " Explore, Sexplore
     exe g:netrw_winsize."wincmd s"
+"    call Decho("style=0: Explore or Sexplore")
+
    elseif a:style == 1  "Explore!, Sexplore!
     exe g:netrw_winsize."wincmd v"
+"    call Decho("style=1: Explore! or Sexplore!")
+
    elseif a:style == 2  " Hexplore
     exe "bel ".g:netrw_winsize."wincmd s"
+"    call Decho("style=2: Hexplore")
+
    elseif a:style == 3  " Hexplore!
     exe "abo ".g:netrw_winsize."wincmd s"
+"    call Decho("style=3: Hexplore!")
+
    elseif a:style == 4  " Vexplore
     exe "lefta ".g:netrw_winsize."wincmd v"
+"    call Decho("style=4: Vexplore")
+
    elseif a:style == 5  " Vexplore!
     exe "rightb ".g:netrw_winsize."wincmd v"
+"    call Decho("style=5: Vexplore!")
    endif
+   call s:CopyWinVars()
   endif
   norm! 0
 
   if a:1 == "" && a:indx >= 0
-   let newdir= substitute(expand("%:p"),'^\(.*\)[/\\][^/\\]*$','\1','e')
-"   call Decho("calling LocalBrowse(newdir<".newdir.">)")
-   call s:LocalBrowse(newdir)
+   " Explore Hexplore Vexplore Sexplore
+   let newdir= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+   if newdir =~ '^scp:' || newdir =~ '^ftp:'
+"    call Decho("calling NetBrowse(newdir<".newdir.">)")
+    call s:NetBrowse(newdir)
+   else
+"    call Decho("calling LocalBrowse(newdir<".newdir.">)")
+    call s:LocalBrowse(newdir)
+   endif
 
   elseif a:1 =~ '\*\*/' || a:indx < 0
+   " Nexplore Pexplore -or-  Explore **/...
 
-   if has("path_extra")
-    if !exists("s:explore_indx")
-     let s:explore_indx= 0
+   if has("path_extra") && v:version >= 700
+    if !exists("w:netrw_explore_indx")
+     let w:netrw_explore_indx= 0
     endif
     let indx = a:indx
     if indx == -1
-     let indx= s:explore_indx + 1
+     let indx= w:netrw_explore_indx + 1
     elseif indx == -2
-     let indx= s:explore_indx - 1
+     let indx= w:netrw_explore_indx - 1
     else
-     let s:explore_indx    = 0
+     let w:netrw_explore_indx    = 0
      if !exists("b:netrw_curdir")
-       let b:netrw_curdir = "."
+      let b:netrw_curdir= getcwd()
      endif
-     let s:explorelist     = split(expand(b:netrw_curdir."/".a:1),'\n')
-     let s:explore_listlen = len(s:explorelist)
-     if s:explore_listlen == 1 && s:explorelist[0] =~ '\*\*\/'
+     let w:netrw_explore_list    = split(expand(b:netrw_curdir."/".a:1),'\n')
+     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+     if w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/'
       echohl WarningMsg | echo "***netrw*** no files matched" | echohl None
       call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "      call Dret("Explore")
@@ -2678,32 +2794,33 @@
     endif
 
     " NetrwStatusLine support
-    let s:explore_indx  = indx
+    let w:netrw_explore_indx= indx
     if !exists("s:netrw_explore_stl")
      let s:netrw_explore_stl= &stl
     endif
     set stl=%f\ %h%m%r%=%{NetrwStatusLine()}
-"    call Decho("explorelist<".join(s:explorelist,',')."> len=".s:explore_listlen)
+"    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
 
     " sanity check
-    if indx >= s:explore_listlen || indx < 0
-     let indx= (indx < 0)? 0 : ( s:explore_listlen - 1 )
+    if indx >= w:netrw_explore_listlen || indx < 0
+     let indx= (indx < 0)? 0 : ( w:netrw_explore_listlen - 1 )
      echohl WarningMsg | echo "***netrw*** no more files match Explore pattern" | echohl None
      call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 "     call Dret("Explore")
      return
     endif
 
-    exe "let dirfile= s:explorelist[".indx."]"
+    exe "let dirfile= w:netrw_explore_list[".indx."]"
 "    call Decho("dirfile<".dirfile."> indx=".indx)
     let newdir= substitute(dirfile,'/[^/]*$','','e')
 "    call Decho("newdir<".newdir.">")
 "    call Decho("calling LocalBrowse(newdir<".newdir.">)")
     call s:LocalBrowse(newdir)
     call search(substitute(dirfile,"^.*/","",""),"W")
-    let s:explore_mtchcnt = indx + 1
-    let s:explore_bufnr   = bufnr(".")
-    let s:explore_line    = line(".")
+    let w:netrw_explore_mtchcnt = indx + 1
+    let w:netrw_explore_bufnr   = bufnr(".")
+    let w:netrw_explore_line    = line(".")
+"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
 
    else
     if v:version < 700
@@ -2726,13 +2843,14 @@
 " ---------------------------------------------------------------------
 " NetrwStatusLine: {{{2
 fun! NetrwStatusLine()
-  let g:explore_bufnr= s:explore_bufnr
-  let g:explore_line= s:explore_line
-  if !exists("s:explore_bufnr") || s:explore_bufnr != bufnr(".") || !exists("s:explore_line") || s:explore_line != line(".")
+"  let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
+  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr(".") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
    let &stl= s:netrw_explore_stl
+   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
+   if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
    return ""
   else
-   return "Match ".s:explore_mtchcnt." of ".s:explore_listlen
+   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
   endif
 endfun
 
@@ -3119,7 +3237,7 @@
 "          "files" that satisfy each pattern, putting the priority / in
 "          front.  An "*" pattern handles the default priority.
 fun! <SID>SetSort()
-"  call Dfunc("SetSort() bannercnt=".s:netrw_bannercnt)
+"  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
   if g:netrw_longlist
    let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
   else
@@ -3151,24 +3269,54 @@
 "   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
 
    " sanity check
-   if s:netrw_bannercnt > line("$")
+   if w:netrw_bannercnt > line("$")
     " apparently no files were left after a Hiding pattern was used
 "    call Dret("SetSort : no files left after hiding")
     return
    endif
    if seq == '*'
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.spriority.'/'
    else
-    exe 'keepjumps silent '.s:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
+    exe 'keepjumps silent '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
    endif
    let priority = priority + 1
   endwhile
 
-  exe 'keepjumps silent '.s:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
+  exe 'keepjumps silent '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+/\1/e'
 
 "  call Dret("SetSort")
 endfun
 
+" ---------------------------------------------------------------------
+" SaveWinVars: (used by Explore()) {{{1
+fun! s:SaveWinVars()
+"  call Dfunc("SaveWinVars()")
+  if exists("w:netrw_bannercnt")      |let s:bannercnt       = w:netrw_bannercnt      |endif
+  if exists("w:netrw_method")         |let s:method          = w:netrw_method         |endif
+  if exists("w:netrw_prvdir")         |let s:prvdir          = w:netrw_prvdir         |endif
+  if exists("w:netrw_explore_indx")   |let s:explore_indx    = w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
+  if exists("w:netrw_explore_bufnr")  |let s:explore_bufnr   = w:netrw_explore_bufnr  |endif
+  if exists("w:netrw_explore_line")   |let s:explore_line    = w:netrw_explore_line   |endif
+"  call Dret("SaveWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" CopyWinVars: (used by Explore()) {{{1
+fun! s:CopyWinVars()
+"  call Dfunc("CopyWinVars()")
+  if exists("s:bannercnt")      |let w:netrw_bannercnt       = s:bannercnt      |unlet s:bannercnt      |endif
+  if exists("s:method")         |let w:netrw_method          = s:method         |unlet s:method         |endif
+  if exists("s:prvdir")         |let w:netrw_prvdir          = s:prvdir         |unlet s:prvdir         |endif
+  if exists("s:explore_indx")   |let w:netrw_explore_indx    = s:explore_indx   |unlet s:explore_indx   |endif
+  if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
+  if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
+  if exists("s:explore_bufnr")  |let w:netrw_explore_bufnr   = s:explore_bufnr  |unlet s:explore_bufnr  |endif
+  if exists("s:explore_line")   |let w:netrw_explore_line    = s:explore_line   |unlet s:explore_line   |endif
+"  call Dret("CopyWinVars")
+endfun
+
 let &cpo= s:keepcpo
 unlet s:keepcpo
 " ------------------------------------------------------------------------