Update runtime files
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index 4e0906d..3d9d60a 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -3,7 +3,7 @@
 # Vim functions for file type detection
 #
 # Maintainer:	Bram Moolenaar <Bram@vim.org>
-# Last Change:	2022 Dec 14
+# Last Change:	2023 Apr 22
 
 # These functions are moved here from runtime/filetype.vim to make startup
 # faster.
diff --git a/runtime/autoload/dist/script.vim b/runtime/autoload/dist/script.vim
index e95c633..cefc3b2 100644
--- a/runtime/autoload/dist/script.vim
+++ b/runtime/autoload/dist/script.vim
@@ -4,7 +4,7 @@
 # Invoked from "scripts.vim" in 'runtimepath'
 #
 # Maintainer:	Bram Moolenaar <Bram@vim.org>
-# Last Change:	2022 Nov 24
+# Last Change:	2023 Apr 17
 
 export def DetectFiletype()
   var line1 = getline(1)
diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim
index 29310aa..1372de4 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across
 "            AUTOLOAD SECTION
-" Date:		Aug 16, 2021
-" Version:	171
+" Date:		Mar 15, 2023
+" Version:	172
 " Maintainer:	Charles E Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 2016 Charles E. Campbell {{{1
@@ -43,7 +43,7 @@
  endfor
 endif
 
-let g:loaded_netrw = "v171"
+let g:loaded_netrw = "v172"
 if !exists("s:NOTE")
  let s:NOTE    = 0
  let s:WARNING = 1
@@ -208,7 +208,6 @@
 let g:netrw_localcopydircmdopt = ""
 let g:netrw_localmkdiropt      = ""
 let g:netrw_localmovecmdopt    = ""
-let g:netrw_localrmdiropt      = ""
 
 " ---------------------------------------------------------------------
 " Default values for netrw's global protocol variables {{{2
@@ -1186,6 +1185,11 @@
 
 " ---------------------------------------------------------------------
 " netrw#Lexplore: toggle Explorer window, keeping it on the left of the current tab {{{2
+"   Uses  g:netrw_chgwin  : specifies the window where Lexplore files are to be opened
+"         t:netrw_lexposn : winsaveview() output (used on Lexplore window)
+"         t:netrw_lexbufnr: the buffer number of the Lexplore buffer  (internal to this function)
+"         s:lexplore_win  : window number of Lexplore window (serves to indicate which window is a Lexplore window)
+"         w:lexplore_buf  : buffer number of Lexplore window (serves to indicate which window is a Lexplore window)
 fun! netrw#Lexplore(count,rightside,...)
 "  call Dfunc("netrw#Lexplore(count=".a:count." rightside=".a:rightside.",...) a:0=".a:0." ft=".&ft)
   let curwin= winnr()
@@ -1202,6 +1206,8 @@
 "    call Decho("exe Explore ".fnameescape(a:1),'~'.expand("<slnum>"))
     exe "Explore ".fnameescape(a1)
     exe curwin."wincmd w"
+    let s:lexplore_win= curwin
+    let w:lexplore_buf= bufnr("%")
     if exists("t:netrw_lexposn")
 "     call Decho("forgetting t:netrw_lexposn",'~'.expand("<slnum>"))
      unlet t:netrw_lexposn
@@ -1276,7 +1282,7 @@
    let t:netrw_lexbufnr = bufnr("%")
    " done to prevent build-up of hidden buffers due to quitting and re-invocation of :Lexplore.
    " Since the intended use of :Lexplore is to have an always-present explorer window, the extra
-   " effort to mis-use :Lex is warranted.
+   " effort to prevent mis-use of :Lex is warranted.
    set bh=wipe
 "   call Decho("let t:netrw_lexbufnr=".t:netrw_lexbufnr) 
 "   call Decho("t:netrw_lexposn".(exists("t:netrw_lexposn")? string(t:netrw_lexposn) : " n/a"))
@@ -1680,7 +1686,7 @@
   endif
   let {a:vt}netrw_fokeep    = &l:fo           " formatoptions
   let {a:vt}netrw_gdkeep    = &l:gd           " gdefault
-  let {a:vt}netrw_gokeep    = &l:go           " guioptions
+  let {a:vt}netrw_gokeep    = &go             " guioptions
   let {a:vt}netrw_hidkeep   = &l:hidden
   let {a:vt}netrw_imkeep    = &l:im
   let {a:vt}netrw_iskkeep   = &l:isk
@@ -1751,8 +1757,9 @@
   if &cpo =~ 'a' | call s:NetrwSetSafeSetting("&cpo",substitute(&cpo,'a','','g')) | endif
   if &cpo =~ 'A' | call s:NetrwSetSafeSetting("&cpo",substitute(&cpo,'A','','g')) | endif
   setl fo=nroql2
