diff --git a/Filelist b/Filelist
index aefed89..25ffa62 100644
--- a/Filelist
+++ b/Filelist
@@ -809,6 +809,14 @@
 		runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim \
 		runtime/pack/dist/opt/swapmouse/plugin/swapmouse.vim \
 		runtime/pack/dist/opt/termdebug/plugin/termdebug.vim \
+		runtime/pack/dist/opt/netrw/LICENSE.txt \
+		runtime/pack/dist/opt/netrw/README.md \
+		runtime/pack/dist/opt/netrw/autoload/netrw.vim \
+		runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim \
+		runtime/pack/dist/opt/netrw/autoload/netrw_gitignore.vim \
+		runtime/pack/dist/opt/netrw/doc/netrw.txt \
+		runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim \
+		runtime/pack/dist/opt/netrw/syntax/netrw.vim
 
 # Runtime files for all distributions without CR/LF translation.
 RT_ALL_BIN =	\
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
new file mode 120000
index 0000000..9a5c117
--- /dev/null
+++ b/runtime/doc/pi_netrw.txt
@@ -0,0 +1 @@
+../pack/dist/opt/netrw/doc/netrw.txt
\ No newline at end of file
diff --git a/runtime/doc/tags b/runtime/doc/tags
index fbc8545..6d1bf96 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -9003,7 +9003,6 @@
 netrw-ctrl_l	pi_netrw.txt	/*netrw-ctrl_l*
 netrw-curdir	pi_netrw.txt	/*netrw-curdir*
 netrw-d	pi_netrw.txt	/*netrw-d*
-netrw-debug	pi_netrw.txt	/*netrw-debug*
 netrw-del	pi_netrw.txt	/*netrw-del*
 netrw-delete	pi_netrw.txt	/*netrw-delete*
 netrw-dir	pi_netrw.txt	/*netrw-dir*
@@ -9037,7 +9036,6 @@
 netrw-hexplore	pi_netrw.txt	/*netrw-hexplore*
 netrw-hide	pi_netrw.txt	/*netrw-hide*
 netrw-hiding	pi_netrw.txt	/*netrw-hiding*
-netrw-history	pi_netrw.txt	/*netrw-history*
 netrw-horiz	pi_netrw.txt	/*netrw-horiz*
 netrw-i	pi_netrw.txt	/*netrw-i*
 netrw-incompatible	pi_netrw.txt	/*netrw-incompatible*
@@ -9148,7 +9146,6 @@
 netrw-start	pi_netrw.txt	/*netrw-start*
 netrw-t	pi_netrw.txt	/*netrw-t*
 netrw-texplore	pi_netrw.txt	/*netrw-texplore*
-netrw-todo	pi_netrw.txt	/*netrw-todo*
 netrw-trailingslash	pi_netrw.txt	/*netrw-trailingslash*
 netrw-transparent	pi_netrw.txt	/*netrw-transparent*
 netrw-u	pi_netrw.txt	/*netrw-u*
@@ -9165,6 +9162,7 @@
 netrw-write	pi_netrw.txt	/*netrw-write*
 netrw-x	pi_netrw.txt	/*netrw-x*
 netrw-xfer	pi_netrw.txt	/*netrw-xfer*
+netrw.txt	pi_netrw.txt	/*netrw.txt*
 netrw.vim	pi_netrw.txt	/*netrw.vim*
 netterm-mouse	options.txt	/*netterm-mouse*
 network	pi_netrw.txt	/*network*
@@ -9479,7 +9477,6 @@
 pi_getscript.txt	pi_getscript.txt	/*pi_getscript.txt*
 pi_gzip.txt	pi_gzip.txt	/*pi_gzip.txt*
 pi_logipat.txt	pi_logipat.txt	/*pi_logipat.txt*
-pi_netrw.txt	pi_netrw.txt	/*pi_netrw.txt*
 pi_paren.txt	pi_paren.txt	/*pi_paren.txt*
 pi_spec.txt	pi_spec.txt	/*pi_spec.txt*
 pi_tar.txt	pi_tar.txt	/*pi_tar.txt*
diff --git a/runtime/pack/dist/opt/netrw/LICENSE.txt b/runtime/pack/dist/opt/netrw/LICENSE.txt
new file mode 100644
index 0000000..702c238
--- /dev/null
+++ b/runtime/pack/dist/opt/netrw/LICENSE.txt
@@ -0,0 +1,16 @@
+Unless otherwise stated, all files in this directory are distributed under the
+Zero-Clause BSD license.
+
+Zero-Clause BSD
+===============
+
+Permission to use, copy, modify, and/or distribute this software for
+any purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
+DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/runtime/pack/dist/opt/netrw/README.md b/runtime/pack/dist/opt/netrw/README.md
new file mode 100644
index 0000000..ecd97f1
--- /dev/null
+++ b/runtime/pack/dist/opt/netrw/README.md
@@ -0,0 +1,544 @@
+# Netrw.vim
+
+netrw.vim plugin from vim (upstream repository)
+
+The upstream maintained netrw plugin. The original has been created and
+maintained by Charles E Campbell and maintained by the vim project until
+v9.1.0988.
+
+Every major version a snapshot from here will be sent to the main [Vim][1]
+upstream for distribution with Vim.
+
+# License
+
+To see License informations see the LICENSE.txt file included in this
+repository.
+
+# Credits
+
+Below are stated the contribution made in the past to netrw.
+
+Changes made to `autoload/netrw.vim`:
+- 2023 Nov 21 by Vim Project: ignore wildignore when expanding $COMSPEC (v173a)
+- 2023 Nov 22 by Vim Project: fix handling of very long filename on longlist style (v173a)
+- 2024 Feb 19 by Vim Project: (announce adoption)
+- 2024 Feb 29 by Vim Project: handle symlinks in tree mode correctly
+- 2024 Apr 03 by Vim Project: detect filetypes for remote edited files
+- 2024 May 08 by Vim Project: cleanup legacy Win9X checks
+- 2024 May 09 by Vim Project: remove hard-coded private.ppk
+- 2024 May 10 by Vim Project: recursively delete directories by default
+- 2024 May 13 by Vim Project: prefer scp over pscp
+- 2024 Jun 04 by Vim Project: set bufhidden if buffer changed, nohidden is set and buffer shall be switched (#14915)
+- 2024 Jun 13 by Vim Project: glob() on Windows fails when a directory name contains [] (#14952)
+- 2024 Jun 23 by Vim Project: save ad restore registers when liststyle = WIDELIST (#15077, #15114)
+- 2024 Jul 22 by Vim Project: avoid endless recursion (#15318)
+- 2024 Jul 23 by Vim Project: escape filename before trying to delete it (#15330)
+- 2024 Jul 30 by Vim Project: handle mark-copy to same target directory (#12112)
+- 2024 Aug 02 by Vim Project: honor g:netrw_alt{o,v} for :{S,H,V}explore (#15417)
+- 2024 Aug 15 by Vim Project: style changes, prevent E121 (#15501)
+- 2024 Aug 22 by Vim Project: fix mf-selection highlight (#15551)
+- 2024 Aug 22 by Vim Project: adjust echo output of mx command (#15550)
+- 2024 Sep 15 by Vim Project: more strict confirmation dialog (#15680)
+- 2024 Sep 19 by Vim Project: mf-selection highlight uses wrong pattern (#15700)
+- 2024 Sep 21 by Vim Project: remove extraneous closing bracket (#15718)
+- 2024 Oct 21 by Vim Project: remove netrwFileHandlers (#15895)
+- 2024 Oct 27 by Vim Project: clean up gx mapping (#15721)
+- 2024 Oct 30 by Vim Project: fix filetype detection for remote files (#15961)
+- 2024 Oct 30 by Vim Project: fix x mapping on cygwin (#13687)
+- 2024 Oct 31 by Vim Project: add netrw#Launch() and netrw#Open() (#15962)
+- 2024 Oct 31 by Vim Project: fix E874 when browsing remote dir (#15964)
+- 2024 Nov 07 by Vim Project: use keeppatterns to prevent polluting the search history
+- 2024 Nov 07 by Vim Project: fix a few issues with netrw tree listing (#15996)
+- 2024 Nov 10 by Vim Project: directory symlink not resolved in tree view (#16020)
+- 2024 Nov 14 by Vim Project: small fixes to netrw#BrowseX (#16056)
+- 2024 Nov 23 by Vim Project: update decompress defaults (#16104)
+- 2024 Nov 23 by Vim Project: fix powershell escaping issues (#16094)
+- 2024 Dec 04 by Vim Project: do not detach for gvim (#16168)
+- 2024 Dec 08 by Vim Project: check the first arg of netrw_browsex_viewer for being executable (#16185)
+- 2024 Dec 12 by Vim Project: do not pollute the search history (#16206)
+- 2024 Dec 19 by Vim Project: change style (#16248)
+- 2024 Dec 20 by Vim Project: change style continued (#16266), fix escaping of # in :Open command (#16265)
+
+General changes made to netrw:
+
+```
+	v172:	Sep 02, 2021	* (Bram Moolenaar) Changed "l:go" to "go"
+				* (Bram Moolenaar) no need for "b" in
+				  netrw-safe guioptions
+		Nov 15, 2021	* removed netrw_localrm and netrw_localrmdir
+				  references
+		Aug 18, 2022	* (Miguel Barro) improving compatibility with
+				  powershell
+	v171:	Oct 09, 2020	* included code in s:NetrwOptionsSafe()
+				  to allow |'bh'| to be set to delete when
+				  rather than hide when g:netrw_fastbrowse
+				  was zero.
+				* Installed |g:netrw_clipboard| setting
+				* Installed option bypass for |'guioptions'|
+				  a/A settings
+				* Changed popup_beval() to |popup_atcursor()|
+				  in netrw#ErrorMsg (lacygoill). Apparently
+				  popup_beval doesn't reliably close the
+				  popup when the mouse is moved.
+				* VimEnter() now using win_execute to examine
+				  buffers for an attempt to open a directory.
+				  Avoids issues with popups/terminal from
+				  command line. (lacygoill)
+		Jun 28, 2021	* (zeertzjq) provided a patch for use of
+				  xmap,xno instead of vmap,vno in
+				  netrwPlugin.vim. Avoids entanglement with
+				  select mode.
+		Jul 14, 2021	* Fixed problem addressed by tst976; opening
+				  a file using tree mode, going up a
+				  directory, and opening a file there was
+				  opening the file in the wrong directory.
+		Jul 28, 2021	* (Ingo Karkat) provided a patch fixing an
+				  E488 error with netrwPlugin.vim
+				  (occurred for vim versions < 8.02)
+	v170:	Mar 11, 2020	* (reported by Reiner Herrmann) netrw+tree
+				  would not hide with the ^\..* pattern
+				  correctly.
+				* (Marcin Szamotulski) NetrwOptionRestore
+				  did not restore options correctly that
+				  had a single quote in the option string.
+		Apr 13, 2020	* implemented error handling via popup
+				  windows (see |popup_beval()|)
+		Apr 30, 2020	* (reported by Manatsu Takahashi) while
+				  using Lexplore, a modified file could
+				  be overwritten.  Sol'n: will not overwrite,
+				  but will emit an |E37| (although one cannot
+				  add an ! to override)
+		Jun 07, 2020	* (reported by Jo Totland) repeatedly invoking
+				  :Lexplore and quitting it left unused
+				  hidden buffers.  Netrw will now set netrw
+				  buffers created by :Lexplore to |'bh'|=wipe.
+	v169:	Dec 20, 2019	* (reported by amkarthik) that netrw's x
+				  (|netrw-x|) would throw an error when
+				  attempting to open a local directory.
+	v168:	Dec 12, 2019	* scp timeout error message not reported,
+				  hopefully now fixed (Shane Xb Qian)
+	v167:	Nov 29, 2019	* netrw does a save&restore on @* and @+.
+				  That causes problems with the clipboard.
+				  Now restores occurs only if @* or @+ have
+				  been changed.
+				* netrw will change @* or @+ less often.
+				  Never if I happen to have caught all the
+				  operations that modify the unnamed
+				  register (which also writes @*).
+				* Modified hiding behavior so that "s"
+				  will not ignore hiding.
+	v166:	Nov 06, 2019	* Removed a space from a nmap for "-"
+				* Numerous debugging statement changes
+	v163:	Dec 05, 2017	* (Cristi Balan) reported that a setting ('sel')
+				  was left changed
+				* (Holger Mitschke) reported a problem with
+				  saving and restoring history.  Fixed.
+				* Hopefully I fixed a nasty bug that caused a
+				  file rename to wipe out a buffer that it
+				  should not have wiped out.
+				* (Holger Mitschke) amended this help file
+				  with additional |g:netrw_special_syntax|
+				  items
+				* Prioritized wget over curl for
+				  g:netrw_http_cmd
+	v162:	Sep 19, 2016	* (haya14busa) pointed out two syntax errors
+				  with a patch; these are now fixed.
+		Oct 26, 2016	* I started using mate-terminal and found that
+				  x and gx (|netrw-x| and |netrw-gx|) were no
+				  longer working.  Fixed (using atril when
+				  $DESKTOP_SESSION is "mate").
+		Nov 04, 2016	* (Martin Vuille) pointed out that @+ was
+				  being restored with keepregstar rather than
+				  keepregplus.
+		Nov 09, 2016	* Broke apart the command from the options,
+				  mostly for Windows.  Introduced new netrw
+				  settings: |g:netrw_localcopycmdopt|
+				  |g:netrw_localcopydircmdopt|
+				  |g:netrw_localmkdiropt|
+				  |g:netrw_localmovecmdopt|
+		Nov 21, 2016	* (mattn) provided a patch for preview; swapped
+				  winwidth() with winheight()
+		Nov 22, 2016	* (glacambre) reported that files containing
+				  spaces weren't being obtained properly via
+				  scp.  Fix: apparently using single quotes
+				  such as with 'file name' wasn't enough; the
+				  spaces inside the quotes also had to be
+				  escaped (ie. 'file\ name').
+				* Also fixed obtain (|netrw-O|) to be able to
+				  obtain files with spaces in their names
+		Dec 20, 2016	* (xc1427) Reported that using "I" (|netrw-I|)
+				  when atop "Hiding" in the banner also caused
+				  the active-banner hiding control to occur
+		Jan 03, 2017	* (Enno Nagel) reported that attempting to
+				  apply netrw to a directory that was without
+				  read permission caused a syntax error.
+		Jan 13, 2017	* (Ingo Karkat) provided a patch which makes
+				  using netrw#Call() better.  Now returns
+				  value of internal routines return, for example.
+		Jan 13, 2017	* (Ingo Karkat) changed netrw#FileUrlRead to
+				  use |:edit| instead of |:read|.  I also
+				  changed the routine name to netrw#FileUrlEdit.
+		Jan 16, 2017	* (Sayem) reported a problem where :Lexplore
+				  could generate a new listing buffer and
+				  window instead of toggling the netrw display.
+				  Unfortunately, the directions for eliciting
+				  the problem weren't complete, so I may or
+				  may not have fixed that issue.
+		Feb 06, 2017	* Implemented cb and cB.  Changed "c" to "cd".
+				  (see |netrw-cb|, |netrw-cB|, and |netrw-cd|)
+		Mar 21, 2017	* previously, netrw would specify (safe) settings
+				  even when the setting was already safe for
+				  netrw.  Netrw now attempts to leave such
+				  already-netrw-safe settings alone.
+				  (affects s:NetrwOptionRestore() and
+				  s:NetrwSafeOptions(); also introduced
+				  s:NetrwRestoreSetting())
+		Jun 26, 2017	* (Christian Brabandt) provided a patch to
+				  allow curl to follow redirects (ie. -L
+				  option)
+		Jun 26, 2017	* (Callum Howard) reported a problem with
+				  :Lexpore not removing the Lexplore window
+				  after a change-directory
+		Aug 30, 2017	* (Ingo Karkat) one cannot switch to the
+				  previously edited file (e.g. with CTRL-^)
+				  after editing a file:// URL.  Patch to
+				  have a "keepalt" included.
+		Oct 17, 2017	* (Adam Faryna) reported that gn (|netrw-gn|)
+				  did not work on directories in the current
+				  tree
+	v157:	Apr 20, 2016	* (Nicola) had set up a "nmap <expr> ..." with
+				  a function that returned a 0 while silently
+				  invoking a shell command.  The shell command
+				  activated a ShellCmdPost event which in turn
+				  called s:LocalBrowseRefresh().  That looks
+				  over all netrw buffers for changes needing
+				  refreshes.  However, inside a |:map-<expr>|,
+				  tab and window changes are disallowed.  Fixed.
+				  (affects netrw's s:LocalBrowseRefresh())
+				* g:netrw_localrmdir not used any more, but
+				  the relevant patch that causes |delete()| to
+				  take over was #1107 (not #1109).
+				* |expand()| is now used on |g:netrw_home|;
+				  consequently, g:netrw_home may now use
+				  environment variables
+				* s:NetrwLeftmouse and s:NetrwCLeftmouse will
+				  return without doing anything if invoked
+				  when inside a non-netrw window
+		Jun 15, 2016	* gx now calls netrw#GX() which returns
+				  the word under the cursor.  The new
+				  wrinkle: if one is in a netrw buffer,
+				  then netrw's s:NetrwGetWord().
+		Jun 22, 2016	* Netrw was executing all its associated
+				  Filetype commands silently; I'm going
+				  to try doing that "noisily" and see if
+				  folks have a problem with that.
+		Aug 12, 2016	* Changed order of tool selection for
+				  handling http://... viewing.
+				  (Nikolay Aleksandrovich Pavlov)
+		Aug 21, 2016	* Included hiding/showing/all for tree
+				  listings
+				* Fixed refresh (^L) for tree listings
+	v156:	Feb 18, 2016	* Changed =~ to =~# where appropriate
+		Feb 23, 2016	* s:ComposePath(base,subdir) now uses
+				  fnameescape() on the base portion
+		Mar 01, 2016	* (gt_macki) reported where :Explore would
+				  make file unlisted. Fixed (tst943)
+		Apr 04, 2016	* (reported by John Little) netrw normally
+				  suppresses browser messages, but sometimes
+				  those "messages" are what is wanted.
+				  See |g:netrw_suppress_gx_mesg|
+		Apr 06, 2016	* (reported by Carlos Pita) deleting a remote
+				  file was giving an error message.  Fixed.
+		Apr 08, 2016	* (Charles Cooper) had a problem with an
+				  undefined b:netrw_curdir.  He also provided
+				  a fix.
+		Apr 20, 2016	* Changed s:NetrwGetBuffer(); now uses
+				  dictionaries.  Also fixed the "No Name"
+				  buffer problem.
+	v155:	Oct 29, 2015	* (Timur Fayzrakhmanov) reported that netrw's
+				  mapping of ctrl-l was not allowing refresh of
+				  other windows when it was done in a netrw
+				  window.
+		Nov 05, 2015	* Improved s:TreeSqueezeDir() to use search()
+				  instead of a loop
+				* NetrwBrowse() will return line to
+				  w:netrw_bannercnt if cursor ended up in
+				  banner
+		Nov 16, 2015	* Added a <Plug>NetrwTreeSqueeze (|netrw-s-cr|)
+		Nov 17, 2015	* Commented out imaps -- perhaps someone can
+				  tell me how they're useful and should be
+				  retained?
+		Nov 20, 2015	* Added |netrw-ma| and |netrw-mA| support
+		Nov 20, 2015	* gx (|netrw-gx|) on a URL downloaded the
+				  file in addition to simply bringing up the
+				  URL in a browser.  Fixed.
+		Nov 23, 2015	* Added |g:netrw_sizestyle| support
+		Nov 27, 2015	* Inserted a lot of <c-u>s into various netrw
+				  maps.
+		Jan 05, 2016	* |netrw-qL| implemented to mark files based
+				  upon |location-list|s; similar to |netrw-qF|.
+		Jan 19, 2016	* using - call delete(directoryname,"d") -
+				  instead of using g:netrw_localrmdir if
+				  v7.4 + patch#1107 is available
+		Jan 28, 2016	* changed to using |winsaveview()| and
+				  |winrestview()|
+		Jan 28, 2016	* s:NetrwTreePath() now does a save and
+				  restore of view
+		Feb 08, 2016	* Fixed a tree-listing problem with remote
+				  directories
+	v154:	Feb 26, 2015	* (Yuri Kanivetsky) reported a situation where
+				  a file was not treated properly as a file
+				  due to g:netrw_keepdir == 1
+		Mar 25, 2015	* (requested by Ben Friz) one may now sort by
+				  extension
+		Mar 28, 2015	* (requested by Matt Brooks) netrw has a lot
+				  of buffer-local mappings; however, some
+				  plugins (such as vim-surround) set up
+				  conflicting mappings that cause vim to wait.
+				  The "<nowait>" modifier has been included
+				  with most of netrw's mappings to avoid that
+				  delay.
+		Jun 26, 2015	* |netrw-gn| mapping implemented
+				* :Ntree NotADir resulted in having
+				  the tree listing expand in the error messages
+				  window.  Fixed.
+		Jun 29, 2015	* Attempting to delete a file remotely caused
+				  an error with "keepsol" mentioned; fixed.
+		Jul 08, 2015	* Several changes to keep the |:jumps| table
+				  correct when working with
+				  |g:netrw_fastbrowse| set to 2
+				* wide listing with accented characters fixed
+				  (using %-S instead of %-s with a |printf()|
+		Jul 13, 2015	* (Daniel Hahler) CheckIfKde() could be true
+				  but kfmclient not installed.  Changed order
+				  in netrw#BrowseX(): checks if kde and
+				  kfmclient, then will use xdg-open on a unix
+				  system (if xdg-open is executable)
+		Aug 11, 2015	* (McDonnell) tree listing mode wouldn't
+				  select a file in a open subdirectory.
+				* (McDonnell) when multiple subdirectories
+				  were concurrently open in tree listing
+				  mode, a ctrl-L wouldn't refresh properly.
+				* The netrw:target menu showed duplicate
+				  entries
+		Oct 13, 2015	* (mattn) provided an exception to handle
+				  windows with shellslash set but no shell
+		Oct 23, 2015	* if g:netrw_usetab and <c-tab> now used
+				  to control whether NetrwShrink is used
+				  (see |netrw-c-tab|)
+	v153:	May 13, 2014	* added another |g:netrw_ffkeep| usage {{{2
+		May 14, 2014	* changed s:PerformListing() so that it
+				  always sets ft=netrw for netrw buffers
+				  (ie. even when syntax highlighting is
+				  off, not available, etc)
+		May 16, 2014	* introduced the |netrw-ctrl-r| functionality
+		May 17, 2014	* introduced the |netrw-:NetrwMB| functionality
+				* mb and mB (|netrw-mb|, |netrw-mB|) will
+				  add/remove marked files from bookmark list
+		May 20, 2014	* (Enno Nagel) reported that :Lex <dirname>
+				  wasn't working.  Fixed.
+		May 26, 2014	* restored test to prevent leftmouse window
+				  resizing from causing refresh.
+				  (see s:NetrwLeftmouse())
+				* fixed problem where a refresh caused cursor
+				  to go just under the banner instead of
+				  staying put
+		May 28, 2014	* (László Bimba) provided a patch for opening
+				  the |:Lexplore| window 100% high, optionally
+				  on the right, and will work with remote
+				  files.
+		May 29, 2014	* implemented :NetrwC  (see |netrw-:NetrwC|)
+		Jun 01, 2014	* Removed some "silent"s from commands used
+				  to implemented scp://... and pscp://...
+				  directory listing.  Permits request for
+				  password to appear.
+		Jun 05, 2014	* (Enno Nagel) reported that user maps "/"
+				  caused problems with "b" and "w", which
+				  are mapped (for wide listings only) to
+				  skip over files rather than just words.
+		Jun 10, 2014	* |g:netrw_gx| introduced to allow users to
+				  override default "<cfile>" with the gx
+				  (|netrw-gx|) map
+		Jun 11, 2014	* gx (|netrw-gx|), with |'autowrite'| set,
+				  will write modified files.  s:NetrwBrowseX()
+				  will now save, turn off, and restore the
+				  |'autowrite'| setting.
+		Jun 13, 2014	* added visual map for gx use
+		Jun 15, 2014	* (Enno Nagel) reported that with having hls
+				  set and wide listing style in use, that the
+				  b and w maps caused unwanted highlighting.
+		Jul 05, 2014	* |netrw-mv| and |netrw-mX| commands included
+		Jul 09, 2014	* |g:netrw_keepj| included, allowing optional
+				  keepj
+		Jul 09, 2014	* fixing bugs due to previous update
+		Jul 21, 2014	* (Bruno Sutic) provided an updated
+				  netrw_gitignore.vim
+		Jul 30, 2014	* (Yavuz Yetim) reported that editing two
+				  remote files of the same name caused the
+				  second instance to have a "temporary"
+				  name.  Fixed: now they use the same buffer.
+		Sep 18, 2014	* (Yasuhiro Matsumoto) provided a patch which
+				  allows scp and windows local paths to work.
+		Oct 07, 2014	* gx (see |netrw-gx|) when atop a directory,
+				  will now do |gf| instead
+		Nov 06, 2014	* For cygwin: cygstart will be available for
+				  netrw#BrowseX() to use if its executable.
+		Nov 07, 2014	* Began support for file://... urls.  Will use
+				  |g:netrw_file_cmd| (typically elinks or links)
+		Dec 02, 2014	* began work on having mc (|netrw-mc|) copy
+				  directories.  Works for linux machines,
+				  cygwin+vim, but not for windows+gvim.
+		Dec 02, 2014	* in tree mode, netrw was not opening
+				  directories via symbolic links.
+		Dec 02, 2014	* added resolved link information to
+				  thin and tree modes
+		Dec 30, 2014	* (issue#231) |:ls| was not showing
+				  remote-file buffers reliably.  Fixed.
+	v152:	Apr 08, 2014	* uses the |'noswapfile'| option (requires {{{2
+				  vim 7.4 with patch 213)
+				* (Enno Nagel) turn |'rnu'| off in netrw
+				  buffers.
+				* (Quinn Strahl) suggested that netrw
+				  allow regular window splitting to occur,
+				  thereby allowing |'equalalways'| to take
+				  effect.
+				* (qingtian zhao) normally, netrw will
+				  save and restore the |'fileformat'|;
+				  however, sometimes that isn't wanted
+		Apr 14, 2014	* whenever netrw marks a buffer as ro,
+				  it will also mark it as nomod.
+		Apr 16, 2014	* sftp protocol now supported by
+				  netrw#Obtain(); this means that one
+				  may use "mc" to copy a remote file
+				  to a local file using sftp, and that
+				  the |netrw-O| command can obtain remote
+				  files via sftp.
+				* added [count]C support (see |netrw-C|)
+		Apr 18, 2014	* when |g:netrw_chgwin| is one more than
+				  the last window, then vertically split
+				  the last window and use it as the
+				  chgwin window.
+		May 09, 2014	* SavePosn was "saving filename under cursor"
+				  from a non-netrw window when using :Rex.
+	v151:	Jan 22, 2014	* extended :Rexplore to return to buffer {{{2
+				  prior to Explore or editing a directory
+				* (Ken Takata) netrw gave error when
+				  clipboard was disabled.  Sol'n: Placed
+				  several if has("clipboard") tests in.
+				* Fixed ftp://X@Y@Z// problem; X@Y now
+				  part of user id, and only Z is part of
+				  hostname.
+				* (A Loumiotis) reported that completion
+				  using a directory name containing spaces
+				  did not work.  Fixed with a retry in
+				  netrw#Explore() which removes the
+				  backslashes vim inserted.
+		Feb 26, 2014	* :Rexplore now records the current file
+				   using w:netrw_rexfile when returning via
+				  |:Rexplore|
+		Mar 08, 2014	* (David Kotchan) provided some patches
+				  allowing netrw to work properly with
+				  windows shares.
+				* Multiple one-liner help messages available
+				  by pressing <cr> while atop the "Quick
+				  Help" line
+				* worked on ShellCmdPost, FocusGained event
+				  handling.
+				* |:Lexplore| path: will be used to update
+				  a left-side netrw browsing directory.
+		Mar 12, 2014	* |netrw-s-cr|: use <s-cr>  to close
+				  tree directory implemented
+		Mar 13, 2014	* (Tony Mechylynck) reported that using
+				  the browser with ftp on a directory,
+				  and selecting a gzipped txt file, that
+				  an E19 occurred (which was issued by
+				  gzip.vim).  Fixed.
+		Mar 14, 2014	* Implemented :MF and :MT (see |netrw-:MF|
+				  and |netrw-:MT|, respectively)
+		Mar 17, 2014	* |:Ntree| [dir] wasn't working properly; fixed
+		Mar 18, 2014	* Changed all uses of set to setl
+		Mar 18, 2014	* Commented the netrw_btkeep line in
+				  s:NetrwOptionSave(); the effect is that
+				  netrw buffers will remain as |'bt'|=nofile.
+				  This should prevent swapfiles being created
+				  for netrw buffers.
+		Mar 20, 2014	* Changed all uses of lcd to use s:NetrwLcd()
+				  instead.  Consistent error handling results
+				  and it also handles Window's shares
+				* Fixed |netrw-d| command when applied with ftp
+				* https: support included for netrw#NetRead()
+	v150:	Jul 12, 2013	* removed a "keepalt" to allow ":e #" to {{{2
+				  return to the netrw directory listing
+		Jul 13, 2013	* (Jonas Diemer) suggested changing
+				  a <cWORD> to <cfile>.
+		Jul 21, 2013	* (Yuri Kanivetsky) reported that netrw's
+				  use of mkdir did not produce directories
+				  following the user's umask.
+		Aug 27, 2013	* introduced |g:netrw_altfile| option
+		Sep 05, 2013	* s:Strlen() now uses |strdisplaywidth()|
+				  when available, by default
+		Sep 12, 2013	* (Selyano Baldo) reported that netrw wasn't
+				  opening some directories properly from the
+				  command line.
+		Nov 09, 2013	* |:Lexplore| introduced
+				* (Ondrej Platek) reported an issue with
+				  netrw's trees (P15).  Fixed.
+				* (Jorge Solis) reported that "t" in
+				  tree mode caused netrw to forget its
+				  line position.
+		Dec 05, 2013	* Added <s-leftmouse> file marking
+				  (see |netrw-mf|)
+		Dec 05, 2013	* (Yasuhiro Matsumoto) Explore should use
+				  strlen() instead s:Strlen() when handling
+				  multibyte chars with strpart()
+				  (ie. strpart() is byte oriented, not
+				  display-width oriented).
+		Dec 09, 2013	* (Ken Takata) Provided a patch; File sizes
+				  and a portion of timestamps were wrongly
+				  highlighted with the directory color when
+				  setting `:let g:netrw_liststyle=1` on Windows.
+				* (Paul Domaskis) noted that sometimes
+				  cursorline was activating in non-netrw
+				  windows.  All but one setting of cursorline
+				  was done via setl; there was one that was
+				  overlooked.  Fixed.
+		Dec 24, 2013	* (esquifit) asked that netrw allow the
+				  /cygdrive prefix be a user-alterable
+				  parameter.
+		Jan 02, 2014	* Fixed a problem with netrw-based ballon
+				  evaluation (ie. netrw#NetrwBaloonHelp()
+				  not having been loaded error messages)
+		Jan 03, 2014	* Fixed a problem with tree listings
+				* New command installed: |:Ntree|
+		Jan 06, 2014	* (Ivan Brennan) reported a problem with
+				  |netrw-P|.  Fixed.
+		Jan 06, 2014	* Fixed a problem with |netrw-P| when the
+				  modified file was to be abandoned.
+		Jan 15, 2014	* (Matteo Cavalleri) reported that when the
+				  banner is suppressed and tree listing is
+				  used, a blank line was left at the top of
+				  the display.  Fixed.
+		Jan 20, 2014	* (Gideon Go) reported that, in tree listing
+				  style, with a previous window open, that
+				  the wrong directory was being used to open
+				  a file.  Fixed. (P21)
+	v149:	Apr 18, 2013	* in wide listing format, now have maps for {{{2
+				  w and b to move to next/previous file
+		Apr 26, 2013	* one may now copy files in the same
+				  directory; netrw will issue requests for
+				  what names the files should be copied under
+		Apr 29, 2013	* Trying Benzinger's problem again.  Seems
+				  that commenting out the BufEnter and
+				  installing VimEnter (only) works.  Weird
+				  problem!  (tree listing, vim -O Dir1 Dir2)
+		May 01, 2013	* :Explore ftp://... wasn't working.  Fixed.
+		May 02, 2013	* introduced |g:netrw_bannerbackslash| as
+				  requested by Paul Domaskis.
+		Jul 03, 2013	* Explore now avoids splitting when a buffer
+				  will be hidden.
+	v148:	Apr 16, 2013	* changed Netrw's Style menu to allow direct {{{2
+				  choice of listing style, hiding style, and
+				  sorting style
+```
+
+[1]: https://github.com/vim/vim
diff --git a/runtime/autoload/netrw.vim b/runtime/pack/dist/opt/netrw/autoload/netrw.vim
similarity index 98%
rename from runtime/autoload/netrw.vim
rename to runtime/pack/dist/opt/netrw/autoload/netrw.vim
index 25efab0..51ac9dd 100644
--- a/runtime/autoload/netrw.vim
+++ b/runtime/pack/dist/opt/netrw/autoload/netrw.vim
@@ -1,51 +1,6 @@
-" netrw.vim: Handles file transfer and remote directory listing across
-"            AUTOLOAD SECTION
-" Maintainer: This runtime file is looking for a new maintainer.
-" Date:       May 03, 2023
-" Version:    173a
-" Last Change: {{{1
-"   2023 Nov 21 by Vim Project: ignore wildignore when expanding $COMSPEC       (v173a)
-"   2023 Nov 22 by Vim Project: fix handling of very long filename on longlist style    (v173a)
-"   2024 Feb 19 by Vim Project: (announce adoption)
-"   2024 Feb 29 by Vim Project: handle symlinks in tree mode correctly
-"   2024 Apr 03 by Vim Project: detect filetypes for remote edited files
-"   2024 May 08 by Vim Project: cleanup legacy Win9X checks
-"   2024 May 09 by Vim Project: remove hard-coded private.ppk
-"   2024 May 10 by Vim Project: recursively delete directories by default
-"   2024 May 13 by Vim Project: prefer scp over pscp
-"   2024 Jun 04 by Vim Project: set bufhidden if buffer changed, nohidden is set and buffer shall be switched (#14915)
-"   2024 Jun 13 by Vim Project: glob() on Windows fails when a directory name contains [] (#14952)
-"   2024 Jun 23 by Vim Project: save ad restore registers when liststyle = WIDELIST (#15077, #15114)
-"   2024 Jul 22 by Vim Project: avoid endless recursion (#15318)
-"   2024 Jul 23 by Vim Project: escape filename before trying to delete it (#15330)
-"   2024 Jul 30 by Vim Project: handle mark-copy to same target directory (#12112)
-"   2024 Aug 02 by Vim Project: honor g:netrw_alt{o,v} for :{S,H,V}explore (#15417)
-"   2024 Aug 15 by Vim Project: style changes, prevent E121 (#15501)
-"   2024 Aug 22 by Vim Project: fix mf-selection highlight (#15551)
-"   2024 Aug 22 by Vim Project: adjust echo output of mx command (#15550)
-"   2024 Sep 15 by Vim Project: more strict confirmation dialog (#15680)
-"   2024 Sep 19 by Vim Project: mf-selection highlight uses wrong pattern (#15700)
-"   2024 Sep 21 by Vim Project: remove extraneous closing bracket (#15718)
-"   2024 Oct 21 by Vim Project: remove netrwFileHandlers (#15895)
-"   2024 Oct 27 by Vim Project: clean up gx mapping (#15721)
-"   2024 Oct 30 by Vim Project: fix filetype detection for remote files (#15961)
-"   2024 Oct 30 by Vim Project: fix x mapping on cygwin (#13687)
-"   2024 Oct 31 by Vim Project: add netrw#Launch() and netrw#Open() (#15962)
-"   2024 Oct 31 by Vim Project: fix E874 when browsing remote dir (#15964)
-"   2024 Nov 07 by Vim Project: use keeppatterns to prevent polluting the search history
-"   2024 Nov 07 by Vim Project: fix a few issues with netrw tree listing (#15996)
-"   2024 Nov 10 by Vim Project: directory symlink not resolved in tree view (#16020)
-"   2024 Nov 14 by Vim Project: small fixes to netrw#BrowseX (#16056)
-"   2024 Nov 23 by Vim Project: update decompress defaults (#16104)
-"   2024 Nov 23 by Vim Project: fix powershell escaping issues (#16094)
-"   2024 Dec 04 by Vim Project: do not detach for gvim (#16168)
-"   2024 Dec 08 by Vim Project: check the first arg of netrw_browsex_viewer for being executable (#16185)
-"   2024 Dec 12 by Vim Project: do not pollute the search history (#16206)
-"   2024 Dec 19 by Vim Project: change style (#16248)
-"   2024 Dec 20 by Vim Project: change style continued (#16266), fix escaping of # in :Open command (#16265)
-"   }}}
-" Former Maintainer:    Charles E Campbell
-" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
+" Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
+" Former Maintainer: Charles E Campbell
+" Upstream: <https://github.com/saccarosium/netrw.vim>
 " Copyright:    Copyright (C) 2016 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
@@ -58,12 +13,7 @@
 "
 " Note: the code here was started in 1999 under a much earlier version of vim.  The directory browsing
 "       code was written using vim v6, which did not have Lists (Lists were first offered with vim-v7).
-"
-"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-"
-"  But be doers of the Word, and not only hearers, deluding your own selves {{{1
-"  (James 1:22 RSV)
-" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
 " Load Once: {{{1
 if &cp || exists("g:loaded_netrw")
   finish
@@ -85,7 +35,7 @@
   endfor
 endif
 
-let g:loaded_netrw = "v173"
+let g:loaded_netrw = "v174"
 
 let s:keepcpo= &cpo
 setl cpo&vim
diff --git a/runtime/autoload/netrwSettings.vim b/runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim
similarity index 95%
rename from runtime/autoload/netrwSettings.vim
rename to runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim
index 3452602..fd43c16 100644
--- a/runtime/autoload/netrwSettings.vim
+++ b/runtime/pack/dist/opt/netrw/autoload/netrwSettings.vim
@@ -1,10 +1,6 @@
-" netrwSettings.vim: makes netrw settings simpler
-" Date:		Nov 15, 2021
-" Maintainer:   This runtime file is looking for a new maintainer.
+" Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
 " Former Maintainer: Charles E Campbell
-" Version:	18
-" Last Change:
-"   2024 May 08 by Vim Project: cleanup legacy Win9X checks
+" Upstream: <https://github.com/saccarosium/netrw.vim>
 " 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
@@ -14,15 +10,12 @@
 "               this plugin, you agree that in no event will the copyright
 "               holder be liable for any damages resulting from the use
 "               of this software.
-"
-" Mat 4:23 (WEB) Jesus went about in all Galilee, teaching in their {{{1
-"                synagogues, preaching the gospel of the kingdom, and healing
-"                every disease and every sickness among the people.
+
 " Load Once: {{{1
 if exists("g:loaded_netrwSettings") || &cp
   finish
 endif
-let g:loaded_netrwSettings = "v18"
+let g:loaded_netrwSettings = "v174"
 if v:version < 700
  echohl WarningMsg
  echo "***warning*** this version of netrwSettings needs vim 7.0"
diff --git a/runtime/autoload/netrw_gitignore.vim b/runtime/pack/dist/opt/netrw/autoload/netrw_gitignore.vim
similarity index 89%
rename from runtime/autoload/netrw_gitignore.vim
rename to runtime/pack/dist/opt/netrw/autoload/netrw_gitignore.vim
index 1b55e24..6c1d858 100644
--- a/runtime/autoload/netrw_gitignore.vim
+++ b/runtime/pack/dist/opt/netrw/autoload/netrw_gitignore.vim
@@ -1,3 +1,7 @@
+" Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
+" Former Maintainer: Bruno Sutic
+" Upstream: <https://github.com/saccarosium/netrw.vim>
+
 " netrw_gitignore#Hide: gitignore-based hiding
 "  Function returns a string of comma separated patterns convenient for
 "  assignment to `g:netrw_list_hide` option.
diff --git a/runtime/doc/pi_netrw.txt b/runtime/pack/dist/opt/netrw/doc/netrw.txt
similarity index 85%
rename from runtime/doc/pi_netrw.txt
rename to runtime/pack/dist/opt/netrw/doc/netrw.txt
index c22aad3..9d277ea 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/pack/dist/opt/netrw/doc/netrw.txt
@@ -1,13 +1,13 @@
-*pi_netrw.txt*  For Vim version 9.1.  Last change: 2024 Nov 23
+*netrw.txt*
 
 	    ------------------------------------------------
-	    NETRW REFERENCE MANUAL    by Charles E. Campbell
+	    NETRW REFERENCE MANUAL      by Charles E.Cambell
 	    ------------------------------------------------
 Original Author:  Charles E. Campbell
 
 Copyright: Copyright (C) 2017 Charles E Campbell    *netrw-copyright*
 	The VIM LICENSE applies to the files in this package, including
-        netrw.vim, pi_netrw.txt, netrwSettings.vim, and
+        netrw.vim, netrw.txt, netrwSettings.vim, and
 	syntax/netrw.vim.  Like anything else that's free, netrw.vim and its
 	associated files are provided *as is* and comes with no warranty of
 	any kind, either expressed or implied.  No guarantees of
@@ -110,10 +110,7 @@
       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|
+11. Credits...............................................|netrw-credits|
 
 ==============================================================================
 2. Starting With Netrw					*netrw-start* {{{1
@@ -3414,7 +3411,6 @@
 10. Problems and Fixes					*netrw-problems* {{{1
 
 	(This section is likely to grow as I get feedback)
-	(also see |netrw-debug|)
 								*netrw-p1*
 	P1. I use Windows, and my network browsing with ftp doesn't sort by {{{2
 	    time or size!  -or-  The remote system is a Windows server; why
@@ -3779,606 +3775,7 @@
 
 
 ==============================================================================
-11. Debugging Netrw Itself				*netrw-debug* {{{1
-
-Step 1: check that the problem you've encountered hasn't already been resolved
-by obtaining a copy of the latest (often developmental) netrw at:
-
-	http://www.drchip.org/astronaut/vim/index.html#NETRW
-
-The <netrw.vim> script is typically installed on systems as something like:
->
-	/usr/local/share/vim/vim8x/plugin/netrwPlugin.vim
-	/usr/local/share/vim/vim8x/autoload/netrw.vim
-		(see output of :echo &rtp)
-<
-which is loaded automatically at startup (assuming :set nocp).  If you
-installed a new netrw, then it will be located at >
-
-	$HOME/.vim/plugin/netrwPlugin.vim
-	$HOME/.vim/autoload/netrw.vim
-<
-Step 2: assuming that you've installed the latest version of netrw,
-check that your problem is really due to netrw.  Create a file
-called netrw.vimrc with the following contents: >
-
-	set nocp
-	so $HOME/.vim/plugin/netrwPlugin.vim
-<
-Then run netrw as follows: >
-
-	vim -u netrw.vimrc --noplugins -i NONE [some path here]
-<
-Perform whatever netrw commands you need to, and check that the problem is
-still present.  This procedure sidesteps any issues due to personal .vimrc
-settings, .viminfo file, and other plugins.  If the problem does not appear,
-then you need to determine which setting in your .vimrc is causing the
-conflict with netrw or which plugin(s) is/are involved.
-
-Step 3: If the problem still is present, then get a debugging trace from
-netrw:
-
-	1. Get the <Decho.vim> script, available as:
-
-	     http://www.drchip.org/astronaut/vim/index.html#DECHO
-	   or
-	     http://vim.sourceforge.net/scripts/script.php?script_id=120
-
-	  Decho.vim is provided as a "vimball"; see |vimball-intro|.  You
-	  should edit the Decho.vba.gz file and source it in: >
-
-		vim Decho.vba.gz
-		:so %
-		:q
-<
-	2. To turn on debug tracing in netrw, then edit the <netrw.vim>
-	   file by typing: >
-
-		vim netrw.vim
-		:DechoOn
-		:wq
-<
-	   To restore to normal non-debugging behavior, re-edit <netrw.vim>
-	   and type >
-
-		vim netrw.vim
-		:DechoOff
-		:wq
-<
-	   This command, provided by <Decho.vim>, will comment out all
-	   Decho-debugging statements (Dfunc(), Dret(), Decho(), Dredir()).
-
-	3. Then bring up vim and attempt to evoke the problem by doing a
-	   transfer or doing some browsing.  A set of messages should appear
-	   concerning the steps that <netrw.vim> took in attempting to
-	   read/write your file over the network in a separate tab or
-	   server vim window.
-
-	   Change the netrw.vimrc file to include the Decho plugin: >
-
-		set nocp
-		so $HOME/.vim/plugin/Decho.vim
-		so $HOME/.vim/plugin/netrwPlugin.vim
-<
-	   You should continue to run vim with >
-
-		vim -u netrw.vimrc --noplugins -i NONE [some path here]
-<
-	   to avoid entanglements with options and other plugins.
-
-	   To save the file: under linux, the output will be in a separate
-	   remote server window; in it, just save the file with >
-
-		:w! DBG
-
-<	   Under a vim that doesn't support clientserver, your debugging
-	   output will appear in another tab: >
-
-		:tabnext
-		:set bt=
-		:w! DBG
-<
-	   Furthermore, it'd be helpful if you would type >
-
-		:Dsep <command>
-
-<	   where <command> is the command you're about to type next,
-	   thereby making it easier to associate which part of the
-	   debugging trace is due to which command.
-
-	   For bug reports, please see |bugs|.
-==============================================================================
-12. History						*netrw-history* {{{1
-
-	v172:	Sep 02, 2021	* (Bram Moolenaar) Changed "l:go" to "go"
-				* (Bram Moolenaar) no need for "b" in
-				  netrw-safe guioptions
-		Nov 15, 2021	* removed netrw_localrm and netrw_localrmdir
-				  references
-		Aug 18, 2022	* (Miguel Barro) improving compatibility with
-				  powershell
-	v171:	Oct 09, 2020	* included code in s:NetrwOptionsSafe()
-				  to allow |'bh'| to be set to delete when
-				  rather than hide when g:netrw_fastbrowse
-				  was zero.
-				* Installed |g:netrw_clipboard| setting
-				* Installed option bypass for |'guioptions'|
-				  a/A settings
-				* Changed popup_beval() to |popup_atcursor()|
-				  in netrw#ErrorMsg (lacygoill). Apparently
-				  popup_beval doesn't reliably close the
-				  popup when the mouse is moved.
-				* VimEnter() now using win_execute to examine
-				  buffers for an attempt to open a directory.
-				  Avoids issues with popups/terminal from
-				  command line. (lacygoill)
-		Jun 28, 2021	* (zeertzjq) provided a patch for use of
-				  xmap,xno instead of vmap,vno in
-				  netrwPlugin.vim. Avoids entanglement with
-				  select mode.
-		Jul 14, 2021	* Fixed problem addressed by tst976; opening
-				  a file using tree mode, going up a
-				  directory, and opening a file there was
-				  opening the file in the wrong directory.
-		Jul 28, 2021	* (Ingo Karkat) provided a patch fixing an
-				  E488 error with netrwPlugin.vim
-				  (occurred for vim versions < 8.02)
-	v170:	Mar 11, 2020	* (reported by Reiner Herrmann) netrw+tree
-				  would not hide with the ^\..* pattern
-				  correctly.
-				* (Marcin Szamotulski) NetrwOptionRestore
-				  did not restore options correctly that
-				  had a single quote in the option string.
-		Apr 13, 2020	* implemented error handling via popup
-				  windows (see |popup_beval()|)
-		Apr 30, 2020	* (reported by Manatsu Takahashi) while
-				  using Lexplore, a modified file could
-				  be overwritten.  Sol'n: will not overwrite,
-				  but will emit an |E37| (although one cannot
-				  add an ! to override)
-		Jun 07, 2020	* (reported by Jo Totland) repeatedly invoking
-				  :Lexplore and quitting it left unused
-				  hidden buffers.  Netrw will now set netrw
-				  buffers created by :Lexplore to |'bh'|=wipe.
-	v169:	Dec 20, 2019	* (reported by amkarthik) that netrw's x
-				  (|netrw-x|) would throw an error when
-				  attempting to open a local directory.
-	v168:	Dec 12, 2019	* scp timeout error message not reported,
-				  hopefully now fixed (Shane Xb Qian)
-	v167:	Nov 29, 2019	* netrw does a save&restore on @* and @+.
-				  That causes problems with the clipboard.
-				  Now restores occurs only if @* or @+ have
-				  been changed.
-				* netrw will change @* or @+ less often.
-				  Never if I happen to have caught all the
-				  operations that modify the unnamed
-				  register (which also writes @*).
-				* Modified hiding behavior so that "s"
-				  will not ignore hiding.
-	v166:	Nov 06, 2019	* Removed a space from a nmap for "-"
-				* Numerous debugging statement changes
-	v163:	Dec 05, 2017	* (Cristi Balan) reported that a setting ('sel')
-				  was left changed
-				* (Holger Mitschke) reported a problem with
-				  saving and restoring history.  Fixed.
-				* Hopefully I fixed a nasty bug that caused a
-				  file rename to wipe out a buffer that it
-				  should not have wiped out.
-				* (Holger Mitschke) amended this help file
-				  with additional |g:netrw_special_syntax|
-				  items
-				* Prioritized wget over curl for
-				  g:netrw_http_cmd
-	v162:	Sep 19, 2016	* (haya14busa) pointed out two syntax errors
-				  with a patch; these are now fixed.
-		Oct 26, 2016	* I started using mate-terminal and found that
-				  x and gx (|netrw-x| and |netrw-gx|) were no
-				  longer working.  Fixed (using atril when
-				  $DESKTOP_SESSION is "mate").
-		Nov 04, 2016	* (Martin Vuille) pointed out that @+ was
-				  being restored with keepregstar rather than
-				  keepregplus.
-		Nov 09, 2016	* Broke apart the command from the options,
-				  mostly for Windows.  Introduced new netrw
-				  settings: |g:netrw_localcopycmdopt|
-				  |g:netrw_localcopydircmdopt|
-				  |g:netrw_localmkdiropt|
-				  |g:netrw_localmovecmdopt|
-		Nov 21, 2016	* (mattn) provided a patch for preview; swapped
-				  winwidth() with winheight()
-		Nov 22, 2016	* (glacambre) reported that files containing
-				  spaces weren't being obtained properly via
-				  scp.  Fix: apparently using single quotes
-				  such as with 'file name' wasn't enough; the
-				  spaces inside the quotes also had to be
-				  escaped (ie. 'file\ name').
-				* Also fixed obtain (|netrw-O|) to be able to
-				  obtain files with spaces in their names
-		Dec 20, 2016	* (xc1427) Reported that using "I" (|netrw-I|)
-				  when atop "Hiding" in the banner also caused
-				  the active-banner hiding control to occur
-		Jan 03, 2017	* (Enno Nagel) reported that attempting to
-				  apply netrw to a directory that was without
-				  read permission caused a syntax error.
-		Jan 13, 2017	* (Ingo Karkat) provided a patch which makes
-				  using netrw#Call() better.  Now returns
-				  value of internal routines return, for example.
-		Jan 13, 2017	* (Ingo Karkat) changed netrw#FileUrlRead to
-				  use |:edit| instead of |:read|.  I also
-				  changed the routine name to netrw#FileUrlEdit.
-		Jan 16, 2017	* (Sayem) reported a problem where :Lexplore
-				  could generate a new listing buffer and
-				  window instead of toggling the netrw display.
-				  Unfortunately, the directions for eliciting
-				  the problem weren't complete, so I may or
-				  may not have fixed that issue.
-		Feb 06, 2017	* Implemented cb and cB.  Changed "c" to "cd".
-				  (see |netrw-cb|, |netrw-cB|, and |netrw-cd|)
-		Mar 21, 2017	* previously, netrw would specify (safe) settings
-				  even when the setting was already safe for
-				  netrw.  Netrw now attempts to leave such
-				  already-netrw-safe settings alone.
-				  (affects s:NetrwOptionRestore() and
-				  s:NetrwSafeOptions(); also introduced
-				  s:NetrwRestoreSetting())
-		Jun 26, 2017	* (Christian Brabandt) provided a patch to
-				  allow curl to follow redirects (ie. -L
-				  option)
-		Jun 26, 2017	* (Callum Howard) reported a problem with
-				  :Lexpore not removing the Lexplore window
-				  after a change-directory
-		Aug 30, 2017	* (Ingo Karkat) one cannot switch to the
-				  previously edited file (e.g. with CTRL-^)
-				  after editing a file:// URL.  Patch to
-				  have a "keepalt" included.
-		Oct 17, 2017	* (Adam Faryna) reported that gn (|netrw-gn|)
-				  did not work on directories in the current
-				  tree
-	v157:	Apr 20, 2016	* (Nicola) had set up a "nmap <expr> ..." with
-				  a function that returned a 0 while silently
-				  invoking a shell command.  The shell command
-				  activated a ShellCmdPost event which in turn
-				  called s:LocalBrowseRefresh().  That looks
-				  over all netrw buffers for changes needing
-				  refreshes.  However, inside a |:map-<expr>|,
-				  tab and window changes are disallowed.  Fixed.
-				  (affects netrw's s:LocalBrowseRefresh())
-				* g:netrw_localrmdir not used any more, but
-				  the relevant patch that causes |delete()| to
-				  take over was #1107 (not #1109).
-				* |expand()| is now used on |g:netrw_home|;
-				  consequently, g:netrw_home may now use
-				  environment variables
-				* s:NetrwLeftmouse and s:NetrwCLeftmouse will
-				  return without doing anything if invoked
-				  when inside a non-netrw window
-		Jun 15, 2016	* gx now calls netrw#GX() which returns
-				  the word under the cursor.  The new
-				  wrinkle: if one is in a netrw buffer,
-				  then netrw's s:NetrwGetWord().
-		Jun 22, 2016	* Netrw was executing all its associated
-				  Filetype commands silently; I'm going
-				  to try doing that "noisily" and see if
-				  folks have a problem with that.
-		Aug 12, 2016	* Changed order of tool selection for
-				  handling http://... viewing.
-				  (Nikolay Aleksandrovich Pavlov)
-		Aug 21, 2016	* Included hiding/showing/all for tree
-				  listings
-				* Fixed refresh (^L) for tree listings
-	v156:	Feb 18, 2016	* Changed =~ to =~# where appropriate
-		Feb 23, 2016	* s:ComposePath(base,subdir) now uses
-				  fnameescape() on the base portion
-		Mar 01, 2016	* (gt_macki) reported where :Explore would
-				  make file unlisted. Fixed (tst943)
-		Apr 04, 2016	* (reported by John Little) netrw normally
-				  suppresses browser messages, but sometimes
-				  those "messages" are what is wanted.
-				  See |g:netrw_suppress_gx_mesg|
-		Apr 06, 2016	* (reported by Carlos Pita) deleting a remote
-				  file was giving an error message.  Fixed.
-		Apr 08, 2016	* (Charles Cooper) had a problem with an
-				  undefined b:netrw_curdir.  He also provided
-				  a fix.
-		Apr 20, 2016	* Changed s:NetrwGetBuffer(); now uses
-				  dictionaries.  Also fixed the "No Name"
-				  buffer problem.
-	v155:	Oct 29, 2015	* (Timur Fayzrakhmanov) reported that netrw's
-				  mapping of ctrl-l was not allowing refresh of
-				  other windows when it was done in a netrw
-				  window.
-		Nov 05, 2015	* Improved s:TreeSqueezeDir() to use search()
-				  instead of a loop
-				* NetrwBrowse() will return line to
-				  w:netrw_bannercnt if cursor ended up in
-				  banner
-		Nov 16, 2015	* Added a <Plug>NetrwTreeSqueeze (|netrw-s-cr|)
-		Nov 17, 2015	* Commented out imaps -- perhaps someone can
-				  tell me how they're useful and should be
-				  retained?
-		Nov 20, 2015	* Added |netrw-ma| and |netrw-mA| support
-		Nov 20, 2015	* gx (|netrw-gx|) on a URL downloaded the
-				  file in addition to simply bringing up the
-				  URL in a browser.  Fixed.
-		Nov 23, 2015	* Added |g:netrw_sizestyle| support
-		Nov 27, 2015	* Inserted a lot of <c-u>s into various netrw
-				  maps.
-		Jan 05, 2016	* |netrw-qL| implemented to mark files based
-				  upon |location-list|s; similar to |netrw-qF|.
-		Jan 19, 2016	* using - call delete(directoryname,"d") -
-				  instead of using g:netrw_localrmdir if
-				  v7.4 + patch#1107 is available
-		Jan 28, 2016	* changed to using |winsaveview()| and
-				  |winrestview()|
-		Jan 28, 2016	* s:NetrwTreePath() now does a save and
-				  restore of view
-		Feb 08, 2016	* Fixed a tree-listing problem with remote
-				  directories
-	v154:	Feb 26, 2015	* (Yuri Kanivetsky) reported a situation where
-				  a file was not treated properly as a file
-				  due to g:netrw_keepdir == 1
-		Mar 25, 2015	* (requested by Ben Friz) one may now sort by
-				  extension
-		Mar 28, 2015	* (requested by Matt Brooks) netrw has a lot
-				  of buffer-local mappings; however, some
-				  plugins (such as vim-surround) set up
-				  conflicting mappings that cause vim to wait.
-				  The "<nowait>" modifier has been included
-				  with most of netrw's mappings to avoid that
-				  delay.
-		Jun 26, 2015	* |netrw-gn| mapping implemented
-				* :Ntree NotADir resulted in having
-				  the tree listing expand in the error messages
-				  window.  Fixed.
-		Jun 29, 2015	* Attempting to delete a file remotely caused
-				  an error with "keepsol" mentioned; fixed.
-		Jul 08, 2015	* Several changes to keep the |:jumps| table
-				  correct when working with
-				  |g:netrw_fastbrowse| set to 2
-				* wide listing with accented characters fixed
-				  (using %-S instead of %-s with a |printf()|
-		Jul 13, 2015	* (Daniel Hahler) CheckIfKde() could be true
-				  but kfmclient not installed.  Changed order
-				  in netrw#BrowseX(): checks if kde and
-				  kfmclient, then will use xdg-open on a unix
-				  system (if xdg-open is executable)
-		Aug 11, 2015	* (McDonnell) tree listing mode wouldn't
-				  select a file in a open subdirectory.
-				* (McDonnell) when multiple subdirectories
-				  were concurrently open in tree listing
-				  mode, a ctrl-L wouldn't refresh properly.
-				* The netrw:target menu showed duplicate
-				  entries
-		Oct 13, 2015	* (mattn) provided an exception to handle
-				  windows with shellslash set but no shell
-		Oct 23, 2015	* if g:netrw_usetab and <c-tab> now used
-				  to control whether NetrwShrink is used
-				  (see |netrw-c-tab|)
-	v153:	May 13, 2014	* added another |g:netrw_ffkeep| usage {{{2
-		May 14, 2014	* changed s:PerformListing() so that it
-				  always sets ft=netrw for netrw buffers
-				  (ie. even when syntax highlighting is
-				  off, not available, etc)
-		May 16, 2014	* introduced the |netrw-ctrl-r| functionality
-		May 17, 2014	* introduced the |netrw-:NetrwMB| functionality
-				* mb and mB (|netrw-mb|, |netrw-mB|) will
-				  add/remove marked files from bookmark list
-		May 20, 2014	* (Enno Nagel) reported that :Lex <dirname>
-				  wasn't working.  Fixed.
-		May 26, 2014	* restored test to prevent leftmouse window
-				  resizing from causing refresh.
-				  (see s:NetrwLeftmouse())
-				* fixed problem where a refresh caused cursor
-				  to go just under the banner instead of
-				  staying put
-		May 28, 2014	* (László Bimba) provided a patch for opening
-				  the |:Lexplore| window 100% high, optionally
-				  on the right, and will work with remote
-				  files.
-		May 29, 2014	* implemented :NetrwC  (see |netrw-:NetrwC|)
-		Jun 01, 2014	* Removed some "silent"s from commands used
-				  to implemented scp://... and pscp://...
-				  directory listing.  Permits request for
-				  password to appear.
-		Jun 05, 2014	* (Enno Nagel) reported that user maps "/"
-				  caused problems with "b" and "w", which
-				  are mapped (for wide listings only) to
-				  skip over files rather than just words.
-		Jun 10, 2014	* |g:netrw_gx| introduced to allow users to
-				  override default "<cfile>" with the gx
-				  (|netrw-gx|) map
-		Jun 11, 2014	* gx (|netrw-gx|), with |'autowrite'| set,
-				  will write modified files.  s:NetrwBrowseX()
-				  will now save, turn off, and restore the
-				  |'autowrite'| setting.
-		Jun 13, 2014	* added visual map for gx use
-		Jun 15, 2014	* (Enno Nagel) reported that with having hls
-				  set and wide listing style in use, that the
-				  b and w maps caused unwanted highlighting.
-		Jul 05, 2014	* |netrw-mv| and |netrw-mX| commands included
-		Jul 09, 2014	* |g:netrw_keepj| included, allowing optional
-				  keepj
-		Jul 09, 2014	* fixing bugs due to previous update
-		Jul 21, 2014	* (Bruno Sutic) provided an updated
-				  netrw_gitignore.vim
-		Jul 30, 2014	* (Yavuz Yetim) reported that editing two
-				  remote files of the same name caused the
-				  second instance to have a "temporary"
-				  name.  Fixed: now they use the same buffer.
-		Sep 18, 2014	* (Yasuhiro Matsumoto) provided a patch which
-				  allows scp and windows local paths to work.
-		Oct 07, 2014	* gx (see |netrw-gx|) when atop a directory,
-				  will now do |gf| instead
-		Nov 06, 2014	* For cygwin: cygstart will be available for
-				  netrw#BrowseX() to use if its executable.
-		Nov 07, 2014	* Began support for file://... urls.  Will use
-				  |g:netrw_file_cmd| (typically elinks or links)
-		Dec 02, 2014	* began work on having mc (|netrw-mc|) copy
-				  directories.  Works for linux machines,
-				  cygwin+vim, but not for windows+gvim.
-		Dec 02, 2014	* in tree mode, netrw was not opening
-				  directories via symbolic links.
-		Dec 02, 2014	* added resolved link information to
-				  thin and tree modes
-		Dec 30, 2014	* (issue#231) |:ls| was not showing
-				  remote-file buffers reliably.  Fixed.
-	v152:	Apr 08, 2014	* uses the |'noswapfile'| option (requires {{{2
-				  vim 7.4 with patch 213)
-				* (Enno Nagel) turn |'rnu'| off in netrw
-				  buffers.
-				* (Quinn Strahl) suggested that netrw
-				  allow regular window splitting to occur,
-				  thereby allowing |'equalalways'| to take
-				  effect.
-				* (qingtian zhao) normally, netrw will
-				  save and restore the |'fileformat'|;
-				  however, sometimes that isn't wanted
-		Apr 14, 2014	* whenever netrw marks a buffer as ro,
-				  it will also mark it as nomod.
-		Apr 16, 2014	* sftp protocol now supported by
-				  netrw#Obtain(); this means that one
-				  may use "mc" to copy a remote file
-				  to a local file using sftp, and that
-				  the |netrw-O| command can obtain remote
-				  files via sftp.
-				* added [count]C support (see |netrw-C|)
-		Apr 18, 2014	* when |g:netrw_chgwin| is one more than
-				  the last window, then vertically split
-				  the last window and use it as the
-				  chgwin window.
-		May 09, 2014	* SavePosn was "saving filename under cursor"
-				  from a non-netrw window when using :Rex.
-	v151:	Jan 22, 2014	* extended :Rexplore to return to buffer {{{2
-				  prior to Explore or editing a directory
-				* (Ken Takata) netrw gave error when
-				  clipboard was disabled.  Sol'n: Placed
-				  several if has("clipboard") tests in.
-				* Fixed ftp://X@Y@Z// problem; X@Y now
-				  part of user id, and only Z is part of
-				  hostname.
-				* (A Loumiotis) reported that completion
-				  using a directory name containing spaces
-				  did not work.  Fixed with a retry in
-				  netrw#Explore() which removes the
-				  backslashes vim inserted.
-		Feb 26, 2014	* :Rexplore now records the current file
-				   using w:netrw_rexfile when returning via
-				  |:Rexplore|
-		Mar 08, 2014	* (David Kotchan) provided some patches
-				  allowing netrw to work properly with
-				  windows shares.
-				* Multiple one-liner help messages available
-				  by pressing <cr> while atop the "Quick
-				  Help" line
-				* worked on ShellCmdPost, FocusGained event
-				  handling.
-				* |:Lexplore| path: will be used to update
-				  a left-side netrw browsing directory.
-		Mar 12, 2014	* |netrw-s-cr|: use <s-cr>  to close
-				  tree directory implemented
-		Mar 13, 2014	* (Tony Mechylynck) reported that using
-				  the browser with ftp on a directory,
-				  and selecting a gzipped txt file, that
-				  an E19 occurred (which was issued by
-				  gzip.vim).  Fixed.
-		Mar 14, 2014	* Implemented :MF and :MT (see |netrw-:MF|
-				  and |netrw-:MT|, respectively)
-		Mar 17, 2014	* |:Ntree| [dir] wasn't working properly; fixed
-		Mar 18, 2014	* Changed all uses of set to setl
-		Mar 18, 2014	* Commented the netrw_btkeep line in
-				  s:NetrwOptionSave(); the effect is that
-				  netrw buffers will remain as |'bt'|=nofile.
-				  This should prevent swapfiles being created
-				  for netrw buffers.
-		Mar 20, 2014	* Changed all uses of lcd to use s:NetrwLcd()
-				  instead.  Consistent error handling results
-				  and it also handles Window's shares
-				* Fixed |netrw-d| command when applied with ftp
-				* https: support included for netrw#NetRead()
-	v150:	Jul 12, 2013	* removed a "keepalt" to allow ":e #" to {{{2
-				  return to the netrw directory listing
-		Jul 13, 2013	* (Jonas Diemer) suggested changing
-				  a <cWORD> to <cfile>.
-		Jul 21, 2013	* (Yuri Kanivetsky) reported that netrw's
-				  use of mkdir did not produce directories
-				  following the user's umask.
-		Aug 27, 2013	* introduced |g:netrw_altfile| option
-		Sep 05, 2013	* s:Strlen() now uses |strdisplaywidth()|
-				  when available, by default
-		Sep 12, 2013	* (Selyano Baldo) reported that netrw wasn't
-				  opening some directories properly from the
-				  command line.
-		Nov 09, 2013	* |:Lexplore| introduced
-				* (Ondrej Platek) reported an issue with
-				  netrw's trees (P15).  Fixed.
-				* (Jorge Solis) reported that "t" in
-				  tree mode caused netrw to forget its
-				  line position.
-		Dec 05, 2013	* Added <s-leftmouse> file marking
-				  (see |netrw-mf|)
-		Dec 05, 2013	* (Yasuhiro Matsumoto) Explore should use
-				  strlen() instead s:Strlen() when handling
-				  multibyte chars with strpart()
-				  (ie. strpart() is byte oriented, not
-				  display-width oriented).
-		Dec 09, 2013	* (Ken Takata) Provided a patch; File sizes
-				  and a portion of timestamps were wrongly
-				  highlighted with the directory color when
-				  setting `:let g:netrw_liststyle=1` on Windows.
-				* (Paul Domaskis) noted that sometimes
-				  cursorline was activating in non-netrw
-				  windows.  All but one setting of cursorline
-				  was done via setl; there was one that was
-				  overlooked.  Fixed.
-		Dec 24, 2013	* (esquifit) asked that netrw allow the
-				  /cygdrive prefix be a user-alterable
-				  parameter.
-		Jan 02, 2014	* Fixed a problem with netrw-based ballon
-				  evaluation (ie. netrw#NetrwBaloonHelp()
-				  not having been loaded error messages)
-		Jan 03, 2014	* Fixed a problem with tree listings
-				* New command installed: |:Ntree|
-		Jan 06, 2014	* (Ivan Brennan) reported a problem with
-				  |netrw-P|.  Fixed.
-		Jan 06, 2014	* Fixed a problem with |netrw-P| when the
-				  modified file was to be abandoned.
-		Jan 15, 2014	* (Matteo Cavalleri) reported that when the
-				  banner is suppressed and tree listing is
-				  used, a blank line was left at the top of
-				  the display.  Fixed.
-		Jan 20, 2014	* (Gideon Go) reported that, in tree listing
-				  style, with a previous window open, that
-				  the wrong directory was being used to open
-				  a file.  Fixed. (P21)
-	v149:	Apr 18, 2013	* in wide listing format, now have maps for {{{2
-				  w and b to move to next/previous file
-		Apr 26, 2013	* one may now copy files in the same
-				  directory; netrw will issue requests for
-				  what names the files should be copied under
-		Apr 29, 2013	* Trying Benzinger's problem again.  Seems
-				  that commenting out the BufEnter and
-				  installing VimEnter (only) works.  Weird
-				  problem!  (tree listing, vim -O Dir1 Dir2)
-		May 01, 2013	* :Explore ftp://... wasn't working.  Fixed.
-		May 02, 2013	* introduced |g:netrw_bannerbackslash| as
-				  requested by Paul Domaskis.
-		Jul 03, 2013	* Explore now avoids splitting when a buffer
-				  will be hidden.
-	v148:	Apr 16, 2013	* changed Netrw's Style menu to allow direct {{{2
-				  choice of listing style, hiding style, and
-				  sorting style
-
-==============================================================================
-13. Todo						*netrw-todo* {{{1
-
-07/29/09 : banner	:|g:netrw_banner| can be used to suppress the
-	   suppression	  banner.  This feature is new and experimental,
-			  so its in the process of being debugged.
-09/04/09 : "gp"		: See if it can be made to work for remote systems.
-			: See if it can be made to work with marked files.
-
-==============================================================================
-14. Credits						*netrw-credits* {{{1
+11. Credits						*netrw-credits* {{{1
 
 	Vim editor	by Bram Moolenaar (Thanks, Bram!)
 	dav		support by C Campbell
diff --git a/runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim b/runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim
new file mode 100644
index 0000000..ddf4234
--- /dev/null
+++ b/runtime/pack/dist/opt/netrw/plugin/netrwPlugin.vim
@@ -0,0 +1,222 @@
+" Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
+" Former Maintainer: Charles E Campbell
+" Upstream: <https://github.com/saccarosium/netrw.vim>
+" Copyright:    Copyright (C) 1999-2021 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,
+"               netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
+"               *as is* and comes with no warranty of any kind, either
+"               expressed or implied. By using this plugin, you agree that
+"               in no event will the copyright holder be liable for any damages
+"               resulting from the use of this software.
+
+" Load Once: {{{1
+if &cp || exists("g:loaded_netrwPlugin")
+  finish
+endif
+let g:loaded_netrwPlugin = "v174"
+let s:keepcpo = &cpo
+set cpo&vim
+"DechoRemOn
+
+" ---------------------------------------------------------------------
+" Public Interface: {{{1
+
+" Commands Launch/URL {{{2
+command -complete=shellcmd -nargs=1   Launch  call netrw#Launch(trim(<q-args>))
+command -complete=file     -nargs=1   Open    call netrw#Open(trim(<q-args>))
+" " }}}
+" Local Browsing Autocmds: {{{2
+augroup FileExplorer
+  au!
+  au BufLeave *  if &ft != "netrw"|let w:netrw_prvfile= expand("%:p")|endif
+  au BufEnter * sil call s:LocalBrowse(expand("<amatch>"))
+  au VimEnter * sil call s:VimEnter(expand("<amatch>"))
+  if has("win32")
+    au BufEnter .* sil call s:LocalBrowse(expand("<amatch>"))
+  endif
+augroup END
+
+" Network Browsing Reading Writing: {{{2
+augroup Network
+  au!
+  au BufReadCmd   file://*                                                                                      call netrw#FileUrlEdit(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://*,file://*,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://*,http://*,file://*,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://*,http://*,file://*,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://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://*      exe 'Nsource '.fnameescape(expand("<amatch>"))
+  catch /^Vim\%((\a\+)\)\=:E216/
+    au SourcePre   ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://*      exe 'Nsource '.fnameescape(expand("<amatch>"))
+  endtry
+augroup END
+
+" Commands: :Nread, :Nwrite, :NetUserPass {{{2
+com! -count=1 -nargs=*  Nread           let s:svpos= winsaveview()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call winrestview(s:svpos)
+com! -range=% -nargs=*  Nwrite          let s:svpos= winsaveview()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call winrestview(s:svpos)
+com! -nargs=*           NetUserPass     call NetUserPass(<f-args>)
+com! -nargs=*           Nsource         let s:svpos= winsaveview()<bar>call netrw#NetSource(<f-args>)<bar>call winrestview(s:svpos)
+com! -nargs=?           Ntree           call netrw#SetTreetop(1,<q-args>)
+
+" Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2
+com! -nargs=* -bar -bang -count=0 -complete=dir Explore         call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
+com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore        call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
+com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore        call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
+com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore        call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
+com! -nargs=* -bar       -count=0 -complete=dir Texplore        call netrw#Explore(<count>,0,6        ,<q-args>)
+com! -nargs=* -bar -bang                        Nexplore        call netrw#Explore(-1,0,0,<q-args>)
+com! -nargs=* -bar -bang                        Pexplore        call netrw#Explore(-2,0,0,<q-args>)
+com! -nargs=* -bar -bang -count=0 -complete=dir Lexplore        call netrw#Lexplore(<count>,<bang>0,<q-args>)
+
+" Commands: NetrwSettings {{{2
+com! -nargs=0   NetrwSettings   call netrwSettings#NetrwSettings()
+com! -bang      NetrwClean      call netrw#Clean(<bang>0)
+
+" Maps:
+if !exists("g:netrw_nogx")
+  if maparg('gx','n') == ""
+    if !hasmapto('<Plug>NetrwBrowseX')
+      nmap <unique> gx <Plug>NetrwBrowseX
+    endif
+    nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(netrw#GX(),netrw#CheckIfRemote(netrw#GX()))<cr>
+  endif
+  if maparg('gx','x') == ""
+    if !hasmapto('<Plug>NetrwBrowseXVis')
+      xmap <unique> gx <Plug>NetrwBrowseXVis
+    endif
+    xno <silent> <Plug>NetrwBrowseXVis :<c-u>call netrw#BrowseXVis()<cr>
+  endif
+endif
+if exists("g:netrw_usetab") && g:netrw_usetab
+  if maparg('<c-tab>','n') == ""
+    nmap <unique> <c-tab> <Plug>NetrwShrink
+  endif
+  nno <silent> <Plug>NetrwShrink :call netrw#Shrink()<cr>
+endif
+
+" ---------------------------------------------------------------------
+" LocalBrowse: invokes netrw#LocalBrowseCheck() on directory buffers {{{2
+fun! s:LocalBrowse(dirname)
+  " Unfortunate interaction -- only DechoMsg debugging calls can be safely used here.
+  " Otherwise, the BufEnter event gets triggered when attempts to write to
+  " the DBG buffer are made.
+
+  if !exists("s:vimentered")
+    " If s:vimentered doesn't exist, then the VimEnter event hasn't fired.  It will,
+    " and so s:VimEnter() will then be calling this routine, but this time with s:vimentered defined.
+    "   call Dfunc("s:LocalBrowse(dirname<".a:dirname.">)  (s:vimentered doesn't exist)")
+    "   call Dret("s:LocalBrowse")
+    return
+  endif
+
+  "  call Dfunc("s:LocalBrowse(dirname<".a:dirname.">)  (s:vimentered=".s:vimentered.")")
+
+  if has("amiga")
+    " The check against '' is made for the Amiga, where the empty
+    " string is the current directory and not checking would break
+    " things such as the help command.
+    "   call Decho("(LocalBrowse) dirname<".a:dirname.">  (isdirectory, amiga)")
+    if a:dirname != '' && isdirectory(a:dirname)
+      sil! call netrw#LocalBrowseCheck(a:dirname)
+      if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt
+        exe w:netrw_bannercnt
+      endif
+    endif
+
+  elseif isdirectory(a:dirname)
+    "   call Decho("(LocalBrowse) dirname<".a:dirname."> ft=".&ft."  (isdirectory, not amiga)")
+    "   call Dredir("LocalBrowse ft last set: ","verbose set ft")
+    " Jul 13, 2021: for whatever reason, preceding the following call with
+    " a   sil!  causes an unbalanced if-endif vim error
+    call netrw#LocalBrowseCheck(a:dirname)
+    if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt
+      exe w:netrw_bannercnt
+    endif
+
+  else
+    " not a directory, ignore it
+    "   call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...")
+  endif
+
+  "  call Dret("s:LocalBrowse")
+endfun
+
+" ---------------------------------------------------------------------
+" s:VimEnter: after all vim startup stuff is done, this function is called. {{{2
+"             Its purpose: to look over all windows and run s:LocalBrowse() on
+"             them, which checks if they're directories and will create a directory
+"             listing when appropriate.
+"             It also sets s:vimentered, letting s:LocalBrowse() know that s:VimEnter()
+"             has already been called.
+fun! s:VimEnter(dirname)
+  "  call Dfunc("s:VimEnter(dirname<".a:dirname.">) expand(%)<".expand("%").">")
+  if has('nvim') || v:version < 802
+    " Johann Höchtl: reported that the call range... line causes an E488: Trailing characters
+    "                error with neovim. I suspect its because neovim hasn't updated with recent
+    "                vim patches. As is, this code will have problems with popup terminals
+    "                instantiated before the VimEnter event runs.
+    " Ingo Karkat  : E488 also in Vim 8.1.1602
+    let curwin       = winnr()
+    let s:vimentered = 1
+    windo call s:LocalBrowse(expand("%:p"))
+    exe curwin."wincmd w"
+  else
+    " the following complicated expression comes courtesy of lacygoill; largely does the same thing as the windo and
+    " wincmd which are commented out, but avoids some side effects. Allows popup terminal before VimEnter.
+    let s:vimentered = 1
+    call range(1, winnr('$'))->map({_, v -> win_execute(win_getid(v), 'call expand("%:p")->s:LocalBrowse()')})
+  endif
+  "  call Dret("s:VimEnter")
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwStatusLine: {{{1
+fun! NetrwStatusLine()
+  "  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 ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+  endif
+endfun
+
+" ------------------------------------------------------------------------
+" NetUserPass: set username and password for subsequent ftp transfer {{{1
+"   Usage:  :call NetUserPass()                 -- will prompt for userid and password
+"           :call NetUserPass("uid")            -- will prompt for password
+"           :call NetUserPass("uid","password") -- sets global userid and password
+fun! NetUserPass(...)
+
+  " get/set userid
+  if a:0 == 0
+    "  call Dfunc("NetUserPass(a:0<".a:0.">)")
+    if !exists("g:netrw_uid") || g:netrw_uid == ""
+      " via prompt
+      let g:netrw_uid= input('Enter username: ')
+    endif
+  else  " from command line
+    "  call Dfunc("NetUserPass(a:1<".a:1.">) {")
+    let g:netrw_uid= a:1
+  endif
+
+  " get password
+  if a:0 <= 1 " via prompt
+    "  call Decho("a:0=".a:0." case <=1:")
+    let g:netrw_passwd= inputsecret("Enter Password: ")
+  else " from command line
+    "  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
+    let g:netrw_passwd=a:2
+  endif
+  "  call Dret("NetUserPass")
+endfun
+
+" ------------------------------------------------------------------------
+" Modelines And Restoration: {{{1
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" vim:ts=8 sts=2 sw=2 et fdm=marker
diff --git a/runtime/syntax/netrw.vim b/runtime/pack/dist/opt/netrw/syntax/netrw.vim
similarity index 94%
rename from runtime/syntax/netrw.vim
rename to runtime/pack/dist/opt/netrw/syntax/netrw.vim
index f5b7fdc..a94af0c 100644
--- a/runtime/syntax/netrw.vim
+++ b/runtime/pack/dist/opt/netrw/syntax/netrw.vim
@@ -1,15 +1,12 @@
-" Language   : Netrw Listing Syntax
-" Maintainer:	This runtime file is looking for a new maintainer.
-" Former Maintainer: Charles E. Campbell
-" Last Change: Nov 07, 2019
-"   2024 Feb 19 by Vim Project (announce adoption)
-" Version    : 20
-" ---------------------------------------------------------------------
+" Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
+" Former Maintainer: Charles E Campbell
+" Upstream: <https://github.com/saccarosium/netrw.vim>
+" Language: Netrw Listing Syntax
+
 if exists("b:current_syntax")
  finish
 endif
 
-" ---------------------------------------------------------------------
 " Directory List Syntax Highlighting: {{{1
 syn cluster NetrwGroup		contains=netrwHide,netrwSortBy,netrwSortSeq,netrwQuickHelp,netrwVersion,netrwCopyTgt
 syn cluster NetrwTreeGroup	contains=netrwDir,netrwSymLink,netrwExe
diff --git a/runtime/plugin/netrwPlugin.vim b/runtime/plugin/netrwPlugin.vim
index d534b36..6d7a866 100644
--- a/runtime/plugin/netrwPlugin.vim
+++ b/runtime/plugin/netrwPlugin.vim
@@ -1,234 +1,9 @@
-" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
-"            PLUGIN SECTION
-" Maintainer:   This runtime file is looking for a new maintainer.
-" Date:         Sep 09, 2021
-" Last Change:
-"   2024 May 08 by Vim Project: cleanup legacy Win9X checks
-"   2024 Oct 27 by Vim Project: cleanup gx mapping
-"   2024 Oct 28 by Vim Project: further improvements
-"   2024 Oct 31 by Vim Project: use autoloaded functions
-"   2024 Dec 19 by Vim Project: change style (#16248)
-" Former Maintainer:   Charles E Campbell
-" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2021 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,
-"               netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
-"               *as is* and comes with no warranty of any kind, either
-"               expressed or implied. By using this plugin, you agree that
-"               in no event will the copyright holder be liable for any damages
-"               resulting from the use of this software.
-"
-"  But be doers of the Word, and not only hearers, deluding your own selves {{{1
-"  (James 1:22 RSV)
-" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-" Load Once: {{{1
-if &cp || exists("g:loaded_netrwPlugin")
+" Load the netrw package.
+
+if &cp || exists("g:loaded_netrw") || exists("g:loaded_netrwPlugin")
   finish
 endif
-let g:loaded_netrwPlugin = "v173"
-let s:keepcpo = &cpo
-set cpo&vim
-"DechoRemOn
 
-" ---------------------------------------------------------------------
-" Public Interface: {{{1
+packadd netrw
 
-" Commands Launch/URL {{{2
-command -complete=shellcmd -nargs=1   Launch  call netrw#Launch(trim(<q-args>))
-command -complete=file     -nargs=1   Open    call netrw#Open(trim(<q-args>))
-" " }}}
-" Local Browsing Autocmds: {{{2
-augroup FileExplorer
-  au!
-  au BufLeave *  if &ft != "netrw"|let w:netrw_prvfile= expand("%:p")|endif
-  au BufEnter * sil call s:LocalBrowse(expand("<amatch>"))
-  au VimEnter * sil call s:VimEnter(expand("<amatch>"))
-  if has("win32")
-    au BufEnter .* sil call s:LocalBrowse(expand("<amatch>"))
-  endif
-augroup END
-
-" Network Browsing Reading Writing: {{{2
-augroup Network
-  au!
-  au BufReadCmd   file://*                                                                                      call netrw#FileUrlEdit(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://*,file://*,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://*,http://*,file://*,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://*,http://*,file://*,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://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://*      exe 'Nsource '.fnameescape(expand("<amatch>"))
-  catch /^Vim\%((\a\+)\)\=:E216/
-    au SourcePre   ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://*      exe 'Nsource '.fnameescape(expand("<amatch>"))
-  endtry
-augroup END
-
-" Commands: :Nread, :Nwrite, :NetUserPass {{{2
-com! -count=1 -nargs=*  Nread           let s:svpos= winsaveview()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call winrestview(s:svpos)
-com! -range=% -nargs=*  Nwrite          let s:svpos= winsaveview()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call winrestview(s:svpos)
-com! -nargs=*           NetUserPass     call NetUserPass(<f-args>)
-com! -nargs=*           Nsource         let s:svpos= winsaveview()<bar>call netrw#NetSource(<f-args>)<bar>call winrestview(s:svpos)
-com! -nargs=?           Ntree           call netrw#SetTreetop(1,<q-args>)
-
-" Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2
-com! -nargs=* -bar -bang -count=0 -complete=dir Explore         call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
-com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore        call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
-com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore        call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
-com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore        call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
-com! -nargs=* -bar       -count=0 -complete=dir Texplore        call netrw#Explore(<count>,0,6        ,<q-args>)
-com! -nargs=* -bar -bang                        Nexplore        call netrw#Explore(-1,0,0,<q-args>)
-com! -nargs=* -bar -bang                        Pexplore        call netrw#Explore(-2,0,0,<q-args>)
-com! -nargs=* -bar -bang -count=0 -complete=dir Lexplore        call netrw#Lexplore(<count>,<bang>0,<q-args>)
-
-" Commands: NetrwSettings {{{2
-com! -nargs=0   NetrwSettings   call netrwSettings#NetrwSettings()
-com! -bang      NetrwClean      call netrw#Clean(<bang>0)
-
-" Maps:
-if !exists("g:netrw_nogx")
-  if maparg('gx','n') == ""
-    if !hasmapto('<Plug>NetrwBrowseX')
-      nmap <unique> gx <Plug>NetrwBrowseX
-    endif
-    nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(netrw#GX(),netrw#CheckIfRemote(netrw#GX()))<cr>
-  endif
-  if maparg('gx','x') == ""
-    if !hasmapto('<Plug>NetrwBrowseXVis')
-      xmap <unique> gx <Plug>NetrwBrowseXVis
-    endif
-    xno <silent> <Plug>NetrwBrowseXVis :<c-u>call netrw#BrowseXVis()<cr>
-  endif
-endif
-if exists("g:netrw_usetab") && g:netrw_usetab
-  if maparg('<c-tab>','n') == ""
-    nmap <unique> <c-tab> <Plug>NetrwShrink
-  endif
-  nno <silent> <Plug>NetrwShrink :call netrw#Shrink()<cr>
-endif
-
-" ---------------------------------------------------------------------
-" LocalBrowse: invokes netrw#LocalBrowseCheck() on directory buffers {{{2
-fun! s:LocalBrowse(dirname)
-  " Unfortunate interaction -- only DechoMsg debugging calls can be safely used here.
-  " Otherwise, the BufEnter event gets triggered when attempts to write to
-  " the DBG buffer are made.
-
-  if !exists("s:vimentered")
-    " If s:vimentered doesn't exist, then the VimEnter event hasn't fired.  It will,
-    " and so s:VimEnter() will then be calling this routine, but this time with s:vimentered defined.
-    "   call Dfunc("s:LocalBrowse(dirname<".a:dirname.">)  (s:vimentered doesn't exist)")
-    "   call Dret("s:LocalBrowse")
-    return
-  endif
-
-  "  call Dfunc("s:LocalBrowse(dirname<".a:dirname.">)  (s:vimentered=".s:vimentered.")")
-
-  if has("amiga")
-    " The check against '' is made for the Amiga, where the empty
-    " string is the current directory and not checking would break
-    " things such as the help command.
-    "   call Decho("(LocalBrowse) dirname<".a:dirname.">  (isdirectory, amiga)")
-    if a:dirname != '' && isdirectory(a:dirname)
-      sil! call netrw#LocalBrowseCheck(a:dirname)
-      if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt
-        exe w:netrw_bannercnt
-      endif
-    endif
-
-  elseif isdirectory(a:dirname)
-    "   call Decho("(LocalBrowse) dirname<".a:dirname."> ft=".&ft."  (isdirectory, not amiga)")
-    "   call Dredir("LocalBrowse ft last set: ","verbose set ft")
-    " Jul 13, 2021: for whatever reason, preceding the following call with
-    " a   sil!  causes an unbalanced if-endif vim error
-    call netrw#LocalBrowseCheck(a:dirname)
-    if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt
-      exe w:netrw_bannercnt
-    endif
-
-  else
-    " not a directory, ignore it
-    "   call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...")
-  endif
-
-  "  call Dret("s:LocalBrowse")
-endfun
-
-" ---------------------------------------------------------------------
-" s:VimEnter: after all vim startup stuff is done, this function is called. {{{2
-"             Its purpose: to look over all windows and run s:LocalBrowse() on
-"             them, which checks if they're directories and will create a directory
-"             listing when appropriate.
-"             It also sets s:vimentered, letting s:LocalBrowse() know that s:VimEnter()
-"             has already been called.
-fun! s:VimEnter(dirname)
-  "  call Dfunc("s:VimEnter(dirname<".a:dirname.">) expand(%)<".expand("%").">")
-  if has('nvim') || v:version < 802
-    " Johann Höchtl: reported that the call range... line causes an E488: Trailing characters
-    "                error with neovim. I suspect its because neovim hasn't updated with recent
-    "                vim patches. As is, this code will have problems with popup terminals
-    "                instantiated before the VimEnter event runs.
-    " Ingo Karkat  : E488 also in Vim 8.1.1602
-    let curwin       = winnr()
-    let s:vimentered = 1
-    windo call s:LocalBrowse(expand("%:p"))
-    exe curwin."wincmd w"
-  else
-    " the following complicated expression comes courtesy of lacygoill; largely does the same thing as the windo and
-    " wincmd which are commented out, but avoids some side effects. Allows popup terminal before VimEnter.
-    let s:vimentered = 1
-    call range(1, winnr('$'))->map({_, v -> win_execute(win_getid(v), 'call expand("%:p")->s:LocalBrowse()')})
-  endif
-  "  call Dret("s:VimEnter")
-endfun
-
-" ---------------------------------------------------------------------
-" NetrwStatusLine: {{{1
-fun! NetrwStatusLine()
-  "  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 ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
-  endif
-endfun
-
-" ------------------------------------------------------------------------
-" NetUserPass: set username and password for subsequent ftp transfer {{{1
-"   Usage:  :call NetUserPass()                 -- will prompt for userid and password
-"           :call NetUserPass("uid")            -- will prompt for password
-"           :call NetUserPass("uid","password") -- sets global userid and password
-fun! NetUserPass(...)
-
-  " get/set userid
-  if a:0 == 0
-    "  call Dfunc("NetUserPass(a:0<".a:0.">)")
-    if !exists("g:netrw_uid") || g:netrw_uid == ""
-      " via prompt
-      let g:netrw_uid= input('Enter username: ')
-    endif
-  else  " from command line
-    "  call Dfunc("NetUserPass(a:1<".a:1.">) {")
-    let g:netrw_uid= a:1
-  endif
-
-  " get password
-  if a:0 <= 1 " via prompt
-    "  call Decho("a:0=".a:0." case <=1:")
-    let g:netrw_passwd= inputsecret("Enter Password: ")
-  else " from command line
-    "  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
-    let g:netrw_passwd=a:2
-  endif
-  "  call Dret("NetUserPass")
-endfun
-
-" ------------------------------------------------------------------------
-" Modelines And Restoration: {{{1
-let &cpo= s:keepcpo
-unlet s:keepcpo
-" vim:ts=8 sts=2 sw=2 et fdm=marker
+" vim:ts=8 sts=2 sw=2 et