-  " call s:NetrwSetSafeSetting("&go","begmr")
-  if &go =~ '\ca' | call s:NetrwSetSafeSetting("&go",substitute(&go,'\ca','','g')) | endif
+  if &go =~ 'a' | set go-=a | endif
+  if &go =~ 'A' | set go-=A | endif
+  if &go =~ 'P' | set go-=P | endif
   call s:NetrwSetSafeSetting("&l:hid",0)
   call s:NetrwSetSafeSetting("&l:im",0)
   setl isk+=@ isk+=* isk+=/
@@ -1791,11 +1798,13 @@
 "  call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt,'~'.expand("<slnum>"))
   if !exists("{a:vt}netrw_optionsave")
 "   call Decho("case ".a:vt."netrw_optionsave : doesn't exist",'~'.expand("<slnum>"))
-   if !isdirectory(expand('%'))
+   if filereadable(expand("%"))
 "    call Decho("..doing filetype detect anyway")
-     filetype detect
+    filetype detect
+"    call Decho("..settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt,'~'.expand("<slnum>"))
+   else
+    setl ft=netrw
    endif
-"   call Decho("..settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt,'~'.expand("<slnum>"))
 "   call Decho("..ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)",'~'.expand("<slnum>"))
 "   call Dret("s:NetrwOptionsRestore : ".a:vt."netrw_optionsave doesn't exist")
    return
@@ -1835,7 +1844,7 @@
 "  call Decho("(s:NetrwOptionsRestore) #4 lines=".&lines)
   call s:NetrwRestoreSetting(a:vt."netrw_fokeep"   ,"&l:fo")
   call s:NetrwRestoreSetting(a:vt."netrw_gdkeep"   ,"&l:gd")
-  call s:NetrwRestoreSetting(a:vt."netrw_gokeep"   ,"&l:go")
+  call s:NetrwRestoreSetting(a:vt."netrw_gokeep"   ,"&go")
   call s:NetrwRestoreSetting(a:vt."netrw_hidkeep"  ,"&l:hidden")
 "  call Decho("(s:NetrwOptionsRestore) #5 lines=".&lines)
   call s:NetrwRestoreSetting(a:vt."netrw_imkeep"   ,"&l:im")
@@ -1906,11 +1915,9 @@
   " were having their filetype detect-generated settings overwritten by
   " NetrwOptionRestore.
   if &ft != "netrw"
-    if !isdirectory(expand('%'))
-"     call Decho("before: filetype detect  (ft=".&ft.")",'~'.expand("<slnum>"))
-      filetype detect
-"     call Decho("after : filetype detect  (ft=".&ft.")",'~'.expand("<slnum>"))
-    endif
+"   call Decho("before: filetype detect  (ft=".&ft.")",'~'.expand("<slnum>"))
+   filetype detect
+"   call Decho("after : filetype detect  (ft=".&ft.")",'~'.expand("<slnum>"))
   endif
 "  call Decho("(s:NetrwOptionsRestore) lines=".&lines)
 "  call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt,'~'.expand("<slnum>"))
@@ -2985,13 +2992,19 @@
    " rename buffer back to remote filename
    call s:NetrwBufRename(rfile)
 
+   " Jan 19, 2022: COMBAK -- bram problem with https://github.com/vim/vim/pull/9554.diff filetype
    " Detect filetype of local version of remote file.
    " Note that isk must not include a "/" for scripts.vim
    " to process this detection correctly.
-"   call Decho("detect filetype of local version of remote file",'~'.expand("<slnum>"))
-   let iskkeep= &l:isk
+"   call Decho("detect filetype of local version of remote file<".rfile.">",'~'.expand("<slnum>"))
+"   call Decho("..did_filetype()=".did_filetype())
+   setl ft=
+"   call Decho("..initial filetype<".&ft."> for buf#".bufnr()."<".bufname().">")
+   let iskkeep= &isk
    setl isk-=/
-   let &l:isk= iskkeep
+   filetype detect
+"   call Decho("..local filetype<".&ft."> for buf#".bufnr()."<".bufname().">")
+   let &isk= iskkeep
 "   call Dredir("ls!","NetrwGetFile (renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">)")
    let line1 = 1
    let line2 = line("$")
@@ -4272,7 +4285,7 @@
   endif
 "  call Decho("  bufnum#".bufnum,'~'.expand("<slnum>"))
 
-  " hijack the current buffer
+  " highjack the current buffer
   "   IF the buffer already has the desired name
   "   AND it is empty
   let curbuf = bufname("%")
@@ -4280,7 +4293,7 @@
    let curbuf = getcwd()
   endif
 "  call Dredir("ls!","NetrwGetFile (renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">)")
-"  call Decho("deciding if netrw may hijack the current buffer#".bufnr("%")."<".curbuf.">",'~'.expand("<slnum>"))
+"  call Decho("deciding if netrw may highjack the current buffer#".bufnr("%")."<".curbuf.">",'~'.expand("<slnum>"))
 "  call Decho("..dirname<".dirname.">  IF dirname == bufname",'~'.expand("<slnum>"))
 "  call Decho("..curbuf<".curbuf.">",'~'.expand("<slnum>"))
 "  call Decho("..line($)=".line("$")." AND this is 1",'~'.expand("<slnum>"))
@@ -4289,7 +4302,7 @@
 "   call Dret("s:NetrwGetBuffer 0<cleared buffer> : highjacking buffer#".bufnr("%"))
    return 0
   else  " DEBUG
-"   call Decho("..did NOT hijack buffer",'~'.expand("<slnum>"))
+"   call Decho("..did NOT highjack buffer",'~'.expand("<slnum>"))
   endif
   " Aug 14, 2021: was thinking about looking for a [No Name] buffer here and using it, but that might cause problems
 
@@ -4325,19 +4338,25 @@
 
   else " Re-use the buffer
 "   call Decho("--re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)",'~'.expand("<slnum>"))
+   " ignore all events
    let eikeep= &ei
    setl ei=all
-   if getline(2) =~# '^" Netrw Directory Listing'
-"    call Decho("  getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum,'~'.expand("<slnum>"))
-    exe "sil! NetrwKeepj noswapfile keepalt b ".bufnum
+
+   if &ft == "netrw"
+"    call Decho("buffer type is netrw; not using keepalt with b ".bufnum)
+    exe "sil! NetrwKeepj noswapfile b ".bufnum
+"    call Dredir("ls!","one")
    else
-"    call Decho("  getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum,'~'.expand("<slnum>"))
-    exe "sil! NetrwKeepj noswapfile keepalt b ".bufnum
+"    call Decho("buffer type is not netrw; using keepalt with b ".bufnum)
+    call s:NetrwEditBuf(bufnum)
+"    call Dredir("ls!","two")
    endif
 "   call Decho("  line($)=".line("$"),'~'.expand("<slnum>"))
    if bufname("%") == '.'
     call s:NetrwBufRename(getcwd())
    endif
+
+   " restore ei
    let &ei= eikeep
 
    if line("$") <= 1 && getline(1) == ""
@@ -4988,7 +5007,7 @@
 
     " the point where netrw actually edits the (local) file
     " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
-    " no keepalt to support  :e #  to return to a directory listing
+    " use keepalt to support  :e #  to return to a directory listing
     if !&mod
      " if e the new file would fail due to &mod, then don't change any of the flags
      let dolockout= 1
@@ -4999,12 +5018,8 @@
      " others like c-^ to return to the netrw buffer
      " Apr 30, 2020: used to have e! here.  That can cause loss of a modified file,
      " so emit error E37 instead.
-     if exists("g:netrw_altfile") && g:netrw_altfile
-      exe "NetrwKeepj keepalt e ".fnameescape(dirname)
-     else
-      exe "NetrwKeepj e ".fnameescape(dirname)
-     endif
-"     call Decho("edit-a-file: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod,'~'.expand("<slnum>"))
+     call s:NetrwEditFile("e","",dirname)
+"     call Decho("edit-a-file: after e ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod,'~'.expand("<slnum>"))
      " COMBAK -- cuc cul related
      call s:NetrwCursor(1)
      if &hidden || &bufhidden == "hide"
@@ -5345,8 +5360,8 @@
      " g:Netrw_corehandler is a List of function references (see :help Funcref)
 "     call Decho("g:Netrw_corehandler is a List",'~'.expand("<slnum>"))
      for Fncref in g:Netrw_corehandler
-      if type(FncRef) == 2
-       call FncRef(a:fname)
+      if type(Fncref) == 2
+       call Fncref(a:fname)
       endif
      endfor
     endif
@@ -5419,6 +5434,8 @@
    else
     let redir= &srr . "/dev/null"
    endif
+  else
+   let redir= ""
   endif
 "  call Decho("set up redirection: redir{".redir."} srr{".&srr."}",'~'.expand("<slnum>"))
 
@@ -5709,6 +5726,35 @@
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwEditBuf: decides whether or not to use keepalt to edit a buffer {{{2
+fun! s:NetrwEditBuf(bufnum)
+"  call Dfunc("s:NetrwEditBuf(fname<".a:bufnum.">)")
+  if exists("g:netrw_altfile") && g:netrw_altfile && &ft == "netrw"
+"   call Decho("exe sil! NetrwKeepj keepalt noswapfile b ".fnameescape(a:bufnum))
+   exe "sil! NetrwKeepj keepalt noswapfile b ".fnameescape(a:bufnum)
+  else
+"   call Decho("exe sil! NetrwKeepj noswapfile b ".fnameescape(a:bufnum))
+   exe "sil! NetrwKeepj noswapfile b ".fnameescape(a:bufnume)
+  endif
+"  call Dret("s:NetrwEditBuf")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwEditFile: decides whether or not to use keepalt to edit a file {{{2
+"    NetrwKeepj [keepalt] <OPT> <CMD> <FILENAME>
+fun! s:NetrwEditFile(cmd,opt,fname)
+"  call Dfunc("s:NetrwEditFile(cmd<".a:cmd.">,opt<".a:opt.">,fname<".a:fname.">)  ft<".&ft.">")
+  if exists("g:netrw_altfile") && g:netrw_altfile && &ft == "netrw"
+"   call Decho("exe NetrwKeepj keepalt ".a:opt." ".a:cmd." ".fnameescape(a:fname))
+   exe "NetrwKeepj keepalt ".a:opt." ".a:cmd." ".fnameescape(a:fname)
+  else
+"   call Decho("exe NetrwKeepj ".a:opt." ".a:cmd." ".fnameescape(a:fname))
+   exe "NetrwKeepj ".a:opt." ".a:cmd." ".fnameescape(a:fname)
+  endif
+"  call Dret("s:NetrwEditFile")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwExploreListUniq: {{{2
 fun! s:NetrwExploreListUniq(explist)
 "  call Dfunc("s:NetrwExploreListUniq(explist<".string(a:explist).">)")
@@ -7814,8 +7860,16 @@
 "    call Decho("movecmd<".movecmd."> (#3 linux or cygwin)",'~'.expand("<slnum>"))
    endif
    for fname in s:netrwmarkfilelist_{bufnr("%")}
+    if g:netrw_keepdir
+    " Jul 19, 2022: fixing file move when g:netrw_keepdir is 1
+     let fname= b:netrw_curdir."/".fname
+    endif
     if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
      let fname= substitute(fname,'/','\\','g')
+     if g:netrw_keepdir
+      " Jul 19, 2022: fixing file move when g:netrw_keepdir is 1
+      let fname= b:netrw_curdir."\\".fname
+     endif
     endif
 "    call Decho("system(".movecmd." ".s:ShellEscape(fname)." ".tgt.")",'~'.expand("<slnum>"))
     let ret= system(movecmd.g:netrw_localmovecmdopt." ".s:ShellEscape(fname)." ".tgt)
@@ -8573,21 +8627,28 @@
 "     choice = 2 : didn't save modified file, opened window
 "     choice = 3 : cancel open
 fun! s:NetrwPrevWinOpen(islocal)
-"  call Dfunc("s:NetrwPrevWinOpen(islocal=".a:islocal.")")
+"  call Dfunc("s:NetrwPrevWinOpen(islocal=".a:islocal.") win#".winnr())
 
   let ykeep= @@
   " grab a copy of the b:netrw_curdir to pass it along to newly split windows
   let curdir = b:netrw_curdir
+"  call Decho("COMBAK#1: mod=".&mod." win#".winnr())
 
   " get last window number and the word currently under the cursor
   let origwin   = winnr()
   let lastwinnr = winnr("$")
-  let curword   = s:NetrwGetWord()
-  let choice    = 0
-  let s:prevwinopen= 1	" lets s:NetrwTreeDir() know that NetrwPrevWinOpen called it
+"  call Decho("origwin#".origwin." lastwinnr#".lastwinnr)
+"  call Decho("COMBAK#2: mod=".&mod." win#".winnr())
+  let curword      = s:NetrwGetWord()
+  let choice       = 0
+  let s:prevwinopen= 1	" lets s:NetrwTreeDir() know that NetrwPrevWinOpen called it (s:NetrwTreeDir() will unlet s:prevwinopen)
+"  call Decho("COMBAK#3: mod=".&mod." win#".winnr())
   let s:treedir = s:NetrwTreeDir(a:islocal)
+"  call Decho("COMBAK#4: mod=".&mod." win#".winnr())
   let curdir    = s:treedir
+"  call Decho("COMBAK#5: mod=".&mod." win#".winnr())
 "  call Decho("winnr($)#".lastwinnr." curword<".curword.">",'~'.expand("<slnum>"))
+"  call Decho("COMBAK#6: mod=".&mod." win#".winnr())
 
   let didsplit = 0
   if lastwinnr == 1
@@ -8610,11 +8671,26 @@
 "   call Decho("did split",'~'.expand("<slnum>"))
 
   else
+"   call Decho("COMBAK#7: mod=".&mod." win#".winnr())
    NetrwKeepj call s:SaveBufVars()
+"   call Decho("COMBAK#8: mod=".&mod." win#".winnr())
    let eikeep= &ei
+"   call Decho("COMBAK#9: mod=".&mod." win#".winnr())
    setl ei=all
+"   call Decho("COMBAK#10: mod=".&mod." win#".winnr())
    wincmd p
+"  call Decho("COMBAK#11: mod=".&mod)
 "   call Decho("wincmd p  (now in win#".winnr().") curdir<".curdir.">",'~'.expand("<slnum>"))
+"  call Decho("COMBAK#12: mod=".&mod)
+   
+   if exists("s:lexplore_win") && s:lexplore_win == winnr()
+    " whoops -- user trying to open file in the Lexplore window.
+    " Use Lexplore's opening-file window instead.
+"    call Decho("whoops -- user trying to open file in Lexplore Window. Use win#".g:netrw_chgwin." instead")
+"    exe g:netrw_chgwin."wincmd w"
+     wincmd p
+     call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   endif
 
    " prevwinnr: the window number of the "prev" window
    " prevbufnr: the buffer number of the buffer in the "prev" window
@@ -8624,8 +8700,10 @@
    let prevbufname = bufname("%")
    let prevmod     = &mod
    let bnrcnt      = 0
+"   call Decho("COMBAK#13: mod=".&mod." win#".winnr())
    NetrwKeepj call s:RestoreBufVars()
 "   call Decho("after wincmd p: win#".winnr()." win($)#".winnr("$")." origwin#".origwin." &mod=".&mod." bufname(%)<".bufname("%")."> prevbufnr=".prevbufnr,'~'.expand("<slnum>"))
+"   call Decho("COMBAK#14: mod=".&mod." win#".winnr())
 
    " if the previous window's buffer has been changed (ie. its modified flag is set),
    " and it doesn't appear in any other extant window, then ask the
@@ -8635,6 +8713,7 @@
     windo if winbufnr(0) == prevbufnr | let bnrcnt=bnrcnt+1 | endif
 "    call Decho("prevbufnr=".prevbufnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr()=".winnr()." prevwinnr#".prevwinnr,'~'.expand("<slnum>"))
     exe prevwinnr."wincmd w"
+"    call Decho("COMBAK#15: mod=".&mod." win#".winnr())
 
     if bnrcnt == 1 && &hidden == 0
      " only one copy of the modified buffer in a window, and
@@ -8642,6 +8721,7 @@
      let choice = confirm("Save modified buffer<".prevbufname."> first?","&Yes\n&No\n&Cancel")
 "     call Decho("prevbufname<".prevbufname."> choice=".choice." current-winnr#".winnr(),'~'.expand("<slnum>"))
      let &ei= eikeep
+"     call Decho("COMBAK#16: mod=".&mod." win#".winnr())
 
      if choice == 1
       " Yes -- write file & then browse
@@ -8674,6 +8754,7 @@
    endif
    let &ei= eikeep
   endif
+"  call Decho("COMBAK#17: mod=".&mod." win#".winnr())
 
   " restore b:netrw_curdir (window split/enew may have lost it)
   let b:netrw_curdir= curdir
@@ -9361,19 +9442,23 @@
   if exists("s:prevwinopen")
    unlet s:prevwinopen
   endif
+"  call Decho("COMBAK#18 : mod=".&mod." win#".winnr())
 
   if !exists("b:netrw_curdir") || b:netrw_curdir == ""
    let b:netrw_curdir= getcwd()
   endif
   let treedir = b:netrw_curdir
 "  call Decho("set initial treedir<".treedir.">",'~'.expand("<slnum>"))
+"  call Decho("COMBAK#19 : mod=".&mod." win#".winnr())
 
   let s:treecurpos= winsaveview()
 "  call Decho("saving posn to s:treecurpos<".string(s:treecurpos).">",'~'.expand("<slnum>"))
+"  call Decho("COMBAK#20 : mod=".&mod." win#".winnr())
 
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
 "   call Decho("w:netrw_liststyle is TREELIST:",'~'.expand("<slnum>"))
 "   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">",'~'.expand("<slnum>"))
+"  call Decho("COMBAK#21 : mod=".&mod." win#".winnr())
 
    " extract tree directory if on a line specifying a subdirectory (ie. ends with "/")
    let curline= substitute(getline('.'),"\t -->.*$",'','')
@@ -9389,6 +9474,7 @@
 "    call Decho("do not extract tree subdirectory from current line and set treedir to empty",'~'.expand("<slnum>"))
     let treedir= ""
    endif
+"  call Decho("COMBAK#22 : mod=".&mod." win#".winnr())
 
    " detect user attempting to close treeroot
 "   call Decho("check if user is attempting to close treeroot",'~'.expand("<slnum>"))
@@ -9404,10 +9490,12 @@
 "   else " Decho
 "    call Decho(".user not attempting to close treeroot",'~'.expand("<slnum>"))
    endif
+"  call Decho("COMBAK#23 : mod=".&mod." win#".winnr())
 
 "   call Decho("islocal=".a:islocal." curline<".curline.">",'~'.expand("<slnum>"))
    let potentialdir= s:NetrwFile(substitute(curline,'^'.s:treedepthstring.'\+ \(.*\)@$','\1',''))
 "   call Decho("potentialdir<".potentialdir."> isdir=".isdirectory(potentialdir),'~'.expand("<slnum>"))
+"  call Decho("COMBAK#24 : mod=".&mod." win#".winnr())
 
    " COMBAK: a symbolic link may point anywhere -- so it will be used to start a new treetop
 "   if a:islocal && curline =~ '@$' && isdirectory(s:NetrwFile(potentialdir))
@@ -9421,10 +9509,12 @@
     let treedir = s:NetrwTreePath(w:netrw_treetop)
 "   endif
   endif
+"  call Decho("COMBAK#25 : mod=".&mod." win#".winnr())
 
   " sanity maintenance: keep those //s away...
   let treedir= substitute(treedir,'//$','/','')
 "  call Decho("treedir<".treedir.">",'~'.expand("<slnum>"))
+"  call Decho("COMBAK#26 : mod=".&mod." win#".winnr())
 
 "  call Dret("s:NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".(exists("s:treecurpos")? string(s:treecurpos) : 'n/a').">")
   return treedir
@@ -10795,7 +10885,8 @@
 "  call Dfunc("netrw#LocalBrowseCheck(dirname<".a:dirname.">)")
 "  call Decho("isdir<".a:dirname."> =".isdirectory(s:NetrwFile(a:dirname)).((exists("s:treeforceredraw")? " treeforceredraw" : "")).'~'.expand("<slnum>"))
 "  call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo,'~'.expand("<slnum>"))
-"  call Dredir("ls!","netrw#LocalBrowseCheck")
+  " getting E930: Cannot use :redir inside execute
+""  call Dredir("ls!","netrw#LocalBrowseCheck")
 "  call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol(),'~'.expand("<slnum>"))
 "  call Decho("current buffer#".bufnr("%")."<".bufname("%")."> ft=".&ft,'~'.expand("<slnum>"))
 
@@ -11089,12 +11180,15 @@
 
    if w:netrw_liststyle == s:LONGLIST
     let sz   = getfsize(filename)
-    let fsz  = strpart("               ",1,15-strlen(sz)).sz
+	let szlen = 15 - (strdisplaywidth(longfile) - g:netrw_maxfilenamelen)
+    let szlen = (szlen > 0) ? szlen : 0
+    let fsz  = printf("%".szlen."S",sz)
+
     if g:netrw_sizestyle =~# "[hH]"
      let sz= s:NetrwHumanReadable(sz)
     endif
-    let longfile= printf("%-".(g:netrw_maxfilenamelen+1)."s",pfile)
-    let pfile   = longfile.sz." ".strftime(g:netrw_timefmt,getftime(filename))
+	let longfile= printf("%-".g:netrw_maxfilenamelen."S",pfile)
+    let pfile   = longfile."  ".sz." ".strftime(g:netrw_timefmt,getftime(filename))
 "    call Decho("longlist support: sz=".sz." fsz=".fsz,'~'.expand("<slnum>"))
    endif
 
@@ -11393,34 +11487,8 @@
    let rmfile= substitute(rmfile,'[\/]$','','e')
 
    if all || ok =~# 'y\%[es]' || ok == ""
-    if v:version < 704 || (v:version == 704 && !has("patch1107"))
-" "    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_localrmdir.') '.s:ShellEscape(rmfile).')','~'.expand("<slnum>"))
-     call system(netrw#WinPath(g:netrw_localrmdir).' '.s:ShellEscape(rmfile))
-" "    call Decho("v:shell_error=".v:shell_error,'~'.expand("<slnum>"))
-
-     if v:shell_error != 0
-" "     call Decho("2nd attempt to remove directory<".rmfile.">",'~'.expand("<slnum>"))
-      let errcode= s:NetrwDelete(rmfile)
-" "     call Decho("errcode=".errcode,'~'.expand("<slnum>"))
-
-      if errcode != 0
-       if has("unix")
-" "       call Decho("3rd attempt to remove directory<".rmfile.">",'~'.expand("<slnum>"))
-	call system("rm ".s:ShellEscape(rmfile))
-	if v:shell_error != 0 && !exists("g:netrw_quiet")
-	 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
-	 let ok="no"
-	endif
-       elseif !exists("g:netrw_quiet")
-	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
-	let ok="no"
-       endif
-      endif
-     endif
-    else
-     if delete(rmfile,"d")
-      call netrw#ErrorMsg(s:ERROR,"unable to delete directory <".rmfile.">!",103)
-     endif
+    if delete(rmfile,"d")
+     call netrw#ErrorMsg(s:ERROR,"unable to delete directory <".rmfile.">!",103)
     endif
    endif
   endif
@@ -12015,13 +12083,13 @@
   if exists("b:netrw_prvdir")         |let netrw_prvdir          = b:netrw_prvdir         |endif
 
   NetrwKeepj call s:NetrwOptionsRestore("w:")
-"  call Decho("generate a buffer with NetrwKeepj keepalt enew!",'~'.expand("<slnum>"))
+"  call Decho("generate a buffer with NetrwKeepj enew!",'~'.expand("<slnum>"))
   " when tree listing uses file TreeListing... a new buffer is made.
   " Want the old buffer to be unlisted.
   " COMBAK: this causes a problem, see P43
 "  setl nobl
   let netrw_keepdiff= &l:diff
-  noswapfile NetrwKeepj keepalt enew!
+  call s:NetrwEditFile("enew!","","")
   let &l:diff= netrw_keepdiff
 "  call Decho("bufnr($)=".bufnr("$")."<".bufname(bufnr("$"))."> winnr($)=".winnr("$"),'~'.expand("<slnum>"))
   NetrwKeepj call s:NetrwOptionsSave("w:")
@@ -12070,7 +12138,7 @@
 " s:NetrwExe: executes a string using "!" {{{2
 fun! s:NetrwExe(cmd)
 "  call Dfunc("s:NetrwExe(a:cmd<".a:cmd.">)")
-  if has("win32") && &shell !~? 'cmd' && !g:netrw_cygwin
+  if has("win32") && &shell !~? 'cmd\|pwsh\|powershell' && !g:netrw_cygwin
 "    call Decho("using win32:",expand("<slnum>"))
     let savedShell=[&shell,&shellcmdflag,&shellxquote,&shellxescape,&shellquote,&shellpipe,&shellredir,&shellslash]
     set shell& shellcmdflag& shellxquote& shellxescape&
@@ -12739,3 +12807,54 @@
 " Modelines: {{{1
 " ===============
 " vim:ts=8 fdm=marker
+" doing autoload/netrw.vim version v172g ~57
+" varname<g:netrw_dirhistcnt> value=0 ~1
+" varname<s:THINLIST> value=0 ~1
+" varname<s:LONGLIST> value=1 ~1
+" varname<s:WIDELIST> value=2 ~1
+" varname<s:TREELIST> value=3 ~1
+" varname<s:MAXLIST> value=4 ~1
+" varname<g:netrw_use_errorwindow> value=2 ~1
+" varname<g:netrw_http_xcmd> value=-q -O ~1
+" varname<g:netrw_http_put_cmd> value=curl -T ~1
+" varname<g:netrw_keepj> value=keepj ~1
+" varname<g:netrw_rcp_cmd> value=rcp ~1
+" varname<g:netrw_rsync_cmd> value=rsync ~1
+" varname<g:netrw_rsync_sep> value=/ ~1
+" varname<g:netrw_scp_cmd> value=scp -q ~1
+" varname<g:netrw_sftp_cmd> value=sftp ~1
+" varname<g:netrw_ssh_cmd> value=ssh ~1
+" varname<g:netrw_alto> value=0 ~1
+" varname<g:netrw_altv> value=1 ~1
+" varname<g:netrw_banner> value=1 ~1
+" varname<g:netrw_browse_split> value=0 ~1
+" varname<g:netrw_bufsettings> value=noma nomod nonu nobl nowrap ro nornu ~1
+" varname<g:netrw_chgwin> value=-1 ~1
+" varname<g:netrw_clipboard> value=1 ~1
+" varname<g:netrw_compress> value=gzip ~1
+" varname<g:netrw_ctags> value=ctags ~1
+" varname<g:netrw_cursor> value=2 ~1
+" (netrw) COMBAK: cuc=0 cul=0 initialization of s:netrw_cu[cl]
+" varname<g:netrw_cygdrive> value=/cygdrive ~1
+" varname<s:didstarstar> value=0 ~1
+" varname<g:netrw_dirhistcnt> value=0 ~1
+" varname<g:netrw_decompress> value={ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" } ~1
+" varname<g:netrw_dirhistmax> value=10 ~1
+" varname<g:netrw_errorlvl> value=0 ~1
+" varname<g:netrw_fastbrowse> value=1 ~1
+" varname<g:netrw_ftp_browse_reject> value=^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$ ~1
+" varname<g:netrw_ftpmode> value=binary ~1
+" varname<g:netrw_hide> value=1 ~1
+" varname<g:netrw_keepdir> value=1 ~1
+" varname<g:netrw_list_hide> value= ~1
+" varname<g:netrw_localmkdir> value=mkdir ~1
+" varname<g:netrw_remote_mkdir> value=mkdir ~1
+" varname<g:netrw_liststyle> value=0 ~1
+" varname<g:netrw_markfileesc> value=*./[\~ ~1
+" varname<g:netrw_maxfilenamelen> value=32 ~1
+" varname<g:netrw_menu> value=1 ~1
+" varname<g:netrw_mkdir_cmd> value=ssh USEPORT HOSTNAME mkdir ~1
+" varname<g:netrw_mousemaps> value=1 ~1
+" varname<g:netrw_retmap> value=0 ~1
+" varname<g:netrw_chgperm> value=chmod PERM FILENAME ~1
+" varname<g:netrw_preview> value=0 ~1
diff --git a/runtime/autoload/netrwSettings.vim b/runtime/autoload/netrwSettings.vim
index 61c0ef7..a910d18 100644
--- a/runtime/autoload/netrwSettings.vim
+++ b/runtime/autoload/netrwSettings.vim
@@ -1,7 +1,7 @@
 " netrwSettings.vim: makes netrw settings simpler
-" Date:		Aug 12, 2021
+" Date:		Nov 15, 2021
 " Maintainer:	Charles E Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
-" Version:	17	ASTRO-ONLY
+" Version:	18
 " 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
@@ -19,7 +19,7 @@
 if exists("g:loaded_netrwSettings") || &cp
   finish
 endif
-let g:loaded_netrwSettings = "v17"
+let g:loaded_netrwSettings = "v18a"
 if v:version < 700
  echohl WarningMsg
  echo "***warning*** this version of netrwSettings needs vim 7.0"
@@ -159,8 +159,6 @@
   put = 'let g:netrw_localmkdiropt     = '.g:netrw_localmkdiropt
   put = 'let g:netrw_localmovecmd      = '.g:netrw_localmovecmd
   put = 'let g:netrw_localmovecmdopt   = '.g:netrw_localmovecmdopt
-  put = 'let g:netrw_localrmdir        = '.g:netrw_localrmdir
-  put = 'let g:netrw_localrmdiropt     = '.g:netrw_localrmdiropt
   put = 'let g:netrw_maxfilenamelen    = '.g:netrw_maxfilenamelen
   put = 'let g:netrw_menu              = '.g:netrw_menu
   put = 'let g:netrw_mousemaps         = '.g:netrw_mousemaps
diff --git a/runtime/autoload/zip.vim b/runtime/autoload/zip.vim
index bc9b62d..8dda30c 100644
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,7 +1,7 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:		Nov 08, 2021
-" Version:	32
+" Date:		Mar 12, 2023
+" Version:	33
 " Maintainer:	Charles E Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
 " License:	Vim License  (see vim's :help license)
 " Copyright:    Copyright (C) 2005-2019 Charles E. Campbell {{{1
@@ -20,7 +20,7 @@
 if &cp || exists("g:loaded_zip")
  finish
 endif
-let g:loaded_zip= "v32"
+let g:loaded_zip= "v33"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of zip needs vim 7.2 or later"
@@ -160,10 +160,14 @@
 " ---------------------------------------------------------------------
 " ZipBrowseSelect: {{{2
 fun! s:ZipBrowseSelect()
-"  call Dfunc("ZipBrowseSelect() zipfile<".b:zipfile."> curfile<".expand("%").">")
+  "  call Dfunc("ZipBrowseSelect() zipfile<".((exists("b:zipfile"))? b:zipfile : "n/a")."> curfile<".expand("%").">")
   let repkeep= &report
   set report=10
   let fname= getline(".")
+  if !exists("b:zipfile")
+"   call Dret("ZipBrowseSelect : b:zipfile doesn't exist!")
+   return
+  endif
 
   " sanity check
   if fname =~ '^"'